Поделиться через


Краткое руководство. Использование строковых ресурсов (HTML)

[ Эта статья адресована разработчикам приложений среды выполнения Windows для Windows 8.x и Windows Phone 8.x. В случае разработки приложений для Windows 10 см. раздел последняя документация]

Поместите строковые ресурсы в файлы ресурсов и вставьте в код JavaScript или разметку HTML ссылки на эти строки.

Инструкции

  1. Помещайте строки в файлы ресурсов, а не непосредственно в код или разметку.
    1. Откройте файл package.appxmanifest в Visual Studio, перейдите на вкладку Приложение и установите язык по умолчанию "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."
        }
        

        Это строгий синтаксис JSON, где необходимо обязательно ставить запятую после каждой пары «имя — значение» за исключением последней. В этом примере greeting и farewell обозначают отображаемые строки. Остальные пары (_greeting.comment и _farewell.comment) представляют собой комментарии, описывающие эти строки. В комментариях удобно размещать специальные указания для переводчиков, которые локализуют строки на другие языки.

  2. Добавьте идентификаторы строковых ресурсов в код и разметку.
    1. Добавьте ссылки на файл JavaScript из вашего HTML-файла, если их там еще нет. (Стандартные шаблоны всегда должны создавать их; имя файла 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 добавьте вызов функции WinJS.Resources.processAll при загрузке вашей страницы HTML.

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

      Если в объект WinJS.UI.Pages.PageControl загружается дополнительный HTML-файл, вызовите WinJS.Resources.processAll(element) в методе IPageControlMembers.ready элемента управления страницей, где 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. С помощью идентификаторов (greeting и farewell) из файлов ресурсов добавьте в HTML-файл ссылки на строковые ресурсы, используя атрибут data-win-res attribute.

      <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);
      

Примечания и советы

Общий шаблон data-win-res attribute для замены HTML: data-win-res="{propertyname1**: 'resource ID', propertyname2: 'resource ID2'}"**.

Если строковый ресурс не содержит разметку и может быть вставлен как обычный текст, привяжите ресурс к свойству textContent вместо innerHTML. Свойство textContent можно заменить в модели DOM гораздо быстрее, чем innerHTML.

Вы также можете использовать attributes: качестве имени свойства. В данном случае значение является не именем именованного ресурса, а набором, где первое значение — это имя атрибута, а второе — именованный ресурс, который требуется использовать в качестве значения. Пример: <div data-win-res="{attributes: {'aria-label' : 'Button1LabelForAria'}}" > ...</div>. Такой пример можно увидеть в сценарии 9 в образце ресурсов и локализации приложения.

Подробнее о добавлении дополнительных языков и локализации см. в разделе Краткое руководство: перевод ресурсов интерфейса.

Связанные разделы

Как присваивать имена ресурсам с помощью квалификаторов

Загрузка строковых ресурсов

WinJS.Resources.processAll

Краткое руководство. Перевод ресурсов интерфейса

Ресурсы приложения и пример локализации

Страницы свойств, JavaScript

Тег языка BCP-47