blob: 74c0304df84868e0382b243a0191d1d841077b5a [file] [log] [blame]
////////////////////////////////////////////////////////////////////////////////
//
// Licensed to the Apache Software Foundation (ASF) under one or more
// contributor license agreements. See the NOTICE file distributed with
// this work for additional information regarding copyright ownership.
// The ASF licenses this file to You under the Apache License, Version 2.0
// (the "License"); you may not use this file except in compliance with
// the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
////////////////////////////////////////////////////////////////////////////////
package mx.resources
{
/**
* The IResourceBundle and IResourceManager interfaces work together
* to provide localization support for Flex applications.
*
* <p>There are three main concepts involved in localization:
* locales, resources, and resource bundles.</p>
*
* <p>A locale specifies a language and a country
* for which your application has been localized.
* For example, the locale <code>"en_US"</code>
* specifies English as spoken in the United States.
* (See the mx.resources.Locale class for more information.)</p>
*
* <p>A resource is a named value that is locale-dependent.
* For example, your application might have a resource
* whose name is <code>"OPEN"</code>
* and whose value for an English locale is <code>"Open"</code>
* but whose value for a French locale is <code>"Ouvrir"</code>.</p>
*
* <p>A resource bundle is a named group of resources
* whose values have been localized for a particular locale.
* A resource bundle is identified by the combination of its
* <code>bundleName</code> and its <code>locale</code>,
* and has a <code>content</code> Object that contains
* the name-value pairs for the bundle's resources.</p>
*
* <p>The IResourceBundle interface represents a specific resource bundle.
* However, most applications will only need to use IResourceManager.
* A single ResourceManager object implementing this interface
* manages multiple resource bundles, possibly for multiple locales,
* and provides access to the resources that they contain.
* For example, you can retrieve a specific resource as a String by calling
* <code>resourceManager.getString(bundleName, resourceName)</code>.
* By changing the <code>localeChain</code> property of the ResourceManager,
* you can change which resource bundles are searched for resource values.</p>
*
* <p>Generally, you do not create resource bundles yourself;
* instead, they are usually compiled from ~~.properties files.
* A properties file named MyResources.properties
* produces a resource bundle with <code>"MyResources"</code>
* for its <code>bundleName</code>.
* You generally produce multiple versions of each properties file,
* one for each locale that your application supports.</p>
*
* <p>Flex properties files are similar to Java properties files,
* except that they also support MXML's <code>Embed()</code>
* and <code>ClassReference()</code> directives.
* These directives work the same way in a properties file
* as they do in a CSS file, producing class references.
* Also, the encoding for Flex properties files
* is always assumed to be UTF-8.</p>
*
* <p>The Flex framework's resources have been localized
* for U.S. English (the <code>"en_US"</code> locale) and
* for Japanese (the <code>"ja_JP"</code> locale).
* The framework resources are organized into multiple bundles
* corresponding to framework packages; for example, the "formatters"
* bundle is used by classes in the mx.formatters package.
* (There is also a "SharedResources" bundle for resources used by
* multiple packages.)</p>
*
* <p>The properties files for the framework resources,
* such as formatters.properties, can be found in the
* frameworks/projects/framework/bundles/{locale}/src directories
* of the Flex SDK.
* Your applications normally link against the Flex framework
* as a precompiled library, framework.swc,
* in the frameworks/libs directory.
* This library has no resources in it.
* Instead, the framework resources have been compiled into separate
* resource bundle libraries such as framework_rb.swc.
* These are located in the frameworks/locales/{locale} directories
* and your application must also link in one or more of these.</p>
*
* <p>You are free to organize your application's own resources
* into whatever bundles you find convenient.
* If you localize your application for locales
* other than <code>"en_US"</code> and <code>"ja_JP"</code>,
* you should localize the framework's properties files for those locales
* as well and compile additional resource bundle libaries for them.</p>
*
* <p>When your application starts, the ResourceManager is automatically
* populated with whatever resource bundles were compiled
* into the application.
* If you create a code module, by default the resources that its classes
* need are compiled into the module.
* When the module is loaded into an application, any bundles that the
* application does not already have are added to the ResourceManager.</p>
*
* <p>You can compile "resource modules" that have only resources in them,
* and load them with the <code>loadResourceModule()</code> method
* of the ResourceManager.
* With resource modules, you can support multiple locales by loading
* the resources you need at run time rather than compiling them into
* your application.</p>
*
* <p>Although the ResourceManager is normally populated with resource bundles
* that were compiled into your application or loaded from modules,
* you can also programmatically create resource bundles and add them
* to the ResourceManager yourself with the <code>addResourceBundle()</code>
* method.</p>
*
* @see mx.resources.ResourceBundle
* @see mx.resources.IResourceManager
* @see mx.resources.ResourceManager
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
public interface IResourceBundle
{
//--------------------------------------------------------------------------
//
// Properties
//
//--------------------------------------------------------------------------
//----------------------------------
// bundleName
//----------------------------------
/**
* A name that identifies this resource bundle,
* such as <code>"MyResources"</code>.
*
* <p>This read-only property is set
* when a resource bundle is constructed.</p>
*
* <p>Resource bundles that are automatically created from compiled
* properties files have bundle names based on the names of those files.
* For example, a properties file named MyResources.properties
* will produce a resource bundle whose <code>bundleName</code>
* is <code>"MyResources"</code>.</p>
*
* <p>The ResourceManager can manage multiple bundles with the same
* <code>bundleName</code> as long as they have different values
* for their <code>locale</code> property.</p>
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
function get bundleName():String;
//----------------------------------
// content
//----------------------------------
/**
* An object containing key-value pairs for the resources
* in this resource bundle.
*
* <p>In general, you should access resources by using IResourceManager
* methods such as <code>getString()</code>, rather than directly
* accessing them in a resource bundle.
* However, if you are programmatically creating your own
* resource bundles, you can initialize them with resources,
* as follows:</p>
*
* <pre>
* var rb:IResourceBundle = new ResourceBundle("fr_FR", "MyResources");
* rb.content["LANGUAGE"] = "Francais";
* rb.content["GREETING"] = "Bonjour";
* </pre>
*
* <p>When a resource bundle is produced by compiling a properties
* file, its resource values are either of type String or Class.
* For example, if the properties file contains</p>
*
* <pre>
* LANGUAGE=English
* MINIMUM_AGE=18
* ENABLED=true
* LOGO=Embed("logo.png")
* </pre>
*
* <p>then the value of the <code>LANGUAGE</code> resource
* is the String <code>"English"</code>,
* the value of the <code>MINIMUM_AGE</code> resource
* is the String <code>"18"</code>,
* the value of the <code>ENABLED</code> resource
* is the String <code>"true"</code>,
* and the value of the <code>LOGO</code> resource
* is a Class that represents the embedded PNG file.</p>
*
* <p>You can use IResourceManager methods such as <code>getInt()</code>
* and <code>getBoolean()</code> to convert resource strings like
* <code>"18"</code> and <code>"true"</code> into the type
* that your code expects.</p>
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
function get content():Object;
//----------------------------------
// locale
//----------------------------------
/**
* The locale for which this bundle's resources have been localized.
* This is a String such as <code>"en_US"</code> for U.S. English.
*
* <p>This read-only property is set
* when a resource bundle is constructed.</p>
*
* <p>Resource bundles that are automatically created from compiled
* properties files have locales based on the
* <code>-compiler.locale</code> option of the mxmlc or compc compilers.
* For example, suppose that you compile your application with the option
* <code>-compiler.locale=en_US,ja_JP</code> and that you have specified
* <code>-compiler.source-path=resources/{locale}</code> so that
* your application's resources, located in
* resources/en_US/MyResources.properties and
* resources/ja_JP/MyResources.properties, are found.
* Then your application will have two resource bundles
* whose <code>bundleName</code> is <code>"MyResources"</code>,
* one whose <code>locale</code> is <code>"en_US"</code>
* and one whose <code>locale</code> is <code>"ja_JP"</code>.</p>
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
function get locale():String;
}
}