محلی سازی در WPF
محلی سازی (Localization) به معنای ترجمه منابع برنامه به یک نسخه محلی برای یک زبان و فرهنگ خاص است. هر چقدر که تعداد زبان های پشتیبانی شده نرمافزار شما بیشتر باشد، تعداد مشتری ها و استفاده کنندگان آن نیز بیشتر خواهد بود. در WPF محلی سازی بسیار راحت و ساده است.
مثال
در این مثال برنامه ما از زبان های انگلیسی و روسی پشتیبانی خواهد کرد. یک پروژه جدید با نام WPFLocalization ایجاد کرده و آن را مانند نمونه زیر تغییر دهید. پوشه Properties موجود در Solution Explorer را باز کرده و فایل Resources.resx را باز کنید.
سپس نوع دسترسی آن را به Public تغییر دهید تا در کد XAML هم قابل دسترس باشد:
حال مانند تصویر زیر چند مورد را به آن اضافه کنید:
از فایل Resources.resx دو کپی گرفته و نام یکی را Resources.en.resx و دیگری را Resources.ru-RU.resx قرار دهید. فایل Resources.resx منبع پیشفرض است و اگر هیچ منبع خاصی مشخص نشود، از آن استفاده خواهد شد. این نام گذاری بر اساس قوانین نامگذاری است که کشور و منطقه را مشخص می کند. برای اطلاعات بیشتر به لینک زیر مراجعه کنید.
National Language Support (NLS) API Reference
مقادیر فایل Resources.ru.RU.resx را مانند نمونه زیر به روسی تغییر دهید:
حال محتوای فایل MainWindow.xaml را به شکل زیر تغییر دهید:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | <Window x:Class = "WPFLocalization.MainWindow" xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local = "clr-namespace:WPFLocalization" xmlns:p = "clr-namespace:WPFLocalization.Properties" Title = "{x:Static p:Resources.Title}" Height = "350" Width = "604"> <Grid> <TextBox x:Name = "textBox" HorizontalAlignment = "Left" Height = "23" Margin = "128,45,0,0" TextWrapping = "Wrap" VerticalAlignment = "Top" Width = "304"/> <Label x:Name = "label" Content = "{x:Static p:Resources.Name}" HorizontalAlignment = "Left" Margin = "52,45,0,0" VerticalAlignment = "Top" Width = "86"/> <TextBox x:Name = "textBox1" HorizontalAlignment = "Left" Height = "23" Margin = "128,102,0,0" TextWrapping = "Wrap" VerticalAlignment = "Top" Width = "304"/> <Label x:Name = "label1" Content = "{x:Static p:Resources.Address}" HorizontalAlignment = "Left" Margin = "52,102,0,0" VerticalAlignment = "Top" Width = "86"/> <TextBox x:Name = "textBox2" HorizontalAlignment = "Left" Height = "23" Margin = "128,157,0,0" TextWrapping = "Wrap" VerticalAlignment = "Top" Width = "80"/> <Label x:Name = "label2" Content = "{x:Static p:Resources.Age}" HorizontalAlignment = "Left" Margin = "52,157,0,0" VerticalAlignment = "Top" Width = "86"/> <Button x:Name = "button" Content = "{x:Static p:Resources.OK_Button}" HorizontalAlignment = "Left" Margin = "163,241,0,0" VerticalAlignment = "Top" Width = "75"/> <Button x:Name = "button1" Content = "{x:Static p:Resources.Cancel_Button}" HorizontalAlignment = "Left" Margin = "282,241,0,0" VerticalAlignment = "Top" Width = "75"/> <Button x:Name = "button2" Content = "{x:Static p:Resources.Help_Button}" HorizontalAlignment = "Left" Margin = "392,241,0,0" VerticalAlignment = "Top" Width = "75"/> </Grid> </Window> |
بخش های جدید در کد فوق:
- فضای نام مربوط به منابع که در پوشه Properties قرار دارند:
1 | xmlns:p = "clr-namespace:WPFLocalization.Properties" |
- استفاده از مقدار تعریف شده در منابع به جای نوشتن آن ها به صورت hard-coded:
1 | Title = "{x:Static p:Resources.Title}" |
زمانی که مثال فوق را کامپایل و اجرا کنید، خروجی زیر را تولید خواهد کرد:
از آن جایی که مشخص نکردیم از کدام منبع باید استفاده شود، منبع پیشفرض (Resources.resx) استفاده شده است. اگر بخواهیم از منبع روسی استفاده کنیم، باید در فایل App.xaml.cs آن Culture مربوط به برنامه را تنظیم کنیم:
1 2 3 4 5 6 7 8 9 10 | public partial class App : Application { protected override void OnStartup(StartupEventArgs e) { base.OnStartup(e); System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("ru-RU"); //System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("en"); } } } |
حال اگر برنامه را اجرا کنید، خروجی زیر را مشاهده خواهید کرد:
باور کنید بهترین سایت در زمینه آموزش wpf هست ان شاءالله بیشتر موفق بشید.