在Rails中将abrreviation语言转换为完整(en - >英语)的更好方法是什么?

时间:2012-10-02 07:05:37

标签: ruby-on-rails

我需要从缩写中创建完整的语言名称。

我尝试使用普通方式(不工作)

def long(lang)
 if lang == "en"
  lang == "English"
 elsif lang == "ru"
  lang == "Russian"
 end
 ...
end

有什么更好的方法呢?

2 个答案:

答案 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)"