Локализация изображений

Задача
Необходимо показать изображения, в которых имеется текст, причем это должен быть текст на языке, соответствующем локали.

Решение
Создайте каталог изображений для каждой локали, которую собираетесь поддерживать, а также глобальный каталог для изображений, не содержащих информации, специфической для локали. Создайте копии каждого изображения со специфической для локали информацией в соответствующем этой локали каталоге. Убедитесь, что имена файлов изображений одинаковы в различных каталогах. Не выводите изображение непосредственно по его URL, а воспользуйтесь функцией-оболочкой, подобной функции msg() из рецепта 16.4, которая печатает специфический для локали текст.

Обсуждение
Функция-оболочка img() сначала ищет версию изображения для данной локали, а затем глобальную версию. Если ни одна из версий не найдена, то она выводит сообщение в журнал ошибок:

$image_base_path = '/usr/local/www/images';
$image_base_url = '/images';
function img($f) {
global $LANG;
global $image_base_path;
global $image_base_url;
if (is_readable("$image_base_path/$LANG/$f")) {
print "$image_base_url/$LANG/$f";
} elseif (is_readable("$image_base_path/global/$f")) {
print "$image_base_url/global/$f";
} else {
error_log("l10n error: LANG: $lang, image: '$f'");
}
}

Эта функция должна знать и путь к файлу изображения в данной файловой системе ($image_base_path), и путь к изображению, отсчитываемый от базового URL вашего сайта (/images).


Первый путь нужен ей для проверки возможности чтения файла, а второй – для сборки URL изображения.

Имена файлов локализованных изображений должны быть одинаковыми во всех каталогах локализации. Например, изображение, содержащее сообщение «New!» на фоне желтого звездного взрыва, должно быть названо new.gif как в каталоге images/en_US, так и в каталоге images/es_US, даже если файл images/es_US/new.gif содержит картину желтого звездного взрыва со словом « Nuevo!» на его фоне.

Не забудьте, что текст alt, указываемый в тегах изображения, также должен быть локализован. Полностью локализованный тег выглядит так:

printf('%s',img('cancel.png'),msg('Cancel'));

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

printf('%s',
img('cancel.png'),msg('Cancel'),
msg('img-cancel-height'),msg('img-cancel-width'));

Локализованные сообщения для img-cancel-height и img-cancel-width – это не текстовые строки, а целые числа, описывающие размеры изображения cancel.png для каждой локали.

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

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