многоязычное приложение wpf

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

Как вы думаете, самый быстрый и простой способ сделать это - разработка разных версий программы (изменение только языка текста) и позволить пользователю выбрать одну из них во время установки ?? Возможно, повторять код, изменяя только текстовое поле или метки, не очень элегантно, но обратите внимание, что у меня есть приложение, завершенное на английском языке, и мне не нужно менять язык во время выполнения.

Ответы на вопрос(4)

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

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="Resources/StringResources.xaml"/>
            <ResourceDictionary Source="Resources/StringResources.fr-CA.xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>
 24 окт. 2018 г., 18:49
Меня немного смущает, почему вы чувствуете, что статическое определение словарей ресурсов для слияния необходимо для улучшения ответа Агиласа? Последняя строка кода метода, определенного на шаге 2, должна гарантировать, что правильный словарь ресурсов будет добавлен в список объединенных словарей, не так ли? this.Resources.MergedDictionaries.Add (ДИКТ);
Решение Вопроса

Я думаю, что решение, предложенное Агиласом, хорошее; но вы можете использоватьStaticResource Вместо того, чтобы использоватьDynamicResource на шаге 3,DynamicResource не требуется в вашем случае, так как вы не собираетесь менять язык во время работы приложения.

Также ознакомьтесь с этими статьями, в которых подробно рассказывается об использовании файлов Resx для локализации в WPF.

Локализация приложения WPF с файлами ResX

WPF Локализация

Руководство по локализации WPF - Технический документ

Creating the resource files

Add this file StringResources.xaml to Resources directory. Here is an example:

<ResourceDictionary 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:system="clr-namespace:System;assembly=mscorlib">

     <system:String x:Key="close">Close</system:String>
</ResourceDictionary>

You can create several files, one for each language.

Adding the resource (Call this when you start your application)

private void SetLanguageDictionary()
{
     ResourceDictionary dict = new ResourceDictionary();
     switch (Thread.CurrentThread.CurrentCulture.ToString())
     { 
       case "en-US":
         dict.Source = new Uri("..\\Resources\\StringResources.xaml", UriKind.Relative);
         break;
       case "fr-CA":
         dict.Source = new Uri("..\\Resources\\StringResources.fr-CA.xaml", UriKind.Relative);
         break;
       default :
         dict.Source = new Uri("..\\Resources\\StringResources.xaml",UriKind.Relative);
         break;
     }
     this.Resources.MergedDictionaries.Add(dict);
}

Using the Resource, like this -

<Button      
   x:Name="btnLogin"
   Click="btnLogin_Click"
   Content="{DynamicResource login}"
   Grid.Row="3"
   Grid.Column="0" 
   Padding="10" />
 17 окт. 2017 г., 16:37
Я пробовал это решение, оно работает, но у меня появляется предупреждение об ошибке, которое говорит о невозможности разрешить вход в систему ресурса, я пытался пересобрать, очистить решение, перезапустить VS, все еще получаю это предупреждение. Должен ли я объявить свои ресурсы где-то вроде app.xaml, или я что-то забыл сделать?
 14 окт. 2016 г., 18:29
 24 окт. 2018 г., 18:46
@Steeven_b - пример нуждается в незначительном обновлении, вероятно. Он определяет строковый ресурс с именем & quot; закрыть & quot; на шаге 1, но затем пытается найти и использовать ресурс с именем & quot; логин & quot; на шаге 3.
 12 янв. 2015 г., 08:48
Очень полезно при хранении всего текста в базе данных. Спасибо!
 29 сент. 2017 г., 12:44
Динамический ресурс не разрешается во время разработки. Так что, на мой взгляд, это недостаток этого решения.

вы можете легко сделать это с помощью статических ссылок в XAML.

<Window x:Class="MyApp.MainWindow"
                xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                xmlns:res="clr-namespace:MyApp.Resources">
    <Button Text="{x:Static res:MainWindow.MyTestKey}">
</Window>

вResource папка являетсяMainWindow.resx, MainWindow.de.resxи т. д. и каждый файл содержит ключMyTestKey с переводом.

Ваш ответ на вопрос