© 2013 All rights reserved.
0

Ruby on Rails: Translate Routes

Pokud budete vyvíjet multi-language aplikace, určitě se budete muset zamyslet nad překladem rout, protože nebude možné
generovat adresy jenom na základě vytvořeného routes.rb.

Proč vymýšlet nové řešení, když jž řešení existují hotová?
Řešení je například v použití pluginu Translate_routes (http://github.com/raul/translate_routes).

Pracuje s verzí Rails 2.3.x a je možné jej implementovat bez zásadního zásahu do kódu.
Plugin vytváří jednoduchou

transparentní vrstvu nad vašimi routami, které překládá a směruje.

Instalace

Instalace je velmi jednoduchá, z githubu stačí plugin stáhnout a nakopírovat do /vendor/plugins, mezi

ostatní pluginy. Plugin je nyní připraven k použití.

Překlady adres

Pro překlady adres si musíme vytvořit lokalizační Yaml schéma. To umístíme libovolně do adresářové struktury,

doporučuji do adresáře locales pod výstížným názvem (například i18n-routes.yml, jak je

uvedeno v ukázkovém příkladu).

Nyní si do lokalizačního souboru můžeme uvést definice nových adres ve tvaru:

Kde cz, en značí jednotlivé jazykové mutace nastavované aplikací v I18n.locale za nimiž

následují routy a překlady adres.

Pokud máme lokalizační soubor vytvořený (nemusíme definovat všechny adresy), upravíme soubor routes.rb, do kterého

přidáme:

Tímto voláme metodu translate_from_file(*path) z translate_routes a předáme jí cestu k námi vytvořenému

yaml souboru (jednotlívé části cesty oddělujeme čárkou).

Pokud vaše apliace nenastavuje hodnotu pro I18n.locale, musíte do application_controlleru doplnit

before_filter:

Tanto filter volá přímo metodu z translate_routes. Nebo si tuto proměnnou naplnit jinak.

Po restartu serveru by mělo všechno fungovat (Můžete ověřit příkazem rake routes).

Odstranění prefixu jazyka

Plugin automaticky doplňuje prefix jazyka do url adres, krom defaultního jazyka (nastaveného v hodnotě

I18n.default_locale), což můžete změnit pomocí hodnoty @@prefix_on_default_locale v

routes.rb (hned za voláním translátoru):

Pokud chcete používat url adresy úplně bez prefixu (například při použití více domén směrovaných na stejný systém), tak

to bohužel plugin defaultně nenabízí. V tomto případě je třeba upravit plugin. Najděte si sobuor

translate_routes.rb.

Aby bylo možné toto nastavení měnit, můžeme si vytvořit proměnnou apply_prefix, přes kterou budeme toto

chování měnit:

Jako defaultní hodnotu necháme true, přesně tak, aby byla zachována původní funkčnost pluginu a upravíme funkci

add_prefix:

Hotovo – v routes.rb si nyní můžete upravit volání translatoru:

Závěrem

I když nechcete využívat překlady adres, je dobé tento plugin implementovat do své aplikace. Díky němu můžete v

budoucnosti jedndouše měnit názvy akcí a adres.

Comments are closed for this page

About
Hi, i am programmer from the Czech Republic. I love web development (Ruby, Ruby on Rails, PHP, Nette) and iOS development (Objective-C, Cocoa).
To cooperate, here is my phone:
+420 608 836