Подготовка приложения к локализации

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

Мы также рекомендуем ознакомиться с руководством по глобализации.

Поместите строки кода в файлы ресурсов (.resw)

Не следует жестко кодировать строковые литералы в императивном коде, разметке XAML или манифесте пакета приложения. Вместо этого поместите строки в файлы ресурсов (.resw), чтобы их можно было адаптировать для различных местных рынков независимо от двоичных файлов в вашем приложении. Дополнительные сведения см. в разделе Локализация строк в манифесте пакета приложения и интерфейсе пользователя.

В этом разделе также демонстрируется добавление комментариев в файл ресурсов (.resw) по умолчанию. Например, при использовании неформального стиля речи, это следует объяснить в комментариях. Кроме того, чтобы свести к минимуму расходы, убедитесь, что переводчики получают только необходимые для перевода строки.

Правильно устанавливайте язык по умолчанию для вашего приложения в исходном файле манифеста пакета приложения (файл Package.appxmanifest). Язык по умолчанию — это язык, используемый в случае, когда предпочитаемые пользователем языки не совпадают ни с одним из языков, поддерживаемых вашим приложением. Пометьте все ресурсы соответствующим языком (даже ресурсы языка по умолчанию, например, \Assets\en-us\Logo.png), для того чтобы система могла определить, на каком языке создан ресурс и как он используется в конкретных ситуациях.

Адаптируйте изображения и другие файловые ресурсы для языка.

В идеале вы сможете глобализации образов, то есть сделать их независимыми от языка и региональных параметров. Для любых изображений и других файловых ресурсов, применительно к которым это сделать невозможно, создайте столько вариантов этих ресурсов, сколько необходимо, и сопроводите названия их файлов или папок соответствующими языковыми кодами. Дополнительные сведения см. в разделе Адаптация ресурсов с учетом языка, масштаба, высокой контрастности и других квалификаторов.

Чтобы свести к минимуму затраты на локализацию, не добавляйте в начальные изображения текст или материал, восприятие которых зависит от языка и региональных стандартов. Изображения, приемлемые в вашей культуре, могут оскорбить представителя другой культуры или быть неправильно им поняты. Избегайте использования культурно-специфичных изображений, например, почтовых ящиков, которые не используются по всему миру. Избегайте использования религиозной символики, изображений животных, изображений на политическую тему или изображений, связанных с половой принадлежностью. Изображения открытых и закрытых частей тела или жестов рук также могут носить деликатный характер. Если все это нельзя исключить из приложения, изображения придется очень продуманно локализовать. Если вы локализуете продукт для языка с отличным от вашего направлением чтения, использование симметричных изображений и эффектов упростит поддержку зеркалирования.

Также не следует использовать текст на изображениях и речь в аудио/видео файлах.

Использование цвета в приложении

При использовании цвета следует учитывать определенные факторы. Использование комбинаций цветов, вызывающих ассоциации с национальными флагами или политическими движениями может быть спорным решением. При выборе цвета рекомендуется посоветоваться с культурологом. Также при выборе цветов следует учитывать, что пользователю должно быть понятно, для чего был использован конкретный цвет. Если цвет используется для передачи смысла, вы должны передать этот же смысл, используя некоторые другие средства, такие как размер, форма или метка.

Рассмотрите возможность разложения строк на предложения

Используйте строки подходящего размера. Короткие строки легче переводить и это позволяет использовать перевод повторно и, как следствие, сократить расходы, так как одна и та же строка не передается лицу, отвечающему за локализацию, несколько раз. Кроме того, слишком длинные строки могут не поддерживаться средствами для локализации.

Однако в противоречие с этим правилом одна и та же строка может быть использована в разных контекстах. Даже простые слова, такие как "on" и "off", могут переводиться по-разному в зависимости от контекста. В английском языке on и off можно использовать при обозначении переключения в режим "В самолете", включения или отключения Bluetooth, а также других устройств. Для итальянского же языка перевод будет зависеть от того, что именно включается или выключается. Поэтому нужно будет создать пару строк для каждого контекста. В одинаковых контекстах можно использовать одинаковые строки. Например, можно использовать строку Volume (Громкость) для обозначения как громкости звуковых эффектов, так и громкости музыки, поскольку и то, и другое отражает мощность звука. Однако не следует использовать эту же строку, когда речь идет о томе жесткого диска (hard disk volume), поскольку в этом случае контекст и значение другие и слово может быть переведено неправильно.

Также в английском языке строки наподобие text или fax могут использоваться и как существительное, и как глагол, что может привести к путанице во время перевода. Поэтому создавайте отдельные строки для обоих вариантов использования слов. Если вы не уверены, одинаковы ли контексты, для верности используйте отдельную строку.

Одним словом, рекомендуется разбивать строки на части, которые можно будет использовать в любых контекстах. Будут случаи, когда одна строка должна будет представлять собой целое предложение.

Рассмотрим следующую строку: "Не {0} удалось синхронизировать".

Различные слова могут заменять {0}, например "appointment", "task" или "document". Подобная замена возможна в английском языке, но в немецком для соответствующего предложения выполнима не всегда. Обратите внимание, что в приведенных ниже предложениях на немецком некоторые слова в строке шаблона (Der, Die, Das) должны соответствовать параметризованному слову:

Английский Немецкий
The appointment could not be synchronized. (Не удалось синхронизировать встречу.) Der Termin konnte nicht synchronisiert werden.
The task could not be synchronized. (Не удалось синхронизировать задачу.) Die Aufgabe konnte nicht synchronisiert werden.
The document could not be synchronized. (Не удалось синхронизировать документ.) Das Dokument konnte nicht synchronisiert werden.

В качестве другого примера рассмотрим предложение "Напомнить мне через {0} минуты". Использование минут подходит для английского языка, но в других языках могут использоваться другие термины. Например, в польском в зависимости от контекста используются слова minuta, minuty или minut.

Для решения подобной проблемы локализуйте не отдельные слова, а предложение полностью. Может показаться, что это неэлегантное решение, требующее выполнения лишней работы, но на самом деле это решение является лучшим по следующим соображениям.

  • Грамматически правильное сообщение будет выводиться для всех языков.
  • Переводчику не нужно будет узнавать, какие строки чем заменяются.
  • Вам не нужно будет тратить средства на исправление кода для готового приложения в случае возникновения подобной ситуации.

Другие рекомендации для строк

Не следует использовать разговорные слова и выражения, а также метафоры в строках, которые вы создаете на языке по умолчанию. Язык, характерный для определенной демографической группы, например культурной или возрастной, может быть труден для понимания и перевода, так как используется только внутри этой группы. Метафоры могут быть поняты одним человеком и не поняты другим. Например, "bluebird" означает что-то конкретное для тех, кто является частью лыжной культуры, но те, кто не является частью этой культуры, не понимают ссылку.

Не используйте профессиональный жаргон, аббревиатуры и акронимы. Технический язык вряд ли будет понятен неспециалистам и представителям других культур и регионов, он также труден для перевода. Люди не используют подобные слова при повседневном общении. Технический язык часто используется в сообщениях об ошибках для идентификации проблем с оборудованием и программным обеспечением, однако, технический язык следует использовать в строках, только в том случае, если пользователь нуждается в таком уровне информации и может использовать ее для выполнения необходимого действия либо может обратиться за помощью к лицу, которому она понятна.

Использование неформального стиля речи в строках является допустимым выбором. Чтобы указать причину его использования, можно использовать комментарии в вашем файле ресурсов (.resw) по умолчанию.

Псевдолокализация

Псевдолокализация приложения выполняется для выявления проблем локализации. Псевдолокализация представляет собой что-то вроде проверочной локализации или теста для обнаружения проблем. Для этого создается набор ресурсов, которые фактически не переводятся, а только выглядят переведенными. Например, в этом случае длина строк увеличивается примерно на 40% по сравнению с длиной строк на языке по умолчанию и они содержат разделители. Таким образом можно сразу определить, усекаются ли они в пользовательском интерфейсе.

Требования к развертыванию

При установке приложения, содержащего локализованные языковые данные, может оказаться, что для приложения доступен только язык по умолчанию, даже если изначально были включены ресурсы для нескольких языков. Это связано с тем, что процесс установки оптимизирован для установки только языковых ресурсов, соответствующих текущему языку и региональным параметрам устройства. Таким образом, если устройство настроено для en-US, вместе с приложением устанавливаются только языковые ресурсы en-US.

Примечание

Невозможно установить дополнительную языковую поддержку приложения после начальной установки. Если после установки приложения изменить язык по умолчанию, приложение продолжит использовать только исходные языковые ресурсы.

Если вы хотите убедиться, что все языковые ресурсы доступны после установки, создайте файл конфигурации для пакета приложения, который указывает, что во время установки требуются определенные ресурсы (включая языковые ресурсы). Эта оптимизированная функция установки автоматически включается при создании appxbundle приложения во время упаковки. Дополнительные сведения см. в разделе Обеспечение установки ресурсов на устройстве независимо от того, требуются ли они устройству.

При необходимости, чтобы убедиться, что установлены все ресурсы (а не только подмножество), можно отключить создание appxbundle при упаковке приложения. Однако это не рекомендуется, так как это может увеличить время установки приложения.

Отключите автоматическое создание appxbundle, задав для атрибута "Generate App Bundle" значение "never":

  1. В Visual Studio щелкните правой кнопкой мыши имя проекта.
  2. Выберите Магазин ->Создать пакеты приложений...
  3. В диалоговом окне Создание пакетов выберите Я хочу создать пакеты для отправки в Microsoft Store с помощью нового имени приложения , а затем нажмите кнопку Далее.
  4. В диалоговом окне Выбор имени приложения выберите или создайте имя приложения для пакета.
  5. В диалоговом окне Выбор и настройка пакетов установите для параметра Создать пакет приложений значение Никогда.

Учет геополитических особенностей

Избегайте оскорбления национальных чувств при использовании карт или упоминании регионов. Карты могут включать спорные региональные или национальные границы, они часто бывают причиной оскорбления национальных чувств. Будьте внимательны, чтобы любой пользовательский интерфейс, используемый для выбора нации, называется страной или регионом. Перечисление спорной территории в списке с меткой "страны" (например, в форме адреса) может оскорбить некоторых пользователей.

События при изменении языка и региона

Подпишитесь на события, вызываемые при изменении языковых и региональных параметров системы. Это необходимо для того, чтобы вы могли повторно загружать ресурсы, когда потребуется. Дополнительные сведения см. в разделах Обновление строк в качестве реакции на события изменения значений квалификаторов и Обновление изображений в качестве реакции на события изменения значений квалификаторов.

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

В разных языках порядок следования параметров может отличаться. Например, рассмотрим следующий формат.

    string.Format("Every {0} {1}", monthName, dayNumber); // For example, "Every April 1".

Строка формата в этом примере ориентирована на английский язык (США). Однако она, к примеру, не подходит для немецкого языка, в котором день и месяц отображаются в обратном порядке. Убедитесь, что переводчик знает назначение каждого из параметров, чтобы он смог изменить порядок элементов формата в строке формата (например, "{1}{0}") в соответствии с целевым языком.

Не допускайте излишней локализации

Отправляйте переводчикам строки на естественном языке; не на языке программирования или языке разметки. Тег <link> — не относится к естественному языку. Рассмотрим следующие примеры.

Локализация не требуется Локализация требуется
<link>terms of use</link> условия использования
<link>privacy policy</link> политика конфиденциальности

Добавление тега <link> в файл ресурсов (.resw) означает, что он, скорее всего, тоже будет переведен. Так он станет нерабочим. При наличии длинных строк, в которые нужно добавить разметку для сохранения контекста и порядка, укажите в комментариях, что не нужно переводить.

Выбирайте правильный подход к осуществлению перевода

После размещения строк в файле ресурсов можно начинать их перевод. Наилучшее время для перевода строк — когда их формирование в вашем проекте завершено, а это обычно бывает ближе к концу проекта. Перевод может быть выполнен несколькими способами. При этом учитываются такие факторы, как объем переводимых строковых ресурсов, количество языков, на которые осуществляется перевод, и то, каким образом выполняется перевод (например, собственными силами или с привлечением внешнего подрядчика).

Рассмотрите эти варианты.

  • Файлы ресурсов могут быть переведены непосредственно внутри проекта. Этот вариант лучше всего подойдет для проекта с небольшим объемом строковых ресурсов, который нужно перевести на два или три языка. Это подходящий вариант для случая, когда разработчик владеет несколькими языками и готов сам организовать процесс перевода. Преимущества этого подхода: быстрота; не требуется специализированного программного обеспечения для перевода; минимален риск неправильного перевода. Недостаток: процесс не является масштабируемым. В частности, может легко теряться синхронизация между ресурсами на разных языках, что портит впечатление от использования приложения и ухудшает его обслуживание.
  • Файлы строковых ресурсов имеют текстовый формат XML или ResJSON и поэтому могут быть переведены с помощью любого текстового редактора. Затем переведенные файлы копируются обратно в проект. При таком подходе есть риск, что переводчик может случайно изменить теги XML, но зато работа по переводу происходит вне проекта Microsoft Visual Studio. Этот вариант подходит для проектов, которые нужно перевести на небольшое количество языков. XLIFF — это формат XML, специально разработанный для использования в проектах по локализации; он используется рядом переводческих компаний и поддерживается некоторыми средствами для локализации. Для создания XLIFF-файлов из других файлов ресурсов (например, .resw или .resjson) можно использовать набор средств для многоязычных приложений.

Примечание

Локализация также может потребоваться для других ресурсов, включая изображения и звуковые файлы.

Также следует учитывать следующее:

  • Средства локализации Для синтаксического анализа файлов ресурсов доступен ряд средств локализации, которые позволяют переводчикам редактировать только переводимые строки. Этот подход снижает вероятность случайного редактирования тегов XML переводчиком. Недостаток состоит в необходимости применения во время локализации нового инструмента и процесса. Средство для локализации удобно применять для проектов с большими объемами строковых ресурсов, но с небольшим количеством языков, на которые осуществляется перевод. Подробнее см. в разделе Использование набора средств для многоязычных приложений.
  • Поставщики локализации Рассмотрите возможность использования поставщика локализации, если ваше приложение содержит обширные строки, которые необходимо перевести на большое количество языков. Компания-локализатор может дать рекомендации по процессу и средствам локализации, а также предоставить услуги по переводу ваших файлов ресурсов. Такое решение — наилучшее, но одновременно и самое дорогое. Кроме того, в этом случае для переводимых данных увеличивается время от начала разработки до выпуска.

Используйте клавиши доступа и метки единообразно

Проблемой при локализации является синхронизация клавиш доступа, использующихся в специальных возможностях, с отображением локализованных клавиш доступа, так как два этих строковых ресурса классифицируются по-разному. Обязательно предоставьте комментарии к строке метки, например: Make sure that the emphasized shortcut key is synchronized with the access key.

Включайте поддержку фуриганы для строк на японском языке, которые могут подвергаться сортировке

В японском языке символы кандзи обладают свойством произноситься по-разному в зависимости от слова или контекста, в которых они используются. Это может привести к проблемам при попытке сортировки объектов с именами на японском языке, например названий приложений, файлов, песен и т. д. Ранее слова на кандзи по умолчанию сортировались с помощью машинного порядка сортировки, который назывался XJIS. Но, к сожалению, такой порядок сортировки не учитывает фонетику, поэтому плохо подходит для использования.

Фуригана решает эту проблему, позволяя пользователю или создателю указать фонетику для символов, которые они используют. Используя следующую процедуру добавления фуриганы к имени вашего приложения, вы обеспечите его правильное расположение в списке приложений при сортировке. Если название вашего приложения содержит символы кандзи и фуригана отсутствует, а язык пользовательского интерфейса или порядок сортировки — японский, Windows старается наилучшим образом создать правильное произношение. Тем не менее есть вероятность, что названия приложений, имеющие редкие или уникальные прочтения, будут отсортированы по более общим правилам чтения. Поэтому в рамках процесса локализации японских приложений (особенно если их имена содержат символы кандзи) рекомендуется предоставлять версию имен приложений с использованием символов фуриганы.

  1. Добавьте ms-resource:Appname как отображаемое имя пакета и отображаемое имя приложения.

  2. Создайте папку ja-JP в разделе «strings» и добавьте два файла ресурсов следующим образом:

    strings\
        en-us\
        ja-jp\
            Resources.altform-msft-phonetic.resw
            Resources.resw
    
  3. В Resources.resw для общей папки ja-JP: добавьте строковый ресурс для Appname 希蒼.

  4. В Resources.altform-msft-phonetic.resw для японоязычных ресурсов с символами фуриганы: добавьте значение фуриганы для AppName "のあ".

Пользователь может выполнять поиск имени приложения 希蒼, используя как значение фуриганы のあ (noa), так и фонетическое значение (используя функцию GetPhonetic из редактора метода ввода (IME)) まれあお (mare-ao).

Сортировка выполняется по формату, установленному на региональной панели управления:

  • Если установлены японские региональные параметры пользователя
    • Если включена фуригана, 希蒼 сортируется по の.
    • Если фуригана отсутствует, 希蒼 сортируется по ま.
  • Если установлены не японские региональные параметры пользователя
    • Если включена фуригана, 希蒼 сортируется по の.
    • Если фуригана отсутствует, 希蒼 сортируется по 漢字.

Примеры