2

如何将具有语言代码的语言列表存储到 yaml 中并以 rails 形式填充 :collection?我现在有下面的例子但失败了,关于解决这个问题的最佳选择有什么建议吗?

应用程序.yml:

development:
  language:     [['English', 'en'], ['French', 'fr']]

production:
  language:     [['English', 'en']

以导轨形式:

= f.input :locale, :collection => APP_CONFIG['languages']
4

2 回答 2

2

出于某种原因,我从没想过在 i18n YAML 文件中存储比字符串更复杂的数据结构,但是你的问题让我深思熟虑,在这种情况下改变我的方式,所以非常感谢你(和 +1)!

ApplicationHelper我最初在我的(尽管与特定的 Rails 环境无关)中有一个类似于@Sachin R 解决方案的方法,如下所示:

app/helpers/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

它提取了以下值(当然取决于语言环境):

config/locales/layouts/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 文件的哈希中,这可能是您问题的一个很好的候选者。我的代码现在如下所示:

config/locales/layouts/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 中定义一半而在帮助程序中定义另一半似乎并不自然。

于 2013-05-29T14:15:47.233 回答
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
于 2013-05-29T11:26:23.237 回答