Что такое PO файлы

Все тексты что должны быть переведены (диалоги, меню и т.д…), сохраняется в PO файл. PO файл - это файл перевода для приложения, с расширением .po и со специальной структурой содержащей: информацию о языке, переводчике, оригинальные диалоги и их переводы. Оригинальные диалоги начинаются с msgid, за ними следуют строки msgstr "текст перевода". Информацию о языке и переводчике находится в начале PO файла. Если для диалога нет перевода, оставьте msgstr пустым. Строки начинающиеся с символа # являются комментариями.

Пример пустого перевода:

#: src/PackageCommands.cs:57 src/PackageCommands.cs:3181
msgid "Search for a match to any of the search strings"
msgstr ""

Пример чешского перевода:

#: src/PackageCommands.cs:57 src/PackageCommands.cs:3181
msgid "Search for a match to any of the search strings"
msgstr "Vyhledat výsledek odpovídající alespoň některému z řetězců"

Что такое POT файлы

Файл POT - это шаблон для перевода. Его структура похожа на структуру PO файла, но содержит только оригинальный английский текст, и нет информации о переводчике и языке. Из файлов POT создаются PO-файлы.

If your created PO file manually in a text editor, you need add information about your language and save the file with suffix .po. If you create the beginning of the PO file incorrectly, the PO file will not pass the syntax check and in the statistics will have violet color and zero translated and fuzzy strings.

Начало файла rug.pot:

# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2006-05-02 20:04-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"

Начало файла rug.hu.po:

# translation of hu.po to
# Peter Breuer <comp@suselinux.hu>, 2003.
# Marcel Hilzinger <hili@suselinux.hu>, 2003.
# Marcel Hilzinger <marcel.hilzinger@suselinux.hu>, 2004.
# Szabolcs Varga <shirokuma@shirokuma.hu>, 2004, 2005.
# Kalman Kemenczy <kkemenczy@novell.com>, 2006.
msgid ""
msgstr ""
"Project-Id-Version: hu\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2006-06-08 12:58+0200\n"
"PO-Revision-Date: 2006-06-08 17:26+0200\n"
"Last-Translator: \n"
"Language-Team: <hu@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: KBabel 1.11.2\n"
"Plural-Forms: nplurals=1; plural=0;\n"

HOWTO по созданию PO файлов

Все что вам надо чтобы начать локализацию, это текстовый редактор, с помощью которого вы будете заполнять переводом пустые msgstr строки. Возможно, вам покожется более удобным использовать для этого специальные утилиты. Оригинальный английский текст в PO файлах начинающийся с msgid изменять нельзя.

Форматирование строк

Практически в каждом PO файле можно найти строки с форматированием. Большинство из которых содержит HTML-теги, иногда XML-теги, или другой язык форматирования. Все эти строки обязательно должны присутствовать в переводе, если вы их пропустите, то ваш перевод не пройдет проверку синтаксиса.

Примеры:

\n новая строка
<b>some_text</b>	жирный текст
<i>some_text</i>	курсивный текст

Употребление форм множественного числа

Строка POT файла, которая содержит слова употребляемые как в единственном, так и во множественном числе(мн.ч.), в зависимости от значения переменной:

msgid "%1 second"
msgid_plural "%1 seconds"
msgstr[0] ""
msgstr[1] ""
Пример, где мн.ч. идентично ед.ч. (локаль zh_CN(китай)):
msgid "%1 second"
msgid_plural "%1 seconds"
msgstr[0] "%1 秒"
Пример с одной формой мн.ч. (греческая локаль):
msgid "%1 second"
msgid_plural "%1 seconds"
msgstr[0] "%1 δευτερόλεπτο"
msgstr[1] "%1 δευτερόλεπτα"
Пример с двумя формами мн.ч. (чешская локаль):
msgid "%1 second"
msgid_plural "%1 seconds"
msgstr[0] "%1 sekunda"
msgstr[1] "%1 sekundy"
msgstr[2] "%1 sekund"

В KBabel вы должны в первую очередь определить формы мн.ч., в свойствах проекта.

Некоторая информация о том как это работает здесь , привила преобразования для русского языка здесь.

Проверка синтаксиса

Перед направлением PO файлов в SVN, проверьте их синтаксис. Для этого используйте msgfmt с опцией -c и/или проверьте функциональность переведеного приложения.