Search This Blog

2012-01-24

C#: Олон хэлтэй Програм бичих (Multilingual application)

Гарчиг нь сонин болчлоо. Гол утга нь, бичсэн програм маань Англи, Монгол, ... гэм мэтчилэн сонгосон хэл дээр ажилладаг байх юм.

Үүний тулд хэл бүрдээ зориулан resource файл үүсгээд, файл болгондоо харгалзах хэлний орчуулгыг хадгална.
Зурагт үзүүлж байгаачлан resource файлаа сонгоод хэлтэй холбоотой нэр өгч хадгална. Тухайлбал монгол хэлний богино бичиглэл нь mn-MN байх жишээтэй.
Бидний энэ жишээ Монгол, Англи 2 хэл дээр ажиллах програм тул бидэнд 2 resource файл хэрэг болох юм. Иймээс 2 resource файл үүсгээд myRes, myRes.mn-MN гээд хадгалчих.
Доорх зурганд үзүүлснээр 2 файлдаа програмд ашиглагдах орчуулгуудаа хадгална.

myRes.mn-MN.resx  -д монгол орчуулгаа, нөгөөд нь (myRes.resx) англи орчуулгаа хадгалсан байгаа. 2 дахь файл нь default байдлаар ашиглагдах болохоор илүү нэр өгөх хэрэггүй болно.

Одоо хэрхэн resource файлаа шиглан програмаа олон хэлний горимд ажиллуулах талаар авч үзье.

using System.Resources;
using System.Globalization;

Энэ 2 мөр код resource файлаа ашиглахад хэрэгтэй. Иймээс энэ 2 мөрийг заавал програмдаа нэмсэн байх нь зүйтэй.

CultureInfo culture;
ResourceManager rm;
private void Form1_Load(object sender, EventArgs e)
{
    rm = new ResourceManager("multilingual.myRes", typeof(Form1).Assembly);
}
private void radioButton1_CheckedChanged(object sender, EventArgs e)
{
   if (radioButton1.Checked)
        culture = CultureInfo.CreateSpecificCulture("mn-MN");
   else
        culture = CultureInfo.CreateSpecificCulture("");
   try
   {
       label1.Text = rm.GetString("name", culture);
       label2.Text = rm.GetString("pass", culture);
       button1.Text = rm.GetString("login", culture);
       button2.Text = rm.GetString("cancel", culture);
       groupBox1.Text = rm.GetString("language", culture);
    }
    catch (Exception ex) { MessageBox.Show(ex.Message); }
}

rm = new ResourceManager("multilingual.myRes", typeof(Form1).Assembly);
энд ямар resource файл уншихаа зааж өгч байна. 2 файл 2лаа ижил нэртэй байгаа тул энэ мөр код дажгүй ажиллана. Харин mn-MN -н хувьд (culture) тухайн хэл соёлын мэдээлэлтэй холбоотой сонголт хийгдэхэд ашиглана. Энэ талаар доор дурьдсан болно.

if (radioButton1.Checked)
  culture = CultureInfo.CreateSpecificCulture("mn-MN");
else
  culture = CultureInfo.CreateSpecificCulture("");
Энд radioButton1 -г сонговол монгол хэлээр ажиллахаар тохируулсан байна. Бид өмнө үзсэнээр myRes файлыг уншихаар заасан бол энд монгол орчуулгыг уу эсвэл default -г уншихуу гэдгээ зааж өгнө.

label1.Text = rm.GetString("name", culture);
Энэ мөр кодоор сонгогдсон файлаасаа хэрэгцээт мэдээллээ уншина. name хувьсагчийн утгыг буцаана.
Үр дүн нь нэг иймэрхүү.

No comments:

Зурхай