1 Mehrsprachigkeit in PHP In Anwendungen und Datenbanken von [email protected]@gmx.net...
-
Upload
willafried-widder -
Category
Documents
-
view
109 -
download
0
Transcript of 1 Mehrsprachigkeit in PHP In Anwendungen und Datenbanken von [email protected]@gmx.net...
![Page 2: 1 Mehrsprachigkeit in PHP In Anwendungen und Datenbanken von Stefan.Kilp@gmx.netStefan.Kilp@gmx.net Mai 2006.](https://reader035.fdocuments.net/reader035/viewer/2022062623/55204d7349795902118c85be/html5/thumbnails/2.jpg)
2
Part I
Mehrsprachigkeit
in PHP Anwendungen
![Page 3: 1 Mehrsprachigkeit in PHP In Anwendungen und Datenbanken von Stefan.Kilp@gmx.netStefan.Kilp@gmx.net Mai 2006.](https://reader035.fdocuments.net/reader035/viewer/2022062623/55204d7349795902118c85be/html5/thumbnails/3.jpg)
3
Wofür überhaupt explizite Sprachmodule
Designentscheidung Mehrsprachigkeit Schnittstelle für Übersetzer
![Page 4: 1 Mehrsprachigkeit in PHP In Anwendungen und Datenbanken von Stefan.Kilp@gmx.netStefan.Kilp@gmx.net Mai 2006.](https://reader035.fdocuments.net/reader035/viewer/2022062623/55204d7349795902118c85be/html5/thumbnails/4.jpg)
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 IVerwendung
$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)’;
![Page 5: 1 Mehrsprachigkeit in PHP In Anwendungen und Datenbanken von Stefan.Kilp@gmx.netStefan.Kilp@gmx.net Mai 2006.](https://reader035.fdocuments.net/reader035/viewer/2022062623/55204d7349795902118c85be/html5/thumbnails/5.jpg)
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;
}
![Page 6: 1 Mehrsprachigkeit in PHP In Anwendungen und Datenbanken von Stefan.Kilp@gmx.netStefan.Kilp@gmx.net Mai 2006.](https://reader035.fdocuments.net/reader035/viewer/2022062623/55204d7349795902118c85be/html5/thumbnails/6.jpg)
6
Wie kann man Sprachmodule realisieren?
Defines IIIVerwendung 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);}
Vorname HansNachname MustermannAlter 25
![Page 7: 1 Mehrsprachigkeit in PHP In Anwendungen und Datenbanken von Stefan.Kilp@gmx.netStefan.Kilp@gmx.net Mai 2006.](https://reader035.fdocuments.net/reader035/viewer/2022062623/55204d7349795902118c85be/html5/thumbnails/7.jpg)
7
Wie kann man Sprachmodule realisieren?
Defines IIIVerwendung II
Define(‘firstname’, ‘Vorname’);define(‘lastname’, ‘Nachname’);define(‘age’, ‘Alter’);...
Define(‘__firstname’, ‘Vorname’);define(‘__lastname’, ‘Nachname’);define(‘__age’, ‘Alter’);...
![Page 8: 1 Mehrsprachigkeit in PHP In Anwendungen und Datenbanken von Stefan.Kilp@gmx.netStefan.Kilp@gmx.net Mai 2006.](https://reader035.fdocuments.net/reader035/viewer/2022062623/55204d7349795902118c85be/html5/thumbnails/8.jpg)
8
Wie kann man Sprachmodule realisieren?
Datenbank IV
Zur Pflege: JA Zur Verwendung: NEIN
![Page 9: 1 Mehrsprachigkeit in PHP In Anwendungen und Datenbanken von Stefan.Kilp@gmx.netStefan.Kilp@gmx.net Mai 2006.](https://reader035.fdocuments.net/reader035/viewer/2022062623/55204d7349795902118c85be/html5/thumbnails/9.jpg)
9
Pflege der Übersetzungen
ManuellNachteile 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.
![Page 10: 1 Mehrsprachigkeit in PHP In Anwendungen und Datenbanken von Stefan.Kilp@gmx.netStefan.Kilp@gmx.net Mai 2006.](https://reader035.fdocuments.net/reader035/viewer/2022062623/55204d7349795902118c85be/html5/thumbnails/10.jpg)
10
Pflege der ÜbersetzungenDatenbank
Übersetzungstabelle
Create table languages (id int(11) NOT NULL default '0',key varchar(64) NOT NULL default ’’,langDE textlangEN text,langIT text,PRIMARY KEY (id)
)
Daten per Skript in gewünschtes Format zu exportieren Konsistenzwahrung beim Hinzufügen von Sprachen
![Page 11: 1 Mehrsprachigkeit in PHP In Anwendungen und Datenbanken von Stefan.Kilp@gmx.netStefan.Kilp@gmx.net Mai 2006.](https://reader035.fdocuments.net/reader035/viewer/2022062623/55204d7349795902118c85be/html5/thumbnails/11.jpg)
11
OptimierungSourcecode
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
![Page 12: 1 Mehrsprachigkeit in PHP In Anwendungen und Datenbanken von Stefan.Kilp@gmx.netStefan.Kilp@gmx.net Mai 2006.](https://reader035.fdocuments.net/reader035/viewer/2022062623/55204d7349795902118c85be/html5/thumbnails/12.jpg)
12
Exkurs: GettextSprachdefinitionen die englische messages.po
msgid “firstname”msgstr “First Name”
msgid “lastname”msgstr “Last Name”
msgid “age”msgstr “Age”
die deutsche messages.pomsgid “firstname”msgstr “Vorname”
msgid “lastname”msgstr “Nachname”
msgid “age”msgstr “Alter”
![Page 13: 1 Mehrsprachigkeit in PHP In Anwendungen und Datenbanken von Stefan.Kilp@gmx.netStefan.Kilp@gmx.net Mai 2006.](https://reader035.fdocuments.net/reader035/viewer/2022062623/55204d7349795902118c85be/html5/thumbnails/13.jpg)
13
Exkurs: Gettext
Vorteile: Kann mit beliebigem Editor bearbeitet werden Es gibt frei verfügbare GUI-Editoren
(poEdit http://www.poedit.org/, ubuntu webbased) Command-Line Tools Weit verbreitet
![Page 14: 1 Mehrsprachigkeit in PHP In Anwendungen und Datenbanken von Stefan.Kilp@gmx.netStefan.Kilp@gmx.net Mai 2006.](https://reader035.fdocuments.net/reader035/viewer/2022062623/55204d7349795902118c85be/html5/thumbnails/14.jpg)
14
Exkurs: Gettext
![Page 15: 1 Mehrsprachigkeit in PHP In Anwendungen und Datenbanken von Stefan.Kilp@gmx.netStefan.Kilp@gmx.net Mai 2006.](https://reader035.fdocuments.net/reader035/viewer/2022062623/55204d7349795902118c85be/html5/thumbnails/15.jpg)
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 mischenmsgmerge messages.po messages_alt.po > messages_utf8.po
![Page 16: 1 Mehrsprachigkeit in PHP In Anwendungen und Datenbanken von Stefan.Kilp@gmx.netStefan.Kilp@gmx.net Mai 2006.](https://reader035.fdocuments.net/reader035/viewer/2022062623/55204d7349795902118c85be/html5/thumbnails/16.jpg)
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
![Page 17: 1 Mehrsprachigkeit in PHP In Anwendungen und Datenbanken von Stefan.Kilp@gmx.netStefan.Kilp@gmx.net Mai 2006.](https://reader035.fdocuments.net/reader035/viewer/2022062623/55204d7349795902118c85be/html5/thumbnails/17.jpg)
17
Entwicklungszyklus verkürzenFeinheiten (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’);
![Page 18: 1 Mehrsprachigkeit in PHP In Anwendungen und Datenbanken von Stefan.Kilp@gmx.netStefan.Kilp@gmx.net Mai 2006.](https://reader035.fdocuments.net/reader035/viewer/2022062623/55204d7349795902118c85be/html5/thumbnails/18.jpg)
18
Entwicklungszyklus verkürzenFeinheiten (2) Wrapper
# doppelter Underscore
function __($message) {
global $tr;
$translate = $tr->get($message);
# beliebige Validierung einbaubar
$res = '<font color=red>'.$translate.'</font>';
return $res;
}
![Page 19: 1 Mehrsprachigkeit in PHP In Anwendungen und Datenbanken von Stefan.Kilp@gmx.netStefan.Kilp@gmx.net Mai 2006.](https://reader035.fdocuments.net/reader035/viewer/2022062623/55204d7349795902118c85be/html5/thumbnails/19.jpg)
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
![Page 20: 1 Mehrsprachigkeit in PHP In Anwendungen und Datenbanken von Stefan.Kilp@gmx.netStefan.Kilp@gmx.net Mai 2006.](https://reader035.fdocuments.net/reader035/viewer/2022062623/55204d7349795902118c85be/html5/thumbnails/20.jpg)
20
Part II
Mehrsprachigkeit
in Datenbanken
![Page 21: 1 Mehrsprachigkeit in PHP In Anwendungen und Datenbanken von Stefan.Kilp@gmx.netStefan.Kilp@gmx.net Mai 2006.](https://reader035.fdocuments.net/reader035/viewer/2022062623/55204d7349795902118c85be/html5/thumbnails/21.jpg)
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
![Page 22: 1 Mehrsprachigkeit in PHP In Anwendungen und Datenbanken von Stefan.Kilp@gmx.netStefan.Kilp@gmx.net Mai 2006.](https://reader035.fdocuments.net/reader035/viewer/2022062623/55204d7349795902118c85be/html5/thumbnails/22.jpg)
22
Wo sind die Probleme?
Beispiel
Klassen sprachabhängiger Attribute1. 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 dt Datenbank-------------------------------------------Anrede HerrVorname PaulNachname Mustermann
Anwendung en Datenbank-------------------------------------------Title Herr vs. Mr. !!!!First Name PaulLast Name Mustermann
![Page 23: 1 Mehrsprachigkeit in PHP In Anwendungen und Datenbanken von Stefan.Kilp@gmx.netStefan.Kilp@gmx.net Mai 2006.](https://reader035.fdocuments.net/reader035/viewer/2022062623/55204d7349795902118c85be/html5/thumbnails/23.jpg)
23
Wo speichert man die Übersetzung?
In der Datenbank
In dem Datensatz, d. h. Tabellendefinition erweitern
![Page 24: 1 Mehrsprachigkeit in PHP In Anwendungen und Datenbanken von Stefan.Kilp@gmx.netStefan.Kilp@gmx.net Mai 2006.](https://reader035.fdocuments.net/reader035/viewer/2022062623/55204d7349795902118c85be/html5/thumbnails/24.jpg)
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))
![Page 25: 1 Mehrsprachigkeit in PHP In Anwendungen und Datenbanken von Stefan.Kilp@gmx.netStefan.Kilp@gmx.net Mai 2006.](https://reader035.fdocuments.net/reader035/viewer/2022062623/55204d7349795902118c85be/html5/thumbnails/25.jpg)
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
![Page 26: 1 Mehrsprachigkeit in PHP In Anwendungen und Datenbanken von Stefan.Kilp@gmx.netStefan.Kilp@gmx.net Mai 2006.](https://reader035.fdocuments.net/reader035/viewer/2022062623/55204d7349795902118c85be/html5/thumbnails/26.jpg)
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);
![Page 27: 1 Mehrsprachigkeit in PHP In Anwendungen und Datenbanken von Stefan.Kilp@gmx.netStefan.Kilp@gmx.net Mai 2006.](https://reader035.fdocuments.net/reader035/viewer/2022062623/55204d7349795902118c85be/html5/thumbnails/27.jpg)
27
Zwischenergebnis
Mehrsprachigkeit in Daten Kollisionsfreie Erweiterung vorhandener Datenbanken Einfache Umstellung der SQL-Ausdrücke Sanfte Migration
Was noch?
![Page 28: 1 Mehrsprachigkeit in PHP In Anwendungen und Datenbanken von Stefan.Kilp@gmx.netStefan.Kilp@gmx.net Mai 2006.](https://reader035.fdocuments.net/reader035/viewer/2022062623/55204d7349795902118c85be/html5/thumbnails/28.jpg)
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 !)
![Page 29: 1 Mehrsprachigkeit in PHP In Anwendungen und Datenbanken von Stefan.Kilp@gmx.netStefan.Kilp@gmx.net Mai 2006.](https://reader035.fdocuments.net/reader035/viewer/2022062623/55204d7349795902118c85be/html5/thumbnails/29.jpg)
29
Darstellung der Daten Ab MySQL 4.1 pro Verbindung
Ergebnis
Daten Muffler
Müller
MX Systems
MySQL
SELECT name FROM kunden ORDER BY name COLLATE collation_name
latin1_swedish_ci latin1_german1_cilatin1_german2_ci
Muffler Muffler Müller
MX Systems Müller Muffler
Müller MX Systems MX Systems
MySQL MySQL MySQL
![Page 30: 1 Mehrsprachigkeit in PHP In Anwendungen und Datenbanken von Stefan.Kilp@gmx.netStefan.Kilp@gmx.net Mai 2006.](https://reader035.fdocuments.net/reader035/viewer/2022062623/55204d7349795902118c85be/html5/thumbnails/30.jpg)
30
Ausblick
Part III, mit praktischen Beispielen Diskussion
![Page 31: 1 Mehrsprachigkeit in PHP In Anwendungen und Datenbanken von Stefan.Kilp@gmx.netStefan.Kilp@gmx.net Mai 2006.](https://reader035.fdocuments.net/reader035/viewer/2022062623/55204d7349795902118c85be/html5/thumbnails/31.jpg)
31
Ende – Fin – Finish – Finito ...
Folien auf der UG Website Fragen, Ideen, Austausch
[email protected] Folien unter
http://kilp.net/phpugffm/Mehrsprachigkeit_in_PHP.pdf
Danke für euer Interesse!