Share via


快速入门:使用字符串资源 (HTML)

[ 本文适用于编写 Windows 运行时应用的 Windows 8.x 和 Windows Phone 8.x 开发人员。如果你要针对 Windows 10 进行开发,请参阅 最新文档 ]

将字符串资源放入资源文件中,通过 JavaScript 代码或 HTML 标记引用这些字符串。

说明

  1. 将字符串放入资源文件中,而不是直接将它们放入代码或标记中。
    1. 在 Visual Studio 中打开 package.appxmanifest,选择“应用程序”选项卡,将你的默认语言设置为“en-US”""。(如果这是一个通用应用,请在你的解决方案中为每个 package.appxmanifest 执行该操作。)注意  这将为项目指定默认语言。如果用户的首选语言或显示语言与应用中提供的语言资源不匹配,将使用默认语言资源。有关详细信息,请参阅属性页,JavaScript。  
    2. 创建用于包含资源文件的文件夹。
      1. 在解决方案资源管理器中,右键单击项目(如果这是通用应用,则为“共享”项目)并选择“应用”>“新建文件夹”****。
      2. 将新文件夹命名为“"strings"”。
      3. 如果没有在解决方案资源管理器中看见新文件夹,请在选中该项目时从 Microsoft Visual Studio 菜单中依次选择“项目”>“显示所有文件”****。
    3. 创建一个子文件夹和用于英语(美国)语言的资源文件。
      1. 右键单击“strings”文件夹,并在它下面添加新文件夹。将它命名为“"en-US"”。文件夹中放置的资源文件已针对 BCP-47 语言标记命名。请参阅如何使用限定符命名资源,了解关于语言限定符以及常用语言标记列表的详细信息。

      2. 右键单击 en-US 文件夹,然后选择“添加”>“新建项目”

      3. 选择“资源文件 (.resjson)”。

      4. 单击“添加”****。将添加一个资源文件,默认名称为 resources.rejson。建议使用该默认文件名。虽然应用可能会在其他文件内将其资源分区,但你必须谨慎地正确引用它们(请参阅如何加载字符串资源)。

      5. 新文件包含默认的内容。使用以下内容(可能与默认内容十分相似)替换该内容:

        strings/en-US/resources.resjson

        {
            "greeting"              : "Hello",
            "_greeting.comment"     : "A welcome greeting.",
        
            "farewell"              : "Goodbye",
            "_farewell.comment"     : "A goodbye."
        }
        

        这是严格的 JavaScript 对象表示法 (JSON) 语法,其中每个名称/数值对后面都必须放置一个逗号(最后一对除外)。在此示例中,greetingfarewell 将标识要显示的字符串。其他对(_greeting.comment_farewell.comment)是描述字符串的注释。若要为将字符串本地化为其他语言的翻译人员提供任何特殊说明,注释是理想位置。

  2. 向代码和标记中添加资源标识符。
    1. 从你的 HTML 文件中添加对 JavaScript 文件的引用(如果文件中还没有这些引用)。(默认模板应始终生成这些引用;默认 CSS 文件的名称可能会有所不同,具体取决于所使用的模板,但这对于此示例来说并不重要。)

      <!-- WinJS references -->
      <link href="/css/ui-themed.css" rel="stylesheet" />
      <script src="//Microsoft.Phone.WinJS.2.1/js/base.js"></script>
      <script src="//Microsoft.Phone.WinJS.2.1/js/ui.js"></script>
      
    2. 在 HTML 文件附带的 JavaScript 代码中,当加载 HTML 页面时调用 WinJS.Resources.processAll 函数。

      WinJS.Application.onloaded = function(){
          WinJS.Resources.processAll();
      }
      

      如果将其他 HTML 加载到 WinJS.UI.Pages.PageControl 对象,则在页面控件的 IPageControlMembers.ready 方法中调用 WinJS.Resources.processAll(element),其中 element 是要加载的 HTML 元素(及其子元素)。下例基于应用程序资源和本地化示例的方案 6:

      var output;
      
      var page = WinJS.UI.Pages.define("/html/scenario6.html", {
          ready: function (element, options) {
              output = element.querySelector('#output');
              WinJS.Resources.processAll(output); // Refetch string resources
              WinJS.Resources.addEventListener("contextchanged", refresh, false);
          }
          unload: function () { 
              WinJS.Resources.removeEventListener("contextchanged", refresh, false); 
          } 
      });
      
    3. 在 HTML 中,使用 data-win-res attribute 引用资源文件中使用资源标识符(greetingfarewell)的字符串资源。

      <h2><span data-win-res="{textContent: 'greeting'}"></span></h2>
      <h2><span data-win-res="{textContent: 'farewell'}"></span></h2>
      
    4. 以下是引用 JavaScript 中的字符串资源的示例。

      var el = document.getElementById('header');
      var res = WinJS.Resources.getString('greeting');
      el.textContent = res.value;
      el.setAttribute('lang', res.lang);
      

说明和提示

适用于 HTML 替换的常规模式的 data-win-res attributedata-win-res="{propertyname1**: 'resource ID', propertyname2: 'resource ID2'}"**。

如果资源字符串不包含任何标记,并且可以插入为纯文本,则将资源绑定到 textContent 属性而不是 innerHTMLtextContent 属性在 DOM 中替换比在 innerHTML 中替换要快得多。

你还可以将 attributes: 作为属性名称。在此情况下,该值不是命名资源的名称,而是一个组,其中第一个值是属性名称,第二个值是你想要作为值使用的命名资源。例如:<div data-win-res="{attributes: {'aria-label' : 'Button1LabelForAria'}}" > ...</div>。你可以在应用程序资源和本地化示例的方案 9 中查看此示例。

有关添加更多语言和本地化内容的详细信息,请参阅快速入门:翻译 UI 资源

相关主题

如何使用限定符命名资源

如何加载字符串资源

WinJS.Resources.processAll

快速入门:翻译 UI 资源

应用程序资源和本地化示例

属性页,JavaScript

BCP-47 语言标记