0

我需要从缩写中制作完整的语言名称。

我试图用简单的方式来制作它(不工作)

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

有什么更好的方法来做到这一点?

4

2 回答 2

3

它不起作用,因为当赋值运算符应该是比较运算符时。看一下这个:

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
于 2012-10-02T07:31:06.850 回答
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)"
于 2012-10-02T08:03:24.557 回答