NAVIGATION
Google code r302: http://code.google.com/p/phpwcms/source/detail?r=302
Internationalisierung (i18n) für den phpwcms Parser:
Alle einfachen Worte/Zeilen @@Mein Text@@ werden automatisch Übersetzt, bzw. beim Erstdurchlauf eine neue Datei im Verzeichnis /template/template_lang/xx.php angelegt. In der Grundeinstellung benutzt das System die Datei Name/lade Sprachdatei - dies kann aber ersetzt werden mit den Parametern in $phpwcms['i18_lang'].
Render @@Text@@ basiert auf der Browsersprache und speichert in der aktuellen Spracheinstellung des Browers eine Sprachdatei, die später oder wenn benötigt übersetzt werden kann. Der Text zwischen @@Default@@ wird als Ausgabetext verwendet, solange keine Übersetzung existiert.
Technik: Dr.-Ing. Tobias Schittkowski (http://www.schittkowski.de/index.php?q=node/20) [EN]
“Ich möchte einen Weg aufzeigen, wie eine PHP Applikation mehrere Sprachversionen beinhalten kann ….”
Besonderheiten:
/template/template_lang/de.php
<?php $i18n_tokens['Benutzer bearbeiten']='Edit user'; $i18n_tokens['Benutzer']='User'; $i18n_tokens['Benutzergruppe']='User group'; $i18n_tokens['Benutzergruppen']='User groups'; $i18n_tokens['Benutzerverwaltung']='User management';
<note warning>Bitte niemals diese Sprachdatei mit dem PHP tag ?> schließen. Die Datei würde unbrauchbar.</note>
Bedingung: conf.inc.php
$phpwcms['i18n_parse'] = 1; // enable|disable browser based language parser - all @@Text@@ will be parsed and checked for translation/var based replacement
Schreibe in irgendeinen Text CP den folgenden Satz:
→ Bitte schaue in den Ordner /template/template_lang/*
dort wirst du nun eine Datei finden die z.B. so aussieht:
/template/template_lang/de.php
<?php // phpwcms template language file "de" (2009-02-06 16:52:05) // ATTENTION! Never add the closing PHP tag "? >" at the end of this file! $i18n_tokens['Benutzer'] = 'Benutzer'; // NEW 2009-02-06 16:52:05 $i18n_tokens['Benutzer bearbeiten'] = 'Benutzer bearbeiten'; // NEW 2009-02-06 17:01:15 $i18n_tokens['Benutzergruppe'] = 'Benutzergruppe'; // NEW 2009-02-06 17:01:15 $i18n_tokens['Benutzergruppen'] = 'Benutzergruppen'; // NEW 2009-02-06 17:01:15 $i18n_tokens['Benutzerverwaltung'] = 'Benutzerverwaltung'; // NEW 2009-02-06 17:01:15
Übersetze die Wörter/Sätze z.B. nach [en]
/template/template_lang/de.php
<?php // phpwcms template language file "de" (2009-02-06 16:52:05) // ATTENTION! Never add the closing PHP tag "? >" at the end of this file! $i18n_tokens['Benutzer'] = 'User'; // NEW 2009-02-06 16:52:05 $i18n_tokens['Benutzer bearbeiten'] = 'Edit user'; // NEW 2009-02-06 17:01:15 $i18n_tokens['Benutzergruppe'] = 'User group'; // NEW 2009-02-06 17:01:15 $i18n_tokens['Benutzergruppen'] = 'User groups'; // NEW 2009-02-06 17:01:15 $i18n_tokens['Benutzerverwaltung'] = 'User management'; // NEW 2009-02-06 17:01:15
- Und lade die Seite im Browser noch einmal:
<note> Diese Datei sollte im wahren Leben sicher nicht de.php heißen sondern eher en.php für die englische Sprache, da der User mit einem englischen lokalisierten Browser die Seite besucht. (Das wurde hier nur zum schnellen Test so gemacht, denn jeder wird nicht gleich seinen Browser umschalten können → FF: Quick Locale Switcher). </note>
<note tip>Auf diese Art und Weise kann auch ein gesamter Absatz behandelt werden.</note>
<note warning>Immer darauf achten, dass im Text vorkommende Hochkommata escaped werden, und zwar so: “It\'s a poor man\'s world”. Auch Sonderlaute und ~ zeichen müssen ersetzt werden, zB Ü –> Ü (Korrektur: das ist nicht immer korrekt - muss näher erforscht werden! Im test läuft das mit utf-8 zur Zeit einwandfrei auch ohne Codierung). Andernfalls (Hochkommata) spuckt das System einen error auf den Bildschirm </note>
<note warning>Und noch was: Immer die editierten Sprachfiles utf-8- kodiert abspeichern, sonst kommt es zu einem unheimlichen Zeichensalat </note>
Siehe auch:
PHP: mehrsprachige Seiten bauen
W3C: Language tags in HTML and XML
Afrikaans = af Albanian = sq Arabic (Algeria) = ar-dz Arabic (Bahrain) = ar-bh Arabic (Egypt) = ar-eg Arabic (Iraq) = ar-iq Arabic (Jordan) = ar-jo Arabic (Kuwait) = ar-kw Arabic (Lebanon) = ar-lb Arabic (libya) = ar-ly Arabic (Morocco) = ar-ma Arabic (Oman) = ar-om Arabic (Qatar) = ar-qa Arabic (Saudi Arabia) = ar-sa Arabic (Syria) = ar-sy Arabic (Tunisia) = ar-tn Arabic (U.A.E.) = ar-ae Arabic (Yemen) = ar-ye Arabic = ar Armenian = hy Assamese = as Azeri (Cyrillic) = az Azeri (Latin) = az Basque = eu Belarusian = be Bengali = bn Bulgarian = bg Catalan = ca Chinese (China) = zh-cn Chinese (Hong Kong SAR) = zh-hk Chinese (Macau SAR) = zh-mo Chinese (Singapore) = zh-sg Chinese (Taiwan) = zh-tw Chinese = zh Croatian = hr Czech = cs Danish = da Divehi = div Dutch (Belgium) = nl-be Dutch (Netherlands) = nl English (Australia) = en-au English (Belize) = en-bz English (Canada) = en-ca English (Caribbean) = en English (Ireland) = en-ie English (Jamaica) = en-jm English (New Zealand) = en-nz English (Philippines) = en-ph English (South Africa) = en-za English (Trinidad) = en-tt English (United Kingdom) = en-gb English (United States) = en-us English (Zimbabwe) = en-zw English = en Estonian = et Faeroese = fo Farsi = fa Finnish = fi French (Belgium) = fr-be French (Canada) = fr-ca French (France) = fr French (Luxembourg) = fr-lu French (Monaco) = fr-mc French (Switzerland) = fr-ch FYRO Macedonian = mk Gaelic = gd Georgian = ka German (Austria) = de-at German (Germany) = de German (Liechtenstein) = de-li German (lexumbourg) = de-lu German (Switzerland) = de-ch Greek = el Gujarati = gu Hebrew = he Hindi = hi Hungarian = hu Icelandic = is Indonesian = id Italian (Italy) = it Italian (Switzerland) = it-ch Japanese = ja Kannada = kn Kazakh = kk Konkani = kok Korean = ko Kyrgyz = kz Latvian = lv Lithuanian = lt Malay (Brunei) = ms Malay (Malaysia) = ms Malayalam = ml Maltese = mt Marathi = mr Mongolian (Cyrillic) = mn Nepali (India) = ne Norwegian (Bokmal) = nb-no Norwegian (Bokmal) = no Norwegian (Nynorsk) = nn-no Oriya = or Polish = pl Portuguese (Brazil) = pt-BR Portuguese (Portugal) = pt Punjabi = pa Rhaeto-Romanic = rm Romanian (Moldova) = ro-md Romanian = ro Russian (Moldova) = ru-md Russian = ru Sanskrit = sa Serbian (Cyrillic) = sr Serbian (Latin) = sr Slovak = sk Slovenian = ls Sorbian = sb Spanish (Argentina) = es-ar Spanish (Bolivia) = es-bo Spanish (Chile) = es-cl Spanish (Colombia) = es-co Spanish (Costa Rica) = es-cr Spanish (Dominican Republic) = es-do Spanish (Ecuador) = es-ec Spanish (El Salvador) = es-sv Spanish (Guatemala) = es-gt Spanish (Honduras) = es-hn Spanish (International Sort) = es Spanish (Mexico) = es-mx Spanish (Nicaragua) = es-ni Spanish (Panama) = es-pa Spanish (Paraguay) = es-py Spanish (Peru) = es-pe Spanish (Puerto Rico) = es-pr Spanish (Spain) = es-es Spanish (Traditional Sort) = es Spanish (United States) = es-us Spanish (Uruguay) = es-uy Spanish (Venezuela) = es-ve Sutu = sx Swahili = sw Swedish (Finland) = sv-fi Swedish = sv Syriac = syr Tamil = ta Tatar = tt Telugu = te Thai = th Tsonga = ts Tswana = tn Turkish = tr Ukrainian = uk Urdu = ur Uzbek (Cyrillic) = uz Uzbek (Latin) = uz Vietnamese = vi Xhosa = xh Yiddish = yi Zulu = zu
Mit dieser Ersetzungsmethode kann nicht nur Text innerhalb der Content Parts ersetzt werden - nein, auch Titel, Untertitel und mehr können damit “ausgerüstet” werden. Der praktische Nährwert liegt auf der Hand:
Stell Dir vor, Du hast eine 10-sprachige Seite und jede Sprache hat ein eigenes Kontaktformular. Was nun, wenn sich die Mailadresse ändert? Oder eine Bezeichnung? Richtig: 10x editieren.
Ein einziges Formular in einer versteckten Kategorie sollte reichen, ausgestattet mit diesen @@ nützlichen @@ tags. Wir referenzieren dieses eine Formular dann mit dem tollen {SHOW_CONTENT:CP,IDxx}, woimmer wir es brauchen.
Es sei denn, es gibt unterschiedliche Mailempfanger - dann natürlich nicht!
WOW!
Weise Worte für den Weisen
Wenn dieses wirklich äusserst praktische Feature genutzt wird, dann ist hier ein praktischer Tip zur Arbeitsminimierung: Alle zu übersetzenden Texte sollten auf english hinterlegt werden. Anschließend einmal kurz mit dem Browser (mit der Seitensprache als Präferenz) durch die Seiten gehetzt, um alle @@Sprachtags@@ “einzufangen”.
Jetzt wird einfach eine Übersetzung der englischen Ausdrücke und Texte in dem neu entstandenen Sprachfile in die Seitensprache gemacht und dies wiederholt man dann bei den wichtigsten anderen später neu entstehenden…
Ergebnis der Prozedur: jeder neue “ausländische” Besucher bekommt wenigstens einen englischen Text zu Gesicht.
Andernfalls gibt es einen Riesenaufwand, all' die vielen neu entstehenden Sprachfiles ständig neu zu übersetzen / ergänzen (wart mal ein paar Tage und Du hast 50+++ neue Sprachdateien )
Kleiner Zusatztipp: Den Quick Locale Switcher für den FF installieren, dann kann man die wichtigsten Sprachfiles selber und “absichtlich” generieren ;)