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↩