mihdan
Новичок
РНР установлен в качестве модуля Apache.
Сайт мультиязычный. Для вывода языков используется gettext().
Переводы лежат в файлах ru.mo, en.mo и тд.
При обновлении файла .mo не происходит ровным счетом ничего, так как РНР кэширует эти файлы при первом обращении к ним и сбрасывает кэш только при перезапуске сервера.
Собственно, вопрос, как сбросить кэш не прибегая к перезагрузке сервера?
Пока сделал так:
Структура папок такова
Сайт мультиязычный. Для вывода языков используется gettext().
Переводы лежат в файлах ru.mo, en.mo и тд.
При обновлении файла .mo не происходит ровным счетом ничего, так как РНР кэширует эти файлы при первом обращении к ним и сбрасывает кэш только при перезапуске сервера.
Собственно, вопрос, как сбросить кэш не прибегая к перезагрузке сервера?
Пока сделал так:
PHP:
<?php
// Перевод при помощи gettext
putenv('LANG='.$cfg['langs'][$lng]['locale']);
setlocale(LC_ALL, $cfg['langs'][$lng]['locale']);
// домен по умолчанию
$domain = 'messages_'.$lng;
// Полный путь к переводу
$filename = "{$cfg['path']['root']}/locales/{$cfg['langs'][$lng]['locale']}/LC_MESSAGES/{$domain}.mo";
// Есть ли файл с переводом
if (file_exists($filename)) {
// Последняя правка этого файла
$mtime = filemtime($filename);
// Новое имя файла
$filename_new = "{$cfg['path']['root']}/locales/{$cfg['langs'][$lng]['locale']}/LC_MESSAGES/{$domain}_{$mtime}.mo";
// Если такого файла пока нет
if (!file_exists($filename_new)) {
// Удалить старые ревизии
array_map("unlink", glob("{$cfg['path']['root']}/locales/{$cfg['langs'][$lng]['locale']}/LC_MESSAGES/{$domain}_*.mo"));
// Создать новыую ревизию
copy($filename,$filename_new);
}
// Новый домен
$domain_new = "{$domain}_{$mtime}";
bindtextdomain($domain_new, "./locales");
textdomain($domain_new);
bind_textdomain_codeset($domain_new, $cfg['langs'][$lng]['charset']);
//echo '<!--'._('test').'-->';
}
?>
Структура папок такова
PHP:
locales
----ru_RU
--------LC_MESSAGES
------------messages_ru.mo
----en_US
--------LC_MESSAGES
------------messages_en.mo