|
||||||||||||||||||||||
|
Розд╕ли:
╤нш╕ матер╕али цього сайту:
|
![]()
Технолог╕я локал╕зац╕╖Багато людей, як╕ недавно познайомилися з Л╕нуксом, ц╕кавляться, як саме працю╓ локал╕зац╕я програм у Л╕нукс╕, як нею керувати, та як можна самому створювати переклади для програм чи писати програми, як╕ легко локал╕зуються.З позиц╕╖ користувачаЗ позиц╕╖ користувача, налаштування так звано╖ «локал╕» в╕дбува╓ться досить просто. Вс╕ основн╕ параметри контролюються дек╕лькома зм╕нними, це:
Зм╕нна LANGВ основному керування локал╕зац╕╓ю у Л╕нукс╕ зд╕йсню╓ться за допомогою зм╕нно╖ LANG. Присво╓ння ц╕й зм╕нн╕й р╕зних значень зд╕йсню╓ зм╕ну мовного оточення, напр.:bash-2.05$ LANG=uk_UA.KOI8-U date Пнд Гру 2 19:11:28 EET 2002 bash-2.05$ LANG=de_DE date Mon Dez 2 19:12:32 EET 2002 Зм╕нна LC_MESSAGESПрисво╓ння значення ц╕й зм╕нн╕й да╓ змогу вибрати мови, на яких ви хот╕ли б бачити пов╕домлення програм, напр.:bash-2.05$ export LANG=uk_UA.KOI8-U bash-2.05$ date Пнд Гру 2 19:14:26 EET 2002 bash-2.05$ LC_MESSAGES=de_DE date Пнд Гру 2 19:14:38 EET 2002 bash-2.05$ LC_MESSAGES=de_DE date -a date: Ung?ltige Option -- >>a<< Mit `date --help' bekommen Sie mehr Informationen.Зверн╕ть увагу, що сьогодн╕шн╓ число виводиться укра╖нською, але пов╕домлення про помилку виводиться н╕мецькою. Файл /etc/sysconfig/i18nУ цьому файл╕ збер╕гаються зм╕нн╕, як╕ задають локал╕зац╕ю для вс╕╓╖ системи (це лише для дистрибут╕в, як╕ побудован╕ на основ╕ Red Hat, у вашому дистрибут╕ ця ╕нформац╕я може збер╕гатися у ╕ншому файл╕ чи налаштовуватися за допомогою спец╕ально╖ програми, наприклад у SuSE для цього використову╓ться YaST). На мо╖й машин╕ цей файл ма╓ такий вигляд:LANG="uk_UA.KOI8-U" SYSFONT="cyr-sun16" SYSFONTACM="koi8-u"Зм╕нн╕й LANG присво╓но значення "uk_UA.KOI8-U", отже вс╕ правильно локал╕зован╕ програми будуть використовувати цю локаль (деяк╕ нелокал╕зован╕, чи некоректно локал╕зован╕ програми не звертають на це уваги, наприклад KDE ма╓ сво╖ налаштування для локал╕зац╕╖ ╕ не зверта╓ уваги на загальносистемн╕, що часто збива╓ з пантелику початк╕вц╕в та злить л╕нуксо╖д╕в з╕ стажем). Зм╕нн╕ SYSFONT та SYSFONTACM вказують, який шрифт та яке перекодування сл╕д використовувати для виводу на екран у консольному режим╕ (на граф╕чн╕ програми це не вплива╓). Команда localeЦя команда виводить значення ус╕х зм╕нних, як╕ мають в╕дношення до локал╕зац╕╖:bash-2.05$ LANG=uk_UA.KOI8-U LC_MESSAGES=de_DE locale LANG=uk_UA.KOI8-U LC_CTYPE="uk_UA.KOI8-U" LC_NUMERIC="uk_UA.KOI8-U" LC_TIME="uk_UA.KOI8-U" LC_COLLATE="uk_UA.KOI8-U" LC_MONETARY="uk_UA.KOI8-U" LC_MESSAGES=de_DE LC_PAPER="uk_UA.KOI8-U" LC_NAME="uk_UA.KOI8-U" LC_ADDRESS="uk_UA.KOI8-U" LC_TELEPHONE="uk_UA.KOI8-U" LC_MEASUREMENT="uk_UA.KOI8-U" LC_IDENTIFICATION="uk_UA.KOI8-U" LC_ALL=Зауважте, що у вивод╕ команди locale т╕ значення, як╕ взят╕ безпосередньо з оточення, виводяться без лапок, а значення взят╕ за замовчанням - у лапках. Цю команду корисно використовувати при визначенн╕ проблем з локал╕зац╕╓ю (наприклад, програми виводять пов╕домлення укра╖нською, а дату н╕мецькою).
Команда localedefОпису╓ нову локаль, наприклад:# localedef -c -v -f CP1251 -i uk_UA uk_UA.CP1251 # LANG=uk_UA.CP1251 date оМД цПС 2 19:23:25 EET 2003Створю╓ нову локаль (-с) з кодуванням CP1251 (-f CP1251), яка описана у файл╕ /usr/share/i18n/locales/uk_UA (-i uk_UA), з назвою uk_UA.CP1251. Ця локаль да╓ змогу сп╕лкуватися з програмою укра╖нською мовою у кодуванн╕ CP1251 (що видно на приклад╕ виводу команди date). Перев╕рка правильност╕ локал╕зац╕╖Перед початком прац╕, бажано перев╕рити правильн╕сьт налаштувань локал╕зац╕╖.Використання LocaleConfБагато користувач╕в запитують мене, чому ╖хн╕й комп'ютер малю╓ крякозябри зам╕сть укра╖нських л╕тер або не ма╓ укра╖нсько╖ локал╕зац╕╖. Як правило я в╕дпов╕даю, що не знаю в чому проблема - це ваш комп'ютер з вашими проблемами та помилками. Спец╕ально для таких випадк╕в я написав невеличкий наб╕р скрипт╕в, як╕й перев╕ряють типов╕ проблеми та помилки у локал╕зац╕╖. Завантажте з╕ стор╕нки Locale Conf скрипт checklocale-uk_UA.KOI8-U.sh ╕ запуст╕ть його (sh ./checklocale-uk_UA.KOI8-U.sh ). В╕н робить багато перев╕рок, як╕ можуть бути ор╕╓нтирами для вас при налаштуванн╕ локал╕зац╕╖.
Використання команди gettextДля перев╕рки доступност╕ перекладених пов╕домлень та перев╕рки правильност╕ локал╕зац╕╖, можна користуватися командою gettext з пакету gettext-tools, наприклад:bash-2.05$ LANG=uk_UA.KOI8-U gettext -sd gedit "Save" Зберегти bash-2.05$ LANG=uk_UA.CP1251 gettext -sd gedit "Save" гАЕПЕЦРХ bash-2.05$ LANG=uk_UA.UTF-8 gettext -sd gedit "Save" пп╠п╣яп╣пЁяп╦У мене все чудово - вс╕ три вар╕анти укра╖нсько╖ локал╕ працюють в╕дм╕нно.
Але пам'ятайте, що одн╕╓╖ п╕дтримки локал╕ у GNU libc не досить - необх╕дно ще мати правильно налаштован╕ шрифти, розкладку клав╕атури, мати п╕дтримку локал╕ у XFree86 та KDE, як╕, нажаль, зневажають системн╕ налаштування.
З позиц╕╖ перекладачаПереклад програми при використанн╕ GNU gettext (стандартного засобу для локал╕зац╕╖ програм в проектах GNU) под╕ля╓ться на дек╕лька етап╕в:
Створення файла з перекладамиНеобх╕дно знайти .pot чи .po-файл для вашо╖ програми ╕ заповнити поля у заголовку правильними значеннями, наприклад так:# Ukranian translation of the gnome-games module. # Copyright (C) 1999,2000 Free Software Foundation, Inc. # Yuri Syrota <stopspam@stopspam.com>, 1999-2000. # msgid "" msgstr "" "Project-Id-Version: gnome-games 1.1.0\n" "POT-Creation-Date: 2002-05-28 21:45+0100\n" "PO-Revision-Date: 2002-05-24 09:50+0200\n" "Last-Translator: Yuriy Syrota <stopspam@stopspam.com>\n" "Language-Team: Ukrainian <translation-team-uk@STOPSPAMlists.sourceforge.net>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=koi8-u\n" "Content-Transfer-Encoding: 8bit\n"Це може зробити ╕ програма, якою ви переклада╓те, але не завадить проконтролювати ╖╖ роботу, бо вони досить часто помиляються. Зверн╕ть увагу, що при нев╕рно вказаному кодуванн╕ текст перекоду╓ться зайвий раз з цього, нев╕рно вказаного кодування, у ваше. Скор╕ше за все, ви не зможете прочитати те, що утвориться в результат╕ цього подв╕йного перекодування. Краще за все використовувати для файла з перекладом те ж кодування, яке ви використову╓те для роботи з програмою - для уникнення зайвих перекодовувань. Для консольних програм рекоменду╓ться KOI8-U, для GNOME2 та KDE - UTF-8. Тепер можна приступати до перекладу. Переклад можна виконувати як у звичайному текстовому редактор╕, так ╕ за допомогою спец╕ал╕зованих програм (дивись нижче). Формат запису з рядком для перекладу:# коментар╕ перекладача #. автоматичн╕ коментар╕ #: посилання... #, прапорець... #* Автор #@ пакет1, пакет2, пакет3 domain "домен" msgid "untranslated-string" msgstr "перекладений рядок" # коментар╕ перекладача #. автоматичн╕ коментар╕ #: посилання... #, прапорець... #* Автор #@ пакет1, пакет2, пакет3 msgid "%d message" msgid_plural "%d messages" msgstr[0] "%d пов╕домлень" msgstr[1] "%d пов╕домлення" msgstr[2] "%d пов╕домлень"Типи коментар╕в:
Синтаксис рядкаЯкщо ви викону╓те переклад без використання спец╕альних редактор╕в (або за допомогою KBabel, який не зам╕ня╓ спец╕альн╕ символи, на в╕дм╕ну в╕д GTranslator), то пам'ятайте, що:
Повторне використання перекладуДля полегшення життя перекладачам, для того, щоб не перекладати один ╕ той самий текст знову ╕ знову в р╕зних файлах, створили дек╕лька систем для повторного використання переклад╕в. Суть ╖х проста - спочатку ви збира╓те вс╕ тексти у одну велику купу, а пот╕м, коли необх╕дно перекласти текст, програма дивиться у т╕й куп╕, чи нема╓ там пов╕домлень, як╕ ви колись вже перекладали. Якщо таке пов╕домлення ╓, то ми використову╓мо його.Використання msgmerge, msgcatНайпрост╕ший випадок, який дуже часто зустр╕ча╓ться, це вих╕д ново╖ верс╕╖ програми з дек╕лькома новими ╕ зм╕неними пов╕домленнями. В таких випадках дуже зручно користуватися утил╕тоюmsgmerge, яка дозволя╓ використати стар╕ пов╕домлення для перекладу новго .pot-файла.
У найпрост╕шому випадку синтаксис команди такий:
msgmerge старий_переклад.po новий_шаблон.pot -o новий_переклад.poMsgmerge бере пов╕домлення з╕ старого файлу переклад╕в ╕ заповню╓ ними новий шаблон. Якщо для пов╕домлення з шаблону не знайдено пов╕домлення, то msgmerge намага╓ться знайти перекладене пов╕домлення, яке найпод╕бн╕ше на це, ╕ використати його, в╕дм╕тивши переклад прапорцем fuzzy (неч╕тке). Пов╕домлення, для яких нема╓ в╕дпов╕дника у файл╕ шаблону, коментуються за допомогою преф╕ксу "#~ ". ╥х мо╓на видалити, якщо в них вже нема╓ потреби. Результат перекладу збер╕га╓ться у файл╕ "новий_переклад.po". Вам достатньо тепер лише переглянути та виправити неч╕тк╕ пов╕домлення та перекласти неперекладен╕ пов╕домлення. TODO (про створення compendium ╕ його використання з msgmerge) Використання po-tools на linux.org.uaНа нашому сайт╕ розм╕щено веб-╕нтерфейс до бази перекладених пов╕домлень на основ╕ po-tools. http://www.linux.org.ua/tools/index.php3 Поки що там ╓ лише так╕ можливост╕:
Використання утил╕т з KBabelTODO Користувач╕ KBabel - це вам писати.
В╕дб╕р част╕ших пов╕домлень у великих проектахУ великих проектах часто виника╓ потреба в╕д╕брати пов╕домлення, як╕ користувач бачить част╕ше за ╕нш╕, для того, щоб перекласти спочатку ╖х, оск╕льки на переклад ус╕╓╖ програми не вистача╓ сил. Для цього був створений Get Text Log, який перехоплю╓ запити на переклад пов╕домлень та збер╕га╓ ╖х у журнал╕.Сл╕дкування за програмою за допомогою gettextlogGet Text Log реал╕зований у вигляд╕ динам╕чно╖ б╕бл╕отеки, яка зам╕ня╓ функц╕╖ gettext сво╖ми заглушками. Вона завантажу╓ться в пам'ять перед початком роботи програми при вказан╕ ╖╖ в LD_PRELOAD, наприклад так:$ LD_PRELOAD=/usr/local/lib/gettextlog.so geditЩоб ви не мучилися, я створив невеликий скриптик, run-with-gettextlog, який прийма╓ як аргумент програму, яку треба виконати, з параметрами. Наприклад: $ run-with-gettextlog geditФайли з пов╕домленнями збер╕гаються у каталоз╕ gettextlog. Перед використанням файл╕в, ╖м потр╕бно спочатку п╕дправити заголовок та залишити лише по одному екземпляру пов╕домлення з допомогою команди msguniq. Програми для прац╕ з .po-файламиKBabelkbabel, (UNIX - KDE);
Найпопулярн╕ша програма для перекладу - ма╓ багато р╕зних можливостей (користувач╕ KBabel - агов!, напиш╕ть щось). Рекоменду╓ться для використання.
GTranslatorgtranslator, (UNIX - GNOME); Ма╓ менше можливостей, досить багато помилок (особливо при перев╕рц╕ правопису). Основна перевага(для мене) - б╕льш зручн╕ший дизайн основного в╕кна та автоматичне розкодовування/закодування спец╕альних символ╕в (\n, \r, \t, \") - основна проблема для мене при використанн╕ KBabel чи простого текстового редактора. Рекоменду╓ться тим, хто використову╓ GNOME. GTranslator ма╓ Автоматичний Буфер Навчання, який дозволя╓ збер╕гати вс╕ ваш╕ переклади та. п╕зн╕ше, використовувати ╖х для автоматично перекладу нових po-файл╕в, под╕бно до того, як це робить msgfmt. Можна внести у базу ╫трансятора вже ╕снуюч╕ ваш╕ переклади але, при великих об'╓мах тексту в буфер╕, ╫Транслятор (як ╕ msgfmt) працю╓ надзвичайно пов╕льно. poEditpoEdit, (UNIX - GTK+, Windows - Win GUI?);
Не працював з ним, не знаю про переваги. Для тих, хто працю╓ ╕ п╕д Windows, ╕ п╕д Л╕нукс.
Emacs - po-mode.elemacs (po-mode.el) (UNIX, Windows); Для тих, хто користу╓ться Emacs. Цей пакет добре описаний в info по gettext. П╕дтриму╓ ус╕ можливост╕ gettext.po-tools(perl, в╕д платформи майже не залежить). Наб╕р утил╕т командного рядка та CGI-скрипт для Тенет для ман╕пулювання po-файлами. Обм╕ном перекладеними пов╕домленнями через центральну базу на linux.org.ua, побудовану на основ╕ po-tools, можуть скористатися ус╕ бажаюч╕ - це дозволя╓ не перекладати пов╕домлення дв╕ч╕ чи трич╕. Нажаль не п╕дтриму╓ форми множини (msgstr_plural).Комп╕ляц╕я файла з перекладамиСкористайтеся командою:$ msgfmt ╕м'я_файлу.po -o ╕м'я_файлу.moВона згенеру╓ дв╕йковий файл з перекладами. Цей дв╕йковий файл сл╕д покласти в каталог /usr/share/locale/uk/LC_MESSAGES/п╕д назвою package.mo (назва пакету та ж сама, яка була у pot-файла).
Тепер програма може його знайти та використати. Запуст╕ть ╖╖ та переконайтеся в цьому. Якщо ви все зробили в╕рно, то ви побачите сво╖ переклади.
Перев╕рка файла з перекладамиСкористайтеся командою :$ msgfmt -c -v -o /dev/null ╕м'я_файлу.poВона також вида╓ статистику по к╕лькост╕ р╕зних тип╕в пов╕домлень (перекладених, не перекладених, неч╕тких). З позиц╕╖ програм╕стаНаписання програми з п╕дтримкою локал╕зац╕╖Наведемо простеньку програму, яка друку╓ пов╕домлення "Hello, world!" мовою користувача.
1 #include <stdio.h>
2 #include <locale.h>
3 #include <libintl.h>
4 #define _(x) gettext(x)
5
6 int main(int argv, char **args)
7 {
8 setlocale (LC_ALL,"");
9 bindtextdomain ("test", "/tmp");
10 textdomain ("test");
11
12 printf (_("Hello, world!\n"));
13
14 exit(0);
15 }
Спочатку встановлю╓ться локал╕зац╕я для програми:
$ gcc -o test test.cта запуска╓мо: $ ./test Hello, world!Як бачимо, програма працю╓, але вона все ще не перекладена. Для перекладу програми необх╕дно
$ xgettext -o test.pot -k_ test.cПараметр -k вказу╓, що треба, окр╕м gettext("text") та ╕нших стандартних функц╕й, шукати також _("text").
Шаблон вигляда╓ так:
# 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" "POT-Creation-Date: 2003-03-19 18:52+0200\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" #: test.c:12 msgid "Hello, world!\n" msgstr ""Тепер ми ма╓мо заповнити заголовок в╕рними значеннями та перекласти пов╕домлення, для прикладу, так: msgid "" msgstr "" "Project-Id-Version: test 1.0\n" "POT-Creation-Date: 2003-03-19 18:52+0200\n" "PO-Revision-Date: 2003-03-19 18:52+0200\n" "Last-Translator: Volodymyr M. Lisivka\n" "Language-Team: Ukrainian\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=koi8-u\n" "Content-Transfer-Encoding: 8bit\n" #: test.c:12 msgid "Hello, world!\n" msgstr "Прив╕т, св╕т!\n"Збережемо переклад у файл╕ uk.po. Тепер ми можемо в╕дкомп╕лювати його командою: $ msgfmt -o test.mo uk.poТепер треба пом╕стити у каталог, де програма зможе його знайти. Ми вказали, що переклади сл╕д шукати у каталоз╕ /tmp, тому програма шукатиме його там. Створимо необх╕дну структуру каталог╕в, як╕ вимагаються: $ mkdir -p /tmp/uk_UA.KOI8-U/LC_MESSAGESта покладемо туди наш переклад: $ cp test.mo /tmp/uk_UA.KOI8-U/LC_MESSAGES/та перев╕римо роботу програми: $echo $LANG uk_UA.KOI8-U $ ./test Прив╕т, св╕т! Автор-- Volodymyr Lisivka - 16-лис-2002 Дякую за допомогу Тарасу Бойчуку та привидам.Додатков╕ посиланняСтатт╕ на www.kde.org.ua; Англо-укра╖нський словник техн╕чних терм╕н╕в;Якщо я не помиляюся poEdit п╕д Windows. Треба вказати п╕д якими платформами працюють ц╕ програми ╕ дати л╕нки зв╕дки можна скачати. Гарно було б мати короткий опис можливостей цих програм. -- TWiki Guest - 10-гру-2002 Класно було б перерахувати програми, як╕ працюють з ро чи роt файлами. ╤ р╕зноплатформенн╕. -- TWiki Guest - 05-гру-2002 |
|||||||||||||||||||||