Совпадение, но через два дня после публикации последней статьи на тему руссификации Movable Type, вышел перевод от проекта movable-type.ru. В сравнении с моим переводом, он более полный, но делался, судя по всему, по французскому файлу трансляции от версии 4.0 и в нем отсутствует более 300 строк, а также полтора десятка строк остались на французском.
Для того, чтобы синхронизировать файл перевода с текущим релизом (а также будущими релизами) и добавить в него отсутствующие строки, нужен полный комплект исходников Movable Type из svn-репозитария — в них пристутствует набор скриптов для манипуляций с файлами переводов (для работы скриптов нужен perl и набор unix-утилит – shell, awk, find и т.д.). Сначала делаем чекаут исходников из репозитария:
svn co https://code.sixapart.com/svn/movabletype/latest mtos-latest
После выполнения данной команды в каталоге mtos-latest будет три подкаталога: dev, stable и release. Нам нужен подкаталог release, в котором находится последний релиз Movable Type с которым мы будем работать. Первым делом кладем наш файл перевода ru.pm в подкаталог lib/MT/L10N/. Следующим шагом запускаем собственно генерацию обновленного файла перевода из каталога release:
sh build/l10n/make-l10n ru
В результате работы данного скрипта в каталоге /tmp будет сгенерировано четыре файла:
- ru-base.pm — файл со всеми строками трансляции (в том числе дублирующиеся строки)
- ru-nodupe.pm — файл с удаленными дубликатами строк
- ru-old.pm —строки трансляции которые более не используются
- ru.pm —новый файл перевода
В новом файле перевода /tmp/ru.pm будут добавлены отсутствующие строки перевода (отмечены комментарием «Translate – New») и будут отчемены строки с регистром перевода отличающимся от оригинала — например, переводы следующего вида:
'video' => 'Видео'
Этот файл уже готов к использованию, но для полноценной поддержки русского языка я сделал дополнительный фильтр ru-filter.pl, через который надо пропустить файл перевода:
cat /tmp/ru.pm | perl ru-filter.pl > lib/MT/L10N/ru.pm
Данный фильтр делает следующее:
- отмечает комментарием «# Translate – No translation» непереведенные строки, в которых оригинал и перевод совпадают
- отмечает комментарием «# Translate – No russian char» строки перевода в которых не встречаются русские буквы
- отключает строки с пустым переводом
- добавляет perl’овый код для правильной поддержки множественного числа
Поддержка множественного числа сделана через переопределение функцииquant из Locale::Maketext. Теперь второй и третий параметры этой функции принимают формы слова для значений числительного от 2 до 4 и от 5 до 0 соответственно. Таким образом можно писать «[quant, _1,минута,минуты,минут]» и соответствующий текст будет генерироваться как «1 минута, 2 минуты, 5 минут» вместо «1 минута, 2 минут., 3 минут.»