Локализация WPF страниц
Сегодня существует много способов локализации WPF проектов в основном основанных на биндинге.В этом подходе есть свои плюсы и минусы. Меня не устраивает в этом подходе это огромное количество биндингов в xaml разметке, дополнительная задержка при загрузке страницы. Так же дополнительное время для поиска строки в исходном коде т.е. когда я вижу строку в запущенной программе, сначала я должен найти эту строчку в resx ресурсах, а после только xaml содержащий этот ключ.Недавно мы подключили Elas для локализации нашего проекта. Elas вытаскивает из xaml разметки все значения атрибутов элемента помеченного x: Uid и помещает их в xlf файл для последующего перевода. Расскажу на простом примере как это делается.Windows 8, Visual Studio 2013
И так создадим новый WPF проект.
И несколько элементов на главном окне.
MainWindow.xaml
Обратите внимание в солюшене появился новый файл ».elas\ElasConfiguration.props»
Это конфигурационный файл Elas где вы можете задать языки на которые желаете получить перевод.
Далее запускаем билд.
И после билда у нас теперь есть xliff файл для «MainWindow.xaml»:
Но он не имеет ни одного trans-unit поскольку мы не задали ни одного x: Uid для элементов.
Добавим x: Uid для каждого элемента.
MainWindow.xaml
Снова билд. И теперь мы можем приступить к локализации.
Перед локализацией Если вы собираетесь работать с «MainWindow.xaml.xlf» файлом самостоятельно в Visual Studio, то для этого будет удобнее добавить xml схему «xliff-core-1.2-transitional.xsd» в Visual Studio. Этот файл можно найти в »%SolutionDir%\packages\DevUtils.Elas.Core.X.X. X\schemas\xliff-core-1.2-transitional.xsd» и добавить его в Visual Studio. Рассмотрим файл «MainWindow.xaml.xlf».
Этот файл содержит ключи (1) (x: Uid) и исходное значение (2) которое необходимо перевести. Перевод добавляется в элемент target и значение state меняется на «translated». Элементы для которых вы не желаете делать перевод установите translate в «no» и state в «final»
Вот что получилось у меня.
MainWindow.xaml.xlf
Далее переключаем локаль на русский в Windows или в программе (Я добавил в конструктор класса «App»
CultureInfo.DefaultThreadCurrentUICulture = new CultureInfo («ru-RU»); ).И получаем локализованное приложение на русский.
P.S. В следующий раз я расскажу, как с помощью Elas локализовать C++ (Windows resources) приложения.