Если вы выводите правила форматирования чисел на основе правил $fnf->getPattern()
:
%digits-ordinal-masculine:
0: =#,##0==%%dord-mascabbrev=;
-x: −>%digits-ordinal-masculine>;
%%dord-mascabbrev:
0: :e%digits-ordinal-neutre:0: =%digits-ordinal-feminine=;
%digits-ordinal-reale:
0: =%digits-ordinal-feminine=;
%digits-ordinal-feminine:
0: =#,##0==%%dord-femabbrev=;
-x: −>%digits-ordinal-feminine>;
%%dord-femabbrev:
0: :e;
1: :a;
2: :a;
3: :e;
20: >%%dord-femabbrev>;
100: >%%dord-femabbrev>;
%digits-ordinal:
0: =%digits-ordinal-masculine=;
Вы можете видеть, что закрытый набор правил dord-mascabbrev
имеет только одно правило, дающее это значение:
:e%digits-ordinal-neutre:0: 1:a
Что вы получите после 1, как вы описали в своем вопросе.
Это не ошибка в PECL INTL, но основное правило неверно отформатировано, что является частью библиотек ICU ( это правило там ). Примерно три года назад правила форматирования чисел sv были исправлены для пропущенных точек с запятой, похоже, что одна строка проскальзывает.
Эти правила взяты в ICU из CLDR (Common Locale Data Repository) в Консорциуме Unicode. Я открыл отчет об ошибке там , потому что, если это не исправлено в CLDR, а затем помещено в ICU, оно не может работать с расширением PHP INTL.
Альтернативой может быть ручное исправление библиотек ICU (версия 4.8), а затем сборка пакета PECL для ваших исправленных библиотек.