Übersetzung für mehrere Sprachen
bearbeitet von Jörg ReinholzMoin!
Nach dem ganzen Rumgemurkse habe ich mal eine einigermaßen performante Lösung auch für mehrere Sprachen beim selben Aufruf (für gemischte Dokumente) gebaut.
~~~php
<?php
## file: translate.php
# Tests:
#/*
error_reporting(E_ALL);
ini_set('display_errors', '1');
echo 'Stadt deutsch : ', translate('Stadt', 'deutsch'), '<hr>';
echo 'Stadt englisch : ' ,translate('Stadt', 'englisch'), '<hr>';
echo 'Foo Bar englisch : ' ,translate('Foo Bar', 'englisch'), '<hr>';
echo 'Stadt französisch E_USER_NOTICE: ' ,translate('Stadt', 'französisch', E_USER_NOTICE), '<hr>';
echo 'Straße englisch : ', translate('Straße', 'englisch'), '<hr>';
echo 'Strasse englisch : ', translate('Strasse', 'englisch'), '<hr>';
echo 'Strasse englisch E_USER_NOTICE : ', translate('Strasse', 'englisch', E_USER_NOTICE), '<hr>';
echo 'Strasse englisch E_USER_ERROR : ', translate('Strasse', 'englisch', E_USER_ERROR), '<hr>';
echo 'WIRD NICHT MEHR AUSGEGEBEN...';
#*/
function translate($s, $lang="deutsch", $errorIfNotFound='config') {
# schneller Rückweg wenn deutsch
if ('deutsch' == $lang) {
return $s;
}
### Konfiguration ####
if (! defined ('translationsDir') ) {
define ('translationsDir', './');
}
if ('config' == $errorIfNotFound ) {
# Eine von diesen Reaktionen auf Fehler auswählen:
$errorIfNotFound=false;
#$errorIfNotFound=E_USER_ERROR;
#$errorIfNotFound=E_USER_NOTICE;
}
### / Konfiguration ####
if (! is_file (translationsDir.$lang) ) {
if ( false !== $errorIfNotFound ) {
trigger_error ('Die Datei ' . translationsDir.$lang . ' gibt es nicht!' ,$errorIfNotFound);
return $s;
}
} elseif (! is_readable (translationsDir.$lang) ) {
if ( false !== $errorIfNotFound ) {
trigger_error ('Die Datei ' . translationsDir.$lang . ' ist nicht lesbar (Rechte?)' ,$errorIfNotFound);
return $s;
}
}
static $arTranslations;
if (! isset($arTranslations[$lang]) ) {
require_once (translationsDir.$lang);
$arTranslations[$lang]=$a;
unset($a);
}
# Ab hier existiert der Hash mit $arTrans['string'] = 'übersetzung'
if (! isset ($arTranslations[$lang][$s]) ) {
if ( false !== $errorIfNotFound ) {
trigger_error ('Die Übersetzung für "' . $s . '" ist in der Datei ' . translationsDir.$lang . ' nicht angelegt.' ,$errorIfNotFound);
}
return $s;
}
return $arTranslations[$lang][$s];
}
~~~
~~~php
<?php
## file: französisch
$a['Stadt']='ville';
$a['Straße']='rue';
~~~
~~~php
<?php
## file: englisch
$a['Stadt']='city';
$a['Straße']='street';
$a['Foo Bar']='foo bar baz';
~~~
[Und so sieht das aus](https://home.fastix.org/Tests/translate.php)
Jörg Reinholz
Übersetzung für mehrere Sprachen
bearbeitet von Jörg ReinholzMoin!
Nach dem ganzen Rumgemurkse habe ich mal eine einigermaßen performante Lösung auch für mehrere Sprachen beim selben Aufruf (für gemischte Dokumente) gebaut.
~~~php
<?php
## file: translate.php
# Tests:
#/*
error_reporting(E_ALL);
echo 'Stadt deutsch : ', translate('Stadt', 'deutsch'), '<hr>';
echo 'Stadt englisch : ' ,translate('Stadt', 'englisch'), '<hr>';
echo 'Foo Bar englisch : ' ,translate('Foo Bar', 'englisch'), '<hr>';
echo 'Stadt französisch E_USER_NOTICE: ' ,translate('Stadt', 'französisch', E_USER_NOTICE), '<hr>';
echo 'Straße englisch : ', translate('Straße', 'englisch'), '<hr>';
echo 'Strasse englisch : ', translate('Strasse', 'englisch'), '<hr>';
echo 'Strasse englisch E_USER_NOTICE : ', translate('Strasse', 'englisch', E_USER_NOTICE), '<hr>';
echo 'Strasse englisch E_USER_ERROR : ', translate('Strasse', 'englisch', E_USER_ERROR), '<hr>';
echo 'WIRD NICHT MEHR AUSGEGEBEN...';
#*/
function translate($s, $lang="deutsch", $errorIfNotFound='config') {
# schneller Rückweg wenn deutsch
if ('deutsch' == $lang) {
return $s;
}
### Konfiguration ####
if (! defined ('translationsDir') ) {
define ('translationsDir', './');
}
if ('config' == $errorIfNotFound ) {
# Eine von diesen Reaktionen auf Fehler auswählen:
$errorIfNotFound=false;
#$errorIfNotFound=E_USER_ERROR;
#$errorIfNotFound=E_USER_NOTICE;
}
### / Konfiguration ####
if (! is_file (translationsDir.$lang) ) {
if ( false !== $errorIfNotFound ) {
trigger_error ('Die Datei ' . translationsDir.$lang . ' gibt es nicht!' ,$errorIfNotFound);
return $s;
}
} elseif (! is_readable (translationsDir.$lang) ) {
if ( false !== $errorIfNotFound ) {
trigger_error ('Die Datei ' . translationsDir.$lang . ' ist nicht lesbar (Rechte?)' ,$errorIfNotFound);
return $s;
}
}
static $arTranslations;
if (! isset($arTranslations[$lang]) ) {
require_once (translationsDir.$lang);
$arTranslations[$lang]=$a;
unset($a);
}
# Ab hier existiert der Hash mit $arTrans['string'] = 'übersetzung'
if (! isset ($arTranslations[$lang][$s]) ) {
if ( false !== $errorIfNotFound ) {
trigger_error ('Die Übersetzung für "' . $s . '" ist in der Datei ' . translationsDir.$lang . ' nicht angelegt.' ,$errorIfNotFound);
}
return $s;
}
return $arTranslations[$lang][$s];
}
~~~
~~~php
<?php
## file: französisch
$a['Stadt']='ville';
$a['Straße']='rue';
~~~
~~~php
<?php
## file: englisch
$a['Stadt']='city';
$a['Straße']='street';
$a['Foo Bar']='foo bar baz';
~~~
[Und so sieht das aus](https://home.fastix.org/Tests/translate.php)
Jörg Reinholz