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)