Rails - 语言显示标签不值 - 本地化语言选择&使用简单表单的语言列表宝石

时间:2015-10-01 07:16:35

标签: ruby-on-rails simple-form

我正在尝试使用Rails 4和简单的表单和引导程序创建一个应用程序。我也试图使用rails本地化语言选择gem来解决这个问题。那次尝试失败了,然后我找到了语言列表宝石。我的下一次尝试就是那个宝石。

我正在努力理解简单的形式(大时间)。

我当前的问题是我希望我的展示页面呈现语言的名称,而不是它的值。例如,我想要'英语',我现在正在显示'en'。

在我的表格中,我有:

  <div class="row">
      <div class="col-md-3 col-md-offset-1">
        <%= f.label  'What are your working languages?',   :class => 'question-project' %>
      </div>
      <div class="col-md-7"><div class="response-project">
       <%= f.input :languages, label: false do %>
        <%= f.select :languages,  options_for_select(Profile.language_list, @profile.languages),  :input_html => {:style=> 'width: 50%', class: 'response-project'} %> 
        <% end %> 
      </div></div>
    </div>

我对所有内容都有标签:false,因为我似乎无法使用简单的表单来使用我的CSS。相反,它在所有东西上都强加了丑陋的黑色字体。这可能是出了什么问题的线索。

在我的个人资料模型中,我有:

def self.language_list
    [['English', 'en'], ['French', 'fr'], ['German', 'de'], ['Spanish', 'spa']]
  end

我的第二个问题是,如何让用户进行多项选择。如果这就是他们所说的话,我希望他们点击法语和英语。

任何提示?

我尝试了以下建议:

在个人资料表格中:

<div class="row">
      <div class="col-md-3 col-md-offset-1">
        <%= f.label  'What are your working languages?',   :class => 'question-project' %>
      </div>
      <div class="col-md-7"><div class="response-project">

        <%= f.input :languages, as: :select, collection: I18n.available_locales.sort %>
      </div></div>
    </div>

在simple_form.yml中:

en:
  simple_form:
    "yes": 'Yes'
    "no": 'No'
    required:
      text: 'required'
      mark: ''
      # You can uncomment the line below if you need to overwrite the whole required html.
      # When using html, text and mark won't be used.
      # html: '<abbr title="required">*</abbr>'
    error_notification:
      default_message: "Please review the problems below:"
    # Labels and hints examples
    # labels:
    #   defaults:
    #     password: 'Password'
    #   user:
    #     new:
    #       email: 'E-mail to sign in.'
    #     edit:
    #       email: 'E-mail.'
    # hints:
    #   defaults:
    #     username: 'User name to sign in.'
    #     password: 'No special characters, please.'


    options:
      profile_setting:
        languages: 
          en: English
          de: German
          th: Thai
          ru: Russian
          se: Swedish
          it: Italian
          es: Spanish  

输出是选择菜单中的选项是:

development
en
production 
test

我将simple_form.yml更改为:

options.profile.languages:
  en: English
  de: German
  th: Thai
  ru: Russian
  se: Swedish
  it: Italian
  es: Spanish  

我获得与其他简单格式yml排列相同的输出。

我的下一次尝试是使用localised_language_select gem。我安装了它并尝试生成语言环境(虽然它给我一个错误,说找不到生成器localized_language_select:locales。这个gem的文档提供了如何使用它的示例如下:

Usage example <%= localized_language_select(:user, :language, [], :include_blank => 'Please choose...') %>

所以我在我的个人资料表格中将其改编为以下内容:

 <%= f.select localised_language_select(:languages), :include_blank => 'Please choose'  %>

为了与示例保持一致,我也尝试过:

<%= f.select localised_language_select(:profile, :languages), :include_blank => 'Please choose'  %>

在上述每种情况中,我都会收到此错误:

undefined method `localised_language_select' for #<#<Class:0x007faeea108f38>:0x007faeeb300d30>

我也尝试过:

<%= f.localised_language_select :languages, :include_blank => 'Please choose'  %>

我收到此错误:

undefined method `localised_language_select' for #<SimpleForm::FormBuilder:0x007faee35f5318>

我的下一次尝试是安装language_list gem。

然后我在表单元素中设置了它:

 <%= f.collection_select :languages, options_from_collection_for_select(LanguageList::COMMONLANGUAGES, "ISO_639_1", "name") %>

我收到此错误:

NameError at /profiles/2/edit
uninitialized constant LanguageList::COMMONLANGUAGES

3 个答案:

答案 0 :(得分:1)

为什么不用简单的表格I18n?

我们为用户执行以下操作,可以选择他当前的语言(i18n语言环境)

在视图

=f.input :language, as: :select, collection: I18n.available_locales.sort

然后结束simple_form.yml

en:
  simple_form:
    options:
      user_setting:
        language: 
          en: English
          de: German
          th: Thai
          ru: Russian
          se: Swedish
          it: Italian
          es: Spanish  

答案 1 :(得分:0)

好吧,第二个答案。让我做你所有的工作

配置/初始化/ available_languages.rb

AVAILABLE_LANGUAGES = [:en, :de, :fr, :es, :th, :jp]

模板

<div class="row">
      <div class="col-md-3 col-md-offset-1">
        <%= f.label  'What are your working languages?',   :class => 'question-project' %>
      </div>
      <div class="col-md-7"><div class="response-project">

        <%= f.input :languages, as: :select, collection: AVAILABLE_LANGUAGES %>
      </div></div>
    </div>

假设您的模型被称为配置文件(不是user_profile,而不是user :: profile或其他)

en:
  simple_form:
    options:
      profile:
        languages: 
          en: English
          de: German
          th: Thai
          ru: Russian
          se: Swedish
          it: Italian
          es: Spanish  

这是明确的工作。

也许你应该阅读有关yml-keys的内容。当我说你的“key.key.key”明显在你的yml当时

 key:
   key: 
     key:

而不是

key.key.key:

答案 2 :(得分:0)

我的工作主张是:

在config / initializer / available_languages.rb

中创建以下内容
AVAILABLE_LANGUAGES = {en: "English", de: "Deutsche", fr: "Français", es: "Español"}

然后在表单中放置以下代码:

<%= f.input :default_lang, as: :select, collection: AVAILABLE_LANGUAGES.sort.map {|k,v| [v,k]}, label: "Default language" %>

而且,tada!您应该在屏幕上有这样的列表 enter image description here