SAXONICA

Saxon Documentation
Full Contents
About Saxon
Changes in this Release
Notices
Using XSLT 2.0
Using XQuery
Handling Source Documents
XML Schema Processing
XPath API for Java
Saxon on .NET
Extensibility
| Introduction
| Writing extension functions in Java
| Converting Arguments to Java Extension Functions
| Converting the Result of a Java Extension Function
| Writing extension functions for .NET
| Converting Arguments to .NET Extension Functions
| Converting the Result of a .NET Extension Function
| Writing XSLT extension instructions
| Customizing Serialization
| Implementing a collating sequence
» | Localizing numbers and dates
| Adding an output encoding
| Writing a URI Resolver for Input Files
| Writing a URI Resolver for Output Files
Saxon Extensions
Sample Saxon Applications
The Saxon SQL Extension
XSLT Elements
XPath 2.0 Expression Syntax
Function Library
Standards Conformance

# Localizing numbers and dates

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.

Next