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


Сделать приложение локализуемым

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Английский Немецкий
Не удалось синхронизировать встречу. Der Termin konnte nicht synchronisiert werden.
Не удалось синхронизировать задачу. Die Aufgabe konnte nicht synchronisiert werden.
Не удалось синхронизировать документ. Das Dokument konnte nicht synchronisiert werden.

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

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

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

Другие аспекты строк

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

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

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

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

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

Рекомендации по развертыванию

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

Замечание

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

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

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

Отключите автоматическое создание .appxbundle, установив атрибут "Создать пакет приложений" в значение "никогда":

  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> условия использования
<ссылка на>политику конфиденциальности</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.

Поддержка furigana для японских строк, которые можно отсортировать

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

Furigana работает над этой проблемой, позволяя пользователю или создателю указать фонетики для символов, которые они используют. Если вы используете следующую процедуру для добавления фуриганы в имя приложения, вы можете удостовериться, что приложение будет правильно отсортировано в списке приложений. Если в названии приложения используются символы кандзи и фуригана не предоставляется, когда язык пользовательского интерфейса или порядок сортировки установлен на японский, 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: добавьте строковый ресурс для названия приложения "希蒼".

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

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

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

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

Образцы