Next update of VFS modules development guide
[kai/samba.git] / docs-xml / xslt / db2latex-xsl / xsl / common / l10n.xsl
1 <?xml version='1.0'?>
2 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
3                 xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0"
4                 exclude-result-prefixes="l"
5                 version='1.0'>
6
7 <!-- ********************************************************************
8      $Id: l10n.xsl,v 1.8 2004/01/28 02:09:23 j-devenish Exp $
9      ********************************************************************
10
11      This file is part of the XSL DocBook Stylesheet distribution.
12
13      This file contains localization templates (for internationalization)
14
15      Copyright (C) 1999, 2000, 2001, 2002 Norman Walsh.
16      ******************************************************************** -->
17
18 <xsl:param name="l10n.xml" select="document('../common/l10n.xml')"/>
19 <xsl:param name="local.l10n.xml" select="document('')"/>
20 <xsl:param name="l10n.gentext.language" select="''"/>
21 <xsl:param name="l10n.gentext.default.language" select="'fr'"/>
22 <xsl:param name="l10n.gentext.use.xref.language" select="false()"/>
23
24 <xsl:template name="l10n.language">
25   <xsl:param name="target" select="."/>
26   <xsl:param name="xref-context" select="false()"/>
27
28   <xsl:variable name="mc-language">
29     <xsl:choose>
30       <xsl:when test="$l10n.gentext.language != ''">
31         <xsl:value-of select="$l10n.gentext.language"/>
32       </xsl:when>
33
34       <xsl:when test="$xref-context or $l10n.gentext.use.xref.language != 0">
35         <!-- can't do this one step: attributes are unordered! -->
36         <xsl:variable name="lang-scope"
37                       select="($target/ancestor-or-self::*[@lang]
38                                |$target/ancestor-or-self::*[@xml:lang])[last()]"/>
39         <xsl:variable name="lang-attr"
40                       select="($lang-scope/@lang | $lang-scope/@xml:lang)[1]"/>
41         <xsl:choose>
42           <xsl:when test="string($lang-attr) = ''">
43             <xsl:value-of select="$l10n.gentext.default.language"/>
44           </xsl:when>
45           <xsl:otherwise>
46             <xsl:value-of select="$lang-attr"/>
47           </xsl:otherwise>
48         </xsl:choose>
49       </xsl:when>
50
51       <xsl:otherwise>
52         <!-- can't do this one step: attributes are unordered! -->
53         <xsl:variable name="lang-scope"
54                       select="($target/ancestor-or-self::*[@lang]
55                            |$target/ancestor-or-self::*[@xml:lang])[last()]"/>
56         <xsl:variable name="lang-attr"
57                       select="($lang-scope/@lang | $lang-scope/@xml:lang)[1]"/>
58
59         <xsl:choose>
60           <xsl:when test="string($lang-attr) = ''">
61             <xsl:value-of select="$l10n.gentext.default.language"/>
62           </xsl:when>
63           <xsl:otherwise>
64             <xsl:value-of select="$lang-attr"/>
65           </xsl:otherwise>
66         </xsl:choose>
67       </xsl:otherwise>
68     </xsl:choose>
69   </xsl:variable>
70
71   <xsl:variable name="language" select="translate($mc-language,
72                                         'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
73                                         'abcdefghijklmnopqrstuvwxyz')"/>
74
75   <xsl:variable name="adjusted.language">
76     <xsl:choose>
77       <xsl:when test="contains($language,'-')">
78         <xsl:value-of select="substring-before($language,'-')"/>
79         <xsl:text>_</xsl:text>
80         <xsl:value-of select="substring-after($language,'-')"/>
81       </xsl:when>
82       <xsl:otherwise>
83         <xsl:value-of select="$language"/>
84       </xsl:otherwise>
85     </xsl:choose>
86   </xsl:variable>
87
88   <xsl:choose>
89     <xsl:when test="$l10n.xml/l:i18n/l:l10n[@language=$adjusted.language]">
90       <xsl:value-of select="$adjusted.language"/>
91     </xsl:when>
92     <!-- try just the lang code without country -->
93     <xsl:when test="$l10n.xml/l:i18n/l:l10n[@language=substring-before($adjusted.language,'_')]">
94       <xsl:value-of select="substring-before($adjusted.language,'_')"/>
95     </xsl:when>
96     <!-- or use the default -->
97     <xsl:otherwise>
98       <xsl:message>
99         <xsl:text>No localization exists for "</xsl:text>
100         <xsl:value-of select="$adjusted.language"/>
101         <xsl:text>" or "</xsl:text>
102         <xsl:value-of select="substring-before($adjusted.language,'_')"/>
103         <xsl:text>". Using default "</xsl:text>
104         <xsl:value-of select="$l10n.gentext.default.language"/>
105         <xsl:text>".</xsl:text>
106       </xsl:message>
107       <xsl:value-of select="$l10n.gentext.default.language"/>
108     </xsl:otherwise>
109   </xsl:choose>
110 </xsl:template>
111
112 <xsl:template name="language.attribute">
113   <xsl:param name="node" select="."/>
114
115   <xsl:variable name="language">
116     <xsl:choose>
117       <xsl:when test="$l10n.gentext.language != ''">
118         <xsl:value-of select="$l10n.gentext.language"/>
119       </xsl:when>
120
121       <xsl:otherwise>
122         <!-- can't do this one step: attributes are unordered! -->
123         <xsl:variable name="lang-scope"
124                       select="($node/ancestor-or-self::*[@lang]
125                                |$node/ancestor-or-self::*[@xml:lang])[last()]"/>
126         <xsl:variable name="lang-attr"
127                       select="($lang-scope/@lang | $lang-scope/@xml:lang)[1]"/>
128
129         <xsl:choose>
130           <xsl:when test="string($lang-attr) = ''">
131             <xsl:value-of select="$l10n.gentext.default.language"/>
132           </xsl:when>
133           <xsl:otherwise>
134             <xsl:value-of select="$lang-attr"/>
135           </xsl:otherwise>
136         </xsl:choose>
137       </xsl:otherwise>
138     </xsl:choose>
139   </xsl:variable>
140
141   <xsl:if test="$language != ''">
142     <xsl:attribute name="lang">
143       <xsl:value-of select="$language"/>
144     </xsl:attribute>
145   </xsl:if>
146 </xsl:template>
147
148 <xsl:template name="gentext">
149   <xsl:param name="key" select="local-name(.)"/>
150   <xsl:param name="lang">
151     <xsl:call-template name="l10n.language"/>
152   </xsl:param>
153
154   <xsl:variable name="local.l10n.gentext"
155                 select="($local.l10n.xml//l:i18n/l:l10n[@language=$lang]/l:gentext[@key=$key])[1]"/>
156
157   <xsl:variable name="l10n.gentext"
158                 select="($l10n.xml/l:i18n/l:l10n[@language=$lang]/l:gentext[@key=$key])[1]"/>
159
160   <xsl:choose>
161     <xsl:when test="count($local.l10n.gentext) &gt; 0">
162       <xsl:value-of select="$local.l10n.gentext/@text"/>
163     </xsl:when>
164     <xsl:when test="count($l10n.gentext) &gt; 0">
165       <xsl:value-of select="$l10n.gentext/@text"/>
166     </xsl:when>
167     <xsl:otherwise>
168       <xsl:message>
169         <xsl:text>No "</xsl:text>
170         <xsl:value-of select="$lang"/>
171         <xsl:text>" localization of "</xsl:text>
172         <xsl:value-of select="$key"/>
173         <xsl:text>" exists</xsl:text>
174         <xsl:choose>
175           <xsl:when test="$lang = 'en'">
176              <xsl:text>.</xsl:text>
177           </xsl:when>
178           <xsl:otherwise>
179              <xsl:text>; using "en".</xsl:text>
180           </xsl:otherwise>
181         </xsl:choose>
182       </xsl:message>
183
184       <xsl:value-of select="($l10n.xml/l:i18n/l:l10n[@language='en']/l:gentext[@key=$key])[1]/@text"/>
185     </xsl:otherwise>
186   </xsl:choose>
187 </xsl:template>
188
189 <xsl:template name="gentext.element.name">
190   <xsl:param name="element.name" select="name(.)"/>
191   <xsl:param name="lang">
192     <xsl:call-template name="l10n.language"/>
193   </xsl:param>
194
195   <xsl:call-template name="gentext">
196     <xsl:with-param name="key" select="$element.name"/>
197     <xsl:with-param name="lang" select="$lang"/>
198   </xsl:call-template>
199 </xsl:template>
200
201 <xsl:template name="gentext.space">
202   <xsl:text> </xsl:text>
203 </xsl:template>
204
205 <xsl:template name="gentext.edited.by">
206   <xsl:call-template name="gentext">
207     <xsl:with-param name="key" select="'Editedby'"/>
208   </xsl:call-template>
209 </xsl:template>
210
211 <xsl:template name="gentext.by">
212   <xsl:call-template name="gentext">
213     <xsl:with-param name="key" select="'by'"/>
214   </xsl:call-template>
215 </xsl:template>
216
217 <xsl:template name="gentext.dingbat">
218   <xsl:param name="dingbat">bullet</xsl:param>
219   <xsl:param name="lang">
220     <xsl:call-template name="l10n.language"/>
221   </xsl:param>
222
223   <xsl:variable name="local.l10n.dingbat"
224                 select="($local.l10n.xml//l:i18n/l:l10n[@language=$lang]/l:dingbat[@key=$dingbat])[1]"/>
225
226   <xsl:variable name="l10n.dingbat"
227                 select="($l10n.xml/l:i18n/l:l10n[@language=$lang]/l:dingbat[@key=$dingbat])[1]"/>
228
229   <xsl:choose>
230     <xsl:when test="count($local.l10n.dingbat) &gt; 0">
231       <xsl:value-of select="$local.l10n.dingbat/@text"/>
232     </xsl:when>
233     <xsl:when test="count($l10n.dingbat) &gt; 0">
234       <xsl:value-of select="$l10n.dingbat/@text"/>
235     </xsl:when>
236     <xsl:otherwise>
237       <xsl:message>
238         <xsl:text>No "</xsl:text>
239         <xsl:value-of select="$lang"/>
240         <xsl:text>" localization of dingbat </xsl:text>
241         <xsl:value-of select="$dingbat"/>
242         <xsl:text> exists; using "en".</xsl:text>
243       </xsl:message>
244
245       <xsl:value-of select="($l10n.xml/l:i18n/l:l10n[@language='en']/l:dingbat[@key=$dingbat])[1]/@text"/>
246     </xsl:otherwise>
247   </xsl:choose>
248 </xsl:template>
249
250 <xsl:template name="gentext.startquote">
251   <xsl:call-template name="gentext.dingbat">
252     <xsl:with-param name="dingbat">startquote</xsl:with-param>
253   </xsl:call-template>
254 </xsl:template>
255
256 <xsl:template name="gentext.endquote">
257   <xsl:call-template name="gentext.dingbat">
258     <xsl:with-param name="dingbat">endquote</xsl:with-param>
259   </xsl:call-template>
260 </xsl:template>
261
262 <xsl:template name="gentext.nestedstartquote">
263   <xsl:call-template name="gentext.dingbat">
264     <xsl:with-param name="dingbat">nestedstartquote</xsl:with-param>
265   </xsl:call-template>
266 </xsl:template>
267
268 <xsl:template name="gentext.nestedendquote">
269   <xsl:call-template name="gentext.dingbat">
270     <xsl:with-param name="dingbat">nestedendquote</xsl:with-param>
271   </xsl:call-template>
272 </xsl:template>
273
274 <xsl:template name="gentext.nav.prev">
275   <xsl:call-template name="gentext">
276     <xsl:with-param name="key" select="'nav-prev'"/>
277   </xsl:call-template>
278 </xsl:template>
279
280 <xsl:template name="gentext.nav.next">
281   <xsl:call-template name="gentext">
282     <xsl:with-param name="key" select="'nav-next'"/>
283   </xsl:call-template>
284 </xsl:template>
285
286 <xsl:template name="gentext.nav.home">
287   <xsl:call-template name="gentext">
288     <xsl:with-param name="key" select="'nav-home'"/>
289   </xsl:call-template>
290 </xsl:template>
291
292 <xsl:template name="gentext.nav.up">
293   <xsl:call-template name="gentext">
294     <xsl:with-param name="key" select="'nav-up'"/>
295   </xsl:call-template>
296 </xsl:template>
297
298 <!-- ============================================================ -->
299
300 <xsl:template name="gentext.template">
301   <xsl:param name="context" select="'default'"/>
302   <xsl:param name="name" select="'default'"/>
303   <xsl:param name="origname" select="$name"/>
304   <xsl:param name="purpose"/>
305   <xsl:param name="xrefstyle"/>
306   <xsl:param name="referrer"/>
307   <xsl:param name="lang">
308     <xsl:call-template name="l10n.language"/>
309   </xsl:param>
310
311   <xsl:variable name="local.localization.node"
312                 select="($local.l10n.xml//l:i18n/l:l10n[@language=$lang])[1]"/>
313
314   <xsl:variable name="localization.node"
315                 select="($l10n.xml/l:i18n/l:l10n[@language=$lang])[1]"/>
316
317   <xsl:if test="count($localization.node) = 0
318                 and count($local.localization.node) = 0">
319     <xsl:message>
320       <xsl:text>No "</xsl:text>
321       <xsl:value-of select="$lang"/>
322       <xsl:text>" localization exists.</xsl:text>
323     </xsl:message>
324   </xsl:if>
325
326   <xsl:variable name="local.context.node"
327                 select="$local.localization.node/l:context[@name=$context]"/>
328
329   <xsl:variable name="context.node"
330                 select="$localization.node/l:context[@name=$context]"/>
331
332   <xsl:variable name="en.context.node"
333                 select="$l10n.xml/l:i18n/l:l10n[@language='en']/l:context[@name=$context]"/>
334
335   <xsl:if test="count($context.node) = 0
336                 and count($local.context.node) = 0">
337     <xsl:message>
338       <xsl:text>No context named "</xsl:text>
339       <xsl:value-of select="$context"/>
340       <xsl:text>" exists in the "</xsl:text>
341       <xsl:value-of select="$lang"/>
342       <xsl:text>" localization; trying "en".</xsl:text>
343     </xsl:message>
344   </xsl:if>
345
346   <xsl:variable name="local.template.node"
347                 select="($local.context.node/l:template[@name=$name
348                                                         and @style
349                                                         and @style=$xrefstyle]
350                         |$local.context.node/l:template[@name=$name
351                                                         and not(@style)])[1]"/>
352
353   <xsl:variable name="template.node"
354                 select="($context.node/l:template[@name=$name
355                                                   and @style
356                                                   and @style=$xrefstyle]
357                         |$context.node/l:template[@name=$name
358                                                   and not(@style)])[1]"/>
359
360   <xsl:variable name="en.template.node"
361                 select="($en.context.node/l:template[@name=$name
362                                                   and @style
363                                                   and @style=$xrefstyle]
364                         |$en.context.node/l:template[@name=$name
365                                                   and not(@style)])[1]"/>
366
367   <xsl:choose>
368     <xsl:when test="$local.template.node/@text">
369       <xsl:value-of select="$local.template.node/@text"/>
370     </xsl:when>
371     <xsl:when test="$template.node/@text">
372       <xsl:value-of select="$template.node/@text"/>
373     </xsl:when>
374     <xsl:when test="$en.template.node/@text">
375       <xsl:value-of select="$en.template.node/@text"/>
376     </xsl:when>
377     <xsl:otherwise>
378       <xsl:choose>
379         <xsl:when test="contains($name, '/')">
380           <xsl:call-template name="gentext.template">
381             <xsl:with-param name="context" select="$context"/>
382             <xsl:with-param name="name" select="substring-after($name, '/')"/>
383             <xsl:with-param name="origname" select="$origname"/>
384             <xsl:with-param name="purpose" select="$purpose"/>
385             <xsl:with-param name="xrefstyle" select="$xrefstyle"/>
386             <xsl:with-param name="referrer" select="$referrer"/>
387             <xsl:with-param name="lang" select="$lang"/>
388           </xsl:call-template>
389         </xsl:when>
390         <xsl:otherwise>
391           <xsl:message>
392             <xsl:text>No template for "</xsl:text>
393             <xsl:value-of select="$origname"/>
394             <xsl:text>" (or any of its leaves) exists
395 in the context named "</xsl:text>
396             <xsl:value-of select="$context"/>
397             <xsl:text>" in the "</xsl:text>
398             <xsl:value-of select="$lang"/>
399             <xsl:text>" localization.</xsl:text>
400           </xsl:message>
401         </xsl:otherwise>
402       </xsl:choose>
403     </xsl:otherwise>
404   </xsl:choose>
405 </xsl:template>
406
407 <xsl:template name="gentext.template.exists">
408   <xsl:param name="context" select="'default'"/>
409   <xsl:param name="name" select="'default'"/>
410   <xsl:param name="origname" select="$name"/>
411   <xsl:param name="purpose"/>
412   <xsl:param name="xrefstyle"/>
413   <xsl:param name="referrer"/>
414   <xsl:param name="lang">
415     <xsl:call-template name="l10n.language"/>
416   </xsl:param>
417
418   <xsl:variable name="local.localization.node"
419                 select="($local.l10n.xml//l:i18n/l:l10n[@language=$lang])[1]"/>
420
421   <xsl:variable name="localization.node"
422                 select="($l10n.xml/l:i18n/l:l10n[@language=$lang])[1]"/>
423
424   <xsl:variable name="local.context.node"
425                 select="$local.localization.node/l:context[@name=$context]"/>
426
427   <xsl:variable name="context.node"
428                 select="$localization.node/l:context[@name=$context]"/>
429
430   <xsl:variable name="local.template.node"
431                 select="($local.context.node/l:template[@name=$name
432                                                         and @style
433                                                         and @style=$xrefstyle]
434                         |$local.context.node/l:template[@name=$name
435                                                         and not(@style)])[1]"/>
436
437   <xsl:variable name="template.node"
438                 select="($context.node/l:template[@name=$name
439                                                   and @style
440                                                   and @style=$xrefstyle]
441                         |$context.node/l:template[@name=$name
442                                                   and not(@style)])[1]"/>
443
444   <xsl:choose>
445     <xsl:when test="$local.template.node/@text">1</xsl:when>
446     <xsl:when test="$template.node/@text">1</xsl:when>
447     <xsl:otherwise>
448       <xsl:choose>
449         <xsl:when test="contains($name, '/')">
450           <xsl:call-template name="gentext.template.exists">
451             <xsl:with-param name="context" select="$context"/>
452             <xsl:with-param name="name" select="substring-after($name, '/')"/>
453             <xsl:with-param name="origname" select="$origname"/>
454             <xsl:with-param name="purpose" select="$purpose"/>
455             <xsl:with-param name="xrefstyle" select="$xrefstyle"/>
456             <xsl:with-param name="referrer" select="$referrer"/>
457             <xsl:with-param name="lang" select="$lang"/>
458           </xsl:call-template>
459         </xsl:when>
460         <xsl:otherwise>0</xsl:otherwise>
461       </xsl:choose>
462     </xsl:otherwise>
463   </xsl:choose>
464 </xsl:template>
465
466 </xsl:stylesheet>
467