我需要从缩写中创建完整的语言名称。
我尝试使用普通方式(不工作)
def long(lang)
if lang == "en"
lang == "English"
elsif lang == "ru"
lang == "Russian"
end
...
end
有什么更好的方法呢?
答案 0 :(得分:2)
它不起作用,因为在赋值运算符应该有比较运算符时。看看这个:
def long(lang)
if lang == "en"
lang = "English"
elsif lang == "ru"
lang = "Russian"
...
end
lang
end
或者你可以让它更清洁,更短
def long lang
map = {en: 'English',
ru: 'Russian'}
map[lang.to_sym]
end
甚至更短(通过消除临时变量)
def long lang
{
en: 'English',
ru: 'Russian'
}[lang.to_sym]
end
答案 1 :(得分:1)
I18n
当前区域设置,可用区域设置等是符号,而不是字符串。所以你会有
def long(language)
case language
when :en
"English (symbol)"
when "en"
"English (string)"
else
"something else"
end
end
>> long(I18n.default_locale)
=> "English (symbol)"
如果您想按预期进行操作,则必须先将其转换为字符串。
def long(language)
case language.to_s
when :en
"English (symbol)"
when "en"
"English (string)"
else
"something else"
end
end
>> long(I18n.default_locale)
=> "English (string)"