kpiroumian 2002/09/24 10:27:12 Added: src/resources/dev/i18n convert.xsl markup2messages.xsl merge.xsl simple_dict.xml Log: Helper stylesheets for i18n message catalogue maintenance. Revision Changes Path 1.1 xml-cocoon2/src/resources/dev/i18n/convert.xsl Index: convert.xsl =================================================================== <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output indent="yes" method="xml"/> <!-- specify here the language of the catalogue you would like to create --> <xsl:param name="lang">hy</xsl:param> <xsl:template match="translations"> <catalogue xml:lang="{$lang}"> <xsl:apply-templates select="entry"/> </catalogue> </xsl:template> <xsl:template match="entry"> <message key="{key}"> <xsl:value-of select="translation[@lang=$lang]"/> </message> </xsl:template> </xsl:stylesheet> 1.1 xml-cocoon2/src/resources/dev/i18n/markup2messages.xsl Index: markup2messages.xsl =================================================================== <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:i18n="http://apache.org/cocoon/i18n/2.0" exclude-result-prefixes="i18n"> <xsl:output method="xml" indent="yes" /> <xsl:param name="target-locale">en</xsl:param> <xsl:template match="/"> <catalogue> <xsl:attribute name="xml:lang"><xsl:value-of select="$target-locale" /></xsl:attribute> <xsl:apply-templates select="//i18n:text | //@i18n:attr"/> </catalogue> </xsl:template> <!-- i18n:text element processing --> <xsl:template match="i18n:text"> <xsl:call-template name="create-entry"> <xsl:with-param name="key-value"> <xsl:choose> <xsl:when test="@key"><xsl:value-of select="@key"/></xsl:when> <xsl:otherwise><xsl:value-of select="text()" /></xsl:otherwise> </xsl:choose> </xsl:with-param> </xsl:call-template> </xsl:template> <!-- i18n:attr attribute processing --> <xsl:template match="@i18n:attr"> <xsl:call-template name="process-attributes"> <xsl:with-param name="attr-list" select="." /> </xsl:call-template> </xsl:template> <xsl:template name="process-attributes"> <xsl:param name="attr-list" /> <xsl:variable name="attr-nlist" select="concat(normalize-space($attr-list), ' ')" /> <xsl:variable name="first" select="substring-before($attr-nlist, ' ')" /> <xsl:variable name="rest" select="substring-after($attr-nlist, ' ')" /> <xsl:variable name="key-value" select="../@*[name()=$first][1]" /> <xsl:call-template name="create-entry"> <xsl:with-param name="key-value" select="$key-value" /> </xsl:call-template> <xsl:if test="$rest"> <xsl:call-template name="process-attributes"> <xsl:with-param name="attr-list" select="$rest" /> </xsl:call-template> </xsl:if> </xsl:template> <xsl:template name="create-entry"> <xsl:param name="key-value" /> <message key="{$key-value}"><xsl:value-of select="$key-value" /></message> </xsl:template> </xsl:stylesheet> 1.1 xml-cocoon2/src/resources/dev/i18n/merge.xsl Index: merge.xsl =================================================================== <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output indent="yes" method="xml" /> <!-- Usage patterns. ****************** 1. Key generation mode is used to generate a dictionary file from the existing containing only keys, empty translation nodes with lang attribute equal to $new-lang and, optionaly, translation for another language - for convenience. Example: $mode = keys, $new-lang=fr, $keep-lang=en Result will be a dictionary template for French. 2. Merging translations is useful when you need to add or update translations for a new or existing language. You have to create a translations file with new values and set $new-dict param. 3. To add a new language you will need to generate a template with keys, translate them, then merge with the existing dictionary. --> <!-- Modes: keys - generates a template with keys for the given language merge - adds/updates translations from the given file --> <xsl:param name="mode">merge</xsl:param> <!-- The language to be added or used in keys mode --> <xsl:param name="new-lang">de</xsl:param> <!-- Translations for this language will be kept during key generation --> <xsl:param name="keep-lang"></xsl:param> <!-- New translations' file name - format is the same as for the dictionary --> <xsl:param name="new-dict">simple_dict_de.xml</xsl:param> <xsl:template match="translations"> <xsl:copy> <xsl:choose> <xsl:when test="$mode='keys'"> <xsl:apply-templates mode="keys" /> </xsl:when> <xsl:otherwise> <xsl:apply-templates /> </xsl:otherwise> </xsl:choose> </xsl:copy> </xsl:template> <xsl:template match="entry" mode="keys"> <xsl:copy> <xsl:apply-templates select="key | translation[@lang=$keep-lang]" /> <translation lang="{$new-lang}">[translate]</translation> </xsl:copy> </xsl:template> <xsl:template match="entry" > <xsl:copy> <xsl:apply-templates /> <xsl:if test="not(translation[@lang=$new-lang])"> <xsl:variable name="key" select="key/text()" /> <xsl:variable name="value" select="document($new-dict)/translations/entry[key=$key]/translation[@lang=$new-lang]" /> <translation lang="{$new-lang}"><xsl:value-of select="normalize-space($value)" /></translation> </xsl:if> </xsl:copy> </xsl:template> <xsl:template match="translation[@lang=$new-lang]" > <xsl:variable name="key" select="../key/text()" /> <xsl:variable name="value" select="document($new-dict)/translations/entry[key=$key]/translation[@lang=$new-lang]" /> <xsl:copy> <xsl:apply-templates select="@*"/> <xsl:value-of select="normalize-space($value)" /> </xsl:copy> </xsl:template> <xsl:template match="@* | * | text() | processing-instruction() | comment()" priority="-1" mode="keys"> <xsl:copy> <xsl:apply-templates select="@* | * | text() | processing-instruction() | comment()"/> </xsl:copy> </xsl:template> <xsl:template match="@* | * | text() | processing-instruction() | comment()" priority="-1"> <xsl:copy> <xsl:apply-templates select="@* | * | text() | processing-instruction() | comment()"/> </xsl:copy> </xsl:template> </xsl:stylesheet> 1.1 xml-cocoon2/src/resources/dev/i18n/simple_dict.xml Index: simple_dict.xml =================================================================== <?xml version="1.0" encoding="UTF-8"?> <translations> <!-- Languages: en - English ru - Russian de - German (thanks to Jörg Prante) pl - Polish (thanks to Krzysztof Zieliński) es - Spanish hy - Armenian. --> <!-- Language links --> <entry> <key>count_title</key> <translation lang="en">This page was accessed {0} times. Last at: {1}.</translation> <translation lang="ru">На эту страницу заходили {0} раз(а). В последний раз {1}.</translation> <translation lang="de">Diese Seite wurde {0}mal aufgerufen. Letzter Aufruf: {1}.</translation> <translation lang="pl">Ta strona była pobierana {0} razy. Ostatnio {1}</translation> <translation lang="es">Esta página fue tenida acceso {0} veces. Pasado en: {1}.</translation> <translation lang="hy">²Ûë ¿çÁ ³Ûó»É»É »Ý {0} ³Ý·³Ù. ì»ñçÇÝÁ {1}.</translation> </entry> <entry> <key>a_key</key> <translation lang="en">This is a key value.</translation> <translation lang="ru">Это значение по ключу.</translation> <translation lang="de">Dies ist der Wert eines Schlüssels.</translation> <translation lang="pl">To jest klucz.</translation> <translation lang="es">Esto es un valor clave.</translation> <translation lang="hy">ê³ µ³Ý³ÉÇÇ ³éÅ»ùÝ ¿£</translation> </entry> <entry> <key>lang_id1</key> <translation lang="en">ru</translation> <translation lang="ru">en</translation> <translation lang="de">en</translation> <translation lang="pl">en</translation> <translation lang="es">en</translation> <translation lang="hy">en</translation> </entry> <entry> <key>lang_id2</key> <translation lang="en">de</translation> <translation lang="ru">de</translation> <translation lang="de">ru</translation> <translation lang="pl">ru</translation> <translation lang="es">ru</translation> <translation lang="hy">ru</translation> </entry> <entry> <key>lang_id3</key> <translation lang="en">pl</translation> <translation lang="ru">pl</translation> <translation lang="de">pl</translation> <translation lang="pl">de</translation> <translation lang="es">de</translation> <translation lang="hy">de</translation> </entry> <entry> <key>lang_id4</key> <translation lang="en">es</translation> <translation lang="ru">es</translation> <translation lang="de">es</translation> <translation lang="pl">es</translation> <translation lang="es">pl</translation> <translation lang="hy">pl</translation> </entry> <entry> <key>lang_id5</key> <translation lang="en">hy</translation> <translation lang="ru">hy</translation> <translation lang="de">hy</translation> <translation lang="pl">hy</translation> <translation lang="es">hy</translation> <translation lang="hy">es</translation> </entry> <!-- current language --> <entry> <key>language</key> <translation lang="en">English</translation> <translation lang="ru">Русский</translation> <translation lang="de">Deutsch</translation> <translation lang="pl">Polski</translation> <translation lang="es">Español</translation> <translation lang="hy">гۻñ»Ý</translation> </entry> <entry> <key>language1</key> <translation lang="en">Russian</translation> <translation lang="ru">Английский</translation> <translation lang="de">Englische</translation> <translation lang="pl">Angielski</translation> <translation lang="es">Inglés</translation> <translation lang="hy">²Ý·É»ñ»Ý</translation> </entry> <entry> <key>language2</key> <translation lang="en">German</translation> <translation lang="ru">Немецкий</translation> <translation lang="de">Russe</translation> <translation lang="pl">Rosyjski</translation> <translation lang="es">Ruso</translation> <translation lang="hy">èáõë»ñ»Ý</translation> </entry> <entry> <key>language3</key> <translation lang="en">Polish</translation> <translation lang="ru">Польский</translation> <translation lang="de">Polnisch</translation> <translation lang="pl">Niemiecki</translation> <translation lang="es">Alemán</translation> <translation lang="hy">¶»ñٳݻñ»Ý</translation> </entry> <entry> <key>language4</key> <translation lang="en">Spanish</translation> <translation lang="ru">Испанский</translation> <translation lang="de">Spanisch</translation> <translation lang="pl">Hiszpañski</translation> <translation lang="es">Polaco</translation> <translation lang="hy">Ȼѻñ»Ý</translation> </entry> <entry> <key>language5</key> <translation lang="en">Armenian</translation> <translation lang="ru">Армянский</translation> <translation lang="de">Armenier</translation> <translation lang="pl">Armeñski</translation> <translation lang="es">Armenio</translation> <translation lang="hy">Æëå³Ý»ñ»Ý</translation> </entry> <entry> <key>Hello, internationalization!</key> <translation lang="en">Hello, internationalization!</translation> <translation lang="ru">Привет, многоязычность!</translation> <translation lang="de">Herzlich willkommen, Internationalisierung!</translation> <translation lang="pl">Witam, oto przykład wielojęzycznej strony!</translation> <translation lang="es">¡¡Hola!, internacionalización!</translation> <translation lang="hy">´³ñ¢°, ÇÝï»ñݳóÛáݳÉáõÃÛáõÝ£</translation> </entry> <entry> <key>Documentation link:</key> <translation lang="en">See i18n documentation for details:</translation> <translation lang="ru">Для дополнительной информации по i18n смотри:</translation> <translation lang="de">Näheres unter der i18n Dokumentation:</translation> <translation lang="pl">Widzą i18n dokumentacja dla szczegółów:</translation> <translation lang="es">Visto la documentación i18n para detalles:</translation> <translation lang="hy">سÝñ³Ù³ë µ³ó³ïñáõÃÛ³Ý Ñ³Ù³ñ ݳÇñª</translation> </entry> <entry> <key>first</key> <translation lang="en">First</translation> <translation lang="ru">Первый</translation> <translation lang="de">Erstens</translation> <translation lang="pl">Pierwszy</translation> <translation lang="es">Primero</translation> <translation lang="hy">²é³çÇÝ</translation> </entry> <entry> <key>second</key> <translation lang="en">Second</translation> <translation lang="ru">Второй</translation> <translation lang="de">Zweitens</translation> <translation lang="pl">Drugi</translation> <translation lang="es">Segundo</translation> <translation lang="hy">ºñÏñáñ¹</translation> </entry> <entry> <key>third</key> <translation lang="en">Third</translation> <translation lang="ru">Третий</translation> <translation lang="de">Drittens</translation> <translation lang="pl">Trzeci</translation> <translation lang="es">Tercio</translation> <translation lang="hy">ºññáñ¹</translation> </entry> <entry> <key>forth</key> <translation lang="en">Forth</translation> <translation lang="ru">Четвертый</translation> <translation lang="de">Viertens</translation> <translation lang="pl">Czwarty</translation> <translation lang="es">En adelante</translation> <translation lang="hy">¼áñáñ¹</translation> </entry> <entry> <key>article</key> <translation lang="en">Article</translation> <translation lang="ru">Статья</translation> <translation lang="de">Artikel</translation> <translation lang="pl">Artykuł</translation> <translation lang="es">Artículo</translation> <translation lang="hy">Ðá¹í³Í</translation> </entry> <entry> <key>article_text1</key> <translation lang="en">This is a i18n paragraph.</translation> <translation lang="ru">Это интернационализированный абзац.</translation> <translation lang="de">Dies ist ein Absatz nach i18n.</translation> <translation lang="pl">To jest paragraf w i18n.</translation> <translation lang="es">Esto es un párrafo i18n.</translation> <translation lang="hy">ê³ ÇÝï»ñݳóÛáÝ³É å³ñ³·ñ³ý ¿£</translation> </entry> <entry> <key>article_text2</key> <translation lang="en">This is another i18n paragraph and is also a cool one.</translation> <translation lang="ru">Это тоже интернационализированный абзац и такой же классный.</translation> <translation lang="de">Dies ist ein weiterer Absatz nach i18n und auch noch ein ziemlich cooler dazu.</translation> <translation lang="pl">To jest następny paragraf w i18n i jest takze fajny.</translation> <translation lang="es">Esto es otro párrafo i18n y es también uno 'cool'.</translation> <translation lang="hy">ê³ ÙÇ áõñÇß ÇÝï»ñݳóÛáÝ³É å³ñ³·ñ³ý ¿, ¢ ÝáõÛÝ å»ë ó»Ýïñ£</translation> </entry> <entry> <key>copyright</key> <translation lang="en">Copyright © 2001 Konstantin Piroumian. No rights are reserved.</translation> <translation lang="ru">Авторские права © 2001 Константин Пирумян. Ничто не защищено.</translation> <translation lang="de">Copyright © 2001 Konstantin Piroumian. Deutsche Übersetzung von Jörg Prante.</translation> <translation lang="pl">Copyright © 2001 Konstantin Piroumian i Krzysztof Zieliński. Żadne prawa nie są zastrzeżone:)</translation> <translation lang="es">Copyright © 2001 Konstantin Piroumian. Ningunos derechos son reservados.</translation> <translation lang="hy">Copyright © 2001 Konstantin Piroumian. àãÇÝã ãÇ å³Ñå³Ýí³Í£</translation> </entry> <entry> <key>Hello, {0}! Glad to see you!</key> <translation lang="en">Hello, {0}! Glad to see you!</translation> <translation lang="ru">Привет, {0}! Рад тебя видеть!</translation> <translation lang="de">Hallo {0}! Schön, dich zu sehen!</translation> <translation lang="pl">Witam, {0}! Miło Cię widzieć!</translation> <translation lang="es">¡¡Hola!, {0}! ¡Alegre de verle!</translation> <translation lang="hy">´³ñ¢¯ {0}: àõñ³Ë »Ù ù»½ ï»ëݻɣ</translation> </entry> <entry> <key>Kot</key> <translation lang="en">Tomcat</translation> <translation lang="ru">Кот</translation> <translation lang="de">Tomcat</translation> <translation lang="pl">Tomcat</translation> <translation lang="es">Gato</translation> <translation lang="hy">γïáõ</translation> </entry> <entry> <key>none</key> <translation lang="en">None</translation> <translation lang="ru">Никто</translation> <translation lang="de">nichts</translation> <translation lang="pl">Nic</translation> <translation lang="es">Ninguno</translation> <translation lang="hy">àã áù</translation> </entry> <entry> <key>one</key> <translation lang="en">one</translation> <translation lang="ru">раз</translation> <translation lang="de">eins</translation> <translation lang="pl">raz</translation> <translation lang="es">un</translation> <translation lang="hy">Ù»Ï</translation> </entry> <entry> <key>two</key> <translation lang="en">two</translation> <translation lang="ru">два</translation> <translation lang="de">zwei</translation> <translation lang="pl">dwa</translation> <translation lang="es">dos</translation> <translation lang="hy">»ñÏáõë</translation> </entry> </translations>
---------------------------------------------------------------------- In case of troubles, e-mail: [EMAIL PROTECTED] To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]