Rack I18n locale switcher Teil 1 und Teil 2
von Christoph König (27 Aug 2010)
Idee
Diese Rack Applikation dient als Middleware, z.B. in einer Rails Applikation, um die I18n.locale zu setzen. Eine Middleware deshalb, um portabel zu anderen Rack Applikationen zu bleiben, und damit man sich in der Zielapplikation nicht um die I18n.locale verwaltung kümmern muss, sondern einfach auf die vom Benutzer gewählte Sprache zurückgreifen kann.
Funktionen
Teil 1 (18.08.2010)
- definieren der :available_locales als Array beim Einbinden in die Ziel Applikation
- definieren einer :default_locale als Symbol beim Einbinden in die Ziel Applikation
- setzen der gewünschten Sprache über den (GET-) Parameter ?locale=xx
- Auslesen der ersten HTTP_ACCEPT_LANGUAGE
- Speichern der gewählten Sprache in der Session
Die aktuell gewählte Sprache wird wie folgt ermittelt:
- params[‘locale’] gesetzt, und in der Liste der verfügbaren Sprachen? => aktuelle Sprache.
- session[‘locale’] gesetzt? => aktuelle Sprache.
- params[‘locale’] und session[‘locale’] nicht gesetzt, und erste HTTP_ACCEPT_LANGUAGE in der Liste der verfügbaren Sprachen? => aktuelle Sprache.
- ansonsten :default_locale => aktuelle Sprache.
Teil 2 (27.08.2010)
Die Anwendung wurde um einem Integrationtest auf Basis von Rack-Test und RSpec erweitert. Dazu wurde eine Dummy Zielapplikation erstellt, bei der diese Rack Applikation mittels Rack::Builder als Middleware eingebunden wurde:
Rack::Builder.app do
use Rack::Session::Cookie
use Rack::I18nLocaleSwitcher, :available_locales => [:de, :en, :fr], :default_locale => :fr
run Rack::Test::FakeApp.new
end
Daneben wurde eine Beispiel Rails Applikation erstellt, die diese Rack App als Middleware einbindet.
Zukunft
Folgende Erweiterungen sind möglic:
- Anstelle eines (GET-) Parameter für die Sprachauswahl sollte es möglich sein, die Sprache als Teil der Pfadangabe in der URL zu definieren: http://www.example.com/de, http://www.example.com/posts/123/comments/de
- Alle Links, die von der Ziel Applikation im Body zurückgegeben werden, sollen entweder um die aktuelle Sprache erweitert werden, und evtl. vorhandene QueryStrings (?locale=xx) werden entsprechend umgewandelt.
- Erstellen eines Gem, um die Applikation noch einfacher einzubinden
- Erraten der Sprache anhand der IP des Users, wenn keine Sprache gesetzt ist.
Code
Das Projekt wurde auf Github als Repository angelegt: http://github.com/koenigc/rack_i18n_locale_switcher
Links
Artikel Archiv
- Rack I18n locale switcher Teil 1 und Teil 2 von Christoph König (27 Aug 2010)
- Chronic und ChronicDuration (Rubygems) von Dung Nguyen (25 Aug 2010)
- Debug- und Analysetool rack-bug von Christopher Maurer (20 Aug 2010)
- Rack Teil 3 - Rack in Rails 3 von Hussein Morsy (17 Aug 2010)
- Mein Wechsel zu Vim - Teil 1 von Tanja Otto (09 Aug 2010)
- Rack Teil 2 - Middleware von Hussein Morsy (05 Aug 2010)
- Einblick in Jekyll von Dung Nguyen (16 Jul 2010)
- Survey Builder von Christopher Maurer (12 Jul 2010)
- Rack Teil 1 - Grundlagen von Hussein Morsy (08 Jul 2010)
- Eigene Generatoren in Rails 3 erstellen von Tanja Otto (05 Jul 2010)
- Einrichtung der Arbeitsumgebung unter Mac OS X von Dung Nguyen (30 Jun 2010)
- A/B Tests von Christoph König (28 Jun 2010)
- Rails 3 Generatoren von Tanja Otto (24 Jun 2010)
- Einblick in refinerycms von Christopher Maurer (22 Jun 2010)
- Cucumber web_steps.rb von Christoph König (12 May 2010)
- HTML/CSS-Unterstützung in aktuellen Emailclients von Dung Nguyen (06 May 2010)
- Einblick in Haml & Sass 2 / Vorschau auf Sass 3 von Christopher Maurer (26 Apr 2010)
- Blockedit mit Textmate von Christoph König (14 Apr 2010)
- Git Interactive Rebase von Dung Nguyen (22 Mar 2010)
- Neue Rubrik Tipps von Tanja Otto (15 Mar 2010)
- flibco.com goes iPhone von Tanja Otto (15 Mar 2010)
- Neues Team-Mitglied und Neue MBPs von Tanja Otto (13 Jan 2010)
- Reiseanfrage von Christoph König (19 Oct 2009)
- Deutsche Railskonferenz 2009 in Frankfurt von Tanja Otto (21 Jul 2009)
- Jerrytravel von Christopher Maurer (08 Jul 2009)
- ACL-Reesen von Christopher Maurer (07 Jul 2009)
- Cucumber Vortrag in der Ruby on Rails User Group Düsseldorf von Tanja Otto (30 Jun 2009)
- New Project Reisen von Tanja Otto (15 May 2009)
- Back from RailsConf 2009 von Tanja Otto (15 May 2009)
- RailsConf 2009 von Tanja Otto (05 May 2009)