Skip to content

Commit 818437c

Browse files
committed
Fix bug with parametrize when locale is passed
Also add tests for parametrize and transliterate
1 parent 878e980 commit 818437c

File tree

4 files changed

+19
-1
lines changed

4 files changed

+19
-1
lines changed

activesupport/lib/active_support/inflector/transliterate.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ def transliterate(string, replacement = "?", locale: nil)
9090
#
9191
def parameterize(string, separator: "-", preserve_case: false, locale: nil)
9292
# Replace accented chars with their ASCII equivalents.
93-
parameterized_string = transliterate(string, locale)
93+
parameterized_string = transliterate(string, locale: locale)
9494

9595
# Turn unwanted chars into the separator.
9696
parameterized_string.gsub!(/[^a-z0-9\-_]+/i, separator)

activesupport/test/core_ext/string_ext_test.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,12 @@ def test_string_parameterized_underscore_preserve_case
206206
end
207207
end
208208

209+
def test_parameterize_with_locale
210+
word = "Fünf autos"
211+
I18n.backend.store_translations(:de, i18n: { transliterate: { rule: { "ü" => "ue" } } })
212+
assert_equal("fuenf-autos", word.parameterize(locale: :de))
213+
end
214+
209215
def test_humanize
210216
UnderscoreToHuman.each do |underscore, human|
211217
assert_equal(human, underscore.humanize)

activesupport/test/inflector_test.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -304,6 +304,12 @@ def test_parameterize_with_multi_character_separator
304304
end
305305
end
306306

307+
def test_parameterize_with_locale
308+
word = "Fünf autos"
309+
I18n.backend.store_translations(:de, i18n: { transliterate: { rule: { "ü" => "ue" } } })
310+
assert_equal("fuenf-autos", ActiveSupport::Inflector.parameterize(word, locale: :de))
311+
end
312+
307313
def test_classify
308314
ClassNameToTableName.each do |class_name, table_name|
309315
assert_equal(class_name, ActiveSupport::Inflector.classify(table_name))

activesupport/test/transliterate_test.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,12 @@ def test_transliterate_should_work_with_custom_i18n_rules_and_uncomposed_utf8
3030
I18n.locale = default_locale
3131
end
3232

33+
def test_transliterate_respects_the_locale_argument
34+
char = [117, 776].pack("U*") # "ü" as ASCII "u" plus COMBINING DIAERESIS
35+
I18n.backend.store_translations(:de, i18n: { transliterate: { rule: { "ü" => "ue" } } })
36+
assert_equal "ue", ActiveSupport::Inflector.transliterate(char, locale: :de)
37+
end
38+
3339
def test_transliterate_should_allow_a_custom_replacement_char
3440
assert_equal "a*b", ActiveSupport::Inflector.transliterate("a索b", "*")
3541
end

0 commit comments

Comments
 (0)