Как локализовать CPAN модуль и зависимости
Я пытаюсь локализовать модуль CPAN MooX::Options с помощью Locale:: TextDomain после прочтения "О состоянии I18N в perl".
В обсуждении в запросе на получение ответа возник вопрос о том, как обращаться с сообщениями, возникающими не в самом модуле, а в зависимости. В этом конкретном случае, когда вы указываете параметр в командной строке, который не определен нигде в коде, вы получите предупреждение:
Неизвестный вариант: xyz
происходящий из модуля Getopt:: Long, который сам по себе еще не локализован.
Вопрос в том, как с этим бороться. Я вижу в основном три стратегии:
- Игнорировать их, что я считаю неудовлетворительным.
- Попытка так или иначе поймать все угловые случаи и сообщения в модуле, который я в настоящее время локализую (в этом случае
MooX::Options
), и таким образом обходится отсутствующая локализация в зависимых модулях. Этот вариант кажется хрупким, так как мне придется постоянно адаптироваться к изменениям в базовых модулях. Иногда может быть почти невозможно перехватить сообщения, так как они записываются в выходные потоки непосредственно модулями (как в этом примере). - Попробуйте локализовать зависимые модули сами. Этот вариант кажется труднодостижимым, поскольку в разных проектах могут использоваться разные инструменты и стратегии I18N, а граф зависимостей может быть огромным.
В общем, я думаю, что эта проблема носит более общий характер, а не специфична для модулей Perl и Cpan. Итак, я заинтересован в ваших мыслях, стратегиях и подходах.
1 ответ
У меня довольно сильные мнения относительно идеи перевода вычислительных терминов, и большинство людей не согласны с моими взглядами, поэтому примите то, что я говорю, с недоверием.
Я не понимаю смысла интернационализации библиотеки для синтаксического анализа параметров командной строки, если вы не хотите далее разбирать то, что уже является небольшой группой пользователей этой библиотеки.
Было бы wget
быть более полезным для турецких пользователей, если бы он назывался wal
или же wgetir
? Или вместо wget --mirror
, должны ли турецкие пользователи писать getir --ayna
? Что об этом w
?
Если вы просто переводите сообщения, какой смысл выводить справочное сообщение в ответ на wget -h
когда турецкий эквивалент будет wget -y
?
Дело в том, что почти все попытки перевода терминов, связанных с программированием, которые я видел, просто ужасны. Люди, которые больше всего хотят переводить, обычно не владеют ни одним человеческим языком - и, похоже, они не понимают, что они переводят.
Однако из-за этих нетерпеливых людей я обнаружил, что по крайней мере турецкие переводы практически любого программного обеспечения, к которому я прикасаюсь, просто ужасны. Какими бы ни были датские переводы, которые я видел, они не были намного лучше, но, по крайней мере, они были терпимы из-за большей общности структуры между датским и английским языками.
Я думаю, что энергию каждого лучше потратить на то, чтобы убедиться, что их программы хорошо обрабатывают контент, включая имена внешних ресурсов / ссылок, на разных языках, вместо того, чтобы давать мне сообщения об ошибках на каком-то языке Франкенштейна или позволять мне указывать параметры командной строки, чья мнемоника делает не соответствуют их описаниям и т. д. или представляют меню, которые содержат строки слов, которые действительно не передают никакого значения.
Я чувствовал это в течение последних десятилетий... Даже когда я исправлял драйверы клавиатуры IBM PC с помощью шестнадцатеричных редакторов, чтобы люди в разных местах могли печатать отчеты в WordStar и создавать диаграммы в Harvard Graphics.
Итак, мой непопулярный совет - направить свою энергию в другое место...
Например, используйте объекты исключений, чтобы пользователь вашей библиотеки (который, вероятно, был программистом и понимал "Каталог не найден" гораздо быстрее, чем "Kütük bulunamadı"), мог бы независимо от человеческого языка определить, что произошло, и какое сообщение показать пользователю. Я не присматривался MooX::Options
но я замечаю, что есть хотя бы одна строка croak
,
Вот фактическое сообщение об ошибке от продукта IBM:
Belirtilen kütük örüntüsüyle eşleşen hiçbir kütük bulunamadı
Вы можете спросить каждого из почти 200 миллионов тюркских людей на земле, что такое "kütük örüntüsü", и только тот, кто действительно придумал эту бессмысленную последовательность символов, сможет сказать вам, что она соответствует "файлу". шаблон". Что же тогда они получают, используя фразу "kütük örüntüsü" против "шаблон файла"? Ничего такого.
Однако они теряют способность общаться, а также конкурировать с программистами в англоязычном мире.
PS: Извиняюсь за все турецкие примеры, но мне удобнее рисовать отвратительные примеры, основываясь на моем родном языке.