سلام دوستان با استفاده از امکانات دات نت و ویژوال استودیو نوشتن برنامه چند زبانه کار بسیار ساده ای هست. در ادامه روند پیاده سازی رو بصورت خلاصه مرور می کنیم.
ابتدا یک فرم با نام LocalizedForm ایجاد می کنیم که دارای یک Label می باشد که خصوصیت Text آن Full Name هست و یک TextBox و یک Button با نام btnSave که خصوصیت Text آن Save می باشد. مانند فرم زیر:
این فرم را ذخیره و سپس روی فرم کلیک کرده پراپرتی Localizable آن را true کنید. با این کار فرم ما قابلیت چند زبانه بودن را پیدا می کند.
حال دوباره فرم را ذخیره کرده و پراپرتی Language را روی Persian قرار می دهیم (البته در VS 2010 دو مورد Persian وجود دارد که اولی معادل fa و دومی معادل fa-IR می باشد و شما مورد دوم را انتخاب کنید) حالا می توانیم چیدمان و خصوصیات دیگر این فرم را بر اساس نیازمون تغییر بدیم.
فقط یک نکته را باید در نظر داشته باشیم که فرم اولی فرم پیش فرض (Default) و معادل en-US می باشد. ما فقط در این فرم می توانیم کنترلی اضافه و یا کم کنیم.
این تغییرات را اعمال می کنیم:
پراپرتی Text مربوط به label رو برابر "نام و نام خانوادگی" قرار می دهیم.
پراپرتی Text مربوط به btnSave را برابر "ذخیره" مقدار دهی می کنیم.
دوباره فرم را ذخیره می کنیم
اگر دقت کنیم در زیر این فرم فایل Resource با نام LocalizedForm.fa-IR.resx ایجاد شده است که حاوی اطلاعات مربوط به فرم فارسی ما می باشد.
در ادامه فرمی با نام MainForm ایجاد می کنیم که دارای یک کمبو باکس با نام cboLanguage و یک button با نام btnShowForm ایجاد می کنیم مانند فرم زیر:
پشت فرم کدهای زیر را می نویسیم:
public partial class MainForm : Form
{
private const string _Farsi = "Farsi";
private const string _English = "English";
private const string _farsiCulture = "fa-IR";
private const string _englishCulture = "en-US";
private List<string> _supportedLanguages;
public MainForm()
{
InitializeComponent();
Initialize();
}
private void Initialize()
{
_supportedLanguages = new List<string>();
_supportedLanguages.AddRange(new List<string> { _Farsi, _English });
}
private void MainForm_Load(object sender, EventArgs e)
{
cboLanguage.DataSource = _supportedLanguages;
cboLanguage.SelectedIndex = 0;
}
private void btnShowForm_Click(object sender, EventArgs e)
{
string selectedLanguage = cboLanguage.SelectedValue.ToString();
CultureInfo cultureInfo;
if (selectedLanguage == _Farsi)
{
cultureInfo = new CultureInfo(_farsiCulture);
}
else
{
cultureInfo = new CultureInfo(_englishCulture);
}
Thread.CurrentThread.CurrentCulture = cultureInfo;
Thread.CurrentThread.CurrentUICulture = cultureInfo;
new LocalizedForm().ShowDialog();
}
}
کد بالا خوانا هست فقط پشت رویداد کلیک btnSave قبل از نمایش فرم با مقدار دهی به CurrentUICulture مشخص می کنیم که فرم LocalizedForm به چه زبانی نمایش داده شود. یعنی مشخص می کنیم که فرم فارسی نمایش داده شود یا انگلیسی. به همین سادگی!
حالا در ادامه می خواهیم پیغام هایمان را چند زبانه کنیم. برای اینکار روی پروژه کلیک راست کرده و از منوی باز شده Add و سپس New Item ... را انتخاب می کنیم و از پنجره باز شده آیتم Resources File را انتخاب می کنیم و نام آن را Messsage.resx انتخاب می کنیم. این فایل را برای پیام های انگلیسی و یک Resources File دیگر با نام Message.fa-IR.resx ایجاد می کنیم. با دقت داشته باشیم که نام فایل باید یکی باشد و فقط fa-IR. باید به نام آن اضافه شود. حالا به ازای هر پیام در هر فایل یک متن ایجاد می کنیم.
بطور مثال می خواهیم وقتی روی دکمه ذخیره در فرم LocalizedForm کلیک شد پیغام مناسب بدهیم. برای این کار روی Message.resx دابل کلیک کرده و در قسمت Name آن SaveSucceeded و در قسمت Value آن Save Succeeded را تایپ می کنیم و متناظر آن در Message.fa-IR.resx با همین Name یعنی SaveSucceeded یک سطر ایجاد می کنیم و روبری آن و در قسمت Value مقدار "ذخیره با موفقیت انجام شد" را می نویسیم.
و در نهایت در رویداد کلیک دکمه btnSave کد زیر را می نویسیم:
MessageBox.Show(Messages.SaveSucceeded);
کد بالا باعث می شود که در هر Culture ای که باشیم پیغامی که در همان Culture در فایل ریسورس ما موجود است نمایش داده شود.