如何将带有语言代码的语言列表存储到yaml和popuplate中:以rails形式收集?我现在有下面的例子但是失败了,关于什么是解决这个问题的最佳选择的任何建议?
Application.yml:
development:
language: [['English', 'en'], ['French', 'fr']]
production:
language: [['English', 'en']
以铁轨形式:
= f.input :locale, :collection => APP_CONFIG['languages']
答案 0 :(得分:2)
出于某种原因,我从来没有想过在我的i18n YAML文件中存储比字符串更复杂的数据结构,但是你的问题让我在这种情况下改变了我的方式,所以非常感谢(和+1) !
我最初在我的ApplicationHelper
中有一个与@Sachin R的解决方案类似的方法(虽然与特定的Rails环境无关),如下所示:
应用/助手/ application_helper.rb 强>
def locale_language_labels
[
{ label: t('layouts.locale_selector.en'), locale: 'en' },
{ label: t('layouts.locale_selector.it'), locale: 'it' },
{ label: t('layouts.locale_selector.ja'), locale: 'ja' }
]
end
它取出了以下值(当然取决于区域设置):
<强>配置/区域设置/布局/ layouts_en.yml 强>
en:
layouts:
locale_selector:
en: English
it: Italiano (Italian)
ja: 日本語 (Japanese)
我的语言环境选择器(Twitter Bootstrap格式化)将填充这些值:
应用/视图/布局/ _locale_selector.html.haml 强>
%li#fat-menu.dropdown
%a.dropdown-toggle{"data-toggle" => "dropdown", href: "#"}
%i.icon-globe
= t('.language')
%b.caret
%ul.dropdown-menu
- locale_language_labels.each do |language|
%li
= link_to language[:label],
controller: controller,
action: action,
set_locale: language[:locale],
page: page
现在,我已经摆脱了locale_language_labels
方法并将我的语言环境选择器语言放在YAML文件中的哈希值中,这可能是您的问题的一个很好的候选者。我的代码现在如下所示:
<强>配置/区域设置/布局/ layouts_en.yml 强>
en:
layouts:
locale_selector:
language: Language
language_labels: { en: English,
it: Italiano (Italian),
ja: 日本語 (Japanese) }
应用/视图/布局/ _locale_selector.html.haml 强>
%li#fat-menu.dropdown
%a.dropdown-toggle{"data-toggle" => "dropdown", href: "#"}
%i.icon-globe
= t('.language')
%b.caret
%ul.dropdown-menu
- t('.language_labels').each_pair do |locale, label|
%li
= link_to label,
controller: controller,
action: action,
set_locale: locale,
page: page
将语言标签与YAML文件中的语言环境配对对我来说更有意义,因为它们是紧密耦合的对,现在看来YAML中定义了一半而辅助中定义了另一半似乎不自然。 / p>
答案 1 :(得分:1)
在某些应用程序hepler文件中创建一个辅助方法
def getLangCollection()
if Rails.env == 'development'
language = [['English', 'en'], ['French', 'fr']]
elsif Rails.env == 'production'
language = [['English', 'en']
else
language = [['English', 'en']
return language
end