Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 用于选择和i18n的选项_Ruby On Rails_Internationalization - Fatal编程技术网

Ruby on rails 用于选择和i18n的选项

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”

我们的Rails应用程序有一个数组中存储的有效语言代码列表

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')
)
希望这有帮助