导出 (0) 打印
全部展开

如何构建 Windows Phone 本地化应用程序

2012/2/9

通过采取 执行 Windows Phone 本地化的最佳做法主题中的最佳做法,您可以确保您的应用程序是可本地化的。

本主题介绍如何通过创建特定的语言资源文件从代码中分离可本地化的资源。Visual Studio 使用这些文件创建程序集,这些程序集允许您的应用程序支持多种语言。有关此过程的更多信息,请参阅打包和部署资源主题。

重要说明重要说明:

如果您计划将应用程序本地化为东亚语言,则还需要按照显示 Silverlight 的中文、日语和朝鲜语文本中所列的步骤执行操作。

若要查看包含以下代码示例的完整工作代码示例,请从 Windows Phone 的代码示例主题中下载全球化示例

执行 Windows Phone 本地化的最佳做法主题中所述,应该将所有可本地化的资源移到资源文件中。

  1. 为您的应用程序默认语言添加资源文件。

    1. 在 Visual Studio 中打开项目。

    2. 添加资源文件。在“解决方案资源管理器”中,右键单击项目名称,单击“添加”,然后单击“新建项”

    3. “添加新项”对话框中,选择“资源文件”,并重命名文件(如果需要)。例如,您可以将文件重命名为 AppResources.resx。此文件包含应用程序默认语言的资源。

    4. 标识您的应用程序中的字符串并将它们添加到资源文件中。您可以为每个字符串输入名称、值和可选注释。

      • 名称必须是唯一的。尽量让它具有描述性。

      • 值就是在应用程序中向用户显示的字符串。

      • 注释是可选的,但是它对在线翻译有帮助,尤其是在包含字多个符串的大型资源文件中。

  2. 为应用程序支持的所有其他语言添加资源文件。如Windows Phone 区域性和语言支持中所述,所有资源文件必须包含正确的区域性/语言名称。

    例如:

    • 对于区域性西班牙语(西班牙),使用 AppResources.es-ES.resx

    • 对于区域性德语(德国),使用 AppResources.de-DE.resx

    注意

    您仅需要针对其他语言完成此步骤。例如,如果您的默认语言为英语(美国)并且您已经将此种语言的字符串添加到默认语言资源文件中,您不应再为“en-US”创建其他资源文件。

  3. 定义应用程序支持的默认区域性。

    重要说明重要说明:

    默认情况下,“非特定语言”在 Visual Studio 中设置为默认区域性。如果您的应用程序以不同于 Visual Studio 中的默认区域性的其他区域性为目标,则您需要完成下列步骤。如果您不以其他区域性为目标,请验证下列步骤以确保正确设置“非特定语言”。

    1. “解决方案资源管理器”中,右键单击项目名称,然后单击“属性”

    2. 在应用程序标签下,单击“程序集信息”按钮。

    3. “非特定语言”列表中,选择默认区域性。这会在默认资源文件中标识字符串语言。例如,如果将默认资源文件名为 AppResources.resx,而该文件中的字符串是英语(美国)语言字符串,则您应该选择“英语(美国)”作为项目的“非特定语言”

  4. 关闭项目并在文本编辑器中打开项目文件 (<project name>.csproj)。查找 <SupportedCultures> 标记,并添加您的应用程序需要支持的所有其他区域性(语言)的名称。对于添加到项目中的每一个 .resx 文件,您都应该有一个条目。

    用分号分隔语言名称,并仅添加区域性名称。例如,如果应用程序将英语(美国)作为默认区域性,但是应用程序同时支持德语(德国)和西班牙语(西班牙),则您应该按以下方式更新此标记:

    <SupportedCultures>de-DE;es-ES;</SupportedCultures>

重新打开项目,在资源文件中用字符串替换硬编码字符串。

  1. “解决方案资源管理器”中,打开资源文件并从窗格顶部的“AccessModifier”列表框中选择“公共”。为您的项目中所有资源文件重复该步骤。

  2. 定义具有指向资源文件的属性的类。在以下示例中,LocalizedStrings 类包含指向 sdkGlobalizationCS 命名空间中 AppResources 资源文件的属性。

    public class LocalizedStrings
    {
        public LocalizedStrings()
        {
        }
    
        private static sdkGlobalizationCS.AppResources localizedResources = new sdkGlobalizationCS.AppResources();
    
        public sdkGlobalizationCS.AppResources LocalizedResources { get { return localizedResources; } }
    }
    
    

    如果您的项目中存在其他资源文件,则您可以有包含多个属性的单个 LocalizedStrings 类,其中每一个属性返回一种特定资源。

  3. 打开您的 App.xaml 文件并将以下 XAML 代码添加到 <Application.Resources> 部分:

    <Application.Resources>
        <local:LocalizedStrings xmlns:local="clr-namespace:sdkGlobalizationCS" x:Key="LocalizedStrings" />
    </Application.Resources>
    
    

    其中,LocalizedStrings 是具有返回您的资源文件的属性的类名,sdkGlobalizationCS 是包含 LocalizedStrings 类的命名空间。x:Key 属性定义指向代码中的 LocalizedStrings 实例的名称。

  4. 用以下 XAML 代码替换所有硬编码字符串:

    "{Binding Path=resourceFile.resourceName, Source={StaticResource LocalizedStrings}}"

    其中,resourceName 是可本地化资源的名称,resourceFile 是包含 resourceName 的指针的名称,LocalizedStrings 是分配到返回资源的类的实例的名称。

    以下 XAML 代码示例(来自全球化示例)绑定从 LocalizedStrings 类实例返回 LangRegionNameFrFR 字符串的 ListBoxItem 控件:

    <ListBoxItem Content="{Binding Path=LocalizedResources.LangRegionNameFrFR, Source={StaticResource LocalizedStrings}}" />
    
  5. 在包含可本地化内容的应用程序的每个 XAML 文件中,对于要本地化每个字符串,重复前一步骤。

  6. 生成您的应用程序 - 现在它生成一个多语言应用程序并能够根据手机的语言设置显示用户界面。

您可以将应用程序栏添加到应用程序页面中,可以是 XAML 页面或使用 C# 的页面代码隐藏页面。然而,因为应用程序栏不是 Silverlight 控件,它不支持 ApplicationBarIconButton 文本标签或 ApplicationBarMenuItem 文本的动态数据绑定。因此,如果您想本地化这些字符串,您必须在运行时创建或更新应用程序栏。以下代码示例显示帮助器函数,该函数通过使用已本地化的资源提供字符串值生成应用程序栏。此示例假定您已创建本地化资源 DLL,且该资源具有调用“ButtonText”和“MenuItemText”的字符串表条目。有关创建应用程序栏的信息,请参阅 Windows Phone 的应用程序栏概述

警告说明警告:

以下代码不包含在全球化示例中。

// Helper function to build a localized ApplicationBar
private void BuildApplicationBar()
{
    // Set the page's ApplicationBar to a new instance of ApplicationBar.
    ApplicationBar = new ApplicationBar();

    // Create a new button and set the text value to the localized string from AppResources.
    ApplicationBarIconButton appBarButton = new ApplicationBarIconButton(new Uri("ApplicationIcon.png",UriKind.Relative));
    appBarButton.Text = AppResources.ButtonText;
    ApplicationBar.Buttons.Add(appBarButton);

    // Create a new menu item with the localized string from AppResources.
    ApplicationBarMenuItem appBarMenuItem = new ApplicationBarMenuItem(AppResources.MenuItemText);
    ApplicationBar.MenuItems.Add(appBarMenuItem);

}

要测试您的本地化字符串,请执行如何测试 Windows Phone 本地化应用程序中的步骤。

显示:
© 2015 Microsoft