Начав с неполного файла gettext .pot , полученный в результате файл .po translations теперь содержит большое количество строк перевода, которые изначально не были записаны в файл .pot .
Как я могу создать файл .pot для других языков (строки с пустым переводом) из переведенного файла .po ?
Спасибо за вашу помощь.
Вы можете использовать что-то вроде этого:
msgfilter -i xx.po -o new.pot true
msgfilter
применяет программу ко всем переводам в файле, а true
– это просто какая-то программа, которая ничего не выводит для любого ввода.
Возможно, вам придется немного помассировать комментарий заголовка после этого, чтобы он выглядел как новый POT-файл.
Вы этого не сделаете. Вы создаете файл .pot из исходного кода. msgmerge
берет новый .pot-файл и существующий файл .po и объединяет старые записи в новый файл.
Я думаю, что самым чистым подходом было бы использовать решение, предложенное Питером Эйзентраутом:
msgfilter -i xx.po -o new.pot true
Вы также можете сохранить заголовок gettext, добавив --keep-header
перед окончательным true
аргументом. В этом случае вам нужно проверить полученный заголовок, потому что он может содержать специфические для языка инструкции (например, количество множественных правил).
Для пользователей Windows: для использования этого подхода вам нужна программа, которая действует как true
(то есть она ничего не делает, кроме запуска succesflully), как и true
для Windows, которую я написал именно по этой причине.
Это потребовало времени, чтобы выяснить способ сделать это, но в конце концов я нашел решение с помощью Notepad ++. В меню « Поиск | Заменить …» мне удалось заменить все на регулярное выражение.
Найти: msgstr ".*"
Заменить на: msgstr ""
если вы хотите обновить строки перевода, вам не нужен файл .pot. Из poedit: каталог, обновление из .pot-файла, затем в окне браузера измените файлы .pot только на «все файлы», выберите ваш файл .po и он обработает
Просто встань на вопрос, вот команда подстановки vim, чтобы сделать .pot-файл из перевода заполненного файла .po.
:% s / msgid \ _. \ {- \} msgstr \ (\ (". " \ _. \) \) / msgid \ 1msgstr "" \ r /
Хотя команда, сообщаемая @richhallstoke, работает с Linux и Mac
msgfilter -i xx.po -o new.pot true
В Windows это не удается, потому что у нас нет true
команды.
Я только что выпустил онлайн-инструмент, который выполняет эту операцию (среди прочего): просто перетащите в свой браузер свой файл .po, нажмите значок «Инструменты» и нажмите «Преобразовать в .pot».
PS: этот онлайн-инструмент является FOSS: его исходный код находится на GitHub .