Я запустил свое PHP-приложение со всем текстом на немецком языке, затем использовал gettext, чтобы извлечь все строки и перевести их на английский.
Итак, теперь у меня есть .po файл со всеми сообщениями на немецком языке и сообщениями на английском языке. Я хочу переключить их, чтобы мой исходный код содержал английский как msgids по двум основным причинам:
- Другие переводчики будут знать английский, поэтому целесообразно предоставить им файл с msgids на английском языке. Я мог бы всегда переключать файл, прежде чем выдать его и после того, как я его получу, но наах.
- Это помогло бы мне написать английские имена объектов и функций и комментарии, если бы текст контента был также английским. Я бы хотел сделать это, чтобы проект был более открыт для других сотрудников Open Source (с большей вероятностью знает английский, чем немецкий).
Я мог бы сделать это вручную, и это та задача, в которой, как я ожидаю, у меня будет больше времени, чтобы написать автоматизированную подпрограмму для нее (потому что я очень плох с скриптами оболочки), чем сделать это от руки. Но я также ожидаю презирать каждую минуту ручного компьютерного труда (похоже на оксюморон, верно?), Как я всегда делаю.
Кто-то делал это раньше? Я подумал, что это будет распространенная проблема, но не смог ничего найти. Большое спасибо вперед.
Пример задачи:
<title><?=_('Routinen')?></title>
#: /users/ruben/sites/v/routinen.php:43
msgid "Routinen"
msgstr "Routines"
Я думал, что смогу сузить проблему. Переключатель в .po-файле, конечно, не проблема, он так же прост, как
preg_replace('/msgid "(.+)"\nmsgstr "(.+)"/', '/msgid "$2"\nmsgstr "$1"/', $str);
Проблема для меня заключается в том, что процедура ищет в файлах папки моего проекта _('$msgid')
и заменяет _('msgstr')
при анализе .po-файла (что, вероятно, даже не самый элегантный способ, после всего .po-файла). содержит комментарии, которые содержат все пути к файлам, где встречается сообщение).
После дурачиться с небольшим ответом Акирка я столкнулся с еще некоторыми проблемами.
- Поскольку у меня есть смесь
_('xxx')
и _("xxx")
вызовов, я должен быть осторожен с (не) побегом.
- Двойные кавычки "в msgid и msgstrs должны быть не экранированы, но косые черты не могут быть удалены, потому что может быть, что двойная кавычка также была экранирована в PHP
- Одиночные кавычки должны быть экранированы при их замене на PHP, но затем они также должны быть изменены в .po-файле. К счастью для меня, одинарные кавычки появляются только в английском тексте.
- msgid и msgstrs могут иметь несколько строк, тогда они выглядят так
msgid = ""
"line 1\n"
"line 2\n"
msgstr = ""
"line 1\n"
"line 2\n"
- Формы множественного числа, конечно, в данный момент пропускаются, но в моем случае это не проблема
- poedit хочет удалить устаревшие строки, которые кажутся успешно переключенными, и я понятия не имею, почему это происходит во (многих) случаях.
Мне придется перестать работать над этим на сегодня. Тем не менее кажется, что использование парсера вместо RegExps не будет излишним.