Йаду не хватило

Dec 10, 2010 23:33

Снова задумался о применении геттекста в Mojolicious - существующий метод, когда вместо написания отдельных геттекстовых po--файлов прямо в перловый код засовывается что-то такое:
our %Lexicon = (
'Add' => 'Добавить',
'Remove' => 'Удалить'
);
никоим образом не может считаться достойным. Порывшись по CPAN, добрёл по ссылкам до Locale::Read more... )

gettext, программизм, mojolicious, perl, cpan

Leave a comment

Comments 22

knutov December 10 2010, 21:17:40 UTC
А собственно, как делать правильно? В отрыве от моджо.

Reply

#gettext в отрыве от #mojolicious shoorick December 11 2010, 15:27:34 UTC
https://gist.github.com/737400

Не знаю, правильно ли, но оно работает. И переводит на нужный язык, и подбирает соответствующее число в зависимости от переданной цифры (в русском кое-где встречаются остатки двойственного числа). В геттекстовом мануале описаны правила подбора числа для 36 языков.

Как использовать пример:
  1. mkdir example locale po
  2. кладём скрипт в example (у меня он назывался 1.pl), остальное - в po
  3. cd po; make
  4. cd ../example
  5. запустить можно двумя способами:
    env LANGUAGE=ru ./1.pl
    или
    ./1.pl ru
    Вместо ru можно писать любой другой код. Если найдётся файл переводов - скрипт будет писать на выбранном языке, если на найдётся - на английской.

Reply

Re: #gettext в отрыве от #mojolicious shoorick December 13 2010, 07:53:46 UTC
Подправил пример (оказывается, там можно хранить и структуру каталогов).
Получить свежий пример можно с git://gist.github.com/737400.git - там уже всё разложено куда надо и добавлен маленький README.

Reply


nuclon December 11 2010, 12:14:51 UTC
А вот, кстати, можете показать пример применения Locale::TextDomain в Mojo для мультиязычного сайта?
Я недавно делал проект и у меня получилось нечто рабочее, но жутко корявое, использующее gettext_pp (pure perl) имплементацию.

Reply

Пока нет shoorick December 11 2010, 14:32:53 UTC
Пока не могу. Но, видимо, придётся всё-таки придумать, как это сделать. Как придумаю - обязательно напишу.

Reply

Re: Пока нет nuclon December 11 2010, 15:32:44 UTC
судя по этому: "Remember that these environment variables are not guaranteed to work, if you use an XS version of gettext" - все равно придётся использовать pure perl имплементацию.

Reply

Re: Пока нет nuclon December 11 2010, 15:40:01 UTC
...попробую-ка я интереса ради написать плагин. :)

Reply


anonymous December 11 2010, 17:15:26 UTC
Да вы опять издеватесь над собой. our %Lexicon вполне не плох. В погоне за совершенным и правильным решением вы потеряете кучу времени и придется еще писать свой код, который потом надо будет в другие ваши проекты тащить. А так все или можовское решение или Locale::gettext вполне, вполне.

Reply

our %Lexicon плох shoorick December 11 2010, 20:09:54 UTC
Меня Locale::TextDomain вполне устраивает. Да и в геттекстовом мануале именно он и рекомендован. С учётом того, что сам геттекст - популярное решение, используемое уже больше 10 лет, мне кажется, что следует пользоваться именно им.

То, что его пока нет в Mojolicious'е - не беда. Можно, в конце концов, потратить какое-то время и написать плагин (если к тому моменту ещё кто-нибудь не напишет) - это лучше, чем использовать %Lexicon.

Предлагаемые в Mojolicious методы (с %Lexicon) плохи хотя бы тем, что там нет поддержки множественного числа (или я не нашёл). Писать «2 файл(ов)» в своих программах, как мне кажется, не следует.

Reply

Или так shoorick December 11 2010, 20:36:09 UTC
Если бы речь шла об изменении уже существующей системы переводов с Meketext на GNU gettext - я бы задумался, стóит ли ввязываться.
Но в случае, когда никакая система ещё не используется - лучше сразу поставить более правильную.

mojowka сейчас не переведена на другие языки (хотя надо бы перевести): я ещё несколько месяцев назад наткнулся на статью Вячеслава Тихановского Building a multilingual website with Mojolicious, но до сих пор не внёс предложенный там код в свою систему - мне не понравился %Lexicon.

Reply


(The comment has been removed)

Про эту проблему shoorick December 11 2010, 20:15:43 UTC
Здóрово. А вы писали сразу на английском или в сети лежит и русский перевод?

Reply

(The comment has been removed)

Re: Про эту проблему shoorick December 12 2010, 06:47:28 UTC
Ну это-то понятно, почему оно их не волнует :-)

Reply


(The comment has been removed)

ngettext shoorick December 11 2010, 20:10:32 UTC
Не знал :-)

Reply


Leave a comment

Up