2015-05-08 3 views
1

Я создаю приложение Windows Store в XAML/C# для среды Windows 8.1 Professional.Локализация WinRT - несколько переводов на язык

В моем проекте есть требование, чтобы я поддерживал несколько языков в дополнение к нескольким переводам для любого языка. Например, у меня может быть ярлык, который будет отображаться на английском или французском языках, но на английском языке может потребоваться отобразить слово «Заголовок» или слово «Заголовок» в зависимости от предпочтений клиента.

Моя проблема заключается в том, что я не могу определить способ упаковки и переключения между несколькими словарями ресурсов для одного и того же языка при использовании встроенных функций локализации, предоставляемых XAML для WinRT (т. Е. Используя свойство Uid на моих элементах управления для привяжите их к ресурсному словарю).

Я заметил две функции: ResourceManager.LoadPriFiles и ResourceManager.UnloadPriFiles, которые, как я думал, могут позволить мне заменять ресурсные словари во время выполнения, но я не могу понять, как заставить файлы PRI быть снаружи основной карты ресурсов приложения, чтобы обеспечить загрузку и разгрузку.

Я также рассмотрел возможность создания пользовательской привязки данных или конвертера, которые я мог бы использовать для привязки текста элементов управления вручную, но это стоило бы мне возможности видеть метки во время разработки в Blend, а также жертвуя удобством встроенные возможности локализации.

Другой вариант должен был составить отдельный экземпляр приложения для каждого из пользовательских переводов клиент может потребовать, но очевидно, что это не очень ремонтопригодны способ решения проблемы ...

Наконец, я рассмотрел перепрофилировать что-то вроде классификатора homeregion ResourceContext для решения проблемы; однако это кажется очень ограниченным, поскольку уже есть заранее установленные homeregions, которые я должен был бы выбрать. Попытка полей походит на плохую идею вообще.

ответ

0

Вы можете использовать несколько файлов ресурсов и использовать свойство PrimaryLanguageOverride, чтобы выбрать другой язык, чем по умолчанию. Это позволит вам изменить текущий набор ресурсов, не делая ничего конкретного.

Вы можете использовать структуру как этот для ваших ресурсов:

Strings 
+- en-US 
    +-Resources.resw 
+- fr-FR 
    +-Resources.resw 
+- fr-other 
    +-Resources.resw 

Тогда в вас коде, вы просто должны вызвать любого из следующих строк:

Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = "fr-other"; 
Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = "en-US"; 
Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = "fr-FR"; 

Вы приложение будет теперь используйте «fr-other» язык. Во второй части тега языка вы можете использовать до 8 символов.

+0

Это работает! Важно отметить, что пользовательский код должен быть более двух букв. «en-custom» работает, «en-ja» - нет. Кроме того, многие примеры предлагают использовать объект CultureInfo и назначать его PrimaryLanguageOverride для переключения языка. Это не будет работать, так как пользовательская языковая строка вызовет исключение CultureNotFoundException. –

Смежные вопросы