erlydtl и i18n

159 views
Skip to first unread message

xandox

unread,
Aug 28, 2013, 8:32:46 AM8/28/13
to erlang-...@googlegroups.com
Hi All

Решил тут поиграться с i18n в ErlyDTL. Снаружи все вроде выглядит прикольно, и тэг есть и строки в шаблоне для перевода выдавать умеет и вроде даже po файлы генерировать умеет. 
Начал читать README_I18N и вот в самом начале все не завелось. И такое ощущение, что или никогда не работало или уже совсем давно устарело.
1. https://github.com/evanmiller/erlydtl/blob/master/src/i18n/i18n_manager.erl#L22  {ok, SplittedLocales} = string:tokens(Lang,","), в самой ранней документации, что мне удалось найти (R13B03, http://erldocs.com/R13B03/stdlib/string.html?i=232) string:tokens/2 уже возвращает просто список
2. https://github.com/evanmiller/erlydtl/blob/master/src/i18n/po_generator.erl#L22 gettext_compile:open_po_file(Gettext_App_Name, GtxtDir, Lang) в двух реализациях этой библиотеке, в том числе и в той которая предлагается в README_I18N (https://github.com/etnt/gettexthttps://github.com/noss/erlang-gettext) модуль gettext_compile не экспортирует open_po_file/3 

Для 1 я просто поптчил код пока, после 2 решил погуглить чего-нибудь на эту тему, и как-то не нагуглилось совсем. 

Как вы делаете?

Sergey Prokhorov

unread,
Aug 29, 2013, 7:08:39 AM8/29/13
to erlang-...@googlegroups.com
Ох..
Буквально два дня назад тоже озадачился этой проблемой. Вкратце - там всё очень плохо, сыро, неудобно и многое вообще не работает.
Тем не менее более-менее рабочее решение у меня получилось (генерация .pot файла, импорт .po файлов в etnt/gettext и рендеринг шаблонов в заданных локалях).

Реализация gettext в erlydtl крайне сырая и я ихний встроенный генератор .po файлов, тот который i18n_manager вообще не стал использовать, собрал собственный из 
https://github.com/evanmiller/erlydtl/blob/master/src/i18n/sources_parser.erl и https://github.com/noss/erlang-gettext/blob/master/src/gettext_compile.erl
Ещё напрягает что в erlydtl {%blocktrans%} можно переводить только во время компиляции, я от печали даже багрепорт отправил. И извлекатели фраз из шаблона тоже отдельные для {%trans%} и {%blocktrans%}.

Сейчас под рукой кода нет, но на выходных или чуть пораньше вернусь к этой задаче и напишу конкретное решение (но и то не совсем решение, скорее костыль).

Можно ещё код ChicagoBoss взять и посмотреть как там сделано, я уж не стал углубляться.https://github.com/noss/erlang-gettext/blob/master/src/gettext_compile.erl

среда, 28 августа 2013 г., 16:32:46 UTC+4 пользователь xandox написал:

Vitaliy Kulchevych

unread,
Aug 29, 2013, 7:30:05 AM8/29/13
to erlang-...@googlegroups.com
При рендере темплейта
my_compiled_template:render(Variables, Options)
можно указать собственную функцию перевода translation_fun в опциях
https://github.com/evanmiller/erlydtl#usage-of-a-compiled-template
таким образом я использую собственный key-value бекенд, у которого есть админ-управление и тд
но у вас пропадут вкусности gettext-а

2013/8/29 Sergey Prokhorov <seri...@gmail.com>
> --
> Вы получили это сообщение, поскольку подписаны на группу Erlang по-русски.
>  
> Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес erlang-russia...@googlegroups.com.
> Чтобы добавлять сообщения в эту группу, отправьте письмо по адресу erlang-...@googlegroups.com.
> Настройки подписки и доставки писем: https://groups.google.com/groups/opt_out.




--
live free or die;

Sergey Prokhorov

unread,
Sep 5, 2013, 11:16:58 AM9/5/13
to erlang-...@googlegroups.com
Приложил к письму файл, которым у меня из шаблонов вроде "<html>_(Hello world!)</html>" сперва генерируются erlydtl шаблоны "<html>{%trans "Hello world!"%}</html>" и потом рендерятся в статические HTML файлы для каждой из локалей.
Фактически задача довольно узко специализированная, но можно посмотреть подход и надёргать кусочков кода (как из dtl шаблона получить фразы и записать их в pot файл и как ренедерить шаблоны в разных локалях)

четверг, 29 августа 2013 г., 15:08:39 UTC+4 пользователь Sergey Prokhorov написал:
tm_trans.erl
render_templates.sh
Reply all
Reply to author
Forward
0 new messages