1<?xml version='1.0'?> 2<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 3 version='1.0'> 4 5<!-- ******************************************************************** 6 $Id$ 7 ******************************************************************** 8 9 This file is part of the XSL DocBook Stylesheet distribution. 10 See /README or http://nwalsh.com/docbook/xsl/ for copyright 11 and other information. 12 13 This file contains localization templates (for internationalization) 14 ******************************************************************** --> 15 16<xsl:param name="l10n.xml" select="document('/common/l10n.xml')"/> 17 18<xsl:param name="l10n.gentext.language" select="''"/> 19<xsl:param name="l10n.gentext.default.language" select="'en'"/> 20<xsl:param name="l10n.gentext.use.xref.language" select="false()"/> 21 22<xsl:template name="l10n.language"> 23 <xsl:param name="target" select="."/> 24 <xsl:param name="xref-context" select="false()"/> 25 26 <xsl:variable name="language"> 27 <xsl:choose> 28 <xsl:when test="$l10n.gentext.language != ''"> 29 <xsl:value-of select="$l10n.gentext.language"/> 30 </xsl:when> 31 32 <xsl:when test="$xref-context or $l10n.gentext.use.xref.language"> 33 <xsl:variable name="lang-attr" 34 select="($target/ancestor-or-self::*/@lang 35 |$target/ancestor-or-self::*/@xml:lang)[last()]"/> 36 <xsl:choose> 37 <xsl:when test="string($lang-attr) = ''"> 38 <xsl:value-of select="$l10n.gentext.default.language"/> 39 </xsl:when> 40 <xsl:otherwise> 41 <xsl:value-of select="$lang-attr"/> 42 </xsl:otherwise> 43 </xsl:choose> 44 </xsl:when> 45 46 <xsl:otherwise> 47 <xsl:variable name="lang-attr" 48 select="(ancestor-or-self::*/@lang 49 |ancestor-or-self::*/@xml:lang)[last()]"/> 50 <xsl:choose> 51 <xsl:when test="string($lang-attr) = ''"> 52 <xsl:value-of select="$l10n.gentext.default.language"/> 53 </xsl:when> 54 <xsl:otherwise> 55 <xsl:value-of select="$lang-attr"/> 56 </xsl:otherwise> 57 </xsl:choose> 58 </xsl:otherwise> 59 </xsl:choose> 60 </xsl:variable> 61 62 <xsl:choose> 63 <xsl:when test="contains($language,'-')"> 64 <xsl:value-of select="substring-before($language,'-')"/> 65 <xsl:text>_</xsl:text> 66 <xsl:value-of select="substring-after($language,'-')"/> 67 </xsl:when> 68 <xsl:otherwise> 69 <xsl:value-of select="$language"/> 70 </xsl:otherwise> 71 </xsl:choose> 72</xsl:template> 73 74<xsl:template name="gentext.xref.text"> 75 <xsl:param name="element.name" select="name(.)"/> 76 <xsl:param name="default"></xsl:param> 77 <xsl:param name="lang"> 78 <xsl:call-template name="l10n.language"/> 79 </xsl:param> 80 81 <xsl:variable name="l10n.text"> 82 <xsl:value-of select="($l10n.xml/internationalization/localization[@language=$lang]/xref[@element=$element.name])[1]/@text"/> 83 </xsl:variable> 84 85 <xsl:choose> 86 <xsl:when test="$l10n.text=''"> 87 <xsl:choose> 88 <xsl:when test="$default=''"> 89 <xsl:message> 90 <xsl:text>No "</xsl:text> 91 <xsl:value-of select="$lang"/> 92 <xsl:text>" cross reference text for "</xsl:text> 93 <xsl:value-of select="$element.name"/> 94 <xsl:text>" exists and no default specified.</xsl:text> 95 </xsl:message> 96 </xsl:when> 97 <xsl:otherwise> 98 <xsl:value-of select="$default"/> 99 </xsl:otherwise> 100 </xsl:choose> 101 </xsl:when> 102 <xsl:otherwise> 103 <xsl:value-of select="$l10n.text"/> 104 </xsl:otherwise> 105 </xsl:choose> 106</xsl:template> 107 108<xsl:template name="gentext"> 109 <xsl:param name="key" select="local-name(.)"/> 110 <xsl:param name="lang"> 111 <xsl:call-template name="l10n.language"/> 112 </xsl:param> 113 114 <xsl:variable name="l10n.gentext" 115 select="($l10n.xml/internationalization/localization[@language=$lang]/gentext[@key=$key])[1]"/> 116 117 <xsl:variable name="l10n.name"> 118 <xsl:value-of select="$l10n.gentext/@text"/> 119 </xsl:variable> 120 121 <xsl:choose> 122 <xsl:when test="count($l10n.gentext)=0"> 123 <xsl:message> 124 <xsl:text>No "</xsl:text> 125 <xsl:value-of select="$lang"/> 126 <xsl:text>" localization of "</xsl:text> 127 <xsl:value-of select="$key"/> 128 <xsl:text>" exists; using "en".</xsl:text> 129 </xsl:message> 130 131 <xsl:value-of select="($l10n.xml/internationalization/localization[@language='en']/gentext[@key=$key])[1]/@text"/> 132 </xsl:when> 133 <xsl:otherwise> 134 <xsl:value-of select="$l10n.name"/> 135 </xsl:otherwise> 136 </xsl:choose> 137</xsl:template> 138 139<xsl:template name="gentext.element.name"> 140 <xsl:param name="element.name" select="name(.)"/> 141 <xsl:param name="lang"> 142 <xsl:call-template name="l10n.language"/> 143 </xsl:param> 144 145 <xsl:call-template name="gentext"> 146 <xsl:with-param name="key" select="$element.name"/> 147 <xsl:with-param name="lang" select="$lang"/> 148 </xsl:call-template> 149</xsl:template> 150 151<xsl:template name="gentext.space"> 152 <xsl:text> </xsl:text> 153</xsl:template> 154 155<xsl:template name="gentext.edited.by"> 156 <xsl:call-template name="gentext.element.name"> 157 <xsl:with-param name="element.name">Editedby</xsl:with-param> 158 </xsl:call-template> 159</xsl:template> 160 161<xsl:template name="gentext.by"> 162 <xsl:call-template name="gentext.element.name"> 163 <xsl:with-param name="element.name">by</xsl:with-param> 164 </xsl:call-template> 165</xsl:template> 166 167<xsl:template name="gentext.dingbat"> 168 <xsl:param name="dingbat">bullet</xsl:param> 169 <xsl:param name="lang"> 170 <xsl:call-template name="l10n.language"/> 171 </xsl:param> 172 173 <xsl:variable name="l10n.dingbat"> 174 <xsl:value-of select="($l10n.xml/internationalization/localization[@language=$lang]/dingbat[@key=$dingbat])[1]/@text"/> 175 </xsl:variable> 176 177 <xsl:choose> 178 <xsl:when test="$l10n.dingbat=''"> 179 <xsl:message> 180 <xsl:text>No "</xsl:text> 181 <xsl:value-of select="$lang"/> 182 <xsl:text>" localization of dingbat </xsl:text> 183 <xsl:value-of select="$dingbat"/> 184 <xsl:text> exists; using "en".</xsl:text> 185 </xsl:message> 186 187 <xsl:value-of select="($l10n.xml/internationalization/localization[@language='en']/dingbat[@key=$dingbat])[1]/@text"/> 188 </xsl:when> 189 <xsl:otherwise> 190 <xsl:value-of select="$l10n.dingbat"/> 191 </xsl:otherwise> 192 </xsl:choose> 193</xsl:template> 194 195<xsl:template name="gentext.startquote"> 196 <xsl:call-template name="gentext.dingbat"> 197 <xsl:with-param name="dingbat">startquote</xsl:with-param> 198 </xsl:call-template> 199</xsl:template> 200 201<xsl:template name="gentext.endquote"> 202 <xsl:call-template name="gentext.dingbat"> 203 <xsl:with-param name="dingbat">endquote</xsl:with-param> 204 </xsl:call-template> 205</xsl:template> 206 207<xsl:template name="gentext.nestedstartquote"> 208 <xsl:call-template name="gentext.dingbat"> 209 <xsl:with-param name="dingbat">nestedstartquote</xsl:with-param> 210 </xsl:call-template> 211</xsl:template> 212 213<xsl:template name="gentext.nestedendquote"> 214 <xsl:call-template name="gentext.dingbat"> 215 <xsl:with-param name="dingbat">nestedendquote</xsl:with-param> 216 </xsl:call-template> 217</xsl:template> 218 219<xsl:template name="gentext.nav.prev"> 220 <xsl:call-template name="gentext.element.name"> 221 <xsl:with-param name="element.name">nav-prev</xsl:with-param> 222 </xsl:call-template> 223</xsl:template> 224 225<xsl:template name="gentext.nav.next"> 226 <xsl:call-template name="gentext.element.name"> 227 <xsl:with-param name="element.name">nav-next</xsl:with-param> 228 </xsl:call-template> 229</xsl:template> 230 231<xsl:template name="gentext.nav.home"> 232 <xsl:call-template name="gentext.element.name"> 233 <xsl:with-param name="element.name">nav-home</xsl:with-param> 234 </xsl:call-template> 235</xsl:template> 236 237<xsl:template name="gentext.nav.up"> 238 <xsl:call-template name="gentext.element.name"> 239 <xsl:with-param name="element.name">nav-up</xsl:with-param> 240 </xsl:call-template> 241</xsl:template> 242 243<!-- ============================================================ --> 244 245<xsl:template name="gentext.template"> 246 <xsl:param name="context" select="'default'"/> 247 <xsl:param name="name" select="'default'"/> 248 <xsl:param name="lang"> 249 <xsl:call-template name="l10n.language"/> 250 </xsl:param> 251 252 <xsl:variable name="localization.node" 253 select="($l10n.xml/internationalization/localization[@language=$lang])[1]"/> 254 255 <xsl:if test="count($localization.node) = 0"> 256 <xsl:message> 257 <xsl:text>No "</xsl:text> 258 <xsl:value-of select="$lang"/> 259 <xsl:text>" localization exists.</xsl:text> 260 </xsl:message> 261 </xsl:if> 262 263 <xsl:variable name="context.node" 264 select="$localization.node/context[@name=$context]"/> 265 266 <xsl:if test="count($context.node) = 0"> 267 <xsl:message> 268 <xsl:text>No context named "</xsl:text> 269 <xsl:value-of select="$context"/> 270 <xsl:text>" exists in the "</xsl:text> 271 <xsl:value-of select="$lang"/> 272 <xsl:text>" localization.</xsl:text> 273 </xsl:message> 274 </xsl:if> 275 276 <xsl:variable name="template.node" 277 select="$context.node/template[@name=$name][1]"/> 278 279 <xsl:if test="count($template.node) = 0"> 280 <xsl:message> 281 <xsl:text>No template named "</xsl:text> 282 <xsl:value-of select="$name"/> 283 <xsl:text>" exists in the context named "</xsl:text> 284 <xsl:value-of select="$context"/> 285 <xsl:text>" in the "</xsl:text> 286 <xsl:value-of select="$lang"/> 287 <xsl:text>" localization.</xsl:text> 288 </xsl:message> 289 </xsl:if> 290 291 <xsl:value-of select="$template.node/@text"/> 292</xsl:template> 293 294</xsl:stylesheet> 295 296