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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Рекомендации по глобализации приложений 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 может быть задан язык, установленный в браузере.

См. также