我有一个 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
我认为Aghilas提出的解决方案很好;但是您可以使用StaticResource
而不是DynamicResource
在步骤 3中使用,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>
如果要使用 RESX 文件而不是资源字典,可以使用 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
带有翻译的键。