چندزبانه
قالب با سه زبان کامل عرضه میشود: فارسی (پیشفرض)، انگلیسی و عربی. تمام متنهای رابط از دیکشنری خوانده میشوند و تغییر زبان در زمان اجرا، بدون رفرش صفحه اعمال میشود.
فایلهای زبان
src/locales/
├── fa.js دیکشنری فارسی (زبان پیشفرض و مرجع)
├── en.js انگلیسی
├── ar.js عربی
├── chrome.js متنهای پوسته: ui.*، section.*، role.*
├── generated.js تولیدشده: nav.*، صفحهها، عنوانها
└── index.js ادغام دیکشنریها + توابع کمکیترتیب ادغام در index.js: chrome → generated → دیکشنری دستنویس. یعنی دیکشنری زبان همیشه برنده است.
استفاده در HTML
<!-- متن -->
<button data-i18n="ui.export">خروجی</button>
<!-- صفتها -->
<input data-i18n-placeholder="ui.searchPlaceholder" placeholder="جستجو…">
<button data-i18n-title="ui.close" aria-label="بستن"></button>
<!-- محتوای HTML (کمتر استفاده کنید) -->
<p data-i18n-html="landing.footerText"></p>مقدار داخل تگ فقط متن پیشفرض است؛ اگر جاوااسکریپت اجرا نشود، همان نمایش داده میشود.
استفاده در جاوااسکریپت
import { t, setLanguage, language, dict } from './js/core/i18n.js';
t('ui.save'); // ترجمه کلید
t('table.rows', '', { count: 24 }); // جایگذاری متغیر: "۲۴ سطر"
setLanguage('en'); // تغییر زبان (جهت هم بهروز میشود)تغییر زبان از رابط کاربری
- دکمه هدر با
[data-language-switch] - پنل شخصیسازی:
[data-customizer="language"] [data-value="ar"] - پالت فرمان (Ctrl+K) → «تغییر زبان»
import { setLanguage } from './js/core/i18n.js';
setLanguage('ar', { direction: 'rtl' }); // جهت را دستی هم میتوان تعیین کردافزودن زبان جدید
- فایل
src/locales/tr.jsرا ازen.jsکپی کنید و ترجمه کنید:
export const tr = {
meta: { code: 'tr', label: 'Türkçe', dir: 'ltr', locale: 'tr-TR' },
ui: { save: 'Kaydet', cancel: 'İptal', … },
…
};- در
src/locales/index.jsآن را import و بهdictionariesاضافه کنید:
import { tr } from './tr.js';
const dictionaries = { fa, en, ar, tr };- اگر زبان راستبهچپ است،
dir: 'rtl'بگذارید؛ بقیه چیزها خودکار است (فونت، جهت، مجموعه ارقام).
ارقام و اعداد
| زبان | مجموعه ارقام |
|---|---|
| fa | ۰۱۲۳۴۵۶۷۸۹ |
| ar | ٠١٢٣٤٥٦٧٨٩ |
| en | 0123456789 |
اعداد همیشه با formatNumber، formatCurrency، formatPercent یا toDigits قالب میشوند — هیچگاه Number را مستقیم در متن نگذارید:
import { formatCurrency, formatNumber, formatPercent } from './js/core/numbers.js';
formatCurrency(2480000000, 'IRR', { compact: true }); // ۲٫۵ میلیارد ریال
formatPercent(4.83); // ۴٫۸٪تاریخ و تقویم
با src/js/core/jalali.js تاریخها هم در تقویم شمسی و هم میلادی نمایش داده میشوند:
import { formatDate, relativeTime, toJalali, toGregorian } from './js/core/jalali.js';
formatDate('2026-09-22'); // ۳۱ شهریور ۱۴۰۵
relativeTime('2026-09-20'); // ۲ روز پیشتقویم فعال با محور calendar در تنظیمات ظاهری جابهجا میشود (jalali ⇄ gregorian) و همه جدولها، تقویمها و نمودارهای زمانی همان را رعایت میکنند.
language:change را منتشر میکندجدولها، نمودارها و تقویمها به آن گوش میدهند و برچسبها را دوباره میسازند؛ اگر ماژول جدیدی نوشتید، همین رویداد را مدیریت کنید.