Translator
Описание
На данном этапе, Translate являет собой лишь оболочкой для настройки gettext, хотя использования адаптеров типа array и(или) Db я не исключаю, но пока это лишь в планах.
В фреймворке используются функции _n() и __() как враперы для Translate, хотя как бы в фреймворке появлений функций не комильфо - но кто нам тут указ - создать функцию в NS можно, но использовать неудобно, проще статический класс с набором функций, но тоже много буков, так что встречайте +2 функции в глобальной области видимости:
-
__($text[, $params])- обёртка над функцией gettext + sprintf -
_n($text1, $text2, int $n [, $params])- обёртка над функцией ngettext + sprintf
Настройки
// config file translator.php return array( // call inside: // setlocale(LC_MESSAGES, $locale) // putenv('LC_ALL=' . $locale); // putenv('LANG=' . $locale); // putenv('LANGUAGE=' . $locale); "locale" => "ru_RU", // call inside: // bindtextdomain($locale, $path) // textdomain($locale) // bind_textdomain_codeset($this->domain, 'UTF-8'); "domain" => "messages", "path" => PATH_DATA .'/locale' )
Если ваша локаль не подтягивается - убедитесь, что она доступна в вашей системе с использованием команды
locale -a. Для установки локали на ubuntu:
sudo locale-gen ru_RU
sudo locale-gen ru_RU.UTF-8
sudo locale-gen uk_UA
sudo locale-gen uk_UA.UTF-8
sudo update-locale
# and restart web server
sudo service apache2 restart
Использование
Функция-враппер для gettext:
// simple // equal to gettext('Message') __('Message'); // simple replace of one or more argument(s) // equal to sprintf(gettext('Message to %s'), 'Username') __('Message to %s', 'Username');
Ну и для ngettext:
// plural form + sprintf // equal to sprintf(ngettext('%d comment', '%d comments', 4), 4) _n('%d comment', '%d comments', 4, 4) // plural form + sprintf // equal to sprintf(ngettext('%d comment', '%d comments', 4), 4, 'Topic') _n('%d comment to %s', '%d comments to %s', 4, 4, 'Topic')