我正在尝试使用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
我的下一次尝试是使用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
答案 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" %>