mirror of
https://github.com/nexu-io/open-design.git
synced 2026-06-01 03:14:35 +07:00
feat(i18n): add Persian (Farsi) locale (#159)
Add `fa` locale with full translation of all UI strings to Persian. Register it in types.ts and index.tsx alongside existing locales.
This commit is contained in:
parent
39c0399ded
commit
53722bb545
3 changed files with 526 additions and 2 deletions
|
|
@ -10,6 +10,7 @@ import {
|
|||
type ReactNode,
|
||||
} from 'react';
|
||||
import { en } from './locales/en';
|
||||
import { fa } from './locales/fa';
|
||||
import { ptBR } from './locales/pt-BR';
|
||||
import { ru } from './locales/ru';
|
||||
import { zhCN } from './locales/zh-CN';
|
||||
|
|
@ -27,6 +28,7 @@ const DICTS: Record<Locale, Dict> = {
|
|||
'zh-TW': zhTW,
|
||||
'pt-BR': ptBR,
|
||||
'ru': ru,
|
||||
'fa': fa,
|
||||
};
|
||||
|
||||
const LS_KEY = 'open-design:locale';
|
||||
|
|
|
|||
521
apps/web/src/i18n/locales/fa.ts
Normal file
521
apps/web/src/i18n/locales/fa.ts
Normal file
|
|
@ -0,0 +1,521 @@
|
|||
import type { Dict } from '../types';
|
||||
|
||||
export const fa: Dict = {
|
||||
'common.cancel': 'لغو',
|
||||
'common.save': 'ذخیره',
|
||||
'common.close': 'بستن',
|
||||
'common.delete': 'حذف',
|
||||
'common.rename': 'تغییر نام',
|
||||
'common.preview': 'پیشنمایش',
|
||||
'common.share': 'اشتراکگذاری',
|
||||
'common.search': 'جستجو',
|
||||
'common.searchEllipsis': 'جستجو…',
|
||||
'common.loading': 'در حال بارگذاری…',
|
||||
'common.all': 'همه',
|
||||
'common.none': 'هیچ',
|
||||
'common.default': 'پیشفرض',
|
||||
'common.installed': 'نصب شده',
|
||||
'common.notInstalled': 'نصب نشده',
|
||||
'common.active': 'فعال',
|
||||
'common.offline': 'آفلاین',
|
||||
'common.selected': 'انتخاب شده',
|
||||
'common.create': 'ایجاد',
|
||||
'common.openPreview': 'باز کردن پیشنمایش',
|
||||
'common.exitFullscreen': 'خروج از تمام صفحه',
|
||||
'common.fullscreen': 'تمام صفحه',
|
||||
'common.openInNewTab': 'باز کردن در تب جدید',
|
||||
'common.exportPdf': 'صادرکردن به PDF',
|
||||
'common.exportZip': 'دانلود به صورت .zip',
|
||||
'common.exportHtml': 'صادرکردن به HTML مستقل',
|
||||
'common.justNow': 'همین الان',
|
||||
'common.minutesAgo': '{n} دقیقه پیش',
|
||||
'common.hoursAgo': '{n} ساعت پیش',
|
||||
'common.daysAgo': '{n} روز پیش',
|
||||
'common.now': 'الان',
|
||||
'common.minutesShort': '{n}د',
|
||||
'common.hoursShort': '{n}س',
|
||||
'common.daysShort': '{n}ر',
|
||||
'common.untitled': 'بدون عنوان',
|
||||
|
||||
'app.brand': 'Open Design',
|
||||
'app.brandPill': 'پیشنمایش تحقیقاتی',
|
||||
'app.brandSubtitle': 'توسط Nexu Labs',
|
||||
'app.welcomeLoading': 'در حال بارگذاری فضای کاری…',
|
||||
|
||||
'settings.welcomeKicker': 'خوش آمدید',
|
||||
'settings.welcomeTitle': 'Open Design را راهاندازی کنید',
|
||||
'settings.welcomeSubtitle':
|
||||
'نحوه اجرای تولیدات را انتخاب کنید. میتوانید هر زمان از دکمه تنظیمات در نوار بالا این را تغییر دهید.',
|
||||
'settings.kicker': 'تنظیمات',
|
||||
'settings.title': 'اجرا و مدل',
|
||||
'settings.subtitle':
|
||||
'بین یک CLI عامل کد محلی و Anthropic API (BYOK) انتخاب کنید. کلید API شما فقط در این مرورگر ذخیره میشود.',
|
||||
'settings.modeAria': 'حالت اجرا',
|
||||
'settings.modeDaemon': 'CLI محلی',
|
||||
'settings.modeDaemonHelp': 'اجرا از طریق CLI عامل کد روی دستگاه شما',
|
||||
'settings.modeDaemonOffline': 'Daemon در حال اجرا نیست',
|
||||
'settings.modeDaemonOfflineMeta': 'daemon آفلاین',
|
||||
'settings.modeDaemonInstalledMeta': '{count} نصب شده',
|
||||
'settings.modeApi': 'Anthropic API',
|
||||
'settings.modeApiMeta': 'BYOK',
|
||||
'settings.codeAgent': 'عامل کد',
|
||||
'settings.codeAgentHint':
|
||||
'با اسکن PATH شما شناسایی شده. CLI مورد نظر برای جریان تولیدات را انتخاب کنید.',
|
||||
'settings.rescan': '↻ اسکن مجدد',
|
||||
'settings.rescanTitle': 'اسکن مجدد PATH',
|
||||
'settings.noAgentsDetected':
|
||||
'هنوز هیچ عاملی شناسایی نشده. یکی از Claude Code، Codex، Gemini CLI، OpenCode، Cursor Agent، Qwen یا GitHub Copilot CLI را نصب کنید، سپس روی اسکن مجدد کلیک کنید.',
|
||||
'settings.apiSection': 'Anthropic API',
|
||||
'settings.apiKey': 'کلید API',
|
||||
'settings.showKey': 'نمایش کلید',
|
||||
'settings.hideKey': 'پنهان کردن کلید',
|
||||
'settings.show': 'نمایش',
|
||||
'settings.hide': 'پنهان',
|
||||
'settings.model': 'مدل',
|
||||
'settings.baseUrl': 'آدرس پایه',
|
||||
'settings.apiHint':
|
||||
'فراخوانیها مستقیماً از این مرورگر به آدرس پایهای که تعیین کردهاید ارسال میشوند. بدون پراکسی. کلید هرگز localStorage را ترک نمیکند.',
|
||||
'settings.skipForNow': 'فعلاً رد کنید',
|
||||
'settings.getStarted': 'شروع کنید',
|
||||
'settings.envConfigure': 'پیکربندی حالت اجرا',
|
||||
'settings.localCli': 'CLI محلی',
|
||||
'settings.anthropicApi': 'Anthropic API',
|
||||
'settings.noAgentSelected': 'هیچ عاملی انتخاب نشده',
|
||||
'settings.language': 'زبان',
|
||||
'settings.languageHint': 'زبان رابط را تغییر دهید. در این مرورگر ذخیره میشود.',
|
||||
'settings.modelPicker': 'مدل',
|
||||
'settings.reasoningPicker': 'سطح استدلال',
|
||||
'settings.modelPickerHint':
|
||||
'هنگامی که CLI یک دستور `models` را ارائه میدهد از آن دریافت میشود. «پیشفرض» انتخاب را به پیکربندی خود CLI واگذار میکند؛ «سفارشی…» به شما امکان میدهد هر شناسه مدلی را که CLI میپذیرد تایپ کنید.',
|
||||
'settings.modelCustom': 'سفارشی (در زیر تایپ کنید)…',
|
||||
'settings.modelCustomLabel': 'شناسه مدل سفارشی',
|
||||
'settings.modelCustomPlaceholder': 'مثلاً anthropic/claude-sonnet-4-6',
|
||||
|
||||
'entry.tabDesigns': 'طرحها',
|
||||
'entry.tabExamples': 'نمونهها',
|
||||
'entry.tabDesignSystems': 'سیستمهای طراحی',
|
||||
'entry.openSettingsTitle': 'تنظیمات',
|
||||
'entry.openSettingsAria': 'باز کردن تنظیمات',
|
||||
'entry.resizeAria': 'تغییر اندازه نوار کناری',
|
||||
'entry.loadingWorkspace': 'در حال بارگذاری فضای کاری…',
|
||||
|
||||
'newproj.tabPrototype': 'نمونه اولیه',
|
||||
'newproj.tabDeck': 'ارائه اسلاید',
|
||||
'newproj.tabTemplate': 'از قالب',
|
||||
'newproj.tabOther': 'سایر',
|
||||
'newproj.titlePrototype': 'نمونه اولیه جدید',
|
||||
'newproj.titleDeck': 'ارائه اسلاید جدید',
|
||||
'newproj.titleTemplate': 'شروع از یک قالب',
|
||||
'newproj.titleOther': 'پروژه جدید',
|
||||
'newproj.namePlaceholder': 'نام پروژه',
|
||||
'newproj.fidelityLabel': 'دقت',
|
||||
'newproj.fidelityWireframe': 'وایرفریم',
|
||||
'newproj.fidelityHigh': 'دقت بالا',
|
||||
'newproj.toggleSpeakerNotes': 'استفاده از یادداشتهای سخنران',
|
||||
'newproj.toggleSpeakerNotesHint': 'متن کمتر روی اسلایدها — نکات صحبت را در یادداشتها نگه دارید.',
|
||||
'newproj.toggleAnimations': 'افزودن انیمیشن',
|
||||
'newproj.toggleAnimationsHint':
|
||||
'افزودن حرکت (ورود، هاور، انتقال) بر روی قالب.',
|
||||
'newproj.templateLabel': 'قالب',
|
||||
'newproj.noTemplatesTitle': 'هنوز هیچ قالبی وجود ندارد',
|
||||
'newproj.noTemplatesBody':
|
||||
'هر پروژهای را باز کنید، سپس از منوی اشتراکگذاری در داخل نمایشگر فایل آن را به قالب تبدیل کنید. قالبها اینجا نمایش داده میشوند.',
|
||||
'newproj.savedTemplate': 'قالب ذخیره شده',
|
||||
'newproj.fileSingular': 'فایل',
|
||||
'newproj.filePlural': 'فایل',
|
||||
'newproj.create': 'ایجاد',
|
||||
'newproj.createFromTemplate': 'ایجاد از قالب',
|
||||
'newproj.createDisabledTitle':
|
||||
'ابتدا یک پروژه را به عنوان قالب ذخیره کنید (منوی اشتراکگذاری در داخل هر پروژه).',
|
||||
'newproj.importClaudeZip': 'وارد کردن ZIP طراحی Claude',
|
||||
'newproj.importClaudeZipTitle': 'وارد کردن یک فایل .zip صادر شده از Claude Design',
|
||||
'newproj.importingClaudeZip': 'در حال وارد کردن…',
|
||||
'newproj.privacyFooter': 'به طور پیشفرض فقط شما میتوانید پروژه خود را ببینید.',
|
||||
'newproj.designSystem': 'سیستم طراحی',
|
||||
'newproj.dsNoneFreeform': 'هیچ — آزاد',
|
||||
'newproj.dsNoneSubtitleEmpty': 'بدون توکنهای سیستم، پالت خود را انتخاب کنید',
|
||||
'newproj.dsNoneSubtitleSelected': 'از توکنهای سیستم صرف نظر کنید. عامل پالت خود را انتخاب میکند.',
|
||||
'newproj.dsCategoryFallback': 'سیستم طراحی',
|
||||
'newproj.dsSearch': 'جستجوی سیستمهای طراحی…',
|
||||
'newproj.dsModeAria': 'حالت انتخاب',
|
||||
'newproj.dsModeSingle': 'تکی',
|
||||
'newproj.dsModeMulti': 'چندگانه',
|
||||
'newproj.dsNoneTitle': 'هیچ — آزاد',
|
||||
'newproj.dsNoneSub': 'از توکنهای سیستم صرف نظر کنید. عامل پالت خود را انتخاب میکند.',
|
||||
'newproj.dsEmpty': 'هیچ سیستم طراحی با «{query}» مطابقت ندارد.',
|
||||
'newproj.dsFootSingular': 'فقط الهامبخش است.',
|
||||
'newproj.dsFootPlural': 'فقط الهامبخش هستند.',
|
||||
'newproj.dsFootClear': 'پاک کردن',
|
||||
'newproj.dsBadgeDefault': 'پیشفرض',
|
||||
'newproj.dsPrimaryFallback': 'اصلی',
|
||||
|
||||
'designs.subRecent': 'اخیر',
|
||||
'designs.subYours': 'طرحهای شما',
|
||||
'designs.filterAria': 'فیلتر پروژهها',
|
||||
'designs.searchPlaceholder': 'جستجو…',
|
||||
'designs.emptyNoProjects': 'هنوز هیچ پروژهای وجود ندارد. یکی را از سمت چپ ایجاد کنید.',
|
||||
'designs.emptyNoMatch': 'هیچ پروژهای با جستجوی شما مطابقت ندارد.',
|
||||
'designs.deleteTitle': 'حذف پروژه',
|
||||
'designs.deleteConfirm': 'آیا «{name}» حذف شود؟',
|
||||
'designs.cardFreeform': 'آزاد',
|
||||
|
||||
'examples.typeLabel': 'نوع',
|
||||
'examples.scenarioLabel': 'سناریو',
|
||||
'examples.modeAll': 'همه',
|
||||
'examples.modePrototypeDesktop': 'نمونه اولیه · دسکتاپ',
|
||||
'examples.modePrototypeMobile': 'نمونه اولیه · موبایل',
|
||||
'examples.modeDeck': 'اسلایدها',
|
||||
'examples.modeDocument': 'اسناد و قالبها',
|
||||
'examples.scenarioGeneral': 'عمومی',
|
||||
'examples.scenarioEngineering': 'مهندسی',
|
||||
'examples.scenarioProduct': 'محصول',
|
||||
'examples.scenarioDesign': 'طراحی',
|
||||
'examples.scenarioMarketing': 'بازاریابی',
|
||||
'examples.scenarioSales': 'فروش',
|
||||
'examples.scenarioFinance': 'مالی',
|
||||
'examples.scenarioHr': 'منابع انسانی',
|
||||
'examples.scenarioOperations': 'عملیات',
|
||||
'examples.scenarioSupport': 'پشتیبانی',
|
||||
'examples.scenarioLegal': 'حقوقی',
|
||||
'examples.scenarioEducation': 'آموزش',
|
||||
'examples.scenarioPersonal': 'شخصی',
|
||||
'examples.emptyNoSkills': 'هیچ مهارتی موجود نیست. آیا daemon در حال اجرا است؟',
|
||||
'examples.emptyNoMatch': 'هیچ نمونهای با این فیلترها مطابقت ندارد.',
|
||||
'examples.openPreview': '⤢ باز کردن پیشنمایش',
|
||||
'examples.loadingPreview': 'در حال بارگذاری پیشنمایش…',
|
||||
'examples.hoverPreview': 'برای پیشنمایش هاور کنید',
|
||||
'examples.usePrompt': 'استفاده از این پرامپت',
|
||||
'examples.previewModalTitle': 'باز کردن پیشنمایش کامل (modal)',
|
||||
'examples.shareTitle': 'اشتراکگذاری این نمونه',
|
||||
'examples.shareLoadFirst': 'ابتدا برای بارگذاری پیشنمایش هاور کنید',
|
||||
'examples.shareMenu': 'اشتراکگذاری ▾',
|
||||
'examples.exportPdfAllSlides': 'صادرکردن به PDF (همه اسلایدها)',
|
||||
'examples.exportPptxLocked': 'صادرکردن به PPTX… (ابتدا قالب را باز کنید)',
|
||||
'examples.tagSlideDeck': 'ارائه اسلاید',
|
||||
'examples.tagTemplate': 'قالب',
|
||||
'examples.tagDesignSystem': 'سیستم طراحی',
|
||||
'examples.tagMobilePrototype': 'نمونه اولیه موبایل',
|
||||
'examples.tagDesktopPrototype': 'نمونه اولیه دسکتاپ',
|
||||
'examples.previewLabel': 'پیشنمایش',
|
||||
|
||||
'ds.searchPlaceholder': 'جستجوی سیستمهای طراحی…',
|
||||
'ds.emptyNoMatch': 'هیچ سیستم طراحی با جستجوی شما مطابقت ندارد.',
|
||||
'ds.badgeDefault': 'پیشفرض',
|
||||
'ds.preview': 'پیشنمایش',
|
||||
'ds.previewTitle': 'پیشنمایش سیستم طراحی',
|
||||
'ds.categoryAll': 'همه',
|
||||
'ds.categoryUncategorized': 'دستهبندی نشده',
|
||||
'ds.showcase': 'ویترین',
|
||||
'ds.tokens': 'توکنها',
|
||||
|
||||
'avatar.title': 'حساب و تنظیمات',
|
||||
'avatar.localCli': 'CLI محلی',
|
||||
'avatar.anthropicApi': 'Anthropic API',
|
||||
'avatar.useLocal': 'استفاده از CLI محلی',
|
||||
'avatar.useApi': 'استفاده از Anthropic API',
|
||||
'avatar.codeAgent': 'عامل کد',
|
||||
'avatar.rescan': 'اسکن مجدد PATH',
|
||||
'avatar.settings': 'تنظیمات',
|
||||
'avatar.backToProjects': 'بازگشت به پروژهها',
|
||||
'avatar.metaActive': 'فعال',
|
||||
'avatar.metaOffline': 'آفلاین',
|
||||
'avatar.metaSelected': 'انتخاب شده',
|
||||
'avatar.noAgentSelected': 'هیچ عاملی انتخاب نشده',
|
||||
'avatar.modelSection': 'مدل',
|
||||
'avatar.modelLabel': 'مدل',
|
||||
'avatar.reasoningLabel': 'استدلال',
|
||||
'avatar.customSuffix': '(سفارشی)',
|
||||
|
||||
'project.backToProjects': 'بازگشت به پروژهها',
|
||||
'project.metaFreeform': 'آزاد',
|
||||
'chat.tabChat': 'چت',
|
||||
'chat.tabComments': 'نظرات',
|
||||
'chat.commentsSoon': 'نظرات — به زودی',
|
||||
'chat.conversationsTitle': 'مکالمات',
|
||||
'chat.conversationsAria': 'تاریخچه مکالمات',
|
||||
'chat.newConversation': 'مکالمه جدید',
|
||||
'chat.newConversationsTitle': 'مکالمه جدید',
|
||||
'chat.conversationsHeading': 'مکالمات',
|
||||
'chat.new': 'جدید',
|
||||
'chat.emptyConversations': 'هنوز هیچ مکالمهای وجود ندارد.',
|
||||
'chat.deleteConversation': 'حذف مکالمه',
|
||||
'chat.deleteConversationConfirm':
|
||||
'آیا «{title}» حذف شود؟ این کار پیامهای آن را حذف میکند.',
|
||||
'chat.untitledConversation': 'مکالمه بدون عنوان',
|
||||
'chat.startTitle': 'یک مکالمه شروع کنید',
|
||||
'chat.startHint':
|
||||
'تصاویر را برای مرجع بصری رها کنید یا بچسبانید، یا @ را تایپ کنید تا یک فایل از این پروژه را ضمیمه کنید. یا یکی از این شروعکنندهها را امتحان کنید:',
|
||||
'chat.fillInputTitle': 'برای پر کردن ورودی کلیک کنید',
|
||||
'chat.jumpToLatest': 'رفتن به آخرین',
|
||||
'chat.scrollToLatest': 'اسکرول به آخرین',
|
||||
'chat.you': 'شما',
|
||||
'chat.openFile': 'باز کردن {name}',
|
||||
'chat.composerPlaceholder':
|
||||
'طرح مورد نظر خود را توصیف کنید — تصاویر را بچسبانید یا رها کنید، یا @ برای مرجع فایل…',
|
||||
'chat.composerHint':
|
||||
'⌘/Ctrl + Enter برای ارسال · چسباندن تصاویر · @ برای مرجع فایلها',
|
||||
'chat.cliSettingsTitle': 'تنظیمات CLI و مدل',
|
||||
'chat.cliSettingsAria': 'باز کردن تنظیمات CLI و مدل',
|
||||
'chat.attachTitle': 'ضمیمه کردن فایلها (یا چسباندن / رها کردن)',
|
||||
'chat.attachAria': 'ضمیمه کردن فایلها',
|
||||
'chat.importTitle': 'وارد کردن منابع (به زودی)',
|
||||
'chat.importLabel': 'وارد کردن',
|
||||
'chat.importComingSoon': 'به زودی',
|
||||
'chat.importSoon': 'به زودی',
|
||||
'chat.importFig': 'آپلود فایل .fig',
|
||||
'chat.importGitHub': 'اتصال به GitHub',
|
||||
'chat.importWeb': 'گرفتن عنصر وب',
|
||||
'chat.importFolder': 'لینک کردن پوشه کد',
|
||||
'chat.importSkills': 'مهارتها و سیستمهای طراحی',
|
||||
'chat.importProject': 'مرجع یک پروژه دیگر',
|
||||
'chat.send': 'ارسال',
|
||||
'chat.stop': 'توقف',
|
||||
'chat.removeAria': 'حذف {name}',
|
||||
'chat.example1Title': 'ارائه سردبیری',
|
||||
'chat.example1Tag': 'مجله',
|
||||
'chat.example1Prompt':
|
||||
'یک ارائه سردبیری ۱۰ اسلایدی برای یک استودیو طراحی که در حال جمعآوری یک دور سرمایهگذاری اولیه است — چیدمان شبکه سوئیسی، عناوین سریف بزرگ با حروف تزئینی پررنگ، شمارههای بخش با فونت monospace، فضای منفی سخاوتمندانه، و اسلایدهای تمام خون عکس که با اسلایدهای متنمحور در هم تنیده شدهاند. جلد، چشمانداز، بازار، محصول، کشش، تیم، درخواست، تماس.',
|
||||
'chat.example2Title': 'داشبورد تحلیل SaaS',
|
||||
'chat.example2Tag': 'داده',
|
||||
'chat.example2Prompt':
|
||||
'یک داشبورد تحلیل متراکم برای یک SaaS ابزار توسعهدهنده — نوار KPI با دلتاهای هفته به هفته، دو نمودار خط انباشته (MRR و فضاهای کاری فعال)، یک نقشه حرارتی جهانی از استفاده، یک شبکه ماندگاری کوهورت، یک جدول رهبری برترین مشتریان، و یک فید رویداد بلادرنگ. تم تاریک، اعداد جدولی monospace، تأکیدات sparkline.',
|
||||
'chat.example3Title': 'گزارش سالانه اسکرول بلند',
|
||||
'chat.example3Tag': 'سردبیری',
|
||||
'chat.example3Prompt':
|
||||
'یک گزارش سالانه تعاملی برای یک سازمان غیرانتفاعی آب و هوایی — چیدمان سردبیری اسکرول بلند که بلوکهای نقل قول بزرگ، تصویرسازیهای داده، عکاسی، دیوار اهداکنندگان و یک فراخوان به عمل نهایی را ترکیب میکند.',
|
||||
|
||||
'preview.shareMenu': 'اشتراکگذاری ▾',
|
||||
'preview.openInNewTab': 'باز کردن در تب جدید',
|
||||
'preview.exit': '⤓ خروج',
|
||||
'preview.fullscreen': '⤢ تمام صفحه',
|
||||
'preview.closeTitle': 'بستن (Esc)',
|
||||
'preview.loading': 'در حال بارگذاری {label}…',
|
||||
|
||||
'misc.savedTemplate': 'قالب ذخیره شده',
|
||||
'misc.primary': 'اصلی',
|
||||
'misc.designSystem': 'سیستم طراحی',
|
||||
|
||||
'workspace.designFiles': 'فایلهای طراحی',
|
||||
'workspace.closeTab': 'بستن تب',
|
||||
'workspace.deleteFileConfirm': 'آیا «{name}» از پوشه پروژه حذف شود؟',
|
||||
'workspace.openFromDesignFiles': 'باز کردن یک فایل از',
|
||||
'workspace.designFilesLink': 'فایلهای طراحی',
|
||||
'workspace.loadingSketch': 'در حال بارگذاری طرح…',
|
||||
'designFiles.title': 'فایلهای طراحی',
|
||||
'designFiles.upload': 'آپلود فایلها',
|
||||
'designFiles.pasteText': 'چسباندن به عنوان فایل متنی',
|
||||
'designFiles.newSketch': 'طرح جدید',
|
||||
'designFiles.empty':
|
||||
'هنوز هیچ چیزی اینجا نیست. فایلها را رها کنید، یا یک طرح ایجاد کنید / متن بچسبانید.',
|
||||
'designFiles.refresh': 'بازنشانی',
|
||||
'designFiles.delete': 'حذف',
|
||||
'designFiles.searchPlaceholder': 'جستجوی فایلها…',
|
||||
'designFiles.up': 'بالا',
|
||||
'designFiles.back': 'بازگشت',
|
||||
'designFiles.crumbs': 'پروژه',
|
||||
'designFiles.rowMenu': 'منوی ردیف',
|
||||
'designFiles.openInTab': 'باز کردن در تب',
|
||||
'designFiles.download': 'دانلود',
|
||||
'designFiles.dropTitle': '⤓ فایلها را اینجا رها کنید',
|
||||
'designFiles.dropDesc':
|
||||
'تصاویر، اسناد، مراجع، لینکهای Figma، یا پوشهها — Claude از آنها به عنوان زمینه استفاده خواهد کرد.',
|
||||
'designFiles.upload.title': 'آپلود فایلها',
|
||||
'designFiles.paste.title': 'چسباندن متن به عنوان فایل',
|
||||
'designFiles.upload.label': 'آپلود',
|
||||
'designFiles.paste.label': 'چسباندن',
|
||||
'designFiles.previewOpen': 'باز کردن',
|
||||
'designFiles.previewClose': 'بستن پیشنمایش',
|
||||
'designFiles.modified': 'ویرایش شده {time} · {size}',
|
||||
'designFiles.weeksAgo': '{n} هفته پیش',
|
||||
'designFiles.sectionPages': 'صفحات',
|
||||
'designFiles.sectionScripts': 'اسکریپتها',
|
||||
'designFiles.sectionImages': 'تصاویر',
|
||||
'designFiles.sectionSketches': 'طرحها',
|
||||
'designFiles.sectionOther': 'سایر',
|
||||
'designFiles.kindHtml': 'صفحه HTML',
|
||||
'designFiles.kindImage': 'تصویر',
|
||||
'designFiles.kindSketch': 'طرح',
|
||||
'designFiles.kindText': 'متن',
|
||||
'designFiles.kindCode': 'اسکریپت',
|
||||
'designFiles.kindPdf': 'PDF',
|
||||
'designFiles.kindDocument': 'سند',
|
||||
'designFiles.kindPresentation': 'ارائه',
|
||||
'designFiles.kindSpreadsheet': 'صفحه گسترده',
|
||||
'designFiles.kindBinary': 'باینری',
|
||||
'pasteDialog.title': 'چسباندن متن',
|
||||
'pasteDialog.hint': 'در پوشه پروژه ذخیره میشود. هر نامی انتخاب کنید.',
|
||||
'pasteDialog.fileNameLabel': 'نام فایل',
|
||||
'pasteDialog.namePlaceholder': 'notes.txt',
|
||||
'pasteDialog.contentLabel': 'محتوا',
|
||||
'pasteDialog.contentPlaceholder': 'هر چیزی را بچسبانید…',
|
||||
'pasteDialog.save': 'ذخیره',
|
||||
'pasteDialog.cancel': 'لغو',
|
||||
'sketch.save': 'ذخیره طرح',
|
||||
'sketch.cancel': 'لغو',
|
||||
'sketch.saving': 'در حال ذخیره…',
|
||||
'sketch.tooltipDirty': 'تغییرات ذخیره نشده',
|
||||
'sketch.tooltipClean': 'ذخیره شد',
|
||||
'fileViewer.empty': 'یک فایل را برای مشاهده انتخاب کنید.',
|
||||
'fileViewer.loading': 'در حال بارگذاری…',
|
||||
'fileViewer.exportPptx': 'صادرکردن به PPTX',
|
||||
'fileViewer.openInNewTab': 'باز کردن در تب جدید',
|
||||
'fileViewer.copyPath': 'کپی مسیر',
|
||||
'fileViewer.copied': 'کپی شد!',
|
||||
'fileViewer.share': 'اشتراکگذاری',
|
||||
'fileViewer.binaryMeta': 'باینری · {size}',
|
||||
'fileViewer.binaryNote':
|
||||
'فایل باینری ({size} بایت). برای بررسی دانلود یا از دیسک باز کنید.',
|
||||
'fileViewer.pdfMeta': 'PDF · {size}',
|
||||
'fileViewer.documentMeta': 'سند',
|
||||
'fileViewer.presentationMeta': 'ارائه',
|
||||
'fileViewer.spreadsheetMeta': 'صفحه گسترده',
|
||||
'fileViewer.previewUnavailable': 'پیشنمایش در دسترس نیست. برای بررسی فایل را دانلود یا باز کنید.',
|
||||
'fileViewer.download': 'دانلود',
|
||||
'fileViewer.open': 'باز کردن',
|
||||
'fileViewer.imageMeta': 'تصویر · {size}',
|
||||
'fileViewer.sketchMeta': 'طرح · {size}',
|
||||
'fileViewer.reload': 'بارگذاری مجدد',
|
||||
'fileViewer.reloadDisk': 'بارگذاری مجدد از دیسک',
|
||||
'fileViewer.copy': 'کپی',
|
||||
'fileViewer.copyTitle': 'کپی محتوای فایل',
|
||||
'fileViewer.saveDisabled': 'ذخیره (نمایشگر فقط خواندنی)',
|
||||
'fileViewer.save': 'ذخیره',
|
||||
'fileViewer.preview': 'پیشنمایش',
|
||||
'fileViewer.source': 'منبع',
|
||||
'fileViewer.tweaks': 'تنظیمات جزئی',
|
||||
'fileViewer.comment': 'نظر',
|
||||
'fileViewer.edit': 'ویرایش',
|
||||
'fileViewer.draw': 'رسم',
|
||||
'fileViewer.zoomOut': 'کوچکنمایی',
|
||||
'fileViewer.zoomIn': 'بزرگنمایی',
|
||||
'fileViewer.resetZoom': 'بازنشانی زوم',
|
||||
'fileViewer.reloadAria': 'بارگذاری مجدد',
|
||||
'fileViewer.previousSlide': 'اسلاید قبلی',
|
||||
'fileViewer.nextSlide': 'اسلاید بعدی',
|
||||
'fileViewer.slideNavAria': 'پیمایش اسلاید',
|
||||
'fileViewer.present': 'ارائه',
|
||||
'fileViewer.presentInTab': 'در این تب',
|
||||
'fileViewer.presentFullscreen': 'تمام صفحه',
|
||||
'fileViewer.presentNewTab': 'تب جدید',
|
||||
'fileViewer.exitPresentation': 'خروج از ارائه',
|
||||
'fileViewer.shareLabel': 'اشتراکگذاری',
|
||||
'fileViewer.exportPdf': 'صادرکردن به PDF',
|
||||
'fileViewer.exportPdfAllSlides': 'صادرکردن به PDF (همه اسلایدها)',
|
||||
'fileViewer.exportPptxBusy': 'منتظر پایان نوبت فعلی باشید.',
|
||||
'fileViewer.exportPptxHint':
|
||||
'یک درخواست به عامل برای تبدیل این طرح به PPTX ارسال کنید.',
|
||||
'fileViewer.exportPptxNa': 'صادرکردن PPTX اینجا در دسترس نیست.',
|
||||
'fileViewer.exportZip': 'دانلود به صورت .zip',
|
||||
'fileViewer.exportHtml': 'صادرکردن به HTML مستقل',
|
||||
'fileViewer.saveAsTemplate': 'ذخیره به عنوان قالب…',
|
||||
'fileViewer.savingTemplate': 'در حال ذخیره قالب…',
|
||||
'fileViewer.savedTemplate': 'به عنوان «{name}» ذخیره شد',
|
||||
'fileViewer.savedTemplateFail': 'ذخیره قالب ناموفق بود — دوباره امتحان کنید.',
|
||||
'fileViewer.templateNamePrompt': 'نام قالب',
|
||||
'fileViewer.templateNameDefault': 'قالب بدون عنوان',
|
||||
'fileViewer.templateDescPrompt':
|
||||
'توضیح کوتاه (اختیاری — چه چیزی این قالب را مفید میکند؟)',
|
||||
|
||||
'questionForm.submit': 'ارسال',
|
||||
'questionForm.skip': 'رد کردن',
|
||||
'questionForm.locked': 'پاسخ داده شده',
|
||||
|
||||
'conv.switch': 'تغییر مکالمه',
|
||||
'conv.label': 'مکالمه',
|
||||
'conv.heading': 'مکالمات',
|
||||
'conv.new': '+ جدید',
|
||||
'conv.empty': 'هنوز هیچ مکالمهای وجود ندارد.',
|
||||
'conv.untitled': 'مکالمه بدون عنوان',
|
||||
'conv.renameTooltip': 'برای تغییر نام دوبار کلیک کنید',
|
||||
'conv.delete': 'حذف مکالمه',
|
||||
'conv.deleteConfirm': 'آیا «{title}» حذف شود؟ این کار پیامهای آن را حذف میکند.',
|
||||
|
||||
'agentPicker.label': 'عامل',
|
||||
'agentPicker.modeChoose': 'انتخاب حالت اجرا',
|
||||
'agentPicker.localCli': 'CLI محلی',
|
||||
'agentPicker.daemonOff': 'daemon خاموش',
|
||||
'agentPicker.byok': 'Anthropic API · BYOK',
|
||||
'agentPicker.selectAgent': 'انتخاب یک CLI عامل کد شناسایی شده',
|
||||
'agentPicker.noAgents': 'هیچ عاملی در PATH وجود ندارد',
|
||||
'agentPicker.notInstalled': 'نصب نشده',
|
||||
'agentPicker.rescan': 'اسکن مجدد PATH محلی برای عاملها',
|
||||
|
||||
'tool.openInTab': 'باز کردن {name} در یک تب',
|
||||
'tool.open': 'باز کردن',
|
||||
'tool.todos': 'وظایف',
|
||||
'tool.write': 'نوشتن',
|
||||
'tool.edit': 'ویرایش',
|
||||
'tool.read': 'خواندن',
|
||||
'tool.bash': 'Bash',
|
||||
'tool.glob': 'Glob',
|
||||
'tool.grep': 'Grep',
|
||||
'tool.fetch': 'دریافت',
|
||||
'tool.search': 'جستجو',
|
||||
'tool.lines': '{n} خط',
|
||||
'tool.changeSingular': 'تغییر',
|
||||
'tool.changePlural': 'تغییرات',
|
||||
'tool.in': 'در {path}',
|
||||
'tool.hide': 'پنهان',
|
||||
'tool.output': 'خروجی',
|
||||
'tool.running': 'در حال اجرا…',
|
||||
'tool.error': 'خطا',
|
||||
'tool.done': 'انجام شد',
|
||||
|
||||
'assistant.role': 'دستیار',
|
||||
'assistant.workingLabel': 'در حال کار',
|
||||
'assistant.doneLabel': 'انجام شد',
|
||||
'assistant.unfinishedLabel': 'با کار ناتمام متوقف شد',
|
||||
'assistant.unfinishedSummary': '{n} وظیفه باقی مانده',
|
||||
'assistant.unfinishedMore': '+{n} بیشتر',
|
||||
'assistant.continueRemaining': 'ادامه وظایف باقی مانده',
|
||||
'assistant.outTokens': '{n} خروجی',
|
||||
'assistant.producedFiles': 'فایلهای این نوبت',
|
||||
'assistant.openFile': 'باز کردن',
|
||||
'assistant.downloadFile': 'دانلود',
|
||||
'assistant.thinking': 'در حال فکر کردن',
|
||||
'assistant.systemReminder': 'یادآور سیستم',
|
||||
'assistant.waitingFirstOutput': 'در انتظار اولین خروجی',
|
||||
'assistant.statusBootingAgent': 'راهاندازی عامل',
|
||||
'assistant.statusStarting': 'در حال شروع',
|
||||
'assistant.statusRequesting': 'در حال ارسال درخواست',
|
||||
'assistant.statusThinking': 'در حال فکر کردن',
|
||||
'assistant.statusStreaming': 'در حال استریم',
|
||||
'assistant.slowHint':
|
||||
'بیشتر از حد معمول طول میکشد. فرم معمولاً در ۵ تا ۱۰ ثانیه نمایش داده میشود — میتوانید متوقف کنید و عبارت را تغییر دهید.',
|
||||
'assistant.verbEditing': 'در حال ویرایش',
|
||||
'assistant.verbWriting': 'در حال نوشتن',
|
||||
'assistant.verbReading': 'در حال خواندن',
|
||||
'assistant.verbSearching': 'در حال جستجو',
|
||||
'assistant.verbRunning': 'در حال اجرا',
|
||||
'assistant.verbTodos': 'وظایف',
|
||||
'assistant.verbFetching': 'در حال دریافت',
|
||||
'assistant.verbCalling': 'در حال فراخوانی',
|
||||
|
||||
'qf.answered': 'پاسخ داده شده',
|
||||
'qf.choose': 'انتخاب کنید…',
|
||||
'qf.required': 'الزامی',
|
||||
'qf.lockedSubmitted':
|
||||
'پاسخها ارسال شدند — عامل از اینها برای بقیه جلسه استفاده میکند.',
|
||||
'qf.lockedPrev': 'این فرم از یک نوبت قبلی است.',
|
||||
'qf.hint':
|
||||
'آنچه را که مناسب است انتخاب کنید. فیلدهای اختیاری که برایتان مهم نیست را رد کنید — عامل از پیشفرضهای معقول استفاده خواهد کرد.',
|
||||
'qf.submitDefault': 'ارسال پاسخها',
|
||||
'qf.submitDisabledTitle': 'ابتدا فیلدهای الزامی را پر کنید',
|
||||
'qf.submitTitle': 'ارسال پاسخها',
|
||||
'qf.cardSelected': 'انتخاب شده',
|
||||
'qf.cardRefs': 'مراجع:',
|
||||
'qf.cardSampleText': 'روباه قهوهای سریع · ۰۱۲۳',
|
||||
|
||||
'sketch.toolSelect': 'انتخاب (غیرفعال)',
|
||||
'sketch.toolPen': 'قلم',
|
||||
'sketch.toolText': 'متن',
|
||||
'sketch.toolRect': 'مستطیل',
|
||||
'sketch.toolArrow': 'فلش',
|
||||
'sketch.toolEraser': 'پاککن',
|
||||
'sketch.color': 'رنگ',
|
||||
'sketch.strokeSize': 'اندازه خط',
|
||||
'sketch.undo': 'واگرد',
|
||||
'sketch.clear': 'پاک کردن',
|
||||
'sketch.close': 'بستن',
|
||||
'sketch.textPrompt': 'متن:',
|
||||
};
|
||||
|
|
@ -1,8 +1,8 @@
|
|||
// Supported UI locales. Adding a new locale requires creating a new
|
||||
// dictionary in `./locales/` and registering it in `./index.tsx`.
|
||||
export type Locale = 'en' | 'zh-CN' | 'zh-TW' | 'pt-BR' | 'ru';
|
||||
export type Locale = 'en' | 'zh-CN' | 'zh-TW' | 'pt-BR' | 'ru' | 'fa';
|
||||
|
||||
export const LOCALES: Locale[] = ['en', 'zh-CN', 'zh-TW', 'pt-BR', 'ru'];
|
||||
export const LOCALES: Locale[] = ['en', 'zh-CN', 'zh-TW', 'pt-BR', 'ru', 'fa'];
|
||||
|
||||
export const LOCALE_LABEL: Record<Locale, string> = {
|
||||
'en': 'English',
|
||||
|
|
@ -10,6 +10,7 @@ export const LOCALE_LABEL: Record<Locale, string> = {
|
|||
'zh-TW': '繁體中文',
|
||||
'pt-BR': 'Português (Brasil)',
|
||||
'ru': 'Русский',
|
||||
'fa': 'فارسی',
|
||||
};
|
||||
|
||||
// Translation dictionary shape — flat keys, dot-namespaced. We keep it
|
||||
|
|
|
|||
Loading…
Reference in a new issue