Datenbankinhalte übersezten

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

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 B.:

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 B.: