Hallo Leute, ich möchte meine Rails-Applikation nachträglich mehrsprachig machen. Die "statischen" Texte habe ich schon alles mittels gettext übersetzt und das klappt auch sehr gut. Nun muss ich aber an die DB ran denn die Daten sollen auch in mehreren Sprachen pflegbar sein. Ich weiß nur leider nicht welche Möglichkeiten ich habe und ob es schon ein schönes Plugin gibt welches mir ein bischen unter die Arme greift. Deswegen bitte ich euch ein paar Ideen, Vorschläge, was auch immer zu posten damit ich das sauber und ordentlich umsetzten kann. gruß Malte
on 25.04.2008 10:11
on 25.04.2008 16:56
hallo malte, ein sehr guter einstiegspunkt ist InternationalizationComparison im rails wiki (scheint up to date zu sein): http://wiki.rubyonrails.org/rails/pages/InternationalizationComparison globalize (http://www.globalize-rails.org/globalize/) ist z.b. ein oft genutztes plugin. nachdem du für die views aber schon ne eigene lösung hast ist das vielleicht overkill, da globalize "view" & "daten" übersetzungen kann. das wären dann bissl viel code & tabellen für deinen zweck. eine simple lösung für models ist, die daten als serialisierten hash im selben feld weiterzuspeichern (hash-keys die sprache, value der text). wir haben das ein bischen abstrahiert: # definition im model MyModel < ActiveRecord::Base translates :attribute_1, :attribute_2 end # verwendung (Locale ist ein kleines objekt mit lokalisierungs-infos) Locale.language = :de m = MyModel.find(:first) m.title # => Hallo Welt Locale.language = :en m.title # => Hello World m.title(:es) # => Hola Mundo für uns funktioniert das sehr gut, ist aber nicht für jeden anwendungszweck brauchbar. ich kann den code posten, aber vermutlich gibt es auch ein i18n plugin, das dasselbe tut. viele grüße,phillip --- Am 25.04.2008 um 10:04 schrieb Malte Beran:
on 26.04.2008 09:27
Moin Malte, also ich baue auch gerade an einer mehrsprachigen Anwendung und habe als Plugin Globalite verwendet. Globalite ist die abgespeckte Version von Globalize und wandelt dir alle deine statischen Texte, wie du es schon mit gettext machst, je nachdem welche Sprache der Besucher hat in diese Sprache um. Für jede Sprache kannst du dazu eine yml Datei pflegen. Da ich auch Inhalte in meiner Datenbank liegen habe, die in mehreren Sprachen verfügbar sein sollen, habe ich dazu immer eine extra Tabelle angelegt, die eine Spalte in dieser Tabelle enthält den Text in der jeweiligen Sprache, eine weitere Spalte ist für die locale da und definiert in welcher Sprache der Text ist. Da man bei Globalite sich Global die aktuelle locale geben kann habe ich jedes model, in dem Inhalte in mehreren Sprachen existieren um entsprechende getter und setter erweitert. Der Text wird dann in der View über diesen getter ausgelesen, innerhalb des getters wird die Daten- bank kontaktiert und nach dem passenden Text anhand der locale gesucht. Das ist relativ schlicht und mehr brauchte ich nicht. Globalite ist schön schlank, kann auch Währung, Datum etc. umrechnen. Globalize habe ich mich noch nicht rangewagt, ist auch um einiges mächtiger. Globalite findest du ein Beispielprojekt dazu direkt auf der Seite: http://www.railsontherun.com/2007/7/2/globalite-sample-application Hoffe, ich konnte etwas helfen. Viele Grüße, Daniel Am 25.04.2008 um 10:04 schrieb Malte Beran: