Купи доменное имя для своего блога, персональной web-странички или нового интернет проекта по выгодным ценам. Зарегистрировать домен в зоне .РФ или .RU за 195 руб.

Многоязычные приложения на PHP

Я не буду давать сравнение возможных вариантов для решение такой задачи как интернационализация ваших PHP-скриптов, я покажу как это сделать быстро и качественно с использованием стандартного для UNIX-мира подхода — использовать GetText.

Модуль gettext включён в комплект поставки php начиная с версии 4.2 (если нет, но надо пересобрать его с поддержкой этого модуля).

Итак допустим у вас есть скрипт:

$name = 'Вася';
$n = 8;
echo "Привет {$name}\n";
echo "{$n} коментариев\n";

мы переделаем его так:

$name = 'Вася';
$n = 8;
echo gettext("Hello"), " {$name} \n";
echo sprintf(ngettext('%d comment', '%d comments', $n), $n);

А сейчас подробнее, функция gettext переводит строку с одного языка (я использую всегда английский, чтобы небыло проблем перехода сайта с windows-1251 и utf-8) и возвращает в другом (заданым в настройках). Вместо конструкции gettext(“Hello”) можно использовать удобный алиас _(“Hello”). Функция ngettext позволяет выводить множественные строки как “1 комментарий, 2 комментария, 5 комментариев”. Удобство такого метода заключается так же в том, что ваш скрипт и сейчас продолжает работать и выводить все строки, но на своём стандартном языке.

Далее надо создать словарь для gettext. Находим в интернете программу poEdit. Создаём в дереве проекта папку “locale” — это будет папка для хранения всех переводов. В этой папке создаём папку “ru_RU” — в ней, как вы наверное уже догадались, будут храниться словари для русского языка. Но в ней нужно создать третью, последнюю папку — “LC_MESSAGES”.

Запускаем poEdit

Сразу надо предупредить что его надо немного поднастроить, зайдите в “File→Preferences”, вкладка Parsers. Выбираем PHP и жмём Edit. Список расщирений скуден, я использую такой список — “*.php;*.phtml;*.html;*.inc;*.tpl”

Далее создаём новый словарь, меню - “File→New catalog…”. Там всё просто, описываем проект и добавляем путь, где лежат у нас файлы и сохраняем словарь как “./locale/ru_RU/LC_MESSAGES/test.po”. Так же в поле “Plural forms” надо вписать nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10⇐4 && (n%100<10 || n%100>=20) ? 1 : 2); это описание для обработки функции ngettext. Удобство данной программы в том, что она через утилиту xgettext парсит ваши файлы и выдерает всё то, что нужно перевести. Остальное дело за вами.

Далее, после того как вы все фразы перевели и сохранили, в той же паке появился файл test.mo.

Добавим в начало нашего скрипта такие строки:

bindtextdomain('test', './locale');
bind_textdomain_codeset('test', 'UTF-8');
textdomain('test');
setlocale(LC_ALL, "ru_RU");

После этого ваше приложение должно заговорить по русски.

Регистрация доменов .РФ или RU за 195р!!!
Совместно с регистратором onreg.ru мы проводим акцию! Купи домен для своего блога или нового интернет проекта по выгодным ценам. Так домен в зоне .RU или .РФ стоит всего 195 рублей. При покупке нескольких доменов, возможны скидки. На onreg.ru есть система тикетов, через которую мы всегда готовы ответить на все ваши вопросы и предложения.


Бытовые погружные насосы wilo для скважин - заказать в Екатеринбурге.
Комментарии
  • jMas — 10.05.2008 #1

    Спасибо за статью! Полезно, очень даже!

Оставить комментарий
Ваше имя:
E-mail:
Сайт (блог):
Сообщение:
Если вы не робот, введите код: