Поскольку это проблема только локализации строк, и вам просто нужна гибкость выбора всего набора локализованного контента, существует несколько способов привязки ваших строк к менеджеру ресурсов. Большинство из них слишком сложны для достижения желаемого результата :
Учитывая следующее:
- Для большинства решений, которые я видел, требуется обязательное утверждение длиной около 80 символов для каждой записи .Сюда не входит умное использование конвертера.
- В большинстве решений, которые я видел, каждая строка реализует свойство notify (это кажется огромными издержками для строк, которые почти никогда не меняются).
- Локализация обычно делаетне требует мгновенного обновления (вы всегда можете обновить текущую страницу).
Гораздо более простой подход состоит в том, чтобы просто поместить ваши строки в виде пар имя-значение в глобальный словарь приложения и ссылаться на них черезshort / simple StaticResource привязка, например
Text={StaticResource L_MenuHome}
Остается проблема только в том, как получить другой набор языковых строк в словаре приложения (что на самом деле довольно просто):
- Поместите строки языков по умолчанию непосредственно в ваш App.xaml (это помогает в разработке, так как пропущенные ключи приведут к исключению).
- Снимите любой новый выбранный язык со своего сервера через любой удобныйозначает (файл XML, файл XAML, CSV или из базы данных через веб-сервис)
- Заменитьсловарные записи с недавно загруженными данными.Единственное, что вы должны сделать, это убедиться, что ключ уже присутствует, или вы должны добавить вместо него запись или установить ее.
- Перезагрузить текущую страницу (вернуть их на домашнюю страницу после смены языка?)
Я не знаю, почему всем, кажется, нравятся действительно сложные решения, когда StaticResources отлично справляются со своей работой и требуют гораздо меньше усилий.Мы также склонны использовать веб-сервис для извлечения набора языковых строк из базы данных, так как обычно он меньше 200 КБ, а базы данных гораздо более гибкие для обновлений.
В любом случае, просто пытаясь вернуть здравый смысл в локализацию,Это работает для нас.Не стесняйтесь использовать, игнорировать, предлагать улучшения и т. Д.
Надеюсь, это поможет.