Управление ресурсами локализации

Задача
Необходимо отслеживать различные каталоги сообщений и изображения.

Решение
Есть два приема, позволяющих упростить управление ресурсами локализации. Первый заключается в создании нового объекта языка, например канадского английского, унаследованного от существующего родственного языка, такого как американский английский. Достаточно заменить слова и фразы нового объекта, отличающиеся от слов
и фраз оригинального языка.

Второй прием: надо отметить, какие фразы нового языка еще нуждаются в переводе, и поместить в объект нового языка заглушки, которые должны иметь те же самые значения, что и в базовом языке. Обнаружив одинаковые значения в базовом и в новом языках, можно затем сгенерировать список слов и фраз, подлежащих переводу.

Обсуждение
Программа catalog-compare.php, показанная в примере 16.2, выводит сообщения, совпадающие в обоих каталогах, а также сообщения, которые отсутствуют в одном каталоге, но присутствуют в другом.

Пример 16.2. catalog-compare.php
$base = 'pc_MC_'.$_SERVER['argv'][1];
$other = 'pc_MC_'.$_SERVER['argv'][2];require 'pc_MC_Base.php';
require "$base.php";
require "$other.php";
$base_obj = new $base;
$other_obj = new $other;
/* Проверяем сообщения другого класса, которые совпадают
* с сообщениями базового класса или они находятся
* в базовом классе, но отсутствуют в другом классе */
foreach ($base_obj->messages as $k => $v) {
if (isset($other_obj->messages[$k])) {
if ($v == $other_obj->messages[$k]) {
print "SAME: $k\n";
}
} else {
print "MISSING: $k\n";
}
}
/* Проверяем сообщения другого класса, которые
* отсутствуют в базовом классе */
foreach ($other_obj->messages as $k => $v) {
if (! isset($base_obj->messages[$k])) {
print "MISSING (BASE): $k\n";
}
}

Чтобы воспользоваться этой программой, поместите каждый объект каталога сообщений в файл с тем же именем, что и имя объекта (т.


е. класс pc_MC_en_US должен находиться в файле с именем pc_MC_en_US.php, а класс pc_MC_es_US – в файле pc_MC_es_US.php). Затем вызовите программу из командной строки с двумя именами локалей в качестве аргументов:
% php catalog-compare.php en_US es_US

В контексте веб-разработки целесообразным может оказаться использование отдельной локали и каталога сообщений для каждого запроса.

Локаль может поступить из броузера (в заголовке Accept-Language) или может быть установлена в явном виде сервером (для отображения одного и того же содержания на разных языках могут быть установлены разные виртуальные хосты). Если для выбора каталога сообщений для каждого запроса требуется один и тот же код, то можно реализовать класс каталога сообщений следующим образом:

$classname = "pc_MC_$locale.php";
require 'pc_MC_Base.php';
require $classname.'.php';
$MC = new $classname;.



Оцените статью: (0 голосов)
0 5 0

Статьи из раздела PHP на эту тему:
Использование определенной локали
Локализация включаемых файлов
Локализация дат и времени
Локализация денежных значений
Локализация изображений