Internacionalizace aplikací Závěr Internacionalizace aplikací Tématicky zaměřený vývoj aplikací v jazyce C skupina Systémové programování – Linux Petr Velan Fakulta informatiky Masarykova univerzita velan@ics.muni.cz Brno, 3. prosince 2014 P. Velan 11 – Internacionalizace aplikací 3. 12. 2013, Brno 1 / 15 Internacionalizace aplikací Závěr Internacionalizace aplikací Postupy pro lokalizaci aplikací P. Velan 11 – Internacionalizace aplikací 3. 12. 2013, Brno 2 / 15 Internacionalizace aplikací Závěr Národní prostředí – z pohledu uživatele I Přizpůsobení aplikací národnímu prostředí uživatele bez nunosti rekompilace. man 7 locale Různé kategorie LC_COLLATE – třídění řetězců LC_CTYPE – typy znaků LC_MESSAGES – jazyk zpráv LC_MONETARY – formát měnových řetězců LC_NUMERIC – formát čísel LC_TIME – formát času, názvů měsíců, dnů v týdnu . . . P. Velan 11 – Internacionalizace aplikací 3. 12. 2013, Brno 3 / 15 Internacionalizace aplikací Závěr Národní prostředí – z pohledu uživatele II Proměnné prostředí LANG – implicitní hodnota pro kategorie LC_* – nastavení jednotlivých kategorií LC_ALL – přebíjí vše Formát locales Jazyk – podle ISO 639 (cs, en, . . . ) Země – podle ISO 3316 (CZ, US, GB, . . . ) Znaková sada – ISO8859-2, UTF-8, . . . Příkklady: cs_CZ.ISO8859-2, en_US.UTF-8 P. Velan 11 – Internacionalizace aplikací 3. 12. 2013, Brno 4 / 15 Internacionalizace aplikací Závěr Změna národního prostředí v aplikaci #include char *setlocale(int category, const char *locale); Aplikace by při startu měla zavolat: setlocale(LC_ALL, ""); Výchozí hodnota po spuštění aplikace je "C" nebo "POSIX" P. Velan 11 – Internacionalizace aplikací 3. 12. 2013, Brno 5 / 15 Internacionalizace aplikací Závěr Internacionalizace aplikací Internacionalizace – program komunikuje v jazyce, který si uživatel zvolí Lokalizace – program se chová (požaduje vstup, produkuje výstup, . . . ) podle lokálních zvyklostí P. Velan 11 – Internacionalizace aplikací 3. 12. 2013, Brno 6 / 15 Internacionalizace aplikací Závěr Internacionalizace aplikací Internacionalizace – program komunikuje v jazyce, který si uživatel zvolí Lokalizace – program se chová (požaduje vstup, produkuje výstup, . . . ) podle lokálních zvyklostí PO (Portable Object) – soubor identifikátorů řetězců spolu s jejich překladem do konkrétního jazyka MO (Machine Object) – binární obdoba PO souborů určená pro použití aplikacemi P. Velan 11 – Internacionalizace aplikací 3. 12. 2013, Brno 6 / 15 Internacionalizace aplikací Závěr PO soubor – ukázka # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE’S COPYRIGHT HOLDER # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-12-12 18:08+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" #: hello.c:14 #, c-format msgid "Hello world\n" msgstr "" P. Velan 11 – Internacionalizace aplikací 3. 12. 2013, Brno 7 / 15 Internacionalizace aplikací Závěr GNU gettext() #include char * gettext (const char * msgid); char * dgettext (const char * domainname, const char * msgid); char * dcgettext (const char * domainname, const char * msgid, int category); char * bindtextdomain (const char * domainname, const char * dirname); char * textdomain (const char * domainname); S minimálními zásahy do kódu umožňuje internacionalizaci aplikací. Umožňuje rozdělit práci mezi programátora a překladatele. P. Velan 11 – Internacionalizace aplikací 3. 12. 2013, Brno 8 / 15 Internacionalizace aplikací Závěr Internacionalizace – použití I 1 Napsat aplikaci s využitím gettext() #define _(STRING) gettext(STRING) 2 Správně nastavit locale a doménu setlocale(LC_ALL, ""); bindtextdomain("prg", "./locale"); textdomain("prg"); 3 Vytvoření generického PO souboru xgettext -d prg --keyword=_ prg.c 4 Vyrobení PO souboru s překladem pro konkrétní jazyk msginit -l cs_CZ.utf8 -i prg.po 5 Vygenerování MO souboru msgfmt -c -o prg.mo cs.po 6 Umístění souboru na správné místo (instalace) P. Velan 11 – Internacionalizace aplikací 3. 12. 2013, Brno 9 / 15 Internacionalizace aplikací Závěr úkol Napište Hello, world! program. Výchozí jazyk aplikace je angličtina. Připravte lokalizaci do češtiny. P. Velan 11 – Internacionalizace aplikací 3. 12. 2013, Brno 10 / 15 Internacionalizace aplikací Závěr Množná čísla #include char * ngettext (const char * msgid, const char * msgid_plural, unsigned long int n); char * dngettext (const char * domainname, const char * msgid, const char * msgid_plural, unsigned long int n); char * dcngettext (const char * domainname, const char * msgid, const char * msgid_plural, unsigned long int n, int category); Různé jazyky mají i několik forem pro množné číslo. P. Velan 11 – Internacionalizace aplikací 3. 12. 2013, Brno 11 / 15 Internacionalizace aplikací Závěr úkol Místo Hello, world! informujte uživatele, že právě odstranil N souborů. N se zadává při spuštění aplikace jako parametr. P. Velan 11 – Internacionalizace aplikací 3. 12. 2013, Brno 12 / 15 Internacionalizace aplikací Závěr Závěr shrnutí, domácí úkoly a zdroje P. Velan 11 – Internacionalizace aplikací 3. 12. 2013, Brno 13 / 15 Internacionalizace aplikací Závěr Domácí úkol Dokončete úlohy ze cvičení. P. Velan 11 – Internacionalizace aplikací 3. 12. 2013, Brno 14 / 15 Internacionalizace aplikací Závěr Zdroje lokalizace a internacionalizace www.gnu.org/software/gettext/manual/gettext.html www.tuxamito.com/joomla/index.php/en/component/content/article/60- gettext-tutorial P. Velan 11 – Internacionalizace aplikací 3. 12. 2013, Brno 15 / 15