使用I18n语言环境的Rails语言名称
看来在I18n中没有这种方法。 如果你只需要当前的语言名称,您可以轻松地将其包含在相应的区域设置文件:
# config/locales/en.yml
en:
language_name: "English"
,并得到它像往常一样:I18n.t('language_name')
或I18n.t('language_name', locale: :en)
。
对于一般用途,您可以使用:https://github.com/hexorx/countries或将您自己的映射初始化为红宝石哈希:{ en: 'English', ... }
。
如果不安装额外的gem,你可以创建自己的键/值对(将其存储在json文件中或存储到数据库中),然后查找关键值,例如“de”并读取值(在这种情况下, “德语”)。它需要一些手工工作(或者设置一个rake任务或者某些东西来以某种信息源的适当格式为你构建它),但是在这种情况下你不依赖于额外的gem(这不需要彻底地通过代码,可能会对您的应用程序性能/内存产生比您的自定义实现更大的影响,以满足您所需的所有特定需求)。
虽然我不知道任何可以返回整个语言名称的函数中构建的轨道。您可以返回语言缩写(例如用于html lang属性),但是我认为就内置函数而言,它会停止在那里)。
@Charles,我同意在数据库中存储不一定是最好的解决方案,它取决于你是否已经有了一个表格,在这个表格中包含另一列是有意义的(例如,你已经有一张关于每个国家的信息的表格,环境)。我的观点是你必须把它存储在某个地方。如果你已经有了各种语言的yamls,那么将它存储在locale yamls本身就是一个有效和简洁的解决方案,否则我个人更倾向于将它存储在json文件中(这样你就可以将所有东西放在一个地方,而只需要生成一个附加文件几十个文件):) –
@ I.varga我同意你的意见 – Charles
您是否要求一种将''en“'映射为''英文'',''fr”'为'“French”'等等的方法? –
谷歌5秒,我发现:https://github.com/grosser/i18n_data - 解决你的问题吗? –
@TomLord是的,这是我reuiqired的映射。这是解决问题的额外宝石。我想知道是否有其他选择没有额外的宝石。 – Charles