# Работа с &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, называющаяся множественные формы. В английском языке существуют только формы единственного и множественного числа существительных, &eg; 1 file и 10 files. Это наводит многих разработчиков на мысль, что все очень просто и они могут использовать такие сообщения, как Вы хотите удалить %1 файл(ов)?, где `%1` обозначает количество подлежащих удалению файлов. Это является в корне неправильным. К примеру, для перевода на словацкий язык необходимы 3 различные формы сообщений. Количество форм различно для разных языков, и даже если оно одинаково (&eg; в чешском языке также существуют 3 формы), правила их употребления могут существенно отличаться.

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

## Редактор

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

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

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

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

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

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

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

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

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

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

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

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

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

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

черновой

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

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

  msgid полностью переведен в msgstr

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

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

К данному моменту вы уже получили некоторое представление о том, как переводить PO-файлы. В этом разделе мы рассмотрим типовой способ перевода нового PO-файла, используя дополнительные возможности &kbabel;. Допустим, вы уже открыли шаблон POT-файла и сохранили его как 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.

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

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

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

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

Просмотреть переведенную контекстную информацию

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

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

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

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

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

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

Обычно очень важно сделать проверку орфографии вашего перевода перед тем, как пользоваться результатом. В процессе проверки можно найти опечатки и другие недостатки вашего перевода. &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;, мы посвящаем специальный раздел.

&kbabel; может только читать множественные формы &GNU;, но не может редактировать их. В настоящее время &kbabel; поддерживает только &kde;-версию множественных форм.

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

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

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

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