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 <EMAIL@ADDRESS>, 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 <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\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.