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

Написал на annocpan коммент, хотя сомневаюсь, что авторы получит его и пойдёт читать мануал по Locale::TextDomain. Похоже, процитированная в Locale::Maketext::TPJ13 статья вышла очень давно (first appeared in The Perl Journal #13 and is copyright 1999) и авторы о ней забыли.

Пока нет

Date: 2010-12-11 02:32 pm (UTC)
From: [identity profile] shoorick.livejournal.com
Пока не могу. Но, видимо, придётся всё-таки придумать, как это сделать. Как придумаю — обязательно напишу.

Re: Пока нет

Date: 2010-12-11 03:32 pm (UTC)
From: [identity profile] nuclon.livejournal.com
судя по этому (http://search.cpan.org/~guido/libintl-perl-1.20/lib/Locale/libintlFAQ.pod#How_do_I_switch_languages_or_force_a_certain_language_independently_from_user_settings_read_from_the_environment?): "Remember that these environment variables are not guaranteed to work, if you use an XS version of gettext" - все равно придётся использовать pure perl имплементацию.

Re: Пока нет

Date: 2010-12-11 03:40 pm (UTC)
From: [identity profile] nuclon.livejournal.com
...попробую-ка я интереса ради написать плагин. :)

Re: Пока нет

Date: 2010-12-12 08:20 pm (UTC)
From: [identity profile] nuclon.livejournal.com
https://bitbucket.org/nuclon/mojolicious-plugin-textdomain/src

только ещё доку не начал писать, буду рад любым предложениям переделать :)

предполагается использовать в бридже на /, где делать что-то типа


$self->set_language( $self->session('lang')
                  || $self->detect_language(
                         scalar $self->req->headers->accept_language, ['en', 'ru'], 'en' ) 
    );


ну или брать язык не с сессии, а с урла.

Re: Пока нет

Date: 2010-12-13 09:04 am (UTC)
From: [identity profile] shoorick.livejournal.com
Пробую запустить.

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

Re: Пока нет

Date: 2010-12-13 09:23 am (UTC)
From: [identity profile] shoorick.livejournal.com
Сделал так: https://gist.github.com/738816
Запускаю:
env LANGUAGE=ru ./2_td.pl daemon
или
env LANG=ru_RU.UTF-8 ./2_td.pl daemon

Выводит:

in layout: Работает?

in template: Работает?

Plural via __nx: 24 apples were found

Plural via __n: 24 apples were found

Форму множественного числа, вроде, подбирает (то есть, иногда пишет 1 apple), но не переводит на русский.

Re: Пока нет

Date: 2010-12-13 10:45 am (UTC)
From: [identity profile] shoorick.livejournal.com
Посмотрел внимательнее: оказалось, я там в скрипте msgid поменял, а в переводе — забыл. Подправил — заработало: и в обоих шаблонах, и в контроллере. Спасибо.

Осталось придумать, как xgettext научить брать из скрипта подлежащий переводу текст. Потому что сейчас он справляется только с обычными перловыми скриптами, а в шаблонах на epl пока бессилен. Могляжу мануал, может, найду.

Re: Пока нет

Date: 2010-12-13 10:00 am (UTC)
From: [identity profile] nuclon.livejournal.com
только что закоммитил немного изменений + добавил в тест работу с множественным числом. пришлось немного поправить формулу plural-forms для русского (добавил скобки)

вообще - попробуйте закомментировать строку в тестах с установкой pp - некоторые тесты сразу упадут.

Profile

shoorick: (Default)
shoorick

December 2016

S M T W T F S
    1 23
45678910
11121314151617
18 19 2021222324
25262728293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jul. 17th, 2025 11:57 pm
Powered by Dreamwidth Studios