Вы раскомментировали следующую строку?
config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
Rails будет принимать переведенный текст только из этого места. Но это только для Rails. Если вы хотите установить языковой стандарт по умолчанию для gettext, вам нужно установить, как показано ниже
Добавить его в environment.rb
I18n.supported_locales = Dir[File.join(RAILS_ROOT, "locale/*")].collect{|v| File.basename(v)}
Испытание в рельсовой консоли
::I18n.locale = 'en'
Вы можете проверить это следующим методом gettext
GetText.locale.to_s
В основном я устанавливаю языки, устанавливая I18n.locale = 'en'
или любую другую локаль. Вы также можете установить язык по умолчанию в зависимости от предпочтительного языка браузера. Вы также можете принудительно установить язык в (gettext), передавая lang = 'ca' и т. Д. Все, что вам нужно, это использовать :before_filter
. Вызовите метод ниже в этом фильтре
def set_default_language
languages = get_browser_preferred_languages_hash(request.env["HTTP_ACCEPT_LANGUAGE"])
@locale = languages.blank? ? 'en' : app_preferred_language(languages, params[:lang])[0..1]
I18n.locale = @locale || 'en'
end
def get_browser_preferred_languages_hash(languages)
# no language accepted
return [] if languages.blank?
# parse Accept-Language
accepted = languages.split(",")
accepted = accepted.map { |l| l.strip[0..1]}
end
def app_preferred_language(languages,forced_lang)
unless forced_lang.blank?
return forced_lang.class == Array ? forced_lang[0] : forced_lang
end
return 'en' if languages.blank?
@matched_lang = ''
languages.each do |lang|
@matched_lang = support_languages_hash.values.detect{|ele| ele[0..1] == lang}
break if !@matched_lang.blank?
end
return @matched_lang.blank? ? 'en' : @matched_lang
end
def support_languages_hash
GetText.locale
{ _('English') => 'en-US',
_('Spanish') => 'es-419',
_('Catalan') => 'ca' }
end