2017-01-31 6 views
0

Я работаю над WPF-приложением, которое должно быть многоязычным. Итак, я выполнил шаги в этом article и добавил некоторые ресурсные словари к моему проекту. Тогда я добавить один из этих dictionarioes к окну следующим способом, который я звоню - для целей тестирования - в конструкторе окна:Как отображать многоязычный текст ресурсов во время разработки в WPF

private void SetLanguageDictionary() 
    { 
     ResourceDictionary dict = new ResourceDictionary(); 

     switch (Thread.CurrentThread.CurrentCulture.ToString()) 
     { 
      case "en-US": 
      case "en-GB": 
       dict.Source = new Uri("Resources\\StringResources_en-US.xaml", 
           UriKind.Relative); 
       break; 
      case "de-DE": 
       dict.Source = new Uri("Resources\\StringResources_de-DE.xaml", 
            UriKind.Relative); 
       break; 
      default: 
       dict.Source = new Uri("Resources\\StringResources_de-DE.xaml", 
            UriKind.Relative); 
       break; 
     } 

     Resources.MergedDictionaries.Add(dict); 
    } 

Наконец я реализовал ресурсы в ярлыках на моем Окно:

<Label Grid.Row="0" 
      Grid.Column="0" 
      Margin="5" 
      Content="{DynamicResource firstname}"></Label> 

Если текущая культура на моем компьютере «en-US», контент будет «Имя». Или в случае «de-DE» (немецкий) «Vorname».

Во время работы он отлично работает, но во время разработки я не вижу тексты.

Что мне делать?

+0

Я думаю, что вы могли бы делать это трудный путь, я использую Content = "{Binding CommonDate, Source = {StaticResource ресурсы }} "где Resources is Resources.resx – 0x4f3759df

+0

Это звучит как работа для инъекции зависимостей. Я использую набор инструментов MVVM Light от NuGet - по умолчанию данные, к которым вы привязываетесь, будут поступать из одного из двух хранилищ данных (хранилищ) - у вас есть проект dataservice, который обрабатывает фиктивные данные для проектирования и ваш производственный сервисный центр, который используется в во время выполнения. В вашей модели просмотра вы извлекаете объекты, с которыми вы привязываетесь, от службы данных, но вы будете получать разные объекты в зависимости от того, какой dataservice используется (что, в свою очередь, зависит от того, находитесь ли вы в режиме разработки). Вы можете найти дополнительную информацию по адресу https://mvvmlight.codeplex.com/ –

ответ

0

Я нашел это.

Мне пришлось реализовать ResourceDictionary в Window.Resources. Для этого необходимо добавить некоторые теги («ResourceDictionary», «ResourceDictionary.MergedDictionaries»).

Если есть определенные стили, они должны быть перемещены внутри тега «ResourceDictionary», как вы можете видеть ниже.

<Window.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="Resources/StringResources_en-US.xaml"/> 
     </ResourceDictionary.MergedDictionaries> 

     <Style x:Key="style1"> 
      [...] 
     </Style> 

     [...] 
    </ResourceDictionary> 
</Window.Resources> 

Затем Вы можете увидеть тексты из XAML-файла в контроле, которые связаны с ней в качестве динамического ресурса. И поскольку он используется в качестве динамического ресурса, он может быть переписан код-за:

 ResourceDictionary dict = new ResourceDictionary(); 
     dict.Source = new Uri("Resources\\StringResources_de-DE.xaml", 
            UriKind.Relative); 
     Resources.MergedDictionaries.Add(dict); 
Смежные вопросы