Für den Hardwareempfehler gibt es natürlich Übersetzungen, schon weil er nicht nur den deutschen Markt unterstützt. Worauf ich damals aber nicht kam war, die Sprache je nach der Browsersprache zu wählen. Der Browser sendet die als Header mit, Accept-Language. Den müsste man nur auslesen, und das geht mit einem passenden Gem ziemlich einfach. Ich glaube, beides war mir damals nicht richtig klar.
In Sinatras configure-Block werden die Übersetzungen initialisiert. Diese liegen unter locales/. Im before-Block wird vor jedem Seitenaufruf die passende Sprache gewählt. Das Gem i18n verwaltet die Übersetzungen, http-accept liest den Accept-Language-Header aus. Leider fehlt da eine Hilfsfunktion, um die regionsübergreifende Sprache zu bekommen (z.B. englisch, egal ob der Header nun en_GB oder en_US sendet). Aber das erledigt dann die Regexpression bei der Case-Abfrage.
configure do
I18n::Backend::Simple.send(:include, I18n::Backend::Fallbacks)
I18n.load_path = Dir[File.join(settings.root, 'locales', '*.yml')]
I18n.backend.load_translations
I18n.default_locale = :"de"
I18n.exception_handler = lambda do |exception, locale, key, options|
case exception
when I18n::MissingTranslation
return key.to_s
end
end
end
before do
if request.env['HTTP_ACCEPT_LANGUAGE']
languages = HTTP::Accept::Languages.parse(request.env['HTTP_ACCEPT_LANGUAGE'])
languages.each do |language|
case language.locale
when /en[_]*/
I18n.locale = "us"
return
when /de[_]*/
I18n.locale = "de"
return
when /fr[_]*/
I18n.locale = "fr"
return
when /es[_]*/
I18n.locale = "es"
return
end
end
end
I18n.locale = "us"
end
Wenn dann die Seite nach dem Neuladen die Sprache ändert, nur weil in den Browsereinstellungen eine neue gewählt wurde, wirkt das schon ein bisschen wie cooles Voodoo.
onli blogging am : Rubys FastGettext ist tatsächlich schnell
Vorschau anzeigen