Gettext
gettext — бібліятэка праекта GNU для інтэрнацыяналізацыі, якая шырока ўжываецца ў свабодным ПЗ. Апісанне![]() Асноўным адрозненнем ад іншых падобных інструментаў з’яўляецца тое, што ў gettext для пазначэння перакладаных радкоў у тэксце праграмы ўжываюцца іх англійскія арыгіналы, а не адмысловыя ідэнтыфікатары. Такім чынам, для адлюстравання інтэрфейсу на англійскай мове праграме не патрэбныя файлы перакладу. Гэта, як правіла, зручна, таму што большасць праграм і так маюць інтэрфейс на англійскай мове. У gettext ёсць падтрымка множнага ліку. Для гэтага ў зыходным кодзе праграмы ўжываецца адмысловая функцыя, і прыкладаюцца два радкі — у адзіночным і множным ліку. Пры падстаноўцы перакладу на іншую мову ўжываецца столькі форм радкоў-перакладаў, колькі патрэбна для гэтай мовы. Для гэтага ў загалоўку файла перакладу мае быць спецыфічны для гэтай мовы выраз для выбару праз лік нумара радка-перакладу. Бібліятэка gettext прапануе захоўваць пераклады ў файлах з пашырэннямі .mo (англ.: Machine Object, бінарны файл, зручны для чытання праграмай і спецыфічны для платформы), ці .gmo (GNU .mo), .po (англ.: Portable Object, чытэльны для чалавека файл перакладу, не залежны ад платформы) і .pot (англ.: PO template — каталог, загатоўка .po-файла для перакладу на новую мову).[3] Акрамя саміх радкоў перакладу, .po-файлы могуць змяшчаць каментарыі перакладчыка і разнастайныя службовыя нататкі. Для фарміравання і абнаўлення гэтых файлаў пры змяненні праграмы прапануецца ўжываць шэраг утыліт. Першапачаткова радкі з зыходнага тэксту праграмы збіраюцца з дапамогай праграмы Для перакладу праграмы на пэўную мову перакладчык стварае .po-файл: капіруе .pot-файл у патрэбнае месца і змяняе ў ім загаловак. Для гэтага можна выкарыстоўваць праграму Таксама існуюць утыліты для перакладчыкаў, якія палягчаюць рэдагаванне перакладу, напрыклад:
Акрамя базавай рэалізацыі gettext для стандартнай C, існуюць рэалізацыі аналагічнага падыходу для моў C++, Objective-C, сцэнарыі sh/bash, Python, Perl, PHP, GNU CLISP, Emacs Lisp, librep, GNU Smalltalk, Java, GNU awk, Паскаль, wxWidgets (з ужываннем класу wxLocale), YCP (мова YaST2), Tcl, Pike и R, моў платформы Mono (прастора імёнаў Mono.Unix), а таксама для фрэймворку Qt. Некаторыя з гэтых моў непасрэдна падтрымліваюцца вышэйзгаданымі ўтылітамі.[3]. Ужыванне ў большасці моў праграмавання падобна да ўжывання у C. УжываннеДля праграмістаПростыя радкіРадкі, якія пры рабоце праграмы паказваюцца карыстальніку і адпаведна патрабуюць перакладу, у зыходным кодзе праграмы пішуцца па-англійску і пазначаюцца выклікам функцыі printf(gettext("Hello! My name is %s.\n"), name); Звычайна для памяншэння памеру зыходнага кода і паляпшэння чытэльнасці аб’яўляюць і ўжываюць кароткі сінонім функцыі printf(_("Hello! My name is %s.\n"), name); Для вышэйзгаданага радка ў каталогу з’явіцца запіс накшталт такога: #: src/name.c:36 msgid "Hello! My name is %s.\n" msgstr "" Множны лікДля перакладу множнага ліку ўжываецца функцыя printf(ngettext("%d day ago", "%d days ago", $daysAgo), $daysAgo);
Функцыя Для перакладчыкаПростыя радкіПеракладчык дадае адпаведныя радкі з перакладам у .po-файл: #: src/name.c:36 msgid "Hello! My name is %s.\n" msgstr "Вітаю! Маё імя %s.\n" Множны лікДля перакладу множных лікаў патрэбна, каб у загалоўку (там, дзе пазначаюцца такія звесткі, як
Выбар адной з гэтых трох форм у залежнасці ад ліку ажыццяўляецца наступнай формулай[4]: "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" Выраз для Пасля такога аб’яўлення формы набываюць нумары 0, 1 і 2, і пераклад фразы ажыццяўляецца наступным чынам: msgid "%d day ago" msgid_plural "%d days ago" msgstr[0] "%d дзень таму" msgstr[1] "%d дні таму" msgstr[2] "%d дзён таму" Для карыстальнікаЗвычайна карыстальніку ў UNIX-падобных аперацыйных сістэмах не патрэбна прадпрымаць дадатковых дзеянняў для выбару пэўнага перакладу. Пераклад вызначаецца сістэмнай пераменнай Гл. таксамаЗноскі
Спасылкі
|