我有一个WPF应用程序(英语版),我希望让用户选择不同的语言。我已经阅读了一些在运行时更改语言的可能性,但我只想在安装时选择一种语言,并且永远不更改它。
您认为最快、最简单的方法是开发不同版本的程序(仅更改文本语言),并允许用户在安装过程中选择其中之一?也许只更改文本框或标签而重复代码并不是很优雅,但请注意,我已经完成了英文应用程序,并且不需要在运行时更改语言。
我有一个WPF应用程序(英语版),我希望让用户选择不同的语言。我已经阅读了一些在运行时更改语言的可能性,但我只想在安装时选择一种语言,并且永远不更改它。
您认为最快、最简单的方法是开发不同版本的程序(仅更改文本语言),并允许用户在安装过程中选择其中之一?也许只更改文本框或标签而重复代码并不是很优雅,但请注意,我已经完成了英文应用程序,并且不需要在运行时更改语言。
创建资源文件
将StringResources.xaml文件添加到Resources目录中。下面是一个示例:
<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>
你可以创建多个文件,每个文件对应一种语言。
添加资源(在启动您的应用程序时调用此函数)
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);
}
使用资源的方法如下 -
<Button
x:Name="btnLogin"
Click="btnLogin_Click"
Content="{DynamicResource close}"
Grid.Row="3"
Grid.Column="0"
Padding="10" />
来源:https://www.codeproject.com/Articles/123460/Simplest-Way-to-Implement-Multilingual-WPF-Applica
StaticResource
而不是使用DynamicResource
。在您的情况下,不需要使用DynamicResource
,因为您不会在应用程序运行时更改语言。
另外,请查看以下文章,详细了解如何在WPF中使用Resx文件进行本地化 -
为了完善@AghilasYakoub的正确答案,我认为需要指出以下代码应该添加到文件App.xaml
中,除了他所说的内容:
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Resources/StringResources.xaml"/>
<ResourceDictionary Source="Resources/StringResources.fr-CA.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
this.Resources.MergedDictionaries.Add(dict);
- Mitselplik<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
的键和相应的翻译。
var existedDict = Resources.MergedDictionaries.Where(d => d.Source.OriginalString == dict.Source.OriginalString).FirstOrDefault(); if (existedDict != null) { Resources.MergedDictionaries.Remove(existedDict); }
- Hanabi