Я использую gettext в PHP, и из-за кэширования файлов .mo у меня есть небольшой скрипт, который копирует исходный файл .mo и добавляет к нему время, чтобы он перезагружался. Проблема в том, что использование функции copy()
может испортить код файла?
Поскольку у меня есть перевод на датский язык, в UTF-8 поддерживаются датские символы - исходный файл работает под управлением UTF-8, но после его копирования он по какой-то причине не работает.
<?php
//Starting a session, to store the choosen langauge
session_start();
if (isset($_GET['lang']))
{
//If the $_GET langauge is set, set the $locale to the get request.
$locale = $_GET["lang"];
}
else if (isset($_SESSION["lang"]))
{
//else if the session['lang'] is set, then set the $locale to that session
$locale = $_SESSION["lang"];
}
else
{
//Else default is english
$locale = "en_US";
}
$_SESSION["lang"] = $locale;
$locales_root = "Locale"; // locales directory
$domain = "messages"; // the domain you're using, this is the .PO/.MO file name without the extension
// activate the locale setting
setlocale(LC_ALL, $locale);
setlocale(LC_TIME, $locale);
putenv("LANG=$locale");
// path to the .MO file that we should monitor
$filename = "$locales_root/$locale/LC_MESSAGES/$domain.mo";
$mtime = date('d.H.i.s', strtotime(filemtime($filename))); // check its modification time
// our new unique .MO file
$filename_new = "$locales_root/$locale/LC_MESSAGES/{$domain}_{$mtime}.mo";
if (!file_exists($filename_new)) { // check if we have created it before
// if not, create it now, by copying the original
copy($filename,$filename_new);
}
// compute the new domain name
$domain_new = "{$domain}_{$mtime}";
// bind it
bindtextdomain($domain_new,$locales_root);
// then activate it
textdomain($domain_new);
// all done
?>