Валентина Гаврикова

    ludogowski@mail.ru

Перевод на русский
Николай Шафоростов

    shaff@ukr.net

Перевод на русский

# Работа с &kbabel;

## Введение

Обычно программные сообщения и документация написаны на английском языке. При наличии среды, состоящей из набора инструментов и библиотек, возможно изменить язык вывода сообщений программы с английского на другой. Процесс адаптации приложения к другому языку называется локализацией. Локализация включает в себя перевод программного интерфейса и документации на те языки, которые требуются пользователю, а также адаптация входных и выходных данных в соответствии с принятыми в определённых странах и регионах правилами. &kbabel; — это средство, с помощью которого локализация сводится до простого перевода сообщений на ваш язык.

Каждая программа, поддающаяся интернационализации, делает доступным для перевода один или более файлов сообщений. Эти файлы имеют расширение `.pot`. POT — это аббревиатура, означающая Portable Object Template (переносимый объектный шаблон).

Переводчик берет копию POT -файла и начинает переводить сообщения. Таким образом этот файл становится PO-файлом (Portable Object), который представляет собой перевод сообщений программы на другой язык.

Переводчик берет копию шаблона POT и начинает заполнять пустые строки: каждое сообщение переводится на выбранный язык. Файл, содержащий переведенный текст, называется PO (Portable Object) файлом.

Как только все сообщения переведены, PO-файл компилируется в понятный машине бинарный формат, известный как MO (Machine Object) файл. Такие файлы сохраняются с расширением `.mo` и представляют собой базу данных, чтобы свести к минимуму время, затрачиваемое приложениями на поиск переведа сообщения.

Возникает вопрос: а нужно ли знать, как устроен PO-файл, даже если есть &kbabel;? Ответ, без сомнения, — да. Бывают ситуации, когда список сообщений поврежден и его необходимо подправить вручную. Большинство из этих проблем, как правило, крайне неприятны при конфликтах CVS, которые случаются, когда файл перевода согласовывается с конкурирующей системой версий (см. документацию к CVS). &kbabel; не сможет помочь вам, если возникнет подобная проблема. Здесь необходимы текстовый редактор и знание формата PO-файлов.

PO-файлы состоят из пар сообщений — msgid и msgstr. msgid содержит текст на английском языке, а msgstr — текст , переведенный на соответствующий язык. Текст, отвечающий каждому msgid и msgstr, заключён в двойные кавычки (в стиле Си). Вот пример из PO-файла для &noatun;: `msgid "Open a Playlist"`

Пустые строки и строки, начинающиеся с `#`, игнорируются. Начинающиеся с # строки представляют собой комментарии и являются удобным способом внести примечание, поясняющее, в каком файле будет использоваться текущее сообщение, а также обеспечить добавочные комментарии в помощь переводчику. &kbabel; отображает комментарии для каждого сообщения.

Во многих случаях первая пара msgid-msgstr в PO-файле содержит служебную информацию (заголовок PO-файла), Здесь находится различная информация о переведенном PO-файле: наименование приложения, дата перевода, имя переводчика и т.д.

В последних версиях &GNU; gettext добавлена еще одна функция i18n, называющаяся множественные формы. В английском языке существуют только формы единственного и множественного числа существительных, например 1 file и 10 files. Это наводит многих разработчиков на мысль, что все очень просто и они могут использовать такие сообщения, как Do you want to delete %1 file(s)?, где `%1` обозначает количество подлежащих удалению файлов. Это является в корне неправильным. К примеру, для перевода на словацкий язык необходимы 3 различные формы сообщений. Количество форм различно для разных языков, и даже если оно одинаково (в чешском языке также существуют 3 формы), правила их употребления могут существенно отличаться.

Множественные формы существуют в PO-файлах для удобства. К сожалению, разработчики &kde; не слишком любят реализацию множественных форм в &GNU; gettext и внедряют для них свой собственный формат и обработку.

## Редактор

Здесь представлен снимок экрана &kbabel;. Для удобства &kbabel; имеет панели инструментов, ускоряющие выполнение многих операций, а для занятых пользователей — большое количество горячих клавиш. Главное окно разделено на четыре части.

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

Нижнее левое окно содержит поле msgstr, связанное с msgid, в нем можно редактировать перевод текста.

В верхней правой части главного окна находится панель комментариев, где можно видеть комментарии для текущего переводимого сообщения.

Она может использоваться:

- чтобы узнать, как приложением интерпретируется текущее сообщение (простое или c-формат).

- в некоторых случаях, чтобы ознакомиться с примечаниями, добавленными разработчиком приложения специально для оказания помощи переводчикам в их работе — к примеру, здесь могут находиться технические рекомендации (давшие замечательный результат в проекте LyX).

- если вам необходимо узнать, к какому файлу относится текущее сообщение, чтобы послать сообщение об ошибке, содержащейся в строке английского оригинала.

Снимок экрана &kbabel;
Снимок экрана &kbabel;

Окно редактора (в нижнем правом углу) наиболее сложная часть главного окна &kbabel;. Его размер регулируется разделительной линией, находящейся между ним и панелью комментариев (в верхнем правом углу). Окно снабжено несколькими вкладками с информацией о результатах поиска, контексте, источнике, необходимыми тегами. Закладка "Контекст перевода" содержит область прокрутки которая показывает кроме текущего фрагмента, четыре предыдущих и четыре последующих. Обычно переводимые сообщения связаны между собой по содержанию, поэтому контекстная панель может быть очень полезной, когда нужно просмотреть близлежащие сообщения, чтобы решить, как наилучшим способом перевести текущий фрагмент. Хорошим примером является перевод диалогового интерфейса, когда элементы управления окна содержат сопутствующий текст и сообщение "Что это?".

### Дополнительные возможности &kbabel;

Каждый фрагмент msgid может иметь три статуса:

непереведенный

  в msgstr в настоящее время нет переведенного текста

черновой

  `msgmerge` попыталась подобрать переведенную строку, глядя в остальные данные PO-файла. Однако полученный результат не идеален, и необходимо отредактировать перевод, чтобы он соответствовал текущему английскому сообщению.

переведенный

  msgid имеет перевод в msgstr

Статус текущего фрагмента указывается двумя LED. В зависимости от конфигурации, они могут находиться в строке текущего состояния или над окном с переведенными строками. Цвет обоих индикаторов можно настроить (в соответствии с вашим вкусом). О том, как это сделать, см. раздел Настройки.

## Расширенный перевод

К данному моменту вы уже получили некоторое представление о том, как переводить PO-файлы. В этом разделе мы рассмотрим типовой способ перевода нового PO-файла, используя дополнительные возможности &kbabel;. Допустим, вы уже открыли шаблон POT-файла и сохранили его как PO-файл (с расширением ".po").

### Навигация по PO-файлу

&kbabel; позволяет с легкостью передвигаться по файлу согласно статусу сообщений. Кроме непереведённого/чернового статуса, сообщение может иметь также ошибочный, в результате сравнительной проверки или проверки, сделанной с помощью `msgfmt`. И конечно, &kbabel; ведет историю перехода по сообщениям с помощью кнопок Вперед/Назад, как в &konqueror;.

Все команды навигации находятся в меню Перейти.

Page Up | Перейти к предыдущему сообщению
Page Down | Перейти к следующему сообщению
&Ctrl;Page Up | Перейти к предыдущему черновому сообщению
&Ctrl;Page Down | Перейти к следующему черновому сообщению
&Alt;Page Up | Перейти к предыдущему непереведенному сообщению
&Alt;Page Down | Перейти к следующему непереведенному сообщению
&Shift;Page Up | Перейти к предыдущему ошибочному сообщению
&Shift;Page Down | Перейти к следующему ошибочному сообщению
&Ctrl;&Shift;Page Up | Перейти к предыдущему черновому или непереведенному сообщению
&Ctrl;&Shift;Page Down | Перейти к следующему черновому или непереведенному сообщению

### Интеллектуальное редактирование

Интеллектуальное редактирование означает, что редактор поможет вам редактировать перевод, принимая во внимание особенности PO-формата. Это позволит прудупредить некоторые ошибки.

Редактор также поддерживает более чем один способ обозначения конца строки. Это очень удобно, принимая во внимание то, как gettext обрабатывает концы строк. Он просто игнорирует их. (Представьте себе, что что весь текст в msgstr расположен в одну линию.) Если вы захотите обозначить настоящий конец строки, вам придется вставить `\n`. Однако большинство переводчиков не осознает, что в msgstr просто начать новую строку не означает, что между строками будет интервал. Для этого нужно добавить пробел в конце каждой строки. А поскольку вы сами можете забыть это сделать, интеллектуальное редактирование делает это автоматически.

В таблице, расположенной ниже, объединены все функции интеллектуального редактирования.

Tab | Вставить \t
" | Вставить \"
Enter | Если последний знак перед курсором не является пробелом, вставить пробел, а затем начать новую строку.
&Ctrl;Enter | Начать новую строку без любого дополнительного действия.
&Shift;Enter | Вставить \n и начать новую строку

Если вы хотите видеть, где находятся пробелы, поставьте флажки перед пунктами Подсветка фона и/или Отмечать пробелы точками в диалоге настроек на закладках Редактирование и Внешний вид.

### Автоматический перевод

Как первый шаг в начале нового перевода, &kbabel; предусматривает функцию автоматического заполнения msgstr более старым вариантом перевода. Выберите в меню Инструменты Черновой перевод и вы увидите следующий диалог:

Диалог чернового перевода

В диалоге вам необходимо определить, что переводить, а также выбрать источники предыдущих переводов.

В верхней части рамки Что переводить находятся три флажка (Непереведенные значения, Черновые записи, Переведенные значения) для определения типа сообщений, которые требуется перевести. Непереведенные и черновые значения — обычный выбор для автоматического перевода, но вы можете также заменить и уже переведенные сообщения.

Точное соответствие полям msgid будет использовано для чернового перевода всегда. Однако, вы можете использовать еще и дополнительные опции, &ie; Учитывать черновые варианты в источнике и Разрешить перевод одиночных слов. Здесь не дается определение, что означает черновые варианты, но цель вполне очевидна. Перевод одиночных слов подходит только для некоторых языков. &kbabel; попытается перевести каждое слово в msgid отдельно и затем помещает переведенные слова (или фразы) в том же самом порядке в msgstr.

В качестве источника для чернового перевода может быть использован любой доступный словарный модуль. Есть два списка модулей: Не использовать и Использовать. Модули берутся из списка Использовать в порядке их указания. Сначала поиск происходит в первом словаре. Если перевод не найден, используется второй словарь и т.д. Для перемещения словарей между списками применяются кнопки со стрелками. Если вы хотите поменять порядок, воспользуйтесь кнопками Передвинуть вверх и Передвинуть вниз.

Обычно &kbabel; помечает каждое сообщение, переведённое черновым способом, как черновое, потому что предполагается, что любой автоматический перевод нуждается в корректировке переводчика. Если вы на 100% уверены, что автоматический перевод будет верным или проверяете каждое сообщение в любом случае, то можете отключить опцию Отметить изменённые записи как черновые, однако вам необходимо будет это подтвердить.

После того, как вы выбрали настройки, нажмите кнопку Запус, чтобы начался автоматический перевод. Вы можете следить за индикатором выполнения и, в случае необходимости, воспользоваться кнопкой Остановить.

### Проверьте ваш перевод

Никто не застрахован от ошибок. Поэтому &kbabel; поддерживает несколько способов проверки типичных ошибок в переводах. Эти проверки (не синтаксические), могут быть в основном представлены в двух вариантах.

Проверки могут производиться при каждом изменении переведённого текста. Такие проверки называются автоматическими и включаются в диалога Настройка &kbabel;. Автоматический контроль синтаксиса возможен при каждом сохранении файла.

Автоматические проверки могут замедлить работу &kbabel;. Если у вас медленный компьютер, вы можете отключить автоматические проверки и пользоваться второй возможностью. Вы можете запускать каждый способ проверки отдельно из меню Инструменты Проверка. В этом случае контроль производится для всех сообщений в файле и неправильные сообщения помечаются как ошибочные.

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

  Этот пункт меню запускает команду `msgfmt`, чтобы проконтролировать правильность PO-файла с точки зрения пакета gettext. Будет выведен результат работы команды и помечены ошибочные msgstr.

Проверить аргументы

  Неправильный перевод может привести приложение к краху. Наиболее рискованными частями перевода являются аргументы, например для printf-подобных функций. Эта проверка сравнивает количество и типы аргументов в msgid и msgstr. Они должны совпадать.

Проверить акселераторы

  Текст GUI обычно содержит акселераторы, т.е. буквы, которые могут быть использованы для быстрого доступа к элементам GUI посредством клавиатуры. Они обозначаются специальными символами, например в &kde; — это &. Типичным требованием к переводу является то, что переведенный текст также должен содержать акселераторы. Данная проверка выявит эту проблему. Символ акселератора можно определить в меню Настройки на закладке Разное.

Найти переведённую контекстную информацию

  Вероятно, эта проверка понадобится вам только в переводах &kde;. Некоторые сообщения (часто короткие) имеют слишком общий характер, и их необходимо перевести различным образом в разных случаях. В &kde; существует контекстная информация, находящаяся в начале msgid после специальной последовательности `: _`. Однако, если некоторые переводчики не знают об этом соглашении, они могут попытаться перевести также и эту контекстную информацию. Эта проверка попытается найти такие места. Если она найдет переведенную контекстную информацию, вам следует удалить ее.

Проверить множественные формы

  Если msgid определен как множественная форма, перевод дожен содержать определенное количество переводов, разделенных `\n`. Это количество зависит от языка перевода и определено в закладке Профиль в диалоге Настройки. В настоящий момент эта возможность реализована только для &kde;.

Проверить эквиваленты

  Эквиваленты — это специальный формат msgid, обычно используемый в файлах .desktop. И, поскольку ваши переводы будут помещены обратно в эти файлы, поле msgstr также должно использовать этот формат. Это значит, что перевод должен начинаться (перед первым случаем употребления `=` ) с того же самого текста, что и оригинальное сообщение, например `Name=`.

### Проверка орфографии перевода

Очень важно сделать проверку орфографии вашего перевода перед отправкой координатору команды. Это поможет вам отловить основную массу опечаток (особенно если дело ближе к ночи :-). &kbabel; использует стандартную библиотеку для проверки орфографии &kde;. её стандартную конфигурацию можно найти в диалоге настройки &kbabel;. Сам пункт меню проверки орфографии находится в Сервис Правописание. Для проверки орфографии используются несколько режимов:

Проверка орфографии...

  Это вызов общего диалога, где вы можете выбрать режим проверки орфографии и установить режим по умолчанию. Диалог запускается комбинацией клавиш &Ctrl;l .

Проверить всё...

  Проверить орфографию всех сообщений в файле.

Проверить от позиции курсора...

  Начать проверку орфографии от позиции курсора в текущем сообщении и продолжать до конца файла.

Проверить текущий...

  Проверить орфографию только в текущем сообщении.

Проверить выбранный текст...

  Данная опция доступна, если в msgstr выделен какой-нибудь текст. Будет проверен только этот текст.

### Перевод &XML;, HTML, ...

Языки разметки все больше и больше используются в &GUI;. Проект &kde; также использует PO-файлы для перевода файлов документации DocBook (которые также являются языком разметки). В &kbabel; есть довольно много функциональных возможностей для поддержки этого направления.

Здесь мы опишем только те функции, которые относятся к тегам, используемым именно для разметки. Другие проблемы, вызванные использованием языков разметки, относятся к переводу более длинных текстов. Этот раздел посвящён функции различия, описанной в в следующем разделе.

Данная версия &kbabel; определяет, какие теги использованы в msgid и обеспечивает к ним легкий доступ с помощью следующих пунктов из меню Правка:

Вставить следующий тег

  Этот пункт меню вставляет в перевод следующий обнаруженный в msgid тег. &kbabel; находит нужные теги, подсчитывая их количество от начала перевода.

Правка Вставить тег

  Этот пункт меню содержит все различные между собой теги разметки, найденные в английском оригинале. Вы можете выбрать один тег и вставить его в переведенный текст рядом с текущей позицией курсора.

### Отображение различий

Как уже говорилось, текущие приложения, стараясь быть удобными для пользователя, содержат большое количество длинных описательных текстов, включающих разметочные теги. Если разработчик изменяет часть текста, система &GNU; gettext, в лучшем случае, сохранит старый вариант перевода и пометит его как черновой. (В худшем случае, вы можете полностью потерять перевод, что зависит от размера изменяемого текста). Такая система работает нормально, если msgid короткий, т.к. в этом случае можно быстро найти изменения. Однако, если текст достаточно длинный, вам придется помучиться, чтобы выяснить, что было изменено (например, команда, читающая корректуру, может изменить только артикль).

&kbabel; может помочь вам в этом, просмотрев оригинальный msgid и показав разницу. Изменения графически отображаются в Оригинальном тексте в редакторе. Способ отображения различий можно установить в диалога настройки &kbabel;. Сервис Различия Показать различия покажет найденные различия. Чтобы просмотреть только текущий текст без смеси с оригинальным текстом, выберите Сервис Различия Показать оригинальный текст.

Вы можете включать и выключать автоматический поиск различий, зайдя в Сервис Различия Режим поиска различий. Когда режим поиска различий включён, поиск различий начинается при переходе к другому сообщению.

Вы можете использовать различные источники старой версии текста, путь к ним устанавливается в диалоге настройки &kbabel;

База данных перевода

  Вы можете использовать Базу перевода для различного поиска. Мы настоятельно рекомендуем вам включить автоматическое сохранение вновь переведённых сообщений в Базу перевода с помощью диалога настройки Базы данных перевода. Этот режим можно включить с помощью Использовать сообщения из Базы перевода.

Дерево старых файлов

  Вы сможете воспользоваться деревом, только если будет включён поиск в Базе перевода. Установив Основной каталог для файлов различий, вы можете указать &kbabel;, какой файл использовать для поиска различий. &kbabel; берет относительный путь открытого файла и использует этот относительный путь в каталоге, который вы определили. Если в нём есть соответствующий файл, &kbabel; воспользуется им. Чтобы использовать этот режим, вам необходимо копировать старые версии файлов перед каждым обновлением.

Выбор файлов вручную

  Если предыдущий способ не работает корректно, вы всегда можете выбрать файлы различий вручную, зайдя в Сервис Различия Открыть файл для различий.

Поиск различий не всегда точен, так как PO-файл не содержит никаких ссылок на оригинальное сообщение.

## Множественные формы

Поскольку множественные формы — это довольно сложный вопрос, их поддержке в &kbabel;, мы посвящаем специальный раздел.

Начиная версии 1.3, &kbabel; может изменять множественные формы как &GNU;, так и &kde;.

Каждый язык, на который переводится &kde;, должен содержать правильное количество множественных форм. Это достигается переводом данных, содержащихся в `kdelibs.po`. Количество множественных форм устанавливается выбором названия языка, который использует такое же число форм и правила нахождения верной множественной формы. Новейший список значений можно найти в исходном коде kdelibs в файле `kdecore/klocale.cpp`.

Множественные формы в &kde; обозначаются комментарием `_:`, содержащим аргумент `%n`. Затем этот аргумент используется в самом сообщении. Он контролирует, какую множественную форму следует использовать по правилам вашего языка.

Перевод сообщений, содержащих множественные формы, должен иметь специальный формат. В нем должно быть соответствующее число переводов (по одному на каждую множественную форму), отделенных знаком конца строки `\n`. Например, Selected %n files в переводе на русский язык будет выглядеть следующим образом:

    Выбран %n файл\n
    Выбрано %n файла\n
    Выбрано %n файлов

Чтобы проконтролировать, содержит ли ваш перевод правильное число множественных форм, выберите меню Сервис Проверка Проверить множественные формы .