xdocs/index.xml (213 lines of code) (raw):

<?xml version="1.0"?> <!-- 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. --> <document> <properties> <title>Localization Component</title> <author email="epugh@upstate.com">Eric Pugh</author> <author email="tv@apache.org">Thomas Vandahl</author> </properties> <body> <section name="Overview"> <p> This component provides Localization of strings. It is written for use in Turbine but it can be used in any container compatible with Avalon's ECM container. </p> <p> There two implementations <ul> <li>SimpleLocalizationService and</li> <li>LocalizationService</li> </ul> The <code>SimpleLocalizationService</code> provides basic localization functions for generic applications whereas the <code>LocalizationService</code> adds support for web applications and depends on a servlet container environment. </p> </section> <section name="SimpleLocalizationService"> <subsection name="Role Configuration"> <source><![CDATA[ <role name="org.apache.fulcrum.localization.SimpleLocalizationService" shorthand="localization" default-class="org.apache.fulcrum.localization.SimpleLocalizationServiceImpl"/> ]]></source> </subsection> <subsection name="Component Configuration"> <table> <tr> <th>Item</th> <th>Datatype</th> <th>Cardinality</th> <th>Description</th> </tr> <tr> <td>localization@locale-default-language</td> <td>String</td> <td>[0|1]</td> <td> The default language to use if none is specified. If this attribute is absent, the JVM default language will be used. </td> </tr> <tr> <td>localization@locale-default-country</td> <td>String</td> <td>[0|1]</td> <td> The default country to use if none is specified. If this attribute is absent, the JVM default country will be used. </td> </tr> <tr> <td>bundles</td> <td>Complex</td> <td>[1]</td> <td> The list of configured bundles. </td> </tr> <tr> <td>bundles/bundle</td> <td>String</td> <td>[1..n]</td> <td> The name of the bundle </td> </tr> </table> </subsection> <subsection name="Component Configuration Example"> <source><![CDATA[ <localization locale-default-language="en" locale-default-country="US"> <bundles> <bundle>org.apache.fulcrum.localization.BarBundle</bundle> <bundle>org.apache.fulcrum.localization.FooBundle</bundle> </bundles> </localization> ]]></source> </subsection> </section> <section name="LocalizationService"> <subsection name="Role Configuration"> <source><![CDATA[ <role name="org.apache.fulcrum.localization.LocalizationService" shorthand="localization" default-class="org.apache.fulcrum.localization.DefaultLocalizationService"/> ]]></source> </subsection> <subsection name="Component Configuration"> <table> <tr> <th>Item</th> <th>Datatype</th> <th>Cardinality</th> <th>Description</th> </tr> <tr> <td>localization@locale-default-language</td> <td>String</td> <td>[0|1]</td> <td> The default language to use if none is specified. If this attribute is absent, the JVM default language will be used. </td> </tr> <tr> <td>localization@locale-default-country</td> <td>String</td> <td>[0|1]</td> <td> The default country to use if none is specified. If this attribute is absent, the JVM default country will be used. </td> </tr> <tr> <td>bundles</td> <td>Complex</td> <td>[1]</td> <td> The list of configured bundles. </td> </tr> <tr> <td>bundles/bundle</td> <td>String</td> <td>[1..n]</td> <td> The name of the bundle (first one is default bundle) </td> </tr> </table> </subsection> <subsection name="Component Configuration Example"> <source><![CDATA[ <localization locale-default-language="en" locale-default-country="US"> <bundles> <bundle>org.apache.fulcrum.localization.BarBundle</bundle> <bundle>org.apache.fulcrum.localization.FooBundle</bundle> </bundles> </localization> ]]></source> </subsection> </section> <section name="Resource Bundles"> <p> Resource bundles are basically property files. You might have one for the "en" locale thus: </p> <source><![CDATA[ LABEL_ORGANIZATION = organisation CURRENT_RECORD = Record {0} of {1} ]]></source> <p> and another for the "en_US" locale thus: </p> <source><![CDATA[ LABEL_ORGANIZATION = organization ]]></source> <p> Please see the <em>java.util.ListResourceBundle</em> and <em>java.util.ResourceBundle</em> classes for more information. </p> </section> <section name="Usage"> <source><![CDATA[ TurbineServices.getInstance().getService(LocalizationService.ROLE) .getString("DISPLAYPROJECTS_TITLE"); ]]></source> <p> Wow. That is a lot of typing. In Turbine, that could be easily shortened to this: </p> <source><![CDATA[ Localization.getString("DISPLAYPROJECTS_TITLE"); ]]></source> <p> The hard example above was given as an example of using Services. The easy example is the one that you really should be using. Another cool feature of the Localization class is that you can pass in a RunData object like this: </p> <source><![CDATA[ Localization.getString(data, "DISPLAYPROJECTS_TITLE"); ]]></source> <p> This has the added effect of using the Accept-Language HTTP header to determine which language to display based on what setting the user has defined in the browser. Can you say Dynamic Localization? ;-) </p> <p> The Localization class also supports the formatting of localized strings containing parameters, such as in </p> <source><![CDATA[ Localization.format(Localization.getDefaultBundle(), Localization.getLocale(data.getRequest()), "CURRENT_RECORD", recno, all); ]]></source> <p> This actually doesn't look too nice, however the call using the Turbine LocalizationTool from a <a href="http://velocity.apache.org/">Velocity</a> template just deflates to </p> <source><![CDATA[ $l10n.format("CURRENT_RECORD", $recno, $all); ## Other examples ## No arguments $l10n.LABEL_ORGANIZATION ## One argument $l10n.format("STRING_KEY_ONE_ARG" "arg1") ## Three or more arguments $l10n.format("STRING_KEY_3_OR_MORE_ARGS" ["arg1", "arg2", "arg3"]) ]]></source> </section> </body> </document>