Ruby on rails 用于选择和i18n的选项
我们的Rails应用程序有一个数组中存储的有效语言代码列表Ruby on rails 用于选择和i18n的选项,ruby-on-rails,internationalization,Ruby On Rails,Internationalization,我们的Rails应用程序有一个数组中存储的有效语言代码列表 LANGUAGES = [:en,:fr,:es,:tr,:pt,:de,:it,:ga,:gr] 将通过区域设置文件来翻译 en: 'English' de: 'German' ga: 'Irish' fr: 'French' etc. 我想在options\u中显示翻译后的字符串,以供选择,但此代码正在将翻译后的值传递给控制器,例如:“French” 请注意,仅当尚未填充此选择时,此选择才会默认为“fr”
LANGUAGES = [:en,:fr,:es,:tr,:pt,:de,:it,:ga,:gr]
将通过区域设置文件来翻译
en: 'English'
de: 'German'
ga: 'Irish'
fr: 'French'
etc.
我想在options\u中显示翻译后的字符串,以供选择,但此代码正在将翻译后的值传递给控制器,例如:“French”
请注意,仅当尚未填充此选择时,此选择才会默认为“fr”。参考此处的文档:
我想你需要的是如下的东西:
f.select :language, options_for_select(
LanguageName::LANGUAGES.map { |lang| [t("languages.#{lang}"), lang] }.to_h
f.object.language || t('languages.fr')
)
f.select :language, options_for_select(
map_locale_names(locale: params[:locale]),
f.object.language || t('languages.fr')
)
当然,最好将方法提取到帮助文件中:
class ApplicationHelper
def map_locale_names(locale)
LanguageName::LANGUAGES.map { |lang| [t("languages.#{lang}", locale: locale), lang] }.to_h
end
end
因此,您的方法将变为以下内容:
f.select :language, options_for_select(
LanguageName::LANGUAGES.map { |lang| [t("languages.#{lang}"), lang] }.to_h
f.object.language || t('languages.fr')
)
f.select :language, options_for_select(
map_locale_names(locale: params[:locale]),
f.object.language || t('languages.fr')
)
希望这有帮助