It is possible to define a localized numbering sequence for use by xsl:number
and format-date()
.
This sequence will be used when you specify a language in the lang
attribute of the xsl:number
element, or in the third argument of the functions
format-date()
, format-time()
, and format-dateTime()
.
The feature is primarily intended to provide language-dependent numbers and dates,
but in fact it can be used to provide arbitrary numbering sequences.
To implement a numberer for language X, you need to define a class net.sf.saxon.number.Numberer_X
,
for example net.sf.saxon.sort.Numberer_sv
for Swedish. This must implement the interface Numberer
;
usually it will be convenient to write the class as a subclass of the supplied AbstractNumberer
.
Numberer
implementations are supplied for a number of languages,
and you can use these as a prototype to write your own.
The languages supplied with the product are:
code |
Language |
da |
Danish |
de |
German |
en |
English |
fr |
French |
fr-BE |
French (Belgium) |
it |
Italian |
nl |
Dutch |
nl-BE |
Flemish (Belgium) |
sv |
Swedish |
The numbering sequence for English is used by default if no other can be loaded.
Normally your localization class will extend the class AbstractNumberer
so that you can reuse functionality like roman
numerals which do not need to be localized. Alternatively, if you only want to modify the existing English localization, you
could
choose to implement a subclass of Numberer_en
.
You can override any of the non-private methods in the base class, but the most useful ones to implement are the following:
Method |
Effect |
ordinalSuffix |
Supplies a suffix to be appended to a number to create the ordinal form, for example "1" becomes "1st" in English |
toWords |
Displays a number in words, in title case: for example "53" becomes "Fifty Three" in English |
toOrdinalWords |
Displays an ordinal number in words, in title case: for example "53" becomes "Fifty Third" in English |
monthName |
Displays the name of a month, optionally abbreviated |
dayName |
Displays the name of a day of the week, optionally abbreviated |
Note that any hyphens in the language name are ignored in forming the class name, but case is significant.
For example if you specify lang="en-GB"
, the Numberer must be named net.sf.saxon.number.Numberer_enGB
.
If you write a comprehensive Numberer for a particular language, please submit it, and I will be happy to include it in future versions of the product as an open-source component. You must agree to release it under the Mozilla Public License or under any other recognized open source license that Saxon might adopt in the future.