Как я могу добавить интернационализацию в свой Perl-скрипт?
-
03-07-2019 - |
Вопрос
Я рассматриваю возможность внедрения многоязычной поддержки в зрелое CGI-приложение, написанное на Perl.Первоначально я рассматривал возможность создания собственного решения с использованием хэша Perl (хранящегося на диске) для файлов перевода, но затем я наткнулся на модуль CPAN, который, похоже, делает именно то, что я хочу (i18n).
Есть ли у кого-нибудь опыт работы с интернационализацией (в частности, с модулем i18n CPAN) в Perl?Является ли модуль i18n предпочтительным методом для многоязычной поддержки или мне следует пересмотреть пользовательское решение?
Спасибо
Решение
Существует Статья в журнале Perl о локализации программного обеспечения.Это даст вам хорошее представление о том, чего вы можете ожидать при добавлении многоязычной поддержки.Она прекрасно написана и полна юмора.
В частности, статья написана людьми, которые написали и поддерживают Locale::Maketext
, поэтому я бы рекомендовал этот модуль просто исходя из того, сколько боли, очевидно, пришлось вынести авторам, чтобы заставить его работать правильно.
Другие советы
Видишь http://rassie.org/archives/247 для сравнения современных GNU gettext, Locale::Maketext и Locale::TextDomain.
В ответ на мой вопрос по этому поводу в одном из комментариев предлагалось прочитать эта статья о локализации perl-кода.
Если у вас есть время, то, пожалуйста, взгляните на то, как выполняется I18N в Веселый фреймворк - хотя изначально довольно запутанный, он очень элегантный и удобный.
Они перегружают _
так что вы можете использовать _("text to translate")
в любом месте кода.Затем эти строки переводятся с помощью Язык ::Maketext как обычно.
Что делает это действительно мощным, так это то, что они откладывают перевод до тех пор, пока строка не понадобится, используя Скаляр::Отложить таким образом, вы можете начать добавлять строки в любое время, даже до того, как узнаете, на какой язык они будут переведены.Например, в конфигурационных файлах и т.д.Это действительно упрощает работу с I18N.