数据库中的语言环境信息
locale information in database
我是 rails 上 ruby 的新手,我试图找出一种根据每个用户选择的国家/地区设置区域设置的方法。
我将语言环境标签(如 :en)存储在数据库中,但当我尝试将其设置为 I18n.locale 时,它被识别为字符串并给出“:en”不是有效的语言环境错误。如何将字符串转换为 R18n.locale 对象?
你看过the docs了吗?
引自那里:
2.2.1 从域名设置语言环境
您可以选择从运行应用程序的域名设置语言环境。例如,我们希望 www.example.com 加载英语(或默认)语言环境,www.example.es 加载西班牙语语言环境。因此顶级域名用于区域设置。这有几个优点:
语言环境是 URL 的明显部分。
人们直观地掌握内容将以何种语言显示。
在 Rails 中实现起来非常简单。
搜索引擎似乎喜欢不同语言的内容存在于不同的、相互关联的域中。
您可以在您的 ApplicationController 中像这样实现它:
before_action :set_locale
def set_locale
I18n.locale = extract_locale_from_tld || I18n.default_locale
end
# Get locale from top-level domain or return +nil+ if such locale is not available
# You have to put something like:
# 127.0.0.1 application.com
# 127.0.0.1 application.it
# 127.0.0.1 application.pl
# in your /etc/hosts file to try this out locally
def extract_locale_from_tld
parsed_locale = request.host.split('.').last
I18n.available_locales.map(&:to_s).include?(parsed_locale) ? parsed_locale : nil
end
您没有说明您的语言来源。如果您尝试使用 URL,那么文档已经回答了您的问题。如果您使用其他方法而不是此行可能仍然有用:
I18n.available_locales.map(&:to_s).include?(my_locale) ? my_locale : nil
其中 my_locale
是您尝试使用的语言环境。
如果有帮助请告诉我!
编辑:
似乎语言环境存储为 "en" 或 "uk",因此请确保您的字符串匹配。我测试了以下代码,它对我有用
def set_locale
I18n.locale = current_user.try(get_locale(<current_user.locale>) || I18n.default_locale
end
def get_locale(my_loc)
I18n.available_locales.each do |loc|
if loc.to_s == my_loc
return loc
end
end
nil
end
我是 rails 上 ruby 的新手,我试图找出一种根据每个用户选择的国家/地区设置区域设置的方法。
我将语言环境标签(如 :en)存储在数据库中,但当我尝试将其设置为 I18n.locale 时,它被识别为字符串并给出“:en”不是有效的语言环境错误。如何将字符串转换为 R18n.locale 对象?
你看过the docs了吗?
引自那里:
2.2.1 从域名设置语言环境
您可以选择从运行应用程序的域名设置语言环境。例如,我们希望 www.example.com 加载英语(或默认)语言环境,www.example.es 加载西班牙语语言环境。因此顶级域名用于区域设置。这有几个优点:
语言环境是 URL 的明显部分。 人们直观地掌握内容将以何种语言显示。 在 Rails 中实现起来非常简单。 搜索引擎似乎喜欢不同语言的内容存在于不同的、相互关联的域中。
您可以在您的 ApplicationController 中像这样实现它:
before_action :set_locale
def set_locale
I18n.locale = extract_locale_from_tld || I18n.default_locale
end
# Get locale from top-level domain or return +nil+ if such locale is not available
# You have to put something like:
# 127.0.0.1 application.com
# 127.0.0.1 application.it
# 127.0.0.1 application.pl
# in your /etc/hosts file to try this out locally
def extract_locale_from_tld
parsed_locale = request.host.split('.').last
I18n.available_locales.map(&:to_s).include?(parsed_locale) ? parsed_locale : nil
end
您没有说明您的语言来源。如果您尝试使用 URL,那么文档已经回答了您的问题。如果您使用其他方法而不是此行可能仍然有用:
I18n.available_locales.map(&:to_s).include?(my_locale) ? my_locale : nil
其中 my_locale
是您尝试使用的语言环境。
如果有帮助请告诉我!
编辑:
似乎语言环境存储为 "en" 或 "uk",因此请确保您的字符串匹配。我测试了以下代码,它对我有用
def set_locale
I18n.locale = current_user.try(get_locale(<current_user.locale>) || I18n.default_locale
end
def get_locale(my_loc)
I18n.available_locales.each do |loc|
if loc.to_s == my_loc
return loc
end
end
nil
end