【问题标题】:Rails - Language show label not value - Localised Language Select & Language List gems with Simple FormRails - 语言显示标签不是值 - 具有简单形式的本地化语言选择和语言列表宝石
【发布时间】:2015-10-01 07:16:35
【问题描述】:

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

我很难理解简单的形式(很重要)。

我当前的问题是我希望我的显示页面呈现语言的名称,而不是它的值。例如,我想要在当前显示“en”的地方使用“English”。

在我的表格中,我有:

  <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>

我在所有内容上都有 label: 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。我安装了它并尝试生成语言环境(尽管它给了我一个错误,说找不到生成器本地化_语言选择:本地化。这个 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

【问题讨论】:

  • 如果你想要一个多选,你不能用它作为一个选择......有道理,对吧?在您的 I18n 中,您需要将其命名为“options.profile.langauges”....
  • 并且你需要输入你的密钥集合,用户可以选择。我的是语言环境,我很确定你不(!)想要那个
  • 我要改变什么? simple_form.yml 文件?我用 options.profile.langauges 交换语言?不确定如何处理您的建议??
  • 你的 yml 键错误....
  • 知道如何解决它们吗?我从你的帖子中复制的。不知道在哪里可以找到这个参考

标签: ruby-on-rails simple-form


【解决方案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  

【讨论】:

  • 我试过这个。我已经复制了我的尝试和上面的输出
  • 感谢您努力阐明这一点并解释其理由。我尝试过这个。不幸的是,它不起作用。我得到了与上面提到的相同的错误。甚至菜单中的英文选项也呈现为“en”。也许我的系统中还有其他不兼容的东西。
【解决方案2】:

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

config/initializer/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。当我在你的 yml 中说它的“key.key.key”很明显时

 key:
   key: 
     key:

而不是

key.key.key:

【讨论】:

    【解决方案3】:

    我的工作建议是:

    在 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" %>
    

    还有,多田!你的屏幕上应该有这样的列表

    【讨论】:

      猜你喜欢
      • 2016-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多