Что было бы хорошим aploach для локализации MVP на основе MVV-алликации, которая может изменить язык во время выполнения? Конечно, я могу создать свойство string в ViewModel для каждой строки, которая отображается где-то в представлении, но мне кажется, что это довольно утомительно. Есть ли общий подход/передовая практика для этого?Локализация приложений WPF на основе MVVM
ответ
WPF has a lot of support for localization. Возможно, вы можете использовать это? К сожалению, я думаю, что изменение языка интерфейса пользователя во время выполнения несколько сложно, и вам, вероятно, придется придумать свою собственную схему.
Кроме того, поскольку модель представления является агностиком UI, я не думаю, что сохранение строк пользовательского интерфейса в представлении-модели является хорошим решением. Они относятся к мнению.
Вместо строки пользовательского интерфейса в вашей модели представления, вы можете хранить их в ресурсы Ассамблеи и доступ к ним непосредственно из XAML, используя x:Static
:
<TextBlock Text="{x:Static props:Resources.MyLabel}"/>
props
пространства имен следует обратиться к Properties
имен вашей сборки :
xmlns:props="clr-namespace:My.Assembly.Properties"
Просто убедитесь, что ваш доступ к ресурсам изменен, является общедоступным, а не внутренним. – midspace
Вот несколько статей, которые могут быть интересны:
Вот excellent article about WPF localization. Он имеет дело с техникой локализации, поддерживаемой Microsoft, и несколькими альтернативными
Я бы не рекомендовал «официальное» решение для локализации ... это действительно боль в использовании, он изменяет вам XAML (добавляет x: Uid атрибуты для каждого элемента, который может быть локализован), и нет никаких хороших инструментов от MS, чтобы сделать это простым решением. Хорошая старая локализация resx намного проще в использовании и довольно хорошо интегрируется с WPF с помощью нескольких трюков (а именно, расширений разметки и/или прикрепленных свойств). Кроме того, вы можете легко изменить язык интерфейса во время выполнения благодаря системе привязки.
+1 для статьи Рика Страхоля. Это хорошо. На самом деле система привязки не привязана к существующей культуре потока пользовательского интерфейса, но в этой статье рассказывается, как устранить эту проблему среди прочего. Хороший выбор. –
+1 очень полезный ответ. Спасибо за статью – gyurisc
Вы можете использовать специальное расширение разметки для поиска локализованных значений и их обновления при изменении культуры пользовательского интерфейса.
Вот пример того, как это может работать:
<Label x:Name="lblResxHelloWorldMarkupExtension1Value"
Content="{res:Res Id=HelloWorld,Default=Hello#}"
Margin="{res:Res Id=HelloWorldMargin,Default=10}"
Width="{res:Res Id=HelloWorldWidth,
ResourceSet=WpfClickOnce.MyFormRes, Default=50}" />
Этот пример взят из отличной WPF Локализация Руководство авторством Рик Strahl и Мишель Леру Бустаманте здесь: http://wpflocalization.codeplex.com/. Загрузите руководство с этого сайта, где этот метод подробно описан в форме документа и с образцом приложения.
Другим приятным преимуществом этого подхода является то, что он работает в дизайнере.
Если вас интересует эта тема, вы можете посмотреть мою библиотеку, которую я разрабатываю на Codeplex.
LocalizationLibrary: http://localizationlibrary.codeplex.com/
- 1. WPF MVVM Локализация C#, runtime
- 2. Локализация приложений на Mac OS
- 3. wpf локализация
- 4. Модель данных MVVM WPF
- 5. Локализация на основе профиля пользователя
- 6. iOS 9 Локализация приложений
- 7. Призма и локализация на лету WPF
- 8. Локализация нескольких приложений
- 9. локализация приложений iPhone
- 10. Локализация через класс приложений?
- 11. Локализация для приложений Kik
- 12. iOS Локализация на основе каждой цели?
- 13. Проверка при использовании MVVM (WPF) с моделью на основе DDD
- 14. Включить кнопку WPF на основе выбора списка флажков MVVM
- 15. WPF MVVM - запрос о проектировании моделей на основе XSD
- 16. Включить кнопку WPF на основе выбора списка флажков в MVVM
- 17. WPF/MVVM - проверка элемента меню на основе строкового соответствия
- 18. MVVM WPF-переключатели в приложении на основе окон
- 19. WPF MVVM Выполнение различных действий на основе сфокусированного объекта
- 20. WPF - MVVM - TreeView - Команды включены на основе выбранного элемента
- 21. ASP.net как аутентификация на основе форм в WPF MVVM prism
- 22. Локализация диалогов в MVVM: полезно ли ссылаться на ресурсы ViewModel?
- 23. WPF и локализация
- 24. Nettiers WPF MVVM
- 25. Неверная локализация приложений в магазине приложений iOS
- 26. Локализация в WPF
- 27. Локализация в WPF
- 28. MVVM инструментарий для небольших приложений
- 29. Локализация приложений сбой на Android 4.0
- 30. Локализация и глобализация приложений WinForms
Учитывая, что View-модель представляет собой модель с видом, я лично считаю, что это идеальное место для размещения локализации.Это также позволит локализовать Silverlight и WPF UI из одной и той же модели представления. –
Я должен не согласиться с Питом Дэвисом. Локализация принадлежит представлению, а не модели представления. Модель представления не должна беспокоиться о том, как представление хочет представить себя. И локализация - это просто способ представления представления на альтернативных языках. –