kpiroumian    2002/09/24 10:11:07

  Modified:    src/documentation/xdocs/userdocs/transformers Tag:
                        cocoon_2_0_3_branch i18n-transformer.xml
  Log:
  Rewritten to reflect the current (real) features.
  (sync with HEAD)
  
  Revision  Changes    Path
  No                   revision
  
  
  No                   revision
  
  
  1.1.2.2   +198 -173  
xml-cocoon2/src/documentation/xdocs/userdocs/transformers/i18n-transformer.xml
  
  Index: i18n-transformer.xml
  ===================================================================
  RCS file: 
/home/cvs/xml-cocoon2/src/documentation/xdocs/userdocs/transformers/i18n-transformer.xml,v
  retrieving revision 1.1.2.1
  retrieving revision 1.1.2.2
  diff -u -r1.1.2.1 -r1.1.2.2
  --- i18n-transformer.xml      7 Jun 2002 19:57:47 -0000       1.1.2.1
  +++ i18n-transformer.xml      24 Sep 2002 17:11:06 -0000      1.1.2.2
  @@ -1,80 +1,125 @@
   <?xml version="1.0" encoding="UTF-8"?>
  -<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.0//EN" 
"../../dtd/document-v10.dtd">
  +<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.0//EN" 
"document-v10.dtd">
   
   <document>
        <header>
                <title>I18n Transformer</title>
  -             <version>0.9</version>
  +             <version>1.0</version>
                <type>Technical document</type>
                <authors>
  -                     <person name="Konstantin Piroumian" email="[EMAIL PROTECTED]"/>
  +                     <person name="Konstantin Piroumian" 
email="[EMAIL PROTECTED]"/>
  +                     <person name="Marcus Crafter" email="[EMAIL PROTECTED]"/>
  +                     <person name="Michael Enke" 
email="[EMAIL PROTECTED]"/>                   
                 </authors>
                <abstract>
                This document describes an approach for internationalization of XML
  -             documents within Cocoon. It introduces some tags to markup text 
  +             applications within Cocoon. It introduces some tags to markup text 
                that should be translated and a format for dictionaries.
  -             The first proposal was made by Infozone Group 
(http://www.infozone-group.org).
  +             The original proposal was made by Infozone Group 
(http://www.infozone-group.org).
                </abstract>
        </header>
        <body>
  -             <s1 title="I18n Transformer">
  +             <s1 title="Introduction">
                                <p>
                                Developing and maintaining multi-language sites is a 
common problem for web developers.
  -                             The usage of XML and XSL makes this task much more 
easier, especially with Cocoon's 
  +                             The usage of XML and XSL makes this task much more 
easier, especially with 
                                content, logic and presentation separation concept.
                                </p>
  +                             <dl>
  +                        <dt>Internationalization (i18n)</dt>
  +                        <dd>Process of developing a product in such a way that it 
works with data in different languages and can be adapted to various target markets 
without engineering changes.</dd>
  +                        <dt>Localization (l10n)</dt>
  +                        <dd>Subsequent process of translating and adapting a 
product to a given market's cultural conventions.</dd>                        
  +                    </dl>
                                <p>
                                This approach for internationalization (further - 
i18n) of XML documents within Cocoon 
                                is based on a transformer - <link 
href="../../apidocs/org/apache/cocoon/transformation/I18nTransformer.html">
                                                <code>I18nTransformer</code>
                                        </link>
  -                             , which uses XML dictionaries for all the i18n data. 
The namespace of i18n is defined as follows:
  -                             
<code>xmlns:i18n="http://apache.org/cocoon/i18n/2.0";</code>
  -                             </p>
  -                             <p>
  -                             The first implementation was developed by <link 
href="mailto:[EMAIL PROTECTED]";>Lassi Immonen</link>. In this implementation 
the syntax was changed according to the <link 
href="http://www.infozone-group.org";>Infozone Group</link>'s i18n proposal (with small 
changes) and some new features were implemented.
  -                             </p>
  -                             <p>
  -                             Enhancements for number, date and time have been 
contributed by <link href="mailto:[EMAIL PROTECTED]";>Michael Enke</link>.
  -                             </p>
  +                             , which uses XML dictionaries for all the multilingual 
data. The namespace URI of i18n transformer is defined as follows: 
  +                    </p>
  +                    <source>xmlns:i18n="http://apache.org/cocoon/i18n/2.0</source>
  +               <s2 title="Other implementation details">
                        <ul>
  -                             <li>Name : i18n</li>
  +                             <li>Default name in sitemap: i18n</li>
                                <li>Class: 
org.apache.cocoon.transformation.I18nTransformer</li>
                                <li>Cacheable: no.</li>
  +                             <li>Poolable: yes.</li>
                        </ul>
  +                     </s2>
                </s1>
  -                     <s1 title="Features supported">
  +                     <s1 title="Brief description">
                                <p>
  -                                     The following features are supported by the 
i18n transformer:
  +                                     The following features are supported by the 
i18n transformer:<br/>
                                </p>
                                <ul>
                                        <li>Text translation</li>
                                        <li>Attribute translation</li>
  -                                     <li>Param substitution</li>
  -                                     <li>Substitution param translation</li>
  -                                     <li>Date internationalization (New!)</li>
  -                                     <li>Number internationalization (New!)</li>
  -                                     <li>Locale support (New!)</li>
  -                                     <li>A dictionary update and language addition 
automation stylesheet (New!)</li>
  +                                     <li>Parameter substitution (with translation 
if needed)</li>
  +                                     <li>Date, number and currency formatting</li>
                                </ul>
                                <p>
  -                                     A simple example of i18n:
  +                                     A simple example of i18n markup:
                                </p>
  -                             <source><![CDATA[
  -<para title="first" name="article"  i18n:attr="title name">
  +                             <source>
  +<![CDATA[<para title="first" name="article"  i18n:attr="title name">
     <i18n:text>This text will be translated.</i18n:text>
   </para>]]></source>
                                <p>
                                        The text inside the 
<code><![CDATA[<i18n:text>]]></code> will be used as a key to find the 
  -                                     translation in the dictionary. All attributes 
that are listed in the <code><![CDATA[<i18n:attr>]]></code> attribute also will be 
translated and their values will be used as dictionary keys.
  +                                     translation in the message catalogue. All 
attributes (of any other namespace element) that are listed in the 
<code><![CDATA[i18n:attr]]></code> attribute also will be translated and their values 
will be used as dictionary keys.
                                </p>
                                <note>
  -                                     This i18n approach was re-designed to 
implement i18n of dates, currencies, etc.
  -                                     Although the possibilities supported allow for 
complicated formatting, you will need to use XSP to achieve more flexibility in some 
cases.
  +                                     Although, date, time, number and currency 
formatting is also supported, in some cases it is needed to use XSP or some other 
dynamic means to achieve more flexibility.
                                </note>
                        </s1>
  -             <s1 title="Markup content for translation">
  -                     <s2 title="Simple text translation">
  +             <s1 title="Markup Reference">
  +                                 <s2 title="Summary">
  +                                 <p>
  +                                     Special tags in i18n namespace are used to 
mark parts of XML document that should be substituted with dictionary messages.
  +                                 </p>
  +                                 <table>
  +                                     <caption>Tags list</caption>
  +                            <tr>
  +                                <th>Element</th>
  +                                <th>Description</th>
  +                            </tr>
  +                            <tr>
  +                                <td><link href="#i18n_text">i18n:text</link></td>
  +                                <td>Used for simple text translation</td>           
                     
  +                            </tr>
  +                            <tr>
  +                                <td><link href="#i18n_attr">i18n:attr</link></td>
  +                                <td>Attribute for any element (not in 
i18n-namespace). Contains the names of other attributes of that element to be 
translated</td>                                
  +                            </tr>
  +                            <tr>
  +                                <td><link 
href="#i18n_translate">i18n:translate</link></td>
  +                                <td>Translates text with parameter 
substitution</td>                                
  +                            </tr>                            
  +                            <tr>
  +                                <td><link href="#i18n_param">i18n:param</link></td>
  +                                <td>Used with <code>i18n:translate</code> to 
provide substitution parameter</td>                                
  +                            </tr>                            
  +                            <tr>
  +                                <td><link href="#i18n_date">i18n:date</link></td>
  +                                <td>Formats the date in localized manner</td>       
                         
  +                            </tr>                            
  +                            <tr>
  +                                <td><link href="#i18n_time">i18n:time</link></td>
  +                                <td>Formats the time in localized manner</td>       
                         
  +                            </tr>                                                   
     
  +                            <tr>
  +                                <td><link 
href="#i18n_datetime">i18n:date-time</link></td>
  +                                <td>Formats the date and time in localized 
manner</td>                                
  +                         </tr>                                                      
                              
  +                            <tr>
  +                                <td><link 
href="#i18n_number">i18n:number</link></td>
  +                                <td>Formats numbers, currencies and percent in 
localized manner</td>                                
  +                         </tr>                                                      
                                                       
  +                    </table>
  +                    <p></p>
  +                     </s2>           
  +                 <anchor id="i18n_text"/><s2 title="i18n:text">
                                <p>
                        To translate some simple text we use the 
<code><![CDATA[<i18n:text>]]></code> tag:
                        </p>
  @@ -92,19 +137,8 @@
                    </p>
                                <source><![CDATA[
   <i18n:text i18n:key="key_text">Default value</i18n:text>]]></source>
  -                             <note>
  -                             Maybe it would be better to have a possibility to use 
i18n:key in any element and not only in i18n:text?
  -                             E.g.: 
  -                             <code><![CDATA[
  -<ul>
  -     <li i18n:key="Item1" />
  -     <li i18n:key="Item2" /> 
  -     ...
  -</ul>
  -                             ]]></code>
  -                             </note>
                        </s2>
  -                     <s2 title="Translation with param substitution">
  +                     <anchor id="i18n_translate"/><s2 title="Translation with param 
substitution">
                                <p>
                                To translate the text with param substitution the 
<code><![CDATA[<i18n:translate>]]></code> tag must be used.
                                We can specify some 
<code><![CDATA[<i18n:param>]]></code>-tags which contain 
  @@ -155,10 +189,13 @@
                                Generally, it is not necessary for the text for param 
substitution to be translated. 
                                E.g., it can come from a database with predefined 
placeholders for i18n params and there is no need to use 
<code><![CDATA[<i18n:text>]]></code> for its translation. 
                                </note>
  +                             <p>
  +                             Parameters can be dates, numbers and currencies. Use 
<strong>type</strong> attribute to specify one of the possible types: <code>date | 
time | date-time | number | currency | currency-no-unit | int-currency | percent 
</code>. See more on params <link href="#i18n_param">here</link>.
  +                             </p>
                        </s2>
  -                     <s2 title="Attributes">
  +                     <anchor id="i18n_attr"/><s2 title="Attributes">
                                <p>
  -                                     Additionally we can translate Attributes. This 
is very useful for 
  +                                     Additionally we can translate attributes. This 
is very useful for 
                                        HTML-forms since labels of buttons are set via 
an attribute in 
                                        HTML. To translate attributes of a tag, add an 
additional attribute 
                                        named 'i18n:attr' containing a list of 
attributes, which should be 
  @@ -170,13 +207,18 @@
                                        The attribute, which will be translated is 
'value'. 
                                        Parameter replacement is not available for 
attributes at this time.
                                </p>
  +                     <note>
  +                             Some versions of Xerces have a bug in 
removeAttribute() method implementation and this
  +                             results in a NullPointerException if attributes 
translation is used. The solution is to upgrade
  +                             to a newer version of Xerces.
  +                     </note>                         
                        </s2>
                        <s2 title="Date, time and number formatting">
  -                             <p>To format dates according to the current locale use 
<code><![CDATA[<i18n:date src-pattern="dd/MM/yyyy" pattern="dd:MMM:yyyy" 
value="01/01/2001" />]]></code>. The <code>'src-pattern'</code> attribute will be used 
to parse the <code>'value'</code>, then the date will be formatted according to the 
current locale using the format specified by <code>'pattern'</code> attribute.
  +                             <anchor id="i18n_date"/><p>To format dates according 
to the current locale use <code><![CDATA[<i18n:date src-pattern="dd/MM/yyyy" 
pattern="dd:MMM:yyyy" value="01/01/2001" />]]></code>. The <code>'src-pattern'</code> 
attribute will be used to parse the <code>'value'</code>, then the date will be 
formatted according to the current locale using the format specified by 
<code>'pattern'</code> attribute.
                                </p>
  -                             <p>To format time for a locale (e.g. de_DE) use 
<code><![CDATA[<i18n:time src-pattern="dd/MM/yyyy" locale="de_DE" value="01/01/2001" 
/>]]></code>. The <code>'src-pattern'</code> and <code>'pattern'</code> attribute may 
also contain <code>'short'</code>, <code>'medium'</code>, <code>'long'</code> or 
<code>'full'</code>. The date will be formatted according to this format.
  +                             <anchor id="i18n_time"/><p>To format time for a locale 
(e.g. de_DE) use <code><![CDATA[<i18n:time src-pattern="dd/MM/yyyy hh:mm" 
locale="de_DE" value="01/01/2001 12:00" />]]></code>. The <code>'src-pattern'</code> 
and <code>'pattern'</code> attribute may also contain <code>'short'</code>, 
<code>'medium'</code>, <code>'long'</code> or <code>'full'</code>. The date will be 
formatted according to this format.
                                </p>
  -                             <p>To format date and time use 
<code><![CDATA[<i18n:date-time />]]></code>.
  +                             <anchor id="i18n_datetime"/><p>To format date and time 
use <code><![CDATA[<i18n:date-time />]]></code>.
                                </p>
                                <p>It is also possible to specify a src-locale:  
<code><![CDATA[<i18n:date src-pattern="short" src-locale="en_US" locale="de_DE"> 
12/24/01 </i18n:date> ]]></code> will result in 24.12.2001
                                </p>
  @@ -186,16 +228,16 @@
                                <p>
                                        If no pattern was specified then the date will 
be formatted with the <code>DateFormat.DEFAULT</code> format (both date and time). If 
no value for the date is specified then the current date will be used. E.g.: 
<code><![CDATA[<i18n:date/> ]]></code> will result in the current date, formatted with 
default localized pattern.
                                </p>
  -                             <p>To format numbers in locale sensitive manner use 
<code><![CDATA[<i18n:number pattern="0.##" value="2.0" />]]></code>. This will be 
useful for Arabic, Indian, etc. number formatting. Additionally, currencies and 
percent formatting can be used, known types are <code>currency</code>, 
<code>currency-no-unit</code>, <code>int-currency</code>, 
<code>int-currency-no-unit</code> and <code>percent</code>. Another useful attribute 
is <code>fraction-digits</code>, E.g.: 
  +                             <anchor id="i18n_number"/><p>To format numbers in 
locale sensitive manner use <code><![CDATA[<i18n:number pattern="0.##" value="2.0" 
/>]]></code>. This will be useful also for Arabic, Indian, etc. number formatting. 
Additionally, currencies and percent formatting can be used, known types are 
<code>currency</code>, <code>currency-no-unit</code>, <code>int-currency</code>, 
<code>int-currency-no-unit</code> and <code>percent</code>. Another useful attribute 
is <code>fraction-digits</code>, E.g.: 
                                </p>
                                        <ul>
  -                                             <li><code><![CDATA[<i18n:number 
type="currency" value="1703.7434" />]]></code> will result in localized presentation 
of the <code>value</code> - $1,703.74 for US locale.</li>
  -                                             <li><code><![CDATA[<i18n:number 
type="currency" fraction-digits="3" value="1703.7434" />]]></code> will result in 
localized presentation of the <code>value</code> - $1,703.743 for US locale so you can 
print gasonline prices.</li>
  -                                             <li><code><![CDATA[<i18n:number 
type="int-currency" value="170374" />]]></code> will result in localized presentation 
of the <code>value</code> - $1,703.74 for US locale, 170374 (with unit) for a currency 
without subunit.</li>
  -                                             <li><code><![CDATA[<i18n:number 
type="int-currency-no-unit" value="170374" />]]></code> will result in localized 
presentation of the <code>value</code> - 1,703.74 for US locale, 170374 (without) for 
a currency without subunit.</li>
  -                                             <li><code><![CDATA[<i18n:number 
type="percent" value="1.2" />]]></code> will result in localized percent 
<code>value</code> - %120 for most of the locales.</li>
  +                                             <li><code><![CDATA[<i18n:number 
type="currency" value="1703.7434" />]]></code> will result in localized presentation 
of the value for US locale: $1,703.74</li>
  +                                             <li><code><![CDATA[<i18n:number 
type="currency" fraction-digits="3" value="1703.7434" />]]></code> will result in 
localized presentation of the value for US locale so you can print gasonline prices: 
$1,703.743</li>
  +                                             <li><code><![CDATA[<i18n:number 
type="int-currency" value="170374" />]]></code> will result in localized presentation 
of the value for US locale: $1,703.74, and 170374 (with currency unit) for a currency 
without subunit.</li>
  +                                             <li><code><![CDATA[<i18n:number 
type="int-currency-no-unit" value="170374" />]]></code> will result in localized 
presentation of the value for US locale: 1,703.74, and 170374 (without currency unit) 
for a currency without subunit.</li>
  +                                             <li><code><![CDATA[<i18n:number 
type="percent" value="1.2" />]]></code> will result in localized percent value: %120 
for most of the locales.</li>
                                        </ul>
  -                             <p>
  +                             <anchor id="i18n_param"/><p>
                                        Also, date and number formatting can be used 
with substitution params. <code>type</code> attribute must be used with params to 
indicate the param type (date, number, currency, ...). Default type is 
<code>string</code>.
                                </p>
                                <source><![CDATA[
  @@ -213,125 +255,110 @@
                                        Result will be like this: <code>You have to 
pay $102.5 for 2.5 pounds or 10% of your profit. Valid from 13-Jun-01</code>
                                </p>            
                        </s2>
  -                     <s2 title="Dictionaries">
  -                             <p>
  -                                     Dictionaries contain the translations for the 
text to be translated.
  -                                     They consist of a list of entries, where each 
entry specifies the
  -                                     translation(s) for a key. An entry may contain 
the translation for
  -                                     various languages. An example:
  -                             </p>
  -                             <source><![CDATA[
  -<translations>
  -  <entry>
  -    <key>Some {0} was inserted {1}.</key>
  -    <translation lang="en">Some {0} was {1} inserted.</translation>          
  -    <translation lang="de">Etwas {0} wurde {1} eingesetzt.</translation>
  -  </entry>
  -</translations>]]></source>
  -                             <p>
  -                                     For each text, we want to translate, we must 
provide a key, where
  -                                     the key is either text as we have written it 
in the document or the value
  -                                     of the 'i18n:key' attribute. The key must be 
written exactly like in 
  -                                     the document, including spaces, linefeeds, etc.
  -                             </p>
  -                             <p>
  -                                     Then we must enter a translation for the text 
with the <code><![CDATA[<translation>]]></code>-tag,
  -                                     where the 'lang'-attribute specifies the 
language of the translated
  -                                     text. If the text contains placeholders, 
they'll be replaced at the 
  -                                     correct places in the translation with the 
given parameters.
  -                             </p>
  -                     </s2>
  -                     <s2 title="How to migrate from the old I18nTransformer">
  -                             <p>
  -                                     Dictionary structure remained the same, so old 
dictionaries can be used.
  -                                     Previous <code><![CDATA[<i:tr>]]></code> tags 
are renamed to <code><![CDATA[<i18n:text>]]></code>. (The namespace prefix is not 
important, you can choose any you like).
  -                             </p>
  -                             <p>
  -                                     The old transformer supported translation of 
any tag using its text value as the key:
  -                             </p>
  -                             <source><![CDATA[
  -<elem i18n:tr="y">This text will be translated.</elem>]]>
  -                             </source>
  -                             <p>
  -                                     You have to change that for the new 
transformer like this:
  -                             </p>
  -                             <source><![CDATA[
  -<elem><i18n:text>This text will be translated.</i18n:text></elem>]]>
  -                             </source>
  -                             <p>
  -                                     There was a possibility in the old transformer 
for choosing image paths depending on the language. 
  -                                     Now you can achieve the same result by 
translating the 'src' attribute of img element.
  -                             </p>
  -                             <note>
  -                                     I am not sure that image path translation in 
the old manner is possible without XSP, 
  -                                     because the language code was used and not a 
dictionary. 
  -                                     I'll add a feature for this kind of 
translation in the near future.
  -                             </note>
  -                     </s2>
  -             </s1>
  -             <s1 title="Sample">
  -                     <s2 title="Sitemap configuration">
  -                             <p>
  -                                     To use I18nTransformer, it must be added to 
the sitemap:
  -                             </p>
  -                             <source><![CDATA[
  -<map:transformers default="xslt">
  -  <map:transformer name="i18n"
  -                   src="org.apache.cocoon.transformation.I18nTransformer"/>
  -</map:transformers>]]></source>
  -                             <p>
  -                                     Then, a <code>match</code> must be declared, 
something like this:
  -                             </p>
  -                             <source><![CDATA[
  +               <s2 title="Catalogues (Dictionaries)">
  +                   <p>Message catalogues contain translations to be used by the 
i18n transformer.</p>
  +                    <s3 title="Catalogues format">
  +                    <p>A single message catalogue file contains translations for a 
particular language, e.g.:</p>
  +                    <source><![CDATA[
  +<?xml version="1.0"?>
  +  <!-- message catalogue file for locale ... -->
  +  <catalogue xml:lang="locale">
  +         <message key="key">text</message>
  +         <message key="other_key">Other text</message>         
  +         ....
  +  </catalogue>]]></source> 
  +                     <p>Where <strong>key</strong> attribute specifies a particular 
message for that language.</p>
  +                     </s3>
  +                     <s3 title="Usage">
  +                     <p>Files to be translated contain i18n markup. 
  +                     At runtime, the i18n transformer will find a message catalogue 
for the
  +                     user's locale, and will appropriately replace the text between 
the
  +                     <code>&lt;i18n:text&gt;</code> markup, using either the value 
between the tags as
  +                     the lookup key or the value of the <code>key</code> attribute 
if specified. In the latter
  +                     case the body value of the tag will be used in case of the not 
found translation.</p>
  +                     <p>If the i18n transformer cannot find an appropriate message 
catalogue for
  +                     the user's given locale, it will recursively try to locate a 
<em>parent</em>
  +                     message catalogue, until a valid catalogue can be found. 
ie:</p>
  +                     <ul>
  +                          
<li><strong>catalogue</strong>_<em>language</em>_<em>country</em>_<em>variant</em>.xml</li>
  +                          
<li><strong>catalogue</strong>_<em>language</em>_<em>country</em>.xml</li>
  +                          <li><strong>catalogue</strong>_<em>language</em>.xml</li>
  +                          <li><strong>catalogue</strong>.xml</li>
  +                     </ul>
  +                     <p>
  +                     eg: Assuming a basename of <em>messages</em> and a locale of 
<em>en_AU</em>
  +                     (no variant), the following search will occur:</p>
  +                     <ul>
  +                         
<li><strong>messages</strong>_<em>en</em>_<em>AU</em>.xml</li>
  +                         <li><strong>messages</strong>_<em>en</em>.xml</li>
  +                         <li><strong>messages</strong>.xml</li>
  +                     </ul>
  +                     <p>This allows the developer to write a hierarchy of message 
catalogues,
  +                     at each defining messages with increasing depth of 
variation.</p>
  +                 </s3>
  +             </s2>
  +            <s2 title="Sitemap configuration">
  +            <source><![CDATA[
  +<map:transformer name="i18n"
  +     src="org.apache.cocoon.transformation.I18nTransformer">
  +
  +     <catalogue-name>messages</catalogue-name>
  +     <catalogue-location>translations</catalogue-location>
  +     <untranslated-text>untranslated</untranslated-text>
  +     <cache-at-startup>true</cache-at-startup>
  +</map:transformer>]]></source> 
  +                    <p>where:</p>
  +                    <ul>
  +                        <li><strong>catalogue-name</strong>: base name of the 
message
  +                            catalogue (<em>mandatory</em>).</li>
  +                        <li><strong>catalogue-location</strong>: location of the
  +                            message catalogues (<em>mandatory</em>).</li>
  +                        <li><strong>untranslated-text</strong>: text used for
  +                            untranslated keys (default is to output the key 
name).</li>
  +                        <li><strong>cache-at-startup</strong>: flag whether to cache
  +                            messages at startup (false by default).</li>
  +                    </ul>
  +                    <p>To use the transformer in a pipeline, simply specify it in a 
particular transform and indicate the needed locale. eg:</p>
  + <source><![CDATA[
   <map:match pattern="file">
  -  <map:generate src="{1}"/>
  -  <map:transform type="i18n">
  -    <parameter name="available_lang_1" value="en"/>
  -    <parameter name="available_lang_2" value="ru"/>
  -    <parameter name="src" value="translations/dictionary.xml"/>
  -  </map:transform>
  -  <map:transform src="stylesheet.xsl"/>
  -  <map:serialize />
  +        <map:generate src="file.xml"/>
  +         <map:transform type="i18n">
  +             <map:parameter name="locale" value="en_AU"
  +         </map:transform>
  +         <map:serialize/>
   </map:match>]]></source>
  +                    <note>Note, that since Cocoon version 2.0.1 you should specify 
the needed locale as a parameter at pipeline level. This gives more flexibility in 
locale selection, e.g. URI parts can be used: <code>/en_AU/file</code>. See 
LocaleAction documentation for other possibilities.</note>
  +                    <p>Also, <strong>catalogue-name</strong>, 
<strong>catalogue-location</strong>
  +                    and <strong>untranslated-text</strong> can all be overridden at 
the
  +                    pipeline level by specifying them as parameters to the 
transform statement.</p>
                        </s2>
  -                     <s2 title="Simple i18n file">
  -                             <p>
  -                                     To use i18n pages you will need to declare the 
i18n namespace in your src
  -                                     files and wrap all i18n text by 
<code><![CDATA[<i18n:text>]]></code> tags. 
  -                                     To translate attributes of an element, add an 
additional attribute named 'i18n:attr' containing a list of 
  -                                     attributes, which should be translated, 
separated by spaces.                            
  -                             </p>
  -                             <source><![CDATA[
  -<?xml version="1.0" encoding="UTF-8"?>
  -<root xmlns:i18n="http://apache.org/cocoon/i18n/2.0";>
  -  <elem title="main_title" i18n:attr="title">
  -    <i18n:text>Text to be translated</i18n:text>
  -  </elem>
  -</root>]]>
  -                             </source>
  +             </s1>
  +             <s1 title="Samples">
                                <p>
  -                                     A more interesting example of usage you can 
find in the samples/i18n directory.
  +                                     i18n samples from Cocoon demonstrate all the 
features of i18n transformer and give some ideas on user's locale determination.
                                </p>
  -                     </s2>
  -                     <note>
  -                             To make attribute translation work the newer than 
1.3.0 version of Xerces is needed, where the removeAttribute()
  -                             bug is fixed.
  -                     </note>
                </s1>
                <s1 title="Usage Pattern for Dictionary Generator Stylesheet">
               <p> 
  -            Description is given for a real world example:
  -            To correct/add Spanish translation in/to an existing dictionary:
  +            It is sometimes better to maintain a master dictionary that contains
  +            all the keys with translations in all the supported languages. For this 
purposes several helper stylesheets can be used. 
  +            The stylesheets are found in Cocoon sources: 
<code>src/resources/dev/i18n</code> (in version 2.1 and higher).<br/>
  +            Below is given an example for a new language addition using a master 
dictionary.
               </p>
  -            <s2 title="Key generation">
  +            <s2 title="Initial key generation">
  +            <p>To generate all the i18n keys from a source file (XML or XSP) use 
the <strong>markup2message.xsl</strong> stylesheet. Simply transform your content file 
using this stylesheet. Result will be an empty message catalogue for the given 
language.</p>
  +            </s2>
  +            <s2 title="Key generation from master dictionary">
               <p>
  -            Generate a dictionary with keys and placeholders for Spanish 
translations. 
  -            Optionally, for one of the languages existing translations can be kept. 
  +            Generate a dictionary with keys and placeholders for Spanish 
translations using the <strong>merge.xsl</strong> stylesheet. Optionally, for one of 
the languages existing translations can be kept. 
               To do it set stylesheet params (manually in stylesheet or in 
command-line):
  -                    mode = keys (indicates, that only keys must be in result)   
  -                    new-lang = es (language to be added)
  -                    keep-lang = en (language to be kept in result, for convenience)
  -    
  +            </p>
  +            <ul>
  +                <li><strong>mode = keys</strong> (indicates, that only keys must be 
in result)</li>
  +                <li><strong>new-lang = es </strong> (language to be added)</li>
  +                <li><strong>keep-lang = en </strong> (language to be kept in 
result, for convenience)</li>
  +            </ul>
  +            <p>
               Command line for Xalan (Of course, Xerces and Xalan must be in your 
classpath): 
               </p>
               <source><![CDATA[
  @@ -349,11 +376,8 @@
               translations, if they were kept during generation.
               </p>
               </s2>
  -            <s2 title="Add to the original dictionary">
  +            <s2 title="Add to the master dictionary">
               <p>
  -            (Note. This step will be unnecessary when multiple dictionary
  -            support will be implemented. Hope, this will be soon)
  -
               Use the same stylesheet for this purpose with this params:
               </p>
                        <source><![CDATA[
  @@ -376,15 +400,16 @@
                <s1 title="Finally">
                        <s2 title="To be done">
                                <ul>
  -                                     <li>Multiple dictionary support</li> 
  -                                     <li>Dictionary import and include capabilities 
(like in XSLT)</li>
  -                                     <li>Command line dictionary-from-source 
generation</li>
  +                                     <li>Multiple dictionaries per pipeline 
support</li> 
  +                                     <li>Markup support in translations</li>
  +                                     <li>Named parameters support</li>
                                        <li>Dictionary caching</li>
  +                                     <li>Different bundle implementations</li>      
                                 
                                </ul>
                        </s2>
                        <s2 title="Contacts">
                                <p>
  -                                     Feel free to contact for any comments and 
improvement ideas either directly <link 
href="mailto:[EMAIL PROTECTED]";>Konstantin Piroumian</link> 
  +                                     Feel free to contact for any comments and 
improvement ideas either directly <link href="mailto:[EMAIL PROTECTED]";>Konstantin 
Piroumian</link> 
                                        or through the <link 
href="../../mail-lists.html">Cocoon Mail List</link>.
                                </p>
                        </s2>
  
  
  

----------------------------------------------------------------------
In case of troubles, e-mail:     [EMAIL PROTECTED]
To unsubscribe, e-mail:          [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to