2017/01/27 08:59
1/6
Gettext Rendszer
< Linux
Gettext Rendszer A gettext rendszer a programok nemzetközivé tételét valósítják meg. A programozónak a programot egy nyelven kell megírnia, a gettext rendszer segítségével, pedig bármilyen nyelven megszólal. Például angol nyelven megírom a programot, majd lefordítom magyarra. Az Interneten közzé teszem. A program képernyőre írt angol szövegét kigyűjtve kapja meg egy harmadik nyelven beszélő ember. Lefordítja saját nyelvére. Így a program már három nyelvű lesz.
Fogalmak POT – Portable Object Template. Ez fájl tartalmazza azokat a karaktersorozatokat – sztringeket –, amelyeket egy alkalmazásból kapunk. Ezt adjuk át a fordítónak. PO – Portable Object. Ezt a fájlt adj nekünk a fordító. Ez egy szöveges fájl, amelyben benne van az eredeti (például angol) és az adott nyelvere lefordított szöveg. MO – Machine Object. A mo fájl tartalma megegyezik a pofájl tartalmával. A különbség csak a formátum. A pofájl az szöveges fájl, amelyet egy ember kényelmesen el tud olvasni, a mofájl viszont bináris fájl, a számítógépek részére készült. Az alkalmazásunk ebből a fájlból veszi a fordításokat.
Segítség info gettext man 3 gettext
Működés A programozás során szöveget jelenítünk meg a képernyőn (pl. C nyelvben): printf("alma"); A gettext rendszerhasználatához importálom a libintl.h fejállományokat. A szöveg kiiratását ez után a gettext függvénnyel hívom: #include
main() { printf(gettext("alma")); } Ez után készítenem kell egy .pot kiterjesztésű fájlt, amely tartalmazza a lefordítandó szöveget. Ennek szabványos formátuma van. SzitWiki - http://szit.hu/
Last update: 2015/06/28 11:36
oktatas:linux:gettext_rendszer http://szit.hu/doku.php?id=oktatas:linux:gettext_rendszer
msgid "" msgstr "" "Project-Id-Version: tesztprojekt\n" "POT-Creation-Date: \n" "PO-Revision-Date: \n" "Last-Translator: Sallai András \n" "Language-Team: fercsapat \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Poedit-Language: Hungarian\n" "X-Poedit-Country: HUNGARY\n" "X-Poedit-SourceCharset: utf-8\n" Elkészítéséhez érdemes segédprogramot használni. A fordítók (azok az emberek akik saját nyelvükre akarják megtanítani a programot) a pot fájt lemásolják .po kiterjesztéssel. Kitöltik a fejlécet, lefordítják a kifejezéseket a .po fájlban. Ez után egy .mo kiterjesztésű fájlt kell készíteni az msgfmt paranccsal. A programozó által megadott könyvtárban elhelyezzük a .mo fájlt és a program tud saját nyelvünkön.
Eszközök xgettext A programozó forrás állományaiból kiszedi a fordítandó szöveget. xgettext -f fajlok.txt -p po -o main.pot -L C -k_ -f fajlok.txt fajlok.txt állomány tartalmazza a forrásállományok neveit. -p po Megadhatjuk a pot fájl milyen könyvtárban jöjjön létre -o main.pot A kimeneti .pot fájl neve -L C A forrás állományok C nyelven írodtak -k_ A C programban ha egy szöveget le akarok fordítani, a gettext() függvénnyel kell közrefogni. Ezt szokás egy ilyen makróval helyetesíteni: _(). Ennek a makrónak a használata esetén meg kell adni a ezt a kulcsot ily módon.
msgcat Több .po fájl összefűzésére való
http://szit.hu/
Printed on 2017/01/27 08:59
2017/01/27 08:59
3/6
Gettext Rendszer
msgfmt A .po fájlokból .mo fájlokat készít. A programok a .mo fájlokat értik meg.
Egyéb msgcat msgcmp msgcomm msgconv msgen msgexec msgfilter msgfmt msggrep msginit msgmerge msgunfmt msguniq Lásd: info gettext!
Munka Grafikus felületen Telepítsük a poedit nevű programot: apt-get install poedit Van win32 verziója is ha valaki ott szeretné használni. http://www.poedit.net A poedit nevű grafikus program lehetővé teszi a po fájlok gyors frissítési lehetőségét .pot fájlokból, gyors és hatékony fordítást tesz lehetővé, a mentés során a .mo kiterjesztésű állományt is elkészíti.
Példa Egy példa program amely két szót ír a képernyőre alapesetben angolul: Input Output Azt szeretnénk, ha magyarul írná ki a Bemenet és Kimenet szavakat.
SzitWiki - http://szit.hu/
Last update: 2015/06/28 11:36
oktatas:linux:gettext_rendszer http://szit.hu/doku.php?id=oktatas:linux:gettext_rendszer
Forrás állomány elkészítése main.c állomány #include #include #include #include
<stdio.h> <stdio.h>
main() { setlocale(LC_ALL, ""); bindtextdomain("main", "locale"); textdomain("main"); printf(gettext("Input\n")); printf(gettext("Output\n")); }
Pot fájl elkészítése xgettext -o main.pot -L C main.c main.pot # 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" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-06-10 20:10+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" #: main.c:7 #, c-format msgid "Input\n" msgstr "" #: main.c:8 #, c-format http://szit.hu/
Printed on 2017/01/27 08:59
2017/01/27 08:59
5/6
msgid "OUtput\n" msgstr ""
Po fájl elkészítése cp main.pot main.po Lefordítjuk a main.po angol szövegét magyarra. main.po msgid "" msgstr "" "Project-Id-Version: programom\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-06-10 20:10+0200\n" "PO-Revision-Date: \n" "Last-Translator: Sallai András \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Poedit-Language: Hungarian\n" "X-Poedit-Country: HUNGARY\n" "X-Poedit-SourceCharset: utf-8\n" #: main.c:7 #, c-format msgid "Input\n" msgstr "Bemenet\n" #: main.c:8 #, c-format msgid "OUtput\n" msgstr "Kimenet\n"
Mo fájl elkészítése Lefordítjuk a po fájlt: msgfmt main.po -o main.mo A .mo fájlt a helyére tesszük: mkdir -p locale/hu/LC_MESSAGES mo main.mo locale/hu/LCMESSAGES/main.mo
SzitWiki - http://szit.hu/
Gettext Rendszer
Last update: 2015/06/28 11:36
oktatas:linux:gettext_rendszer http://szit.hu/doku.php?id=oktatas:linux:gettext_rendszer
Egyszerűsítés A gettext rövidítve szoktuk írni. Ehhez egy makrót kell definiálni. #define _(string) (char *) gettext(string) Ezen makró definiálása után nem kell kiírnunk a függvény teljes nevét, elég ha egy alulvonással hivatkozunk rá. Ezek után a main.c állomány így nézhet ki: main.c állomány #include #include #include #include
<stdio.h> <stdio.h>
#define _(string) (char *) gettext(string) main() { setlocale(LC_ALL, ""); bindtextdomain("main", "locale"); textdomain("main"); printf(_("Input\n")); printf(_("Output\n")); } Ekkor a xgettext parancsnak még egy kapcsolót meg kell adnunk amely megmondja milyen helyettesítő karaktert vagy karaktersorozatot használunk: -k_ A kapcsoló kis k betű ami után rögtön írhatjuk az alulvonás jelet. A teljes parancs így nézhet ki ekkor: xgettext -o main.pot -L C -k_ main.c A továbbiakban ugyanúgy járunk el mint fentebb.
From: http://szit.hu/ - SzitWiki Permanent link: http://szit.hu/doku.php?id=oktatas:linux:gettext_rendszer Last update: 2015/06/28 11:36
http://szit.hu/
Printed on 2017/01/27 08:59