[[: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.