Рекомендации по разработке международных приложенийBest practices for developing world-ready applications

В этом разделе описаны рекомендации по разработке международных приложений.This section describes the best practices to follow when developing world-ready applications.

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

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

  2. Для управления данными и их форматирования необходимо использовать классы, учитывающие язык и регион, которые представлены в пространстве имен System.Globalization.Use the culture-aware classes provided by the System.Globalization namespace to manipulate and format data.

    • Для сортировки используйте классы SortKey и CompareInfo.For sorting, use the SortKey class and the CompareInfo class.

    • Для сравнения строк используйте класс CompareInfo.For string comparisons, use the CompareInfo class.

    • Для форматирования даты и времени используйте класс DateTimeFormatInfo.For date and time formatting, use the DateTimeFormatInfo class.

    • Для форматирования чисел используйте класс NumberFormatInfo.For numeric formatting, use the NumberFormatInfo class.

    • Для григорианского и иных календарей следует использовать класс Calendar или одну из конкретных реализаций календаря.For Gregorian and non-Gregorian calendars, use the Calendar class or one of the specific calendar implementations.

  3. В соответствующих ситуациях необходимо использовать настройки языка и региональных параметров, предоставленные классом System.Globalization.CultureInfo.Use the culture property settings provided by the System.Globalization.CultureInfo class in the appropriate situations. Для задач форматирования, например форматирования даты и времени или чисел, необходимо использовать свойство CultureInfo.CurrentCulture.Use the CultureInfo.CurrentCulture property for formatting tasks, such as date and time or numeric formatting. Для извлечения ресурсов используйте свойство CultureInfo.CurrentUICulture.Use the CultureInfo.CurrentUICulture property to retrieve resources. Обратите внимание, что свойства CurrentCulture и CurrentUICulture можно задавать на уровне отдельных потоков.Note that the CurrentCulture and CurrentUICulture properties can be set per thread.

  4. В приложении необходимо обеспечить возможность считывания и записи данных в различных кодировках. Для этого используются классы кодировок из пространства имен System.Text.Enable your application to read and write data to and from a variety of encodings by using the encoding classes in the System.Text namespace. Не рекомендуется использовать данные в формате ASCII.Do not assume ASCII data. Следует обеспечить ввод пользователем текста с использованием символов в международном формате.Assume that international characters will be supplied anywhere a user can enter text. Например, приложение должно поддерживать использование символов в международном формате в именах серверов, каталогов, файлов, пользователей и в URL-адресах.For example, the application should accept international characters in server names, directories, file names, user names, and URLs.

  5. При использовании класса UTF8Encoding в целях безопасности рекомендуется включить возможность обнаружения ошибок, предоставляемую этим классом.When using the UTF8Encoding class, for security reasons, use the error detection feature offered by this class. Чтобы включить возможность обнаружения ошибок, создайте экземпляр класса с использованием конструктора, принимающего параметр throwOnInvalidBytes, и установите для этого параметра значение true.To turn on the error detection feature, create an instance of the class using the constructor that takes a throwOnInvalidBytes parameter and set the value of this parameter to true.

  6. При возможности рекомендуется обрабатывать строки целиком, а не в виде последовательностей отдельных символов.Whenever possible, handle strings as entire strings instead of as a series of individual characters. Это особенно важно при сортировке или поиске подстрок.This is especially important when sorting or searching for substrings. Это поможет избежать ошибок, связанных с обработкой несамостоятельных знаков.This will prevent problems associated with parsing combined characters. Вы можете также работать с единицами текста, а не отдельными символами, с помощью класса System.Globalization.StringInfo.You can also work with units of text rather than single characters by using the System.Globalization.StringInfo class.

  7. Для отображения текста следует использовать классы из пространства имен System.Drawing.Display text using the classes provided by the System.Drawing namespace.

  8. Для совместимости с разными операционными системами не следует допускать переопределения CultureInfo пользователем.For consistency across operating systems, do not allow user settings to override CultureInfo. Воспользуйтесь конструктором CultureInfo, который принимает параметр useUserOverride, и задайте для этого параметра значение false.Use the CultureInfo constructor that accepts a useUserOverride parameter and set it to false.

  9. Протестируйте функциональность приложения в версиях операционных систем на других языках с использованием данных на других языках.Test your application functionality on international operating system versions, using international data.

  10. Если решение системы безопасности принимается на основе результатов операций сравнения строк или изменения регистра, используйте операции без учета языка и региональных параметров.If a security decision is based on the result of a string comparison or case change operation, use a culture-insensitive string operation. Это гарантирует, что значение свойства CultureInfo.CurrentCulture не повлияет на результат.This practice ensures that the result is not affected by the value of CultureInfo.CurrentCulture. Пример строковых операций с учетом языка и региональных параметров, дающих противоречивые результаты, см. в разделе "Сравнение строк с использованием текущего языка и региональных параметров" в списке рекомендаций по использованию строк.See the "String Comparisons that Use the Current Culture" section of Best Practices for Using Strings for an example that demonstrates how culture-sensitive string comparisons can produce inconsistent results.

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

  1. Следует перемещать все локализуемые ресурсы в отдельные библиотеки DLL, содержащие только ресурсы.Move all localizable resources to separate resource-only DLLs. Локализуемые ресурсы включают в себя элементы пользовательского интерфейса, например строки, сообщения об ошибках, диалоговые окна, элементы меню и внедренные объектные ресурсы.Localizable resources include user interface elements, such as strings, error messages, dialog boxes, menus, and embedded object resources.

  2. Не следует жестко кодировать строки или ресурсы пользовательского интерфейса.Do not hardcode strings or user interface resources.

  3. Не следует помещать нелокализуемые ресурсы в библиотеки DLL, содержащие только ресурсы.Do not put nonlocalizable resources into the resource-only DLLs. Это может вызвать сложности при переводе.This causes confusion for translators.

  4. Не следует использовать составные строки, полученные во время выполнения программы при помощи соединения фраз.Do not use composite strings that are built at run time from concatenated phrases. Составные строки трудно локализовать, потому что они часто используют грамматический порядок английского языка, который не может быть применен для всех языков.Composite strings are difficult to localize because they often assume an English grammatical order that does not apply to all languages.

  5. Следует избегать неоднозначных конструкций, например "Empty Folder", в которых строки могут быть переведены различным образом в зависимости от грамматической роли их составляющих.Avoid ambiguous constructs such as "Empty Folder" where the strings can be translated differently depending on the grammatical roles of the string components. Например, слово "empty" может быть как глаголом "очистить", так и прилагательным "пустая", что может привести к различным переводам такой фразы на такие языки, как французский или итальянский.For example, "empty" can be either a verb or an adjective, which can lead to different translations in languages such as Italian or French.

  6. Не следует использовать в приложении изображения и значки, содержащие текст.Avoid using images and icons that contain text in your application. При их локализации могут возникнуть трудности.They are expensive to localize.

  7. Следует выделять достаточно памяти на случай увеличения длины строк в интерфейсе пользователя.Allow plenty of room for the length of strings to expand in the user interface. В некоторых языках длина фраз может увеличиться на 50–75 процентов по сравнению с другими языками.In some languages, phrases can require 50-75 percent more space than they need in other languages.

  8. Для извлечения ресурсов для конкретного языка и региона следует использовать класс System.Resources.ResourceManager.Use the System.Resources.ResourceManager class to retrieve resources based on culture.

  9. Используйте Visual Studio для создания диалоговых окон Windows Forms, чтобы эти диалоговые окна можно было локализовать с помощью редактора ресурсов форм Windows (Winres.exe).Use Visual Studio to create Windows Forms dialog boxes so they can be localized using the Windows Forms Resource Editor (Winres.exe). Не следует кодировать диалоговые окна форм Windows Forms вручную.Do not code Windows Forms dialog boxes by hand.

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

  11. См. дополнительные сведения о создания и локализации ресурсов в приложениях.For a complete description of creating and localizing resources, see Resources in Applications.

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

  1. В приложении следует явно задать свойства CurrentUICulture и CurrentCulture.Explicitly set the CurrentUICulture and CurrentCulture properties in your application. Не следует полагаться на настройки по умолчанию.Do not rely on defaults.

  2. Обратите внимание, что приложения ASP.NET являются управляемыми приложениями и поэтому могут использовать те же классы, что и другие управляемые приложения для извлечения и отображения данных, а также работы с ними в зависимости от языка и региона.Note that ASP.NET applications are managed applications and therefore can use the same classes as other managed applications for retrieving, displaying, and manipulating information based on culture.

  3. Следует помнить, что в ASP.NET можно определить следующие три типа кодировок:Be aware that you can specify the following three types of encodings in ASP.NET:

    • requestEncoding определяет кодировку данных, получаемых от браузера клиента;requestEncoding specifies the encoding received from the client's browser.

    • responseEncoding определяет кодировку данных, передаваемых в браузер клиента.responseEncoding specifies the encoding to send to the client browser. В большинстве случаев эта кодировка должна соответствовать кодировке requestEncoding;In most situations, this encoding should be the same as that specified for requestEncoding.

    • fileEncoding определяет кодировку по умолчанию, используемую для анализа файлов .aspx, .asmx и .asax.fileEncoding specifies the default encoding for .aspx, .asmx, and .asax file parsing.

  4. Следует задать значения для атрибутов requestEncoding, responseEncoding, fileEncoding, culture и uiCulture в следующих трех местах в приложении ASP.NET.Specify the values for the requestEncoding, responseEncoding, fileEncoding, culture, and uiCulture attributes in the following three places in an ASP.NET application:

    • В разделе глобализации файла Web.config.In the globalization section of a Web.config file. Это внешний файл приложения ASP.NET.This file is external to the ASP.NET application. Дополнительные сведения см. в разделе <globalization>Element.For more information, see <globalization> Element.

    • В директиве страницы.In a page directive. Обратите внимание, что когда приложение находится на странице, файл уже считан.Note that, when an application is in a page, the file has already been read. Следовательно, уже поздно задавать атрибуты fileEncoding и requestEncoding.Therefore, it is too late to specify fileEncoding and requestEncoding. В директиве страницы могут задаваться только атрибуты uiCulture, Culture и responseEncoding.Only uiCulture, Culture, and responseEncoding can be specified in a page directive.

    • Программно в коде приложения.Programmatically in application code. Эта настройка может изменяться для различных запросов.This setting can vary per request. Как и в случае с директивой страницы, при передаче управления коду приложения слишком поздно задавать атрибуты fileEncoding и requestEncoding.As with a page directive, by the time the application's code is reached it is too late to specify fileEncoding and requestEncoding. В коде приложения могут задаваться только атрибуты uiCulture, Culture и responseEncoding.Only uiCulture, Culture, and responseEncoding can be specified in application code.

  5. Обратите внимание, что в качестве значения uiCulture может быть задан язык, установленный в браузере.Note that the uiCulture value can be set to the browser accept language.

См. такжеSee also