Комментарии 12
Мне кажется, что без подробного рассмотрения багов с utf8 и dbi статья очень неполная. А баги совершенно неожиданные вылезают порой.
чтобы не заморачиваться с кодировками, проще из настроек View::HTML кодировку убрать, чтобы шаблоны были as is (см. Template::Provider.pm#ENCODING)
и настроить
и как вариант, в качестве файла локализации использовать .pm файл, например
соответсвенно сделать чтобы коннект с базой тоже был в unicode (sqlite_unicode|mysql_enable_utf8 => 1 в connect_info и т.п. в зависимости от драйвера DBI)
для склонения числительных удобно использовать Lingua::RU::Numeric::Declension,
для разных падежных форм: Lingua::RU::Inflect
вывод локализованных дат, например:
p.s. TT конечно классика, но советую посмотреть Text::Xslate или даже Template::Semantic (для полной абстракции html-шаблонов от кода)
и настроить
'Plugin::I18N' => {
maketext_options => {
Decode => 0,
Encoding => 'UTF-8',
}
}
и как вариант, в качестве файла локализации использовать .pm файл, например
package MyApp::I18N::ru;
use utf8;
use base 'MyApp::I18N';
our %Lexicon = (
site_title => 'название сайта',
....
);
1
соответсвенно сделать чтобы коннект с базой тоже был в unicode (sqlite_unicode|mysql_enable_utf8 => 1 в connect_info и т.п. в зависимости от драйвера DBI)
для склонения числительных удобно использовать Lingua::RU::Numeric::Declension,
для разных падежных форм: Lingua::RU::Inflect
вывод локализованных дат, например:
DateTime->now->set(locale => $c->language)->strftime("%e %B")
p.s. TT конечно классика, но советую посмотреть Text::Xslate или даже Template::Semantic (для полной абстракции html-шаблонов от кода)
Я достаточно поздно узнал о параметре mysql_enable_utf8, аналогично для pg. Указывается в конфиге Model::DB в разделе connect_info как положительный. Это и есть пилюля от багов и глюков с utf8 после которой не требуется никаких костылей. Это действительно стоило включить в статью.
Функцию enc() я привел как пример, т.к. dbi ещё много чего поддерживает. Тем более enc() полезна, если например вложить список поддерживаемых языков в конфиг проекта для организации выбора языка пользователем аля wikipedia, но это тема для другой статьи.
Функцию enc() я привел как пример, т.к. dbi ещё много чего поддерживает. Тем более enc() полезна, если например вложить список поддерживаемых языков в конфиг проекта для организации выбора языка пользователем аля wikipedia, но это тема для другой статьи.
имхо лучше сразу разобраться с кодировкой данных через конфиги компонентов и использование прагмы «use utf8» (если юникод строки встречается прямо в коде контроллеров и т.п.)
так, чтобы всё было прозрачно и без использования в проекте костылей вроде предлагаемого «enс»
так, чтобы всё было прозрачно и без использования в проекте костылей вроде предлагаемого «enс»
Беда начинается когда приходится взаимодействовать с внешними программами, типа баз данных или web сервисов. Корень зла — наличие перловых строк и юникодных строк, в разных версиях ещё и по разному обрабатывающихся.
Взаимодействие с внешними источниками оформляется как модель в которой всё и должно приводится к общему виду в зависимости от специфики внешних источников. В частности, для реляционных БД это уже сделано в виде флагов в конфиге драйверов DBI, хотя может быть достаточно $dbh->do(«set names utf8») для pg/mysql и правильной настройки самой БД. Для других случаев — Encode, perluniintro
в общем чаще всего корень зла — незнание )
в общем чаще всего корень зла — незнание )
Подскажите, пожалуйста, а что делается, если нужно локализовать большой объем текста?
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Локализация проектов написанных с использованием MVC Framework Catalyst