c# - 多语言 wpf 应用程序

标签 c# .net wpf multilingual

我有一个 WPF 应用程序(英文版),我想让用户选择不同的语言。我已经阅读了一些在运行时应用程序中更改语言的可能性,但我只想在安装时选择一种语言并且永远不会更改它。

您认为最快和最简单的方法是开发不同版本的程序(仅更改文本语言)并让用户在安装过程中选择其中一种吗?可能重复代码只改变文本框或标签不是很优雅,但请注意我已经用英语完成了应用程序并且我不需要在运行时更改语言。

最佳答案

您可以按照以下步骤操作:

  1. 创建资源文件

    将此文件 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>
    

    您可以创建多个文件,每种语言一个。

  2. 添加资源(启动应用程序时调用)

    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);
    }
    
  3. 像这样使用资源 -

    <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

关于c# - 多语言 wpf 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11327840/

相关文章:

.net - 还有空间可以放置更好的 Visual Studio QuickWatch 窗口。有没有办法自己制作?

c# - 操作可能会破坏运行时的稳定性?

wpf - 强制 ComboBox 在 Silverlight 中打开?

c# - 绑定(bind)到自定义类上的 DependencyProperty

c# - 使用互操作在后台打开 Excel 工作簿

c# - 调用 UIViewController 类的非静态函数

c# - 为什么在控制台应用程序中使用 CommonOpenFileDialog 时会出现此异常?

c# - 如果目标中存在 Blob,如何覆盖 Blob

c# - 什么是NullReferenceException,如何解决?

c# - "Global"事件处理器