Bug #5324
closed

format-integer: French ordinals
0%
Description
format-integer(7000, 'w;o', 'fr')
Expected: sept mille
Returned: six mille centième
The number 8000 should be checked, too (and possibly others).
Updated by Christian Grün almost 3 years ago
Sorry, it should have been format-integer
in the title (it seems I don’t have enough permissions to fix this).
Updated by Michael Kay almost 3 years ago
- Subject changed from format-date: French ordinals to format-integer: French ordinals
Updated by Michael Kay almost 3 years ago
Indeed, Saxon-HE produces six mille centième. Saxon-PE and -EE produce sept millième.
(Saxon-PE and -EE use ICU4J; Saxon-HE uses some user-contributed code attributed to Luc Rochefort.
Not sure what to do about this; the use of the old user-contributed numberers in Saxon-HE is an awkward compromise based primarily on commercial rather than technical considerations. We've wanted to get rid of them for years but we've been indecisive about dropping the localisation support entirely, versus supporting ICU4J in Saxon-HE. One way forward might be:
-
drop the user-contributed Numberers
-
for date/time formatting in Saxon-HE, use whatever the JDK gives us - for all languages that the JDK supports
-
for spell-out numbering, drop the feature from Saxon-HE.
This would be consistent with what we do for collation support.
Updated by Michael Kay about 2 years ago
Saxon-EE (with ICU) produces
7000 = sept millième
7001 = sept mille-et-unième
7010 = sept mille dixième
7050 = sept mille cinquantième
7070 = sept mille soixante-dixième
7071 = sept mille soixante-et-onzième
7100 = sept mille centième
Saxon-HE (Luc Rochefort's contributed numberer) gives
7000 = six mille centième
7001 = six mille cent unième
7010 = six mille cent dixième
7050 = six mille cent cinquantième
7070 = six mille cent soixante-dixième
7071 = six mille cent soixante et onzième
7100 = sept mille centième
There's special logic to do this! If I remove it, I get
7000 = sept millième
7001 = sept mille unième
7010 = sept mille dixième
7050 = sept mille cinquantième
7070 = sept mille soixante-dixième
7071 = sept mille soixante et onzième
7100 = sept mille centième
which is close enough to the ICU results.
For 9000+ (where there is also custom logic) ICU gives
9000 = neuf millième
9001 = neuf mille-et-unième
9010 = neuf mille dixième
9050 = neuf mille cinquantième
9070 = neuf mille soixante-dixième
9071 = neuf mille soixante-et-onzième
9100 = neuf mille centième
Saxon-HE (after the change) -- the numberer produced by Karel Goossens -- gives
9000 = neuf millième
9001 = neuf mille unième
9010 = neuf mille dixième
9050 = neuf mille cinquantième
9070 = neuf mille soixante-dixième
9071 = neuf mille soixante et onzième
9100 = neuf mille centième
For fr-BE, ICU gives
9000 = neuf millième 9001 = neuf mille-et-unième 9010 = neuf mille dixième 9050 = neuf mille cinquantième 9070 = neuf mille septantième 9071 = neuf mille septante-et-unième 9100 = neuf mille centième
whereas Saxon-HE gives:
9000 = huit mille centième
9001 = huit mille cent unième
9010 = huit mille cent dixième
9050 = huit mille cent cinquantième
9070 = huit mille cent soixante-dixième
9071 = huit mille cent soixante et onzième
9100 = neuf mille centième
I've made suitable adjustments to the fr-BE code.
Updated by Michael Kay about 2 years ago
- Category set to Localization
- Status changed from New to Resolved
- Assignee set to Michael Kay
- Applies to branch 11, trunk added
- Fix Committed on Branch 11, trunk added
- Platforms Java added
Updated by O'Neil Delpratt about 2 years ago
- Fixed in Maintenance Release 12.0 added
Bug fix applied in the Saxon 12.0 major release. (Issue remains open awaiting Saxon 11 maintenance release.)
Updated by O'Neil Delpratt about 2 years ago
- Fixed in Maintenance Release 11.5 added
Bug fix applied in the Saxon 11.5 maintenance release.
Updated by O'Neil Delpratt almost 2 years ago
- Status changed from Resolved to Closed
Please register to edit this issue