package:intl4x Pub package publisher

intl4x

A lightweight, modular library for internationalization (i18n) in Dart, providing locale-sensitive formatting, featuring:

  • Formatting for dates, numbers, and lists.
  • Collation.
  • Display names.
  • Plural rules.

Status - preview

This package has now moved from experimental to preview. We will not ship any breaking changes, but are still iterating on some components. Please provide feedback via our issue tracker!

Backends

This library uses different backends on different platforms:

  • ICU4X: Wraps ICU4X to provide i18n functionality on both native platforms.
  • ECMA / Browser: Wraps the browser's built-in Intl functionalities for web-only applications, reducing bundle size.

Installation

Add intl4x to your pubspec.yaml:

dart pub add intl4x

Limitations

There are still some features missing:

  • Compact, percent, unit, and currency formatting.
  • Display names for calendar, currency, date time fields, and scripts.

Features

Date & Time Formatting

Format DateTime objects into locale-sensitive strings for dates, times, and time zones.

import 'package:intl4x/datetime_format.dart';

void main() {
  final dateTime = DateTime(2024, 7, 1, 8, 50, 07);
  final germanLocale = Locale.parse('de-DE');

  final formatter = DateTimeFormat.yearMonthDayTime(
    locale: germanLocale,
    length: DateTimeLength.long,
  ).withTimeZoneLong();

  // Format with a specific timezone
  print(formatter.format(dateTime, 'Europe/Berlin')); 
  // prints "1. Juli 2024 um 10:50:07 Mitteleuropäische Sommerzeit"
}

Number Formatting

Format numbers as decimals, percentages, or in compact form with locale-specific rules.

import 'package:intl4x/number_format.dart';

void main() {
  final locale = Locale.parse('en-US');

  final compactFormat = NumberFormat.compact(locale: locale);
  print(compactFormat.format(12345)); // "12K"

  final percentFormat = NumberFormat.percent(locale: locale);
  print(percentFormat.format(0.987)); // "99%"
}

Collation (String Sorting)

Sort lists of strings with locale-aware collation.

import 'package:intl4x/collation.dart';

void main() {
  final list = ['Z', 'a', 'z', 'ä'];
  final german = Collation(locale: Locale.parse('de-DE'));

  list.sort(german.compare);

  print(list); // prints "[a, ä, z, Z]"
}

Display Names

Get localized display names for locales, regions, scripts, and currencies.

import 'package:intl4x/display_names.dart';

void main() {
  final displayNames = DisplayNames(locale: Locale.parse('en'));

  print(displayNames.ofLocale(Locale.parse('fr-CA'))); // "Canadian French"
  print(displayNames.ofRegion('419')); // "Latin America"
}

List Formatting

Join lists of items into a grammatically correct, locale-sensitive string.

import 'package:intl4x/list_format.dart';

void main() {
  final list = ['apples', 'bananas', 'oranges'];
  final english = Locale.parse('en');
  
  print(list.joinAnd(locale: english)); // "apples, bananas, and oranges"
  print(list.joinOr(locale: english));  // "apples, bananas, or oranges"
}

Plural Rules

Select the correct plural form for a given number based on locale rules.

import 'package:intl4x/plural_rules.dart';

void main() {
  final rules = PluralRules(
    locale: Locale.parse('en-US'),
    type: PluralType.ordinal,
  );

  String numberPlural(int i) => rules.select(i, one: 'st', two: 'nd', few: 'rd', other: 'th');

  print(numberPlural(1)); // 'st'
  print(numberPlural(2)); // 'nd'
  print(numberPlural(3)); // 'rd'
  print(numberPlural(4)); // 'th'
}

Case Mapping

Change the case of strings according to locale-specific rules.

import 'package:intl4x/case_mapping.dart';

void main() {
  final tr = Locale.parse('tr');
  final en = Locale.parse('en');

  final upper = 'TICKET';
  print(upper.toLocaleLowerCase(en)); // ticket
  print(upper.toLocaleLowerCase(tr)); // tıcket
  
  final lower = 'i';
  print(lower.toLocaleUpperCase(en)); // I
  print(lower.toLocaleUpperCase(tr)); // İ
}

Libraries

calendar
Calendar types and weekday information.
case_mapping
A locale-sensitive case mapper for transforming strings.
collation
Provides locale-sensitive string comparison.
datetime_format
Locale-sensitive date and time formatting.
display_names
Formatting names in different locales.
list_format
Joins a list of strings according to locale-specific rules.
locale
Support for Unicode locale identifiers.
number_format
Provides locale-sensitive number formatting.
plural_rules
The appropriate locale-dependent plural form.