|
|||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object org.apache.cocoon.util.AbstractLogEnabled org.apache.cocoon.xml.AbstractXMLProducer org.apache.cocoon.xml.AbstractXMLPipe org.apache.cocoon.transformation.AbstractTransformer org.apache.cocoon.transformation.I18nTransformer
Internationalization transformer is used to transform i18n markup into text based on a particular locale.
The i18n transformer works by finding a translation for the user's locale
in the configured catalogues. Locale is passed as parameter to the transformer,
and it can be determined based on the request, session, or a cookie data by
the LocaleAction
.
For the passed local it then attempts to find a message catalogue that satisifies the locale, and uses it for for processing text replacement directed by i18n markup.
Message catalogues are maintained in separate files, with a naming
convention similar to that of ResourceBundle
. I.e.
basename_locale
, where basename can be any name,
and locale can be any locale specified using ISO 639/3166
characters (eg. en_AU
, de_AT
, es
).
NOTE: ISO 639 is not a stable standard; some of the
language codes it defines (specifically, iw, ji, and in) have changed
(see Locale
for details).
Catalogues are of the following format:
<?xml version="1.0"?> <!-- message catalogue file for locale ... --> <catalogue xml:lang="locale"> <message key="key">text <i>or</i> markup</message> .... </catalogue>Where
key
specifies a particular message for that
language.
Files to be translated contain the following markup:
<?xml version="1.0"?> ... some text, translate <i18n:text>key</i18n:text>At runtime, the i18n transformer will find a message catalogue for the user's locale, and will appropriately replace the text between the
<i18n:text>
markup, using the value between the tags as
the lookup key.
If the i18n transformer cannot find an appropriate message catalogue for the user's given locale, it will recursively try to locate a parent message catalogue, until a valid catalogue can be found. ie:
In addition, catalogues can be split across multiple locations. For example, there can be a default catalogue in one directory with a user or client specific catalogue in another directory. The catalogues will be searched in the order of the locations specified still following the locale ordering specified above. eg: Assuming a basename of messages and a locale of en_AU (no variant) and locations of translations/client and translations, the following search will occur:
The i18n:text
element can optionally take an attribute
i18n:catalogue
to indicate which specific catalogue to use.
The value of this attribute should be the id of the catalogue to use
(see sitemap configuration).
<map:transformer name="i18n" src="org.apache.cocoon.transformation.I18nTransformer"> <catalogues default="someId"> <catalogue id="someId" name="messages" [location="translations"]> [<location>translations/client</location>] [<location>translations</location>] </catalogue> ... </catalogues> <untranslated-text>untranslated</untranslated-text> <preload>en_US</preload> <preload catalogue="someId">fr_CA</preload> </map:transformer>Where:
catalogue
attribute is present, will preload only specified
catalogue. Multiple preload
elements can be specified.
To use the transformer in a pipeline, simply specify it in a particular transform, and pass locale parameter:
<map:match pattern="file"> <map:generate src="file.xml"/> <map:transform type="i18n"> <map:parameter name="locale" value="..."/> </map:transform> <map:serialize/> </map:match>You can use
LocaleAction
or any other
way to provide transformer with a locale.
If in certain pipeline, you want to use a different catalogue as the default catalogue, you can do so by specifying a parameter called default-catalogue-id.
The untranslated-text can also be overridden at the pipeline level by specifying it as a parameter.
For date, time and number formatting use the following tags:
date
, date-time
and time
accept pattern
and src-pattern
attribute, with
values of:
short
medium
long
full
DateFormat
for more info on these values.
Elements date
, date-time
, time
and
number
, a different locale
and
source-locale
can be specified:
<i18n:date src-pattern="short" src-locale="en_US" locale="de_DE"> 12/24/01 </i18n:date>Will result in 24.12.2001.
A given real pattern
and src-pattern
(not
keywords short, medium, long, full
) overrides any value
specified by locale
and src-locale
attributes.
Future work coming:
Nested Class Summary | |
class |
I18nTransformer.CatalogueInfo
Holds information about one catalogue. |
Field Summary | |
static String |
CURRENCY_LOCALE_ATTRIBUTE
This attribute is used to specify a different locale for the currency. |
protected BundleFactory |
factory
Message bundle loader factory component (service) |
static String |
I18N_ATTR_ATTRIBUTE
This attribute is used with any element (even not i18n) to translate attribute values. |
static String |
I18N_CATALOGUE_ATTRIBUTE
This attribute can be used on i18n:text to indicate the catalogue
from which the key should be retrieved. |
static String |
I18N_CHOOSE_ELEMENT
i18n:choose element is used to translate elements in-place. |
static String |
I18N_CURRENCY_ELEMENT
Currency element name |
static String |
I18N_CURRENCY_NO_UNIT_ELEMENT
Currency without unit element name |
static String |
I18N_DATE_ELEMENT
i18n:date is used to provide a localized date string. |
static String |
I18N_DATE_TIME_ELEMENT
i18n:date-time is used to provide a localized date and
time string. |
static String |
I18N_DEFAULT_CATALOGUE_ID
This configuration parameter specifies the id of the catalogue to be used as default catalogue, allowing to redefine the default catalogue on the pipeline level. |
static String |
I18N_EXPR_ATTRIBUTE
This attribute is used with any element (even not i18n) to evaluate attribute values. |
static String |
I18N_FRACTION_DIGITS_ATTRIBUTE
fraction-digits attribute is used with
i18:number to
indicate the number of digits behind the fraction |
static String |
I18N_IF_ELEMENT
i18n:if is used to test a locale. |
static String |
I18N_INT_CURRENCY_ELEMENT
Integer currency element name |
static String |
I18N_INT_CURRENCY_NO_UNIT_ELEMENT
Integer currency without unit element name |
static String |
I18N_KEY_ATTRIBUTE
This attribute is used with i18n:text element to indicate the key of the according message. |
static String |
I18N_LOCALE
This configuration parameter specifies the default locale to be used. |
static String |
I18N_LOCALE_ATTRIBUTE
This attribute is used with date and number formatting elements to indicate the locale that should be used to format the element value. |
static String |
I18N_NAMESPACE_URI
The namespace for i18n is "http://apache.org/cocoon/i18n/2.1". |
static String |
I18N_NUMBER_ELEMENT
i18n:number is used to provide a localized number string. |
static String |
I18N_OLD_NAMESPACE_URI
The old namespace for i18n is "http://apache.org/cocoon/i18n/2.0". |
static String |
I18N_OTHERWISE_ELEMENT
i18n:otherwise is used to match any locale when
no matching locale has been found inside an i18n:choose
block. |
static String |
I18N_PARAM_ELEMENT
i18n:param is used with i18n:translate to provide
substitution params. |
static String |
I18N_PARAM_NAME_ATTRIBUTE
This attribute affects a name to the param that could be used for substitution. |
static String |
I18N_PATTERN_ATTRIBUTE
This attribute is used with date and number formatting elements to indicate the pattern that should be used to format the element value. |
static String |
I18N_PERCENT_ELEMENT
Percent element name |
static String |
I18N_PRELOAD
This configuration parameter specifies locale for which catalogues should be preloaded. |
static String |
I18N_SRC_LOCALE_ATTRIBUTE
This attribute is used with date and number formatting elements to indicate the locale that should be used to parse the element value. |
static String |
I18N_SRC_PATTERN_ATTRIBUTE
This attribute is used with date and number formatting elements to indicate the pattern that should be used to parse the element value. |
static String |
I18N_TEXT_ELEMENT
i18n:text element is used to translate any text, with
or without markup. |
static String |
I18N_TIME_ELEMENT
i18n:time is used to provide a localized time string. |
static String |
I18N_TRANSLATE_ELEMENT
i18n:translate element is used to translate text with
parameter substitution. |
static String |
I18N_TYPE_ATTRIBUTE
Deprecated. since 2.1. Use nested tags instead, e.g.: <i18n:param><i18n:date/></i18n:param> |
static String |
I18N_UNTRANSLATED
This configuration parameter specifies the message that should be displayed in case of a not translated text (message not found). |
static String |
I18N_VALUE_ATTRIBUTE
This attribute is used with date and number formatting elements to indicate the value that should be parsed and formatted. |
static String |
I18N_WHEN_ELEMENT
i18n:when is used to test a locale. |
protected Locale |
locale
Locale |
protected ServiceManager |
manager
Component (service) manager |
protected Map |
objectModel
|
Fields inherited from class org.apache.cocoon.xml.AbstractXMLProducer |
contentHandler, EMPTY_CONTENT_HANDLER, lexicalHandler, xmlConsumer |
Fields inherited from interface org.apache.cocoon.transformation.Transformer |
ROLE |
Constructor Summary | |
I18nTransformer()
|
Method Summary | |
void |
characters(char[] ch,
int start,
int len)
|
void |
configure(Configuration conf)
Implementation of Configurable interface. |
void |
dispose()
|
void |
endElement(String uri,
String name,
String raw)
|
Serializable |
getKey()
Implemenation of CacheableProcessingComponents. |
Locale |
getLocale()
Returns the current locale setting of this transformer instance. |
protected ParamSaxBuffer |
getMessage(String catalogueID,
String key)
Helper method to retrieve a message from the dictionary. |
SourceValidity |
getValidity()
Implementation of CacheableProcessingComponent. |
void |
recycle()
|
void |
service(ServiceManager manager)
Look up the BundleFactory to be used. |
void |
setup(org.apache.cocoon.environment.SourceResolver resolver,
Map objectModel,
String source,
Parameters parameters)
Setup current instance of transformer. |
void |
startElement(String uri,
String name,
String raw,
Attributes attr)
|
Methods inherited from class org.apache.cocoon.xml.AbstractXMLPipe |
comment, endCDATA, endDocument, endDTD, endEntity, endPrefixMapping, ignorableWhitespace, processingInstruction, setDocumentLocator, skippedEntity, startCDATA, startDocument, startDTD, startEntity, startPrefixMapping |
Methods inherited from class org.apache.cocoon.xml.AbstractXMLProducer |
setConsumer, setContentHandler, setLexicalHandler |
Methods inherited from class org.apache.cocoon.util.AbstractLogEnabled |
getLogger, setLogger |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Methods inherited from interface org.xml.sax.ContentHandler |
endDocument, endPrefixMapping, ignorableWhitespace, processingInstruction, setDocumentLocator, skippedEntity, startDocument, startPrefixMapping |
Methods inherited from interface org.xml.sax.ext.LexicalHandler |
comment, endCDATA, endDTD, endEntity, startCDATA, startDTD, startEntity |
Methods inherited from interface org.apache.cocoon.xml.XMLProducer |
setConsumer |
Field Detail |
public static final String I18N_NAMESPACE_URI
public static final String I18N_OLD_NAMESPACE_URI
public static final String I18N_TEXT_ELEMENT
i18n:text
element is used to translate any text, with
or without markup. Example:
<i18n:text> This is <strong>translated</strong> string. </i18n:text>
public static final String I18N_TRANSLATE_ELEMENT
i18n:translate
element is used to translate text with
parameter substitution. Example:
<i18n:translate> <i18n:text>This is translated string with {0} param</i18n:text> <i18n:param>1</i18n:param> </i18n:translate>The
i18n:text
fragment can include markup and parameters
at any place. Also do parameters, which can include i18n:text
,
i18n:date
, etc. elements (without keys only).
I18N_TEXT_ELEMENT
,
I18N_PARAM_ELEMENT
,
Constant Field Valuespublic static final String I18N_CHOOSE_ELEMENT
i18n:choose
element is used to translate elements in-place.
The first i18n:when
element matching the current locale
is selected and the others are discarded.
To specify what to do if no locale matched, simply add a node with
locale="*"
. Note that this element must be the last
child of <i18n:choose>.
<i18n:choose> <i18n:when locale="en"> Good Morning </en> <i18n:when locale="fr"> Bonjour </jp> <i18n:when locale="jp"> Aligato? </jp> <i18n:otherwise> Sorry, i don't know how to say hello in your language </jp> <i18n:translate>
You can include any markup within i18n:when
elements,
with the exception of other i18n:*
elements.
I18N_IF_ELEMENT
,
I18N_LOCALE_ATTRIBUTE
,
Constant Field Valuespublic static final String I18N_WHEN_ELEMENT
i18n:when
is used to test a locale.
It can be used within i18:choose
elements or alone.
Note: Using locale="*"
here has no sense.
Example:
<greeting> <i18n:when locale="en">Hello</i18n:when> <i18n:when locale="fr">Bonjour</i18n:when> </greeting>
I18N_LOCALE_ATTRIBUTE
,
I18N_CHOOSE_ELEMENT
,
Constant Field Valuespublic static final String I18N_IF_ELEMENT
i18n:if
is used to test a locale. Example:
<greeting> <i18n:if locale="en">Hello</i18n:when> <i18n:if locale="fr">Bonjour</i18n:when> </greeting>
I18N_LOCALE_ATTRIBUTE
,
I18N_CHOOSE_ELEMENT
,
I18N_WHEN_ELEMENT
,
Constant Field Valuespublic static final String I18N_OTHERWISE_ELEMENT
i18n:otherwise
is used to match any locale when
no matching locale has been found inside an i18n:choose
block.
I18N_CHOOSE_ELEMENT
,
I18N_WHEN_ELEMENT
,
Constant Field Valuespublic static final String I18N_PARAM_ELEMENT
i18n:param
is used with i18n:translate to provide
substitution params. The param can have i18n:text
as
its value to provide multilungual value. Parameters can have
additional attributes to be used for formatting:
type
: can be date, date-time, time,
number, currency, currency-no-unit or percent
.
Used to format params before substitution.value
: the value of the param. If no value is
specified then the text inside of the param element will be used.locale
: used only with number, date, time,
date-time
types and used to override the current locale to
format the given value.src-locale
: used with number, date, time,
date-time
types and specify the locale that should be used to
parse the given value.pattern
: used with number, date, time,
date-time
types and specify the pattern that should be used
to format the given value.src-pattern
: used with number, date, time,
date-time
types and specify the pattern that should be used
to parse the given value.
I18N_TRANSLATE_ELEMENT
,
I18N_DATE_ELEMENT
,
I18N_TIME_ELEMENT
,
I18N_DATE_TIME_ELEMENT
,
I18N_NUMBER_ELEMENT
,
Constant Field Valuespublic static final String I18N_PARAM_NAME_ATTRIBUTE
public static final String I18N_DATE_ELEMENT
i18n:date
is used to provide a localized date string.
Allowed attributes are: pattern, src-pattern, locale,
src-locale
. Usage examples:
<i18n:date src-pattern="short" src-locale="en_US" locale="de_DE"> 12/24/01 </i18n:date> <i18n:date pattern="dd/MM/yyyy" />If no value is specified then the current date will be used. E.g.:
<i18n:date />Displays the current date formatted with default pattern for the current locale.
I18N_PARAM_ELEMENT
,
I18N_DATE_TIME_ELEMENT
,
I18N_TIME_ELEMENT
,
I18N_NUMBER_ELEMENT
,
Constant Field Valuespublic static final String I18N_DATE_TIME_ELEMENT
i18n:date-time
is used to provide a localized date and
time string. Allowed attributes are: pattern, src-pattern,
locale, src-locale
. Usage examples:
<i18n:date-time src-pattern="short" src-locale="en_US" locale="de_DE"> 12/24/01 1:00 AM </i18n:date> <i18n:date-time pattern="dd/MM/yyyy hh:mm" />If no value is specified then the current date and time will be used. E.g.:
<i18n:date-time />Displays the current date formatted with default pattern for the current locale.
I18N_PARAM_ELEMENT
,
I18N_DATE_ELEMENT
,
I18N_TIME_ELEMENT
,
I18N_NUMBER_ELEMENT
,
Constant Field Valuespublic static final String I18N_TIME_ELEMENT
i18n:time
is used to provide a localized time string.
Allowed attributes are: pattern, src-pattern, locale,
src-locale
. Usage examples:
<i18n:time src-pattern="short" src-locale="en_US" locale="de_DE"> 1:00 AM </i18n:time> <i18n:time pattern="hh:mm:ss" />If no value is specified then the current time will be used. E.g.:
<i18n:time />Displays the current time formatted with default pattern for the current locale.
I18N_PARAM_ELEMENT
,
I18N_DATE_TIME_ELEMENT
,
I18N_DATE_ELEMENT
,
I18N_NUMBER_ELEMENT
,
Constant Field Valuespublic static final String I18N_NUMBER_ELEMENT
i18n:number
is used to provide a localized number string.
Allowed attributes are: pattern, src-pattern, locale, src-locale,
type
. Usage examples:
<i18n:number src-pattern="short" src-locale="en_US" locale="de_DE"> 1000.0 </i18n:number> <i18n:number type="currency" />If no value is specifies then 0 will be used.
I18N_PARAM_ELEMENT
,
I18N_DATE_TIME_ELEMENT
,
I18N_TIME_ELEMENT
,
I18N_DATE_ELEMENT
,
Constant Field Valuespublic static final String I18N_CURRENCY_ELEMENT
public static final String I18N_PERCENT_ELEMENT
public static final String I18N_INT_CURRENCY_ELEMENT
public static final String I18N_CURRENCY_NO_UNIT_ELEMENT
public static final String I18N_INT_CURRENCY_NO_UNIT_ELEMENT
public static final String I18N_KEY_ATTRIBUTE
<i18n:text i18n:key="a_key">article_text1</i18n:text>
public static final String I18N_ATTR_ATTRIBUTE
<para title="first" name="article" i18n:attr="title name"/>Attribute value considered as key in message catalogue.
public static final String I18N_EXPR_ATTRIBUTE
<para title="first" name="{one} {two}" i18n:attr="name"/>Attribute value considered as expression containing text and catalogue keys in curly braces.
public static final String I18N_SRC_PATTERN_ATTRIBUTE
I18N_PARAM_ELEMENT
,
I18N_DATE_TIME_ELEMENT
,
I18N_DATE_ELEMENT
,
I18N_TIME_ELEMENT
,
I18N_NUMBER_ELEMENT
,
Constant Field Valuespublic static final String I18N_PATTERN_ATTRIBUTE
I18N_PARAM_ELEMENT
,
I18N_DATE_TIME_ELEMENT
,
I18N_DATE_ELEMENT
,
I18N_TIME_ELEMENT
,
I18N_NUMBER_ELEMENT
,
Constant Field Valuespublic static final String I18N_LOCALE_ATTRIBUTE
I18N_PARAM_ELEMENT
,
I18N_DATE_TIME_ELEMENT
,
I18N_DATE_ELEMENT
,
I18N_TIME_ELEMENT
,
I18N_NUMBER_ELEMENT
,
I18N_WHEN_ELEMENT
,
Constant Field Valuespublic static final String I18N_SRC_LOCALE_ATTRIBUTE
I18N_PARAM_ELEMENT
,
I18N_DATE_TIME_ELEMENT
,
I18N_DATE_ELEMENT
,
I18N_TIME_ELEMENT
,
I18N_NUMBER_ELEMENT
,
Constant Field Valuespublic static final String I18N_VALUE_ATTRIBUTE
I18N_PARAM_ELEMENT
,
I18N_DATE_TIME_ELEMENT
,
I18N_DATE_ELEMENT
,
I18N_TIME_ELEMENT
,
I18N_NUMBER_ELEMENT
,
Constant Field Valuespublic static final String I18N_TYPE_ATTRIBUTE
i18:param
to
indicate the parameter type: date, time, date-time
or
number, currency, percent, int-currency, currency-no-unit,
int-currency-no-unit
.
Also used with i18:translate
to indicate inplace
translations: inplace
public static final String CURRENCY_LOCALE_ATTRIBUTE
public static final String I18N_CATALOGUE_ATTRIBUTE
i18n:text
to indicate the catalogue
from which the key should be retrieved. This attribute is optional,
if it is not mentioned the default catalogue is used.
public static final String I18N_LOCALE
public static final String I18N_DEFAULT_CATALOGUE_ID
public static final String I18N_UNTRANSLATED
public static final String I18N_PRELOAD
public static final String I18N_FRACTION_DIGITS_ATTRIBUTE
fraction-digits
attribute is used with
i18:number
to
indicate the number of digits behind the fraction
protected ServiceManager manager
protected BundleFactory factory
protected Map objectModel
protected Locale locale
Constructor Detail |
public I18nTransformer()
Method Detail |
public Locale getLocale()
public Serializable getKey()
getKey
in interface org.apache.cocoon.caching.CacheableProcessingComponent
public SourceValidity getValidity()
null
if this instance is not cacheable.
getValidity
in interface org.apache.cocoon.caching.CacheableProcessingComponent
public void service(ServiceManager manager) throws ServiceException
BundleFactory
to be used.
service
in interface Serviceable
ServiceException
public void configure(Configuration conf) throws ConfigurationException
configure
in interface Configurable
ConfigurationException
public void setup(org.apache.cocoon.environment.SourceResolver resolver, Map objectModel, String source, Parameters parameters) throws org.apache.cocoon.ProcessingException, SAXException, IOException
setup
in interface org.apache.cocoon.sitemap.SitemapModelComponent
org.apache.cocoon.ProcessingException
SAXException
IOException
public void startElement(String uri, String name, String raw, Attributes attr) throws SAXException
startElement
in interface ContentHandler
SAXException
public void endElement(String uri, String name, String raw) throws SAXException
endElement
in interface ContentHandler
SAXException
public void characters(char[] ch, int start, int len) throws SAXException
characters
in interface ContentHandler
SAXException
protected ParamSaxBuffer getMessage(String catalogueID, String key)
catalogueID
- if not null, this catalogue will be used instead of the default one.
public void recycle()
recycle
in interface Recyclable
public void dispose()
dispose
in interface Disposable
|
|||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |