2013-11-19 4 views
3

Я пытаюсь реализовать интернационализацию в своем приложении rails. Вот часть моего контроллера приложенияRails Интернационализация: настройка локали из доменного имени

before_action :set_locale 

def set_locale 
    I18n.locale = extract_locale_from_tld || I18n.default_locale 
end 

def extract_locale_from_tld 
    parsed_locale = request.host.split('.').last 
    I18n.available_locales.include?(parsed_locale.to_sym) ? parsed_locale : nil 
end 

Это, кажется, не работает, и я могу только установить локаль из URL PARAMS заставляет меня использовать scope "(:locale)", locale: /en|se/ do в моих маршрутах, которые я не хочу.

Из направляющей направляющих они указывают, что меню переключения должно быть выполнено следующим образом.

link_to("Deutsch", "#{APP_CONFIG[:deutsch_website_url]}#{request.env['REQUEST_URI']}") 

как вы это реализуете? Мое текущее меню переключения выглядит так.

<% if I18n.locale == I18n.default_locale %> 
    <li><%= link_to image_tag("eng.png", :alt => "England", :class =>"round"), :locale=>'en' %> 
    <li><h5><%= link_to_unless I18n.locale == :se, "Swedish", "#{'http://www.natkurser.se'}" %></h5> 
<% else %> 
    <li><%= link_to image_tag("swe.png", :alt => "Sweden", :class =>"round"), :locale=>'se' %> 
    <li><h5><%= link_to_unless I18n.locale == :en, "English", "#{'http://gettheskill.com'}" %></h5> 
<%end%> 

Я добавил 127.0.0.1 gettheskill.com и 127.0.0.1 natkuser.se к/и т.д./хостов, но он по-прежнему не работает на Развитию. Какие файлы (я) изменить, чтобы он работал на производстве? Я думаю, что файлы конфигурации nginx. И в конечном счете, как должны появляться маршруты. Это главное, что, как представляется, было оставлено в документации по интернационализации рельсов. Подробный ответ был бы оценен.

ответ

1

Ваш вопрос не очень структурирован, я постараюсь дать некоторые подсказки, тем не менее.

, если вы хотите взглянуть на рабочий пример для локалей и доменов, посмотрите на the onruby project. это многозадачное приложение, в котором каждый арендатор может настраивать свои собственные домены и локали по умолчанию.

это так, что она реализуется:

сайт использует куки для отслеживания выбранного языкового стандарта.

Если cookie не установлен, для его решения используется доменное имя. чтобы проверить, что в разработке вам нужно будет использовать /etc/hosts и добавить туда домены, чтобы они могли локализоваться локально. в вашем случае это будет gettheskill.com:3000 для доступа к вашему приложению.

Обычно я использую несколько другое доменное имя, добавляя субдомен или другой tld, так что я могу получить доступ к доменам через Интернет без редактирования /etc/hosts.

Коммутаторы языков работают просто путем добавления параметра locale=XY к ссылке. поэтому params[:locale] всегда имеет приоритет и переключает выбранную локаль и устанавливает новое значение для файла cookie.

Надеюсь, это достаточно информации, чтобы заставить ее работать на вас.

И НЕТ, нет ничего, что должно быть сконфигурировано за пределами рельсов или файла /etc/hosts.

+0

благодарит за сообщение. Вот что, однако, у меня проблема с переключением языка. Языковой стандарт по умолчанию на английском языке, мне нужно, чтобы он изменился на шведский, когда я нажимаю ссылку на меню переключения. Теперь он работал с областью (: locale)/en | se на маршрутах, но после того, как я удалил его, это не так. Мне пришлось удалить область, потому что я хотел реализовать i18n от имени домена. Надеюсь, вы поняли мое мнение. –

1

Я следил за направляющими направляющих и установил i18n соответственно. Я не мог понять вашу проблему. Единственное различие, которое у меня было, это извлечение локали. Вместо последнего я использовал request.subdomains.first.

def extract_locale_from_subdomain 
    parsed_locale = request.subdomains.first 
    I18n.available_locales.include?(parsed_locale.to_sym) ? parsed_locale : nil 
end 

Вы установили свои пути загрузки, как указано в руководстве по направляющим.

# in config/initializers/locale.rb 

# tell the I18n library where to find your translations 
I18n.load_path += Dir[Rails.root.join('lib', 'locale', '*.{rb,yml}')] 

# set default locale to something other than :en 
I18n.default_locale = :en 

и проверить, что I18n.available_locales возвращается, ноль или локали. И меню переключения, которое вы используете, кажется прекрасным. Так будет работать.

Если бы вы могли более подробно объяснить свою проблему, возможно, я мог бы помочь. Спасибо.

EDIT:

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

<% if I18n.locale == I18n.default_locale %> 
    <li><%= link_to image_tag("swe.png", :alt => "Sweden", :class =>"round"), "http://www.natkurser.se" %> %> 
    <li><h5><%= link_to_unless I18n.locale == :se, "Swedish", "#{'http://www.natkurser.se'}" %></h5> 
<% else %> 
    <li><%= link_to image_tag("eng.png", :alt => "England", :class =>"round"), "http://gettheskill.com" %> 
    <li><h5><%= link_to_unless I18n.locale == :en, "English", "#{'http://gettheskill.com'}" %></h5> 
<%end%> 
+0

Я реализовал все, что вы сказали. Проблема в том, что меню переключения, похоже, не работает. Языковой стандарт по умолчанию - английский, поэтому мне нужно, чтобы сайт менялся на шведский, когда я нажимаю на ссылку переключения. –

+0

Пробовал ли вы удалить image_tag и проверял, работает ли он только с ссылкой link_to_unless? –

+0

<% = link_to image_tag ("eng.png",: alt => "Англия",: class => "round"), "# {'http://www.natkurser.se'}"%> –

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