بومی‌سازی (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)