بومیسازی (i18n)
فینچ از دو روش برای مدیریت رشتههای زبان پشتیبانی میکند: فایلهای JSON و رشتههای تعریفشده در Dart. هر دو روش پشتیبانی از متغیرها و جمعبندی را ارائه میدهند.
گزینه ۱: فایلهای JSON (پیشفرض)
ساختار
فایلهای زبان را در languagePath (پیشفرض: lib/languages/) قرار دهید:
lib/languages/
en.json
fa.json
nl.json
مثال فایل JSON
{
"welcome": "به فینچ خوش آمدید",
"greeting": "سلام، {name}!",
"items_count": "{count} آیتم | {count} آیتمها"
}
پیکربندی
FinchConfigs(
languageSource: LanguageSource.json,
languagePath: pathTo('./lib/languages'),
)
گزینه ۲: رشتههای Dart
تمام رشتههای زبان را مستقیماً در Dart تعریف کنید:
// lib/languages/lang.dart
Map<String, Map<String, dynamic>> languageDart = {
'en': {
'welcome': 'Welcome to Finch',
'greeting': 'Hello, {name}!',
},
'fa': {
'welcome': 'به فینچ خوش آمدید',
'greeting': 'سلام، {name}!',
},
};
FinchConfigs(
languageSource: LanguageSource.dart,
dartLanguages: languageDart,
)
پسوند .tr
در کد Dart، از پسوند .tr روی رشتهها استفاده کنید:
var msg = 'welcome'.tr(rq);
var greeting = 'greeting'.tr(rq, params: {'name': user.name});
writeArr
برای رشتههای آرایهای از writeArr استفاده کنید:
var features = 'features'.writeArr(rq); // List<String>
ترجمه در قالب با $t
<h1>{{ $t('welcome') }}</h1>
<p>{{ $t('greeting', {'name': user.name}) }}</p>
تغییر زبان
فینچ به صورت خودکار زبان را از مسیر URL تشخیص میدهد (/fa/users، /en/users). برای تغییر دستی:
rq.setLanguage('fa');
یا از طریق query parameter (اگر پیکربندی شده باشد):
/page?lang=fa
TString
TString امکان ساخت رشتههای چندزبانه inline را میدهد:
TString(en: 'Hello', fa: 'سلام', nl: 'Hallo')
.get(rq.currentLanguage)