65.9K
CodeProject 正在变化。 阅读更多。
Home

Windows 通用应用中的本地化

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.97/5 (34投票s)

2015年1月8日

CPOL

12分钟阅读

viewsIcon

89869

downloadIcon

1137

通过为特定文化和语言进行定制,让应用做好面向世界的准备。

目录

  1. 引言

  2. 全球化

  3. 本地化

  4. 实现本地化

  5. 本地化应用清单

  6. 本地化图片

  7. 多语言应用工具包

  8. 伪语言

  9. 从代码后台访问资源

 

引言

Windows 应用商店可帮助您触达广大受众。它支持将您的应用分发到全球各地,并处理所有财务方面的复杂问题。您可以选择只创建应用的英文版或您自己语言的版本,但这会缩小您的潜在受众。Windows 应用商店服务于数百个市场和一百多种语言,因此忽略它们会大大减少您应用的受众。幸运的是,Windows 运行时提供了简化全球化应用创建的功能。

这涉及两件事——国际化 和 本地化

全球化

国际化 是确保您的应用在多种文化中都能良好运行的过程。它经常与本地化混淆,本地化是为特定语言和文化定制应用的過程。国际化指的是在不进行任何更改或定制的情况下,使您的应用能够为不同市场做出恰当的反应。

本地化

本地化 指的是让我们的应用适应新市场。要本地化应用,我们需要移除所有硬编码的字符串和图片,而是用唯一的标识符标记这些元素。

实现本地化

在您的应用中,您可能使用大量文本数据。构建应用时,您将文本直接放入 XAML 和 C# 代码中。但当您想将应用翻译成另一种语言时,您需要将所有字符串移到称为资源文件的单独文件中。资源文件的扩展名为 .resw,并放置在项目中的一个名为 Strings 的特殊目录中。此文件夹必须为每种支持的语言包含一个子文件夹。子文件夹遵循语言/区域的命名约定。例如,en-US 表示美国英语,en-GB 表示英国英语。此模式称为 BCP-47 语言标记。您也可以只使用语言来强制运行时使用适用于所有区域的本地化资源。例如,如果使用名为 en 的文件夹,则美国和英国(以及澳大利亚等)都将使用英语。在此子文件夹中,创建一个名为 Resources.resw 的文件。这是 Windows 应用商店应用的新命名约定。如果您有一个来自 .NET 项目的 .resx 文件,请将该文件复制到新的文件夹结构中,并将文件名扩展名重命名为 .resw。由于定义的架构相同,因此格式兼容。

在这里,我创建了一个具有非常简单的 UI 的 Windows 通用应用。我将共享 Windows 应用商店和 Windows Phone 应用的 UI。如果您是通用 Windows 应用或跨平台共享视图和代码的新手,请参考我的另一篇文章 通用应用中的条件编译。如果您只想在 Windows 应用商店或 Windows Phone 应用中实现本地化,请遵循我对通用应用所做的相同步骤,因为它们几乎相同。那么,我们开始吧。

使用 C# 创建一个 Windows 通用应用。我选择空白应用,并将其命名为 Localization_Demo。

 

为了共享视图,我将 MainPage.xaml 文件之一拖到了共享项目中,然后将其从其他两个项目中删除。现在,这两个项目都有一个通用的 MainPage.xaml 文件。项目在解决方案资源管理器中的视图如下所示。

现在,让我们创建一个仅包含 TextBlock 的简单 UI。

我们首先要做的是从 Xaml 文件中移除所有硬编码的字符串,并为该元素赋予一个 x:Uid。x:Uid 标记完全独立于元素的 Name。前者专门用于本地化过程,而后者则有利于代码后台。
 

现在,我们的代码如下所示。

 <Viewbox HorizontalAlignment="Stretch"   VerticalAlignment="Stretch" Grid.Column="1"  Grid.Row="1"  >
      <TextBlock x:Uid="message" Text="Hello" />
 </Viewbox>

 

下一步是在共享项目中创建一个新文件夹。命名为“Strings”。在 Strings 文件夹中,我们将把每个语言特定的资源文件放在各自的文件夹中。我们将把此应用本地化为法语,而我们的默认语言将是美式英语。因此,我们需要为它们各自创建文件夹。文件夹名称应与语言代码完全匹配,例如 fr-FR 表示法语(法国),hi-IN 表示印地语(印度)。我们需要添加尽可能多的文件夹来支持我们想要定位的语言,然后我们必须在每个特定语言文件夹中添加资源文件,其中包含所有翻译的字符串。

所以,在这里,我的应用中创建了两个文件夹:Fr-FR 用于法语,en-US 用于美式英语,并在其中每个文件夹中添加了一个资源文件。

要添加资源文件,请右键单击特定文件夹,然后选择 Add->New Item ->Resource File(.resw)。默认名称是可以的,您无需更改它。

现在打开第一个资源文件,在这里,我们的情况是 en-US。

在“名称”部分,我们必须为我们想要更改的属性提及元素的 x:Uid,它可以是字符串、颜色、高度、宽度或任何其他属性,而在“值”部分,我们必须提供它在该特定区域设置下运行时想要显示的值。

在我们的演示应用中,我们正在访问 X:uid 为“message”的 TextBlock 的 Text 和 color 属性。

同样,我们将更改另一个资源文件,即法语的。在这里,“message.Text”属性的值部分,我们将放入法语翻译文本。

现在,如果我们运行应用,它将以我们的默认语言运行。我的默认语言是美式英语,所以输出视图将来自 en-US 资源文件。另外,请注意文本的前景颜色。

让我们将语言更改为法语,然后运行应用。要做到这一点,请转到控制面板->时钟、语言和区域->语言。

选择“添加语言”,然后选择“法国”。要使任何选定的语言成为我们的默认语言,我们必须将其移到顶部。列表顶部的语言将自动选为我们的默认语言。

现在,我们已将默认语言更改为法语。现在再次运行该应用,我们已成功将应用本地化为法语。

 

本地化应用清单

在将您的应用分发到多个市场时,您应该本地化您的清单。这使您能够在 Windows 应用商店中显示应用的翻译描述。您可以在清单中本地化多个项目,例如:

显示名称、简称和描述

让我们本地化我们的应用名称和描述,为此,在两个资源文件中都为应用的显示名称和应用描述分别添加“DisplayName”和“Description”两个类别,并附上翻译后的值。

 

在清单内部,使用 ms-resource:<identifier> 来引用资源字符串。例如,要设置应用程序标题,可以在资源文件中添加“DisplayName”,并使用 ms-resource:DisplayName 来引用它;对于描述,则使用 ms-resource:Description 来引用。我们还必须设置默认语言。

请确保在两个项目中都执行此操作,因为这两个项目都有不同的应用程序清单。

 

这次,让我们在 Windows Phone 模拟器中运行我们的应用。默认语言现在是英语-美国。

 

 

我们可以从“设置”->“语言”->“添加语言”更改默认语言。

添加其他语言(在本例中为法语),然后重启模拟器,并将法语设置为默认语言。

 

 

注意应用名称,它现在已被本地化。

 

 

本地化图片

如果图片不包含文本或其他特定于文化的信息,则无需本地化图片。本地化图片会增加应用的下载大小,这会影响用户体验,因此请尽可能避免图片本地化。如果必须本地化图片,请将其放在特定于资源的文件夹中。例如,您可以将一张图片放在 Images/en-US 中,并将同一文件的副本放在 Images/fr-FR 中,以创建英文和法文版本的图片,或者我们也可以像本例中所示那样,使用特定于文化的后缀来命名图片。

 

在这里,我们为不同文化添加了不同的图片,但使用通用名称和特定于语言的后缀,例如:

Flag.lang-en-US.png

Flag.lang-fr-FR.png

但是请注意,在选择图片源的属性时,您不必调用特定于语言的图片。Windows RT 足够智能,可以为您处理。

同样,我们也可以为不同的分辨率指定不同的图片,因为低分辨率的图片在平板电脑或手机上可能看起来不错,但在 PC 上则不那么好,所以我们必须提供不同分辨率的图片,例如:

Circle.scale-100.png

Circle.scale-180.png

为了演示,我使用了不同颜色的图片,以便我们可以轻松地区分它们。

要了解您的应用在不同屏幕尺寸下的外观,您可以立即在“设备”窗口中查看(可以在“设计”选项卡中找到),也可以在运行时更改模拟器和模拟器上的分辨率。

这是我们的应用在低分辨率设备上的样子。

 

这是我们的应用在高分辨率设备上的样子。

 

如果我们在 PC 上以法语为默认语言运行该应用,我们会得到这个结果。同时请注意应用名称。

如果我们在低分辨率设备上以美式英语为默认语言运行该应用,我们会得到这个结果。

 

 

 

多语言应用工具包

我们可以添加以语言代码命名的其他文件夹,并通过翻译软件手动填充翻译后的资源。根据用户当前的语言设置,将在运行时选择合适的资源,如果不存在此类资源,则回退到默认语言。

然而,有一个更好的选择。 多语言应用工具包,它是 Visual Studio 2012 for Windows 8 的一个扩展,允许您通过机器翻译服务或本地化人员轻松地自行本地化您的应用。要利用它,您必须从 Windows Dev Center 下载并安装多语言应用工具包。完成此操作后,您可以从 Visual Studio 的 工具 菜单中选择 启用多语言应用工具包。这将自动将一个 .xlf 文件添加到项目的新子文件夹中,用于一个仅用于测试的语言,称为伪语言。

首先,请从 http://dev.windows.com/en-us/develop/multilingual-app-toolkit 下载并安装 多语言应用工具包

重启 Visual Studio。完成此操作后,您可以从 Visual Studio 的 工具 菜单中选择 启用多语言应用工具包。这将自动将一个 .xlf 文件添加到项目的新子文件夹中,用于一个仅用于测试的语言,称为伪语言。

 

我创建了另一个通用空白应用,但我们必须在两个项目中都添加并启用 多语言应用工具包,因为目前不提供共享。现在,我们的项目已添加一个 .xlf 文件到一个新的子文件夹中。此默认 .xlf 文件仅用于测试伪语言。

在这里,我为 Windows 应用商店应用项目创建资源,但我们必须对 Windows Phone 执行相同的步骤。我创建了一个带有某些 TextBlock 的简单 UI,并添加了一个默认资源文件,其中包含需要本地化的属性。

如果您想添加语言,请右键单击项目并选择“添加翻译语言”。

 

这将产生如下所示的对话框。

 

在此对话框中,已默认选择伪语言和我们的默认英语,但我们可以向下滚动并从列表中选择 中文(繁体) [zh-Hant]。按 OK 后,MultilingualResources 文件夹现在将有两个 .xlf 文件,一个用于伪语言,一个用于繁体中文。

现在重新生成应用程序。这将使用默认语言 .resw 文件中的每个项目的翻译来填充每个 .xlf 文件。最初,每个翻译只是复制的英文文本。但是,对于某些语言(如我们选择的两种),您可以基于 Microsoft Translator 服务生成机器翻译!要对整个文件执行此操作,请右键单击每个 .xlf 文件,然后选择 生成机器翻译

 

现在,我们已经获得了所有资源的基础翻译,您可以通过打开每个 .xlf 文件并检查多语言编辑器中的列表来查看它们。

请注意,生成的翻译会自动设置为“待审核”状态。而且,我们绝对不希望将“Blue”文本翻译成其等效的中文。这不是用户可见的字符串,也不是有效的“foreground”值。相反,让我们将其翻译成“Red”,它将作为我们特定于语言的背景颜色。我们还需要进行一项更改。我们不希望“My English App”被翻译成中文,而是“My Chinese App “,因此我们必须在中文 .xlf 文件中相应的位置进行更正。

重新生成项目,然后首先以英语-美国为默认语言运行它。

现在以中文为默认语言。

 

伪语言

伪语言 旨在测试您的应用在本地化为各种(真实)语言时的表现。当利用机器翻译到伪语言时,您将获得一个看起来像英文的字符串,其内容仍然可识别,但旨在捕获问题。

伪语言字符串比相应的英文字符串更长,以帮助您捕获文本可能被截断或因换行而导致问题的场景,特别是当您翻译成文本通常比英语长的真实语言时。每个字符串还以 ID 开头,以帮助您将有问题的文本片段追溯到其原始资源。它还有助于捕获您在用户界面中忘记提取到资源的、用户可见的文本。

要使用伪语言测试您的应用,您必须从以下位置启用它:

控制面板-> 时钟、语言和区域 -> 语言

点击 添加语言。伪语言是隐藏的,所以我们必须搜索它。

在搜索框中,键入 qps-ploc。选择 英语(伪 qps),然后点击 添加

并确保英语(qps-ploc)位于首选语言列表的顶部。

现在,您可以使用伪语言测试您的应用。

从代码后台访问资源

有时我们可能需要从代码后台访问资源。我们可以通过ResourceManager 类来实现这一点,该类位于Windows.ApplicationModel.Resources.Core 命名空间中。

ResourceCandidate resource1 = ResourceManager.Current.MainResourceMap.GetValue("Resources/message/Foreground", ResourceContext.GetForCurrentView());

string foreground = resource1.ValueAsString;

技巧和最佳实践

  1.  确保您的应用的默认语言与您的 default.resw 文件的语言代码匹配。
  2.  在将应用程序上传到商店之前,移除伪语言的资源。
  3. . 多语言应用工具包客户预览版错误地使用了中文繁体“zh-cht”和中文简体“zh-chs”作为目标区域设置。此问题已从之前的版本中得到修复。要纠正此错误,请手动修改包含错误代码的 .xlf 文件。将“zh-cht”更改为“zh-hant”,将“zh-chs”更改为“zh-hans”。

 

历史

文章 V2。

© . All rights reserved.