Как проверить, существует ли локализация? - PullRequest
0 голосов
/ 13 августа 2010

Я создаю небольшой сайт, который в настоящее время переводится на разные языки. Я использую готовый перевод Rails: l18n. Чтобы изменить локализацию, необходимо указать параметр с именем locale, например: http://localhost:3000/?locale=nl.

В ApplicationController этот параметр сохраняется в переменной сеанса и используется как локализация. Как я могу проверить, действительно ли локаль существует? Есть ли встроенные функции или мне нужно добавить exists: "true" в каждый файл локализации, чтобы проверить его?

1 Ответ

1 голос
/ 13 августа 2010

Rails будет по умолчанию "en" в качестве локали по умолчанию в случае, если локаль не существует.Поэтому, если я пропущу http://localhost:3000/?locale=de и этот перевод не существует, будет использован 'en'.

Посмотрите здесь http://guides.rubyonrails.org/i18n.html, особенно раздел "2.3Установка и передача языкового стандарта "

#config/initializers/available_locales.rb 

# Get loaded locales conveniently 

module I18n 
 class << self  
  def available_locales; backend.available_locales; end  
 end  
 module Backend 
   class Simple 
     def available_locales; translations.keys.collect { |l| l.to_s }.sort; end  
   end  
 end 
end 

# You need to "force-initialize" loaded locales 
I18n.backend.send(:init_translations) 

AVAILABLE_LOCALES = I18n.backend.available_locales 
RAILS_DEFAULT_LOGGER.debug "* Loaded locales: #{AVAILABLE_LOCALES.inspect}" 

Затем вы можете обернуть константу для легкого доступа в ApplicationController:

class ApplicationController < ActionController::Base 
  def available_locales; AVAILABLE_LOCALES; end 
end 

Вы можете реализовать ее следующим образом в ApplicationController:

before_filter :set_locale 

def set_locale 
  I18n.locale = extract_locale_from_params 
end 

def extract_locale_from_params 
  parsed_locale = params[:locale] 
 (available_locales.include? parsed_locale) ? parsed_locale : nil 
end  

HTH

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...