Next Previous Table of Contents

### 11. Интернационализация

### 11.1 Что такое i18n ?

i18n - это система интернационализации, которая используется для разработки интернациональных версий программы или проекта. Сложность написания приложений состоит в том, что они поддерживают только один язык, заложенный в них при разработке; это проявляется в надписях меток, входов меню и т.п. Цель интернационализации - предоставить приложения и библиотечные функции на языке пользователя; это сделает их доступными пользователям, не владеющим языком оригинала, сделает их работу более комфортной.

### 11.2 Как KDE поддерживает интернационализацию

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

Технически это реализуется с помощью стандарта файловой системы KDE, который поддерживает локализацию документации и предоставляет возможность интернационализации приложений, используя класс `KLocale` библиотеки KDE-core. Он реализует перевод в зависимости от того, какой язык установлен по умолчанию в Центре управления KDE (KDE Control Center).

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

1. включить `kapp.h` в исходный код везде, где есть видимый текст, т.е. в исходники, содержащие объекты QLabel,
2. везде, где встречаются видимые строки, вставить их в макрос `i18n()`, предоставляемый `kapp.h` для интернационализации,
3. везде, где вы используете локализованный объект, использовать макрос `klocale`, предоставляемый `kapp.h`.

Это почти все, за чем вы должны следить при разработке кода. Имейте в виду, что вы не должны интернационализировать конфигурационные строки, используемые `KConfig`, потому что это, с одной стороны, ненужно, а с другой стороны, не будет работать.

### 11.3 Добавление языка в проект

KDevelop также принимает участие в облегчении вашей жизни при добавлении поддержки нового языка в ваше приложение. Всегда при создании нового проекта KDE каталог `po` добавляется в корневой каталог проекта. В него будет помещен ваш файл <приложение>.pot после окончания генерации. pot файл содержит все строки, заключенные в макрос i18n(). Вы должны только написать свой код, используя этот макрос. Время от времени вы должны запускать "Project"-"Make messages and merge", что автоматически извлечет все макросы из кода и сгенерирует pot файл.

Для добавления языка в ваше приложение, выберите "Project"-"Add translation file", после чего откроется каталог выбора языка. Выберите требуемый язык и нажмите OK. После этого соответствующий <lang>.po файл появится в каталоге `po`. Запустите перевод po файла, выбрав его в каталоге po, в Real File Viewer или из LFV, папка "Translations". Если вы установили KTranslator, он откроется в окне "Tools" с KTranslator, иначе как текстовый файл в панели header/resource. KTranslator облегчает перевод строк, сканируя уже существующие переводы вашей локальной инсталляции KDE, поэтому уже существующий перевод может использоваться повторно.

Рассмотрим пример ручного редактирования:

> `

>     #: kscribble.cpp:619
>     msgid "Opens an existing document"
>     msgstr ""

> `

Это строка, взятая из файла `kscribble.cpp`, строка кода номер 619. `msgid` и `msgstr` - это таги, которые дают информацию для перевода; `msgstr` должен содержать переведенный текст. Вы можете увидеть эскейп-последовательности типа \n или \t, которые должны быть включены в переведенную строку. Русский перевод будет выглядеть так:

> `

>     #: kscribble.cpp:619
>     msgid "Opens an existing document"
>     msgstr "Открыть существующий документ"

> `

Это все, что необходимо для перевода; когда это сделано, сохраните файл. Когда make будет просматривать каталог po, будет обработан файл сообщений и могут возникнуть ошибки, если строки переведены неправильно, например, без учета эскейп-последовательностей. Если это произошло, отредактируйте строку сообщения снова и убедитесь, что make выполняется без ошибок.

Кроме того, вы должны быть очень аккуратны при переводе амперсантов в текстовых строках. Буква после амперсанта используется как горячая клавиша в сочетании с клавишей ALT для переключения фокуса ввода клавиатуры на требуемый элемент. Если одинаковые буквы используются в одной области фокуса клавиатуры (например, главное окно или диалоговое окно), все элементы, кроме первого, не будут доступны по горячей клавише. Поэтому переводчик также отвечает за возможность использования приложения. Кроме того, нет никаких гарантий, что исходная буква встретится в переводе, поэтому переводчик должен быть очень осторожен и должен протестировать приложение на своем языке после установки перевода, чтобы убедиться в отсутствии подобных неприятностей.

### 11.4 Связь с командой перевода

Команда KDE предоставляет многочисленные возможности контакта для разработчиков, выполняющих функции переводчиков. Они организованы в группы по языку перевода, на уровне которых и координируется работа. Для получения списка групп и адресов, где можно узнать о переводе ваших приложений, см. http://www.kde.org.

Информация, приводимая ниже, взята с web-сайта KDE и отражает состояние на 6 марта 1999 года. Если вы хотите присоединиться к команде перевода, пишите непосредственно своему координатору.

Перевод KDE организован Juraj Bednar mailto:bednar@rak.isternet.sk и Matthias Elter me@kde.org.

Вы можете подписаться на лист рассылки kde-i18n-doc@kde.org, послав письмо на kde-i18n-doc-request@kde.org со словом "subscribe" в теме письма.

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

br Breton translation team:

  team coordinators: JaЯ-Mai DRAPIER jdrapier@club-internet.fr website: http://perso.club-internet.fr/jdrapier

ca Catalan translation team:

  team coordinators: SebastiЮ Pla sastia@redestb.es

cs Czech translation team:

  team coordinators: Miroslav FlМdr flidr@kky.zcu.cz

da Danish translation team:

  team coordinators: Erik KjФr Pedersen erik@binghamton.edu

de German translation team:

  team coordinators: Thomas Diehl th.diehl@gmx.net website: http://www.dtp-service.com/kde/de/ mailing list: send a mail with 'subscribe' in the subject line to: kde-i18n-de-request@kde.org Webforum for discussions and user feedback: http://www.dtp-service.com/discus_d

el Greek translation team:

  team coordinators: Theodore J. Soldatos theodore@eexi.gr

eo Esperanto translation team:

  team coordinators: Wolfram Diestel diestel@rzaix340.rz-uni-leipzig.de

es Spanish translation team:

  team coordinators: Boris Wesslowski, Alonso Lara Boris@Wesslowski.com website: http://members.xoom.com/keko5/ mailing list: send a mail with 'subscribe' in the subject line to kde-es@kde.org

et Estonian translation team:

  team coordinators: Hasso C. Tepper hasso@ewsound.estnet.ee

fi Finnish translation team:

  team coordinators: Kim Enkovaara kim.enkovaara@iki.fi

fr French translation team:

  team coordinators: Francois-Xavier Duranceau Francois-Xavier.Duranceau@loria.fr website: http://www.loria.fr/~durancea/kde/wip-apps.html mailing list: send an empty mail to: kde-traduc-fr-subscribe@egroups.com

he Hebrew translation team:

  team coordinators: Erez Nir erez-n@actcom.co.il

hr Croatian translation team:

  team coordinators: Vladimir Vuksan vuksan@veus.hr

hu Hungarian translation team:

  team coordinators: Marcell Lengyel miketkf@yahoo.com website: http://sophia.jpte.hu/~kde

is Icelandic translation team:

  team coordinators: Logi Ragnarsson, logir@imf.au.dk Thorarinn R. Einarsson, thori@mindspring.com Bjarni R. Einarsson, bre@netverjar.is Hrafnkell Eiriksson, hkelle@rhi.hi.is Gudmundur Erlingsson, gudmuner@lexis.hi.is Richard Allen ra@hp.is

it Italian translation team:

  team coordinators: Andrea Rizzi rizzi@kde.org

ko Korean translation team:

  team coordinators: LinuxKorea Co. kde@linuxkorea.co.kr

mk Macedonian translation team:

  team coordinators: Sasha Konecni sasha@msi-uk.com

nl Dutch translation team:

  team coordinators: flidr@CyberGate.zcu.cz flidr@CyberGate.zcu.cz

no Norwegian translation team:

  team coordinators: Hans Petter Bieker zerium@webindex.no

pl Polish translation team:

  team coordinators: Piotr Roszatycki dexter@fnet.pl

pt Portuguese translation team:

  team coordinators: Pedro Morais pmmm@camoes.rnl.ist.utl.pt

pt_BR Brazil Portuguese translation team:

  team coordinators: Elvis PfЭtzenreuter epx@netville.com.br

ro Romanian translation team:

  team coordinators: Paul Ionescu ipaul@romsys.ro

ru Russian translation team:

  team coordinators: Denis Y. Pershin dyp@inetlab.com

sk Slovak translation team:

  team coordinators: Juraj Bednar bednar@isternet.sk mailling list: send a mail with 'subscribe' in the subject line to: sk-i18n@rak.isternet.sk

sl Slovenian translation team:

  team coordinators: blazzupancic@hotmail.com blazzupancic@hotmail.com

sv Swedish translation team:

  team coordinators: Anders Widell d95-awi@nada.kth.se

tr Turkish translation team:

  team coordinators: Gorkem Cetin gorkem@linux.org.tr

zh_GB2312 Simplified Chinese translation team:

  team coordinators: Wang Jian larkw@263.net

zh_TW_Big5 Chinese BIG5 translation team:

  team coordinators: Chou Yeh-Jyi ycchou@ccca.nctu.edu.tw

Next Previous Table of Contents