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