Präsentation herunterladen
Die Präsentation wird geladen. Bitte warten
Veröffentlicht von:Willafried Widder Geändert vor über 10 Jahren
1
1 Mehrsprachigkeit in PHP In Anwendungen und Datenbanken von Stefan.Kilp@gmx.netStefan.Kilp@gmx.net 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 http://www.poedit.org/, 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-8859-1 vor, das lässt sich aber per Parameter xgettext -- from-code=iso-8859-1 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 stefan.kilp@gmx.net stefan.kilp@gmx.net Folien unter http://kilp.net/phpugffm/Mehrsprachigkeit_in_PHP.pdf http://kilp.net/phpugffm/Mehrsprachigkeit_in_PHP.pdf Danke für euer Interesse!
Ähnliche Präsentationen
© 2024 SlidePlayer.org Inc.
All rights reserved.