2012-02-13 2 views
3

Не устанавливая DEFAULT_LOCALE в Rails 3.1.3Не установка локаль по умолчанию в Rails 3.1.3

application.rb:

config.i18n.default_locale = :en 

У меня 3 локалей (EN, ES и са) И когда я иду на свою консоль:

I18n.locale => :ca # I guess the first one in the array 

Я использую Gettext. Кто-нибудь понял, что это может быть?

Bundle:

Using rake (0.9.2.2) 
Using Ascii85 (1.0.1) 
Using ZenTest (4.5.0) 
Using multi_json (1.0.4) 
Using activesupport (3.1.3) 
Using builder (3.0.0) 
Using i18n (0.6.0) 
Using activemodel (3.1.3) 
Using erubis (2.7.0) 
Using rack (1.3.6) 
Using rack-cache (1.1) 
Using rack-mount (0.8.3) 
Using rack-test (0.6.1) 
Using hike (1.2.1) 
Using tilt (1.3.3) 
Using sprockets (2.0.3) 
Using actionpack (3.1.3) 
Using mime-types (1.17.2) 
Using polyglot (0.3.3) 
Using treetop (1.4.10) 
Using mail (2.3.0) 
Using actionmailer (3.1.3) 
Using arel (2.2.1) 
Using tzinfo (0.3.31) 
Using activerecord (3.1.3) 
Using activeresource (3.1.3) 
Using addressable (2.2.6) 
Using adyen (1.3.0) 
Using airbrake (3.0.5) 
Using ansi (1.3.0) 
Using autotest (4.4.6) 
Using xml-simple (1.1.1) 
Using aws-ses (0.4.4) 
Using bcrypt-ruby (3.0.1) 
Using bluecloth (2.2.0) 
Using bulksms (0.5.2) 
Using bundler (1.0.21) 
Using highline (1.6.2) 
Using net-ssh (2.2.1) 
Using net-scp (1.0.4) 
Using net-sftp (2.0.5) 
Using net-ssh-gateway (1.1.0) 
Using capistrano (2.9.0) 
Using capistrano-ext (1.2.1) 
Using nokogiri (1.5.0) 
Using ffi (1.0.9) 
Using childprocess (0.2.2) 
Using json_pure (1.6.1) 
Using rubyzip (0.9.4) 
Using selenium-webdriver (2.8.0) 
Using xpath (0.1.4) 
Using capybara (1.1.1) 
Using carrierwave (0.5.8) 
Using chunky_png (1.2.5) 
Using coffee-script-source (1.1.2) 
Using execjs (1.2.9) 
Using coffee-script (2.2.0) 
Using fssm (0.2.7) 
Using sass (3.1.10) 
Using compass (0.12.alpha.0) 
Using compass-960-plugin (0.10.4) 
Using rest-client (1.6.7) 
Using couchrest (1.1.2) 
Using couchrest_model (1.1.2) 
Using daemons (1.0.10) 
Using diff-lcs (1.1.3) 
Using e164 (0.3.1) 
Using excon (0.7.12) 
Using factory_girl (2.3.0) 
Using rack-ssl (1.3.2) 
Using json (1.6.5) 
Using rdoc (3.12) 
Using thor (0.14.6) 
Using railties (3.1.3) 
Using factory_girl_rails (1.4.0) 
Using multipart-post (1.1.3) 
Using faraday (0.7.5) 
Using faraday_middleware (0.7.0) 
Using fast_gettext (0.6.2) 
Using formatador (0.2.1) 
Using ruby-hmac (0.4.0) 
Using fog (1.1.1) 
Using rails (3.1.3) 
Using formtastic (2.0.0.rc5) 
Using gem_plugin (0.2.3) 
Using geocoder (1.1.0) 
Using geokit (1.6.0) 
Using locale (2.0.5) 
Using gettext (2.1.0) 
Using gettext_i18n_rails (0.3.0) 
Using gravatar (1.0) 
Using guard (1.0.0) 
Using guard-rspec (0.6.0) 
Using haml (3.1.4) 
Using haml-rails (0.3.4) 
Using hashie (1.1.0) 
Using jquery-rails (1.0.17) 
Using kaminari (0.12.4) 
Using kgio (2.6.0) 
Using launchy (2.0.5) 
Using libv8 (3.3.10.2) 
Using metaclass (0.0.1) 
Using subexec (0.1.0) 
Using mini_magick (3.3) 
Using mocha (0.10.0) 
Using money (4.0.1) 
Using mongrel (1.2.0.pre2) 
Using multi_xml (0.4.1) 
Using nifty-generators (0.4.6) 
Using ruby-rc4 (0.1.3) 
Using pdf-reader (1.0.0) 
Using ttfunk (1.0.3) 
Using prawn (0.12.0) 
Using rack-protection (1.1.4) 
Using raindrops (0.8.0) 
Using redis (2.2.2) 
Using redis-namespace (1.0.3) 
Using sinatra (1.3.1) 
Using vegas (0.1.8) 
Using resque (1.19.0) 
Using resque_mailer (2.0.2) 
Using rspec-core (2.8.0) 
Using rspec-expectations (2.8.0) 
Using rspec-mocks (2.8.0) 
Using rspec (2.8.0) 
Using rspec-rails (2.8.1) 
Using ruby-ole (1.2.11.2) 
Using sexp_processor (3.0.7) 
Using ruby_parser (2.3.1) 
Using sass-rails (3.1.5) 
Using simple_oauth (0.1.5) 
Using spreadsheet (0.6.5.9) 
Using state_machine (1.0.2) 
Using steak (2.0.0) 
Using therubyracer (0.9.8) 
Using turn (0.8.3) 
Using twitter (1.7.2) 
Using uglifier (1.0.3) 
Using unicorn (4.1.1) 
Using useragent (0.4.6) 

ответ

1

Добавить в application.rb в эту строку config.i18n.locale = :ca и Rails установит стандарт по умолчанию. Он работает для меня на производственном сервере, но я установил :ru locale

+0

Эй, это действительно работает. Но я серьезно не люблю решение. Потому что default_locale - это переменная, которую нужно установить ... В любом случае я принимаю ваш ответ :) –

+0

weired вещь, но она работает! – CodeGroover

+2

не будет работать для меня – Uko

8

Вы раскомментируйте следующую строку?

config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s] 

Рельсы возьмут переведенный текст только из этого места. Но это для Rails специфический перевод gem. Если вы хотите установить локаль по умолчанию для 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 [email protected]_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 
2

Я не думаю, что это, но, возможно, вы перекрывая config.i18n.default_locale в файле среды, то есть. environments/development.rb.

Хорошей отправной точкой было бы поиск всех вхождений I18n.locale, I18n.default_locale и связанных значений по grepping. Я бы начал с grep 'locale' app -rn (r для рекурсивного, n для отображения номеров строк), затем повторите это в корне проекта.

+0

Это сработало для меня! Я действительно не знаю, почему, но мне пришлось объявить локаль в моей тестовой среде. – hcarreras

0

Ваша проблема, вероятно, связана с использованием Gettext. Если я не ошибаюсь, он использует свои собственные механизмы для хранения и извлечения языкового стандарта, и я полагаю, что он просто не уважает настройки default_locale. В случае, если некоторые из вас попали сюда, потому что у вас были подобные проблемы без Gettext. Для вас, ребята, я могу сказать, что по крайней мере с последними стабильными рельсами релиз default_locale работает отлично. Вы, вероятно, переопределили его и или явно установили локаль где-то. Grep ваш проект для справок:

grep -rn default_locale . 
grep -rn I18n.locale . 

или smhtn ..

Еще одна вещь, которую следует помнить, заключается в том, что перезагрузка сервера, вероятно, необходима для того, чтобы новый параметр default_locale имел эффект.

1

Я изучаю рельсы. Я следую Pragmatic Agile Web Development с Rails. Я просто пытался и пытался сделать работу по локализации, и это просто не сработало. Через некоторое время я заметил, что в моих тестах локаль была правильной. Weird. Тогда я понял, что представление было кэшировано. Поэтому попробуйте удалить файлы в rails_app_path/tmp.

Cheers!

+0

Я просто потратил, вероятно, 2 часа, ударяя головой о стену, пытаясь понять, почему 'config.i18n.default_locale' не соблюдался в моем приложении. Это и зафиксировало это. Смешной. Но спасибо. –

Смежные вопросы