Rails 2.3 a lokalizace aplikace
V posledních dvou verzích frameworku RubyOnRails se značně zlepšila situace, co se lokalizace týče. Osobně vnímám tento vývoj pozitivně – mám teď mnohem méně práce a více možností. :-)
Tento návod jsem založil na verzi RoR 2.3, ale s jistou dávkou obezřetnosti bude jistě použitelný i ve verzi 2.2, případně novějších. Základem je především standardní součást RoR – i18n.
Začněme od základů
Nejprve je třeba si stáhnout lokalizované základy od karmiho: http://github.com/svenfuchs/rails-i18n/blob/master/rails/locale/cz.rb a tento soubor uložíme do adresáře config/locales/
.
Dále nastavíme defaultní jazyk v config/environment.rb
(stačí odkomentovat úplně dole):
Veškeré lokalizace je vhodné provádět souměrně – především pak vytvořit config/locales/cz.yml
s obsahem z en.yml
.
Lokalizované routes (URI)
Nainstalujeme plugin translate_routes:
Smažeme zbytečný soubor .gitignore
a nastavíme správná oprávnění (jsem tak trošku perfekcionalista a mám rád v gitu pořádek :-D):
Dále zapneme lokalizaci routes přidáním následujícího řádku na konec souboru config/routes.rb
:
Zapneme výběr příslušného locale podle prvního pole v URI přidáním těchto řádků do app/controllers/application_controller.rb
:
Nyní vytvoříme soubor pro uvádění lokalizačního kódu v URI ve všech situacích (tedy vč. výchozího locale) config/initializers/translate_routes.rb
:
Automatické rozpoznávání jazyka uživatele
Nainstalujeme plugin http_accept_language:
Jelikož je teoreticky lepší používat CZ místo CS v označení české lokalizace, tak provedeme následující hack v souboru vendor/plugins/http_accept_language/lib/http_accept_language.rb
:
- nový řádek 46:
x = cs_cz x
- nová metoda na konci souboru (ovšem před koncovým
end
):
Pokud to není lepší a chceme zachovat CS, tak je nutné přejmenovat soubory config/locales/cz*
na cs*
varianty. Nesmíme zapomenout ani na defaultní locale v config/environment.rb
.
Aby se to promítlo i do URI, přidáme nový before_filter
do app/controllers/application_controller.rb
, ovšem až za filter přidaný v prvním kroku:
Nyní již jen stačí přidat přepínač jazyků do příslušného layoutu (není nutné, ale je dobré ho tam mít kvůli vyhledávačům):
Použití lokalizace
A to nejdůležitější na konec. :-) Lokalizované řetěžce je potřeba nejen mít, ale i řádně použít:
Prostor pro vylepšení
Tento návod samozřejmě není vyčerpávající, ale poskytuje dobrý základ pro lokalizovanou aplikaci. Hned mě napadá pár věcí, které by stálo za to zvážit k implementaci. Především možnost ukládání vybraného locale do cookies nebo případně do profilu uživatele. Nebo implementace pluginu i18n_label. Dále neřeším problematiku lokalizace dat v databázích atd. Je toho ještě poměrně hodně, ale jak říkám: toto mají být pouze základní kameny, na který můžete stavět. ;-)
Zaškatulkováno v kategorii: Ruby on Rails | 16. března 2009