Michael,
Please get the latest C2.1, i have integrated your changes there. FYI, i kept the
Namespace URI as
"http://apache.org/cocoon/i18n/2.0" (NOT 2.1 as in your patch)
Konstantin,
I think these changes should get into C2.0. What is your opinion? If we decide not to
sync the
changes, then i will bump up the Namespace URI in C2.1 CVS to
"http://apache.org/cocoon/i18n/2.1".
Thanks,
dims
--- Enke Michael <[EMAIL PROTECTED]> wrote:
> Davanum Srinivas wrote:
> >
> > Team,
> >
> > Was out of the loop for a while....Are there any patches that need to get in?
>There was one
> from
> > Tom for SQLTransformer (that tom said still needs some work before it can get in).
>Anything
> other
> > than that, please repost the patch with "cvs diff" from the latest CVS.
> >
> > Thanks,
> > dims
> >
> > =====
> > Davanum Srinivas, JNI-FAQ Manager
> > http://www.jGuru.com/faq/JNI
>
>
> At 07 Aug 2001 I posted patches for
> src/org/apache/cocoon/transformation/I18nTransformer.java
> and
> xdocs/i18n-transformer.xml
>
> I have no access to cvs, thats why I post an ordinary diff -u
> before changes:
> version of xdocs/i18n-transformer.xml: 1.6
> version of src/org/apache/cocoon/transformation/I18nTransformer.java:
> 1.14
>
>
> Regards,
> Michael
>
> > --- i18n-transformer.xml.orig Tue Aug 7 14:28:16 2001
> +++ i18n-transformer.xml Tue Aug 7 14:32:56 2001
> @@ -28,11 +28,14 @@
> <code>I18nTransformer</code>
> </link>
> , it 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>
> +
><code>xmlns:i18n="http://apache.org/cocoon/i18n/2.1"</code>
> </p>
> <p>
> First implementation was developed by <link
>href="mailto:[EMAIL PROTECTED]">Lassi
> Immonen</link>. In this implementation syntax was changed according to the <link
> href="http://www.infozone-group.org">Infozone Group's</link> i18n proposal (with a
>little
> difference) 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>
> <ul>
> <li>Name : i18n</li>
> <li>Class:
>org.apache.cocoon.transformation.I18nTransformer</li>
> @@ -168,10 +171,19 @@
> </p>
> </s2>
> <s2 title="Date, time and number formatting">
> - <p>To format dates and time 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>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.
> + </p>
> + <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>
> + <p>
> + A given real <code>pattern</code> and
><code>src-pattern</code> (not short, medium, long,
> full) overwrites the <code>locale</code> and <code>src-locale</code>.
> </p>
> <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 and time, formatted with default localized pattern.
> + 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. E.g.:
> </p>
> > --- I18nTransformer.java.orig Tue Aug 7 12:36:07 2001
> +++ I18nTransformer.java Tue Aug 7 14:34:11 2001
> @@ -176,6 +176,27 @@
> * </map:match>
> * </pre>
> *
> + * <p/>
> + * <ul>
> + * <li><strong><i18n:date/></strong> gives now only the date.</li>
> + * <li><strong><i18n:date-time/></strong> gives the date and time.</li>
> + * <li><strong><i18n:time/></strong> gives the time.</li>
> + * <li>For date, date-time and time the pattern and src-pattern attribute
> + * may have also values of: "short", "medium",
> + * "long" or "full".</li>
> + * </ul>
> + * <p/>
> + * <ul>
> + * <li>for 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</li>
> + * <li>A given real pattern and src-pattern (not short, medium, long, full)
> + * overwrites the locale and src-locale</li>
> + * </ul>
> + * <p/>
> * Future work coming:
> *
> * <ul>
> @@ -186,6 +207,7 @@
> * @author <a href="mailto:[EMAIL PROTECTED]">Marcus Crafter</a>
> * @author <a href="mailto:[EMAIL PROTECTED]">Konstantin Piroumian</a>
> * @author <a href="mailto:[EMAIL PROTECTED]">Lassi Immonen</a>
> + * @author <a href="mailto:[EMAIL PROTECTED]">Michael Enke</a>
> */
> public class I18nTransformer extends AbstractTransformer
> implements Composable, Poolable, Configurable {
> @@ -193,10 +215,10 @@
> protected ComponentManager manager;
>
> /**
> - * The namespace for i18n is "http://apache.org/cocoon/i18n/2.0"
> + * The namespace for i18n is "http://apache.org/cocoon/i18n/2.1"
> */
> public static final String I18N_NAMESPACE_URI =
> - "http://apache.org/cocoon/i18n/2.0";
> + "http://apache.org/cocoon/i18n/2.1";
>
> //
> // Dictionary elements and attributes
> @@ -216,12 +238,16 @@
> public static final String I18N_TRANSLATE_ELEMENT = "translate";
> public static final String I18N_PARAM_ELEMENT = "param";
> public static final String I18N_DATE_ELEMENT = "date";
> + public static final String I18N_DATE_TIME_ELEMENT = "date-time";
> + public static final String I18N_TIME_ELEMENT = "time";
> public static final String I18N_NUMBER_ELEMENT = "number";
>
> // number and date formatting attributes
> public static final String I18N_SRC_PATTERN_ATTRIBUTE = "src-pattern";
> public static final String I18N_PATTERN_ATTRIBUTE = "pattern";
> public static final String I18N_VALUE_ATTRIBUTE = "value";
> + public static final String I18N_LOCALE_ATTRIBUTE = "locale";
> + public static final String I18N_SRC_LOCALE_ATTRIBUTE = "src-locale";
>
> // configuration parameters
> public static final String I18N_CATALOGUE_NAME = "catalogue-name";
> @@ -253,7 +279,9 @@
> private static final int STATE_TRANSLATE_KEY = 5;
> private static final int STATE_TRANSLATE_TEXT_KEY = 6;
> private static final int STATE_INSIDE_DATE = 7;
> - private static final int STATE_INSIDE_NUMBER = 8;
> + private static final int STATE_INSIDE_DATE_TIME = 8;
> + private static final int STATE_INSIDE_TIME = 9;
> + private static final int STATE_INSIDE_NUMBER = 10;
>
> /**
> * Current state of the transformer.
> @@ -316,7 +344,7 @@
> /**
> * Locale setting.
> */
> - private Locale locale;
> + private Locale locale, loc, srcLoc;
>
> /**
> * Date element attributes and their values.
> @@ -534,6 +562,24 @@
>
> setFormattingParams(attr);
> current_state = STATE_INSIDE_DATE;
> + } else if (I18N_DATE_TIME_ELEMENT.equals(name)) {
> + if (current_state != STATE_OUTSIDE) {
> + throw new SAXException(this.getClass().getName()
> + + ": i18n:date-time elements are not
>allowed "
> + + "inside of other i18n elements.");
> + }
> +
> + setFormattingParams(attr);
> + current_state = STATE_INSIDE_DATE_TIME;
> + } else if (I18N_TIME_ELEMENT.equals(name)) {
> + if (current_state != STATE_OUTSIDE) {
> + throw new SAXException(this.getClass().getName()
> + + ": i18n:date elements are not allowed "
> + + "inside of other i18n elements.");
> + }
> +
> + setFormattingParams(attr);
> + current_state = STATE_INSIDE_TIME;
> } else if (I18N_NUMBER_ELEMENT.equals(name)) {
> if (current_state != STATE_OUTSIDE) {
> throw new SAXException(this.getClass().getName()
> @@ -573,6 +619,16 @@
> formattingParams.put(I18N_VALUE_ATTRIBUTE, attr_value);
> }
>
> + attr_value = attr.getValue(I18N_LOCALE_ATTRIBUTE);
> + if (attr_value != null) {
> + formattingParams.put(I18N_LOCALE_ATTRIBUTE, attr_value);
> + }
> +
> + attr_value = attr.getValue(I18N_SRC_LOCALE_ATTRIBUTE);
> + if (attr_value != null) {
> + formattingParams.put(I18N_SRC_LOCALE_ATTRIBUTE, attr_value);
> + }
> +
> attr_value = attr.getValue(I18N_TYPE_ATTRIBUTE);
> if (attr_value != null) {
> formattingParams.put(I18N_TYPE_ATTRIBUTE, attr_value);
> @@ -605,8 +661,10 @@
> break;
> }
> case STATE_INSIDE_DATE:
> + case STATE_INSIDE_DATE_TIME:
> + case STATE_INSIDE_TIME:
> {
> - endDateElement();
> + endDate_TimeElement();
> break;
> }
> case STATE_INSIDE_NUMBER:
> @@ -688,6 +746,9 @@
> break;
> }
> case STATE_INSIDE_DATE:
> + case STATE_INSIDE_DATE_TIME:
> + case STATE_INSIDE_TIME:
> + case STATE_INSIDE_NUMBER:
> {
> if (formattingParams != null) {
> if (formattingParams.get(I18N_VALUE_ATTRIBUTE) == null) {
> @@ -699,18 +760,6 @@
> }
> break;
> }
> - case STATE_INSIDE_NUMBER:
> - {
> - if (formattingParams != null) {
> - if (formattingParams.get(I18N_PATTERN_ATTRIBUTE) == null) {
> - formattingParams.put(I18N_PATTERN_ATTRIBUTE, key);
> - } else {
> - // how to use the text inside of number element?
> - }
> -
> - }
> - break;
> - }
> default:
> {
> throw new SAXException(this.getClass().getName()
> @@ -812,9 +861,11 @@
> debug("Put param value: " + param_value);
> formattingParams.put(I18N_VALUE_ATTRIBUTE, param_value);
> }
> - if ("date".equals(paramType)) {
> - debug("Formatting date param: " + formattingParams);
> - param_value = formatDate(formattingParams);
> + if ("date".equals(paramType) ||
> + "date-time".equals(paramType) ||
> + "time".equals(paramType)) {
> + debug("Formatting date_time param: " + formattingParams);
> + param_value = formatDate_Time(formattingParams);
> } else if ("number".equals(paramType)) {
> debug("Formatting number param: " + formattingParams);
> param_value = formatNumber(formattingParams);
> @@ -848,17 +899,43 @@
> current_state = STATE_OUTSIDE;
> }
>
> - private void endDateElement() throws SAXException {
> - String result = formatDate(formattingParams);
> + private void endDate_TimeElement() throws SAXException {
> + String result = formatDate_Time(formattingParams);
> super.contentHandler.characters(result.toCharArray(), 0, result.length());
> current_state = STATE_OUTSIDE;
> }
>
> - private String formatDate(Map params) throws SAXException {
> + private Locale getLocale(Map params, String attribute) {
> + Locale locale = this.locale;
>
=== message truncated ===>
---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, email: [EMAIL PROTECTED]
=====
Davanum Srinivas, JNI-FAQ Manager
http://www.jGuru.com/faq/JNI
__________________________________________________
Do You Yahoo!?
Make international calls for as low as $.04/minute with Yahoo! Messenger
http://phonecard.yahoo.com/
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, email: [EMAIL PROTECTED]