язык i18n в URL - PullRequest
       13

язык i18n в URL

2 голосов
/ 17 февраля 2010

Я бы хотел, чтобы все URL моего приложения были указаны с локалью, например:

http://domain.com
http://domain.com/user/new

стать:

http://domain.com/en
http://domain.com/fr
http://domain.com/en/user/new
http://domain.com/fr/user/new

Как я могу это сделать, не передавая языковой стандарт во всех моих ссылках?

Ответы [ 2 ]

2 голосов
/ 17 февраля 2010

Используйте параметр :path_prefix в ваших маршрутах:

map.namespace :my_locale, :path_prefix => "/:locale" do |localized|
  localized.resources :users
  localized.root :controller => 'your_controller', :action => 'your_action'
  # other routes
end

В вашем контроллере приложения добавьте:

before_filter :set_current_locale

private
def set_current_locale
  current_locale = 'en' # default one
  current_locale = params[:locale] if params[:locale]  # or add here some checking 

  I18n.locale = current_locale # if it doesn't work, add .to_sym    
end

Для создания ссылок используйте стандартные URL-помощники. Если вы установили params[:locale], он будет добавлен автоматически. Итак:

photos_path  # /en/photos - if you are in en locale
photo_path(@photo) # /fr/photos/3 - if you are in fr locale

Теперь, если вы находитесь на каком-либо пути без локали: "www.mysite.com", вы можете создать ссылки на локализованную версию с добавлением :locale => 'en':

users_path(:locale => 'en') # /en/users

Вы также можете использовать приведенный выше пример для изменения текущей локали.

Я не уверен, какие будут имена помощников по URL, поэтому просто наберите rake routes, чтобы найти его.

1 голос
/ 17 мая 2013

Используйте как в направляющих рельсов:

# config/routes.rb
scope "/:locale" do
  resources :books
end

Задать язык:

before_filter :set_current_locale

private
def set_current_locale
  I18n.locale = params[:locale]
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...