36
<!-- == gettext.language =================================================== -->
53
<!-- == l10n.language ====================================================== -->
38
55
<parameter xmlns="http://www.gnome.org/~shaunm/xsldoc">
39
<name>gettext.language</name>
56
<name>l10n.language</name>
41
58
The language part of the top-level locale of the document
45
<xsl:param name="gettext.language">
62
<xsl:param name="l10n.language">
47
<xsl:when test="contains($gettext.locale, '_')">
48
<xsl:value-of select="substring-before($gettext.locale, '_')"/>
50
<xsl:when test="contains($gettext.locale, '@')">
51
<xsl:value-of select="substring-before($gettext.locale, '@')"/>
53
<xsl:when test="contains($gettext.locale, '_')">
54
<xsl:value-of select="substring-before($gettext.locale, '@')"/>
64
<xsl:when test="contains($l10n.locale, '_')">
65
<xsl:value-of select="substring-before($l10n.locale, '_')"/>
67
<xsl:when test="contains($l10n.locale, '@')">
68
<xsl:value-of select="substring-before($l10n.locale, '@')"/>
70
<xsl:when test="contains($l10n.locale, '_')">
71
<xsl:value-of select="substring-before($l10n.locale, '@')"/>
57
<xsl:value-of select="$gettext.locale"/>
74
<xsl:value-of select="$l10n.locale"/>
63
<!-- == gettext.region ===================================================== -->
80
<!-- == l10n.region ======================================================== -->
65
82
<parameter xmlns="http://www.gnome.org/~shaunm/xsldoc">
66
<name>gettext.region</name>
83
<name>l10n.region</name>
68
85
The region part of the top-level locale of the document
72
<xsl:param name="gettext.region">
73
<xsl:variable name="aft" select="substring-after($gettext.locale, '_')"/>
89
<xsl:param name="l10n.region">
90
<xsl:variable name="aft" select="substring-after($l10n.locale, '_')"/>
75
92
<xsl:when test="contains($aft, '@')">
76
93
<xsl:value-of select="substring-before($aft, '@')"/>
214
231
<xsl:with-param name="lang_charset" select="$lang_charset"/>
215
232
</xsl:call-template>
234
<xsl:param name="role"/>
235
<xsl:param name="node" select="."/>
236
<xsl:param name="format" select="false()"/>
218
238
<xsl:for-each select="$l10n">
219
<xsl:variable name="msg" select="key('msgid', $msgid)"/>
222
240
<!-- fe_fi@fo.fum -->
223
<xsl:when test="($lang_region and $lang_variant and $lang_charset) and
224
$msg/msg:msgstr[@xml:lang = concat(
225
$lang_language, '_', $lang_region,
227
'.', $lang_charset )]">
228
<xsl:call-template name="gettext.get">
241
<xsl:when test="($lang_region and $lang_variant and $lang_charset) and
242
key('msg', concat($msgid, '__LC__',
243
$lang_language, '_', $lang_region,
245
'.', $lang_charset))">
246
<xsl:call-template name="l10n.gettext.msg">
230
name="msgstr" select="$msg/msg:msgstr[@xml:lang = concat(
231
$lang_language, '_', $lang_region,
233
'.', $lang_charset )]"/>
249
select="key('msg', concat($msgid, '__LC__',
250
$lang_language, '_', $lang_region,
252
'.', $lang_charset))"/>
234
253
<xsl:with-param name="form" select="$form"/>
254
<xsl:with-param name="role" select="$role"/>
255
<xsl:with-param name="node" select="$node"/>
256
<xsl:with-param name="format" select="$format"/>
235
257
</xsl:call-template>
237
259
<!-- fe_fi@fo -->
238
260
<xsl:when test="($lang_region and $lang_variant) and
239
$msg/msg:msgstr[@xml:lang = concat(
240
$lang_language, '_', $lang_region, '@', $lang_variant)]">
241
<xsl:call-template name="gettext.get">
261
key('msg', concat($msgid, '__LC__',
262
$lang_language, '_', $lang_region,
263
'@', $lang_variant))">
264
<xsl:call-template name="l10n.gettext.msg">
243
name="msgstr" select="$msg/msg:msgstr[@xml:lang = concat(
244
$lang_language, '_', $lang_region, '@', $lang_variant)]"/>
267
select="key('msg', concat($msgid, '__LC__',
268
$lang_language, '_', $lang_region,
269
'@', $lang_variant))"/>
245
270
<xsl:with-param name="form" select="$form"/>
271
<xsl:with-param name="role" select="$role"/>
272
<xsl:with-param name="node" select="$node"/>
273
<xsl:with-param name="format" select="$format"/>
246
274
</xsl:call-template>
248
276
<!-- fe@fo.fum -->
249
277
<xsl:when test="($lang_variant and $lang_charset) and
250
$msg/msg:msgstr[@xml:lang = concat(
251
$lang_language, '@', $lang_variant, '.', $lang_charset)]">
252
<xsl:call-template name="gettext.get">
278
key('msg', concat($msgid, '__LC__',
279
$lang_language, '@', $lang_variant,
280
'.', $lang_charset))">
281
<xsl:call-template name="l10n.gettext.msg">
254
name="msgstr" select="$msg/msg:msgstr[@xml:lang = concat(
255
$lang_language, '@', $lang_variant, '.', $lang_charset)]"/>
284
select="key('msg', concat($msgid, '__LC__',
285
$lang_language, '@', $lang_variant,
286
'.', $lang_charset))"/>
256
287
<xsl:with-param name="form" select="$form"/>
288
<xsl:with-param name="role" select="$role"/>
289
<xsl:with-param name="node" select="$node"/>
290
<xsl:with-param name="format" select="$format"/>
257
291
</xsl:call-template>
260
294
<xsl:when test="($lang_variant) and
261
$msg/msg:msgstr[@xml:lang = concat(
262
$lang_language, '@', $lang_variant)]">
263
<xsl:call-template name="gettext.get">
295
key('msg', concat($msgid, '__LC__',
296
$lang_language, '@', $lang_variant))">
297
<xsl:call-template name="l10n.gettext.msg">
265
name="msgstr" select="$msg/msg:msgstr[@xml:lang = concat(
266
$lang_language, '@', $lang_variant)]"/>
300
select="key('msg', concat($msgid, '__LC__',
301
$lang_language, '@', $lang_variant))"/>
267
302
<xsl:with-param name="form" select="$form"/>
303
<xsl:with-param name="role" select="$role"/>
304
<xsl:with-param name="node" select="$node"/>
305
<xsl:with-param name="format" select="$format"/>
268
306
</xsl:call-template>
270
308
<!-- fe_fi.fum -->
271
309
<xsl:when test="($lang_region and $lang_charset) and
272
$msg/msg:msgstr[@xml:lang = concat(
273
$lang_language, '_', $lang_region, '.', $lang_charset)]">
274
<xsl:call-template name="gettext.get">
310
key('msg', concat($msgid, '__LC__',
311
$lang_language, '_', $lang_region,
312
'.', $lang_charset))">
313
<xsl:call-template name="l10n.gettext.msg">
276
name="msgstr" select="$msg/msg:msgstr[@xml:lang = concat(
277
$lang_language, '_', $lang_region, '.', $lang_charset)]"/>
316
select="key('msg', concat($msgid, '__LC__',
317
$lang_language, '_', $lang_region,
318
'.', $lang_charset))"/>
278
319
<xsl:with-param name="form" select="$form"/>
320
<xsl:with-param name="role" select="$role"/>
321
<xsl:with-param name="node" select="$node"/>
322
<xsl:with-param name="format" select="$format"/>
279
323
</xsl:call-template>
282
326
<xsl:when test="($lang_region) and
283
$msg/msg:msgstr[@xml:lang = concat($lang_language, '_', $lang_region)]">
284
<xsl:call-template name="gettext.get">
327
key('msg', concat($msgid, '__LC__',
328
$lang_language, '_', $lang_region))">
329
<xsl:call-template name="l10n.gettext.msg">
286
name="msgstr" select="$msg/msg:msgstr[@xml:lang = concat(
287
$lang_language, '_', $lang_region)]"/>
332
select="key('msg', concat($msgid, '__LC__',
333
$lang_language, '_', $lang_region))"/>
288
334
<xsl:with-param name="form" select="$form"/>
335
<xsl:with-param name="role" select="$role"/>
336
<xsl:with-param name="node" select="$node"/>
337
<xsl:with-param name="format" select="$format"/>
289
338
</xsl:call-template>
292
341
<xsl:when test="($lang_charset) and
293
$msg/msg:msgstr[@xml:lang = concat($lang_language, '.', $lang_charset)]">
294
<xsl:call-template name="gettext.get">
342
key('msg', concat($msgid, '__LC__',
343
$lang_language, '.', $lang_charset))">
344
<xsl:call-template name="l10n.gettext.msg">
296
name="msgstr" select="$msg/msg:msgstr[@xml:lang = concat(
297
$lang_language, '.', $lang_charset)]"/>
347
select="key('msg', concat($msgid, '__LC__',
348
$lang_language, '.', $lang_charset))"/>
298
349
<xsl:with-param name="form" select="$form"/>
350
<xsl:with-param name="role" select="$role"/>
351
<xsl:with-param name="node" select="$node"/>
352
<xsl:with-param name="format" select="$format"/>
299
353
</xsl:call-template>
302
<xsl:when test="$msg/msg:msgstr[@xml:lang = $lang_language]">
303
<xsl:call-template name="gettext.get">
304
<xsl:with-param name="msgstr" select="$msg/msg:msgstr[@xml:lang = $lang_language]"/>
356
<xsl:when test="key('msg', concat($msgid, '__LC__', $lang_language))">
357
<xsl:call-template name="l10n.gettext.msg">
360
select="key('msg', concat($msgid, '__LC__', $lang_language))"/>
305
361
<xsl:with-param name="form" select="$form"/>
362
<xsl:with-param name="role" select="$role"/>
363
<xsl:with-param name="node" select="$node"/>
364
<xsl:with-param name="format" select="$format"/>
306
365
</xsl:call-template>
309
<xsl:when test="$msg/msg:msgstr[@xml:lang = 'C']">
310
<xsl:call-template name="gettext.get">
311
<xsl:with-param name="msgstr" select="$msg/msg:msgstr[@xml:lang = 'C']"/>
368
<xsl:when test="key('msg', concat($msgid, '__LC__C'))">
369
<xsl:call-template name="l10n.gettext.msg">
371
name="msg" select="key('msg', concat($msgid, '__LC__C'))"/>
312
372
<xsl:with-param name="form" select="$form"/>
373
<xsl:with-param name="role" select="$role"/>
374
<xsl:with-param name="node" select="$node"/>
375
<xsl:with-param name="format" select="$format"/>
313
376
</xsl:call-template>
316
<xsl:when test="$msg/msg:msgstr[not(@xml:lang)]">
317
<xsl:call-template name="gettext.get">
318
<xsl:with-param name="msgstr" select="$msg/msg:msgstr[not(@xml:lang)]"/>
379
<xsl:when test="key('msg', concat($msgid, '__LC__'))">
380
<xsl:call-template name="l10n.gettext.msg">
382
name="msg" select="key('msg', concat($msgid, '__LC__'))"/>
319
383
<xsl:with-param name="form" select="$form"/>
384
<xsl:with-param name="role" select="$role"/>
385
<xsl:with-param name="node" select="$node"/>
386
<xsl:with-param name="format" select="$format"/>
320
387
</xsl:call-template>
334
<xsl:template name="gettext.get" doc:private="true">
401
<xsl:template name="l10n.gettext.msg" doc:private="true">
402
<xsl:param name="msg"/>
403
<xsl:param name="form"/>
404
<xsl:param name="role"/>
405
<xsl:param name="node" select="."/>
406
<xsl:param name="format" select="false()"/>
408
<xsl:when test="not($msg/msg:msgstr)">
409
<xsl:call-template name="l10n.gettext.msgstr">
410
<xsl:with-param name="msgstr" select="$msg"/>
411
<xsl:with-param name="node" select="$node"/>
412
<xsl:with-param name="format" select="$format"/>
415
<!-- FIXME: OPTIMIZE: this needs to be faster -->
416
<xsl:when test="$form != '' and $role != ''">
417
<xsl:variable name="msgstr_form" select="$msg/msg:msgstr[@form = $form]"/>
419
<xsl:when test="$msgstr_form">
421
<xsl:when test="msgstr_form[@role = $role]">
422
<xsl:call-template name="l10n.gettext.msgstr">
423
<xsl:with-param name="msgstr"
424
select="msgstr_form[@role = $role][1]"/>
425
<xsl:with-param name="node" select="$node"/>
426
<xsl:with-param name="format" select="$format"/>
429
<xsl:when test="msgstr_form[not(@role)]">
430
<xsl:call-template name="l10n.gettext.msgstr">
431
<xsl:with-param name="msgstr"
432
select="msgstr_form[not(@role)][1]"/>
433
<xsl:with-param name="node" select="$node"/>
434
<xsl:with-param name="format" select="$format"/>
438
<xsl:call-template name="l10n.gettext.msgstr">
439
<xsl:with-param name="msgstr"
440
select="msgstr_form[1]"/>
441
<xsl:with-param name="node" select="$node"/>
442
<xsl:with-param name="format" select="$format"/>
449
<xsl:when test="$msg/msg:msgstr[@role = $role]">
450
<xsl:call-template name="l10n.gettext.msgstr">
451
<xsl:with-param name="msgstr"
452
select="$msg/msg:msgstr[@role = $role][1]"/>
453
<xsl:with-param name="node" select="$node"/>
454
<xsl:with-param name="format" select="$format"/>
457
<xsl:when test="$msg/msg:msgstr[not(@role)]">
458
<xsl:call-template name="l10n.gettext.msgstr">
459
<xsl:with-param name="msgstr"
460
select="$msg/msg:msgstr[not(@role)][1]"/>
461
<xsl:with-param name="node" select="$node"/>
462
<xsl:with-param name="format" select="$format"/>
466
<xsl:call-template name="l10n.gettext.msgstr">
467
<xsl:with-param name="msgstr"
468
select="$msg/msg:msgstr[1]"/>
469
<xsl:with-param name="node" select="$node"/>
470
<xsl:with-param name="format" select="$format"/>
477
<xsl:when test="$form != ''">
479
<xsl:when test="$msg/msg:msgstr[@form = $form]">
480
<xsl:call-template name="l10n.gettext.msgstr">
481
<xsl:with-param name="msgstr"
482
select="$msg/msg:msgstr[@form = $form][1]"/>
483
<xsl:with-param name="node" select="$node"/>
484
<xsl:with-param name="format" select="$format"/>
487
<xsl:when test="$msg/msg:msgstr[not(@form)]">
488
<xsl:call-template name="l10n.gettext.msgstr">
489
<xsl:with-param name="msgstr"
490
select="$msg/msg:msgstr[not(@form)][1]"/>
491
<xsl:with-param name="node" select="$node"/>
492
<xsl:with-param name="format" select="$format"/>
496
<xsl:call-template name="l10n.gettext.msgstr">
497
<xsl:with-param name="msgstr" select="$msg/msg:msgstr[1]"/>
498
<xsl:with-param name="node" select="$node"/>
499
<xsl:with-param name="format" select="$format"/>
504
<xsl:when test="$role != ''">
506
<xsl:when test="$msg/msg:msgstr[@role = $role]">
507
<xsl:call-template name="l10n.gettext.msgstr">
508
<xsl:with-param name="msgstr"
509
select="$msg/msg:msgstr[@role = $role][1]"/>
510
<xsl:with-param name="node" select="$node"/>
511
<xsl:with-param name="format" select="$format"/>
514
<xsl:when test="$msg/msg:msgstr[not(@role)]">
515
<xsl:call-template name="l10n.gettext.msgstr">
516
<xsl:with-param name="msgstr"
517
select="$msg/msg:msgstr[not(@role)][1]"/>
518
<xsl:with-param name="node" select="$node"/>
519
<xsl:with-param name="format" select="$format"/>
523
<xsl:call-template name="l10n.gettext.msgstr">
524
<xsl:with-param name="msgstr" select="$msg/msg:msgstr[1]"/>
525
<xsl:with-param name="node" select="$node"/>
526
<xsl:with-param name="format" select="$format"/>
532
<xsl:call-template name="l10n.gettext.msgstr">
533
<xsl:with-param name="msgstr" select="$msg/msg:msgstr[1]"/>
534
<xsl:with-param name="node" select="$node"/>
535
<xsl:with-param name="format" select="$format"/>
541
<xsl:template name="l10n.gettext.msgstr" doc:private="true">
335
542
<xsl:param name="msgstr"/>
336
<xsl:param name="form"/>
543
<xsl:param name="node" select="."/>
544
<xsl:param name="format" select="false()"/>
338
<xsl:when test="$msgstr/msg:msgstr[@form]">
340
<xsl:when test="$msgstr/msg:msgstr[@form = $form]">
341
<xsl:value-of select="$msgstr/msg:msgstr[@form = $form]"/>
343
<xsl:when test="$msgstr/msg:msgstr[not(@form)]">
344
<xsl:value-of select="$msgstr/msg:msgstr[not(@form)]"/>
348
<xsl:text>No translation for </xsl:text>
349
<xsl:value-of select="$msgstr/preceding-sibling::msg:msgid"/>
350
<xsl:text> with plural form </xsl:text>
351
<xsl:value-of select="$form"/>
546
<xsl:when test="$format">
547
<xsl:apply-templates mode="l10n.format.mode" select="$msgstr/node()">
548
<xsl:with-param name="node" select="$node"/>
549
</xsl:apply-templates>
357
552
<xsl:value-of select="$msgstr"/>
408
<xsl:template name="gettext.plural_form">
603
<xsl:template name="l10n.plural.form">
409
604
<xsl:param name="number" select="1"/>
410
<xsl:param name="lang" select="$gettext.locale"/>
605
<xsl:param name="lang" select="$l10n.locale"/>
411
606
<xsl:param name="lang_language">
412
<xsl:call-template name="gettext.get.language">
607
<xsl:call-template name="l10n.language">
413
608
<xsl:with-param name="lang" select="$lang"/>
414
609
</xsl:call-template>
416
611
<xsl:param name="lang_region">
417
<xsl:call-template name="gettext.get.region">
612
<xsl:call-template name="l10n.region">
418
613
<xsl:with-param name="lang" select="$lang"/>
419
614
</xsl:call-template>
421
616
<xsl:param name="lang_variant">
422
<xsl:call-template name="gettext.get.variant">
617
<xsl:call-template name="l10n.variant">
423
618
<xsl:with-param name="lang" select="$lang"/>
424
619
</xsl:call-template>
426
621
<xsl:param name="lang_charset">
427
<xsl:call-template name="gettext.get.charset">
622
<xsl:call-template name="l10n.charset">
428
623
<xsl:with-param name="lang" select="$lang"/>
429
624
</xsl:call-template>
434
<xsl:when test="($lang_language = 'cs') or ($lang_language = 'sr')">
630
When adding new languages, make sure the tests are in a format that
631
can be extracted by the plurals.sh script in the i18n directory.
635
<xsl:when test="concat($lang_language, '_', $lang_region) = 'pt_BR'">
637
<xsl:when test="$number > 1">
638
<xsl:text>0</xsl:text>
641
<xsl:text>1</xsl:text>
647
<xsl:when test="$lang_language = 'ar'">
649
<xsl:when test="$number = 1">
650
<xsl:text>0</xsl:text>
652
<xsl:when test="$number = 2">
653
<xsl:text>1</xsl:text>
655
<xsl:when test="$number >= 3 and $number < 10">
656
<xsl:text>2</xsl:text>
659
<xsl:text>3</xsl:text>
663
<!-- == be bs cs ru sr uk == -->
664
<xsl:when test="($lang_language = 'be') or ($lang_language = 'bs') or
665
($lang_language = 'cs') or ($lang_language = 'ru') or
666
($lang_language = 'sr') or ($lang_language = 'uk') ">
436
668
<xsl:when test="($number mod 10 = 1) and ($number mod 100 != 11)">
437
669
<xsl:text>0</xsl:text>
439
671
<xsl:when test="($number mod 10 >= 2) and ($number mod 10 <= 4) and
440
(($number mod 100 < 10) or ($number mod 100 > 20))">
441
<xsl:text>1</xsl:text>
444
<xsl:text>2</xsl:text>
672
(($number mod 100 < 10) or ($number mod 100 >= 20))">
673
<xsl:text>1</xsl:text>
676
<xsl:text>2</xsl:text>
681
<xsl:when test="$lang_language = 'cy'">
683
<xsl:when test="$number != 2">
684
<xsl:text>0</xsl:text>
687
<xsl:text>1</xsl:text>
691
<!-- == fa hu ja ko th tr vi zh == -->
692
<xsl:when test="($lang_language = 'fa') or ($lang_language = 'hu') or
693
($lang_language = 'ja') or ($lang_language = 'ko') or
694
($lang_language = 'th') or ($lang_language = 'tr') or
695
($lang_language = 'vi') or ($lang_language = 'zh') ">
696
<xsl:text>0</xsl:text>
698
<!-- == fr nso wa == -->
699
<xsl:when test="($lang_language = 'fr') or ($lang_language = 'nso') or
700
($lang_language = 'wa') ">
702
<xsl:when test="$number > 1">
703
<xsl:text>0</xsl:text>
706
<xsl:text>1</xsl:text>
711
<xsl:when test="$lang_language = 'ga'">
713
<xsl:when test="$number = 1">
714
<xsl:text>0</xsl:text>
716
<xsl:when test="$number = 2">
717
<xsl:text>1</xsl:text>
720
<xsl:text>2</xsl:text>
725
<xsl:when test="$lang_language = 'sk'">
727
<xsl:when test="$number = 1">
728
<xsl:text>0</xsl:text>
730
<xsl:when test="($number >= 2) and ($number <= 4)">
731
<xsl:text>1</xsl:text>
734
<xsl:text>2</xsl:text>
739
<xsl:when test="$lang_language = 'sl'">
741
<xsl:when test="$number mod 100 = 1">
742
<xsl:text>0</xsl:text>
744
<xsl:when test="$number mod 100 = 2">
745
<xsl:text>1</xsl:text>
747
<xsl:when test="($number mod 100 = 3) or ($number mod 100 = 4)">
748
<xsl:text>2</xsl:text>
751
<xsl:text>3</xsl:text>