WPF - 本地化

  • 简述

    本地化是将应用程序资源转换为应用程序支持的特定区域性的本地化版本。
    当您开发应用程序并且您的应用程序仅以一种语言提供时,您将限制客户数量和业务规模。如果您想增加客户群,这也将增加您的业务,那么您的产品必须可供全球受众使用和访问。经济高效的产品本地化
    在 WPF 中,使用 resx
    • 创建一个名为“WPFlocation”的新 WPF
    • 在解决方案资源管理器中,您将在“属性”文件夹下看到 Resources.resx 文件。
    地方化
    • 将访问修饰符从内部更改为公共,以便可以在 XAML 文件中访问它。
    WPF 本地化中的更改
    • 现在添加以下字符串的名称和值,我们将在应用程序中使用它们。
    添加字符串名称
    • 创建两个名称为“资源”和“Resources.ru-RU.resx”的文件副本。这些是特定于语言和国家/地区名称的命名约定,可以在本地语言支持 (NLS) API 参考(https://msdn.microsoft.com/en-us/goglobaspx)页面上找到。
    • 将 Resources.ru-RU.resx 中的值更改为俄语单词,如下所示。
    更改“资源”中的值
    • 让我们转到设计窗口并拖动三个文本框、三个标签和三个按钮。
    • 在 XAML 文件中,首先添加命名空间声明以使用本地化资源 xmlns:p = “clr-命名空间:WPF本地化。
    • 设置所有控件的属性,如下所示。在此示例中,我们不会对 XAML 文件中窗口的标签、按钮和标题的内容使用硬编码字符串。我们将使用在 *.resx 文件中定义的字符串。例如,对于窗口的标题,我们使用在 *.resx 文件中定义的标题字符串,如“标题 = ”{x:静态 p:资源.标题}“”
    • 下面是 XAML 文件,在其中使用不同的属性创建和初始化控件。
    
    <Window x:Class = "WPFLocalization.MainWindow" 
       xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
       xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml" 
       xmlns:local = "clr-namespace:WPFLocalization" 
       xmlns:p = "clr-namespace:WPFLocalization.Properties"
       Title = "{x:Static p:Resources.Title}" Height = "350" Width = "604">
       
       <Grid> 
          <TextBName = "textBHorizontalMoognment = "Left" Height = "23" 
             Margin = "128,45,0,0" TextWrapping = "Wrap" VerticalMoognment = "Top" Width = "304"/>
             
          <LabName = "labContent = "{x:Static p:Resources.Name}"
             HorizontalMoognment = "Left" Margin = "52,45,0,0" VerticalMoognment = "Top" Width = "86"/>
              
          <TextBName = "textBHorizontalMoognment = "Left" Height = "23" 
             Margin = "128,102,0,0" TextWrapping = "Wrap" VerticalMoognment = "Top" Width = "304"/> 
             
          <LabName = "labContent = "{x:Static p:Resources.Address}" 
             HorizontalMoognment = "Left" Margin = "52,102,0,0" VerticalMoognment = "Top" Width = "86"/>
             
          <TextBName = "textBHorizontalMoognment = "Left" Height = "23" 
             Margin = "128,157,0,0" TextWrapping = "Wrap" VerticalMoognment = "Top" Width = "80"/>
             
          <LabName = "labContent = "{x:Static p:Resources.Age}" 
             HorizontalMoognment = "Left" Margin = "52,157,0,0" VerticalMoognment = "Top" Width = "86"/>
             
          <BName = "bContent = "{x:Static p:Resources.OK_B 
             HorizontalMoognment = "Left" Margin = "163,241,0,0" VerticalMoognment = "Top" Width = "75"/> 
             
          <BName = "bContent = "{x:Static p:Resources.Cancel_B 
             HorizontalMoognment = "Left" Margin = "282,241,0,0" VerticalMoognment = "Top" Width = "75"/>
             
          <BName = "bContent = "{x:Static p:Resources.Help_B 
             HorizontalMoognment = "Left" Margin = "392,241,0,0" VerticalMoognment = "Top" Width = "75"/> 
       </Grid> 
       
     </Window>
    
    • 编译和执行上述代码后,您将看到以下窗口,其中包含不同的控件。
    本地化示例
    • 默认情况下,程序使用默认的资源.resx。如果要以俄语显示 Resources.ru-RU.resx 文件中定义的文本,则需要在程序在 App.xaml 文件中启动时显式设置区域性,如下所示。
    
    using System.Windows;
    namespace WPFLocalization {
       /// <summary> 
          /// Interaction logic for App.xaml 
       /// </summary> 
       
       pubclass App : Application {
       
          App() { 
             System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Glob"ru-RU");
             //System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Glob"en"); 
          } 
       } 
    }
    
    运行应用程序时,您将看到所有俄语文本。
    运行应用程序
    我们建议您执行上述代码,并为其他区域性创建 resx 文件。