Перевод PO- или POT-файла онлайн с учётом множественных чисел и контекста
Загрузите шаблон .pot или частично переведённый файл .po и получите .po, где заполнен каждый пустой msgstr. msgid и msgctxt не меняются, комментарии и ссылки сохраняются, а записи с множественным числом получают столько форм, сколько нужно целевому языку. Первые строки бесплатно и без регистрации; весь файл — до 5,000 строк — стоит $5, разовый платёж.
- Пустые и fuzzy-записи переводятся; уже переведённые вами записи сохраняются
- Записи с msgid_plural получают msgstr[0], msgstr[1] … для целевого языка, а в заголовке указывается Plural-Forms
- msgctxt, комментарии переводчика (#.) и ссылки (#:) передаются как контекст и остаются в файле
- Плейсхолдеры php-format, c-format и python-format проверяются в каждой строке
- Подходит для плагинов и тем WordPress, проектов на Django, Python, PHP и C
{
"home.greeting": "Good morning, {name}Buenos días, {name}",
"home.nearby": "{count, plural, =0 {No trails near you yet} one {# trail near you} other {# trails near you}}{count, plural, =0 {Aún no hay rutas cerca de ti} one {# ruta cerca de ti} other {# rutas cerca de ti}}",
"trail.offline_done": "<b>{name}</b> is saved on this phone. You can use the map without a signal.<b>{name}</b> está guardado en este teléfono. Puedes usar el mapa sin señal.",
"trail.share_text": "I just finished {trail} with Trailbook! {km} km and {meters} m up. 🥾¡Acabo de terminar {trail} con Trailbook! {km} km y {meters} m de subida. 🥾",
"saved.empty": "You have not saved any trails yet.\nTap the heart on a trail to keep it here.Aún no has guardado ninguna ruta.\nToca el corazón en una ruta para guardarla aquí."
}
Жёлтый: плейсхолдеры и синтаксис множественного числа ICU, проверяются в каждой строке. Бирюзовый: теги, экранирование и эмодзи — остаются как есть.
Те же ключи. Те же плейсхолдеры. Новый язык.
Меняются только значения. Файл возвращается с той же вложенностью и в том же порядке, под именем es.json, а любая строка, потерявшая плейсхолдер, переводится заново ещё до того, как попадёт в вашу сборку.
Демо-приложение придумано для этой страницы; испанские строки — реальный результат работы инструмента, из файла на 85 строк.
От шаблона POT к файлу PO
Файл .pot — это список строк проекта, которые нужно перевести, и в нём каждый msgstr пуст. Загрузите его, выберите язык и получите .po с заполненным заголовком: Language, строка Plural-Forms для этого языка и кодировка UTF-8. Файл называется по языку, например myplugin.pot превращается в myplugin-de.po; переименуйте его так, как принято в вашем проекте, например в myplugin-de_DE.po для WordPress, и скомпилируйте в .mo привычным инструментом.
Формы множественного числа и fuzzy-записи
В разных языках счёт устроен по-разному. В английском две формы; в польском и русском в gettext их три; в арабском — шесть. Для каждой записи с множественным числом переводчик получает формы целевого языка с примерами чисел («форма 1: 2, 3, 4, 22») и пишет по одной строке на каждую форму. Если в вашем .po уже есть заголовок Plural-Forms для того же языка, используется это правило.
Записи с пометкой fuzzy переводятся заново; флаг fuzzy и старые строки #| msgid удаляются, а другие флаги, например php-format, сохраняются. Устаревшие записи #~ остаются нетронутыми.
Как работает инструмент, сколько он стоит и как обрабатываются ваши файлы — на странице Перевод файлов локализации; цены на все инструменты — на странице цены.
Обновлено
Вопросы и ответы
Перезапишет ли он мои существующие переводы?
Нет. Записи, у которых уже есть msgstr и нет пометки fuzzy, остаются точно такими, как были; переводятся только пустые и fuzzy-записи.
Создаёт ли он файл .mo?
Нет, вы получаете .po. Скомпилируйте его с помощью msgfmt, Poedit или команды вашего фреймворка, например wp i18n make-mo или compilemessages в Django.
Безопасны ли плейсхолдеры printf?
Каждый %s, %d, %1$s и %(name)s из msgid должен присутствовать в переводе. Строка, в которой что-то потерялось, переводится заново; если и это не помогло, её msgstr остаётся прежним (пустым или fuzzy), а сама строка попадает в список, так что gettext покажет исходный текст, а не испорченную строку.
Сколько это стоит?
Первые строки бесплатно. Весь файл — до 5,000 строк — стоит $5, разовый платёж, без подписки. Небольшие задачи — исключение: задача до 300 строк бесплатна полностью, включая скачивание.