Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

1 Mehrsprachigkeit in PHP In Anwendungen und Datenbanken von Mai 2006.

Ähnliche Präsentationen


Präsentation zum Thema: "1 Mehrsprachigkeit in PHP In Anwendungen und Datenbanken von Mai 2006."—  Präsentation transkript:

1 1 Mehrsprachigkeit in PHP In Anwendungen und Datenbanken von Mai 2006

2 2 Part I Mehrsprachigkeit in PHP Anwendungen

3 3 Wofür überhaupt explizite Sprachmodule Designentscheidung Mehrsprachigkeit Schnittstelle für Übersetzer

4 4 Wie kann man Sprachmodule realisieren? Nachteile Immer alle Sprachen eingebunden Um Zugriff darauf zu haben, muss das Sprach-Array als Globale in jede Funktion eingebunden werden Global array I Verwendung $lang[de][firstname] = Vorname; $lang[de][lastname] = Nachname; $lang[de][age] = Alter;... $lang[en][firstname] = First Name; $lang[en][lastname] = Last Name; $lang[en][age] = Age (in Years);

5 5 Wie kann man Sprachmodule realisieren? Switched Array II Verwendung switch ($lang) { case "de": include("langDE.inc"); break; case "en": include("langEN.inc"); break; default: include("langDE.inc"); break; }

6 6 Wie kann man Sprachmodule realisieren? Defines III Verwendung I function KontaktDatenErzeugen($firstName, $lastName, $age) { global $lang; $rows[] = array( $lang[firstname], $firstName); $rows[] = array( $lang[lastname], $lastName); $rows[] = array( $lang[age], $age); echo table_build($rows); } VornameHans NachnameMustermann Alter25

7 7 Wie kann man Sprachmodule realisieren? Defines III Verwendung II Define(firstname, Vorname); define(lastname, Nachname); define(age, Alter);... Define(__firstname, Vorname); define(__lastname, Nachname); define(__age, Alter);...

8 8 Wie kann man Sprachmodule realisieren? Datenbank IV Zur Pflege: JA Zur Verwendung: NEIN

9 9 Pflege der Übersetzungen Manuell Nachteile Weitere Sprachen hinzufügen bedeutet, neue Datei (z.B. langIT.inc) erzeugen und alle bisher vorhandenen Keys nachtragen. Weiteren Key hinzufügen bedeutet, in allen Dateien den Key einzupflegen (beim Löschen zu entfernen). Vorteil Sehr einfach an externe Übersetzer / Community weiterzugeben.

10 10 Pflege der Übersetzungen Datenbank Übersetzungstabelle Create table languages ( id int(11) NOT NULL default '0', key varchar(64) NOT NULL default, langDE text langEN text, langIT text, PRIMARY KEY (id) ) Daten per Skript in gewünschtes Format zu exportieren Konsistenzwahrung beim Hinzufügen von Sprachen

11 11 Optimierung Sourcecode Verwendung I Verwendung II $s = $lang[firstname]..$lang[lastname]; $s = _(firstname).._(lastname) Vorteile Zeichnet sich durch kurze prägnante Verwendung aus Umgeht das Problem der Globals und der Namespaces Nachteile Gettext stützt sich auf die lokale Einstellungen des Servers Weitere Komponente, unübersichtliches Menüstruktur für Daten

12 12 Exkurs: Gettext Sprachdefinitionen die englische messages.po msgid firstname msgstr First Name msgid lastname msgstr Last Name msgid age msgstr Age die deutsche messages.po msgid firstname msgstr Vorname msgid lastname msgstr Nachname msgid age msgstr Alter

13 13 Exkurs: Gettext Vorteile: Kann mit beliebigem Editor bearbeitet werden Es gibt frei verfügbare GUI-Editoren (poEdit ubuntu webbased)http://www.poedit.org/ Command-Line Tools Weit verbreitet

14 14 Exkurs: Gettext

15 15 Vorgehensweise Sprachkeys automatisch aus Sourcecode extrahieren xgettext --language=php -o messages.po --keyword=_ myApp.php Ergebnis: Sprachkeys jederzeit per Skript aus unserem Projekt ziehen Vorhandenen Übersetzungen werden in neue messages.po Dateien integriert Überflüssige Übersetzungen (#~...) können per Skript entfernt werden (awk '{if (/^#~/) exit; else print}' messages.po > messages_bereinigt.po) (Die PO-Dateien sollten in UTF8 Kodierung gespeichert werden, der PHP Code liegt aber meistens in iso vor, das lässt sich aber per Parameter xgettext -- from-code=iso lösen) Nachteil: Vor der eigentlichen Verwendung durch gettext muss die eigentliche textbasierte PO-Datei in eine binäre MO-Datei überführt werden. Extrakt mit vorhandenen Übersetzungen mischen msgmerge messages.po messages_alt.po > messages_utf8.po

16 16 Entwicklungszyklus verkürzen Pear Bibliothek Translation2 erlaubt die direkte Verwendung der MO-Dateien Während der Entwicklung wird das Generieren der PO Dateien nicht benötigt Einfacher für Entwickler

17 17 Entwicklungszyklus verkürzen Feinheiten (1) Verwendung von Translation2 $params = array( 'prefetch' => false, 'langs_avail_file' => './lang/langs.ini', 'domains_path_file' => './lang/domains.ini', 'default_domain' => 'messages', 'file_type' => 'po', // aktivieren ); $tr = Translation2::factory('gettext', $params); $tr->setLang($lang); echo $tr->get(firstname);

18 18 Entwicklungszyklus verkürzen Feinheiten (2) Wrapper # doppelter Underscore function __($message) { global $tr; $translate = $tr->get($message); # beliebige Validierung einbaubar $res = ' '.$translate.' '; return $res; }

19 19 Fazit Was haben wir erreicht? Texte aus Sourcecode ausgegliedert Grundlagen für Mehrsprachigkeit geschaffen Einheitliches verbreitetes System (Gettext) als Basis gewählt, mit den Vorteilen der Tools und Anwendungen Den Turn-Around für den Entwickler minimal gehalten (Übersetzung definieren, speichern, Anwendung aktualisieren, fertig) Aus Performancegründen die Live-Version mit den komprimierten MO-Dateien

20 20 Part II Mehrsprachigkeit in Datenbanken

21 21 Mehrsprachigkeit in Datenbanken Mehrsprachigkeit in Daten, nicht nur in Anwendung Anzahl der Sprachen in Anwendung und Daten unterschiedlich Vermeidung von Datenfehlern / Inkonsistenzen in Daten

22 22 Wo sind die Probleme? Beispiel Klassen sprachabhängiger Attribute 1. Unabhängig (z.B. Zahl, Farbe, Namen,...) 2. Abhängig (z.B. Anrede) 3. Abhängig, aber mit bekannter Transformationsfunktion: Temperatur (Grad, Fahrenheit), Gewicht (kg, Pfund), Längen (km, Miles), Währungen,... Anwendung dtDatenbank AnredeHerr VornamePaul NachnameMustermann Anwendung enDatenbank TitleHerr vs. Mr. !!!! First NamePaul Last NameMustermann

23 23 Wo speichert man die Übersetzung? In der Datenbank In dem Datensatz, d. h. Tabellendefinition erweitern

24 24 Wie speichert man die Übersetzung? Tabellenstruktur alt Tabellenstruktur neu CREATE TABLE `kategorien` ( id int(10) unsigned NOT NULL auto_increment, caption varchar(30) NOT NULL default '', PRIMARY KEY (id) ) CREATE TABLE `kategorien` ( id int(10) unsigned NOT NULL auto_increment, caption_de_DE varchar(30) NOT NULL default '', caption_en_US varchar(30) NOT NULL default '', PRIMARY KEY (id) )

25 25 Wie speichert man die Übersetzung? Inhalt der Tabelle Einfach weitere Sprachen möglich 1, Privat, Privat 2, Geschäftlich, Business 3, Notiz, Note 4, Anruf, Phone Call

26 26 Wie verwendet man die Übersetzung? Zugriff mit MySQL bisher Zugriff mit MySQL jetzt $sql = select caption from kategorien order by caption; $lang = de_DE; $sql = select caption{lang} from kategorien order by caption; $sql = str_replace({lang}, _.$lang, $sql);

27 27 Zwischenergebnis Mehrsprachigkeit in Daten Kollisionsfreie Erweiterung vorhandener Datenbanken Einfache Umstellung der SQL-Ausdrücke Sanfte Migration Was noch?

28 28 Format der Daten Vor MySQL 4.1 keine Auswahlmöglichkeit Ab 4.1 für jedes Attribut eigenes Format, in Abhängigkeit der Daten möglich Normalerweise latin1_general_ci, latin1_german1_ci (NICHT _cs !)

29 29 Darstellung der Daten Ab MySQL 4.1 pro Verbindung Ergebnis DatenMuffler Müller MX Systems MySQL SELECT name FROM kunden ORDER BY name COLLATE collation_name latin1_swedish_cilatin1_german1_cilatin1_german2_ci MufflerMufflerMüller MX SystemsMüllerMuffler MüllerMX SystemsMX Systems MySQLMySQLMySQL

30 30 Ausblick Part III, mit praktischen Beispielen Diskussion

31 31 Ende – Fin – Finish – Finito... Folien auf der UG Website Fragen, Ideen, Austausch Folien unter Danke für euer Interesse!


Herunterladen ppt "1 Mehrsprachigkeit in PHP In Anwendungen und Datenbanken von Mai 2006."

Ähnliche Präsentationen


Google-Anzeigen