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

Kommentieren

Artikel Archiv