open-design/apps/web/src/i18n/locales/fa.ts
Nagendhra Madishetti 655d561f38
fix(web): show explicit error/retry state when example preview HTML fails to load (#863)
* fix(web): show explicit error/retry state when example preview HTML fails to load

Reporter (#860) saw the example preview modal stuck with the toolbar
buttons greyed out and only restarting the app got back to a usable
state. Lefarcen confirmed the diagnosis: when /api/skills/:id/example
fails, fetchSkillExample returns null, the modal stays at preview.loading
forever, and the share menu's disabled={!activeHtml} guard sits in the
disabled position with no recovery path.

Three changes:

1. fetchSkillExample now returns a discriminated { html } | { error }
   instead of collapsing every failure into null, so callers can tell a
   real fetch failure from a normal load.

2. PreviewView gains an optional error field. When set, PreviewModal
   renders a stacked title/body/Retry affordance instead of the
   indefinite "Loading…" placeholder. Retry re-fires onView so the
   parent can re-run its fetch.

3. ExamplesTab tracks per-skill errors alongside per-skill html, clears
   the in-flight value before each fetch, and wires onView from the
   modal into loadPreview so the Retry button actually retries.

i18n: three new keys (preview.errorTitle, preview.errorBody,
preview.retry), translated across all 17 locales. The locales-aligned
test stays green.

CSS: .ds-modal-error stacks the new content vertically inside the
existing .ds-modal-empty positioning, no other modals affected.

* fix(web): stabilize preview onView and guard parallel preview fetches

Codex caught a real bug in the round-1 fix: the inline
onView={() => loadPreview(...)} prop was recreated on every parent
render, and PreviewModal's mount effect re-fires onView whenever its
identity changes. A persistent fetch failure would update state,
recreate the prop, re-fire the effect, re-run loadPreview, and burn
through the error UI in a flash instead of waiting for a Retry click.

Pin a stable onPreviewView via a useRef-backed callback so the modal
sees a single identity for the lifetime of the panel; loadPreview is
reached through the ref, so its closure refresh on state updates no
longer leaks into the modal's effect dependencies.

While in this surface, also add lefarcen's race guard: a synchronous
inFlightRef Set so two parallel loadPreview calls (e.g. card hover
firing while the modal opens) cannot both pass the cache check before
either setState lands. The first caller adds the id pre-await; the
second sees it and exits early. try/finally clears the entry on both
success and failure paths.

Adds tests/components/preview-modal-error-state.test.tsx covering:
- error UI renders when view.error is set,
- Retry click calls onView with the active view id,
- re-rendering with the same onView identity does not re-fire the
  modal's mount effect (pins the no-auto-retry contract).

* fix(web): close Retry over the active skill id, not the modal-internal view id

mrcfps caught a real regression in round 2: PreviewModal calls
onView(activeId) where activeId is the modal-local view id ('preview'
in this component). The previous round forwarded that argument
straight into loadPreview, so the mount effect and Retry button hit
/api/skills/preview/example instead of /api/skills/{skill-id}/example.
The new error state could not actually recover.

Mirror the active skill id into a ref alongside loadPreviewRef and
have onPreviewView ignore the modal-forwarded argument, fetching the
selected skill via the ref instead. The callback identity stays
stable, so the no-auto-retry contract from round 2 still holds.

Adds tests/components/examples-tab-retry.test.tsx that mounts the
real ExamplesTab, mocks fetchSkillExample to reject, opens the
preview, clicks Retry, and asserts the second call hits the same
skill id (and explicitly never gets called with 'preview').

---------

Co-authored-by: Nagendhra <nagendhra405@gmail.com>
2026-05-08 11:16:14 +08:00

1042 lines
67 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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 محلی و BYOK انتخاب کنید. کلید API فقط در همین مرورگر ذخیره می‌شود.',
'settings.modeAria': 'حالت اجرا',
'settings.protocolAria': 'پروتکل API',
'settings.modeDaemon': 'CLI محلی',
'settings.modeDaemonHelp': 'اجرا از طریق CLI عامل کد روی دستگاه شما',
'settings.modeDaemonOffline': 'Daemon در حال اجرا نیست',
'settings.modeDaemonOfflineMeta': 'daemon آفلاین',
'settings.modeDaemonInstalledMeta': '{count} نصب شده',
'settings.modeApi': 'ارائه‌دهنده API',
'settings.modeApiMeta': 'BYOK',
'settings.codeAgent': 'عامل کد',
'settings.codeAgentHint':
'با اسکن PATH شما شناسایی شده. CLI مورد نظر برای جریان تولیدات را انتخاب کنید.',
'settings.rescan': '↻ اسکن مجدد',
'settings.rescanTitle': 'اسکن مجدد PATH',
'settings.rescanRunning': 'در حال اسکن...',
'settings.rescanSuccess': 'اسکن کامل شد. {count} مورد در دسترس است.',
'settings.rescanFailed': 'اسکن ناموفق بود. daemon را بررسی کنید و دوباره تلاش کنید.',
'settings.test': 'آزمایش',
'settings.testTitle': 'یک پیام کوچک آزمایشی برای راستی‌آزمایی اتصال ارسال کنید',
'settings.testRunning': 'در حال آزمایش اتصال…',
'settings.testCancel': 'انصراف',
'settings.testSuccessApi': 'متصل شد. در {ms} میلی‌ثانیه پاسخ داد — \'{sample}\'',
'settings.testSuccessCli': '{agentName} در {ms} میلی‌ثانیه پاسخ داد — \'{sample}\'',
'settings.testAuthFailed': 'احراز هویت ناموفق بود. کلید API را بررسی کنید.',
'settings.testForbidden': 'دسترسی مجاز نیست. حساب، منطقه یا سازمان را بررسی کنید.',
'settings.testNotFoundModel': 'مدل \'{model}\' در این نقطه پایانی یافت نشد.',
'settings.testInvalidModelId': 'شناسه مدل \'{model}\' نامعتبر است. شناسه سفارشی باید با حرف یا عدد شروع شود و فاصله نداشته باشد.',
'settings.testInvalidBaseUrl': 'Base URL نامعتبر یا غیرقابل دسترسی است.',
'settings.testRateLimited': 'ارائه‌دهنده برای آزمایش محدودیت اعمال کرد. پیکربندی معتبر به نظر می‌رسد.',
'settings.testUpstream': 'ارائه‌دهنده وضعیت {status} را برگرداند. لحظه‌ای دیگر دوباره تلاش کنید.',
'settings.testTimeout': 'آزمایش پس از {ms} میلی‌ثانیه به پایان زمان رسید.',
'settings.testAgentMissing': '{agentName} نصب نشده یا در PATH نیست.',
'settings.testAgentSpawn': '{agentName} اجرا نشد: {detail}.',
'settings.testUnknown': 'آزمایش ناموفق بود: {detail}',
'settings.noAgentsDetected':
'هنوز هیچ عاملی شناسایی نشده. یکی از Claude Code، Codex، Gemini CLI، OpenCode، Cursor Agent، Qwen یا GitHub Copilot CLI را نصب کنید، سپس روی اسکن مجدد کلیک کنید.',
'settings.apiSection': 'Anthropic API',
'settings.quickFillProvider': 'پر کردن سریع ارائه‌دهنده',
'settings.customProvider': 'ارائه‌دهنده سفارشی',
'settings.apiKey': 'کلید API',
'settings.showKey': 'نمایش کلید',
'settings.hideKey': 'پنهان کردن کلید',
'settings.show': 'نمایش',
'settings.hide': 'پنهان',
'settings.model': 'مدل',
'settings.suggestedModelsHint':
'این‌ها مدل‌های پیشنهادی برای این پروتکل هستند. ارائه‌دهنده شما ممکن است مدل‌های دیگری را پشتیبانی کند.',
'settings.baseUrl': 'آدرس پایه',
'settings.baseUrlInvalid': 'یک URL عمومی معتبر با http:// یا https:// وارد کنید. localhost مجاز است؛ IPهای شبکه خصوصی مسدود می‌شوند.',
'settings.azureDeploymentModel': 'نام استقرار',
'settings.azureDeploymentModelHint':
'در Azure OpenAI، این فیلد به عنوان نام استقرار در /openai/deployments/<model> استفاده می‌شود. نام استقراری را که در Azure ساخته‌اید وارد کنید.',
'settings.apiVersion': 'نسخه API',
'settings.maxTokens': 'حداکثر توکن (اختیاری)',
'settings.maxTokensHint':
'سقف طول پاسخ. هر مدل مقدار پیش‌فرض تنظیم‌شدهٔ خود را دارد (در placeholder نمایش داده می‌شود)؛ برای استفاده از آن خالی بگذارید، یا برای جایگزینی، عددی وارد کنید.',
'settings.apiHint': 'درخواست‌ها از طریق پراکسی daemon محلی به Base URL تنظیم‌شده ارسال می‌شوند. کلید فقط در همین مرورگر ذخیره می‌شود و همراه درخواست‌های ارائه‌دهنده فرستاده می‌شود.',
'settings.skipForNow': 'فعلاً رد کنید',
'settings.getStarted': 'شروع کنید',
'settings.envConfigure': 'پیکربندی حالت اجرا',
'settings.localCli': 'CLI محلی',
'settings.anthropicApi': 'Anthropic API',
'settings.noAgentSelected': 'هیچ عاملی انتخاب نشده',
'settings.language': 'زبان',
'settings.languageHint': 'زبان رابط را تغییر دهید. در این مرورگر ذخیره می‌شود.',
'settings.appearance': 'ظاهر',
'settings.appearanceHint': 'روشن، تاریک یا پیروی از تنظیمات سیستم.',
'settings.themeSystem': 'سیستم',
'settings.themeLight': 'روشن',
'settings.themeDark': 'تاریک',
'settings.modelPicker': 'مدل',
'settings.reasoningPicker': 'سطح استدلال',
'settings.modelPickerHint':
'هنگامی که CLI یک دستور `models` را ارائه می‌دهد از آن دریافت می‌شود. «پیش‌فرض» انتخاب را به پیکربندی خود CLI واگذار می‌کند؛ «سفارشی…» به شما امکان می‌دهد هر شناسه مدلی را که CLI می‌پذیرد تایپ کنید.',
'settings.cliEnvTitle': 'CLI config locations',
'settings.cliEnvHint':
'Set non-secret config directories for packaged app runs and agent detection.',
'settings.cliEnvClaudeConfigDir': 'Claude Code config dir',
'settings.cliEnvCodexHome': 'Codex home',
'settings.cliEnvCodexBin': 'Codex executable path',
'settings.modelCustom': 'سفارشی (در زیر تایپ کنید)…',
'settings.modelCustomLabel': 'شناسه مدل سفارشی',
'settings.modelCustomPlaceholder': 'مثلاً anthropic/claude-sonnet-4-6',
'settings.mediaProviders': 'ارائه‌دهندگان رسانه',
'settings.mediaProvidersHint':
'کلیدهای API برای تولید تصویر، ویدئو و صدا. به صورت محلی ذخیره و با daemon محلی همگام می‌شود.',
'settings.mediaProviderApiKey': 'کلید API',
'settings.mediaProviderBaseUrl': 'آدرس پایه',
'settings.mediaProviderConfigured': 'پیکربندی شده',
'settings.mediaProviderUnset': 'تنظیم نشده',
'settings.mediaProviderClear': 'پاک کردن',
'settings.mediaProviderPlaceholder': 'کلید API را وارد کنید',
'settings.mediaProviderBaseUrlPlaceholder': 'بازنویسی آدرس پایه پیش‌فرض',
'settings.about': 'درباره',
'settings.aboutHint': 'جزئیات نسخه و اجرا',
'settings.appVersion': 'نسخه',
'settings.appChannel': 'کانال',
'settings.appRuntime': 'محیط اجرا',
'settings.appPlatform': 'سکو',
'settings.appArchitecture': 'معماری',
'settings.runtimePackaged': 'برنامه بسته‌بندی‌شده',
'settings.runtimeDevelopment': 'توسعه',
'settings.versionUnavailable': 'تا وقتی daemon آفلاین است جزئیات نسخه در دسترس نیست.',
'entry.tabDesigns': 'طرح‌ها',
'entry.tabExamples': 'نمونه‌ها',
'entry.tabDesignSystems': 'سیستم‌های طراحی',
'entry.tabConnectors': 'اتصال‌دهنده‌ها',
'entry.tabImageTemplates': 'قالب‌های تصویر',
'entry.tabVideoTemplates': 'قالب‌های ویدئو',
'entry.openSettingsTitle': 'تنظیمات',
'entry.openSettingsAria': 'باز کردن تنظیمات',
'entry.resizeAria': 'تغییر اندازه نوار کناری',
'entry.loadingWorkspace': 'در حال بارگذاری فضای کاری…',
'promptTemplates.searchPlaceholder': 'جستجوی قالب‌ها…',
'promptTemplates.countLabel': '{n} نتیجه',
'promptTemplates.emptyImage': 'هنوز قالب پرامپت تصویر نصب نشده است.',
'promptTemplates.emptyVideo': 'هنوز قالب پرامپت ویدئو نصب نشده است.',
'promptTemplates.emptyNoMatch': 'هیچ قالبی با جستجوی شما مطابقت ندارد.',
'promptTemplates.attributionFooter':
'برگرفته از کتابخانه‌های عمومی پرامپت. هر کارت به نویسنده اصلی لینک دارد.',
'promptTemplates.openPreviewTitle': 'باز کردن پرامپت و پیش‌نمایش',
'promptTemplates.sourcePrefix': 'منبع:',
'promptTemplates.fetchError': 'بارگذاری متن این قالب ممکن نبود.',
'promptTemplates.promptLabel': 'متن پرامپت',
'promptTemplates.copyPrompt': 'کپی پرامپت',
'promptTemplates.copyDone': 'کپی شد!',
'promptTemplates.modelHint': 'مدل پیشنهادی: {model}',
'promptTemplates.openSource': 'دیدن منبع اصلی',
'promptTemplates.openFullscreen': 'باز کردن پیش‌نمایش تمام‌صفحه',
'promptTemplates.closeFullscreen': 'بستن پیش‌نمایش تمام‌صفحه',
'promptTemplates.allSources': 'همهٔ منابع',
'promptTemplates.sourceFilterAria': 'فیلتر بر اساس منبع',
'promptTemplates.retry': 'تلاش دوباره',
'connectors.title': 'اتصال‌دهنده‌ها',
'connectors.subtitle': 'منابع داده محلی و آینده که می‌توانند به مصنوعات زنده نیرو بدهند.',
'connectors.account': 'حساب',
'connectors.noAccount': 'متصل نیست',
'connectors.tools': 'ابزارها',
'connectors.connect': 'اتصال',
'connectors.disconnect': 'قطع اتصال',
'connectors.configure': 'پیکربندی',
'connectors.unavailable': 'در دسترس نیست',
'connectors.phaseStubTitle': 'APIهای اتصال‌دهنده در فاز ۳ می‌رسند؛ این فقط یک نمای پیش‌نمایش است.',
'connectors.statusAvailable': 'در دسترس',
'connectors.statusConnected': 'متصل',
'connectors.statusError': 'خطا',
'connectors.statusDisabled': 'غیرفعال',
'connectors.gateTitle': 'ابتدا کلید Composio API را پیکربندی کنید',
'connectors.gateBody': 'اتصال‌دهنده‌ها به کلید Composio API نیاز دارند. برای فعال‌سازی ادغام‌های موجود، آن را در تنظیمات اضافه کنید.',
'connectors.gateAction': 'باز کردن تنظیمات',
'connectors.aboutLabel': 'درباره',
'connectors.detailsLabel': 'جزئیات',
'connectors.statusLabel': 'وضعیت',
'connectors.categoryLabel': 'دسته‌بندی',
'connectors.providerLabel': 'ارائه‌دهنده',
'connectors.toolsSection': 'ابزارها',
'connectors.toolsLoading': 'در حال بارگیری ابزارها…',
'connectors.noToolsAvailable': 'هنوز ابزاری در دسترس نیست. پس از اتصال، قابلیت‌های این ادغام آشکار می‌شود.',
'connectors.openDetailsAria': 'باز کردن جزئیات {name}',
'connectors.toolsBadgeNone': 'بدون ابزار',
'connectors.toolsBadgeOne': '{n} ابزار',
'connectors.toolsBadgeMany': '{n} ابزار',
'connectors.searchPlaceholder': 'جستجوی اتصال‌دهنده‌ها…',
'connectors.searchAriaLabel': 'جستجوی اتصال‌دهنده‌ها بر اساس نام، ارائه‌دهنده یا ابزار',
'connectors.searchClear': 'پاک کردن جستجو',
'connectors.emptyNoMatchTitle': 'هیچ اتصال‌دهنده‌ای با «{query}» مطابقت ندارد',
'connectors.emptyNoMatchBody': 'کلمه‌ی کلیدی دیگری را امتحان کنید یا جستجو را پاک کنید تا کل فهرست نمایش داده شود.',
'connectors.emptyNoMatchAction': 'پاک کردن جستجو',
'newproj.tabPrototype': 'نمونه اولیه',
'newproj.tabLiveArtifact': 'مصنوع زنده جدید',
'newproj.tabDeck': 'ارائه اسلاید',
'newproj.tabTemplate': 'از قالب',
'newproj.tabOther': 'سایر',
'newproj.titlePrototype': 'نمونه اولیه جدید',
'newproj.titleLiveArtifact': 'مصنوع زنده جدید',
'newproj.titleDeck': 'ارائه اسلاید جدید',
'newproj.titleTemplate': 'شروع از یک قالب',
'newproj.titleImage': 'تصویر جدید',
'newproj.titleVideo': 'ویدئوی جدید',
'newproj.titleAudio': 'صدای جدید',
'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.createLiveArtifact': 'ایجاد مصنوع زنده',
'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.surfaceImage': 'تصویر',
'newproj.surfaceVideo': 'ویدئو',
'newproj.surfaceAudio': 'صدا',
'newproj.modelLabel': 'مدل',
'newproj.aspectLabel': 'نسبت تصویر',
'newproj.imageStyleLabel': 'یادداشت‌های سبک',
'newproj.imageStylePlaceholder': 'عکس ادیتوریال، نور روز نرم، پالت ملایم',
'newproj.videoLengthLabel': 'طول',
'newproj.videoLengthSeconds': '{n}ث',
'newproj.audioKindLabel': 'نوع صدا',
'newproj.audioKindMusic': 'موسیقی',
'newproj.audioKindSpeech': 'گفتار / TTS',
'newproj.audioKindSfx': 'افکت صوتی',
'newproj.audioDurationLabel': 'مدت',
'newproj.audioDurationSeconds': '{n}ث',
'newproj.voiceLabel': 'صدا',
'newproj.voicePlaceholder': 'شناسه صدای ارائه‌دهنده، اختیاری',
'newproj.connectorsLabel': 'اتصال‌دهنده‌ها',
'newproj.connectorsHint': 'منابع داده‌ای که این مصنوع می‌تواند از آن‌ها استفاده کند.',
'newproj.connectorsEmptyTitle': 'هیچ اتصال‌دهنده‌ای پیکربندی نشده',
'newproj.connectorsEmptyBody':
'یک منبع داده متصل کنید تا مصنوع زنده به‌جای داده‌های جایگزین از داده‌های واقعی استفاده کند.',
'newproj.connectorsEmptyCta': 'پیکربندی اتصال‌دهنده‌ها ←',
'newproj.connectorsLoading': 'در حال بارگذاری اتصال‌دهنده‌ها…',
'newproj.connectorsCountOne': '{n} متصل',
'newproj.connectorsCountMany': '{n} متصل',
'newproj.connectorsManage': 'مدیریت',
'newproj.promptTemplateLabel': 'قالب مرجع',
'newproj.promptTemplateNoneTitle': 'بدون قالب — توصیف اختصاصی',
'newproj.promptTemplateNoneSub': 'گالری را رد کنید و خودتان توضیح دهید',
'newproj.promptTemplateRefSub': 'قالب مرجع',
'newproj.promptTemplateSearch': 'جست‌وجوی قالب‌ها…',
'newproj.promptTemplateEmpty': 'هنوز قالبی برای این نوع نصب نشده است.',
'newproj.promptTemplateBodyLabel': 'پرامپت (قابل ویرایش)',
'newproj.promptTemplateOptimizeHint':
'هر چیزی را می‌توانید ویرایش کنید — تغییرات شما به بریف ایجنت اضافه می‌شود.',
'newproj.promptTemplateBodyEmpty': 'متن خالی است — ایجنت هیچ مرجع قالبی دریافت نمی‌کند.',
'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': 'آزاد',
'designs.badgeLive': 'زنده',
'designs.liveArtifactBadgesAria': 'نشان‌های مصنوعات زنده',
'designs.liveCount': '{n} زنده',
'designs.statusLive': 'مصنوع زنده',
'designs.statusArchived': 'بایگانی‌شده',
'designs.statusError': 'خطا',
'designs.statusRefreshing': 'در حال بازخوانی…',
'designs.statusRefreshFailed': 'بازخوانی ناموفق بود',
'designs.statusRefreshed': 'بازخوانی شد',
'designs.status.notStarted': 'شروع نشده',
'designs.status.queued': 'در صف',
'designs.status.running': 'در حال اجرا',
'designs.status.awaitingInput': 'نیازمند ورودی',
'designs.status.succeeded': 'تکمیل شد',
'designs.status.failed': 'ناموفق',
'designs.status.canceled': 'لغو شد',
'designs.viewToggleAria': 'حالت نمایش',
'designs.viewGrid': 'نمای شبکه‌ای',
'designs.viewKanban': 'نمای برد',
'designs.kanbanEmptyColumn': 'هیچ طرحی نیست',
'designs.deleteAria': 'حذف پروژه {name}',
'examples.typeLabel': 'نوع',
'examples.surfaceLabel': 'سطح',
'examples.surfaceWeb': 'وب',
'examples.surfaceImage': 'تصویر',
'examples.surfaceVideo': 'ویدئو',
'examples.surfaceAudio': 'صدا',
'examples.scenarioLabel': 'سناریو',
'examples.modeAll': 'همه',
'examples.modePrototypeDesktop': 'نمونه اولیه · دسکتاپ',
'examples.modePrototypeMobile': 'نمونه اولیه · موبایل',
'examples.modeDeck': 'اسلایدها',
'examples.modeDocument': 'اسناد و قالب‌ها',
'examples.modeOrbit': 'Orbit',
'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.searchPlaceholder': 'جستجوی نمونه‌ها…',
'examples.searchAria': 'جستجوی نمونه‌ها بر اساس نام',
'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.tagImage': 'تصویر',
'examples.tagVideo': 'ویدئو',
'examples.tagAudio': 'صدا',
'examples.previewLabel': 'پیش‌نمایش',
'ds.surfaceLabel': 'سطح',
'ds.surfaceWeb': 'وب',
'ds.surfaceImage': 'تصویر',
'ds.surfaceVideo': 'ویدئو',
'ds.surfaceAudio': 'صدا',
'ds.searchPlaceholder': 'جستجوی سیستم‌های طراحی…',
'ds.emptyNoMatch': 'هیچ سیستم طراحی با جستجوی شما مطابقت ندارد.',
'ds.badgeDefault': 'پیش‌فرض',
'ds.preview': 'پیش‌نمایش',
'ds.previewTitle': 'پیش‌نمایش سیستم طراحی',
'ds.categoryAll': 'همه',
'ds.categoryUncategorized': 'دسته‌بندی نشده',
'ds.showcase': 'ویترین',
'ds.tokens': 'توکن‌ها',
'ds.specToggle': 'DESIGN.md',
'ds.specLoading': 'بارگذاری DESIGN.md…',
'avatar.title': 'حساب و تنظیمات',
'avatar.localCli': 'CLI محلی',
'avatar.anthropicApi': 'Anthropic API',
'avatar.useLocal': 'استفاده از CLI محلی',
'avatar.useApi': 'استفاده از API · BYOK',
'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': 'آزاد',
'project.resizeChatPanel': 'تغییر اندازه پنل چت',
'chat.tabChat': 'چت',
'chat.tabComments': 'نظرات',
'chat.commentsSoon': 'نظرات — به زودی',
'chat.comments.attached': 'Attached to chat',
'chat.comments.emptyAttached': 'No comments attached.',
'chat.comments.saved': 'Saved comments',
'chat.comments.emptySaved': 'No saved comments.',
'chat.comments.add': 'Add',
'chat.comments.addAll': 'Add all',
'chat.comments.remove': 'Remove',
'chat.comments.placeholder': 'Comment on this element…',
'chat.comments.addSend': 'Add & send',
'chat.comments.updateSend': 'Update & send',
'chat.comments.removeAttachment': 'Remove comment attachment',
'chat.comments.removeAttachmentAria': 'Remove comment attachment for {name}',
'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': 'Reference another project',
'chat.linkedFolderRemoveAria': 'حذف پوشه لینک شده {path}',
'chat.linkedFolderNotFound': 'پوشه وجود ندارد',
'chat.linkedFolderAlready': 'این پوشه قبلاً لینک شده است',
'chat.linkedFolderPickError': 'انتخابگر پوشه باز نشد',
'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}…',
'preview.errorTitle': 'بارگیری این نمونه ممکن نشد.',
'preview.errorBody': 'دریافت HTML نمونه با خطا مواجه شد. مطمئن شوید Open Design در حال اجراست و دوباره تلاش کنید.',
'preview.retry': 'تلاش دوباره',
'preview.showSidebar': 'نمایش {label}',
'preview.hideSidebar': 'پنهان کردن {label}',
'misc.savedTemplate': 'قالب ذخیره شده',
'misc.primary': 'اصلی',
'misc.designSystem': 'سیستم طراحی',
'workspace.designFiles': 'فایل‌های طراحی',
'workspace.focusMode': 'Focus workspace',
'workspace.showChat': 'Show chat',
'workspace.closeTab': 'بستن تب',
'workspace.deleteFileConfirm': 'آیا «{name}» از پوشه پروژه حذف شود؟',
'workspace.deleteSelectedFilesConfirm': 'آیا {n} فایل انتخاب‌شده از پوشه پروژه حذف شوند؟',
'workspace.deleteSelectedFilesPartial': 'حذف {n} فایل ناموفق بود.',
'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.downloadSelected': 'Download {n} as ZIP',
'designFiles.deleteSelected': 'حذف {n}',
'designFiles.clearSelection': 'Clear',
'designFiles.selectAll': 'Select all',
'designFiles.dropTitle': '⤓ فایل‌ها را اینجا رها کنید',
'designFiles.dropDesc':
'تصاویر، اسناد، مراجع یا پوشه‌ها — عامل از آن‌ها به عنوان زمینه استفاده خواهد کرد.',
'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.sectionLiveArtifacts': 'مصنوعات زنده',
'designFiles.sectionOther': 'سایر',
'designFiles.showMore': '+{n} بیشتر',
'designFiles.kindHtml': 'صفحه HTML',
'designFiles.kindImage': 'تصویر',
'designFiles.kindSketch': 'طرح',
'designFiles.kindText': 'متن',
'designFiles.kindCode': 'اسکریپت',
'designFiles.kindPdf': 'PDF',
'designFiles.kindDocument': 'سند',
'designFiles.kindPresentation': 'ارائه',
'designFiles.kindSpreadsheet': 'صفحه گسترده',
'designFiles.kindLiveArtifact': 'مصنوع زنده',
'designFiles.kindBinary': 'باینری',
'quickSwitcher.placeholder': 'باز کردن فایل…',
'quickSwitcher.empty': 'هیچ فایلی در این پروژه نیست',
'quickSwitcher.noMatches': 'بدون نتیجه',
'quickSwitcher.navigate': 'حرکت',
'quickSwitcher.open': 'باز کردن',
'quickSwitcher.close': 'بستن',
'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.markdownStreamingMeta': 'پیش‌نمایش در حال استریم…',
'fileViewer.markdownErrorMeta': 'پیش‌نمایش ممکن است ناقص باشد (خطای تولید).',
'fileViewer.markdownStreamingStatus': 'در حال استریم… Markdown ناقص نمایش داده می‌شود.',
'fileViewer.markdownErrorStatus': 'خطای تولید. آخرین محتوای در دسترس نمایش داده می‌شود.',
'fileViewer.pdfMeta': 'PDF · {size}',
'fileViewer.documentMeta': 'سند',
'fileViewer.presentationMeta': 'ارائه',
'fileViewer.spreadsheetMeta': 'صفحه گسترده',
'fileViewer.previewUnavailable': 'پیش‌نمایش در دسترس نیست. برای بررسی فایل را دانلود یا باز کنید.',
'fileViewer.download': 'دانلود',
'fileViewer.open': 'باز کردن',
'fileViewer.imageMeta': 'تصویر · {size}',
'fileViewer.reactMeta': 'مؤلفه React · {size}',
'fileViewer.sketchMeta': 'طرح · {size}',
'fileViewer.videoMeta': 'ویدئو · {size}',
'fileViewer.audioMeta': 'صدا · {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': 'رسم',
'manualEdit.layers': "Layers",
'manualEdit.editableCount': "{count} editable",
'manualEdit.title': "Manual editor",
'manualEdit.selectLayer': "Select a layer",
'manualEdit.empty': "Click an element in the preview or choose a layer.",
'manualEdit.noClass': "no class",
'manualEdit.tabsAria': "Manual edit tabs",
'manualEdit.tabContent': "Content",
'manualEdit.tabStyle': "Style",
'manualEdit.tabAttributes': "Attributes",
'manualEdit.tabHtml': "Html",
'manualEdit.tabSource': "Source",
'manualEdit.attributesJson': "Attributes JSON",
'manualEdit.selectedHtml': "Selected element HTML",
'manualEdit.fullSource': "Full artifact source",
'manualEdit.applyContent': "Apply Content",
'manualEdit.applyStyle': "Apply Style",
'manualEdit.applyAttributes': "Apply Attributes",
'manualEdit.applyHtml': "Apply HTML",
'manualEdit.applySource': "Apply Source",
'manualEdit.invalidAttributes': "Invalid attributes JSON.",
'manualEdit.changes': "Changes",
'manualEdit.undo': "Undo",
'manualEdit.redo': "Redo",
'manualEdit.noChanges': "No manual edits yet.",
'manualEdit.imageUrl': "Image URL",
'manualEdit.altText': "Alt text",
'manualEdit.label': "Label",
'manualEdit.text': "Text",
'manualEdit.href': "Href",
'manualEdit.textColor': "Text color",
'manualEdit.background': "Background",
'manualEdit.fontSize': "Font size",
'manualEdit.weight': "Weight",
'manualEdit.align': "Align",
'manualEdit.padding': "Padding",
'manualEdit.margin': "Margin",
'manualEdit.radius': "Radius",
'manualEdit.border': "Border",
'manualEdit.width': "Width",
'manualEdit.minHeight': "Min height",
'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.exportMd': 'صادرکردن به صورت Markdown',
'fileViewer.exportJsx': 'صادرکردن به JSX',
'fileViewer.exportReactHtml': 'صادرکردن پیش‌نمایش به HTML',
'fileViewer.saveAsTemplate': 'ذخیره به عنوان قالب…',
'fileViewer.savingTemplate': 'در حال ذخیره قالب…',
'fileViewer.savedTemplate': 'به عنوان «{name}» ذخیره شد',
'fileViewer.savedTemplateFail': 'ذخیره قالب ناموفق بود — دوباره امتحان کنید.',
'fileViewer.templateNamePrompt': 'نام قالب',
'fileViewer.templateNameDefault': 'قالب بدون عنوان',
'fileViewer.templateDescPrompt':
'توضیح کوتاه (اختیاری — چه چیزی این قالب را مفید می‌کند؟)',
'liveArtifact.refresh.button': 'بازخوانی',
'liveArtifact.refresh.buttonTitle': 'این مصنوع زنده را بازخوانی کن',
'liveArtifact.refresh.loadingTitle': 'در حال بارگذاری مصنوع زنده…',
'liveArtifact.refresh.noSourceTitle': 'هنوز هیچ منبع بازخوانی فقط‌خواندنیِ تأییدشده‌ای موجود نیست.',
'liveArtifact.refresh.running': 'در حال بازخوانی…',
'liveArtifact.refresh.runningMessage': 'در حال بازخوانی داده‌ها و پیش‌نمایش. این کار ممکن است کمی طول بکشد.',
'liveArtifact.refresh.runningAction': 'پیش‌نمایش قبلی تا موفق شدن بازخوانی قابل مشاهده می‌ماند.',
'liveArtifact.refresh.successOne': 'بازخوانی کامل شد. داده‌ها به‌روزرسانی شدند.',
'liveArtifact.refresh.successMany': 'بازخوانی کامل شد. داده‌ها به‌روزرسانی شدند.',
'liveArtifact.refresh.successAction': 'پیش‌نمایش با جدیدترین داده‌های ثبت‌شده دوباره بارگذاری شد.',
'liveArtifact.refresh.previousFailure': 'بازخوانی قبلی ناموفق بود: {message}',
'liveArtifact.refresh.failureAction': 'تاریخچه بازخوانی را بررسی کنید، مشکل منبع یا مجوز را رفع کنید، سپس دوباره تلاش کنید.',
'liveArtifact.refresh.networkFailure': 'درخواست بازخوانی ناموفق بود. اتصال خود را بررسی کنید و دوباره تلاش کنید.',
'liveArtifact.refresh.genericFailure': 'بازخوانی ناموفق بود.',
'liveArtifact.refresh.statusNever': 'قابل بازخوانی نیست',
'liveArtifact.refresh.statusReady': 'آماده بازخوانی',
'liveArtifact.refresh.statusSucceeded': 'به‌روز است',
'liveArtifact.refresh.statusFailed': 'بازخوانی ناموفق بود',
'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': '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': 'روباه قهوه‌ای سریع · ۰۱۲۳',
'fileViewer.deployToVercel': 'استقرار روی Vercel',
'fileViewer.redeployToVercel': 'استقرار دوباره',
'fileViewer.deployingToVercel': 'در حال استقرار روی Vercel…',
'fileViewer.deployProviderLabel': 'ارائه‌دهنده استقرار',
'fileViewer.vercelProvider': 'Vercel',
'fileViewer.cloudflarePagesProvider': 'Cloudflare Pages',
'fileViewer.deployToProvider': 'استقرار روی {provider}',
'fileViewer.redeployToProvider': 'استقرار دوباره روی {provider}',
'fileViewer.deployingToProvider': 'در حال استقرار روی {provider}…',
'fileViewer.preparingPublicLink': 'در حال آماده‌سازی لینک عمومی…',
'fileViewer.copyDeployLink': 'کپی لینک',
'fileViewer.deployModalTitle': 'استقرار',
'fileViewer.deployModalSubtitle': 'از حساب ارائه‌دهنده انتخاب‌شده برای استقرار این پیش‌نمایش HTML استفاده کنید.',
'fileViewer.vercelToken': 'توکن Vercel',
'fileViewer.vercelTokenGetLink': 'دریافت توکن Vercel',
'fileViewer.vercelTokenPlaceholder': 'توکن Vercel خود را وارد کنید',
'fileViewer.vercelTokenReuseHint': 'از توکن ذخیره‌شده استفاده می‌شود. برای جایگزینی، توکن جدید وارد کنید.',
'fileViewer.vercelTokenRequired': 'ابتدا یک توکن Vercel وارد و ذخیره کنید.',
'fileViewer.cloudflareApiToken': 'توکن API کلادفلر',
'fileViewer.cloudflareApiTokenGetLink': 'دریافت توکن API کلادفلر',
'fileViewer.cloudflareApiTokenPlaceholder': 'توکن API کلادفلر خود را وارد کنید',
'fileViewer.cloudflareApiTokenReuseHint': 'از توکن API کلادفلر ذخیره‌شده استفاده می‌شود. برای جایگزینی، توکن جدید وارد کنید.',
'fileViewer.cloudflareApiTokenRequired': 'ابتدا یک توکن API کلادفلر وارد و ذخیره کنید.',
'fileViewer.cloudflareApiTokenScopeHint': 'Pages Edit is required for deploys. Zone Read is required to list domains. DNS Edit is only needed when binding a custom domain.',
'fileViewer.vercelTeamId': 'شناسه تیم',
'fileViewer.vercelTeamSlug': 'اسلاگ تیم',
'fileViewer.cloudflareAccountId': 'شناسه حساب',
'fileViewer.cloudflareAccountIdHint': 'ضروری است. شناسه حساب را در داشبورد Cloudflare پیدا کنید.',
'fileViewer.cloudflareAccountIdRequired': 'ابتدا Cloudflare Account ID را وارد و ذخیره کنید.',
'fileViewer.cloudflareZoneLabel': 'Domain',
'fileViewer.cloudflareZonePlaceholder': 'Save Cloudflare settings to load domains',
'fileViewer.cloudflareZoneRequired': 'Select a Cloudflare domain first.',
'fileViewer.cloudflareZonesLoading': 'Loading Cloudflare domains…',
'fileViewer.cloudflareZonesRefresh': 'Refresh domains',
'fileViewer.cloudflareZonesLoadFailed': 'Could not load Cloudflare domains.',
'fileViewer.cloudflareZonesEmpty': 'No active full Cloudflare domains were found for this account.',
'fileViewer.cloudflareDomainPrefixLabel': 'Subdomain prefix',
'fileViewer.cloudflareDomainPrefixPlaceholder': 'demo',
'fileViewer.cloudflareDomainPrefixInvalid': 'Use one DNS label only: lowercase letters, numbers, and hyphens.',
'fileViewer.cloudflareHostnamePreview': 'Custom domain preview: {hostname}',
'fileViewer.cloudflareCustomDomainHint': 'Optional: choose a Cloudflare domain and prefix to bind a custom subdomain. pages.dev will still be available.',
'fileViewer.cloudflarePagesDevLinkLabel': 'pages.dev URL',
'fileViewer.cloudflareCustomDomainLinkLabel': 'Custom domain',
'fileViewer.optional': 'اختیاری',
'fileViewer.vercelPreviewOnly': 'استقرارها فعلاً فقط Preview هستند.',
'fileViewer.cloudflarePagesPreviewHint': 'Cloudflare Pages از Direct Upload استفاده می‌کند.',
'fileViewer.savingConfig': 'در حال ذخیره…',
'fileViewer.deployConfigSaveFailed': 'ذخیره تنظیمات Vercel ممکن نبود.',
'fileViewer.deployFailed': 'استقرار ناموفق بود. تنظیمات Vercel را بررسی و دوباره تلاش کنید.',
'fileViewer.deployProviderConfigSaveFailed': 'ذخیره تنظیمات {provider} ممکن نبود.',
'fileViewer.deployProviderFailed': 'استقرار روی {provider} ناموفق بود. تنظیمات را بررسی و دوباره تلاش کنید.',
'fileViewer.deployResultLabel': 'URL مستقرشده',
'fileViewer.deployLinkReady': 'آماده',
'fileViewer.deployLinkPreparingLabel': 'لینک عمومی در انتظار است',
'fileViewer.deployLinkDelayed': 'سایت مستقر شده است. ارائه‌دهنده هنوز لینک عمومی را آماده می‌کند.',
'fileViewer.deployLinkFailed': 'دامنه سفارشی ناموفق بود',
'fileViewer.deployLinkProtectedLabel': 'محافظت استقرار فعال است',
'fileViewer.deployLinkProtected': 'سایت مستقر شده، اما این لینک پیش‌نمایش نیاز به احراز هویت دارد. Deployment Protection را غیرفعال کنید یا از دامنه سفارشی استفاده کنید.',
'fileViewer.retryLink': 'همین حالا دوباره تلاش کنید',
'sketch.toolSelect': 'انتخاب (غیرفعال)',
'sketch.toolPen': 'قلم',
'sketch.toolText': 'متن',
'sketch.toolRect': 'مستطیل',
'sketch.toolArrow': 'فلش',
'sketch.toolEraser': 'پاک‌کن',
'sketch.color': 'رنگ',
'sketch.strokeSize': 'اندازه خط',
'sketch.undo': 'واگرد',
'sketch.clear': 'پاک کردن',
'sketch.close': 'بستن',
'sketch.textPrompt': 'متن:',
'sketch.textModalTitle': 'افزودن متن',
'pet.title': 'حیوان خانگی',
'pet.tabBuiltIn': 'پیش‌فرض',
'pet.tabBuiltInHint': 'همراهان منتخب همراه Open Design — یکی را انتخاب و فرزندخوانده کن.',
'pet.builtInEmpty': 'حیوانات داخلی در حال حاضر در دسترس نیستند. وقتی دیمن دوباره فعال شد، تب جامعه را تازه کن.',
'pet.tabCustom': 'سفارشی',
'pet.tabCustomHint': 'نام، نشان، رنگ یا اسپرایت دلخواه خودت را تنظیم کن.',
'pet.tabCommunity': 'انجمن',
'pet.tabCommunityHint': 'حیوانات تولید‌شدهٔ Codex — یکی را پذیرش کن یا با هوش مصنوعی بساز.',
'pet.tabsAria': 'منبع حیوان خانگی',
'pet.subtitle': 'یک همراه کوچک را به فرزندخواندگی بپذیرید که روی فضای کاری شما شناور می‌ماند.',
'pet.navTitle': 'حیوان خانگی',
'pet.navHint': 'فرزندخواندگی یا سفارشی‌سازی',
'pet.adopt': 'فرزندخواندگی',
'pet.adoptedBadge': 'فرزندخوانده',
'pet.adoptCallout': 'یک حیوان خانگی بپذیرید',
'pet.changePet': 'تغییر حیوان خانگی',
'pet.wake': 'بیدار کردن',
'pet.tuck': 'پنهان کردن',
'pet.wakeTitle': 'بیدار کردن حیوان خانگی — نمایش لایه شناور.',
'pet.tuckTitle': 'پنهان کردن حیوان خانگی — مخفی کردن لایه شناور.',
'pet.settingsTitle': 'باز کردن تنظیمات حیوان خانگی',
'pet.useCustom': 'استفاده از حیوان خانگی من',
'pet.customTitle': 'خودتان بسازید',
'pet.customHint': 'یک نام، نماد و رنگ تأکید انتخاب کنید — لایه به‌طور زنده به‌روزرسانی می‌شود.',
'pet.customGreetingPlaceholder': 'سلامی از طرف حیوان خانگی شما…',
'pet.fieldName': 'نام',
'pet.fieldGlyph': 'نماد',
'pet.fieldGlyphHint': 'یک ایموجی بهترین کارایی را دارد (مثلاً 🐝، 🦄، 🐢).',
'pet.fieldGreeting': 'پیام خوش‌آمد',
'pet.fieldAccent': 'رنگ تأکید',
'pet.fieldAccentCustom': 'رنگ سفارشی',
'pet.overlayAria': 'همراه حیوان خانگی',
'pet.spriteAria': '{name} — برای جابجایی بکشید، برای گفت‌وگو کلیک کنید',
'pet.spriteTitle': 'سلام از طرف {name}! برای گفت‌وگو کلیک کنید.',
'pet.railAria': 'انتخابگر حیوان خانگی',
'pet.railTitle': 'حیوانات خانگی',
'pet.railHint': 'یک همراه انتخاب کنید تا روی فضای کاری شما شناور شود.',
'pet.railExpand': 'نمایش انتخابگر',
'pet.railCollapse': 'جمع‌کردن انتخابگر',
'pet.railHide': 'مخفی کردن انتخابگر حیوانات',
'pet.railShow': 'نمایش انتخابگر حیوانات',
'pet.railCustomFlavor': 'مال شما — نام، نماد و رنگ.',
'pet.railCustomize': 'سفارشی‌سازی…',
'pet.composerTitle': 'حیوانات خانگی — بیدار کردن، پنهان یا انتخاب',
'pet.composerMenuTitle': 'حیوانات خانگی',
'pet.composerMenuHint': 'نکته: /pet را تایپ کنید تا تغییر دهید',
'pet.composerOpenSettings': 'سفارشی‌سازی در تنظیمات',
'pet.welcomeTeaserTitle': 'یک حیوان خانگی بپذیرید',
'pet.welcomeTeaserBody': 'یک همراه کوچک که بالای فضای کاری شما شناور می‌شود.',
'pet.welcomeTeaserCta': 'یکی انتخاب کنید',
'pet.imageUpload': 'بارگذاری اسپرایت',
'pet.imageReplace': 'جایگزینی اسپرایت',
'pet.imageRemove': 'استفاده از ایموجی',
'pet.imageHintIdle': 'PNG، JPG، WebP، GIF یا SVG. اسپرایت‌شیت؟ یک نوار افقی بارگذاری کنید و تعداد فریم را تنظیم کنید.',
'pet.imageHintActive': 'اسپرایت شما نمایش داده می‌شود. فریم را > ۱ تنظیم کنید تا یک اسپرایت‌شیت افقی متحرک شود.',
'pet.fieldFrames': 'فریم‌ها',
'pet.fieldFramesHint': '۱ = ثابت. > ۱ = اسپرایت‌شیت افقی.',
'pet.fieldFps': 'سرعت (fps)',
'pet.fieldFpsHint': 'سرعت چرخش فریم‌ها.',
'pet.atlasImport': 'وارد کردن اسپرایت Codex',
'pet.atlasImportTitle': 'یک اطلس hatch-pet با ابعاد 8x9 / 192x208 (PNG یا WebP) وارد کنید.',
'pet.atlasPickerTitle': 'یک ردیف انیمیشن انتخاب کنید',
'pet.atlasPickerHint': 'پت‌های Codex با ۹ ردیف انیمیشن می‌آیند. به‌طور پیش‌فرض کل اطلس را نگه می‌داریم تا پت با هاور، جهت کشیدن و بیکاری طولانی ردیف عوض کند. می‌توانی به یک حلقهٔ ثابت هم محدودش کنی.',
'pet.atlasCancel': 'حذف اطلس',
'pet.atlasAdopt': 'قفل روی این ردیف',
'pet.atlasAdoptFull': 'استفاده از کل اطلس (متحرک)',
'pet.atlasAdoptFullTitle': 'همهٔ ردیف‌ها را نگه دار تا پت به هاور، جهت کشیدن و بیکاری طولانی واکنش بدهد.',
'pet.atlasAdoptRowTitle': 'فقط ردیف برجسته‌شده را به نوار حلقه‌ای تک‌ردیفی تبدیل کن.',
'pet.atlasActiveHint': 'اطلس متحرک فعال است — پت بر اساس تعامل تو (هاور، کشیدن، بیکاری) ردیف را عوض می‌کند.',
'pet.atlasRow.idle': 'بی‌حرکت',
'pet.atlasRow.running-right': 'دویدن به راست',
'pet.atlasRow.running-left': 'دویدن به چپ',
'pet.atlasRow.waving': 'تکان دادن دست',
'pet.atlasRow.jumping': 'پرش',
'pet.atlasRow.failed': 'شکست',
'pet.atlasRow.waiting': 'انتظار',
'pet.atlasRow.running': 'دویدن',
'pet.atlasRow.review': 'بررسی',
'pet.hatchTitle': 'یک پت جدید با هوش مصنوعی پرورش بده',
'pet.hatchHint': 'از مهارت hatch-pet داخل چت برای ساخت اسپرایت‌شیت سبک Codex استفاده کنید و سپس اینجا وارد کنید.',
'pet.hatchConcept': 'مفهوم پت (اختیاری)',
'pet.hatchConceptPlaceholder': 'مثلاً: یک شیبا اینوی پیکسلی با ژاکتی نرم',
'pet.hatchCopy': 'کپی پرامپت',
'pet.hatchCopied': 'کپی شد!',
'pet.hatchFoot': 'پس از اینکه مهارت پت شما را ذخیره کرد، اینجا برگردید و «وارد کردن اسپرایت Codex» را بزنید.',
'pet.slashPopoverAria': 'دستورهای اسلش',
'pet.slashPopoverTitle': 'دستورها',
'pet.slashPopoverHint': '↑↓ پیمایش · enter انتخاب · esc بستن',
'pet.slashPet': 'پت را روشن/خاموش کنید، انتخاب کنید یا تنظیمات را باز کنید.',
'pet.slashPetWake': 'پت شناور را بیدار کنید.',
'pet.slashPetTuck': 'پت را فعلاً جمع کنید.',
'pet.slashHatch': 'با مهارت hatch-pet یک پت Codex بسازید.',
'pet.slashHatchArg': '<مفهوم>',
'pet.slashSearch': 'وب را با فرمان OD research جستجو کنید.',
'pet.slashSearchArg': '<پرس‌وجو>',
'pet.codexTitle': 'تازه‌متولدها',
'pet.codexSubtitle': 'پت‌هایی که مهارت hatch-pet بسته‌بندی کرده اینجا ظاهر می‌شوند تا با یک کلیک پذیرفته شوند.',
'pet.codexSubtitleWithDir': 'در حال اسکن {dir} برای بسته‌های hatch-pet.',
'pet.codexEmpty': 'هنوز پتی متولد نشده. در چت /hatch بنویسید تا یکی بسازد.',
'pet.codexLoading': 'در حال جستجوی پت‌های متولدشده…',
'pet.codexRefresh': 'بازخوانی',
'pet.codexAdopt': 'پذیرش',
'pet.codexAdopting': 'در حال پذیرش…',
'pet.communitySync': 'دانلود حیوانات اجتماعی',
'pet.communitySyncing': 'در حال دانلود…',
'pet.communitySyncTitle': 'همگام‌سازی جدیدترین حیوانات از Codex Pet Share + j20 Hatchery در ~/.codex/pets/.',
'pet.communitySyncDone': '{wrote} حیوان جدید همگام شد (مجموع {total}).',
'pet.communitySyncFailed': 'خطا در همگام‌سازی: {error}',
'pet.codexBundled': 'همراه',
'pet.codexBundledTitle': 'همراه Open Design ارائه می‌شود — نیازی به دانلود نیست.',
'settings.notifications': 'اعلان‌ها',
'settings.notificationsHint': 'صدا و اعلان دسکتاپ هنگام تکمیل وظیفه',
'settings.notifyCompletionSound': 'صدای تکمیل',
'settings.notifyCompletionSoundHint': 'پس از اتمام یک نوبت پخش می‌شود. به‌طور پیش‌فرض خاموش است.',
'settings.notifySuccessSound': 'صدای موفقیت',
'settings.notifyFailureSound': 'صدای خطا',
'settings.notifyDesktop': 'اعلان دسکتاپ',
'settings.notifyDesktopHint': 'هنگامی که پنجره فعال نیست ارسال می‌شود.',
'settings.notifyDesktopBlocked': 'مرورگر اعلان‌ها را مسدود کرده است. در تنظیمات سایت آن‌ها را مجاز کنید.',
'settings.notifyDesktopUnsupported': 'اعلان‌های دسکتاپ در این محیط در دسترس نیستند.',
'settings.notifyTest': 'ارسال آزمایشی',
'settings.notifyTestSent': 'اعلان آزمایشی ارسال شد. اگر بنری نمایش داده نشد، تنظیمات اعلان مرورگر و سیستم را بررسی کنید.',
'settings.notifyTestFailed': 'فراخوانی اعلان ناموفق بود. تنظیمات اعلان مرورگر و سیستم را بررسی کنید.',
'settings.notifySoundDing': 'دینگ',
'settings.notifySoundChime': 'زنگ',
'settings.notifySoundTwoToneUp': 'دو نوای بالارونده',
'settings.notifySoundPluck': 'مضراب',
'settings.notifySoundBuzz': 'وزوز',
'settings.notifySoundTwoToneDown': 'دو نوای پایین‌رونده',
'settings.notifySoundThud': 'تالاپ',
'settings.library': 'مهارت‌ها و سیستم‌های طراحی',
'settings.libraryHint': 'مرور، پیش‌نمایش و فعال/غیرفعال‌سازی کتابخانه محتوای شما',
'settings.librarySkills': 'مهارت‌ها',
'settings.libraryDesignSystems': 'سیستم‌های طراحی',
'settings.librarySearch': 'جستجو...',
'settings.libraryAll': 'همه',
'settings.libraryPreview': 'پیش‌نمایش',
'settings.libraryPreviewClose': 'بستن',
'settings.libraryLoading': 'در حال بارگذاری...',
'settings.libraryNoResults': 'هیچ موردی با جستجوی شما مطابقت ندارد.',
'settings.libraryEnabled': 'فعال',
'settings.libraryDisabled': 'غیرفعال',
'settings.libraryToggleLabel': 'تغییر وضعیت',
'notify.successTitle': 'وظیفه تکمیل شد',
'notify.failureTitle': 'وظیفه ناموفق بود',
'notify.successBody': 'یک نوبت به پایان رسید.',
'notify.failureBody': 'وظیفه با خطا پایان یافت.',
};