В настоящее время я работаю над интернационализацией очень большого веб-приложения на Perl / Mason , как одной команды (делает ли это марш смерти ??).Приложению около 20 лет, и оно написано в относительно старомодном стиле Perl;он не использует Moose или другой модуль OO.В настоящее время я планирую использовать Locale :: Maketext :: Gettext для поиска сообщений и использовать файлы каталога GNU Gettext.
Я пытался разработать некоторые инструменты для помощи визвлечение строк из нашей большой кодовой базы.В настоящее время все, что у меня есть, - это относительно простой Perl-скрипт для анализа исходного кода в поисках строковых литералов, запроса пользователю некоторого контекста и того, должна ли строка быть помечена для перевода, и отметьте его, если так.
Слишком много шума с точки зрения строк, которые нужно пометить, по сравнению со строками, которые я могу игнорировать. Многие строки в источнике не ориентированы на пользователя, такие как хэш-ключи или сравнения типов, такие как
if (ref($db_obj) eq 'A::Type::Of::Db::Module')
Я применяю некоторую эвристику к каждой предложенной строке, чтобы увидеть, могу ли я игнорировать ее с нуля (например, я игнорирую строки, которые используются для поиска хеша, поскольку в нашей кодовой базе 99% времени это не так.не сталкивается с пользователем).Однако, несмотря на все это, около 90% строк, которые моя программа показывает мне, это те, которые меня не волнуют.
Есть ли лучший способ, которым я мог бы помочь автоматизировать мою задачу извлечения строк (то есть что-то более интеллектуальноечем захватить каждый строковый литерал из источника)?Существуют ли какие-либо коммерческие программы, которые делают это, которые могут работать как с Perl, так и с источником Mason?
ТАКЖЕ , у меня была (довольно глупая) идея для превосходного инструмента, рабочий процесс которого я изложил ниже.Стоит ли пытаться реализовать что-то подобное (что, вероятно, очень быстро позаботится о 80% работы), или я должен просто подчиниться трудному, надоедливому, ручному процессу извлечения строк?
- Начните с извлечения КАЖДОГО строкового литерала из источника и поместите его в PO-файл Gettext.
- Затем напишите плагин Mason для анализа HTML-кода для каждой страницы, обслуживаемой приложением, с целью отметить строки, которые видит пользователь.
- Используйте чертовски приложение и постарайтесь охватить все варианты использования, создав хранилище строк, обращенных к пользователю.
- Учитывая это хранилище строк, которое видел пользователь, проводите нечеткие сопоставления со строкамив файле каталога и отслеживайте записи каталога, которые совпадают с пользовательским интерфейсом.
- В конце концов, все, что не найдено в файле каталога, скорее всего, не предназначено для пользователя, поэтому удалите его из каталога.