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


Практическое руководство. Локализация приложения

Обновлен: Ноябрь 2007

В этом руководстве рассматривается создание локализованного приложения с помощью средства LocBaml.

ms746621.alert_note(ru-ru,VS.90).gifПримечание.

Средство LocBaml не является готовым приложением. Оно предоставляется в качестве примера, который использует некоторые API локализации и показывает, как можно написать средство локализации.

В этом разделе содержатся следующие подразделы.

  • Общие сведения
  • Требования
  • Создание демонстрационного приложения
  • Создайте вспомогательную сборку независящих от языка ресурсов
  • Построение средства LocBaml
  • Использование LocBaml для анализа файла
  • Перевод локализуемого содержимого
  • Использование LocBaml для создания нового файла .resources.dll
  • Советы по использованию LocBaml
  • Что дальше?
  • Связанные разделы

Общие сведения

В этом обзоре предоставляется пошаговый подход к локализации приложений. Сначала необходимо подготовить приложение так, чтобы можно было извлечь текст, предназначенный для перевода. После того как текст будет переведен, он объединяется с новой копией исходного приложения.

Требования

На протяжении всего раздела будет использоваться компилятор MSBuild (Microsoft build engine), который запускается из командной строки.

Кроме того, будет рекомендовано использовать файл проекта. Инструкции по использованию MSBuild и файлов проекта см. в разделе Построение и развертывание приложений Windows Presentation Foundation.

Во всех примерах данного раздела в качестве языка и региональных параметров используется американский английский (English-US). Это позволит проработать этапы примеров без установки другого языка.

Создание демонстрационного приложения

На данном этапе будет выполняться подготовка приложения к локализации. В образцах Windows Presentation Foundation (WPF) поставляется демонстрационное приложение HelloApp, которое будет использоваться для примеров кода в этом разделе. Если вы хотите использовать этот образец, загрузите файлы Язык XAML (Extensible Application Markup Language) из Пример использования инструмента LocBaml.

  1. Разработайте приложение до момента, в котором потребуется начать локализацию.

  2. Укажите язык разработки в файле проекта, чтобы MSBuild создал основную сборку и вспомогательную сборку (файл с расширением .resources.dll), где будут содержаться независящие от языка ресурсы. В демонстрационном приложении HelloApp файл проекта ― это HelloApp.csproj. В этом файле можно найти язык разработки, заданный следующим образом:

    <UICulture>en-US</UICulture>

  3. Добавьте ИД пользователей в файлы XAML. ИД пользователей используются для отслеживания изменений в файлах и для идентификации элементов, которые должны быть переведены. Чтобы добавить ИД пользователей в файлы, запустите updateuid в вашем файле проекта:

    msbuild /t:updateuid helloapp.csproj

    Чтобы убедиться, что нет отсутствующих или дублированных ИД пользователей, запустите checkuid:

    msbuild /t:checkuid helloapp.csproj

    После выполнения updateuid файлы должны содержать ИД пользователей. Например, в файле Pane1.XAML из HelloApp можно будет найти следующее:

    <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 (dynamic-link library — библиотека динамической компоновки):

    msbuild helloapp.csproj

  2. Вновь созданная основная сборка приложения, HelloApp.exe, создается в следующей папке:

    C:\HelloApp\Bin\Debug\

  3. Вновь созданная вспомогательная сборка независящих от языка ресурсов, HelloApp.resources.dll, создается в следующей папке:

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

Построение средства LocBaml

  1. Все файлы, необходимые для построения LocBaml, находятся в образцах WPF. Загрузите файлы C# из образца Пример использования инструмента LocBaml.

  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: задает подробный режим вывода информации.

    ms746621.alert_note(ru-ru,VS.90).gifПримечание.

    Чтобы получить список параметров при запуске средства, введите 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

    ms746621.alert_note(ru-ru,VS.90).gifПримечание.

    Если файл входных данных HelloApp.resources.dll не находится в том же каталоге, что и LocBaml.exe, переместите один из файлов таким образом, чтобы оба файла были в одном каталоге.

  3. При выполнении анализа файлов с помощью LocBaml выходные данные состоят из семи полей, разделенных запятыми (в файлах .csv) или табуляцией (в файлах .txt). Ниже показан полученный в результате анализа файл .csv файла для HelloApp.resources.dll.

    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

    Ignore

    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

Содержимое, извлеченное при анализе HelloApp.resources.dll с помощью LocBaml, было переведено, и теперь его нужно объединить с исходным приложением. Используйте параметр 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

    ms746621.alert_note(ru-ru,VS.90).gifПримечание.

    Если входной файл Hello.csv не находится в том же каталоге, что и исполняемый файл LocBaml.exe, переместите один из файлов таким образом, чтобы оба файла были в одном каталоге.

  2. Замените старый файл HelloApp.resources.dll в каталоге C:\HelloApp\Bin\Debug\en-US\HelloApp.resources.dll только что созданным файлом HelloApp.resources.dll.

  3. Теперь «Hello World» и «Goodbye World» в приложении должны быть переведены.

  4. Для перевода на другой язык используйте соответствующий язык и региональные параметры. В следующем примере показано, как перевести на канадский французский (French-Canadian).

    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="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
          xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
          x:Class="SDKSample.App"
          x:Uid="Application_1"
          StartupUri="Window1.xaml">
      </Application>
      

Советы по использованию LocBaml

  • Все зависимые сборки, которые определяют пользовательские элементы управления, должны быть скопированы в локальный каталог LocBaml или установлены в GAC. Это необходимо, поскольку при чтении двоичный XAML (BAML) API локализации должны иметь доступ к зависимым сборкам.

  • Если основная сборка имеет подпись, созданная библиотека ресурсов DLL тоже должна иметь подпись для загрузки.

  • Версия локализованной библиотеки ресурсов DLL должна быть синхронизирована с основной сборкой.

Что дальше?

Теперь у вас есть основное понимание того, как используется средство LocBaml. Вы сможете создать файл, содержащий ИД пользователей. С помощью средства LocBaml вы сможете обработать файл для извлечения локализуемого содержимого, и после перевода этого содержимого вы сможете создать .resources.dll файл, который его объединяет. В данном разделе не рассматриваются все возможные детали, но здесь изложены основы, необходимые для использования LocBaml в целях локализации приложений.

См. также

Основные понятия

Глобализация и Windows Presentation Foundation

Обзор использования автоматической разметки