Native Localization (nat_l10n)
This plugin helps to make use of localization utilities provided by the native platforms.
Platform Support
Android | iOS | MacOS | Web | Linux | Windows |
---|---|---|---|---|---|
✔️ | ✔️ | ➖️ | ➖️ | ➖️ | ➖️ |
Features
Receive localized
- time zone entries
- locale entries
- currency entries
Usage
General
// Import package
import 'package:nat_l10n/nat_l10n.dart';
// Instantiate it
final NatL10n natL10n = NatL10n();
Localize Time Zones
// Required: Target Locale, Time Zone Ids (List), Optional: Formatting Style
List<TimeZoneInfo> localizedTimeZones = await natL10n.localizedTimeZones(
Locale('en', 'US'), ['America/Denver', 'Europe/Berlin'], style: TimeZoneStyle.long);
});
// Returns:
// 1. {id: America/Denver, translation: Mountain Standard Time, offset: -25200}
// 2. {id: Europe/Berlin, translation: Central European Standard Time, offset: 3600}
Localize Locales
// Required: Target Locale, Locales to localize (List)
List<LocaleInfo> localizedLocales = await natL10n.localizedLocales(
Locale('en', 'US'), [ Locale('de', 'DE'), Locale('ko', 'KR')]);
});
// Returns:
// 1. {localeTag: de-DE, translatedLocale: German (Germany), translatedLanguage: German, translatedRegion: Germany}
// 2. {localeTag: ko-KR, translatedLocale: Korean (South Korea), translatedLanguage: Korean, translatedRegion: South Korea}
Respectively localize Locales
// Required: Locales to localize (List) into each locale respectively
List<LocaleInfo> localizedLocales = await natL10n.respectivelyLocalizedLocales(
[ Locale('de', 'DE'), Locale('ko', 'KR')]);
});
// Returns:
// 1. {localeTag: de-DE, translatedLocale: Deutsch (Deutschland), translatedLanguage: Deutsch, translatedRegion: Deutschland}
// 2. {localeTag: ko-KR, translatedLocale: 한국어 (대한민국), translatedLanguage: 한국어, translatedRegion: 대한민국}
Localize Currencies
// Required: Target Locale, Currency codes to localize
List<CurrencyInfo> localizedCurrencies = await natL10n.localizedCurrencies(
Locale('en', 'US'), [ 'USD', 'EUR']);
});
// Returns:
// 1. {currencyCode: USD, translated: US Dollar, symbol: $}
// 2. {currencyCode: EUR, translated: Euro, symbol: €}
Additional information
1. Help Utils
The example app includes a list of:
- Time Zone Ids (e.g.
'America/Denver'
), - Locales (e.g.
Locale('en', 'US')
), - ISO 4217 Currency Codes (e.g.
'USD'
)
a) Android/Kotlin
All supported Identifiers, Locales, Currency Codes
Show Code
import java.util.*
fun main() {
printTimeZones()
printLocales()
printCurrencies()
}
private fun printTimeZones() {
val timeZones = TimeZone.getAvailableIDs()
timeZones.forEach {
println("$it")
}
}
private fun printLocales() {
val locales = Locale.getAvailableLocales()
locales.forEach {
println("$it")
}
}
private fun printCurrencies() {
val currencies = Currency.getAvailableCurrencies()
currencies.forEach {
println("$it")
}
}
b) iOS/Swift
All supported Identifiers, Locales, Currency Codes
Show Code
import Foundation
printTimeZones()
printLocales()
printCurrencies()
private func printTimeZones() {
let timeZones = TimeZone.knownTimeZoneIdentifiers
timeZones.forEach {
print("\($0 as String?)")
}
}
private func printLocales() {
let locales = Locale.availableIdentifiers
locales.forEach {
print("\($0 as String?)")
}
}
private func printCurrencies() {
let currencies = Locale.isoCurrencyCodes
// let currencies = Locale.commonISOCurrencyCodes
currencies.forEach {
print("\($0 as String?)")
}
}
2. Regarding Time Zone Ids
Which time zone ids are supported, depends on the underlying platform.
The 'Area/Location' name format for time zone Ids is preferred (Reference).
3. Regarding Locales
4. Regarding Currencies
- Documentation Android
- Documentation Apple
- There is no specific "Currency" class on iOS side. Currency information has to be attained via the Locale class.
5. Regarding Localization Results
The results can vary on the different platforms. No guarantee is given that the results are correct.