ich hab die funktion nun etwas modifziert, sieht ziemlich seltsam aus, aber zumindestens klappt das jetzt...
die komplizierte sache daran war eigentlich das umwandeln der steuerzeichen..
Code: Alles auswählen
function i18nEmulateGettext ($string, $domain = "contenido")
{
global $cfg, $i18nLanguage, $transFile, $i18nDomains, $_i18nTranslationCache;
if (!is_array($_i18nTranslationCache))
{
$_i18nTranslationCache = array();
}
if (array_key_exists($string, $_i18nTranslationCache))
{
return $_i18nTranslationCache[$string];
}
/* Bad thing, gettext is not available. Let's emulate it */
if (!file_exists($i18nDomains[$domain].$i18nLanguage."/LC_MESSAGES/".$domain.".po"))
{
return $string;
}
if (!isset($transFile[$domain]))
{
$transFile[$domain] = implode('',file($i18nDomains[$domain].$i18nLanguage."/LC_MESSAGES/".$domain.".po"));
// remove comments from file
$transFile[$domain] = preg_replace('/^#.+/m', '', $transFile[$domain]);
// prepare for special po edit format
/*
something like:
#, php-format
msgid ""
"Hello %s,\n"
"\n"
"you've got a new reminder for the client '%s' at\n"
"%s:\n"
"\n"
"%s"
msgstr ""
"Hallo %s,\n"
"\n"
"du hast eine Wiedervorlage erhalten für den Mandanten '%s' at\n"
"%s:\n"
"\n"
"%s"
must be converted to
msgid "Hello %s,\n\nyou've got a new reminder for the client '%s' at\n%s:\n\n%s"
msgstr "Hallo %s,\n\ndu hast eine Wiedervorlage erhalten für den Mandanten '%s' at\n%s:\n\n%s"
*/
$transFile[$domain] = preg_replace('/\\\n"\\s+"/m', '\\\\n', $transFile[$domain]);
$transFile[$domain] = preg_replace('/(""\\s+")/m', '"', $transFile[$domain]);
}
$stringStart = strpos($transFile[$domain],'"'.str_replace(Array("\n", "\r", "\t"), Array('\n', '\r', '\t'), $string).'"');
if ($stringStart === false)
{
return $string;
}
$results = array();
preg_match("/msgid.*\"(".preg_quote(str_replace(Array("\n", "\r", "\t"), Array('\n', '\r', '\t'), $string),"/").")\"(?:\s*)?\nmsgstr(?:\s*)\"(.*)\"/", $transFile[$domain], $results);
if (array_key_exists(1, $results))
{
$_i18nTranslationCache[$string] = stripslashes(str_replace(Array('\n', '\r', '\t'), Array("\n", "\r", "\t"), $results[2]));
return $_i18nTranslationCache[$string];
} else {
return $string;
}
}
vielleicht kanns ja einer testen...