我知道我可以在区域设置文件中更改ActiveRecord名称,但是有一种方法可以根据上下文而不是区域设置来更改它们(同时仍在应用程序中使用区域设置文件)?
举一个简单的例子(在多种情况下,我需要完成此操作),如果我在向导中有一个地址表单,并且用户选择了一个国家,那么如何更改{{1 }}属性可向选择美国的人显示override fun attachBaseContext(newBase: Context?) {
super.attachBaseContext(newBase)
SplitCompat.install(this)
}
,向选择英国的人显示:zipcode
?
编辑:我的意思是,当模型属性(国家/地区)更改时,如何根据国家/地区选择来更改(邮政编码)的人类可读属性。用户的语言环境不会改变(我已经在使用语言环境文件进行翻译了。)
答案 0 :(得分:1)
最好的本地化方法是使用I18n,请查看此帖子:https://guides.rubyonrails.org/i18n.html#setup-the-rails-application-for-internationalization
基本I18n
首先在您的application.rb控制器中添加语言环境
config.i18n.available_locales = ["en-GB", "en-US"]
config.i18n.default_locale = "en-US"
然后在en-US.yml
下创建2个文件en-GB.yml
和config/locales
# en-GB.yml
en-Gb:
zipcode: "PostCode"
# en-US.yml
en-US:
zipcode: "ZipCode"
然后在您的控制器中,您需要设置将用于翻译的词典。它由I18n.locale
变量定义。
# example when locale is passing through params
before_action :set_locale
def set_locale
I18n.locale = I18n.available_locales.include?(params[:locale]) ? params[:locale] : I18n.default_locale
end
最后在您看来: <%= t('邮政编码')%>
或者如果您需要红宝石文件:
I18n.t('zipcode')
本地化ActiveRecord属性
与上述相同,您可以在config/locales
下创建一个active_record.en-US.yml
# active_record.en-US.yml
en-US:
activerecord:
attributes:
your_model_name:
zipcode: 'ZipCode'
答案 1 :(得分:0)
我接受了另一个答案,因为我最终使用语言环境文件作为解决方案的一部分。
但是,我的做法有点古怪:
{language}-{selected_country}
alias_attributes
中使用FormObject
,以最大限度地减少对上述黑客的需求。