Steps to reproduce
- Create a Flutter app using
flutter_localizations with Arabic (ar) in supportedLocales (e.g. via GlobalMaterialLocalizations.delegate).
- Run the app with the locale set to
ar (or any Arabic regional locale such as ar_SA, which falls back to ar since only ar is registered).
- Format any date/time with
intl, e.g. DateFormat.jm('ar').format(DateTime.now()).
Expected results
Digits are rendered using Arabic-Indic (Eastern Arabic) numerals, as they were up to and including Flutter 3.38:
Per CLDR, the default numbering system for the generic ar locale is arab (Arabic-Indic digits); only specific regional variants like ar_DZ, ar_MA, ar_TN default to latn.
Actual results
Since Flutter 3.44 (first appeared in 3.43.0-0.1.pre), digits are rendered as ASCII/Latin while day and month names remain Arabic:
Root cause
#181685 (reverted, then relanded in #182189, commit 3ea16190995) regenerated packages/flutter_localizations/lib/src/l10n/generated_date_localizations.dart and removed ZERODIGIT: '٠' from the 'ar' DateSymbols entry — it is the only ZERODIGIT removal in that diff:
git diff 1c1ba3a8390^ 1c1ba3a8390 -- packages/flutter_localizations/lib/src/l10n/generated_date_localizations.dart | grep "ZERODIGIT"
- ZERODIGIT: '٠',
When ZERODIGIT is absent, intl's DateFormat silently falls back to ASCII '0' (localeZero => dateSymbols.ZERODIGIT ?? '0'), so every date formatted under the ar locale switches to Latin digits.
Because GlobalMaterialLocalizations.delegate injects the Flutter-bundled DateSymbols into intl via initializeDateFormattingCustom (overriding intl's own locale data), every app using flutter_localizations with Arabic is affected — including all DateFormat usages outside Flutter widgets, and packages like easy_localization.
Note the same ZERODIGIT loss is present in package:intl data between 0.19.0 and 0.20.x (lib/src/data/dates/symbols/ar.json), which suggests the shared data-generation pipeline dropped the arab numbering system for generic ar — only ar_EG retains ZERODIGIT: '٠'. This looks unintentional, since CLDR still specifies arab as the default numbering system for ar.
Code sample
Code sample
import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:intl/intl.dart';
void main() => runApp(const MyApp());
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
locale: const Locale('ar'),
supportedLocales: const [Locale('ar'), Locale('en')],
localizationsDelegates: const [
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
home: Scaffold(
body: Center(
child: Builder(
builder: (context) => Text(
// Flutter <= 3.38: "٨:٣٠ م" — Flutter 3.44: "8:30 م"
DateFormat.jm('ar').format(DateTime(2026, 1, 1, 20, 30)),
),
),
),
),
);
}
}
Logs
No exceptions are thrown; this is a silent data regression.
Flutter Doctor output
Doctor output
Flutter 3.44.1 • channel stable • https://github.com/flutter/flutter.git
Framework • revision 924134a44c (11 days ago) • 2026-05-29 12:13:22 -0400
Engine • hash 39b1f7043775b9578bbb26a1676e79c4e31c8b5e (revision c416acfeb8) (13 days ago) • 2026-05-27 20:19:31.000Z
Tools • Dart 3.12.1 • DevTools 2.57.0
[✓] Flutter (Channel stable, 3.44.1, on macOS 26.1 25B78 darwin-arm64, locale en-US)
[✓] Android toolchain - develop for Android devices (Android SDK version 36.0.0)
[✓] Xcode - develop for iOS and macOS (Xcode 26.3)
[✓] Chrome - develop for the web
[✓] Connected device (3 available)
[✓] Network resources
• No issues found!
Steps to reproduce
flutter_localizationswith Arabic (ar) insupportedLocales(e.g. viaGlobalMaterialLocalizations.delegate).ar(or any Arabic regional locale such asar_SA, which falls back toarsince onlyaris registered).intl, e.g.DateFormat.jm('ar').format(DateTime.now()).Expected results
Digits are rendered using Arabic-Indic (Eastern Arabic) numerals, as they were up to and including Flutter 3.38:
Per CLDR, the default numbering system for the generic
arlocale isarab(Arabic-Indic digits); only specific regional variants likear_DZ,ar_MA,ar_TNdefault tolatn.Actual results
Since Flutter 3.44 (first appeared in
3.43.0-0.1.pre), digits are rendered as ASCII/Latin while day and month names remain Arabic:Root cause
#181685 (reverted, then relanded in #182189, commit
3ea16190995) regeneratedpackages/flutter_localizations/lib/src/l10n/generated_date_localizations.dartand removedZERODIGIT: '٠'from the'ar'DateSymbolsentry — it is the onlyZERODIGITremoval in that diff:When
ZERODIGITis absent,intl'sDateFormatsilently falls back to ASCII'0'(localeZero => dateSymbols.ZERODIGIT ?? '0'), so every date formatted under thearlocale switches to Latin digits.Because
GlobalMaterialLocalizations.delegateinjects the Flutter-bundledDateSymbolsintointlviainitializeDateFormattingCustom(overriding intl's own locale data), every app usingflutter_localizationswith Arabic is affected — including allDateFormatusages outside Flutter widgets, and packages likeeasy_localization.Note the same
ZERODIGITloss is present inpackage:intldata between 0.19.0 and 0.20.x (lib/src/data/dates/symbols/ar.json), which suggests the shared data-generation pipeline dropped thearabnumbering system for genericar— onlyar_EGretainsZERODIGIT: '٠'. This looks unintentional, since CLDR still specifiesarabas the default numbering system forar.Code sample
Code sample
Logs
No exceptions are thrown; this is a silent data regression.
Flutter Doctor output
Doctor output