2016-02-21 8 views
0

У меня возникли проблемы с уже упомянутым пакетом NuGet. Я создал папку с именем Resources, где я вставил следующие файлы:WPFLocalizeExtension правильно Структура папки

  • Strings.en.resx
  • Strings.sk.resx (мой язык по умолчанию)

Я используя Prism, где мой MainWindow (обычный контейнер) находится под корневым окном, а все остальные страницы находятся под папкой Views.

Я добавил следующее к моей MainPage зрения:

  xmlns:lex="http://wpflocalizeextension.codeplex.com" 
     lex:LocalizeDictionary.DesignCulture="en" 
     lex:LocalizeDictionary.OutputMissingKeys="True" 
     lex:ResxLocalizationProvider.DefaultAssembly="eManagement" 
     lex:ResxLocalizationProvider.DefaultDictionary="Strings" 

и вот пример TextBlock:

<TextBlock Text="{lex:Loc Key=Greetings}"/> 

Проблема заключается в том, что если поместить файл Strings.resx в root folder, управление переводится без проблем. Но когда я хочу сохранить свои переводы под папкой Resources (это означает, что перевод на английский язык будет находиться в разделе Ресурсы/Strings.en.resx), это внезапно не сработает.

Что мне нужно изменить, чтобы заставить его работать?

+0

Это не совсем ясно из вашего вопроса: у вас также есть файл 'Strings.resx', так что всего три файла? Вы пытались помещать _all_ resx-файлы в папку «Ресурсы», не так ли? –

+0

Да, я тоже пытался это сделать. Однако дело в том, что учитывается только основной (Strings.resx), и все остальные модификации (другие мутации языка) игнорируются. –

+0

Две вещи, которые вы можете попробовать. Во-первых: проверьте, установлено ли действие сборки для ресурсов «Встроенный ресурс». Второй: как вы в настоящее время устанавливаете, какой язык использовать? Вы можете попробовать (для целей тестирования) явно задать язык в коде. См. Http://stackoverflow.com/a/35292059/1384848, как это сделать. –

ответ

0

я пропускал следующую строку:

lex:InheritingResxLocalizationProvider.DefaultDictionary="Strings" 

Plus в коде-за мне пришлось вручную установить культуру как иначе моя культура всегда была инвариантна

 #region Language Selection 

     var culture = new CultureInfo(Properties.Settings.Default.LanguageSettings); 
     Thread.CurrentThread.CurrentCulture = culture; 
     Thread.CurrentThread.CurrentUICulture = culture; 

     WPFLocalizeExtension.Engine.LocalizeDictionary.Instance.Culture = Thread.CurrentThread.CurrentCulture; 
     #endregion 

Это решило проблему ,

+0

Я думаю, что первая строка действительно ничего не делает, если вы не измените фактического Провайдера на 'InheritingResxLocalizationProvider', нет? Вероятно, код-код был настоящим исправлением. –

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