Car*_*llo 10 .net c# wpf multilingual
我有一个WPF应用程序(英文),我想让用户选择不同的语言.我已经阅读了一些在运行时应用程序中更改语言的可能性,但我只想在安装时选择一种语言,而不是更改它.
您认为最快最容易的方法是开发不同版本的程序(仅更改文本语言)并让用户在安装过程中选择其中一个版本吗?可能重复代码只更改文本框或标签不是很优雅,但请注意我的应用程序用英语完成,我不需要在运行时更改语言.
Agh*_*oub 28
您可以按照以下步骤操作:
创建资源文件
将此文件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>
Run Code Online (Sandbox Code Playgroud)
您可以创建多个文件,每种语言一个.
添加资源(启动应用程序时调用此方法)
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);
}
Run Code Online (Sandbox Code Playgroud)使用资源,像这样 -
<Button
x:Name="btnLogin"
Click="btnLogin_Click"
Content="{DynamicResource close}"
Grid.Row="3"
Grid.Column="0"
Padding="10" />
Run Code Online (Sandbox Code Playgroud)我认为Aghilas提出的解决方案很好; 但是你可以使用StaticResource而不是DynamicResource在步骤3 中使用,DynamicResource在你的情况下不需要,因为在应用程序运行时你不打算使用语言.
另请参阅这些文章,详细了解如何在WPF中使用Resx文件进行本地化 -
小智 5
只是为了改进@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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23657 次 |
| 最近记录: |