`
jiasongmao
  • 浏览: 670681 次
  • 性别: Icon_minigender_1
  • 来自: 石家庄
社区版块
存档分类
最新评论

WPF如何:对应用程序进行本地化

    博客分类:
  • WPF
阅读更多

本教程演示如何使用 LocBaml 工具创建本地化的应用程序。

说明说明

LocBaml 工具是一种尚未投产使用的应用程序。 它显示为一种示例,该示例使用某些本地化 API 并演示如何编写本地化工具。

本主题包括下列各节。

概述

本讨论提供用于本地化应用程序的详细步骤。 首先,准备应用程序以便可以提取将要进行翻译的文本。 在翻译文本之后,将已翻译的文本合并到原始应用程序的新副本中。

要求

在本文的讨论过程中,您将用到 Microsoft Build Engine (MSBuild),它是一种通过命令行运行的编译器。

此外,本文还会指导您使用项目文件。 有关如何使用 MSBuild 和项目文件的说明,请参见生成和部署 WPF 应用程序

本讨论中的所有示例的区域性都使用 en-US(美国英语)。 这样,无需安装其他语言,您就可以完成示例中的各个步骤。

创建一个示例应用程序

在此步骤中,您将准备要进行本地化的应用程序。 在 Windows Presentation Foundation (WPF) 示例中提供了一个 HelloApp 示例,它可用作本讨论中的代码示例。 如果想要使用此示例,请从 LocBaml Tool Sample (LocBaml 工具示例)下载可扩展应用程序标记语言 (XAML) 文件。

  1. 将应用程序开发到要启动本地化的程度。

  2. 在项目文件中指定开发语言,以便 MSBuild 生成的主程序集和附属程序集(扩展名为 .resources.dll 的文件)可包含非特定语言资源。 HelloApp 示例中的项目文件为 HelloApp.csproj。 在该文件中,您将找到按如下方式进行标识的开发语言:

    <UICulture>en-US</UICulture>

  3. 将 UID 添加到您的 XAML 文件中。 UID 用于跟踪对文件进行的更改和标识必须要进行翻译的项。 若要将 UID 添加到您的文件中,请对项目文件运行 updateuid

    msbuild /t:updateuid helloapp.csproj

    若要验证您没有缺少或重复的 UID,请运行 checkuid

    msbuild /t:checkuid helloapp.csproj

    运行 updateuid 之后,您的文件应包含 UID。 例如,在 HelloApp 的 Pane1.xaml 文件中,您应该能够找到下面的内容:

    <StackPanel x:Uid="StackPanel_1">

      <TextBlock x:Uid="TextBlock_1">Hello World</TextBlock>

      <TextBlock x:Uid="TextBlock_2">Goodbye World</TextBlock>

    </StackPanel>

创建非特定语言资源附属程序集

将应用程序配置为生成非特定语言资源附属程序集之后,便可生成应用程序。 这将生成使用 LocBaml 进行本地化所必需的主应用程序集以及非特定语言资源附属程序集。 生成应用程序:

  1. 对 HelloApp 进行编译以创建动态链接库 (DLL):

    msbuild helloapp.csproj

  2. 新创建的主应用程序集 HelloApp.exe 创建在下面的文件夹中:

    C:\HelloApp\Bin\Debug\

  3. 新创建的非特定语言资源附属程序集 HelloApp.resources.dll 创建在下面的文件夹中:

    C:\HelloApp\Bin\Debug\en-US\

生成 LocBaml 工具

  1. 生成 LocBaml 所必需的所有文件都在 WPF 示例中。 LocBaml Tool Sample (LocBaml 工具示例)下载 C# 文件。

  2. 从命令行运行项目文件 (locbaml.csproj) 以生成工具:

    msbuild locbaml.csproj

  3. 转到 Bin\Release 目录查找新创建的可执行文件 (locbaml.exe)。 例如:C:\LocBaml\Bin\Release\locbaml.exe。

  4. 在运行 LocBaml 时您可以指定的选项如下所示:

    • parse-p :分析 Baml、资源或 DLL 文件,生成 .csv 或 .txt 文件。

    • generate-g :使用经过翻译的文件,生成本地化的二进制文件。

    • out-o [文件目录 ]:输出文件名。

    • culture-cul [区域性 ]:输出程序集的区域设置。

    • translation-trans [translation.csv ]:已翻译或已本地化的文件。

    • asmpath-asmpath: [文件目录 ]:如果您的 XAML 代码包含自定义控件,则必须提供指向此自定义控件程序集的 asmpath

    • nologo :显示没有徽标或版权信息。

    • verbose :显示详细模式信息。

    说明说明

    如果您运行工具时需要上述选项的列表,请键入 LocBaml.exe 并按 Enter。

使用 LocBaml 分析文件

现在,您已创建了 LocBaml 工具,您就可以用它来分析 HelloApp.resources.dll 以提取要进行本地化的文本内容。

  1. 将 LocBaml.exe 复制到应用程序的 bin\debug 文件夹,即创建主应用程序集的位置。

  2. 若要分析附属程序集文件并将输出存储为 .csv 文件,请使用下面的命令:

    LocBaml.exe /parse en-US/HelloApp.resources.dll /out:Hello.csv

    说明说明

    如果输入文件 HelloApp.resources.dll 和 LocBaml.exe 不在同一个目录中,请移动其中一个文件使它们位于同一个目录下。

  3. 当您运行 LocBaml 来分析文件时,输出将由以逗号分隔(.csv 文件)或以制表符分隔(.txt 文件)的七个字段组成。 下面演示对 HelloApp.resources.dll 进行分析的 .csv 文件:

    HelloApp.g.en-US.resources:window1.baml,Stack1:System.Windows.Controls.StackPanel.$Content,Ignore,FALSE, FALSE,,#Text1;#Text2;

    HelloApp.g.en-US.resources:window1.baml,Text1:System.Windows.Controls.TextBlock.$Content,None,TRUE, TRUE,,Hello World

    HelloApp.g.en-US.resources:window1.baml,Text2:System.Windows.Controls.TextBlock.$Content,None,TRUE, TRUE,,Goodbye World

    这七个字段是:

    1. BAML 名称 与源语言附属程序集相关的 BAML 资源的名称。

    2. 资源键 已本地化的资源标识符。

    3. 类别 值类型。 请参见本地化特性和注释

    4. 可读性 本地化人员是否可以读取此值。 请参见本地化特性和注释

    5. 可修改性 本地化人员是否可以修改此值。 请参见本地化特性和注释

    6. 注释 有助于确定如何对值进行本地化的值的其他说明。 请参见本地化特性和注释

    7. 翻译为所需的区域性的文本值。

    下表显示这些字段如何映射到 .csv 文件的分隔值:

    BAML 名称

    资源键

    类别

    可读性

    可修改性

    注释

    HelloApp.g.en-US.resources:window1.baml

    Stack1:System.Windows.Controls.StackPanel.$Content

    忽略

    FALSE

    FALSE

    #Text1;#Text2

    HelloApp.g.en-US.resources:window1.baml

    Text1:System.Windows.Controls.TextBlock.$Content

    TRUE

    TRUE

    Hello World

    HelloApp.g.en-US.resources:window1.baml

    Text2:System.Windows.Controls.TextBlock.$Content

    TRUE

    TRUE

    Goodbye World

    请注意,注释 字段的所有值都不包含值;如果一个字段没有值,则为空。 此外,还请注意,第一行中的项既不可读也不可修改,并且其类别 值为“Ignore”,这些都指示该值不能本地化。

  4. 为了便于在已分析的文件(尤其是大文件)中发现可本地化的项,您可以按照类别可读性可修改性 对项进行排序或筛选。 例如,您可以筛选掉不可读和不可修改的值。

翻译可本地化的内容

使用任何可用的工具来翻译提取的内容。 其中的一个好方法就是:将资源编写为 .csv 文件并在 Microsoft Excel 中进行查看,对最后一列(值)进行翻译更改。

使用 LocBaml 生成新的 .resources.dll 文件

通过使用 LocBaml 分析 HelloApp.resources.dll 所标识的内容已进行了翻译,必须重新合并到原始应用程序中。 使用 generate-g 选项生成新的 .resources.dll 文件。

  1. 使用下面的语法生成新的 HelloApp.resources.dll 文件。 将区域性设为 en-US (/cul:en-US)。

    LocBaml.exe /generate en-US/HelloApp.resources.dll /trans:Hello.csv /out:c:\ /cul:en-US

    说明说明

    如果输入文件 Hello.csv 和可执行文件 LocBaml.exe 不在同一目录中,请移动其中一个文件使它们位于同一个目录中。

  2. 将 C:\HelloApp\Bin\Debug\en-US\HelloApp.resources.dll 目录下旧的 HelloApp.resources.dll 文件替换为新创建的 HelloApp.resources.dll 文件。

  3. 现在,应该在应用程序中翻译“Hello World”和“Goodbye World”。

  4. 若要翻译为其他区域性,请使用要翻译成的语言的区域性。 下面的示例演示如何翻译为加拿大法语:

    LocBaml.exe /generate en-US/HelloApp.resources.dll /trans:Hellofr-CA.csv /out:c:\ /cul:fr-CA

  5. 在主应用程序集所在的同一程序集中,创建一个新的特定于区域性的文件夹以放置新的附属程序集。 对于加拿大法语,文件夹为 fr-CA。

  6. 将生成的附属程序集复制到新的文件夹中。

  7. 若要测试新的附属程序集,需要更改运行应用程序所用的区域性。 可以通过两种方法执行此操作:

    • 更改操作系统的地区设置(“开始” | 控制面板 |“区域和语言选项” )。

    • 在您的应用程序中,将下面的代码添加到 App.xaml.cs:

      <Application
          xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
          xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
          x:Class="SDKSample.App"
          x:Uid="Application_1"
          StartupUri="Window1.xaml">
      </Application>
      
       
      using System.Windows; // Application
      using System.Globalization; // CultureInfo
      using System.Threading; // Thread
      
      namespace SDKSample
      {
          public partial class App : Application
          {
              public App()
              {
                  // Change culture under which this application runs
                  CultureInfo ci = new CultureInfo("fr-CA");
                  Thread.CurrentThread.CurrentCulture = ci;
                  Thread.CurrentThread.CurrentUICulture = ci;
              }
          }
      }
      
    使用 LocBaml 的一些提示

    • 定义自定义控件的所有依赖程序集都必须复制到 LocBaml 的本地目录或安装到 GAC 中。 这是必需的,因为当本地化 API 读取二进制 XAML (BAML) 时必须具有对依赖程序集的访问权限。

    • 如果主程序集已签名,则生成的资源 DLL 也必须进行签名以便可以加载它。

    • 本地化的资源 DLL 的版本必须与主程序集保持同步。

    接下来的内容

    现在,您应对如何使用 LocBaml 工具有了一个基本的了解。 您应该能创建包含 UID 的文件。 通过使用 LocBaml 工具,您应该能够分析文件以提取可本地化的内容;在内容翻译完成之后,应该能够生成 .resources.dll 文件以合并已翻译的内容。 本主题并未详尽涵盖所有内容,但是您应该通过它掌握了使用 LocBaml 对应用程序进行本地化所必需的知识。

分享到:
评论

相关推荐

    WPF本地化程序 LocBaml

    LocBaml工具就是专门为WPF应用提供本地化支持的一个实用程序。 LocBaml是一个命令行工具,它允许开发者提取、生成、合并以及验证资源文件,这些资源文件用于在WPF应用中实现本地化。它的主要功能包括: 1. **资源...

    WPF实例程序,命令,动画,资源,本地化等等

    WPF(Windows Presentation Foundation)是微软开发的一种图形用户界面框架,它是.NET Framework的重要组成部分,用于构建丰富的、交互式的桌面应用程序。本压缩包“WPF-Samples-master”包含了多个关于WPF的实际...

    wpf国际化本地化多语言

    在.NET框架中,Windows Presentation Foundation(WPF)提供了一种强大的机制来实现应用程序的国际化(Internationalization)和本地化(Localization),使得软件可以适应不同国家和地区的语言需求。本篇文章将深入...

    WPF 应用程序开发.pdf

    WPF 通过 **PackURI** 的概念来支持对这些文件的访问,允许开发者以统一的方式引用这些文件,无论它们是存储在应用程序的本地文件系统还是打包在程序集中。 #### 三、WPF 中的 PackURI **PackURI** 是 WPF 中用于...

    WPF应用程序(.Net Framework 4.8) 国际化

    **WPF应用程序(.Net Framework 4.8) 国际化** 在开发Windows Presentation Foundation (WPF) 应用程序时,实现国际化是一项关键任务,它允许软件在全球范围内支持多种语言,提供更好的用户体验。.Net Framework 4.8...

    测试WPF应用程序

    在“测试WPF应用程序”这个主题中,我们将深入探讨如何对WPF应用进行有效的测试。 **1. WPF应用程序结构** WPF应用通常由XAML(Extensible Application Markup Language)文件定义用户界面,与C#或VB.NET等后台...

    WPF本地化工具

    除了使用工具,还可以通过以下方式优化WPF本地化: - **使用字符串字典**:使用`StringDictionary`类管理动态内容,使文本更容易翻译。 - **分离UI和逻辑**:遵循MVVM模式,将视图与模型解耦,使本地化工作更专注...

    Catel.GettingStarted.WPF:WPF入门应用程序

    1. **XAML**:XAML是一种XML标记语言,用于描述WPF应用程序的用户界面和行为。它允许开发者通过声明式语法创建控件、布局和样式。 2. **数据绑定**:WPF的数据绑定机制使UI元素能够与应用程序的业务逻辑自动同步,...

    WPF自动更新程序

    本文将详细介绍如何在WPF应用程序中实现自动更新功能,主要参考了圣殿骑士自动更新组件的改编版。 **1. 自动更新组件的选择与理解** "圣殿骑士自动更新组件"是一个开源项目,它为.NET应用程序提供了方便的自动更新...

    WPF应用程序管理详细解析

    在WPF应用程序管理中,核心组件是`System.Windows.Application`类,它负责管理应用程序的生命周期、资源和窗口。下面将详细解析WPF应用程序的创建、启动、关闭策略以及其他关键特性。 ### 一、WPF应用程序的创建与...

    WPF桌面应用程序UI设计

    WPF提供了内置的多语言支持,通过ResourceDictionary和culture设置,开发者可以轻松实现应用程序的国际化和本地化。 10. **集成硬件加速** WPF利用硬件加速来提升图形渲染性能,尤其在处理大量图形和动画时,能...

    WPF程序设计指南(中文版+源代码)

    8. **本地化和国际化**:了解如何使应用程序适应不同语言和地区。 9. **源代码实践**:结合书中的源代码,进行实战演练,加深理解和应用。 总的来说,"WPF程序设计指南"是一本全面而深入的教程,无论是对WPF新手...

    wpf_国际化

    在Windows Presentation Foundation (WPF) 中,国际化...通过理解并掌握以上知识点,开发者可以构建出真正全球化、具有强大本地化能力的WPF应用程序,提供一致且友好的用户体验,无论用户位于世界何处。

    WPF Prism MVVM弹窗及国际化小示例

    在实际项目中,这通常是一个WPF应用程序的启动类,包含了对Prism框架的初始化,如定义Shell窗口、注册模块以及配置Unity容器等。 综上所述,"WPF Prism MVVM弹窗及国际化小示例"是一个涵盖基础功能和高级特性的应用...

    WPF学习笔记 ——主流桌面应用开发技术

    - **可扩展应用程序标记语言 (XAML)**:这是一种用于描述用户界面的XML标记语言,它可以描述WPF应用程序的界面结构和外观。 - **控件**:WPF提供了丰富的控件集合,如按钮、列表框等,这些控件支持各种复杂的用户...

    WPF自学手册 与 WPF高级编程

    12. **性能优化**:了解如何优化WPF应用程序的性能,包括减少内存消耗、利用硬件加速、正确使用Dispatcher和异步操作等,是成为WPF专家的重要环节。 通过阅读《WPF自学手册》和《WPF高级编程》,读者将能够从基础到...

    WPF:绑定到具有本地化的枚举

    总的来说,通过结合使用资源文件、自定义转换器和WPF数据绑定,我们可以轻松地在WPF应用中实现枚举的本地化,为用户提供更友好的界面。这个方法不仅适用于ComboBox,也可以应用于其他需要显示枚举值的控件,如...

    .NET 本地化语言程序

    在WinForm应用中,你可以通过以下步骤实现本地化: 1. 创建资源文件:在Visual Studio中,右键点击项目,选择“添加”-&gt; “新项”,然后选择“资源文件”。为每种语言创建一个资源文件,并在每个文件中添加相应的UI...

    使用RESX文件进行WPF本地化

    4. 使用XAML进行本地化: - 在XAML中,可以使用`StaticResource`标记扩展来引用资源,例如:`&lt;TextBlock Text="{StaticResource WelcomeMessage}" /&gt;`。 - 当改变`Thread.CurrentThread.CurrentUICulture`时,WPF...

Global site tag (gtag.js) - Google Analytics