Na svojich trasách mám nasledujúce
scope "/(:locale)", locale: /en|fr/, constraints: LocaleConstraint do
# I want to be able to detect the locale that was used in the URL
get "/tool" , redirect_to(/a_certain_page)
end
Teraz v závislosti od miestneho nastavenia, ktoré sa nachádzalo v adrese URL, chcem presmerovať na rôzne stránky.
V podstate chcem nasledovné:
get "/fr/tool", redirect_to(/tool_in_french)
get "/en/tool", redirect_to(/tool_in_english)
Očakával by som niečo ako:
scope "/(:locale)", locale: /en|fr/, constraints: LocaleConstraint do
get "/tool" => locale == :fr ? redirect_to(/tool_in_french) : redirect_to(/tool_in_english)
end
odpovede:
0 pre odpoveď č. 1Myslím si, že je lepšie nájsť jazyk v application_controller.rb pomocou params.
private
def set_locale
session["locale"] = params[:locale] || session["locale"] || I18n.default_locale
I18n.locale = session["locale"]
end
Nie som si istý, aký druh prekladateľského nástroja stepomocou, ale s I18n to funguje perfektne. Na trasách by ste mali do rozsahu pridať iba parameter: locale. A to môže byť vynútené v application_controller.rb. Rozsah bol správny, bez predvolených hodnôt; Koľajnice: ako používať rozsah s parametrami a použiť trasu s predvolenou hodnotou parametrov
before_action :set_locale
Ak nepoužívate I18n, môžete túto metódu použiť aj na prepojenie s rôznymi priečinkami zobrazenia a smerovanie k správnemu zobrazovaciemu súboru v každej metóde všetkých radičov, veľa práce.
http://guides.rubyonrails.org/i18n.html