Определение локали

Flash Player 10.1 и более поздних версий, Adobe AIR 2.0 и более поздних версий

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

Идентификатором локали можно безопасно управлять как строкой. Но можно использовать класс LocaleID для получения дополнительной информации, относящейся к локали.

Объект LocaleID создается следующим образом:

var locale:LocaleID = new LocaleID("es-MX");

После создания объекта LocaleID можно получить данные об идентификаторе локали. Для этого следует использовать методы getKeysAndValues() , getLanguage() , getRegion() , getScript() , getVariant() , isRightToLeft() и свойство name .

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

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

Сначала проигрыватель Flash Player пытается сопоставить код языка запрошенной локали. Затем предпринимается попытка уточнения локали путем нахождения соответствующего набора правил правописания и региона. Например:

var loc:LocaleID = new LocaleID("es"); 
trace(loc.getLanguage()); // es 
trace(loc.getScript()); // Latn 
trace(loc.getRegion()); // ES

В этом примере конструктор LocaleID() получает данные о локали, которая лучше всего соответствует запрошенному коду языка es для данного пользователя.

Установка идентификатора локали

Существует несколько способов установки текущей локали для приложения, включая:

  • Жесткое кодирование одного идентификатора локали в приложении. Это общий подход, однако он не поддерживает интернационализацию приложения.

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

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

Этот вариант можно реализовать следующим образом:

  1. Получите список предпочитаемых пользователем локалей или языков из профиля пользователя, настроек браузера, настроек операционной системы или файла cookie. (В приложении необходимо самостоятельно реализовать этот алгоритм. Библиотека flash.globalization не поддерживает прямое чтение этих настроек.)

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

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

Ограничение на другие локали и классы языков

Класс fl.lang.Locale позволяет заменить текстовые строки на основе локали с использованием пакетов ресурсов, содержащих строковые значения. Однако этот класс не поддерживает другие функции интернационализации, такие как форматирование чисел, валют или даты, сортировка и сопоставление и т. д. Помимо того, этот класс доступен только в среде Flash Professional.

Можно также получить текущий параметр языкового кода для операционной системы с помощью свойства flash.system.Capabilities.language . Однако при этом извлекается только двухсимвольный языковой код ISO 639-1, а не полный идентификатор локали, и поддерживается только определенный набор локалей.

В AIR 1.5 можно использовать свойство flash.system.Capabilities.languages . Это свойство содержит массив предпочитаемых пользователем языков интерфейса. Таким образом, на него не распространяются ограничения Capabilities.language .