[[:oktatas:programozás:csharp:mono|< Mono]] ====== Gettext ====== ===== Nemzetköziesítés ===== A programunk nagyon fontos, hogy több nyelvű legyen, így több országból használhatják. A legszerencsésebb angol nyelven írni és nemeztköziesítés után magyarra lefordítani. Az angol nyelvű programot az után bármely ország nyelvére le tudják fordítani, akik tudnak angolul. A programok lefordításához a következő kapcsolót fogjuk használni: -r:Mono.Posix Nézzünk egy programot szimplán nemzetköziesítés nélkül: using System; public class program { public static void Main(string[] argv) { string nev = "András" Console.WriteLine("A nevem {0}", nev); int i = 30; Console.WriteLine("Az életkorom {0} év.", i); } } Nemzetköziesített program program.cs using System; using Mono.Unix; public class program { public static void Main(string[] argv) { Catalog.Init("i18n","./locale"); string nev = "Andrew"; Console.WriteLine(Catalog.GetString("My name is {0}"), nev); int i = 30; Console.WriteLine(Catalog.GetString("I'm {0} years old."), i); } } Fordítás: gmcs -r Mono.Posix program.cs Futtatás eredménye: A nevem András Az életkorom 30 év. Kinyerjük a forráskódból a fordítandó karaktersorozatokat: xgettext --from-code=UTF-8 program.cs -o program.pot A program.pot fájl tartalma: # 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 , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2011-01-18 14:30+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: i18n.cs:10 #, csharp-format msgid "My name is {0}" msgstr "" #: i18n.cs:12 #, csharp-format msgid "I'm {0} years old" msgstr "" A magyarra fordításhoz készítsünk egy másolatot ebből a fájlból hu.po néven: cp program.pot hu.po A továbbiakban a hu.po fájlban dolgozunk. Beállítjuk a karakterkódolást "Content-Type: text/plain; charset=UTF-8\n" Az alábbi módon magyarítjuk: #: i18n.cs:10 #, csharp-format msgid "My name is {0}" msgstr "A nevem {0}" #: i18n.cs:12 #, csharp-format msgid "I'm {0} years old" msgstr "Korom {0} év" Elkészítjük a fordítás helyét: mkdir -p locale/hu/LC_MESSAGES/ A fenti helyre egy .mo kiterjesztésű fájl fog kerülni. A program forrásában adtuk, meg mi lesz ennek a neve és helye. Csak emlékeztetőül: Catalog.Init("i18n","./locale"); Az első paraméter jelneti a .mo fájl nevét. A fájl neve tehát i18n.mo lesz. Ezt általában úgy állítjuk be, hogy futtatható fájl nevével megegyezzen. A második paraméter a hely útvonala: ./locale Ha készen van a könyvtár akkor a lefordítjuk a hu.po fordítást, amit egyből a helyére teszünk: msgfmt hu.po -o locale/hu/LC_MESSAGES/i18n.mo Ezek után készen vagyunk ha a környezet magyar. Magyar környezet esetén a program már magyarul fog hozzánk szólni. A környezet magyar nyelvi beállításáról így győződhetünk meg: echo $LANG A kimenetben ezt kell látnunk: hu_HU.UTF-8 A fentieket Linuxos rendszeren végeztem el.