فرانت‌اند: نسخه انگلیسی با مسیر /en/ — مسیریابی دوزبانه، دیکشنری رابط، بومی‌سازی داده، تغییر زبان در هدر، ویرایش انگلیسی در پنل و پشتیبانی LTR

This commit is contained in:
MMD
2026-09-12 23:37:55 +03:30
parent 6bb6226e06
commit 6b49d035c2
43 changed files with 1194 additions and 262 deletions
+212
View File
@@ -0,0 +1,212 @@
// دیکشنری دوزبانه رشته‌های هاردکد رابط کاربری (بدون محتوای دیتابیس).
// کلید فارسی مرجع است؛ متن‌های دیتابیس (سئو، پروژه‌ها، مقاله‌ها و...) از localize.ts می‌آیند.
export const fa = {
// عمومی
brandFallback: 'گروه ساختمانی آرامش',
loading: 'در حال بارگذاری',
errorTitle: 'اتصال به سرور برقرار نشد',
errorText: 'محتوای سایت از سرور بارگذاری می‌شود؛ لطفاً اتصال اینترنت یا وضعیت سرور را بررسی کنید.',
retry: 'تلاش دوباره',
backToTop: 'بازگشت به بالا',
switchLang: 'English',
switchLangAria: 'تغییر زبان به انگلیسی',
understood: 'متوجه شدم',
// هدر و ناوبری
mainNav: 'ناوبری اصلی',
mobileNav: 'ناوبری موبایل',
openMenu: 'باز کردن منو',
closeMenu: 'بستن منو',
callBrand: 'تماس تلفنی با گروه ساختمانی آرامش',
// فرم تماس — پیام‌های اعتبارسنجی و خطا
incompleteInfo: 'اطلاعات ناقص است',
nameRequired: 'لطفاً نام و نام خانوادگی خود را کامل وارد کنید (حداقل ۳ حرف).',
phoneInvalidTitle: 'شماره تلفن نامعتبر است',
phoneInvalidText: 'لطفاً یک شماره تماس معتبر وارد کنید تا کارشناسان ما بتوانند با شما ارتباط بگیرند.',
submitErrorTitle: 'خطا در ثبت درخواست',
formCheck: 'لطفاً اطلاعات فرم را بررسی و دوباره تلاش کنید.',
connectionErrorTitle: 'خطا در اتصال به سرور',
connectionErrorText: 'ارتباط با سرور برقرار نشد. لطفاً بعداً دوباره تلاش کنید.',
// خبرنامه
emailRequired: 'لطفاً نشانی ایمیل خود را برای عضویت در خبرنامه وارد کنید.',
emailInvalidTitle: 'فرمت ایمیل نامعتبر است',
emailInvalidText: 'لطفاً ایمیل خود را به درستی وارد کنید (مثال: example@domain.com).',
subscribeErrorTitle: 'خطا در عضویت',
emailCheck: 'لطفاً ایمیل را بررسی و دوباره تلاش کنید.',
// تیتر بخش‌ها — فقط جایگزین وقتی دیتابیس خالی است
fallbackGalleryTitle: 'گالری تصاویر',
fallbackGalleryLead: 'قاب‌هایی از کارگاه‌ها و پروژه‌های تحویل‌شده گروه ساختمانی آرامش.',
fallbackTeamTitle: 'تیم ما',
fallbackTeamLead: 'کسانی که تصمیم‌های اصلی هر پروژه را می‌گیرند و پاسخ‌گوی آن هستند.',
fallbackTimelineTitle: 'مسیر ما',
fallbackTimelineLead: 'از یک دفتر چهارنفره تا ۴۷ پروژه. خط زمان پروژه‌های ما را ببینید.',
fallbackFaqTitle: 'سوالات متداول',
fallbackFaqLead: 'پاسخ کوتاه به پرتکرارترین پرسش‌های سرمایه‌گذاران و خریداران.',
// کارت پروژه
yearLabel: 'سال:',
sqm: 'متر مربع',
// جزئیات پروژه
projectNotFound: 'این پروژه پیدا نشد',
projectNotFoundText: 'ممکن است نشانی تغییر کرده باشد. فهرست کامل پروژه‌ها را ببینید.',
backToProjects: 'بازگشت به پروژه‌ها',
specLocation: 'موقعیت',
specYear: 'سال',
specArea: 'زیربنا',
specFloors: 'تعداد طبقات',
specUnits: 'واحدها',
specClient: 'کارفرما',
breadcrumbAria: 'مسیر صفحه',
home: 'صفحه اصلی',
projects: 'پروژه‌ها',
projectDetailsAria: 'جزئیات پروژه',
aboutProject: 'درباره پروژه',
similarProjectCta: 'پروژه‌ای مشابه دارید؟',
relatedProjectsAria: 'پروژه‌های مرتبط',
otherProjects: 'پروژه‌های دیگر',
// مقاله و وبلاگ
articleNotFound: 'این مقاله پیدا نشد',
articleNotFoundText: 'فهرست کامل مقالات وبلاگ را ببینید.',
backToBlog: 'بازگشت به وبلاگ',
blog: 'وبلاگ',
relatedArticlesAria: 'مقالات مرتبط',
relatedArticles: 'مقالات مرتبط',
readArticlePrefix: 'خواندن مقاله',
articleImagePrefix: 'تصویر مقاله',
featuredArticle: 'مقاله ویژه',
readMore: 'ادامه مطلب',
draft: 'پیش‌نویس',
writeNewArticle: 'نوشتن مقاله جدید',
blogEmpty: 'هنوز مقاله‌ای منتشر نشده است',
blogEmptyText: 'به‌زودی نخستین نوشته‌های ما اینجا منتشر می‌شود.',
articlesAria: 'مقالات',
// برچسب‌های دسترس‌پذیری بخش‌ها
statsAria: 'آمار و ارقام',
projectsListAria: 'فهرست پروژه‌ها',
projectFilterAria: 'فیلتر وضعیت پروژه',
officesAria: 'دفاتر ما',
heroAria: 'معرفی گروه ساختمانی آرامش',
heroImageAlt: 'نمای شبانه برج مسکونی ساخته‌شده توسط گروه ساختمانی آرامش',
heroTitleAria: 'تیتر اصلی صفحه',
scrollDown: 'رفتن به بخش بعدی',
compareAria: 'مقایسه کانسپت و پروژه ساخته‌شده',
zoomImagePrefix: 'بزرگ‌نمایی تصویر شماره',
viewImage: 'نمایش تصویر',
close: 'بستن',
prevImage: 'تصویر قبلی',
nextImage: 'تصویر بعدی',
prevTestimonial: 'نظر قبلی',
nextTestimonial: 'نظر بعدی',
selectTestimonialAria: 'انتخاب نظر',
testimonialByPrefix: 'نظر',
}
export type Dict = typeof fa
export const en: Dict = {
brandFallback: 'Aramesh Construction Group',
loading: 'Loading',
errorTitle: 'Could not reach the server',
errorText: 'Site content is loaded from the server; please check your internet connection or the server status.',
retry: 'Try again',
backToTop: 'Back to top',
switchLang: 'فا',
switchLangAria: 'Switch language to Persian (Farsi)',
understood: 'Got it',
mainNav: 'Main navigation',
mobileNav: 'Mobile navigation',
openMenu: 'Open menu',
closeMenu: 'Close menu',
callBrand: 'Call Aramesh Construction Group',
incompleteInfo: 'Incomplete information',
nameRequired: 'Please enter your full name (at least 3 characters).',
phoneInvalidTitle: 'Invalid phone number',
phoneInvalidText: 'Please enter a valid phone number so our experts can get in touch with you.',
submitErrorTitle: 'Error submitting the request',
formCheck: 'Please check the form and try again.',
connectionErrorTitle: 'Server connection error',
connectionErrorText: 'Could not reach the server. Please try again later.',
emailRequired: 'Please enter your email address to subscribe to the newsletter.',
emailInvalidTitle: 'Invalid email format',
emailInvalidText: 'Please enter your email correctly (e.g. example@domain.com).',
subscribeErrorTitle: 'Subscription error',
emailCheck: 'Please check your email and try again.',
fallbackGalleryTitle: 'Gallery',
fallbackGalleryLead: 'Frames from the construction sites and delivered projects of Aramesh Construction Group.',
fallbackTeamTitle: 'Our Team',
fallbackTeamLead: 'The people who make each project’s key decisions — and answer for them.',
fallbackTimelineTitle: 'Our Path',
fallbackTimelineLead: 'From a four-person office to 47 projects. Walk through the timeline of our work.',
fallbackFaqTitle: 'Frequently Asked Questions',
fallbackFaqLead: 'Short answers to the questions investors and buyers ask most.',
yearLabel: 'Year:',
sqm: 'm²',
projectNotFound: 'Project not found',
projectNotFoundText: 'The address may have changed. Browse the full list of projects.',
backToProjects: 'Back to projects',
specLocation: 'Location',
specYear: 'Year',
specArea: 'Built area',
specFloors: 'Floors',
specUnits: 'Units',
specClient: 'Client',
breadcrumbAria: 'Breadcrumb',
home: 'Home',
projects: 'Projects',
projectDetailsAria: 'Project details',
aboutProject: 'About the project',
similarProjectCta: 'Have a similar project in mind?',
relatedProjectsAria: 'Related projects',
otherProjects: 'More projects',
articleNotFound: 'Article not found',
articleNotFoundText: 'Browse the full list of blog articles.',
backToBlog: 'Back to blog',
blog: 'Blog',
relatedArticlesAria: 'Related articles',
relatedArticles: 'Related articles',
readArticlePrefix: 'Read article',
articleImagePrefix: 'Image of article',
featuredArticle: 'Featured article',
readMore: 'Read more',
draft: 'Draft',
writeNewArticle: 'Write a new article',
blogEmpty: 'No articles published yet',
blogEmptyText: 'Our first articles will be published here soon.',
articlesAria: 'Articles',
statsAria: 'Stats and figures',
projectsListAria: 'Project list',
projectFilterAria: 'Filter projects by status',
officesAria: 'Our offices',
heroAria: 'Introduction of Aramesh Construction Group',
heroImageAlt: 'Night view of a residential tower built by Aramesh Construction Group',
heroTitleAria: 'Main headline',
scrollDown: 'Go to the next section',
compareAria: 'Compare the concept with the built project',
zoomImagePrefix: 'Zoom image No.',
viewImage: 'View image',
close: 'Close',
prevImage: 'Previous image',
nextImage: 'Next image',
prevTestimonial: 'Previous testimonial',
nextTestimonial: 'Next testimonial',
selectTestimonialAria: 'Select testimonial',
testimonialByPrefix: 'Testimonial by',
}
export const dict = { fa, en }
export type DictKey = keyof Dict