Рекомендации по разработке международных приложений

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

В этом разделе описаны рекомендации по разработке международных приложений.

Рекомендации по глобализации

  1. Используйте Юникод в качестве внутреннего стандарта приложения.

  2. Для управления данными и их форматирования необходимо использовать классы, учитывающие язык и регион, которые представлены в пространстве имен System.Globalization.

    • Для сортировки используйте классы SortKey и CompareInfo.

    • Для сравнения строк используйте класс CompareInfo.

    • Для форматирования даты и времени используйте класс DateTimeFormatInfo.

    • Для форматирования чисел используйте класс NumberFormatInfo.

    • Для григорианских и иных календарей используйте класс Calendar или одну из конкретных реализаций Calendar.

  3. В соответствующих ситуациях необходимо использовать настройки языка и региональных параметров, предоставленные классом System.Globalization.CultureInfo. Для задач форматирования, например форматирования даты и времени или чисел, необходимо использовать свойство CultureInfo.CurrentCulture. Для извлечения ресурсов используйте свойство CultureInfo.CurrentUICulture. Обратите внимание, что свойства CurrentCulture и CurrentUICulture могут быть заданы для потока.

  4. В приложении необходимо обеспечить возможность считывания и записи данных в различных кодировках. Для этого используются классы кодировок из пространства имен System.Text. Не рекомендуется использовать данные в формате ASCII. Следует обеспечить ввод пользователем текста с использованием символов в международном формате. Например, рекомендуется использовать символы в международном формате в названиях серверов, каталогов, именах файлов и в URL-адресах.

  5. При использовании класса UTF8Encoding в целях безопасности рекомендуется включить функцию обнаружения ошибок, предоставляемую этим классом. Чтобы включить функцию обнаружения ошибок, необходимо создать экземпляр класса с использованием конструктора, принимающего параметр throwOnInvalidBytes, и установить для throwOnInvalidBytes значение true.

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

  7. Для отображения текста следует использовать классы из пространства имен System.Drawing.

  8. Для совместимости с разными операционными системами не следует допускать переопределения CultureInfo пользователем. Используйте конструктор CultureInfo, принимающий параметр useUserOverride и устанавливающий для него значение false.

  9. Следует протестировать приложение на международных версиях операционных систем с использованием международных данных.

  10. Если решение, влияющее на безопасность, основано на результате операции сравнения строк или изменения регистра, следует выполнять эти операции без учета языка и региона посредством явного задания свойства CultureInfo.InvariantCulture. Это гарантирует, что на результат не повлияет значение свойства CultureInfo.CurrentCulture. Пример, показывающий возникновение несогласованных результатов при выполнении не зависящих от языка и региона операций сравнения строк, см. в разделе Пользовательские правила сопоставления регистра и сортировки.

Рекомендации по локализации

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

  2. Не следует жестко кодировать строки или ресурсы пользовательского интерфейса.

  3. Не следует помещать нелокализуемые ресурсы в библиотеки DLL, содержащие только ресурсы. Это может вызвать сложности при переводе.

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

  5. Следует избегать неоднозначных конструкций, например "Empty Folder", в которых строки могут быть переведены различным образом в зависимости от грамматический роли входящих в них компонентов. Например, "empty" может быть глаголом "очистить" или прилагательным "пустая", что может привести к различным переводам такой фразы на такие языки, как французский или итальянский.

  6. Не следует использовать в приложении изображения и значки, содержащие текст. При их локализации могут возникнуть трудности.

  7. Следует выделять достаточно памяти на случай увеличения длины строк в интерфейсе пользователя. В некоторых языках длина фраз может увеличиться на 50 – 75 процентов.

  8. Для извлечения ресурсов для конкретного языка и региона следует использовать класс System.Resources.ResourceManager.

  9. Следует использовать Microsoft Visual Studio 2005 для создания диалоговых окон форм Windows Forms, что позволяет выполнить их локализацию с помощью редактора ресурсов Windows Forms (Winres.exe). Не следует кодировать диалоговые окна форм Windows Forms вручную.

  10. Следует систематизировать создаваемое приложение с учетом возможности профессиональной локализации (перевода).

  11. Полное описание технологии создания и локализации ресурсов см. в разделе Ресурсы приложений.

Рекомендации по глобализации приложений ASP.NET

  1. В приложении следует явно задать свойства CurrentUICulture и CurrentCulture. Не следует полагаться на настройки по умолчанию.

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

  3. Следует помнить, что в ASP.NET можно определить следующие три типа кодировок:

    • requestEncoding определяет кодировку данных, получаемых от обозревателя клиента;

    • responseEncoding определяет кодировку данных, передаваемых в обозреватель клиента. В большинстве случаев она должна соответствовать кодировке requestEncoding;

    • fileEncoding определяет кодировку по умолчанию, используемую для анализа файлов .aspx, .asmx и .asax.

  4. Следует задать значения для атрибутов requestEncoding, responseEncoding, fileEncoding, culture и uiCulture в следующих трех местах в приложении ASP.NET.

    • В разделе глобализации файла Web.config. Это внешний файл приложения ASP.NET. Дополнительные сведения см. в разделе Элемент <globalization>.

    • В директиве страницы. Обратите внимание, что, когда приложение находится на странице, файл уже считан. Следовательно, уже поздно задавать атрибуты fileEncoding и requestEncoding. В директиве страницы могут задаваться только атрибуты uiCulture, Culture и responseEncoding.

    • Программно в коде приложения. Эта настройка может изменяться для различных запросов. Как и в случае с директивой страницы, при передаче управления коду приложения слишком поздно задавать атрибуты fileEncoding и requestEncoding. В коде приложения могут задаваться только атрибуты uiCulture, Culture и responseEncoding.

  5. Обратите внимание, что для uiCulture может быть задан язык, принимаемый обозревателем. Дополнительные сведения см. в разделе Примеры использования ASP.NET – пример работы с ресурсами.

См. также

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

Ресурсы в приложениях

Другие ресурсы

Шифрование и локализация