• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Language File - wie aufbauen und parsen

Puccini

Neues Mitglied
hi,

ich will gern mein aktuelles Projekt multilingual machen.
Hierfür wollte ich für jede betroffene Sprache ein File "de.lang" zB machen.

Da drin soll über einen String-Index der betroffene Satz stehen.
Ich dachte mir, ich mach das mal lieber als numerischen Index, da so die einträge schneller gefunden werden könnten.

Jetzt meine Frage:
Wie wäre der Aufbau am sinnvollsten?
Als XML-Struktur?
Oder einfach als normale Zeile und einmal parsen - fertig?

bei der Zeilenmethode würde ich das so aufbauen:

Code:
1 :: Willkommen auf der Seite.
2 :: Hier finden Sie viele nützliche Informationen.
usw.

Das ganze würde ich beim Start der Seite einmal laden und in einem session-array speichern.

Wie würde ihr vorgehen?

Danke für eure Hilfe :D
 
Werbung:
Bei meinem Browsergame ist es in einer Datenbank.
Primärschlüssel ist ein varchar und Inhalt ist ein blob.
Und für dich (ich mach's leicht anders) noch ein Sprachtag als enum.

So geht's am schnellsten und am sichersten.
Außerdem lässt sich sowas auch viel einfacher über ein Interface ändern statt es jedes Mal per Hand zu ändern.

Dann einfach in eine Session das Sprachtag setzten (oder in ein Cookie) und dann dementsprechend aufrufen.

Stellt sich nur die Frage, wie viele Übersetzungen in deiner Datenbank sind. Bei vielen würde ich nur dann einen Aufruf machen wenn die Übersetzung nötig ist. Bei > 150 Übersetzungen kannst du gleich alle Daten in ein Array setzen.
 
dafür extra eine tabelle anlegen?
ich weis nicht. sieht mir zu aufwendig aus.
Und beim editiren bin ihc im file schneller als in der db.
aber das ist ansichstsache.

hat die db-variante irgend einen vorteil gegenüber einer file-based methode?
 
Werbung:
Ja.
Das suchen nach einer Übersetzung ist schneller.
Man hat keine empfindliche Datei irgendwo rumliegen.
Ein Interface um den Inhalt zu ändern ist ohne viel Aufwand programmiert.
Es lässt sich einfacher administrieren.
Nach einigen 100 Übersetzungen zeigt es deutliche Vorteile, weil übersichtlicher.

Aber das alles ist natürlich alles eine Ansichtssache.
Ich habe früher eine Datei in meinem Browsergame gehabt, die hieß word.php

In der habe ich folgendes gemacht:

$w['index'] = 'Startseite';
$w['register'] = 'Registrieren';

Hab's aber nach der hundertsten $w[] aufgegeben und alles in eine DB gestopft. Auf Dauer sicher sehr von Vorteil :)
 
Werbung:
ich schwöre auf die guten alten arrays, wenns darum geht, sprachdateien zu erstellen...

Nils aka XraYSoLo
 
ich schwöre auf die guten alten arrays, wenns darum geht, sprachdateien zu erstellen...

Nils aka XraYSoLo
ich auch, ausserdem würde ich das für spätere ausbau möglichkeiten in einen ordner "de" legen und dort eine lng_main, lng_admin etc anlegen. so kann man das parsen auf mehrere dateien zerlegen.

in eine session schreibe ich dann die gewählte sprache (das verzeichnis) und muss mich um dateinamen nicht mehr kümmern.
 
Ich bevorzuge ebenfalls die Datenbank, allerdings mit Spalten für jede Sprache. Das läßt sich dann leicht z.b. in phpmyadmin editieren.
 
Werbung:
Also bei größeren Projekten gibt es Lokalisierungsteams oder eingekaufte Übersetzter. Weshalb man auf Standardtools setzten sollte. Verbreitet ist eben Gettext, daneben gibt es noch einige andere Formate. Hier eine Übersicht: Zend Framework: Documentation
 
ich denke wenn man wirklich eine gute lösung haben will dann nimmt man php arrays und baut sich eine klasse die damit um kann und einige sonderfälle handhaben kann

ist garnicht so schwer... und schneller als jede andere lösung die hier vorgestellt wurde weil du praktisch nichts mehr machen musst als die richtige datei einbinden und dann auslesen...

kein nutzloses rumgeparse und dank PHP: var_export - Manual auch super leicht mit ner kleinen oberfläche zu bearbeiten oder um neue sprachfiles zu erstellen.
 
also, ich wollt jetzt grad mit gettext arbeiten.
Dazu hab ich mir mal PoEdit installiert.
Nur wie schaffe ich es jetzt, eine Ausgangs-Übersetzungs-Datei zu erstellen?
(einte .pot soviel ich weis) ???

Diese soll dann die deutschen texte enthalten.
Mit PoEdit kann ich scheinbar nur bestehende Dateien in andere Sprachen übersetzten -.-
 
Werbung:
also ich machs auch immer als datei z.b. de.lang oder so ich machs allerdings nicht mit nem integer als key sondern ne kurze beschreiben also wie ne variable halt.. z.b

user_created::User wurde angelegt
user_deleted::User wurde gelöscht

etc..

also mit prefix da tu ich mir leichter wenn ich die datein z.b. absuchen will auf bestimmte bereiche :)

und die datei lass ich dann einfach von der sprache klasse parsen und verwerten
 
also irgendwie bekomm ich es net hin.

Ich hab jetzt in PHP ein einfaches Test-File erzeugt:
test.php
PHP:
<?php

echo _('Hier ein kleiner Test');
?>

Dann hab ich PoEdit Bearbeiten->Einstellungen->Übersetzungsspeicher ausgewählt und die Sprache de angewählt.
Dann auf "Datenbank erstellen" geklickt, den Pfad zu meinem Test-File angegeben und auf erstellen geklickt. Nix kam. Ich nehm an dieser Speicher sucht nur nach PO und MO files.
Wie muss ich diesen ersten Parser-Gang anstossen? Das alle codezeilen ausgewertet werden mit diesem String?

Danke für die Hilfe.
 
Werbung:
  • "Neuer Katalog"
  • Sprache, Zeichensatz usw. einstellen
  • "Pfade"
  • Pfade zu den zu parsenden Scripten/Dateien anpassen (am besten relativ zum Pfad, wo die po gespeichert werden soll)
  • "Schlüsselwort"
  • "_" als Schüsselwort angeben (oder z.B. "translate", wenn die Funktion, welche übersetzt translate() lauten soll)

Unter Einstellungen solltest du gucken, ob es unter "Parser" "PHP" gibt. Ansonsten einen erstellen mit den Optionen:
  • Sprache: PHP
  • Dateiendungen: *.php;*.phtml
  • Parser-Befehl: xgettext --force-po -o %o %C %K %F
  • Schlüsselwortliste: -k%k
  • Eingabedateiliste: %f
  • Zeichensatz des Quellcodes: --from-code=%c

Dann sollte er Strings finden.
 
wunderbar, hat funktioniert.

Nur wie teste ich jetzt, ob meine übersetzung funktioniert XD

Der aufruf der Seite bringt mir den normalen Test der in _('') steht.
Wie bekomme ich jetzt die englische/deutsche übersetzung zu sehen :D
 
Werbung:
Zurück
Oben