Add i18n foundation (fa-IR/en-US) and localize landing + auth.
Introduce path-prefixed locale routing under app/[lang] with a middleware that detects locale from cookie/Accept-Language (default fa-IR) and redirects. Add fa-IR (source of truth) and en-US dictionaries, a server getDictionary, a client I18nProvider/useT, locale-aware Link + router helpers, and a language switcher. The root [lang] layout sets html lang/dir and the per-locale font (Peyda for fa, Inter for en). Landing sections and the login/register/auth shell now read all copy from the dictionaries; dashboard localization follows in a later commit. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,163 @@
|
||||
// Persian (fa-IR) dictionary — the source of truth for the app's copy.
|
||||
// The `Dictionary` type is derived from this object; en.ts must match its shape.
|
||||
const fa = {
|
||||
common: {
|
||||
appName: 'ابربان',
|
||||
login: 'ورود',
|
||||
register: 'ثبتنام',
|
||||
logout: 'خروج',
|
||||
signOut: 'خروج از حساب',
|
||||
dashboard: 'داشبورد',
|
||||
backHome: 'بازگشت به خانه',
|
||||
loading: 'در حال بارگذاری…',
|
||||
save: 'ذخیره',
|
||||
cancel: 'انصراف',
|
||||
delete: 'حذف',
|
||||
edit: 'ویرایش',
|
||||
create: 'ایجاد',
|
||||
back: 'بازگشت',
|
||||
search: 'جستجو',
|
||||
confirm: 'تأیید',
|
||||
close: 'بستن',
|
||||
yes: 'بله',
|
||||
no: 'خیر',
|
||||
currency: 'تومان',
|
||||
currencyShort: 'ت',
|
||||
},
|
||||
|
||||
language: {
|
||||
label: 'زبان',
|
||||
},
|
||||
|
||||
meta: {
|
||||
title: 'ابربان | زیرساخت ابری، در کنترل تو',
|
||||
description:
|
||||
'ابربان؛ پلتفرم ابریِ خودسرویس روی کوبرنتیز. اپ خود را در چند ثانیه منتشر کن — دیتابیس مدیریتشده، دامنهٔ اختصاصی، SSL خودکار و لاگ زنده.',
|
||||
},
|
||||
|
||||
roles: {
|
||||
admin: 'مدیر',
|
||||
technical: 'فنی',
|
||||
sales: 'فروش',
|
||||
},
|
||||
|
||||
landing: {
|
||||
badge: 'پلتفرم ابریِ خودسرویس',
|
||||
hero: {
|
||||
title: 'ابربان',
|
||||
tagline: 'زیرساخت ابری، در کنترل تو',
|
||||
subtitle:
|
||||
'اپلیکیشنت را در چند ثانیه روی کوبرنتیز منتشر کن — بدون دردسر سرور، بدون پیچیدگیِ DevOps.',
|
||||
ctaPrimary: 'رایگان شروع کن',
|
||||
ctaSecondary: 'ورود',
|
||||
scrollHint: 'به دلِ ابرها بزن',
|
||||
},
|
||||
value: {
|
||||
lead: 'یک پلتفرمِ ',
|
||||
highlight: 'PaaS خودسرویس',
|
||||
tail: ' روی کوبرنتیز — تمامِ قدرتِ زیرساختِ ابری، بدون پیچیدگیِ طوفانیاش.',
|
||||
body: 'ابربان لایههای سختِ DevOps را برایت مدیریت میکند تا فقط روی محصولت تمرکز کنی.',
|
||||
},
|
||||
how: {
|
||||
title: 'به سادگیِ سه قدم',
|
||||
steps: [
|
||||
{ n: '۱', title: 'کدت را بده', desc: 'ریپازیتوری یا اپت را وصل کن.' },
|
||||
{ n: '۲', title: 'ما میسازیم', desc: 'ابربان بهصورت خودکار بیلد و روی کوبرنتیز دیپلوی میکند.' },
|
||||
{ n: '۳', title: 'آنلاین شو', desc: 'دامنه و SSL آماده است؛ اپت زنده میشود.' },
|
||||
],
|
||||
},
|
||||
features: {
|
||||
title: 'هرچه برای ساختن لازم داری',
|
||||
subtitle: 'یک جعبهابزارِ کامل برای انتشار و نگهداریِ اپ.',
|
||||
items: [
|
||||
{ title: 'دیپلوی برقآسا', desc: 'Node.js، لاراول و وردپرس را با یک کلیک منتشر کن؛ بیلد و انتشار خودکار.' },
|
||||
{ title: 'دیتابیس مدیریتشده', desc: 'PostgreSQL، MySQL، Redis، RabbitMQ و Elasticsearch، آماده و پایدار.' },
|
||||
{ title: 'SSL خودکار', desc: 'دامنهٔ اختصاصی وصل کن؛ گواهی SSL خودکار صادر و تمدید میشود.' },
|
||||
{ title: 'لینک پیشنمایش', desc: 'برای هر دیپلوی یک Preview URL پایدار روی TLS بگیر و سریع تست کن.' },
|
||||
{ title: 'لاگ زنده', desc: 'لاگ بیلد و اجرای اپ را همان لحظه و بهصورت زنده دنبال کن.' },
|
||||
{ title: 'اسنپشات و بکاپ', desc: 'از وضعیت اپ اسنپشات بگیر و هر زمان خواستی بازگردان.' },
|
||||
{ title: 'بیلینگ شفاف', desc: 'کیفپول پیشپرداخت، فاکتور دقیق و مصرف لحظهای — بدون سورپرایز.' },
|
||||
{ title: 'پشتیبانی فارسی', desc: 'تیم پشتیبانی و سیستم تیکت، فارسی و همیشه کنارت.' },
|
||||
],
|
||||
},
|
||||
trust: {
|
||||
title: 'چرا تیمها به ابربان اعتماد میکنند',
|
||||
items: [
|
||||
{ kpi: '< ۶۰ ثانیه', label: 'میانگین زمان دیپلوی' },
|
||||
{ kpi: '۹۹٫۹٪', label: 'پایداریِ زیرساخت' },
|
||||
{ kpi: 'TLS خودکار', label: 'امنیتِ پیشفرض' },
|
||||
{ kpi: 'بومیِ ایران', label: 'بهینه برای کاربر ایرانی' },
|
||||
],
|
||||
},
|
||||
finalCta: {
|
||||
titleLead: 'آسمان صاف است؛ وقتِ ',
|
||||
titleHighlight: 'زنده',
|
||||
titleTail: ' کردنِ اپِ توست.',
|
||||
body: 'همین حالا حسابت را بساز و اولین دیپلوی را تجربه کن.',
|
||||
ctaPrimary: 'همین حالا شروع کن',
|
||||
ctaSecondary: 'داشبورد',
|
||||
},
|
||||
footer: {
|
||||
copyright: '© ابربان — همهٔ حقوق محفوظ است',
|
||||
},
|
||||
},
|
||||
|
||||
auth: {
|
||||
backHome: 'بازگشت به خانه',
|
||||
login: {
|
||||
title: 'خوش آمدی',
|
||||
subtitle: 'به حساب ابربان خود وارد شو',
|
||||
altPrompt: 'هنوز حساب نداری؟',
|
||||
altLabel: 'ثبتنام کن',
|
||||
email: 'ایمیل',
|
||||
password: 'رمز عبور',
|
||||
submit: 'ورود',
|
||||
submitting: 'در حال ورود…',
|
||||
success: 'با موفقیت وارد شدی!',
|
||||
error: 'ورود ناموفق بود',
|
||||
},
|
||||
register: {
|
||||
title: 'ساخت حساب',
|
||||
subtitle: 'در چند دقیقه اولین اپت را منتشر کن',
|
||||
altPrompt: 'قبلاً حساب ساختهای؟',
|
||||
altLabel: 'وارد شو',
|
||||
firstName: 'نام',
|
||||
firstNamePlaceholder: 'مثلاً علی',
|
||||
lastName: 'نام خانوادگی',
|
||||
lastNamePlaceholder: 'مثلاً رضایی',
|
||||
email: 'ایمیل',
|
||||
password: 'رمز عبور',
|
||||
passwordPlaceholder: 'حداقل ۸ کاراکتر',
|
||||
submit: 'ساخت حساب',
|
||||
submitting: 'در حال ساخت حساب…',
|
||||
success: 'حساب با موفقیت ساخته شد!',
|
||||
error: 'ثبتنام ناموفق بود',
|
||||
},
|
||||
},
|
||||
|
||||
nav: {
|
||||
sectionAdmin: 'مدیریت',
|
||||
sectionTechnical: 'فنی',
|
||||
sectionSales: 'فروش',
|
||||
walletBalanceTitle: 'موجودی کیفپول',
|
||||
dashboard: 'داشبورد',
|
||||
applications: 'اپلیکیشنها',
|
||||
services: 'دیتابیسها و سرویسها',
|
||||
logs: 'لاگها',
|
||||
newDeploy: 'دیپلوی جدید',
|
||||
wallet: 'کیفپول',
|
||||
invoices: 'فاکتورها',
|
||||
tickets: 'تیکتها',
|
||||
users: 'کاربران',
|
||||
allApplications: 'همهٔ اپلیکیشنها',
|
||||
billingPlans: 'پلنهای صورتحساب',
|
||||
clusters: 'کلاسترها',
|
||||
clusterPools: 'پولهای کلاستر',
|
||||
allTickets: 'همهٔ تیکتها',
|
||||
technicalTickets: 'تیکتهای فنی',
|
||||
salesTickets: 'تیکتهای فروش',
|
||||
},
|
||||
};
|
||||
|
||||
export type Dictionary = typeof fa;
|
||||
export default fa;
|
||||
Reference in New Issue
Block a user