Egy modern alkalmazás esetén valós igény, hogy több nyelven használható legyen. Szerencsére ennek a technikai megvalósítását sem kell újra és újra feltalálnunk, mert a .NET beépítetten rendelkezik több nyelv támogatással az alkalmazások számára.
A fordítások úgynevezett resource (erőforrás) fájlokban tárolódnak. Egy resource fájl rengeteg információt tartalmazhat, mint például szövegeket, képkeket és komplett fájlokat is. Az alkalmazásunk fő resource fájlja a futtatható exe fájlba fordul, így extra fájlokat nem kell mellé másolni, hogy működőképes maradjon.
Az alkalmazásunkhoz resource fájlt hasonló módon rendelünk hozzá, mint beállítást, csak a Properties ablakban a Resources fülre kell kattintanunk.
Ha még nem tartalmazna az alkalmazásunk ilyen fájlt, akkor egy üzenet fogad bennünket. Itt is az üzenetre kattintva létrejön a szerkesztő.
A szerkesztő hasonlít a beállítás szerkesztőhöz. Itt is a name oszlop a nevet azonosítja be. Ez lesz a fordítandó szövegünk neve, amire majd hivatkozunk a kódból. Ezért a névre itt is a változók elnevezésére vonatkozó szabályok érvényesek.
A value oszlop a szöveg értékét tartalmazza. Ez lesz a kódból elérhető tulajdonság értéke.
A comment oszlop kitöltése opcionális, azonban ajánlott némi leírással kitölteni, hogy az adott szöveg hol is van használva.
Ez alapvetően nem nekünk segítség, hanem annak, aki fordítja majd az alkalmazást másik nyelvre, mert előfordulhat, hogy az adott szöveget kontextustól függően teljesen másként kell fordítani.
Kódból az elkészült szövegre való hivatkozáshoz szintén a Properties névtéren keresztül vezet az út. A Resources statikus osztályban tulajdonságként jelennek meg. A tulajdonságok nevei a resource name oszlopában megadottak lesznek.
Fordítások
Eddig egy nyelven elkészült az alkalmazásunk. A következő lépés, hogy másik nyelven is elérhető legyen. Ennek legegyszerűbb módszere, ha a Properties alatt található Resources.resx fájlról készítünk egy másolatot, majd a programunkhoz adjuk a másolatot. A másolatot speciális névvel kell ellátnunk, amiből a keretrendszer be tudja azonosítani a fordítást. A speciális névnek a következő formátumot kell felvennie: Resources.[nyelv].resx A nyelv résznek az IETF language tag1 sémát kell követnie. Ez két részből épül fel. Az első két betűje a nyelvet azonosítja, míg a második két nagybetű az országot.
Magyarország nyelvi kódja ez alapján: hu-HU. Amerikai angol esetén: en-US, míg brit angol esetén: en-GB.
Az új nyelv esetén is meg kell adnunk a fordításainkat. Ezután igazából semmi dolgunk nincs úgymond, mert a Windows területi és nyelvi beállításai alapján a keretrendszer a megfelelő fordítással fogja kiírni a szövegeket.
Ha felül szeretnénk bírálni az aktuális nyelvi beállítást, akkor a Thread osztály statikus CurrentThread tulajdonsága beazonosítja a jelenleg futó szálat. Ennek van két tulajdonsága. A CurrentCulture és a CurrentUICulture. Ha ezeket felülírjuk egyéni CultureInfoval, akkor a programunk más nyelven fog megjelenni.
Erre egy példa:
using System;
using System.Globalization;
using System.Threading;
namespace PeldaNyelvek
{
class Program
{
static void Main(string[] args)
{
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US");
Console.WriteLine(Properties.Resources.HelloWorld);
Thread.CurrentThread.CurrentCulture = new CultureInfo("hu-HU");
Thread.CurrentThread.CurrentUICulture = new CultureInfo("hu-HU");
Console.WriteLine(Properties.Resources.HelloWorld);
Console.ReadKey();
}
}
}
A program kimenete:
Hello World!
Helló Világ!
A CurrentCulture értéke az operációs rendszer nyelvét takarja, míg a CurrentUICulture a területi és nyelvi beállításokban meghatározott nyelvet adja vissza.
-
Bővebb információk: https://tools.ietf.org/html/rfc5646 és https://tools.ietf.org/html/rfc4647↩