Lokalisatie en Internationalisatie (i18n) Gids

Welkom bij de Finch Lokalisatie en Internationalisatie (i18n) gids! Deze gids laat zien hoe je je Finch-applicatie kunt lokaliseren en internationaliseren. Of je nu een ervaren ontwikkelaar bent of net begint, Finch biedt tools voor meertalige ondersteuning.

i18n in Finch

Finch heeft een ingebouwd i18n-systeem om je applicatie te lokaliseren. Het systeem laat je meerdere talen definiëren en de tekst van je applicatie vertalen.

Hoe gebruik je i18n in Finch?

Lokalisatie in Finch kan op twee manieren: je kunt JSON-bestanden gebruiken of talen definiëren in een languages.dart bestand.

1. JSON-bestanden gebruiken

In Finch kun je JSON-bestanden gebruiken om talen te definiëren. Standaard zoekt Finch naar taalsbestanden in de lib/languages map. Je kunt een nieuw JSON-bestand aanmaken voor elke taal die je wilt ondersteunen, bijvoorbeeld fa.json voor Perzisch.

Het is eenvoudig om i18n in Finch te gebruiken: definieer je vertalingen in en.json of in een ander taalbestand. Hier is een voorbeeld van hoe je talen definieert in fa.json:

{
  "dir": "rtl",
  "example.params": "نام من {name} است، سن من {age} سال است",
  "example.path": "مسیر تست از example.path برای محلی‌سازی",
  "example.tstring": "تست اشیاء TString برای i18n",
  "logo": "Finch",
  "logo.title": "Finch"
}

2. Gebruik van languages.dart

Je kunt je talen ook definiëren in languages.dart. Hieronder een voorbeeld:

var languages = <String, Map<String, String>>{
  'fa': {
    'dir': 'rtl',
    'example.params': 'نام من {name} است، سن من {age} سال است',
    'example.path': 'مسیر تست از example.path برای محلی‌سازی',
  },
  'en': {
    'dir': 'ltr',
    'example.params': 'My name is {name}, I am {age} years old',
    'example.path': 'Test path from example.path for localization',
  },
};

Na het definiëren van je talen, configureer Finch om dart-bestanden voor i18n te gebruiken via de dartLanguages property in FinchConfigs:

FinchConfigs configs = FinchConfigs(
  // alleen voor json-bestanden
  languagePath: pathTo(env['LANGUAGE_PATH'] ?? "./lib/languages"), 
  // stel de language source in op dart of json
  languageSource: LanguageSource.dart,
  // de map met talen gedefinieerd in languages.dart
  dartLanguages: languages,
);

LanguageSource.dart en LanguageSource.json zijn opties voor de languageSource property. Kies wat je voorkeur heeft. Geef configs vervolgens door aan de FinchApp constructor:

FinchApp app = FinchApp(configs: configs);

i18n in templates

Je kunt i18n in templates gebruiken via de {{ $t('logo.title') }} syntaxis. Bijvoorbeeld:

<h1>{{ $t('logo.title') }}</h1>

i18n in controllers

Het is heel eenvoudig om i18n in controllers te gebruiken. Je kunt de .tr methode op strings gebruiken om te vertalen. Bijvoorbeeld:

rq.renderString(text: 'logo.title'.tr);

parameters in i18n

Je kunt parameters gebruiken in i18n-strings. Bijvoorbeeld:

rq.renderString(text: 'example.params'.tr.write({'name': 'Alexandre', 'age': 30}));

En in je template:

<p>{{ $t('example.params', {'name': 'Alexandre', 'age': 30}) }}</p>

Array-parameters in i18n

Je kunt array-parameters gebruiken in i18n-strings. Bijvoorbeeld:

rq.renderString(text: 'example.params'.tr.writeArr(['Alexandre', 30]));

En in de template:

{
    "example.params": "نام من {0} است، سن من {1} سال است",
}
<p>{{ $t('example.params', ['Alexandre', 30]) }}</p>