2017-06-12 97 views
0

我想将语言环境代码与特定语言名称进行匹配。在I18n/rails中是否有任何构建函数会将语言名称返回到相应的语言环境。安装宝石是唯一的方法吗?使用I18n语言环境的Rails语言名称

+2

您是否要求一种将''en“'映射为''英文'',''fr”'为'“French”'等等的方法? –

+1

谷歌5秒,我发现:https://github.com/grosser/i18n_data - 解决你的问题吗? –

+0

@TomLord是的,这是我reuiqired的映射。这是解决问题的额外宝石。我想知道是否有其他选择没有额外的宝石。 – Charles

回答

4

看来在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', ... }

+0

你会在哪里储存''德语''(例如)? – Stefan

+0

@Stefan,在这种情况下,您必须拥有带language_name:“German”键的de.yml,并随后使用所有您感兴趣的语言的所有语言环境yamls。这就是为什么(对我个人而言)这不是理想解决方案(除非你已经拥有所有区域yamls) –

+1

不应该有'de.yml'具有德语内容,例如'language_name:“Deutsch”'? – Stefan

2

如果不安装额外的gem,你可以创建自己的键/值对(将其存储在json文件中或存储到数据库中),然后查找关键值,例如“de”并读取值(在这种情况下, “德语”)。它需要一些手工工作(或者设置一个rake任务或者某些东西来以某种信息源的适当格式为你构建它),但是在这种情况下你不依赖于额外的gem(这不需要彻底地通过代码,可能会对您的应用程序性能/内存产生比您的自定义实现更大的影响,以满足您所需的所有特定需求)。

虽然我不知道任何可以返回整个语言名称的函数中构建的轨道。您可以返回语言缩写(例如用于html lang属性),但是我认为就内置函数而言,它会停止在那里)。

+1

@Charles,我同意在数据库中存储不一定是最好的解决方案,它取决于你是否已经有了一个表格,在这个表格中包含另一列是有意义的(例如,你已经有一张关于每个国家的信息的表格,环境)。我的观点是你必须把它存储在某个地方。如果你已经有了各种语言的yamls,那么将它存储在locale yamls本身就是一个有效和简洁的解决方案,否则我个人更倾向于将它存储在json文件中(这样你就可以将所有东西放在一个地方,而只需要生成一个附加文件几十个文件):) –

+0

@ I.varga我同意你的意见 – Charles

相关问题