unglaublich aber war, ja kann ich... version 4.3.2.1b
hatte dieses problem erst gestern bei einem provider gefunden..
hier ein php script zum testen der provider konfiguration:
Code: Alles auswählen
<?
$language = 'de_DE'; // Sprache
putenv ("LANG=$language"); // Umgebungsvariable setzten
setlocale(LC_ALL , ""); // LC_ALL auf Umgebungsvariable LANG setzen.
echo "Umgebungsvariable:".getenv("LANG")."<br>\nsetLocal:".setlocale(LC_ALL, 0);
echo "<pre>Auswählbare Zeichensätze:\n";
$filename = "locale -a"; // welche Zeichensätze stehen zur Verfügung
system($filename,$output);
echo "</pre>";
echo "<pre>Aktuelle Config:\n";
$filename = "locale"; // rat mal
system($filename,$output);
echo "</pre>";
?>
zur erklärung: wenn der wert bei setLocal auf C oder POSIX steht, liefert die
funktion nur den string ohne konvertierung zurück...
die funktion gettext (auch wenn sie der provider unterstützt) liefert hiebei keine übersetzung zurück.
so blöd es auch kling es ist ein konfigurations problem des providers
bei den verzeichnissen
/etc/locale.alias
oder
/usr/share/locale/locale.alias
wird bei deinem provider nur C oder POSIX eingetragen sein.
der provider sollte die anderen pakete dazu installieren zB de_DE, en_US etc.
wichtig ist noch sobald dies gemacht wurde, muss der apache server neu gestartet werden, da ansonsten gettext die änderung nicht übernimmt !!!
eine andere möglichkeit gibt es leider sonst nicht gettext zum laufen zu bekommen.
sollte dein provider diese änderungen nicht durchführen bleibt dir nichts anderes übrig als 2 änderung in der datei contenido/includes/functions.i18n.php vorzunehmen:
(nachteil: die preformance leidet teilweise extrem darunter)
1 . die function i18n durch folgendes ersetzen:
Code: Alles auswählen
function i18n ($string)
{
global $cfg, $i18nLanguage;
// if (function_exists("gettext"))
// {
// return gettext($string);
// }
return i18nEmulateGettext($string);
}
2. function i18nInit durch
Code: Alles auswählen
function i18nInit ($localePath, $langCode)
{
global $i18nLanguage;
if (!$langCode) $langCode ="de_DE";
if (function_exists("bindtextdomain"))
{
/* Bind the domain "contenido" to our locale path */
bindtextdomain("contenido", $localePath);
/* Set the default text domain to "contenido" */
textdomain("contenido");
/* Half brute-force to set the locale. */
if (!ini_get("safe_mode"))
{
putenv("LANG=$langCode");
}
setlocale(LC_ALL, $langCode);
}
$i18nLanguage = $langCode;
}
zur erklärung:
1 änderung überspringt die verwendung von gettext (wurde einfach auskommentiert)
2 änderung sorgt nur dafür dass der wert von $i18nLanguage auch wirklich jedesmal gesetzt wird (zB auf de_DE).