Пакет | mx.resources |
Интерфейс | public interface IResourceBundle |
Средство реализации | ResourceBundle |
Язык версии: | ActionScript 3.0 |
Версия продукта: | Flex 3 |
Версии среды выполнения: | Flash Player 9, AIR 1.1 |
В локализации используется три основных понятия: языковые стандарты, ресурсы и пакеты ресурсов.
Языковой стандарт указывает язык и страну, для которой было локализовано приложение. Например, языковой стандарт en_US
указывает английский язык в качестве разговорного в США. (Для получения дополнительной информации см. класс mx.resources.Locale.)
Ресурс – это именованное значение, зависящее от языкового стандарта. Например, приложение имеет ресурс с именем OPEN
. Значение ресурса для английского языкового стандарта – Open
, а для французского языкового стандарта это значение – Ouvrir
.
Пакет ресурсов – это именованная группа ресурсов, значения которых были локализованы для определенного языкового стандарта. Пакет ресурсов определяется комбинацией bundleName
и locale
, а также имеет объект content
, содержащий пары имя-значение для ресурсов пакета.
Интерфейс IResourceBundle представляет определенный пакет ресурсов. Однако большинство приложений будут использовать только IResourceManager. Одиночный объект ResourceManager, реализующий этот интерфейс, управляет несколькими пакетами ресурсов, в том числе для нескольких языковых стандартов, и предоставляет доступ к содержащимся в них ресурсам. Например, можно извлечь определенный ресурс как строку путем вызова resourceManager.getString(bundleName, resourceName)
. Путем изменения свойства localeChain
ResourceManager можно указать пакеты ресурсов, в которых будет выполняться поиск значений ресурсов.
Как правило, пакеты ресурсов не создаются вручную; обычно они компилируются из файлов *.properties. Файл свойств с именем MyResources.properties создает пакет ресурсов со значением MyResources
для свойства bundleName
. Как правило, создается несколько версий каждого файла свойств (по одной версии для каждого языкового стандарта, поддерживаемого приложением).
Файлы свойств Flex подобны файлам свойств Java, за исключением того, что они также поддерживают директивы MXML Embed()
и ClassReference()
. В файле свойств эти директивы функционируют аналогично тому, как они функционируют в файле CSS, создавая ссылки на классы. Кроме того, предполагается, что кодировка файлов свойств Flex всегда равна UTF-8.
Ресурсы инфраструктуры Flex были локализованы для американского английского языка (языковой стандарт en_US
) и для японского языка (языковой стандарт ja_JP
). Ресурсы инфраструктуры объединены в несколько пакетов, соответствующих пакетам инфраструктуры; например, пакет formatters используется классами пакета mx.formatters. (Существует также пакет SharedResources для ресурсов, используемых несколькими пакетами.)
Файлы свойств для ресурсов инфраструктуры, например formatters.properties, находятся в каталогах Flex SDK frameworks/projects/framework/bundles/{locale}/src. Как правило, приложения создают ссылку на инфраструктуры Flex в виде предварительно скомпилированной библиотеки framework.swc в каталоге frameworks/libs. Эта библиотека не содержит ресурсов. Вместо этого ресурсы инфраструктуры были скомпилированы в отдельные библиотеки пакетов ресурсов, например framework_rb.swc. Они расположены в каталогах frameworks/locales/{locale}, и приложение также должно создать ссылку на один или более из них.
Собственные ресурсы приложения можно объединять в любые удобные пакеты. При локализации приложения для языковых стандартов, отличных от en_US
и ja_JP
, необходимо также локализовать файлы свойств инфраструктуры для этих языковых стандартов и скомпилировать для них дополнительные библиотеки пакетов ресурсов.
При запуске приложения ResourceManager автоматически заполняется любыми пакетами ресурсов, которые были скомпилированы в приложение. По умолчанию при создании модуля кода ресурсы, необходимые для его классов, компилируются в модуль. При загрузке модуля в приложение любые пакеты, которых еще нет в приложении, добавляются в ResourceManager.
Можно скомпилировать «модули ресурсов», содержащие только ресурсы, и загрузить их с помощью метода loadResourceModule()
интерфейса ResourceManager. С помощью модулей ресурсов можно обеспечить поддержку несколько языковых стандартов путем загрузки необходимых ресурсов во время выполнения вместо компиляции их в приложение.
Несмотря на то что обычно ResourceManager заполняется пакетами ресурсов, которые были скомпилированы в приложение или загружены из модулей, пакеты ресурсов можно также создавать программным путем и самостоятельно добавлять их к ResourceManager при помощи метода addResourceBundle()
.
Связанные элементы API
Свойство | Определено | ||
---|---|---|---|
bundleName : String [только для чтения]
Имя, определяющее этот пакет ресурсов, например MyResources. | IResourceBundle | ||
content : Object [только для чтения]
Объект, содержащий пары ключ-значение для ресурсов этого пакета ресурсов. | IResourceBundle | ||
locale : String [только для чтения]
Языковой стандарт, для которого были локализованы ресурсы этого пакета. | IResourceBundle |
bundleName | свойство |
bundleName:String
[только для чтения] Язык версии: | ActionScript 3.0 |
Версия продукта: | Flex 3 |
Версии среды выполнения: | Flash Player 9, AIR 1.1 |
Имя, определяющее этот пакет ресурсов, например MyResources
.
Это свойство, доступное только для чтения, настраивается при создании пакета ресурсов.
Пакеты ресурсов, автоматически создаваемые из компилируемых файлов свойств, имеют имена пакетов, основанные на именах этих файлов. Например, файл свойств с именем MyResources.properties создаст пакет ресурсов, свойство bundleName
которого будет иметь значение MyResources
.
ResourceManager может управлять несколькими пакетами с одинаковыми bundleName
до тех пор, пока их свойства locale
имеют различные значения.
Реализация
public function get bundleName():String
content | свойство |
content:Object
[только для чтения] Язык версии: | ActionScript 3.0 |
Версия продукта: | Flex 3 |
Версии среды выполнения: | Flash Player 9, AIR 1.1 |
Объект, содержащий пары ключ-значение для ресурсов этого пакета ресурсов.
Как правило, для доступа к ресурсам необходимо использовать методы IResourceManager, например getString()
, а не обращаться к ним непосредственно в пакете ресурсов. Однако при создании программным путем собственных пакетов ресурсов можно инициализировать их вместе с ресурсами следующим образом:
var rb:IResourceBundle = new ResourceBundle("fr_FR", "MyResources"); rb.content["LANGUAGE"] = "Francais"; rb.content["GREETING"] = "Bonjour";
Если пакет ресурса создается путем компиляции файла свойств, то значения ресурсов имеют тип «Строка» или тип «Класс». Например, если файл свойств содержит
LANGUAGE=English MINIMUM_AGE=18 ENABLED=true LOGO=Embed("logo.png")
то значением ресурса LANGUAGE
является строка English
, значением ресурса MINIMUM_AGE
– строка 18
, значением ресурса ENABLED
– строка true
и значением ресурса LOGO
– класс, представляющий встроенный файл PNG.
Для преобразования таких строк ресурса, как 18
и true
в тип, ожидаемый кодом, необходимо использовать методы IResourceManager, например getInt()
и getBoolean()
.
Реализация
public function get content():Object
locale | свойство |
locale:String
[только для чтения] Язык версии: | ActionScript 3.0 |
Версия продукта: | Flex 3 |
Версии среды выполнения: | Flash Player 9, AIR 1.1 |
Языковой стандарт, для которого были локализованы ресурсы этого пакета. Это строка, например en_US
для американского английского языка.
Это свойство, доступное только для чтения, настраивается при создании пакета ресурсов.
Пакеты ресурсов, автоматически создаваемые из компилируемых файлов свойств, имеют языковые стандарты, основанные на параметре -compiler.locale
компиляторов mxmlc или compc. Предположим, что приложение компилируется с параметром -compiler.locale=en_US, ja_JP
, и указан параметр -compiler.source-path=resources/{locale}
, чтобы были найдены ресурсы приложения, расположенные в папках resources/en_US/MyResources.properties и resources/ja_JP/MyResources.properties,. Таким образом, приложение будет иметь два пакета ресурсов, в которых свойства bundleName
имеют значение MyResources
. При этом в одном пакете свойство locale
будет иметь значение en_US
, а в другом пакете свойство locale
будет иметь значение ja_JP
.
Реализация
public function get locale():String
Tue Jun 12 2018, 11:34 AM Z