76 Nachrichten unter 21 Themen von 33 Mitgliedern
[SilverStripe Roadmap][Changelog]

Grundsätzlich: Übersetzungen von data objekten (nicht sitetree)

Seite: 1 1707 mal gelesen
  • dacar
    Community Member
    27 Beiträge

    Grundsätzlich: Übersetzungen von data objekten (nicht sitetree)

    Hallo Silverstriper,

    ich habe mal grundsätzliche Fragen zur Mehrsprachigkeit mit Silverstripe. Ich habe zum Thema alle Dokumentationen auf www.silverstripe.org gelesen und auch im Forum so ziemlich alles gelesen [so gut es die Suche zulässt ;-)]. Dennoch habe ich noch keinen Weg gefunden, meine Data Objekte ordentlich zu übersetzen.

    Um das Problem auch für diejenigen transparent zu halten, die den Beitrag in Zukunft noch lesen werden fange ich mal vorne an.

    Um die Mehrsprachigkeit zu aktivieren habe ich in meine _config.php (mysite) folgendes geschrieben:


    Translatable::set_default_locale('de_DE');
    Translatable::enable();
    Translatable::set_default_lang('de');


    Außerdem habe ich noch den zu übersetzenden Teil mit in der _config.php aktiviert:


    Object::add_extension('Artikeltexte', 'Translatable');
    // Artikeltexte könnte hierfür alles stehen. Z.B. Produkttexte, Lexikoneinträge, etc.


    In meiner page.php habe ich in der init() Funktion den Aufruf innerhalb des Seitenbaumes mit hineingenommen:


    if($this->dataRecord->hasExtension('Translatable')) {
    i18n::set_locale($this->dataRecord->Locale);
    }


    Folgendes habe ich vom Grundsatz her vor:

    Im Seitenbaum soll es eine holder Page für eine große Anzahl von Artikeln geben. Diese werden auf der Holder-Page kurz angerissen und führen dann jeweils auf eine Detailseite. Die Einzelnen Artikel sollen nicht über den Seitenbaum erstellt werden, sondern werden als DataObjekte in die DB gespeichert. Da ich das TinyMCE verwenden muss verwende ich keinen DataObjectManager (DOM) und auch keine ComplexTableFields (CTF), sondern habe die Verwaltung über $managed_models mit in die Hauptmenüleiste des Backends genommen. Dort werden die Daten über ein einfaches FieldSet verwaltet. Klappt auch so weit wunderbar.


    Dann habe ich per /dev/build/ meine DB neu generiert. Dabei ist die Tabelle für die Translationgroups auch angelegt worden (Artikeltexte_translationgroups).

    Wenn ich dann aber im CMS zum Beispiel in den englischen Übersetzungsbereich wechsle (Übersetzungen des SiteTrees) und dann in den Hauptnavigationspunkt meiner Artikeltexte wechsle, dann verliere ich meine engliche Locale und wechsle automatisch wieder ins deutsche. Neu Einträge und Updates bestehender Einträge bekommen immer ein "de_DE" in das Feld "Locale" in meiner Haupttabelle geschrieben.

    Ich habe dann mal weiter geschaut und eine Patch gefunden (http://open.silverstripe.org/attachment/ticket/4435/ctf-translatable-fix.patch, mit dem man die "locale" innerhalb der Fenster des Haupt CMS Bereiches halten kann. Hab's eingebaut. Klappt. Nutz aber bei meinem Problem nicht.

    Ich könnte jetzt natürlich hergehen und mir eine Auswahlliste in meine Artikeladministration setzen, mit der ich das "locale" Feld in meiner Tabelle per Auswahlliste fülle. Das halte ich aber nicht für besonders elegant und flexibel.

    Daher hier meine Frage:

    Wie wird die Mehrsprachigkeit bei DataObjekten grundsätzlich gehandhabt?

    Bei der Beantwortung suche ich keine Codeschnipsel für mein Problem sondern würde mich über einen generellen Austausch sehr freuen.

    P.S. Beim Versuch meine Languagefiles über http://<mysite>/dev/tasks/i18nTextCollectorTask zu generieren hat es auch geknallt. PHPUnit wird verwendet. Dieses ist aber nicht installiert. Und da die Domain auf einem Shared Hosting Server liegt und PHP als CGI läuft, kann man dieses auch nicht zu installieren. Kennt jemand eine Lösung, mit der mann ohne PHPUnit arbeiten kann. Alles per Hand zu übersetzen ist auch doof.


    EDIT:

    Habe gerade folgenden Link gefunden: http://silverstripe.org/translatablemodeladmin-module/.
    Habe es installiert und es ist vom Ansatz genau das was ich gesucht habe. Allerdings wird in das Tabellenfeld "Locale" immmer nur der Wert meiner "Default Sprache" also "de_DE" gespeichert. Auch dann, wenn ich eine andere Sprache vorausgewählt hatte.
    Ich schau mal weiter...

    EDIT: Leider keinen Erfolg gehabt http://www.silverstripe.org/all-other-modules/show/271796#post271796.
    Kann mir denn keiner Helfen? Das Problem muss doch schon öfters vorgekommen sein? Ich verzweifle langsam...
    Gruß, Carsten.

    Gruß, Carsten.

  • alexbeka
    Community Member
    11 Beiträge

    Re: Grundsätzlich: Übersetzungen von data objekten (nicht sitetree)

    ad dein Hauptproblem:
    ich weiß für dein Problem leider auch keinen speziellen Rat da meine bisherigen Implementierungen "einfacher" sind bzw. Übersetzungen vom Sitetree sind und ich im _config.file einfach folgenden Code schmeiße und damit funktionieren die Übersetzungen der pages:
    //making silverstripe multilinugal
    Object::add_extension('SiteTree', 'Translatable');
    //set default language
    Translatable::set_default_locale('de_AT');
    //Define all locales in which a new translation is allowed.
    Translatable::set_allowed_locales(array('de_AT', 'en_GB'));

    aber du willst ja deine Übersetzungen "nur" für deine Artikeltexte welches anscheinend eine abgeleitete Klasse von DataObject ist; mit dem TranslatableModelAdmin hab ich auch keine Erfahrungen;


    ad i18nTextCollectorTask: diesbezüglich gibt es auch von mir schon einen Forumseintrag; du kannst dir entweder dein Projekt auch lokal installieren mit wamp, lamp etc. inkl. phpunit und dann den TextCollector für jedes Modul aufrufen oder du verwendest z.b. den in diesem Forumsbeitrag angeführten Languilder oder 3. Möglichkeit du erstellst sie manuell die language files; ich persönlich hab mir einfach phpunit installiert;

  • dacar
    Community Member
    27 Beiträge

    Re: Grundsätzlich: Übersetzungen von data objekten (nicht sitetree)

    Hallo Alexbeka,

    vielen, vielen Dank für Deine Antwort! Leider bin ich nach dem letzten Wochenende auch noch immer nicht weiter. TranslatableModelAdmin erschließt sich mir auch noch nicht so ganz. Du hast beim Verwalten deiner Datensätze einen LanguageChooser über den Elementen für die CTF's auf der linken Seite. Wenn Du eine andere Sprache wählst, wird die Session für die gewählte Locale auch geschrieben. Wenn Du dann aber einen neuen Datensatz anlegst, dann hat dieser immer die default Locale als Wert. Beim Sitetree muss ich ja auch explizit sagen "Übersetzen". Das fehlt hier komplett. Ich muss das irgendwie geregelt bekommen.

    Was würdest Du denn machen, wenn Du für eine Rubrik jede Woche einen neuen Text hinterlegen müsstest? Sitetree geht m.E. hier gar nicht. Dann hättest Du ja nach 3 Jahren über 150 Einträge im entsprechenden Seitenbaum. Würde etwas unübersichtlich werden...

    Vielleicht hast Du ja noch eine Idee. Ansonsten vielen Dank für Deine Antwort.

    Gruß, Carsten.

  • spierala
    spierala Community Member
    2 Beiträge

    Re: Grundsätzlich: Übersetzungen von data objekten (nicht sitetree)

    Hallo Carsten,

    bist Du mit Deinem Problem weitergekommen?

    Ich habe glaube ich genau das gleiche Problem mit Translatable DataObjects.

    Ich habe es auch hier beschrieben:
    http://www.silverstripe.org/data-model-questions/show/283718?showPost=283718#post283718&flush=1

    Wie hat sich der verwendete Patch von Dir ausgewirkt? Konntest Du damit die DataObjects mit der richtigen Locale in die Datenbank schreiben, oder ist immer noch alles als "de_DE" hinterlegt

    Danke und viele Grüße,
    Florian

  • keys71
    Community Member
    19 Beiträge

    Re: Grundsätzlich: Übersetzungen von data objekten (nicht sitetree)

    HI zusammen.

    ich habe auch ein paar nicht befriedigende Lösungsansätze hinter mir.
    Ich bin in einem Testprojekt einen anderen Ansatz gegangen, der recht vielversprechend aussah.
    (Leider hab ich den Code gelöscht). Der Ansatz war folgender:

    Jede zu übersetzende Eigenschaft hat eine eigene Klasse (und somit DB-Tabelle bekommen).

    Bsp.:
    (runter getippt)


    class Article extends DataObject {
    static $db = array('InternaltTitle' => 'Vatchar');
    static $has_many = array('Teasers'=>'Article_Teaser');

    }

    class Article_Teaser extends DataObject {
    static $db = array(
    'Content' => 'HTMLText',
    'Locale' => 'Varchar(5)'
    );
    static $has_one = array('Article'=>'Article');
    }




    Weiterhin hab ich dann die Eltern-Klassen (Article) niocht direkt von DataObject abgeleitet, sonder von der eigenen KLasse TranslatableDataObject die dann Methoden, bzw. Getter bereit stellt, die übersetzten "Properties" in der derzeit gültigen Sprache liefert.

    Demnächst werde ich wieder ein ähnliches Projekt haben bei dem ich diesen Ansatz wieder aufgrreifen werde.
    Falls dann noch Bedarf ist, kann ich gerne den Code posten.

    Oder was meint Ihr ?

    Robert

  • Izeroy
    Community Member
    211 Beiträge

    Re: Grundsätzlich: Übersetzungen von data objekten (nicht sitetree)

    Hallo Robert,
    wenn du dieses Code Beispiel noch irgendwo wieder findest, bzw wieder einsetzt wäre ich dankbar wenn du den Ansatz einmal vorstellst. Vielleicht würde dies einigen Leuten helfen, und ich schaue mir immer wieder gerne "abstrakte" Logiken anderer an, durch sowas lernt man schneller Lösungsansatze zu finden.

    Greetz
    Ben

    Weitere Fragen?! Meld dich einfach! MSN: benjamin.buessenschuett@hotmail.de ICQ: 354 848 193 Webseite: www.silverstripe-hilfe.de

Zur Zeit online: Zur Zeit ist leider niemand online.

Wir begrüßen unsere neuen Mitglieder: saerdna