Ergebnis 1 bis 18 von 18

Thema: Mehrsprachiges Modul entwickeln

  1. #1
    Contao-Nutzer
    Registriert seit
    21.07.2009.
    Beiträge
    19

    Standard Mehrsprachiges Modul entwickeln

    Hallo community,
    Ich habe ein Modul entwickelt, welches ich nun mehrsprachig verwenden möchte. Es gibt beschreibungsfelder, die zB in englisch, deutsch und zukünftig ev. anderen Sprachen zur Verfügung stehen sollen.

    Gibt es eine akkurate Möglichkeit das umzusetzen? Oder muss ich das irgendwie hinpfuschen? Im Typo3 ist das ja ohne größere Probleme möglich.

    Hat einer eine Idee wie man das umsetzen kann? Ausser für jede Sprache die Tabellenfelder die übersetzbar sein sollen?

    Vielen Dank schonmal
    Walle

  2. #2
    Wandelndes Contao-Lexikon Avatar von BugBuster
    Registriert seit
    15.06.2009.
    Ort
    Berlin
    Beiträge
    10.520
    User beschenken
    Wunschliste

    Standard

    Deine Textausgaben sollten aus Variablen kommen und diese werden in Dateien definiert die im Unterverzeichnis language/sprachekürzel/ liegen, ( language/de/ , language/en/ ....)
    , schaue dir einfach mal ein x-beliebiges Modul an dazu.

    Dort werden auch die Bezeichnung deines Moduls, der Felder im Backend etc. sprachabhängig definiert.
    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

  3. #3
    Contao-Nutzer
    Registriert seit
    21.07.2009.
    Beiträge
    19

    Standard

    Hallo BugBuster,
    Habe mich etwas missverständlich ausgedrückt: Ich habe natürlich alle Felder durch den languages Ordner Übersetzt. Es geht mir eher um die Datenbankinhalte.

    Ich habe in der Datenbank Felder, zB "description", das kann für die Deutschen auf Deutsch sein, für die Englischen auf Englisch... Und das bereitet mir etwas Kopfschmerzen.

    Die Mehrsprachigkeit der festen Daten ist super, gibt es nichts zu meckern. Nur die variablen Daten (usereinhaben, admineingaben...) gehen nicht so einfach...

  4. #4
    Wandelndes Contao-Lexikon Avatar von BugBuster
    Registriert seit
    15.06.2009.
    Ort
    Berlin
    Beiträge
    10.520
    User beschenken
    Wunschliste

    Standard

    Woher soll das Modul wissen welche Sprache der Nutzer haben will?
    Über mehrsprachige Seiten d.h. Spracheinstellung in der Seitenstruktur oder irgendwie anders?
    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

  5. #5
    Contao-Nutzer
    Registriert seit
    21.07.2009.
    Beiträge
    19

    Standard

    jop, genau. Über die Sprachauswahl der Seite.

  6. #6
    Wandelndes Contao-Lexikon Avatar von BugBuster
    Registriert seit
    15.06.2009.
    Ort
    Berlin
    Beiträge
    10.520
    User beschenken
    Wunschliste

    Standard

    da kommt man garantiert ran, aber das kann ich dir auswendig nicht sagen.
    Müsste ich auch erst suchen wie das geht. Vielleicht gibts ja dazu schon was im Forum.
    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

  7. #7
    Administrator Avatar von xchs
    Registriert seit
    19.06.2009.
    Beiträge
    14.559
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Normalerweise werden doch in TYPOlight sämtliche Ressourcen pro Sprache angelegt, d.h. in Deinem Fall müsste man dann eben zwei Module anlegen eines z.B. für "DE", ein anderes für "EN".
    So läuft das ja bei allen anderen Modulen auch! Oder möchtest Du das aus einem bestimmten Grund nicht?
    Contao Community Administrator

    [Unterstützungsmöglichkeiten]

  8. #8
    Wandelndes Contao-Lexikon Avatar von BugBuster
    Registriert seit
    15.06.2009.
    Ort
    Berlin
    Beiträge
    10.520
    User beschenken
    Wunschliste

    Standard

    Kann er machen, dann muss das Modul aber immer noch "gesagt" bekommen für welche Sprache es jetzt arbeiten soll bzw. das selber feststellen.
    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

  9. #9
    Administrator Avatar von xchs
    Registriert seit
    19.06.2009.
    Beiträge
    14.559
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Zitat Zitat von BugBuster Beitrag anzeigen
    Kann er machen, dann muss das Modul aber immer noch "gesagt" bekommen für welche Sprache es jetzt arbeiten soll bzw. das selber feststellen.
    Wieso denn? Wenn das Modul über das Seitenlayout eingebunden wird, dann hat man ja für die englische Website ein entsprechend anderes Seitenlayout als für die deutschen Seiten. Wird das Modul als CE eingebunden, dann erfolgt das ja auch im entsprechenden Seitenbaum der jeweiligen Sprache...
    Contao Community Administrator

    [Unterstützungsmöglichkeiten]

  10. #10
    Contao-Nutzer
    Registriert seit
    21.07.2009.
    Beiträge
    19

    Standard

    aber die Datenbankeinträge bleiben ja gleich

  11. #11
    Administrator Avatar von xchs
    Registriert seit
    19.06.2009.
    Beiträge
    14.559
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Zitat Zitat von wallenium Beitrag anzeigen
    aber die Datenbankeinträge bleiben ja gleich
    Du meinst die Datenbankeinträge des Moduls?

    Wenn Du pro Sprache ein eigenes Modul anlegst, dann hast Du ja zwei verschiedene Datensätze in der DB mit unterschiedlichen IDs...
    Contao Community Administrator

    [Unterstützungsmöglichkeiten]

  12. #12
    Contao-Nutzer
    Registriert seit
    21.07.2009.
    Beiträge
    19

    Standard

    stimmt soweit schon. Wäre eine Möglichkeit...

    ich dachte bisher halt so:
    Englisch ist default. Wenn deutsch vorhanden ist, soll er das deutsche nehmen. Wenn nicht, das englische.

    Das geht mit der vorgehensweise nur beschränkt.

    Das ganze handelt sich um eine Art uploadsystem. Ähnlich dem Modulrepo von TypoLight. User können ihre Modifikationen hochladen. User in dem Webscript (kein TL, eigenständiges programm. nur die neue Homepage mit dem Repo setzt auf TL) können die Plugins runterladen.

    Da wäre es doof wenn die das 2 mal machen müssten als autor. oder 5 mal... Ich kann nur von Typo3 reden, wo die Tabelle jederzeit eine Übersetzung beinhalten kann. Wie das T3 bewerkstelligt kann ich nicht sagen... Bleibt wohl doch nur die Möglichkeit mit mehreren Tabellen.

    Frage: Bisher habe ich alles in einer Tabelle (Zb, name, description, version, file....). Wenn ich nun alle übersetztbaren Sachen auslagere, kann ich im DCA Backend sagen, dass er einen Teil von Tabelle1 und einen Til von Tabelle 2 läd? Dann kann ich quasi eine eigene Tabelle für die variablen Felder machen, diese kann Übersetzungen beinhalten, und je nach sprache läd er die passende? Im BE müssten halt beim editieren ALLE sprachen aufgelistet werden... Im FE kein Problem.. mit dem DCA im Backend sehe ich da durchaus welche..

  13. #13
    Contao-Fan Avatar von deerwood
    Registriert seit
    24.11.2009.
    Ort
    Hamburg
    Beiträge
    344

    Standard

    Moin wallenium,

    verstehe ich das recht: Du hast einige Felder zu Deinen Uploads, die NICHT von der Sprache abhängen (etwa Dateiname/pfad, Größe) und einige Felder, die in mehreren Sprachen vorliegen KÖNNEN (etwa Name und Beschreibung), Englisch ist Pflicht, aber alle anderen Sprachen sind optional und es kann sein, dass der Name zwar in DE und EN vorliegt, aber die Beschreibung nur in EN?
    • Im Frontend sollen dann, falls der Benutzer DE sehen möchte, alle Felder, die DE haben, in DE gezeigt werden, die anderen in EN. Also gemischt-sprachig ... und in einer Listen-Anzeige kann es sein, dass einige Datensätze in DE bzw. gemischt, aber andere komplett in EN gezigt werden?
    • Im Backend soll es dann nur genau einen logischen Datensatz zum Upload geben, so dass die NICHT von der Sprache abhängigen Felder nur 1 mal ausgefüllt werden müssen. Bei den von der Sprache abhängigen Feldern soll es möglich sein, alle Sprachen auszufüllen (also mehre Eingabefelder für ein und das selbe logische Feld)?

    Von Hause aus unterstützt TL so etwas IMO nicht. Dazu, wie man das speichern kann, weiter unten, zunächst meine Idee zum Backend. Es gibt zwei Widget-Erweiterung [MultiTextWizard] und [textwizard], die man entweder direkt verwenden kann oder deren Code man als Vorlage nehmen könnte, um ein eigenes Widget zu programmieren. Der MultiTextWizard erscheint mir fast direkt geeignet (2 Spalten: Sprachkürzel und Feldtext) es sei denn, Du möchtest auch noch den Komfort einer Selectbox mit den verfügbaren Sprachen in der ersten Spalte haben (statt einer direkten Eingabe von 'en', 'de' usw).

    Nun zur Speicherung: verwendest Du den MultTextWizard, dann speichert der alle Feld-Zeilen/Spalten als 2-dimensionales serialisiertes Array in dem DB-Feld und das läßt sich, so wie er programmiert ist, auch nicht verhindern. Nun ist das ja aber durchaus nicht schlecht. Mache das Feld zum BLOB, damit genug Platz zur Verfügung steht und in Deinem Frontendmodul musst Du dann mit einer Schleife über die selektierten Upload-Datensätze gehen, die Sprachfelder deserialisieren und die Anzeige aus den jeweils verfügbaren Sprachen zusammenbauen. An die gewünschte Sprache solltest Du via $GLOBALS['TL_LANGUAGE'] herankommen; ist die bei einem Feld da, gibst Du sie aus, sonst halt die EN (und wenn die nicht da ist, dann halt nach irgendeiner Priorität eine der verfügbaren).

    Ich glaube, irgend ein Gedöns mit Auslagerung der Sprachfelder in eine eigene Tabelle kann man sich so komplett sparen. Das BLOB-Feld (oder meinethalben auch TEXT) ist sogar ganz brauchbar per SQL durchsuchbar (z.B. mit LIKE '%some string%'). Das liegt daran, dass serialisierte PHP Arrays die Strings im Prinzip im Klartext enthalten:

    PHP-Code:
    $serialize_test = array(
        array(
    'de''Eine Beschreibung in Deutsch'),
        array(
    'en''A description in English'),
        array(
    'xx''Een dösige Text op platt'),
    );
    // serialisiertes Array
    a:3:{i:0;a:2:{i:0;s:2:"de";i:1;s:28:"Eine Beschreibung in Deutsch";}i:1;a:2:{i:0;s:2:"en";i:1;s:24:"A description in English";}i:2;a:2:{i:0;s:2:"xx";i:1;s:25:"Een dösige Text op platt";}} 
    Könnte das weiterhelfen?

    LG, Georg

  14. #14
    Contao-Nutzer
    Registriert seit
    21.07.2009.
    Beiträge
    19

    Standard

    Hallo Georg,
    Das klingt sehr gut... Ich werde es so probieren. Könnte klappen.

    Gruss
    Simon

  15. #15
    Contao-Nutzer
    Registriert seit
    17.03.2010.
    Beiträge
    38

    Standard

    @Georg: Vielen Dank für die Idee.

    Ich habe das jetzt auch so in meinem Modul umgesetzt. Nun stehe ich aber vor einem Problem:

    Mysql kann ein serialisiertes Array nicht sortieren. Jedenfalls wüsste ich nicht wie. Somit kann ich per Mysql kein Limit setzen und müsste die Sortierung mit PHP durchführen.

    Bei wenigen Einträge kein Problem.

    Nun leider hat es im meinem Fall sehr viele Datensätze...

    Hat sich jemand schon mal mit diesem Problem auseinandergesetzt?

  16. #16
    AG Core-Entwicklung
    Registriert seit
    16.10.2009.
    Ort
    Bad Lausick
    Beiträge
    437

    Standard

    in isotope gibt es einen neuen DCA treiber, der mehrsprachigkeit für logische datensätze unterstützt. dieser wurde da bei den produkten verwendet um nur einen lagerstand/preis/andere konfigurationen zu speichern und frontend relevante dinge wie beschreibung/produkttitel in mehreren sprachen einzugeben. die auswahl der grade einzugebenden sprache geschieht über eine dropdownbox im edit-bereich eines datensatzes.

    denke mal das ist ziemlich genau das, was gebraucht wird hier. inwiefern sich der DCA treiber auch hier einsetzen lässt bleibt abzuwarten.

  17. #17
    Contao-Fan Avatar von deerwood
    Registriert seit
    24.11.2009.
    Ort
    Hamburg
    Beiträge
    344

    Standard

    Hi,

    Zitat Zitat von serienjunky Beitrag anzeigen
    Mysql kann ein serialisiertes Array nicht sortieren. Jedenfalls wüsste ich nicht wie. Somit kann ich per Mysql kein Limit setzen und müsste die Sortierung mit PHP durchführen.
    Ein Problem mit dem Sortieren hat mit dem MySQL Datentyp der Spalte zu tun, in der das serialisierte Array abgelegt wird. Zitat aus der MySQL Doku:

    BLOB values are treated as binary strings (byte strings). They have no character set, and sorting and comparison are based on the numeric values of the bytes in column values. TEXT values are treated as nonbinary strings (character strings). They have a character set, and values are sorted and compared based on the collation of the character set.
    Also: statt BLOB muss man TEXT als Datentyp verwenden, wenn man die Spalte sortieren möchte (hatte das Stichwort TEXT oben auch schon erwähnt).

    Nun macht es wenig Sinn, nach den rohen Werten des serialisierten Arrays zu sortieren, weil die Metadaten (Counts, Typ-Anzeiger, siehe Beispiel oben) ja mit sortiert würden. Aber ORDER BY erlaubt EXPRESSIONS als Kriterium, nicht nur Spalten-Namen oder -Positionen. Man könnte also eventuell so etwas versuchen (ungetestet!):

    PHP-Code:
    ORDER BY `column_nameLIKE '"de"%"%";)' 
    um nach deutschen Texten zu sortieren. Auch mal die Doku zu REGEXP lesen.

    Mein größtest Problem ist aber, zu verstehen, was genau Du erreichen willst? Willst Du danach sortieren, was der Benutzer dann auch gezeigt bekommt, also multilingual bzw. Fallback-Sprache, wenn die Wunsch-Sprache nicht da ist? Dann fällt mir keine gute Lösung mit nur SQL ein, auch nicht, wenn man die Sprach-Werte in eine eigene Hilfstabelle auslagern würde.

    Ich erwähne auch noch einmal, dass man den Code des MultTextWizard als Basis für eine eigene Erweiterung nehmen könnte und die Speicherung anders implementiert, z.B. in der erwähnten Hilfstabelle.

    LG, Georg

  18. #18
    Contao-Nutzer
    Registriert seit
    17.03.2010.
    Beiträge
    38

    Standard

    Hallo, endlich habe ich wieder Zeit mich mit diesem Problem zu beschäftigen.
    Das mit der eigenen Erweiterung bzw. mit der Hilfstabelle ist eine super Idee.
    Nun ergibt sich aber das Problem, dass wenn man einen Eintrag löscht, die Texte in der der Hilfstabelle bestehen bleiben.
    Oder gibt es vielleicht eine Möglichkeit im Widget eine Funktion zu definieren, die immer dann aufgerufen wird, wenn ein Eintrag gelöscht wird?

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Ähnliche Themen

  1. Antworten: 43
    Letzter Beitrag: 25.01.2019, 08:44
  2. Entwickeln unter MAC
    Von christian.barkowsky im Forum Off Topic
    Antworten: 14
    Letzter Beitrag: 27.12.2010, 13:03
  3. Mehrsprachiges Navigations-Modul mit Insert-Tag iflng?
    Von darth_saschi im Forum Layout / Templates / Holy Grail
    Antworten: 32
    Letzter Beitrag: 18.01.2010, 14:17
  4. Website lokal entwickeln?
    Von olek07 im Forum Installation / Update
    Antworten: 2
    Letzter Beitrag: 03.09.2009, 17:52

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •