Программирование


Локализация и Глобализация WPF приложений

Ссылки которые непосредственно касаются темы локализации и глобализации WPF приложений, но думаю, что всё это читать не обязательно. Будем пользоваться методом описанным в последней статье, поэтому если что-то не получиться или будет не понятно, то ее, конечно стоит прочитать. И, так как библиотека обновляется личше скачивать проект прямо со страницы автора и забирать .dll
http://www.codeproject.com/KB/WPF/WPFUsingLocbaml.aspx
http://www.codeproject.com/KB/WPF/Localization_in_WPF.aspx
http://www.codeproject.com/KB/WPF/WPFLocalize.aspx
http://www.codeproject.com/KB/WPF/WPF-Mulit-Lingual.aspx
http://wpflocalization.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=29389
http://bobbbloggg.blogspot.com/2008/02/xaml-localization.html
http://blogs.microsoft.co.il/blogs/tomershamam/archive/2007/10/30/wpf-localization-on-the-fly-language-selection.aspx
http://www.codeplex.com/WPFLocalizeExtension
http://www.codeproject.com/KB/WPF/WPF_Resx_Localization.aspx - мой выбор

Скачиваем проект со страницы. От туда нам понадобиться библиотека Infralution.Localization.Wpf. Прописываем ее в uses и References, еще понадобиться System.Threading, System.Globalization; Пишем в XAML простейший код меню.

  1.   <Grid>
  2.     <Menu Height="30" VerticalAlignment="Top">
  3.       <MenuItem Header="{Resx ResxName=WPFLoc.MainResources, Key=strLanguage}">
  4.         <MenuItem Header="{Resx ResxName=WPFLoc.MainResources, Key=strEnglish}" Name="EnglishMenuItem" Click="_EnglishMenuItem_Click" IsCheckable="True"></MenuItem>
  5.         <MenuItem Header="{Resx ResxName=WPFLoc.MainResources, Key=strRussia}" Name="RussiaMenuItem" Click="_RussiaMenuItem_Click" ></MenuItem>
  6.       </MenuItem>
  7.     </Menu>
  8.   </Grid>
* This source code was highlighted with Source Code Highlighter.

Где WPFLoc пространство имен нашего приложения. MainResources - файл ресурсов, который нам надо создать и поместить в корневую папку. В файле ресурсов создаем переменные:

Для русской локализации создаем файл MainResources.ru-RU.resx и тоже размещаем в корне.

Код почти полностью позаимствуем от создателя библиотеки.

  1. namespace WPFLoc
  2. {
  3.   /// <summary>
  4.   /// Interaction logic for MainWindow.xaml
  5.   /// </summary>
  6.   public partial class MainWindow : Window
  7.   {
  8.     public MainWindow()
  9.     {
  10.       InitializeComponent();
  11.       // set the initial application UI Culture based on the users
  12.       // current regional settings
  13.       //
  14.       CultureManager.UICulture = Thread.CurrentThread.CurrentCulture;
  15.       CultureManager.UICultureChanged += new EventHandler(CultureManager_UICultureChanged);
  16.       UpdateLanguageMenus();
  17.     }
  18.  
  19.  
  20.     /// <summary>
  21.     /// Update the check state of the Language menu
  22.     /// </summary>
  23.     private void UpdateLanguageMenus()
  24.     {
  25.       string lang = CultureManager.UICulture.TwoLetterISOLanguageName.ToLower();
  26.       RussiaMenuItem.IsChecked = (lang == "ru");
  27.       EnglishMenuItem.IsChecked = (lang == "en");
  28.     }
  29.  
  30.     /// <summary>
  31.     /// Update the language menus when the UI culture changes
  32.     /// </summary>
  33.     /// <param name="sender"></param>
  34.     /// <param name="e"></param>
  35.     private void CultureManager_UICultureChanged(object sender, EventArgs e)
  36.     {
  37.       UpdateLanguageMenus();
  38.     }
  39.  
  40.     /// <summary>
  41.     /// Select English as the User Interface language
  42.     /// </summary>
  43.     /// <param name="sender"></param>
  44.     /// <param name="e"></param>
  45.     private void _EnglishMenuItem_Click(object sender, RoutedEventArgs e)
  46.     {
  47.       CultureManager.UICulture = new CultureInfo("en");
  48.     }
  49.  
  50.     /// <summary>
  51.     /// Select Russia as the User Interface language
  52.     /// </summary>
  53.     /// <param name="sender"></param>
  54.     /// <param name="e"></param>
  55.     private void _RussiaMenuItem_Click(object sender, RoutedEventArgs e)
  56.     {
  57.       CultureManager.UICulture = new CultureInfo("ru-RU");
  58.     }
  59.   }
  60. }
* This source code was highlighted with Source Code Highlighter.

Проект можно скачать в формате VS2010 Beta 2 с сервиса народ.

 


Главная | С# | WPF | Silverlight | Покер | Фотография | Разное
© Андрей Семёнов, 2009-2010
Hosted by uCoz