Felhasználói eszközök

Eszközök a webhelyen


oktatas:programozas:csharp:mono:gettext

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

prog.cs
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

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.

oktatas/programozas/csharp/mono/gettext.txt · Utolsó módosítás: 2019/08/21 22:35 szerkesztette: admin