Lokalisatie (i18n)
Finch ondersteunt twee methoden voor het beheren van taalstrings: JSON-bestanden en Dart-gedefinieerde strings. Beide bieden ondersteuning voor variabelen en meervoudsvormen.
Optie 1: JSON-bestanden (standaard)
Structuur
Plaats taalbestanden in languagePath (standaard: lib/languages/):
lib/languages/
en.json
fa.json
nl.json
Voorbeeld JSON-bestand
{
"welcome": "Welkom bij Finch",
"greeting": "Hallo, {name}!",
"items_count": "{count} item | {count} items"
}
Configuratie
FinchConfigs(
languageSource: LanguageSource.json,
languagePath: pathTo('./lib/languages'),
)
Optie 2: Dart-strings
Definieer alle taalstrings rechtstreeks in Dart:
// lib/languages/lang.dart
Map<String, Map<String, dynamic>> languageDart = {
'en': {
'welcome': 'Welcome to Finch',
'greeting': 'Hello, {name}!',
},
'nl': {
'welcome': 'Welkom bij Finch',
'greeting': 'Hallo, {name}!',
},
};
FinchConfigs(
languageSource: LanguageSource.dart,
dartLanguages: languageDart,
)
De .tr-extensie
Gebruik in Dart-code de .tr-extensie op strings:
var msg = 'welcome'.tr(rq);
var greeting = 'greeting'.tr(rq, params: {'name': user.name});
writeArr
Gebruik writeArr voor arraystrings:
var features = 'features'.writeArr(rq); // List<String>
Vertalen in sjabloon met $t
<h1>{{ $t('welcome') }}</h1>
<p>{{ $t('greeting', {'name': user.name}) }}</p>
Taal wisselen
Finch detecteert automatisch de taal uit het URL-pad (/nl/users, /en/users). Handmatig instellen:
rq.setLanguage('nl');
Of via queryparameter (indien geconfigureerd):
/page?lang=nl
TString
TString biedt inline meertalige strings:
TString(en: 'Hello', fa: 'سلام', nl: 'Hallo')
.get(rq.currentLanguage)