diff --git a/.github/workflows/i18n.yml b/.github/workflows/i18n.yml new file mode 100644 index 000000000..ecdc3ba16 --- /dev/null +++ b/.github/workflows/i18n.yml @@ -0,0 +1,20 @@ +name: i18n + +# Fail the build if any messages/.json drifts from en.json's keys or +# contains invalid ICU. Keeps the 15 locale catalogs in lockstep. +on: + pull_request: + push: + branches: [main] + +jobs: + check-keys: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: "20" + cache: npm + - run: npm ci + - run: npm run check:i18n diff --git a/messages/ar.json b/messages/ar.json new file mode 100644 index 000000000..8df22bfa9 --- /dev/null +++ b/messages/ar.json @@ -0,0 +1,593 @@ +{ + "Metadata": { + "tagline": "واجهة برمجية واحدة للوصول إلى جميع الوكلاء", + "description": "اكتشف وكلاء الذكاء الاصطناعي واستدعِهم عبر واجهة برمجية موحَّدة — بمثابة OpenRouter للوكلاء. تصفّح دليلًا يضم مئات مشاريع الوكلاء مفتوحة المصدر وآلاف مهارات OpenClaw لوكيل البرمجة لديك." + }, + "LocaleSwitcher": { + "label": "اللغة" + }, + "Header": { + "searchPlaceholder": "ابحث عن الوكلاء...", + "agents": "الوكلاء", + "skills": "المهارات", + "trending": "الرائج", + "publish": "نشر", + "publishAgent": "نشر وكيل", + "account": "الحساب", + "mySkills": "مهاراتي", + "apiUsage": "الواجهة البرمجية والاستخدام", + "adminPanel": "لوحة الإدارة", + "signIn": "تسجيل الدخول", + "signOut": "تسجيل الخروج" + }, + "Footer": { + "tagline": "واجهة برمجية واحدة للوصول إلى جميع الوكلاء — إضافةً إلى آلاف مهارات OpenClaw لوكيل البرمجة لديك.", + "agentRegistry": "سجلّ الوكلاء:", + "platform": "المنصة", + "resources": "الموارد", + "installInAgent": "ثبّته في وكيلك", + "browseAgents": "تصفّح الوكلاء", + "publishAnAgent": "نشر وكيل", + "developerDashboard": "لوحة المطوّرين", + "browseSkills": "تصفّح المهارات", + "awesomeList": "قائمة Awesome", + "clawHub": "ClawHub", + "copyright": "© {year} TakoAPI. صُمِّم لمجتمع OpenClaw." + }, + "Home": { + "heroTitle": "واجهة برمجية واحدة للوصول إلى جميع الوكلاء", + "heroSubtitle": "اكتشف واستدعِ {agents, number} من وكلاء الذكاء الاصطناعي عبر واجهة برمجية موحَّدة — إضافةً إلى {skills, number} مهارة لوكيل البرمجة لديك.", + "browseAgents": "تصفّح الوكلاء", + "publishAnAgent": "نشر وكيل", + "agentRegistry": "سجلّ الوكلاء:", + "browseByScenario": "تصفّح حسب السيناريو", + "allAgents": "جميع الوكلاء", + "featuredAgents": "الوكلاء المميَّزون", + "browseAll": "تصفّح الكل", + "popularProjects": "مشاريع مفتوحة المصدر شائعة", + "selfHostable": "{count, number} قابل للاستضافة الذاتية", + "skillTitle": "مهارة TakoAPI لـ OpenClaw", + "official": "رسمي", + "skillDescription": "ابحث عن مهارات OpenClaw وثبّتها وأدِرها عبر محادثة طبيعية — مدعومة بسوق TakoAPI.", + "viewOnGithub": "عرض على GitHub", + "askAgent": "أو اطلب من وكيلك: «ثبّت مهارة TakoAPI»", + "usingCodingAgent": "أتستخدم Claude Code أو Codex أو OpenCode؟", + "oneCommandInstall": "تثبيت بأمر واحد", + "mustHaveSkills": "مهارات لا غنى عنها", + "viewRankings": "عرض التصنيفات", + "categories": "الفئات", + "viewAll": "عرض الكل", + "moreCategories": "{count, plural, zero {} one {فئة واحدة إضافية+} two {فئتان إضافيتان+} few {+# فئات إضافية} many {+# فئة إضافية} other {+# فئة إضافية}}", + "latestSkills": "أحدث المهارات" + }, + "Scenarios": { + "frontend": "الواجهة الأمامية", + "backend": "الواجهة الخلفية", + "coding": "البرمجة والتطوير", + "agent-frameworks": "أُطر عمل الوكلاء", + "devops": "DevOps والأتمتة", + "data-analysis": "البيانات والتحليلات", + "product-design": "تصميم المنتجات", + "creative": "الإبداع والوسائط", + "presentations": "العروض التقديمية والمستندات", + "investing": "الاستثمار في الأسواق العامة", + "venture-analysis": "رأس المال الاستثماري ونماذج الأعمال", + "marketing": "التسويق والنمو", + "sales": "المبيعات وإدارة علاقات العملاء", + "customer-support": "دعم العملاء", + "research": "البحث والاستكشاف", + "writing": "الكتابة والمحتوى", + "productivity": "الإنتاجية والمساعدة" + }, + "AgentDetail": { + "notFound": "لم يُعثَر على الوكيل", + "backToMarketplace": "← سوق الوكلاء", + "openSourceProject": "مشروع مفتوح المصدر", + "signedCard": "بطاقة موقَّعة", + "verifiedPublisher": "ناشر موثَّق", + "by": "بواسطة {name}", + "publisherOpenSource": "مفتوح المصدر", + "publisherUnknown": "غير معروف", + "scenario": "السيناريو:", + "stars": "{count, number} نجمة", + "selfHost": "استضافة ذاتية", + "streaming": "البث", + "pushNotifications": "الإشعارات الفورية", + "skills": "المهارات", + "skillsCount": "({count, number})", + "noSkillsProject": "مشروع مفتوح المصدر — استكشف الشيفرة واستضِفه ذاتيًا من GitHub.", + "noSkillsHosted": "لم يُعلن هذا الوكيل عن مهارات منظَّمة في بطاقة AgentCard الخاصة به.", + "inputMode": "الإدخال: {mode}", + "outputMode": "الإخراج: {mode}", + "openSourceProjectHeading": "مشروع مفتوح المصدر", + "openSourceProjectNote": "استضِفه ذاتيًا أو استكشف الشيفرة. غير قابل للاستدعاء عبر بوابة TakoAPI.", + "viewOnGithub": "عرض على GitHub", + "integration": "التكامل", + "endpoint": "نقطة النهاية", + "agentCard": "AgentCard", + "homepage": "الصفحة الرئيسية", + "callThroughTakoApi": "استدعِه عبر TakoAPI", + "gatewayPhase2": "بوابة موحَّدة — سيتوفّر الاستدعاء في المرحلة الثانية.", + "breadcrumbHome": "الرئيسية", + "breadcrumbMarketplace": "سوق الوكلاء" + }, + "Agents": { + "metaTitle": "سوق الوكلاء", + "metaDescription": "واجهة برمجية واحدة للوصول إلى جميع الوكلاء. تصفّح واستدعِ وكلاء الذكاء الاصطناعي ومئات مشاريع الوكلاء مفتوحة المصدر عبر واجهة برمجية موحَّدة — موصوفة ببطاقات A2A AgentCard المفتوحة.", + "ogTitle": "سوق الوكلاء — {siteName}", + "ogDescription": "اكتشف واستدعِ وكلاء الذكاء الاصطناعي ومشاريع الوكلاء مفتوحة المصدر عبر واجهة برمجية موحَّدة.", + "heroTitle": "سوق الوكلاء", + "heroTagline": "واجهة برمجية واحدة للوصول إلى جميع الوكلاء.", + "heroSubtitle": "اكتشف واستدعِ وكلاء الذكاء الاصطناعي عبر واجهة برمجية موحَّدة — موصوفة ببطاقات A2A AgentCard المفتوحة.", + "searchPlaceholder": "ابحث عن الوكلاء بالاسم أو الوصف…", + "search": "بحث", + "all": "الكل", + "kindAgents": "الوكلاء", + "kindProjects": "المشاريع", + "scenarioFilter": "السيناريو:", + "protocolFilter": "البروتوكول:", + "pricingFilter": "التسعير:", + "categoryFilter": "الفئة:", + "sortLabel": "الترتيب:", + "sortLatest": "الأحدث", + "sortStars": "النجوم", + "sortPopular": "الأكثر شيوعًا", + "sortCalls": "الأكثر استدعاءً", + "sortRating": "الأعلى تقييمًا", + "pricingFree": "مجاني", + "pricingPerCall": "لكل استدعاء", + "pricingPerTask": "لكل مهمة", + "pricingPerToken": "لكل ألف رمز", + "count": "{count, plural, zero {لا وكلاء} one {وكيل واحد} two {وكيلان} few {# وكلاء} many {# وكيلًا} other {# وكيل}}", + "emptyTitle": "لا يوجد وكلاء يطابقون عوامل التصفية بعد.", + "emptyCta": "انشر أول وكيل ←", + "prev": "← السابق", + "next": "التالي →", + "pageOf": "الصفحة {page} من {total}" + }, + "Components": { + "homeSearchPlaceholder": "ابحث عن المهارات بالاسم أو الوصف أو المؤلف...", + "homeSearchButton": "بحث", + "agentFree": "مجاني", + "agentPerCall": "{price}/استدعاء", + "agentPerTask": "{price}/مهمة", + "agentPerToken": "{price}/ألف رمز", + "agentPriceFallbackCall": "استدعاء", + "agentPriceFallbackTask": "مهمة", + "agentPriceFallbackToken": "رمز", + "agentBadgeProject": "مشروع", + "agentBadgeStreaming": "بث", + "agentOpenSource": "مفتوح المصدر", + "agentSelfHost": "استضافة ذاتية", + "agentSkills": "{count, plural, zero {لا مهارات} one {مهارة واحدة} two {مهارتان} few {# مهارات} many {# مهارة} other {# مهارة}}", + "skillBy": "بواسطة {author}", + "skillLikes": "{count, number}" + }, + "Install": { + "metaTitle": "التثبيت في Claude Code وCodex وOpenCode", + "title": "ثبّت TakoAPI في Claude Code وCodex وOpenCode", + "description": "أمر واحد يثبّت مهارة TakoAPI في وكيل البرمجة لديك — اكتشف واستدعِ وكلاء الذكاء الاصطناعي عبر بوابة موحَّدة، وابحث في كتالوج مهارات OpenClaw. يعمل مع Claude Code وCodex وOpenCode.", + "stepRunInstallerName": "شغّل المثبِّت", + "stepRunInstallerText": "شغّل: curl -fsSL https://takoapi.com/install.sh | sh", + "stepUseAgentName": "استخدم TakoAPI من وكيلك", + "stepUseAgentText": "اطلب من وكيل البرمجة لديك العثور على وكيل ذكاء اصطناعي على TakoAPI أو استدعاءه.", + "heroBadge": "أمر واحد، ثلاثة وكلاء", + "heroTitle": "ثبّت TakoAPI في وكيل البرمجة لديك", + "heroSubtitle": "أضِف مهارة TakoAPI إلى Claude Code أو Codex أو OpenCode — ثم اكتشف واستدعِ أي وكيل ذكاء اصطناعي عبر بوابة موحَّدة، مباشرةً من طرفيّتك.", + "whatTitle": "ما الذي يفعله المثبِّت", + "whatWritesSkill": "يكتب مهارة TakoAPI واحدة ضمن نطاق اسم مخصَّص في دليل مهارات كل وكيل — ولا يعدّل ملفات الإعداد المشتركة لديك أبدًا.", + "whatTeachesAgent": "يعلّم وكيلك استدعاء سجلّ TakoAPI والبوابة عبر HTTP — دون تبعيات إضافية ودون خادم لتشغيله.", + "whatMcpServer": "أتفضّل الأدوات المُستضافة؟ سجّل خادم MCP الخاص بـ TakoAPI بدلًا من ذلك — claude mcp add --transport http takoapi https://takoapi.com/mcp — ليكشف عن search_agents وget_agent وsearch_skills وinvoke_agent كأدوات MCP أصيلة.", + "whatIdempotent": "متماثل النتيجة (آمن لإعادة التشغيل) وقابل للتراجع بالكامل عبر --uninstall.", + "whatApiKey": "للبوابة المحسوبة بالاستخدام، أنشئ مفتاح واجهة برمجية في لوحة التحكم الخاصة بك وصدّره كـ TAKO_KEY.", + "footnote": "أتعمل على Windows أو ضمن Node بالفعل؟ استخدم npx takoapi-install. أتفضّل قراءة النص أولًا؟ إنه نص shell بسيط على takoapi.com/install.sh." + }, + "InstallTabs": { + "universalNote": "يثبّت مهارة TakoAPI في Claude Code وCodex وOpenCode — مع الكشف التلقائي. آمن لإعادة التشغيل، دون صلاحيات الجذر. على Windows أو ضمن Node، استخدم .", + "tablistLabel": "وكلاء البرمجة", + "claudeCodeTagline": "واجهة Anthropic السطرية", + "codexTagline": "واجهة OpenAI السطرية", + "opencodeTagline": "opencode.ai", + "skillHeading": "المهارة — تعلّم وكيلك استدعاء TakoAPI", + "skillUniversalHint": "…أو استخدم الأمر الشامل أعلاه — فهو يغطي {name} أيضًا.", + "writesHeading": "يكتب", + "howToUseHeading": "كيفية الاستخدام", + "claudeCodeUse": "يُحمَّل تلقائيًا — ما عليك سوى أن تطلب من Claude العثور على وكيل على TakoAPI.", + "codexUse": "استدعِه عبر ‎$takoapi، أو اختره من قائمة /skills.", + "opencodeUse": "شغّل ‎/takoapi ، أو سلّمه إلى ‎@takoapi.", + "mcpHeading": "خادم MCP — أدوات مُستضافة، لا شيء لتثبيته", + "claudeCodeMcpHint": "أمر واحد. أضِف ‎--header \"Authorization: Bearer $TAKO_KEY\"‎ لتفعيل invoke_agent.", + "codexMcpHint": "أضِفه إلى ‎~/.codex/config.toml", + "opencodeMcpHint": "ادمجه في ‎~/.config/opencode/opencode.json", + "mcpToolsNote": "يضيف الأدوات: search_agents وget_agent وsearch_skills وinvoke_agent.", + "uninstallHeading": "إلغاء التثبيت", + "uninstallNote": "يزيل ملفات TakoAPI الخاصة فقط — ولا يمسّ إعدادات وكلائك الأخرى أبدًا.", + "copy": "نسخ", + "copied": "تم النسخ" + }, + "SkillDetail": { + "notFoundMetaTitle": "لم يُعثَر على المهارة", + "backToSkills": "العودة إلى المهارات", + "by": "بواسطة {author}", + "downloads": "التنزيلات", + "stars": "النجوم", + "views": "المشاهدات", + "likes": "{count, plural, zero {لا إعجابات} one {إعجاب واحد} two {إعجابان} few {# إعجابات} many {# إعجابًا} other {# إعجاب}}", + "brief": "موجز", + "description": "الوصف", + "whatThisSkillDoes": "ما الذي تفعله هذه المهارة", + "whenToUseIt": "متى تستخدمها", + "exampleWorkflow": "مثال على سير العمل", + "workflowInput": "الإدخال", + "workflowAgent": "الوكيل", + "workflowOutput": "الإخراج", + "requirements": "المتطلبات", + "installation": "التثبيت", + "clawHubCli": "واجهة ClawHub السطرية", + "openClawChat": "محادثة OpenClaw (الصق هذا في محادثتك)", + "links": "الروابط", + "github": "GitHub", + "copyGithubUrl": "نسخ رابط GitHub", + "clawHub": "ClawHub", + "skillNotFound": "لم يُعثَر على المهارة" + }, + "Skills": { + "metaTitle": "تصفّح المهارات", + "metaDescription": "تصفّح آلاف مهارات OpenClaw لوكيل البرمجة لديك عبر عشرات الفئات — مع البحث والتصفية ولوحة تصدُّر للرائج.", + "ogTitle": "تصفّح المهارات — {siteName}", + "ogDescription": "آلاف مهارات OpenClaw لوكيل البرمجة لديك.", + "heading": "تصفّح المهارات", + "searchLabel": "بحث: «{query}»", + "count": "{count, number} مهارة عُثر عليها", + "sortLatest": "الأحدث", + "sortPopular": "الأكثر شيوعًا", + "sortViews": "الأكثر مشاهدة", + "sortStars": "الأكثر نجومًا", + "agentAll": "جميع الوكلاء", + "agentClaudeCode": "Claude Code", + "agentCursor": "Cursor", + "agentWindsurf": "Windsurf", + "agentCodex": "Codex", + "agentAider": "Aider", + "agentCline": "Cline", + "agentCopilot": "Copilot", + "agentGeneric": "عام", + "all": "الكل", + "emptyTitle": "لم يُعثَر على مهارات", + "emptyHint": "حاول تعديل بحثك أو عوامل التصفية", + "pageOf": "الصفحة {page} من {total}" + }, + "Trending": { + "metaTitle": "المهارات الرائجة", + "metaDescription": "أكثر مهارات OpenClaw تنزيلًا وإعجابًا الآن — لوحة تصدُّر حيّة لما تثبّته وكلاء البرمجة.", + "ogTitle": "المهارات الرائجة — {siteName}", + "ogDescription": "لوحة تصدُّر حيّة لأكثر مهارات OpenClaw شيوعًا.", + "title": "المهارات الرائجة", + "subtitle": "اكتشف أكثر مهارات OpenClaw شيوعًا مرتَّبة حسب المجتمع", + "searchPlaceholder": "ابحث في المهارات الرائجة…", + "categories": "الفئات", + "allCategories": "جميع الفئات", + "downloads": "التنزيلات", + "stars": "النجوم", + "likes": "الإعجابات", + "views": "المشاهدات", + "skill": "المهارة", + "count": "{count, plural, zero {لا مهارات} one {مهارة واحدة} two {مهارتان} few {# مهارات} many {# مهارة} other {# مهارة}}", + "countInCategory": "{count, plural, zero {لا مهارات} one {مهارة واحدة} two {مهارتان} few {# مهارات} many {# مهارة} other {# مهارة}} في {category}", + "emptyTitle": "لم يُعثَر على مهارات", + "emptySubtitle": "حاول تعديل بحثك أو عوامل التصفية", + "byAuthor": "بواسطة {author}", + "showing": "عرض {from, number}–{to, number} من {total, number}", + "prev": "السابق", + "next": "التالي" + }, + "Admin": { + "accessDenied": "تم رفض الوصول", + "accessDeniedDescription": "تحتاج إلى صلاحيات المسؤول للوصول إلى هذه الصفحة.", + "goHome": "الذهاب إلى الرئيسية", + "backToSite": "العودة إلى الموقع", + "panelTitle": "لوحة الإدارة", + "navDashboard": "لوحة المعلومات", + "navSkills": "المهارات", + "navAgents": "الوكلاء", + "navCategories": "الفئات", + "navUsers": "المستخدمون", + "navLogs": "السجلّات", + "dashboardTitle": "لوحة المعلومات", + "statTotalSkills": "إجمالي المهارات", + "statTotalUsers": "إجمالي المستخدمين", + "statCategories": "الفئات", + "statTotalLikes": "إجمالي الإعجابات", + "statTotalViews": "إجمالي المشاهدات", + "statTotalDownloads": "إجمالي التنزيلات", + "statPendingReview": "بانتظار المراجعة", + "recentSkills": "أحدث المهارات", + "topSkillsByDownloads": "أبرز المهارات حسب التنزيلات", + "viewAll": "عرض الكل", + "byAuthor": "بواسطة {author}", + "statusApproved": "مُعتمَد", + "statusPending": "قيد الانتظار", + "statusRejected": "مرفوض", + "loading": "جارٍ التحميل…", + "cancel": "إلغاء", + "save": "حفظ", + "saveChanges": "حفظ التغييرات", + "delete": "حذف", + "edit": "تعديل", + "confirm": "تأكيد", + "preview": "معاينة", + "agentsTitle": "الوكلاء", + "agentsSubtitle": "راجِع الوكلاء المُرسَلين وأدِر إشرافهم.", + "filterPending": "قيد الانتظار", + "filterApproved": "مُعتمَد", + "filterRejected": "مرفوض", + "filterAll": "الكل", + "noAgentsInView": "لا يوجد وكلاء في هذا العرض.", + "unknownPublisher": "غير معروف", + "uncategorized": "غير مصنَّف", + "agentMetaSkills": "{count, number} مهارة", + "noScenarios": "لا سيناريوهات", + "reviewNoteLabel": "ملاحظة: {note}", + "editScenarios": "تعديل السيناريوهات", + "actionApprove": "اعتماد", + "actionReject": "رفض", + "feature": "تمييز", + "unfeature": "إلغاء التمييز", + "scenariosEditorHint": "场景 السيناريوهات — 点击切换 / انقر للتبديل والتعيين", + "scenarioOption": "{nameZh} · {name}", + "selectedCount": "{count, number} محدَّد", + "rejectReasonPrompt": "سبب الرفض (اختياري):", + "deleteAgentConfirm": "أتريد حذف هذا الوكيل نهائيًا؟", + "skillsTitle": "إدارة المهارات", + "searchSkillsPlaceholder": "ابحث عن المهارات...", + "allStatuses": "جميع الحالات", + "filterStatusPending": "قيد الانتظار", + "filterStatusApproved": "مُعتمَد", + "filterStatusRejected": "مرفوض", + "allCategories": "جميع الفئات", + "selectedLabel": "{count, number} محدَّد", + "batchApprove": "اعتماد", + "batchReject": "رفض", + "batchFeature": "تمييز", + "batchDelete": "حذف", + "batchDeleteConfirm": "أتريد حذف {count, number} مهارة؟ لا يمكن التراجع عن هذا.", + "colName": "الاسم", + "colAuthor": "المؤلف", + "colCategory": "الفئة", + "colStatus": "الحالة", + "colDownloads": "التنزيلات", + "colLikes": "الإعجابات", + "colViews": "المشاهدات", + "colCreated": "تاريخ الإنشاء", + "colActions": "الإجراءات", + "noSkillsFound": "لم يُعثَر على مهارات.", + "showingRange": "عرض {from, number}–{to, number} من {total, number}", + "editSkillTitle": "تعديل المهارة", + "fieldName": "الاسم", + "fieldAuthor": "المؤلف", + "fieldBrief": "موجز", + "fieldStatus": "الحالة", + "optionPending": "قيد الانتظار", + "optionApproved": "مُعتمَد", + "optionRejected": "مرفوض", + "fieldFeatured": "مميَّز", + "deleteSkillTitle": "حذف المهارة", + "deleteSkillConfirm": "هل أنت متأكد من رغبتك في حذف {name}؟ لا يمكن التراجع عن هذا الإجراء.", + "categoriesTitle": "الفئات", + "addCategory": "إضافة فئة", + "editCategoryTitle": "تعديل الفئة", + "newCategoryTitle": "فئة جديدة", + "fieldIcon": "الأيقونة", + "fieldDescription": "الوصف", + "categoryNamePlaceholder": "مثال: تحليل البيانات", + "categoryIconPlaceholder": "مثال: chart-bar أو رمز تعبيري", + "categoryDescriptionPlaceholder": "وصف قصير", + "nameRequired": "الاسم مطلوب.", + "saveCategoryFailed": "تعذّر حفظ الفئة", + "deleteCategoryFailed": "تعذّر حذف الفئة", + "fetchCategoriesFailed": "تعذّر جلب الفئات", + "deleteFailed": "تعذّر الحذف", + "somethingWentWrong": "حدث خطأ ما", + "update": "تحديث", + "create": "إنشاء", + "colSlug": "المُعرّف اللطيف", + "colSkills": "المهارات", + "colDescription": "الوصف", + "noCategoriesFound": "لم يُعثَر على فئات. أضِف واحدة أعلاه.", + "deleting": "...", + "cannotDeleteHasSkills": "يتعذّر الحذف: تحتوي على مهارات", + "categoriesTotal": "{count, number} {count, plural, zero {فئة} one {فئة} two {فئتان} few {فئات} many {فئة} other {فئة}} إجمالًا", + "usersTitle": "المستخدمون", + "usersTotal": "{count, number} {count, plural, zero {مستخدم} one {مستخدم} two {مستخدمان} few {مستخدمين} many {مستخدمًا} other {مستخدم}} إجمالًا", + "searchUsersPlaceholder": "ابحث بالاسم أو البريد الإلكتروني...", + "colEmail": "البريد الإلكتروني", + "colRole": "الدور", + "colProvider": "المزوّد", + "colJoined": "تاريخ الانضمام", + "loadingUsers": "جارٍ تحميل المستخدمين...", + "noUsersFound": "لم يُعثَر على مستخدمين.", + "noName": "---", + "roleAdmin": "مسؤول", + "roleUser": "مستخدم", + "providerCredentials": "بيانات الاعتماد", + "demote": "خفض الرتبة", + "promote": "ترقية", + "demoteToUser": "خفض إلى مستخدم", + "promoteToAdmin": "ترقية إلى مسؤول", + "logsTitle": "سجلّات الإدارة", + "logsTotal": "{count, number} {count, plural, zero {مدخل} one {مدخل} two {مدخلان} few {مداخل} many {مدخلًا} other {مدخل}} إجمالًا", + "colTimestamp": "الطابع الزمني", + "colAdmin": "المسؤول", + "colAction": "الإجراء", + "colTargetType": "نوع الهدف", + "colTargetId": "مُعرّف الهدف", + "colDetail": "التفاصيل", + "loadingLogs": "جارٍ تحميل السجلّات...", + "noLogsFound": "لم يُعثَر على سجلّات.", + "emptyDetail": "---", + "actionCreate": "إنشاء", + "actionUpdate": "تحديث", + "actionDelete": "حذف", + "actionApproveLog": "اعتماد", + "actionRejectLog": "رفض", + "actionRoleChange": "تغيير الدور", + "targetSkill": "مهارة", + "targetAgent": "وكيل", + "targetCategory": "فئة", + "targetUser": "مستخدم" + }, + "Auth": { + "signInTitle": "تسجيل الدخول إلى TakoAPI", + "signInSubtitle": "ادخل إلى لوحة مهاراتك", + "signUpTitle": "إنشاء حساب", + "signUpSubtitle": "انضمّ إلى مجتمع TakoAPI", + "continueWithGoogle": "المتابعة عبر Google", + "continueWithApple": "المتابعة عبر Apple", + "signUpWithGoogle": "التسجيل عبر Google", + "signUpWithApple": "التسجيل عبر Apple", + "or": "أو", + "name": "الاسم", + "email": "البريد الإلكتروني", + "password": "كلمة المرور", + "passwordHint": "كلمة المرور (8 أحرف على الأقل)", + "signIn": "تسجيل الدخول", + "signingIn": "جارٍ تسجيل الدخول...", + "createAccount": "إنشاء حساب", + "creatingAccount": "جارٍ إنشاء الحساب...", + "invalidCredentials": "البريد الإلكتروني أو كلمة المرور غير صحيحة", + "registrationFailed": "فشل التسجيل", + "somethingWentWrong": "حدث خطأ ما", + "noAccount": "أليس لديك حساب؟", + "signUpLink": "إنشاء حساب", + "haveAccount": "ألديك حساب بالفعل؟", + "signInLink": "تسجيل الدخول" + }, + "Dashboard": { + "title": "لوحة المطوّرين", + "signInPrompt": "سجّل الدخول لإدارة مفاتيح الواجهة البرمجية وعرض الاستخدام.", + "signIn": "تسجيل الدخول", + "description": "أدِر مفاتيح الواجهة البرمجية وراقِب استخدام البوابة. مفتاح واحد، فاتورة واحدة، أي وكيل.", + "apiKeys": "مفاتيح الواجهة البرمجية", + "createKey": "إنشاء مفتاح", + "creating": "جارٍ الإنشاء…", + "copyKeyWarning": "انسخ هذا المفتاح الآن — لن يُعرَض مرة أخرى.", + "copy": "نسخ", + "copied": "تم النسخ", + "noKeys": "لا مفاتيح بعد. أنشئ واحدًا لبدء استدعاء الوكلاء.", + "keyFallbackName": "مفتاح", + "created": "أُنشئ في {date}", + "lastUsed": "آخر استخدام في {date}", + "neverUsed": "لم يُستخدَم قط", + "revoke": "إبطال", + "revokeConfirm": "أتريد إبطال هذا المفتاح؟ ستتوقّف التطبيقات التي تستخدمه عن العمل.", + "quickstart": "بداية سريعة", + "usage": "الاستخدام", + "totalCalls": "إجمالي الاستدعاءات", + "agentsUsed": "الوكلاء المُستخدَمون", + "totalCount": "{count, number}", + "tableAgent": "الوكيل", + "tableProtocol": "البروتوكول", + "tableStatus": "الحالة", + "tableLatency": "زمن الاستجابة", + "tableWhen": "الوقت", + "noCalls": "لا استدعاءات بعد. أنشئ مفتاحًا واستدعِ وكيلًا لرؤية الاستخدام هنا." + }, + "Profile": { + "title": "ملفّي الشخصي", + "signInPrompt": "يُرجى تسجيل الدخول لعرض ملفك الشخصي.", + "signIn": "تسجيل الدخول", + "submissions": "الإرساليات", + "likes": "الإعجابات", + "views": "المشاهدات", + "statValue": "{count, number}", + "mySubmissions": "إرسالياتي", + "submitNew": "إرسال جديد", + "tab_all": "الكل", + "tab_approved": "مُعتمَد", + "tab_pending": "قيد الانتظار", + "tab_rejected": "مرفوض", + "tabCount": "{count, number}", + "emptyTab": "لا إرساليات في هذا التبويب", + "submitFirst": "أرسِل أول مهارة لك", + "statusApproved": "مُعتمَد", + "statusPending": "بانتظار المراجعة", + "statusRejected": "مرفوض", + "reviewerNote": "ملاحظة المراجِع:" + }, + "Submit": { + "title": "إرسال مهارة", + "subtitle": "شارك مهارة OpenClaw الخاصة بك مع المجتمع", + "signInPrompt": "يُرجى تسجيل الدخول لإرسال المهارات.", + "signIn": "تسجيل الدخول", + "skillSource": "مصدر المهارة", + "githubUrl": "رابط GitHub", + "clawSkillsUrl": "رابط ClawSkills.sh", + "githubUrlPlaceholder": "https://github.com/username/repo", + "clawSkillsUrlPlaceholder": "https://clawskills.sh/skills/author-skillname", + "autoFill": "تعبئة تلقائية", + "fetching": "جارٍ الجلب...", + "filled": "تمت التعبئة!", + "skillName": "اسم المهارة", + "skillNamePlaceholder": "مثال: my-awesome-skill", + "category": "الفئة", + "selectCategory": "اختر فئة", + "categoryOption": "{name} ({count})", + "brief": "موجز", + "briefHelper": "- ملخّص من سطر واحد", + "briefPlaceholder": "وصف قصير لما تفعله مهارتك", + "skillDetails": "تفاصيل المهارة", + "skillDetailsHelper": "- مُعبَّأة تلقائيًا من ملف README", + "whatItDoes": "ما الذي تفعله هذه المهارة", + "whatItDoesPlaceholder": "شرح مفصَّل لما تفعله هذه المهارة وميزاتها وقدراتها...", + "exampleWorkflow": "مثال على سير العمل", + "exampleWorkflowHelper": "- الإدخال / خطوات الوكيل / الإخراج", + "exampleWorkflowPlaceholder": "INPUT\nUser asks: Do something useful\n\nAGENT\n1\nRun `my-skill action` to perform the task\n2\nVerify the result\n\nOUTPUT\nTask completed successfully", + "requirements": "المتطلبات", + "requirementsPlaceholder": "- Node.js 18+\n- API key from service X\n- etc.", + "submitSkill": "إرسال المهارة", + "submitting": "جارٍ الإرسال...", + "enterUrlFirst": "يُرجى إدخال رابط أولًا", + "autoFillFailed": "فشلت التعبئة التلقائية", + "submitFailed": "فشل الإرسال", + "somethingWentWrong": "حدث خطأ ما" + }, + "SubmitAgent": { + "title": "نشر وكيل", + "signInPrompt": "يُرجى تسجيل الدخول لنشر وكيل.", + "signIn": "تسجيل الدخول", + "intro": "أدرِج وكيلًا قابلًا للاستدعاء في السوق. أرسِل رابط بطاقة A2A AgentCard الخاصة به وسنحلّل البقية، أو املأها يدويًا.", + "tabUrl": "رابط AgentCard", + "tabManual": "يدوي", + "cardUrlLabel": "رابط AgentCard", + "cardUrlPlaceholder": "https://your-agent.com/.well-known/agent-card.json", + "cardUrlHelp": "نجلب بطاقة A2A AgentCard ونتحقّق منها (الاسم، نقطة النهاية، القدرات، المهارات).", + "nameLabel": "اسم الوكيل", + "namePlaceholder": "مثال: Weather Oracle", + "descriptionLabel": "الوصف", + "descriptionPlaceholder": "ما الذي يفعله هذا الوكيل؟", + "endpointLabel": "رابط نقطة النهاية", + "endpointPlaceholder": "https://your-agent.com/a2a", + "protocolsLabel": "البروتوكولات", + "protocolOpenAiCompat": "متوافق مع OpenAI", + "categoryLabel": "الفئة", + "uncategorized": "غير مصنَّف", + "pricingLabel": "التسعير", + "pricingFree": "مجاني", + "pricingPerCall": "لكل استدعاء", + "pricingPerTask": "لكل مهمة", + "pricingPerToken": "لكل ألف رمز", + "unitPriceLabel": "سعر الوحدة (دولار أمريكي)", + "unitPricePlaceholder": "0.002", + "homepageLabel": "الصفحة الرئيسية", + "optional": "اختياري", + "homepagePlaceholder": "https://your-agent.com", + "submit": "نشر الوكيل", + "submitting": "جارٍ الإرسال…", + "submitFailed": "فشل الإرسال", + "somethingWentWrong": "حدث خطأ ما", + "successTitle": "تم الإرسال 🎉", + "pendingReview": "{name} الآن بانتظار المراجعة.", + "successDetail": "سنتحقّق من بطاقة AgentCard وننشرها في السوق بمجرد اعتمادها.", + "backToMarketplace": "← العودة إلى السوق" + } +} diff --git a/messages/de.json b/messages/de.json new file mode 100644 index 000000000..5dc370f23 --- /dev/null +++ b/messages/de.json @@ -0,0 +1,593 @@ +{ + "Metadata": { + "tagline": "Eine API für den Zugriff auf alle Agenten", + "description": "Entdecke und rufe KI-Agenten über eine einheitliche API auf — ein OpenRouter für Agenten. Durchstöbere ein Verzeichnis mit Hunderten Open-Source-Agentenprojekten und Tausenden OpenClaw-Skills für deinen Coding-Agenten." + }, + "LocaleSwitcher": { + "label": "Sprache" + }, + "Header": { + "searchPlaceholder": "Agenten suchen...", + "agents": "Agenten", + "skills": "Skills", + "trending": "Im Trend", + "publish": "Veröffentlichen", + "publishAgent": "Agent veröffentlichen", + "account": "Konto", + "mySkills": "Meine Skills", + "apiUsage": "API & Nutzung", + "adminPanel": "Admin-Panel", + "signIn": "Anmelden", + "signOut": "Abmelden" + }, + "Footer": { + "tagline": "Eine API für den Zugriff auf alle Agenten — plus Tausende OpenClaw-Skills für deinen Coding-Agenten.", + "agentRegistry": "Agenten-Registry:", + "platform": "Plattform", + "resources": "Ressourcen", + "installInAgent": "In deinem Agenten installieren", + "browseAgents": "Agenten durchsuchen", + "publishAnAgent": "Agent veröffentlichen", + "developerDashboard": "Entwickler-Dashboard", + "browseSkills": "Skills durchsuchen", + "awesomeList": "Awesome-Liste", + "clawHub": "ClawHub", + "copyright": "© {year} TakoAPI. Entwickelt für die OpenClaw-Community." + }, + "Home": { + "heroTitle": "Eine API für den Zugriff auf alle Agenten", + "heroSubtitle": "Entdecke und rufe {agents, number} KI-Agenten über eine einheitliche API auf — plus {skills, number} Skills für deinen Coding-Agenten.", + "browseAgents": "Agenten durchsuchen", + "publishAnAgent": "Agent veröffentlichen", + "agentRegistry": "Agenten-Registry:", + "browseByScenario": "Nach Szenario durchsuchen", + "allAgents": "Alle Agenten", + "featuredAgents": "Empfohlene Agenten", + "browseAll": "Alle durchsuchen", + "popularProjects": "Beliebte Open-Source-Projekte", + "selfHostable": "{count, number} selbst hostbar", + "skillTitle": "TakoAPI-Skill für OpenClaw", + "official": "Offiziell", + "skillDescription": "Suche, installiere und verwalte OpenClaw-Skills im natürlichen Dialog — angetrieben vom TakoAPI-Marktplatz.", + "viewOnGithub": "Auf GitHub ansehen", + "askAgent": "oder frage deinen Agenten: „Installiere den TakoAPI-Skill“", + "usingCodingAgent": "Nutzt du Claude Code, Codex oder OpenCode?", + "oneCommandInstall": "Installation mit einem Befehl", + "mustHaveSkills": "Unverzichtbare Skills", + "viewRankings": "Rankings ansehen", + "categories": "Kategorien", + "viewAll": "Alle ansehen", + "moreCategories": "{count, plural, one {+# weitere Kategorie} other {+# weitere Kategorien}}", + "latestSkills": "Neueste Skills" + }, + "Scenarios": { + "frontend": "Frontend", + "backend": "Backend", + "coding": "Coding & Entwicklung", + "agent-frameworks": "Agenten-Frameworks", + "devops": "DevOps & Automatisierung", + "data-analysis": "Daten & Analytics", + "product-design": "Produktdesign", + "creative": "Kreativ & Medien", + "presentations": "Präsentationen & Dokumente", + "investing": "Börseninvestments", + "venture-analysis": "VC & Geschäftsmodelle", + "marketing": "Marketing & Wachstum", + "sales": "Vertrieb & CRM", + "customer-support": "Kundensupport", + "research": "Recherche & Suche", + "writing": "Schreiben & Content", + "productivity": "Produktivität & Assistenz" + }, + "AgentDetail": { + "notFound": "Agent nicht gefunden", + "backToMarketplace": "← Agenten-Marktplatz", + "openSourceProject": "Open-Source-Projekt", + "signedCard": "Signierte Card", + "verifiedPublisher": "Verifizierter Anbieter", + "by": "von {name}", + "publisherOpenSource": "Open Source", + "publisherUnknown": "unbekannt", + "scenario": "Szenario:", + "stars": "{count, number} Sterne", + "selfHost": "Selbst hosten", + "streaming": "Streaming", + "pushNotifications": "Push-Benachrichtigungen", + "skills": "Skills", + "skillsCount": "({count, number})", + "noSkillsProject": "Ein Open-Source-Projekt — erkunde den Code und hoste es selbst von GitHub.", + "noSkillsHosted": "Dieser Agent hat in seiner AgentCard keine strukturierten Skills angegeben.", + "inputMode": "Eingabe: {mode}", + "outputMode": "Ausgabe: {mode}", + "openSourceProjectHeading": "Open-Source-Projekt", + "openSourceProjectNote": "Selbst hosten oder den Code erkunden. Nicht über das TakoAPI-Gateway aufrufbar.", + "viewOnGithub": "Auf GitHub ansehen", + "integration": "Integration", + "endpoint": "Endpunkt", + "agentCard": "AgentCard", + "homepage": "Homepage", + "callThroughTakoApi": "Über TakoAPI aufrufen", + "gatewayPhase2": "Einheitliches Gateway — Aufrufe folgen in Phase 2.", + "breadcrumbHome": "Start", + "breadcrumbMarketplace": "Agenten-Marktplatz" + }, + "Agents": { + "metaTitle": "Agenten-Marktplatz", + "metaDescription": "Eine API für den Zugriff auf alle Agenten. Durchsuche und rufe KI-Agenten sowie Hunderte Open-Source-Agentenprojekte über eine einheitliche API auf — beschrieben durch offene A2A-AgentCards.", + "ogTitle": "Agenten-Marktplatz — {siteName}", + "ogDescription": "Entdecke und rufe KI-Agenten und Open-Source-Agentenprojekte über eine einheitliche API auf.", + "heroTitle": "Agenten-Marktplatz", + "heroTagline": "Eine API für den Zugriff auf alle Agenten.", + "heroSubtitle": "Entdecke und rufe KI-Agenten über eine einheitliche API auf — beschrieben durch offene A2A-AgentCards.", + "searchPlaceholder": "Agenten nach Name oder Beschreibung suchen…", + "search": "Suchen", + "all": "Alle", + "kindAgents": "Agenten", + "kindProjects": "Projekte", + "scenarioFilter": "Szenario:", + "protocolFilter": "Protokoll:", + "pricingFilter": "Preise:", + "categoryFilter": "Kategorie:", + "sortLabel": "Sortieren:", + "sortLatest": "Neueste", + "sortStars": "Sterne", + "sortPopular": "Beliebt", + "sortCalls": "Meistaufgerufen", + "sortRating": "Bestbewertet", + "pricingFree": "Kostenlos", + "pricingPerCall": "pro Aufruf", + "pricingPerTask": "pro Aufgabe", + "pricingPerToken": "Pro 1k Tokens", + "count": "{count, plural, =0 {Keine Agenten} one {# Agent} other {# Agenten}}", + "emptyTitle": "Noch keine Agenten passen zu deinen Filtern.", + "emptyCta": "Veröffentliche den ersten →", + "prev": "← Zurück", + "next": "Weiter →", + "pageOf": "Seite {page} von {total}" + }, + "Components": { + "homeSearchPlaceholder": "Skills nach Name, Beschreibung oder Autor suchen...", + "homeSearchButton": "Suchen", + "agentFree": "Kostenlos", + "agentPerCall": "{price}/Aufruf", + "agentPerTask": "{price}/Aufgabe", + "agentPerToken": "{price}/1k Tok", + "agentPriceFallbackCall": "Aufruf", + "agentPriceFallbackTask": "Aufgabe", + "agentPriceFallbackToken": "Token", + "agentBadgeProject": "Projekt", + "agentBadgeStreaming": "Streaming", + "agentOpenSource": "Open Source", + "agentSelfHost": "selbst hosten", + "agentSkills": "{count, plural, one {# Skill} other {# Skills}}", + "skillBy": "von {author}", + "skillLikes": "{count, number}" + }, + "Install": { + "metaTitle": "In Claude Code, Codex & OpenCode installieren", + "title": "TakoAPI in Claude Code, Codex & OpenCode installieren", + "description": "Ein Befehl installiert den TakoAPI-Skill in deinen Coding-Agenten — entdecke und rufe KI-Agenten über ein einheitliches Gateway auf und durchsuche den OpenClaw-Skills-Katalog. Funktioniert mit Claude Code, Codex und OpenCode.", + "stepRunInstallerName": "Installer ausführen", + "stepRunInstallerText": "Ausführen: curl -fsSL https://takoapi.com/install.sh | sh", + "stepUseAgentName": "TakoAPI aus deinem Agenten nutzen", + "stepUseAgentText": "Bitte deinen Coding-Agenten, einen KI-Agenten auf TakoAPI zu finden oder aufzurufen.", + "heroBadge": "Ein Befehl, drei Agenten", + "heroTitle": "Installiere TakoAPI in deinem Coding-Agenten", + "heroSubtitle": "Füge den TakoAPI-Skill zu Claude Code, Codex oder OpenCode hinzu — und entdecke und rufe dann jeden KI-Agenten über ein einheitliches Gateway auf, direkt aus deinem Terminal.", + "whatTitle": "Was der Installer macht", + "whatWritesSkill": "Schreibt einen einzigen, namespaced TakoAPI-Skill in das jeweils eigene Skills-Verzeichnis jedes Agenten — deine gemeinsamen Konfigurationsdateien werden nie verändert.", + "whatTeachesAgent": "Bringt deinem Agenten bei, die TakoAPI-Registry und das Gateway über HTTP aufzurufen — keine zusätzlichen Abhängigkeiten, kein Server, der laufen muss.", + "whatMcpServer": "Lieber gehostete Tools? Registriere stattdessen den TakoAPI-MCP-Serverclaude mcp add --transport http takoapi https://takoapi.com/mcp — der search_agents, get_agent, search_skills und invoke_agent als native MCP-Tools bereitstellt.", + "whatIdempotent": "Ist idempotent (gefahrlos erneut ausführbar) und mit --uninstall vollständig umkehrbar.", + "whatApiKey": "Für das abgerechnete Gateway erstelle einen API-Schlüssel in deinem Dashboard und exportiere ihn als TAKO_KEY.", + "footnote": "Unter Windows oder bereits in Node? Nutze npx takoapi-install. Möchtest du das Skript zuerst lesen? Es ist reines Shell-Skript unter takoapi.com/install.sh." + }, + "InstallTabs": { + "universalNote": "Installiert den TakoAPI-Skill in Claude Code, Codex und OpenCode — automatisch erkannt. Gefahrlos erneut ausführbar, kein Root nötig. Unter Windows oder in Node nutze .", + "tablistLabel": "Coding-Agenten", + "claudeCodeTagline": "Anthropics CLI", + "codexTagline": "OpenAIs CLI", + "opencodeTagline": "opencode.ai", + "skillHeading": "Skill — bringt deinem Agenten bei, TakoAPI aufzurufen", + "skillUniversalHint": "…oder nutze den universellen Befehl oben — er deckt {name} ebenfalls ab.", + "writesHeading": "Schreibt", + "howToUseHeading": "Verwendung", + "claudeCodeUse": "Lädt automatisch — bitte Claude einfach, einen Agenten auf TakoAPI zu finden.", + "codexUse": "Mit $takoapi aufrufen oder im Menü /skills auswählen.", + "opencodeUse": "Führe /takoapi aus oder übergib an @takoapi.", + "mcpHeading": "MCP-Server — gehostete Tools, nichts zu installieren", + "claudeCodeMcpHint": "Ein Befehl. Füge --header \"Authorization: Bearer $TAKO_KEY\" hinzu, um invoke_agent zu aktivieren.", + "codexMcpHint": "Zu ~/.codex/config.toml hinzufügen", + "opencodeMcpHint": "In ~/.config/opencode/opencode.json einfügen", + "mcpToolsNote": "Fügt Tools hinzu: search_agents, get_agent, search_skills, invoke_agent.", + "uninstallHeading": "Deinstallieren", + "uninstallNote": "Entfernt nur die eigenen Dateien von TakoAPI — deine übrige Agenten-Konfiguration wird nie angerührt.", + "copy": "Kopieren", + "copied": "Kopiert" + }, + "SkillDetail": { + "notFoundMetaTitle": "Skill nicht gefunden", + "backToSkills": "Zurück zu den Skills", + "by": "von {author}", + "downloads": "Downloads", + "stars": "Sterne", + "views": "Aufrufe", + "likes": "{count, plural, one {# Like} other {# Likes}}", + "brief": "Kurzbeschreibung", + "description": "Beschreibung", + "whatThisSkillDoes": "Was dieser Skill macht", + "whenToUseIt": "Wann du ihn einsetzen solltest", + "exampleWorkflow": "Beispiel-Workflow", + "workflowInput": "EINGABE", + "workflowAgent": "AGENT", + "workflowOutput": "AUSGABE", + "requirements": "Voraussetzungen", + "installation": "Installation", + "clawHubCli": "ClawHub-CLI", + "openClawChat": "OpenClaw-Chat (füge dies in deine Unterhaltung ein)", + "links": "Links", + "github": "GitHub", + "copyGithubUrl": "GitHub-URL kopieren", + "clawHub": "ClawHub", + "skillNotFound": "Skill nicht gefunden" + }, + "Skills": { + "metaTitle": "Skills durchsuchen", + "metaDescription": "Durchsuche Tausende OpenClaw-Skills für deinen Coding-Agenten über Dutzende Kategorien hinweg — mit Suche, Filtern und einem Trending-Leaderboard.", + "ogTitle": "Skills durchsuchen — {siteName}", + "ogDescription": "Tausende OpenClaw-Skills für deinen Coding-Agenten.", + "heading": "Skills durchsuchen", + "searchLabel": "Suche: „{query}“", + "count": "{count, number} Skills gefunden", + "sortLatest": "Neueste", + "sortPopular": "Beliebteste", + "sortViews": "Meistaufgerufen", + "sortStars": "Meiste Sterne", + "agentAll": "Alle Agenten", + "agentClaudeCode": "Claude Code", + "agentCursor": "Cursor", + "agentWindsurf": "Windsurf", + "agentCodex": "Codex", + "agentAider": "Aider", + "agentCline": "Cline", + "agentCopilot": "Copilot", + "agentGeneric": "Generisch", + "all": "Alle", + "emptyTitle": "Keine Skills gefunden", + "emptyHint": "Passe deine Suche oder Filter an", + "pageOf": "Seite {page} von {total}" + }, + "Trending": { + "metaTitle": "Skills im Trend", + "metaDescription": "Die meistheruntergeladenen und beliebtesten OpenClaw-Skills gerade jetzt — ein Live-Leaderboard dessen, was Coding-Agenten installieren.", + "ogTitle": "Skills im Trend — {siteName}", + "ogDescription": "Ein Live-Leaderboard der beliebtesten OpenClaw-Skills.", + "title": "Skills im Trend", + "subtitle": "Entdecke die beliebtesten OpenClaw-Skills, gereiht von der Community", + "searchPlaceholder": "Trend-Skills suchen…", + "categories": "Kategorien", + "allCategories": "Alle Kategorien", + "downloads": "Downloads", + "stars": "Sterne", + "likes": "Likes", + "views": "Aufrufe", + "skill": "Skill", + "count": "{count, plural, =0 {Keine Skills} one {# Skill} other {# Skills}}", + "countInCategory": "{count, plural, =0 {Keine Skills} one {# Skill} other {# Skills}} in {category}", + "emptyTitle": "Keine Skills gefunden", + "emptySubtitle": "Passe deine Suche oder Filter an", + "byAuthor": "von {author}", + "showing": "{from, number}–{to, number} von {total, number} werden angezeigt", + "prev": "Zurück", + "next": "Weiter" + }, + "Admin": { + "accessDenied": "Zugriff verweigert", + "accessDeniedDescription": "Du benötigst Admin-Rechte, um auf diese Seite zuzugreifen.", + "goHome": "Zur Startseite", + "backToSite": "Zurück zur Website", + "panelTitle": "Admin-Panel", + "navDashboard": "Dashboard", + "navSkills": "Skills", + "navAgents": "Agenten", + "navCategories": "Kategorien", + "navUsers": "Benutzer", + "navLogs": "Logs", + "dashboardTitle": "Dashboard", + "statTotalSkills": "Skills gesamt", + "statTotalUsers": "Benutzer gesamt", + "statCategories": "Kategorien", + "statTotalLikes": "Likes gesamt", + "statTotalViews": "Aufrufe gesamt", + "statTotalDownloads": "Downloads gesamt", + "statPendingReview": "Prüfung ausstehend", + "recentSkills": "Neueste Skills", + "topSkillsByDownloads": "Top-Skills nach Downloads", + "viewAll": "Alle ansehen", + "byAuthor": "von {author}", + "statusApproved": "genehmigt", + "statusPending": "ausstehend", + "statusRejected": "abgelehnt", + "loading": "Wird geladen…", + "cancel": "Abbrechen", + "save": "Speichern", + "saveChanges": "Änderungen speichern", + "delete": "Löschen", + "edit": "Bearbeiten", + "confirm": "Bestätigen", + "preview": "Vorschau", + "agentsTitle": "Agenten", + "agentsSubtitle": "Eingereichte Agenten prüfen und moderieren.", + "filterPending": "Ausstehend", + "filterApproved": "Genehmigt", + "filterRejected": "Abgelehnt", + "filterAll": "Alle", + "noAgentsInView": "Keine Agenten in dieser Ansicht.", + "unknownPublisher": "unbekannt", + "uncategorized": "nicht kategorisiert", + "agentMetaSkills": "{count, number} Skills", + "noScenarios": "keine Szenarien", + "reviewNoteLabel": "Hinweis: {note}", + "editScenarios": "Szenarien bearbeiten", + "actionApprove": "Genehmigen", + "actionReject": "Ablehnen", + "feature": "Hervorheben", + "unfeature": "Hervorhebung aufheben", + "scenariosEditorHint": "场景 Szenarien — 点击切换 / zum Zuweisen umschalten", + "scenarioOption": "{nameZh} · {name}", + "selectedCount": "{count, number} ausgewählt", + "rejectReasonPrompt": "Grund für die Ablehnung (optional):", + "deleteAgentConfirm": "Diesen Agenten endgültig löschen?", + "skillsTitle": "Skill-Verwaltung", + "searchSkillsPlaceholder": "Skills suchen...", + "allStatuses": "Alle Status", + "filterStatusPending": "Ausstehend", + "filterStatusApproved": "Genehmigt", + "filterStatusRejected": "Abgelehnt", + "allCategories": "Alle Kategorien", + "selectedLabel": "{count, number} ausgewählt", + "batchApprove": "Genehmigen", + "batchReject": "Ablehnen", + "batchFeature": "Hervorheben", + "batchDelete": "Löschen", + "batchDeleteConfirm": "{count, number} Skill(s) löschen? Dies kann nicht rückgängig gemacht werden.", + "colName": "Name", + "colAuthor": "Autor", + "colCategory": "Kategorie", + "colStatus": "Status", + "colDownloads": "Downloads", + "colLikes": "Likes", + "colViews": "Aufrufe", + "colCreated": "Erstellt", + "colActions": "Aktionen", + "noSkillsFound": "Keine Skills gefunden.", + "showingRange": "{from, number}–{to, number} von {total, number} werden angezeigt", + "editSkillTitle": "Skill bearbeiten", + "fieldName": "Name", + "fieldAuthor": "Autor", + "fieldBrief": "Kurzbeschreibung", + "fieldStatus": "Status", + "optionPending": "Ausstehend", + "optionApproved": "Genehmigt", + "optionRejected": "Abgelehnt", + "fieldFeatured": "Hervorgehoben", + "deleteSkillTitle": "Skill löschen", + "deleteSkillConfirm": "Möchtest du {name} wirklich löschen? Diese Aktion kann nicht rückgängig gemacht werden.", + "categoriesTitle": "Kategorien", + "addCategory": "Kategorie hinzufügen", + "editCategoryTitle": "Kategorie bearbeiten", + "newCategoryTitle": "Neue Kategorie", + "fieldIcon": "Symbol", + "fieldDescription": "Beschreibung", + "categoryNamePlaceholder": "z. B. Datenanalyse", + "categoryIconPlaceholder": "z. B. chart-bar oder Emoji", + "categoryDescriptionPlaceholder": "Kurzbeschreibung", + "nameRequired": "Name ist erforderlich.", + "saveCategoryFailed": "Kategorie konnte nicht gespeichert werden", + "deleteCategoryFailed": "Kategorie konnte nicht gelöscht werden", + "fetchCategoriesFailed": "Kategorien konnten nicht abgerufen werden", + "deleteFailed": "Löschen fehlgeschlagen", + "somethingWentWrong": "Etwas ist schiefgelaufen", + "update": "Aktualisieren", + "create": "Erstellen", + "colSlug": "Slug", + "colSkills": "Skills", + "colDescription": "Beschreibung", + "noCategoriesFound": "Keine Kategorien gefunden. Füge oben eine hinzu.", + "deleting": "...", + "cannotDeleteHasSkills": "Löschen nicht möglich: enthält Skills", + "categoriesTotal": "{count, number} {count, plural, one {Kategorie} other {Kategorien}} insgesamt", + "usersTitle": "Benutzer", + "usersTotal": "{count, number} {count, plural, one {Benutzer} other {Benutzer}} insgesamt", + "searchUsersPlaceholder": "Nach Name oder E-Mail suchen...", + "colEmail": "E-Mail", + "colRole": "Rolle", + "colProvider": "Anbieter", + "colJoined": "Beigetreten", + "loadingUsers": "Benutzer werden geladen...", + "noUsersFound": "Keine Benutzer gefunden.", + "noName": "---", + "roleAdmin": "Admin", + "roleUser": "Benutzer", + "providerCredentials": "Anmeldedaten", + "demote": "Herabstufen", + "promote": "Hochstufen", + "demoteToUser": "Zu Benutzer herabstufen", + "promoteToAdmin": "Zu Admin hochstufen", + "logsTitle": "Admin-Logs", + "logsTotal": "{count, number} {count, plural, one {Eintrag} other {Einträge}} insgesamt", + "colTimestamp": "Zeitstempel", + "colAdmin": "Admin", + "colAction": "Aktion", + "colTargetType": "Zieltyp", + "colTargetId": "Ziel-ID", + "colDetail": "Detail", + "loadingLogs": "Logs werden geladen...", + "noLogsFound": "Keine Logs gefunden.", + "emptyDetail": "---", + "actionCreate": "erstellen", + "actionUpdate": "aktualisieren", + "actionDelete": "löschen", + "actionApproveLog": "genehmigen", + "actionRejectLog": "ablehnen", + "actionRoleChange": "Rollenänderung", + "targetSkill": "Skill", + "targetAgent": "Agent", + "targetCategory": "Kategorie", + "targetUser": "Benutzer" + }, + "Auth": { + "signInTitle": "Bei TakoAPI anmelden", + "signInSubtitle": "Greife auf dein Skills-Dashboard zu", + "signUpTitle": "Konto erstellen", + "signUpSubtitle": "Tritt der TakoAPI-Community bei", + "continueWithGoogle": "Mit Google fortfahren", + "continueWithApple": "Mit Apple fortfahren", + "signUpWithGoogle": "Mit Google registrieren", + "signUpWithApple": "Mit Apple registrieren", + "or": "oder", + "name": "Name", + "email": "E-Mail", + "password": "Passwort", + "passwordHint": "Passwort (mind. 8 Zeichen)", + "signIn": "Anmelden", + "signingIn": "Anmeldung läuft...", + "createAccount": "Konto erstellen", + "creatingAccount": "Konto wird erstellt...", + "invalidCredentials": "Ungültige E-Mail oder ungültiges Passwort", + "registrationFailed": "Registrierung fehlgeschlagen", + "somethingWentWrong": "Etwas ist schiefgelaufen", + "noAccount": "Noch kein Konto?", + "signUpLink": "Registrieren", + "haveAccount": "Bereits ein Konto?", + "signInLink": "Anmelden" + }, + "Dashboard": { + "title": "Entwickler-Dashboard", + "signInPrompt": "Melde dich an, um API-Schlüssel zu verwalten und die Nutzung einzusehen.", + "signIn": "Anmelden", + "description": "Verwalte API-Schlüssel und überwache die Gateway-Nutzung. Ein Schlüssel, eine Rechnung, jeder Agent.", + "apiKeys": "API-Schlüssel", + "createKey": "Schlüssel erstellen", + "creating": "Wird erstellt…", + "copyKeyWarning": "Kopiere diesen Schlüssel jetzt — er wird nicht erneut angezeigt.", + "copy": "Kopieren", + "copied": "Kopiert", + "noKeys": "Noch keine Schlüssel. Erstelle einen, um Agenten aufzurufen.", + "keyFallbackName": "Schlüssel", + "created": "erstellt am {date}", + "lastUsed": "zuletzt verwendet am {date}", + "neverUsed": "nie verwendet", + "revoke": "Widerrufen", + "revokeConfirm": "Diesen Schlüssel widerrufen? Apps, die ihn nutzen, funktionieren nicht mehr.", + "quickstart": "Schnellstart", + "usage": "Nutzung", + "totalCalls": "Aufrufe gesamt", + "agentsUsed": "Genutzte Agenten", + "totalCount": "{count, number}", + "tableAgent": "Agent", + "tableProtocol": "Protokoll", + "tableStatus": "Status", + "tableLatency": "Latenz", + "tableWhen": "Wann", + "noCalls": "Noch keine Aufrufe. Erstelle einen Schlüssel und rufe einen Agenten auf, um die Nutzung hier zu sehen." + }, + "Profile": { + "title": "Mein Profil", + "signInPrompt": "Bitte melde dich an, um dein Profil anzusehen.", + "signIn": "Anmelden", + "submissions": "Einreichungen", + "likes": "Likes", + "views": "Aufrufe", + "statValue": "{count, number}", + "mySubmissions": "Meine Einreichungen", + "submitNew": "Neu einreichen", + "tab_all": "Alle", + "tab_approved": "Genehmigt", + "tab_pending": "Ausstehend", + "tab_rejected": "Abgelehnt", + "tabCount": "{count, number}", + "emptyTab": "Keine Einreichungen in diesem Tab", + "submitFirst": "Reiche deinen ersten Skill ein", + "statusApproved": "Genehmigt", + "statusPending": "Prüfung ausstehend", + "statusRejected": "Abgelehnt", + "reviewerNote": "Anmerkung des Prüfers:" + }, + "Submit": { + "title": "Einen Skill einreichen", + "subtitle": "Teile deinen OpenClaw-Skill mit der Community", + "signInPrompt": "Bitte melde dich an, um Skills einzureichen.", + "signIn": "Anmelden", + "skillSource": "Skill-Quelle", + "githubUrl": "GitHub-URL", + "clawSkillsUrl": "ClawSkills.sh-URL", + "githubUrlPlaceholder": "https://github.com/username/repo", + "clawSkillsUrlPlaceholder": "https://clawskills.sh/skills/author-skillname", + "autoFill": "Automatisch ausfüllen", + "fetching": "Wird abgerufen...", + "filled": "Ausgefüllt!", + "skillName": "Skill-Name", + "skillNamePlaceholder": "z. B. my-awesome-skill", + "category": "Kategorie", + "selectCategory": "Kategorie auswählen", + "categoryOption": "{name} ({count})", + "brief": "Kurzbeschreibung", + "briefHelper": "- Einzeilige Zusammenfassung", + "briefPlaceholder": "Eine kurze Beschreibung dessen, was dein Skill macht", + "skillDetails": "Skill-Details", + "skillDetailsHelper": "- Automatisch aus README ausgefüllt", + "whatItDoes": "Was dieser Skill macht", + "whatItDoesPlaceholder": "Ausführliche Erklärung, was dieser Skill macht, seine Funktionen und Fähigkeiten...", + "exampleWorkflow": "Beispiel-Workflow", + "exampleWorkflowHelper": "- EINGABE / AGENT-Schritte / AUSGABE", + "exampleWorkflowPlaceholder": "EINGABE\nBenutzer fragt: Mach etwas Nützliches\n\nAGENT\n1\nFühre `my-skill action` aus, um die Aufgabe zu erledigen\n2\nÜberprüfe das Ergebnis\n\nAUSGABE\nAufgabe erfolgreich abgeschlossen", + "requirements": "Voraussetzungen", + "requirementsPlaceholder": "- Node.js 18+\n- API-Schlüssel von Dienst X\n- usw.", + "submitSkill": "Skill einreichen", + "submitting": "Wird eingereicht...", + "enterUrlFirst": "Bitte gib zuerst eine URL ein", + "autoFillFailed": "Automatisches Ausfüllen fehlgeschlagen", + "submitFailed": "Einreichen fehlgeschlagen", + "somethingWentWrong": "Etwas ist schiefgelaufen" + }, + "SubmitAgent": { + "title": "Agent veröffentlichen", + "signInPrompt": "Bitte melde dich an, um einen Agenten zu veröffentlichen.", + "signIn": "Anmelden", + "intro": "Liste einen aufrufbaren Agenten auf dem Marktplatz. Reiche die URL seiner A2A-AgentCard ein, und wir parsen den Rest — oder fülle es manuell aus.", + "tabUrl": "AgentCard-URL", + "tabManual": "Manuell", + "cardUrlLabel": "AgentCard-URL", + "cardUrlPlaceholder": "https://your-agent.com/.well-known/agent-card.json", + "cardUrlHelp": "Wir rufen die A2A-AgentCard ab und validieren sie (Name, Endpunkt, Fähigkeiten, Skills).", + "nameLabel": "Agentenname", + "namePlaceholder": "z. B. Weather Oracle", + "descriptionLabel": "Beschreibung", + "descriptionPlaceholder": "Was macht dieser Agent?", + "endpointLabel": "Endpunkt-URL", + "endpointPlaceholder": "https://your-agent.com/a2a", + "protocolsLabel": "Protokolle", + "protocolOpenAiCompat": "OpenAI-kompatibel", + "categoryLabel": "Kategorie", + "uncategorized": "Nicht kategorisiert", + "pricingLabel": "Preise", + "pricingFree": "Kostenlos", + "pricingPerCall": "Pro Aufruf", + "pricingPerTask": "Pro Aufgabe", + "pricingPerToken": "Pro 1k Tokens", + "unitPriceLabel": "Stückpreis (USD)", + "unitPricePlaceholder": "0.002", + "homepageLabel": "Homepage", + "optional": "optional", + "homepagePlaceholder": "https://your-agent.com", + "submit": "Agent veröffentlichen", + "submitting": "Wird eingereicht…", + "submitFailed": "Einreichen fehlgeschlagen", + "somethingWentWrong": "Etwas ist schiefgelaufen", + "successTitle": "Eingereicht 🎉", + "pendingReview": "{name} wartet nun auf die Prüfung.", + "successDetail": "Wir verifizieren die AgentCard und veröffentlichen sie nach der Genehmigung auf dem Marktplatz.", + "backToMarketplace": "← Zurück zum Marktplatz" + } +} diff --git a/messages/en.json b/messages/en.json new file mode 100644 index 000000000..486a34bf4 --- /dev/null +++ b/messages/en.json @@ -0,0 +1,593 @@ +{ + "Metadata": { + "tagline": "One API to access all agents", + "description": "Discover and invoke AI agents through one unified API — an OpenRouter for agents. Browse a directory of hundreds of open-source agent projects and thousands of OpenClaw skills for your coding agent." + }, + "LocaleSwitcher": { + "label": "Language" + }, + "Header": { + "searchPlaceholder": "Search agents...", + "agents": "Agents", + "skills": "Skills", + "trending": "Trending", + "publish": "Publish", + "publishAgent": "Publish Agent", + "account": "Account", + "mySkills": "My Skills", + "apiUsage": "API & Usage", + "adminPanel": "Admin Panel", + "signIn": "Sign in", + "signOut": "Sign out" + }, + "Footer": { + "tagline": "One API to access all agents — plus thousands of OpenClaw skills for your coding agent.", + "agentRegistry": "Agent registry:", + "platform": "Platform", + "resources": "Resources", + "installInAgent": "Install in your agent", + "browseAgents": "Browse Agents", + "publishAnAgent": "Publish an Agent", + "developerDashboard": "Developer Dashboard", + "browseSkills": "Browse Skills", + "awesomeList": "Awesome List", + "clawHub": "ClawHub", + "copyright": "© {year} TakoAPI. Built for the OpenClaw community." + }, + "Home": { + "heroTitle": "One API to access all agents", + "heroSubtitle": "Discover and invoke {agents, number} AI agents through one unified API — plus {skills, number} skills for your coding agent.", + "browseAgents": "Browse agents", + "publishAnAgent": "Publish an agent", + "agentRegistry": "Agent registry:", + "browseByScenario": "Browse by scenario", + "allAgents": "All agents", + "featuredAgents": "Featured Agents", + "browseAll": "Browse all", + "popularProjects": "Popular open-source projects", + "selfHostable": "{count, number} self-hostable", + "skillTitle": "TakoAPI Skill for OpenClaw", + "official": "Official", + "skillDescription": "Search, install, and manage OpenClaw skills through natural conversation — powered by the TakoAPI marketplace.", + "viewOnGithub": "View on GitHub", + "askAgent": "or ask your agent: \"Install the TakoAPI skill\"", + "usingCodingAgent": "Using Claude Code, Codex or OpenCode?", + "oneCommandInstall": "One-command install", + "mustHaveSkills": "Must-Have Skills", + "viewRankings": "View rankings", + "categories": "Categories", + "viewAll": "View all", + "moreCategories": "{count, plural, one {+# more category} other {+# more categories}}", + "latestSkills": "Latest Skills" + }, + "Scenarios": { + "frontend": "Frontend", + "backend": "Backend", + "coding": "Coding & Dev", + "agent-frameworks": "Agent Frameworks", + "devops": "DevOps & Automation", + "data-analysis": "Data & Analytics", + "product-design": "Product Design", + "creative": "Creative & Media", + "presentations": "Presentations & Docs", + "investing": "Public-Market Investing", + "venture-analysis": "VC & Business-Model", + "marketing": "Marketing & Growth", + "sales": "Sales & CRM", + "customer-support": "Customer Support", + "research": "Research & Search", + "writing": "Writing & Content", + "productivity": "Productivity & Assistant" + }, + "AgentDetail": { + "notFound": "Agent not found", + "backToMarketplace": "← Agent Marketplace", + "openSourceProject": "Open-source project", + "signedCard": "Signed card", + "verifiedPublisher": "Verified publisher", + "by": "by {name}", + "publisherOpenSource": "open-source", + "publisherUnknown": "unknown", + "scenario": "Scenario:", + "stars": "{count, number} stars", + "selfHost": "Self-host", + "streaming": "Streaming", + "pushNotifications": "Push notifications", + "skills": "Skills", + "skillsCount": "({count, number})", + "noSkillsProject": "An open-source project — explore the code and self-host it from GitHub.", + "noSkillsHosted": "This agent did not advertise structured skills in its AgentCard.", + "inputMode": "in: {mode}", + "outputMode": "out: {mode}", + "openSourceProjectHeading": "Open-source project", + "openSourceProjectNote": "Self-host or explore the code. Not invokable through the TakoAPI gateway.", + "viewOnGithub": "View on GitHub", + "integration": "Integration", + "endpoint": "Endpoint", + "agentCard": "AgentCard", + "homepage": "Homepage", + "callThroughTakoApi": "Call it through TakoAPI", + "gatewayPhase2": "Unified gateway — invocation ships in Phase 2.", + "breadcrumbHome": "Home", + "breadcrumbMarketplace": "Agent Marketplace" + }, + "Agents": { + "metaTitle": "Agent Marketplace", + "metaDescription": "One API to access all agents. Browse and invoke AI agents and hundreds of open-source agent projects through one unified API — described by open A2A AgentCards.", + "ogTitle": "Agent Marketplace — {siteName}", + "ogDescription": "Discover and invoke AI agents and open-source agent projects through one unified API.", + "heroTitle": "Agent Marketplace", + "heroTagline": "One API to access all agents.", + "heroSubtitle": "Discover and invoke AI agents through one unified API — described by open A2A AgentCards.", + "searchPlaceholder": "Search agents by name or description…", + "search": "Search", + "all": "All", + "kindAgents": "Agents", + "kindProjects": "Projects", + "scenarioFilter": "Scenario:", + "protocolFilter": "Protocol:", + "pricingFilter": "Pricing:", + "categoryFilter": "Category:", + "sortLabel": "Sort:", + "sortLatest": "Latest", + "sortStars": "Stars", + "sortPopular": "Popular", + "sortCalls": "Most called", + "sortRating": "Top rated", + "pricingFree": "Free", + "pricingPerCall": "per call", + "pricingPerTask": "per task", + "pricingPerToken": "Per 1k tokens", + "count": "{count, plural, =0 {No agents} one {# agent} other {# agents}}", + "emptyTitle": "No agents match your filters yet.", + "emptyCta": "Publish the first one →", + "prev": "← Prev", + "next": "Next →", + "pageOf": "Page {page} of {total}" + }, + "Components": { + "homeSearchPlaceholder": "Search skills by name, description, or author...", + "homeSearchButton": "Search", + "agentFree": "Free", + "agentPerCall": "{price}/call", + "agentPerTask": "{price}/task", + "agentPerToken": "{price}/1k tok", + "agentPriceFallbackCall": "call", + "agentPriceFallbackTask": "task", + "agentPriceFallbackToken": "token", + "agentBadgeProject": "project", + "agentBadgeStreaming": "streaming", + "agentOpenSource": "open-source", + "agentSelfHost": "self-host", + "agentSkills": "{count, plural, one {# skill} other {# skills}}", + "skillBy": "by {author}", + "skillLikes": "{count, number}" + }, + "Install": { + "metaTitle": "Install in Claude Code, Codex & OpenCode", + "title": "Install TakoAPI in Claude Code, Codex & OpenCode", + "description": "One command installs the TakoAPI skill into your coding agent — discover and invoke AI agents through one unified gateway, and search the OpenClaw skills catalog. Works with Claude Code, Codex, and OpenCode.", + "stepRunInstallerName": "Run the installer", + "stepRunInstallerText": "Run: curl -fsSL https://takoapi.com/install.sh | sh", + "stepUseAgentName": "Use TakoAPI from your agent", + "stepUseAgentText": "Ask your coding agent to find or call an AI agent on TakoAPI.", + "heroBadge": "One command, three agents", + "heroTitle": "Install TakoAPI in your coding agent", + "heroSubtitle": "Drop the TakoAPI skill into Claude Code, Codex, or OpenCode — then discover and invoke any AI agent through one unified gateway, right from your terminal.", + "whatTitle": "What the installer does", + "whatWritesSkill": "Writes a single, namespaced TakoAPI skill into each agent's own skills directory — it never edits your shared config files.", + "whatTeachesAgent": "Teaches your agent to call the TakoAPI registry and gateway over HTTP — no extra dependencies, no server to run.", + "whatMcpServer": "Prefer hosted tools? Register the TakoAPI MCP server instead — claude mcp add --transport http takoapi https://takoapi.com/mcp — exposing search_agents, get_agent, search_skills, and invoke_agent as native MCP tools.", + "whatIdempotent": "Is idempotent (safe to re-run) and fully reversible with --uninstall.", + "whatApiKey": "For the metered gateway, create an API key in your dashboard and export it as TAKO_KEY.", + "footnote": "On Windows or already in Node? Use npx takoapi-install. Prefer to read the script first? It's plain shell at takoapi.com/install.sh." + }, + "InstallTabs": { + "universalNote": "Installs the TakoAPI skill into Claude Code, Codex, and OpenCode — auto-detected. Safe to re-run, no root. On Windows or in Node, use .", + "tablistLabel": "Coding agents", + "claudeCodeTagline": "Anthropic's CLI", + "codexTagline": "OpenAI's CLI", + "opencodeTagline": "opencode.ai", + "skillHeading": "Skill — teaches your agent to call TakoAPI", + "skillUniversalHint": "…or use the universal command above — it covers {name} too.", + "writesHeading": "Writes", + "howToUseHeading": "How to use", + "claudeCodeUse": "Loads automatically — just ask Claude to find an agent on TakoAPI.", + "codexUse": "Invoke with $takoapi, or pick it from the /skills menu.", + "opencodeUse": "Run /takoapi , or hand off to @takoapi.", + "mcpHeading": "MCP server — hosted tools, nothing to install", + "claudeCodeMcpHint": "One command. Add --header \"Authorization: Bearer $TAKO_KEY\" to enable invoke_agent.", + "codexMcpHint": "Add to ~/.codex/config.toml", + "opencodeMcpHint": "Merge into ~/.config/opencode/opencode.json", + "mcpToolsNote": "Adds tools: search_agents, get_agent, search_skills, invoke_agent.", + "uninstallHeading": "Uninstall", + "uninstallNote": "Removes only TakoAPI's own files — it never touches your other agent config.", + "copy": "Copy", + "copied": "Copied" + }, + "SkillDetail": { + "notFoundMetaTitle": "Skill not found", + "backToSkills": "Back to skills", + "by": "by {author}", + "downloads": "Downloads", + "stars": "Stars", + "views": "Views", + "likes": "{count, plural, one {# like} other {# likes}}", + "brief": "Brief", + "description": "Description", + "whatThisSkillDoes": "What This Skill Does", + "whenToUseIt": "When to Use It", + "exampleWorkflow": "Example Workflow", + "workflowInput": "INPUT", + "workflowAgent": "AGENT", + "workflowOutput": "OUTPUT", + "requirements": "Requirements", + "installation": "Installation", + "clawHubCli": "ClawHub CLI", + "openClawChat": "OpenClaw Chat (paste this into your conversation)", + "links": "Links", + "github": "GitHub", + "copyGithubUrl": "Copy GitHub URL", + "clawHub": "ClawHub", + "skillNotFound": "Skill not found" + }, + "Skills": { + "metaTitle": "Browse Skills", + "metaDescription": "Browse thousands of OpenClaw skills for your coding agent across dozens of categories — with search, filtering, and a trending leaderboard.", + "ogTitle": "Browse Skills — {siteName}", + "ogDescription": "Thousands of OpenClaw skills for your coding agent.", + "heading": "Browse Skills", + "searchLabel": "Search: \"{query}\"", + "count": "{count, number} skills found", + "sortLatest": "Latest", + "sortPopular": "Most Popular", + "sortViews": "Most Viewed", + "sortStars": "Most Starred", + "agentAll": "All agents", + "agentClaudeCode": "Claude Code", + "agentCursor": "Cursor", + "agentWindsurf": "Windsurf", + "agentCodex": "Codex", + "agentAider": "Aider", + "agentCline": "Cline", + "agentCopilot": "Copilot", + "agentGeneric": "Generic", + "all": "All", + "emptyTitle": "No skills found", + "emptyHint": "Try adjusting your search or filters", + "pageOf": "Page {page} of {total}" + }, + "Trending": { + "metaTitle": "Trending Skills", + "metaDescription": "The most-downloaded and most-liked OpenClaw skills right now — a live leaderboard of what coding agents are installing.", + "ogTitle": "Trending Skills — {siteName}", + "ogDescription": "A live leaderboard of the most popular OpenClaw skills.", + "title": "Trending Skills", + "subtitle": "Discover the most popular OpenClaw skills ranked by the community", + "searchPlaceholder": "Search trending skills…", + "categories": "Categories", + "allCategories": "All Categories", + "downloads": "Downloads", + "stars": "Stars", + "likes": "Likes", + "views": "Views", + "skill": "Skill", + "count": "{count, plural, =0 {No skills} one {# skill} other {# skills}}", + "countInCategory": "{count, plural, =0 {No skills} one {# skill} other {# skills}} in {category}", + "emptyTitle": "No skills found", + "emptySubtitle": "Try adjusting your search or filters", + "byAuthor": "by {author}", + "showing": "Showing {from, number}–{to, number} of {total, number}", + "prev": "Prev", + "next": "Next" + }, + "Admin": { + "accessDenied": "Access Denied", + "accessDeniedDescription": "You need admin privileges to access this page.", + "goHome": "Go Home", + "backToSite": "Back to site", + "panelTitle": "Admin Panel", + "navDashboard": "Dashboard", + "navSkills": "Skills", + "navAgents": "Agents", + "navCategories": "Categories", + "navUsers": "Users", + "navLogs": "Logs", + "dashboardTitle": "Dashboard", + "statTotalSkills": "Total Skills", + "statTotalUsers": "Total Users", + "statCategories": "Categories", + "statTotalLikes": "Total Likes", + "statTotalViews": "Total Views", + "statTotalDownloads": "Total Downloads", + "statPendingReview": "Pending Review", + "recentSkills": "Recent Skills", + "topSkillsByDownloads": "Top Skills by Downloads", + "viewAll": "View all", + "byAuthor": "by {author}", + "statusApproved": "approved", + "statusPending": "pending", + "statusRejected": "rejected", + "loading": "Loading…", + "cancel": "Cancel", + "save": "Save", + "saveChanges": "Save Changes", + "delete": "Delete", + "edit": "Edit", + "confirm": "Confirm", + "preview": "Preview", + "agentsTitle": "Agents", + "agentsSubtitle": "Review and moderate submitted agents.", + "filterPending": "Pending", + "filterApproved": "Approved", + "filterRejected": "Rejected", + "filterAll": "All", + "noAgentsInView": "No agents in this view.", + "unknownPublisher": "unknown", + "uncategorized": "uncategorized", + "agentMetaSkills": "{count, number} skills", + "noScenarios": "no scenarios", + "reviewNoteLabel": "Note: {note}", + "editScenarios": "Edit scenarios", + "actionApprove": "Approve", + "actionReject": "Reject", + "feature": "Feature", + "unfeature": "Unfeature", + "scenariosEditorHint": "场景 Scenarios — 点击切换 / toggle to assign", + "scenarioOption": "{nameZh} · {name}", + "selectedCount": "{count, number} selected", + "rejectReasonPrompt": "Reason for rejection (optional):", + "deleteAgentConfirm": "Permanently delete this agent?", + "skillsTitle": "Skills Management", + "searchSkillsPlaceholder": "Search skills...", + "allStatuses": "All Statuses", + "filterStatusPending": "Pending", + "filterStatusApproved": "Approved", + "filterStatusRejected": "Rejected", + "allCategories": "All Categories", + "selectedLabel": "{count, number} selected", + "batchApprove": "Approve", + "batchReject": "Reject", + "batchFeature": "Feature", + "batchDelete": "Delete", + "batchDeleteConfirm": "Delete {count, number} skill(s)? This cannot be undone.", + "colName": "Name", + "colAuthor": "Author", + "colCategory": "Category", + "colStatus": "Status", + "colDownloads": "Downloads", + "colLikes": "Likes", + "colViews": "Views", + "colCreated": "Created", + "colActions": "Actions", + "noSkillsFound": "No skills found.", + "showingRange": "Showing {from, number}–{to, number} of {total, number}", + "editSkillTitle": "Edit Skill", + "fieldName": "Name", + "fieldAuthor": "Author", + "fieldBrief": "Brief", + "fieldStatus": "Status", + "optionPending": "Pending", + "optionApproved": "Approved", + "optionRejected": "Rejected", + "fieldFeatured": "Featured", + "deleteSkillTitle": "Delete Skill", + "deleteSkillConfirm": "Are you sure you want to delete {name}? This action cannot be undone.", + "categoriesTitle": "Categories", + "addCategory": "Add Category", + "editCategoryTitle": "Edit Category", + "newCategoryTitle": "New Category", + "fieldIcon": "Icon", + "fieldDescription": "Description", + "categoryNamePlaceholder": "e.g. Data Analysis", + "categoryIconPlaceholder": "e.g. chart-bar or emoji", + "categoryDescriptionPlaceholder": "Short description", + "nameRequired": "Name is required.", + "saveCategoryFailed": "Failed to save category", + "deleteCategoryFailed": "Failed to delete category", + "fetchCategoriesFailed": "Failed to fetch categories", + "deleteFailed": "Delete failed", + "somethingWentWrong": "Something went wrong", + "update": "Update", + "create": "Create", + "colSlug": "Slug", + "colSkills": "Skills", + "colDescription": "Description", + "noCategoriesFound": "No categories found. Add one above.", + "deleting": "...", + "cannotDeleteHasSkills": "Cannot delete: has skills", + "categoriesTotal": "{count, number} {count, plural, one {category} other {categories}} total", + "usersTitle": "Users", + "usersTotal": "{count, number} total {count, plural, one {user} other {users}}", + "searchUsersPlaceholder": "Search by name or email...", + "colEmail": "Email", + "colRole": "Role", + "colProvider": "Provider", + "colJoined": "Joined", + "loadingUsers": "Loading users...", + "noUsersFound": "No users found.", + "noName": "---", + "roleAdmin": "admin", + "roleUser": "user", + "providerCredentials": "credentials", + "demote": "Demote", + "promote": "Promote", + "demoteToUser": "Demote to user", + "promoteToAdmin": "Promote to admin", + "logsTitle": "Admin Logs", + "logsTotal": "{count, number} total {count, plural, one {entry} other {entries}}", + "colTimestamp": "Timestamp", + "colAdmin": "Admin", + "colAction": "Action", + "colTargetType": "Target Type", + "colTargetId": "Target ID", + "colDetail": "Detail", + "loadingLogs": "Loading logs...", + "noLogsFound": "No logs found.", + "emptyDetail": "---", + "actionCreate": "create", + "actionUpdate": "update", + "actionDelete": "delete", + "actionApproveLog": "approve", + "actionRejectLog": "reject", + "actionRoleChange": "role change", + "targetSkill": "skill", + "targetAgent": "agent", + "targetCategory": "category", + "targetUser": "user" + }, + "Auth": { + "signInTitle": "Sign in to TakoAPI", + "signInSubtitle": "Access your skills dashboard", + "signUpTitle": "Create an account", + "signUpSubtitle": "Join the TakoAPI community", + "continueWithGoogle": "Continue with Google", + "continueWithApple": "Continue with Apple", + "signUpWithGoogle": "Sign up with Google", + "signUpWithApple": "Sign up with Apple", + "or": "or", + "name": "Name", + "email": "Email", + "password": "Password", + "passwordHint": "Password (min 8 characters)", + "signIn": "Sign in", + "signingIn": "Signing in...", + "createAccount": "Create account", + "creatingAccount": "Creating account...", + "invalidCredentials": "Invalid email or password", + "registrationFailed": "Registration failed", + "somethingWentWrong": "Something went wrong", + "noAccount": "Don't have an account?", + "signUpLink": "Sign up", + "haveAccount": "Already have an account?", + "signInLink": "Sign in" + }, + "Dashboard": { + "title": "Developer Dashboard", + "signInPrompt": "Sign in to manage API keys and view usage.", + "signIn": "Sign in", + "description": "Manage API keys and monitor gateway usage. One key, one bill, any agent.", + "apiKeys": "API Keys", + "createKey": "Create key", + "creating": "Creating…", + "copyKeyWarning": "Copy this key now — it won't be shown again.", + "copy": "Copy", + "copied": "Copied", + "noKeys": "No keys yet. Create one to start calling agents.", + "keyFallbackName": "key", + "created": "created {date}", + "lastUsed": "last used {date}", + "neverUsed": "never used", + "revoke": "Revoke", + "revokeConfirm": "Revoke this key? Apps using it will stop working.", + "quickstart": "Quickstart", + "usage": "Usage", + "totalCalls": "Total calls", + "agentsUsed": "Agents used", + "totalCount": "{count, number}", + "tableAgent": "Agent", + "tableProtocol": "Protocol", + "tableStatus": "Status", + "tableLatency": "Latency", + "tableWhen": "When", + "noCalls": "No calls yet. Create a key and call an agent to see usage here." + }, + "Profile": { + "title": "My Profile", + "signInPrompt": "Please sign in to view your profile.", + "signIn": "Sign in", + "submissions": "Submissions", + "likes": "Likes", + "views": "Views", + "statValue": "{count, number}", + "mySubmissions": "My Submissions", + "submitNew": "Submit new", + "tab_all": "All", + "tab_approved": "Approved", + "tab_pending": "Pending", + "tab_rejected": "Rejected", + "tabCount": "{count, number}", + "emptyTab": "No submissions in this tab", + "submitFirst": "Submit your first skill", + "statusApproved": "Approved", + "statusPending": "Pending review", + "statusRejected": "Rejected", + "reviewerNote": "Reviewer note:" + }, + "Submit": { + "title": "Submit a Skill", + "subtitle": "Share your OpenClaw skill with the community", + "signInPrompt": "Please sign in to submit skills.", + "signIn": "Sign in", + "skillSource": "Skill Source", + "githubUrl": "GitHub URL", + "clawSkillsUrl": "ClawSkills.sh URL", + "githubUrlPlaceholder": "https://github.com/username/repo", + "clawSkillsUrlPlaceholder": "https://clawskills.sh/skills/author-skillname", + "autoFill": "Auto Fill", + "fetching": "Fetching...", + "filled": "Filled!", + "skillName": "Skill Name", + "skillNamePlaceholder": "e.g. my-awesome-skill", + "category": "Category", + "selectCategory": "Select a category", + "categoryOption": "{name} ({count})", + "brief": "Brief", + "briefHelper": "- One-line summary", + "briefPlaceholder": "A short description of what your skill does", + "skillDetails": "Skill Details", + "skillDetailsHelper": "- Auto-filled from README", + "whatItDoes": "What This Skill Does", + "whatItDoesPlaceholder": "Detailed explanation of what this skill does, its features and capabilities...", + "exampleWorkflow": "Example Workflow", + "exampleWorkflowHelper": "- INPUT / AGENT steps / OUTPUT", + "exampleWorkflowPlaceholder": "INPUT\nUser asks: Do something useful\n\nAGENT\n1\nRun `my-skill action` to perform the task\n2\nVerify the result\n\nOUTPUT\nTask completed successfully", + "requirements": "Requirements", + "requirementsPlaceholder": "- Node.js 18+\n- API key from service X\n- etc.", + "submitSkill": "Submit Skill", + "submitting": "Submitting...", + "enterUrlFirst": "Please enter a URL first", + "autoFillFailed": "Auto-fill failed", + "submitFailed": "Failed to submit", + "somethingWentWrong": "Something went wrong" + }, + "SubmitAgent": { + "title": "Publish an Agent", + "signInPrompt": "Please sign in to publish an agent.", + "signIn": "Sign in", + "intro": "List an invokable agent on the marketplace. Submit its A2A AgentCard URL and we'll parse the rest, or fill it in manually.", + "tabUrl": "AgentCard URL", + "tabManual": "Manual", + "cardUrlLabel": "AgentCard URL", + "cardUrlPlaceholder": "https://your-agent.com/.well-known/agent-card.json", + "cardUrlHelp": "We fetch and validate the A2A AgentCard (name, endpoint, capabilities, skills).", + "nameLabel": "Agent name", + "namePlaceholder": "e.g. Weather Oracle", + "descriptionLabel": "Description", + "descriptionPlaceholder": "What does this agent do?", + "endpointLabel": "Endpoint URL", + "endpointPlaceholder": "https://your-agent.com/a2a", + "protocolsLabel": "Protocols", + "protocolOpenAiCompat": "OpenAI-compatible", + "categoryLabel": "Category", + "uncategorized": "Uncategorized", + "pricingLabel": "Pricing", + "pricingFree": "Free", + "pricingPerCall": "Per call", + "pricingPerTask": "Per task", + "pricingPerToken": "Per 1k tokens", + "unitPriceLabel": "Unit price (USD)", + "unitPricePlaceholder": "0.002", + "homepageLabel": "Homepage", + "optional": "optional", + "homepagePlaceholder": "https://your-agent.com", + "submit": "Publish Agent", + "submitting": "Submitting…", + "submitFailed": "Failed to submit", + "somethingWentWrong": "Something went wrong", + "successTitle": "Submitted 🎉", + "pendingReview": "{name} is now pending review.", + "successDetail": "We'll verify the AgentCard and publish it to the marketplace once approved.", + "backToMarketplace": "← Back to marketplace" + } +} diff --git a/messages/es.json b/messages/es.json new file mode 100644 index 000000000..a3dca97d2 --- /dev/null +++ b/messages/es.json @@ -0,0 +1,593 @@ +{ + "Metadata": { + "tagline": "Una API para acceder a todos los agentes", + "description": "Descubre e invoca agentes de IA a través de una API unificada — un OpenRouter para agentes. Explora un directorio de cientos de proyectos de agentes de código abierto y miles de skills de OpenClaw para tu agente de programación." + }, + "LocaleSwitcher": { + "label": "Idioma" + }, + "Header": { + "searchPlaceholder": "Buscar agentes...", + "agents": "Agentes", + "skills": "Skills", + "trending": "Tendencias", + "publish": "Publicar", + "publishAgent": "Publicar agente", + "account": "Cuenta", + "mySkills": "Mis skills", + "apiUsage": "API y uso", + "adminPanel": "Panel de administración", + "signIn": "Iniciar sesión", + "signOut": "Cerrar sesión" + }, + "Footer": { + "tagline": "Una API para acceder a todos los agentes — más miles de skills de OpenClaw para tu agente de programación.", + "agentRegistry": "Registro de agentes:", + "platform": "Plataforma", + "resources": "Recursos", + "installInAgent": "Instalar en tu agente", + "browseAgents": "Explorar agentes", + "publishAnAgent": "Publicar un agente", + "developerDashboard": "Panel de desarrollador", + "browseSkills": "Explorar skills", + "awesomeList": "Lista Awesome", + "clawHub": "ClawHub", + "copyright": "© {year} TakoAPI. Creado para la comunidad de OpenClaw." + }, + "Home": { + "heroTitle": "Una API para acceder a todos los agentes", + "heroSubtitle": "Descubre e invoca {agents, number} agentes de IA a través de una API unificada — más {skills, number} skills para tu agente de programación.", + "browseAgents": "Explorar agentes", + "publishAnAgent": "Publicar un agente", + "agentRegistry": "Registro de agentes:", + "browseByScenario": "Explorar por escenario", + "allAgents": "Todos los agentes", + "featuredAgents": "Agentes destacados", + "browseAll": "Explorar todo", + "popularProjects": "Proyectos de código abierto populares", + "selfHostable": "{count, number} autoalojables", + "skillTitle": "Skill de TakoAPI para OpenClaw", + "official": "Oficial", + "skillDescription": "Busca, instala y gestiona skills de OpenClaw mediante conversación natural — con la tecnología del marketplace de TakoAPI.", + "viewOnGithub": "Ver en GitHub", + "askAgent": "o pídele a tu agente: «Instala la skill de TakoAPI»", + "usingCodingAgent": "¿Usas Claude Code, Codex u OpenCode?", + "oneCommandInstall": "Instalación con un solo comando", + "mustHaveSkills": "Skills imprescindibles", + "viewRankings": "Ver clasificación", + "categories": "Categorías", + "viewAll": "Ver todo", + "moreCategories": "{count, plural, one {+# categoría más} other {+# categorías más}}", + "latestSkills": "Últimas skills" + }, + "Scenarios": { + "frontend": "Frontend", + "backend": "Backend", + "coding": "Programación y desarrollo", + "agent-frameworks": "Frameworks de agentes", + "devops": "DevOps y automatización", + "data-analysis": "Datos y analítica", + "product-design": "Diseño de producto", + "creative": "Creatividad y medios", + "presentations": "Presentaciones y documentos", + "investing": "Inversión en mercados públicos", + "venture-analysis": "Capital riesgo y modelos de negocio", + "marketing": "Marketing y crecimiento", + "sales": "Ventas y CRM", + "customer-support": "Atención al cliente", + "research": "Investigación y búsqueda", + "writing": "Redacción y contenido", + "productivity": "Productividad y asistencia" + }, + "AgentDetail": { + "notFound": "Agente no encontrado", + "backToMarketplace": "← Marketplace de agentes", + "openSourceProject": "Proyecto de código abierto", + "signedCard": "Tarjeta firmada", + "verifiedPublisher": "Editor verificado", + "by": "por {name}", + "publisherOpenSource": "código abierto", + "publisherUnknown": "desconocido", + "scenario": "Escenario:", + "stars": "{count, number} estrellas", + "selfHost": "Autoalojar", + "streaming": "Streaming", + "pushNotifications": "Notificaciones push", + "skills": "Skills", + "skillsCount": "({count, number})", + "noSkillsProject": "Un proyecto de código abierto — explora el código y autoalójalo desde GitHub.", + "noSkillsHosted": "Este agente no anunció skills estructuradas en su AgentCard.", + "inputMode": "entrada: {mode}", + "outputMode": "salida: {mode}", + "openSourceProjectHeading": "Proyecto de código abierto", + "openSourceProjectNote": "Autoaloja o explora el código. No invocable a través del gateway de TakoAPI.", + "viewOnGithub": "Ver en GitHub", + "integration": "Integración", + "endpoint": "Endpoint", + "agentCard": "AgentCard", + "homepage": "Página principal", + "callThroughTakoApi": "Invócalo a través de TakoAPI", + "gatewayPhase2": "Gateway unificado — la invocación llega en la Fase 2.", + "breadcrumbHome": "Inicio", + "breadcrumbMarketplace": "Marketplace de agentes" + }, + "Agents": { + "metaTitle": "Marketplace de agentes", + "metaDescription": "Una API para acceder a todos los agentes. Explora e invoca agentes de IA y cientos de proyectos de agentes de código abierto a través de una API unificada — descritos mediante AgentCards abiertas de A2A.", + "ogTitle": "Marketplace de agentes — {siteName}", + "ogDescription": "Descubre e invoca agentes de IA y proyectos de agentes de código abierto a través de una API unificada.", + "heroTitle": "Marketplace de agentes", + "heroTagline": "Una API para acceder a todos los agentes.", + "heroSubtitle": "Descubre e invoca agentes de IA a través de una API unificada — descritos mediante AgentCards abiertas de A2A.", + "searchPlaceholder": "Buscar agentes por nombre o descripción…", + "search": "Buscar", + "all": "Todos", + "kindAgents": "Agentes", + "kindProjects": "Proyectos", + "scenarioFilter": "Escenario:", + "protocolFilter": "Protocolo:", + "pricingFilter": "Precio:", + "categoryFilter": "Categoría:", + "sortLabel": "Ordenar:", + "sortLatest": "Más recientes", + "sortStars": "Estrellas", + "sortPopular": "Populares", + "sortCalls": "Más invocados", + "sortRating": "Mejor valorados", + "pricingFree": "Gratis", + "pricingPerCall": "por invocación", + "pricingPerTask": "por tarea", + "pricingPerToken": "Por 1k tokens", + "count": "{count, plural, =0 {Ningún agente} one {# agente} other {# agentes}}", + "emptyTitle": "Aún no hay agentes que coincidan con tus filtros.", + "emptyCta": "Publica el primero →", + "prev": "← Anterior", + "next": "Siguiente →", + "pageOf": "Página {page} de {total}" + }, + "Components": { + "homeSearchPlaceholder": "Buscar skills por nombre, descripción o autor...", + "homeSearchButton": "Buscar", + "agentFree": "Gratis", + "agentPerCall": "{price}/invocación", + "agentPerTask": "{price}/tarea", + "agentPerToken": "{price}/1k tok", + "agentPriceFallbackCall": "invocación", + "agentPriceFallbackTask": "tarea", + "agentPriceFallbackToken": "token", + "agentBadgeProject": "proyecto", + "agentBadgeStreaming": "streaming", + "agentOpenSource": "código abierto", + "agentSelfHost": "autoalojar", + "agentSkills": "{count, plural, one {# skill} other {# skills}}", + "skillBy": "por {author}", + "skillLikes": "{count, number}" + }, + "Install": { + "metaTitle": "Instalar en Claude Code, Codex y OpenCode", + "title": "Instala TakoAPI en Claude Code, Codex y OpenCode", + "description": "Un solo comando instala la skill de TakoAPI en tu agente de programación — descubre e invoca agentes de IA a través de un gateway unificado y busca en el catálogo de skills de OpenClaw. Funciona con Claude Code, Codex y OpenCode.", + "stepRunInstallerName": "Ejecuta el instalador", + "stepRunInstallerText": "Ejecuta: curl -fsSL https://takoapi.com/install.sh | sh", + "stepUseAgentName": "Usa TakoAPI desde tu agente", + "stepUseAgentText": "Pídele a tu agente de programación que encuentre o invoque un agente de IA en TakoAPI.", + "heroBadge": "Un comando, tres agentes", + "heroTitle": "Instala TakoAPI en tu agente de programación", + "heroSubtitle": "Añade la skill de TakoAPI a Claude Code, Codex u OpenCode — y luego descubre e invoca cualquier agente de IA a través de un gateway unificado, directamente desde tu terminal.", + "whatTitle": "Qué hace el instalador", + "whatWritesSkill": "Escribe una única skill de TakoAPI con su propio espacio de nombres en el directorio de skills de cada agente — nunca edita tus archivos de configuración compartidos.", + "whatTeachesAgent": "Enseña a tu agente a invocar el registro de TakoAPI y el gateway por HTTP — sin dependencias adicionales ni servidor que ejecutar.", + "whatMcpServer": "¿Prefieres herramientas alojadas? Registra el servidor MCP de TakoAPI en su lugar — claude mcp add --transport http takoapi https://takoapi.com/mcp — que expone search_agents, get_agent, search_skills e invoke_agent como herramientas MCP nativas.", + "whatIdempotent": "Es idempotente (seguro de reejecutar) y totalmente reversible con --uninstall.", + "whatApiKey": "Para el gateway con medición, crea una clave de API en tu panel y expórtala como TAKO_KEY.", + "footnote": "¿En Windows o ya en Node? Usa npx takoapi-install. ¿Prefieres leer el script primero? Es shell plano en takoapi.com/install.sh." + }, + "InstallTabs": { + "universalNote": "Instala la skill de TakoAPI en Claude Code, Codex y OpenCode — detectados automáticamente. Seguro de reejecutar, sin root. En Windows o en Node, usa .", + "tablistLabel": "Agentes de programación", + "claudeCodeTagline": "La CLI de Anthropic", + "codexTagline": "La CLI de OpenAI", + "opencodeTagline": "opencode.ai", + "skillHeading": "Skill — enseña a tu agente a invocar TakoAPI", + "skillUniversalHint": "…o usa el comando universal de arriba — también cubre {name}.", + "writesHeading": "Escribe", + "howToUseHeading": "Cómo usarla", + "claudeCodeUse": "Se carga automáticamente — solo pídele a Claude que encuentre un agente en TakoAPI.", + "codexUse": "Invócala con $takoapi o selecciónala desde el menú /skills.", + "opencodeUse": "Ejecuta /takoapi o derívalo a @takoapi.", + "mcpHeading": "Servidor MCP — herramientas alojadas, nada que instalar", + "claudeCodeMcpHint": "Un solo comando. Añade --header \"Authorization: Bearer $TAKO_KEY\" para habilitar invoke_agent.", + "codexMcpHint": "Añade a ~/.codex/config.toml", + "opencodeMcpHint": "Combina en ~/.config/opencode/opencode.json", + "mcpToolsNote": "Añade herramientas: search_agents, get_agent, search_skills, invoke_agent.", + "uninstallHeading": "Desinstalar", + "uninstallNote": "Elimina solo los archivos propios de TakoAPI — nunca toca la configuración de tus otros agentes.", + "copy": "Copiar", + "copied": "Copiado" + }, + "SkillDetail": { + "notFoundMetaTitle": "Skill no encontrada", + "backToSkills": "Volver a skills", + "by": "por {author}", + "downloads": "Descargas", + "stars": "Estrellas", + "views": "Vistas", + "likes": "{count, plural, one {# me gusta} other {# me gusta}}", + "brief": "Resumen", + "description": "Descripción", + "whatThisSkillDoes": "Qué hace esta skill", + "whenToUseIt": "Cuándo usarla", + "exampleWorkflow": "Flujo de trabajo de ejemplo", + "workflowInput": "ENTRADA", + "workflowAgent": "AGENTE", + "workflowOutput": "SALIDA", + "requirements": "Requisitos", + "installation": "Instalación", + "clawHubCli": "CLI de ClawHub", + "openClawChat": "Chat de OpenClaw (pega esto en tu conversación)", + "links": "Enlaces", + "github": "GitHub", + "copyGithubUrl": "Copiar URL de GitHub", + "clawHub": "ClawHub", + "skillNotFound": "Skill no encontrada" + }, + "Skills": { + "metaTitle": "Explorar skills", + "metaDescription": "Explora miles de skills de OpenClaw para tu agente de programación en docenas de categorías — con búsqueda, filtrado y una tabla de tendencias.", + "ogTitle": "Explorar skills — {siteName}", + "ogDescription": "Miles de skills de OpenClaw para tu agente de programación.", + "heading": "Explorar skills", + "searchLabel": "Búsqueda: «{query}»", + "count": "{count, number} skills encontradas", + "sortLatest": "Más recientes", + "sortPopular": "Más populares", + "sortViews": "Más vistas", + "sortStars": "Más estrellas", + "agentAll": "Todos los agentes", + "agentClaudeCode": "Claude Code", + "agentCursor": "Cursor", + "agentWindsurf": "Windsurf", + "agentCodex": "Codex", + "agentAider": "Aider", + "agentCline": "Cline", + "agentCopilot": "Copilot", + "agentGeneric": "Genérico", + "all": "Todos", + "emptyTitle": "No se encontraron skills", + "emptyHint": "Prueba a ajustar tu búsqueda o filtros", + "pageOf": "Página {page} de {total}" + }, + "Trending": { + "metaTitle": "Skills en tendencia", + "metaDescription": "Las skills de OpenClaw más descargadas y con más me gusta en este momento — una tabla en vivo de lo que están instalando los agentes de programación.", + "ogTitle": "Skills en tendencia — {siteName}", + "ogDescription": "Una tabla en vivo de las skills de OpenClaw más populares.", + "title": "Skills en tendencia", + "subtitle": "Descubre las skills de OpenClaw más populares clasificadas por la comunidad", + "searchPlaceholder": "Buscar skills en tendencia…", + "categories": "Categorías", + "allCategories": "Todas las categorías", + "downloads": "Descargas", + "stars": "Estrellas", + "likes": "Me gusta", + "views": "Vistas", + "skill": "Skill", + "count": "{count, plural, =0 {Ninguna skill} one {# skill} other {# skills}}", + "countInCategory": "{count, plural, =0 {Ninguna skill} one {# skill} other {# skills}} en {category}", + "emptyTitle": "No se encontraron skills", + "emptySubtitle": "Prueba a ajustar tu búsqueda o filtros", + "byAuthor": "por {author}", + "showing": "Mostrando {from, number}–{to, number} de {total, number}", + "prev": "Anterior", + "next": "Siguiente" + }, + "Admin": { + "accessDenied": "Acceso denegado", + "accessDeniedDescription": "Necesitas privilegios de administrador para acceder a esta página.", + "goHome": "Ir al inicio", + "backToSite": "Volver al sitio", + "panelTitle": "Panel de administración", + "navDashboard": "Panel", + "navSkills": "Skills", + "navAgents": "Agentes", + "navCategories": "Categorías", + "navUsers": "Usuarios", + "navLogs": "Registros", + "dashboardTitle": "Panel", + "statTotalSkills": "Total de skills", + "statTotalUsers": "Total de usuarios", + "statCategories": "Categorías", + "statTotalLikes": "Total de me gusta", + "statTotalViews": "Total de vistas", + "statTotalDownloads": "Total de descargas", + "statPendingReview": "Pendientes de revisión", + "recentSkills": "Skills recientes", + "topSkillsByDownloads": "Skills con más descargas", + "viewAll": "Ver todo", + "byAuthor": "por {author}", + "statusApproved": "aprobada", + "statusPending": "pendiente", + "statusRejected": "rechazada", + "loading": "Cargando…", + "cancel": "Cancelar", + "save": "Guardar", + "saveChanges": "Guardar cambios", + "delete": "Eliminar", + "edit": "Editar", + "confirm": "Confirmar", + "preview": "Vista previa", + "agentsTitle": "Agentes", + "agentsSubtitle": "Revisa y modera los agentes enviados.", + "filterPending": "Pendientes", + "filterApproved": "Aprobados", + "filterRejected": "Rechazados", + "filterAll": "Todos", + "noAgentsInView": "No hay agentes en esta vista.", + "unknownPublisher": "desconocido", + "uncategorized": "sin categoría", + "agentMetaSkills": "{count, number} skills", + "noScenarios": "sin escenarios", + "reviewNoteLabel": "Nota: {note}", + "editScenarios": "Editar escenarios", + "actionApprove": "Aprobar", + "actionReject": "Rechazar", + "feature": "Destacar", + "unfeature": "Quitar de destacados", + "scenariosEditorHint": "场景 Escenarios — 点击切换 / pulsa para asignar", + "scenarioOption": "{nameZh} · {name}", + "selectedCount": "{count, number} seleccionados", + "rejectReasonPrompt": "Motivo del rechazo (opcional):", + "deleteAgentConfirm": "¿Eliminar este agente permanentemente?", + "skillsTitle": "Gestión de skills", + "searchSkillsPlaceholder": "Buscar skills...", + "allStatuses": "Todos los estados", + "filterStatusPending": "Pendientes", + "filterStatusApproved": "Aprobadas", + "filterStatusRejected": "Rechazadas", + "allCategories": "Todas las categorías", + "selectedLabel": "{count, number} seleccionadas", + "batchApprove": "Aprobar", + "batchReject": "Rechazar", + "batchFeature": "Destacar", + "batchDelete": "Eliminar", + "batchDeleteConfirm": "¿Eliminar {count, number} skill(s)? Esto no se puede deshacer.", + "colName": "Nombre", + "colAuthor": "Autor", + "colCategory": "Categoría", + "colStatus": "Estado", + "colDownloads": "Descargas", + "colLikes": "Me gusta", + "colViews": "Vistas", + "colCreated": "Creada", + "colActions": "Acciones", + "noSkillsFound": "No se encontraron skills.", + "showingRange": "Mostrando {from, number}–{to, number} de {total, number}", + "editSkillTitle": "Editar skill", + "fieldName": "Nombre", + "fieldAuthor": "Autor", + "fieldBrief": "Resumen", + "fieldStatus": "Estado", + "optionPending": "Pendiente", + "optionApproved": "Aprobada", + "optionRejected": "Rechazada", + "fieldFeatured": "Destacada", + "deleteSkillTitle": "Eliminar skill", + "deleteSkillConfirm": "¿Seguro que quieres eliminar {name}? Esta acción no se puede deshacer.", + "categoriesTitle": "Categorías", + "addCategory": "Añadir categoría", + "editCategoryTitle": "Editar categoría", + "newCategoryTitle": "Nueva categoría", + "fieldIcon": "Icono", + "fieldDescription": "Descripción", + "categoryNamePlaceholder": "p. ej. Análisis de datos", + "categoryIconPlaceholder": "p. ej. chart-bar o emoji", + "categoryDescriptionPlaceholder": "Descripción breve", + "nameRequired": "El nombre es obligatorio.", + "saveCategoryFailed": "No se pudo guardar la categoría", + "deleteCategoryFailed": "No se pudo eliminar la categoría", + "fetchCategoriesFailed": "No se pudieron obtener las categorías", + "deleteFailed": "La eliminación falló", + "somethingWentWrong": "Algo salió mal", + "update": "Actualizar", + "create": "Crear", + "colSlug": "Slug", + "colSkills": "Skills", + "colDescription": "Descripción", + "noCategoriesFound": "No se encontraron categorías. Añade una arriba.", + "deleting": "...", + "cannotDeleteHasSkills": "No se puede eliminar: tiene skills", + "categoriesTotal": "{count, number} {count, plural, one {categoría} other {categorías}} en total", + "usersTitle": "Usuarios", + "usersTotal": "{count, number} {count, plural, one {usuario} other {usuarios}} en total", + "searchUsersPlaceholder": "Buscar por nombre o correo...", + "colEmail": "Correo", + "colRole": "Rol", + "colProvider": "Proveedor", + "colJoined": "Registro", + "loadingUsers": "Cargando usuarios...", + "noUsersFound": "No se encontraron usuarios.", + "noName": "---", + "roleAdmin": "administrador", + "roleUser": "usuario", + "providerCredentials": "credenciales", + "demote": "Degradar", + "promote": "Ascender", + "demoteToUser": "Degradar a usuario", + "promoteToAdmin": "Ascender a administrador", + "logsTitle": "Registros de administración", + "logsTotal": "{count, number} {count, plural, one {entrada} other {entradas}} en total", + "colTimestamp": "Marca de tiempo", + "colAdmin": "Administrador", + "colAction": "Acción", + "colTargetType": "Tipo de objetivo", + "colTargetId": "ID de objetivo", + "colDetail": "Detalle", + "loadingLogs": "Cargando registros...", + "noLogsFound": "No se encontraron registros.", + "emptyDetail": "---", + "actionCreate": "crear", + "actionUpdate": "actualizar", + "actionDelete": "eliminar", + "actionApproveLog": "aprobar", + "actionRejectLog": "rechazar", + "actionRoleChange": "cambio de rol", + "targetSkill": "skill", + "targetAgent": "agente", + "targetCategory": "categoría", + "targetUser": "usuario" + }, + "Auth": { + "signInTitle": "Inicia sesión en TakoAPI", + "signInSubtitle": "Accede a tu panel de skills", + "signUpTitle": "Crea una cuenta", + "signUpSubtitle": "Únete a la comunidad de TakoAPI", + "continueWithGoogle": "Continuar con Google", + "continueWithApple": "Continuar con Apple", + "signUpWithGoogle": "Regístrate con Google", + "signUpWithApple": "Regístrate con Apple", + "or": "o", + "name": "Nombre", + "email": "Correo", + "password": "Contraseña", + "passwordHint": "Contraseña (mín. 8 caracteres)", + "signIn": "Iniciar sesión", + "signingIn": "Iniciando sesión...", + "createAccount": "Crear cuenta", + "creatingAccount": "Creando cuenta...", + "invalidCredentials": "Correo o contraseña no válidos", + "registrationFailed": "El registro falló", + "somethingWentWrong": "Algo salió mal", + "noAccount": "¿No tienes cuenta?", + "signUpLink": "Regístrate", + "haveAccount": "¿Ya tienes cuenta?", + "signInLink": "Inicia sesión" + }, + "Dashboard": { + "title": "Panel de desarrollador", + "signInPrompt": "Inicia sesión para gestionar claves de API y ver el uso.", + "signIn": "Iniciar sesión", + "description": "Gestiona claves de API y monitoriza el uso del gateway. Una clave, una factura, cualquier agente.", + "apiKeys": "Claves de API", + "createKey": "Crear clave", + "creating": "Creando…", + "copyKeyWarning": "Copia esta clave ahora — no se volverá a mostrar.", + "copy": "Copiar", + "copied": "Copiado", + "noKeys": "Aún no hay claves. Crea una para empezar a invocar agentes.", + "keyFallbackName": "clave", + "created": "creada el {date}", + "lastUsed": "último uso el {date}", + "neverUsed": "nunca usada", + "revoke": "Revocar", + "revokeConfirm": "¿Revocar esta clave? Las apps que la usen dejarán de funcionar.", + "quickstart": "Inicio rápido", + "usage": "Uso", + "totalCalls": "Total de invocaciones", + "agentsUsed": "Agentes usados", + "totalCount": "{count, number}", + "tableAgent": "Agente", + "tableProtocol": "Protocolo", + "tableStatus": "Estado", + "tableLatency": "Latencia", + "tableWhen": "Cuándo", + "noCalls": "Aún no hay invocaciones. Crea una clave e invoca un agente para ver el uso aquí." + }, + "Profile": { + "title": "Mi perfil", + "signInPrompt": "Inicia sesión para ver tu perfil.", + "signIn": "Iniciar sesión", + "submissions": "Envíos", + "likes": "Me gusta", + "views": "Vistas", + "statValue": "{count, number}", + "mySubmissions": "Mis envíos", + "submitNew": "Enviar nuevo", + "tab_all": "Todos", + "tab_approved": "Aprobados", + "tab_pending": "Pendientes", + "tab_rejected": "Rechazados", + "tabCount": "{count, number}", + "emptyTab": "No hay envíos en esta pestaña", + "submitFirst": "Envía tu primera skill", + "statusApproved": "Aprobada", + "statusPending": "Pendiente de revisión", + "statusRejected": "Rechazada", + "reviewerNote": "Nota del revisor:" + }, + "Submit": { + "title": "Enviar una skill", + "subtitle": "Comparte tu skill de OpenClaw con la comunidad", + "signInPrompt": "Inicia sesión para enviar skills.", + "signIn": "Iniciar sesión", + "skillSource": "Origen de la skill", + "githubUrl": "URL de GitHub", + "clawSkillsUrl": "URL de ClawSkills.sh", + "githubUrlPlaceholder": "https://github.com/username/repo", + "clawSkillsUrlPlaceholder": "https://clawskills.sh/skills/author-skillname", + "autoFill": "Autocompletar", + "fetching": "Obteniendo...", + "filled": "¡Completado!", + "skillName": "Nombre de la skill", + "skillNamePlaceholder": "p. ej. my-awesome-skill", + "category": "Categoría", + "selectCategory": "Selecciona una categoría", + "categoryOption": "{name} ({count})", + "brief": "Resumen", + "briefHelper": "- Resumen de una línea", + "briefPlaceholder": "Una descripción breve de lo que hace tu skill", + "skillDetails": "Detalles de la skill", + "skillDetailsHelper": "- Autocompletado desde el README", + "whatItDoes": "Qué hace esta skill", + "whatItDoesPlaceholder": "Explicación detallada de lo que hace esta skill, sus funciones y capacidades...", + "exampleWorkflow": "Flujo de trabajo de ejemplo", + "exampleWorkflowHelper": "- ENTRADA / pasos del AGENTE / SALIDA", + "exampleWorkflowPlaceholder": "ENTRADA\nEl usuario pide: Haz algo útil\n\nAGENTE\n1\nEjecuta `my-skill action` para realizar la tarea\n2\nVerifica el resultado\n\nSALIDA\nTarea completada con éxito", + "requirements": "Requisitos", + "requirementsPlaceholder": "- Node.js 18+\n- Clave de API del servicio X\n- etc.", + "submitSkill": "Enviar skill", + "submitting": "Enviando...", + "enterUrlFirst": "Introduce primero una URL", + "autoFillFailed": "El autocompletado falló", + "submitFailed": "No se pudo enviar", + "somethingWentWrong": "Algo salió mal" + }, + "SubmitAgent": { + "title": "Publicar un agente", + "signInPrompt": "Inicia sesión para publicar un agente.", + "signIn": "Iniciar sesión", + "intro": "Lista un agente invocable en el marketplace. Envía la URL de su AgentCard de A2A y analizaremos el resto, o complétalo manualmente.", + "tabUrl": "URL de AgentCard", + "tabManual": "Manual", + "cardUrlLabel": "URL de AgentCard", + "cardUrlPlaceholder": "https://your-agent.com/.well-known/agent-card.json", + "cardUrlHelp": "Obtenemos y validamos la AgentCard de A2A (nombre, endpoint, capacidades, skills).", + "nameLabel": "Nombre del agente", + "namePlaceholder": "p. ej. Weather Oracle", + "descriptionLabel": "Descripción", + "descriptionPlaceholder": "¿Qué hace este agente?", + "endpointLabel": "URL del endpoint", + "endpointPlaceholder": "https://your-agent.com/a2a", + "protocolsLabel": "Protocolos", + "protocolOpenAiCompat": "Compatible con OpenAI", + "categoryLabel": "Categoría", + "uncategorized": "Sin categoría", + "pricingLabel": "Precio", + "pricingFree": "Gratis", + "pricingPerCall": "Por invocación", + "pricingPerTask": "Por tarea", + "pricingPerToken": "Por 1k tokens", + "unitPriceLabel": "Precio unitario (USD)", + "unitPricePlaceholder": "0.002", + "homepageLabel": "Página principal", + "optional": "opcional", + "homepagePlaceholder": "https://your-agent.com", + "submit": "Publicar agente", + "submitting": "Enviando…", + "submitFailed": "No se pudo enviar", + "somethingWentWrong": "Algo salió mal", + "successTitle": "Enviado 🎉", + "pendingReview": "{name} está ahora pendiente de revisión.", + "successDetail": "Verificaremos la AgentCard y la publicaremos en el marketplace una vez aprobada.", + "backToMarketplace": "← Volver al marketplace" + } +} diff --git a/messages/fr.json b/messages/fr.json new file mode 100644 index 000000000..fdf09f958 --- /dev/null +++ b/messages/fr.json @@ -0,0 +1,593 @@ +{ + "Metadata": { + "tagline": "Une seule API pour accéder à tous les agents", + "description": "Découvrez et invoquez des agents IA via une API unifiée — un OpenRouter pour les agents. Parcourez un annuaire de centaines de projets d'agents open source et de milliers de skills OpenClaw pour votre agent de code." + }, + "LocaleSwitcher": { + "label": "Langue" + }, + "Header": { + "searchPlaceholder": "Rechercher des agents...", + "agents": "Agents", + "skills": "Skills", + "trending": "Tendances", + "publish": "Publier", + "publishAgent": "Publier un agent", + "account": "Compte", + "mySkills": "Mes skills", + "apiUsage": "API et utilisation", + "adminPanel": "Panneau d'administration", + "signIn": "Se connecter", + "signOut": "Se déconnecter" + }, + "Footer": { + "tagline": "Une seule API pour accéder à tous les agents — plus des milliers de skills OpenClaw pour votre agent de code.", + "agentRegistry": "Registre d'agents :", + "platform": "Plateforme", + "resources": "Ressources", + "installInAgent": "Installer dans votre agent", + "browseAgents": "Parcourir les agents", + "publishAnAgent": "Publier un agent", + "developerDashboard": "Tableau de bord développeur", + "browseSkills": "Parcourir les skills", + "awesomeList": "Awesome List", + "clawHub": "ClawHub", + "copyright": "© {year} TakoAPI. Conçu pour la communauté OpenClaw." + }, + "Home": { + "heroTitle": "Une seule API pour accéder à tous les agents", + "heroSubtitle": "Découvrez et invoquez {agents, number} agents IA via une API unifiée — plus {skills, number} skills pour votre agent de code.", + "browseAgents": "Parcourir les agents", + "publishAnAgent": "Publier un agent", + "agentRegistry": "Registre d'agents :", + "browseByScenario": "Parcourir par scénario", + "allAgents": "Tous les agents", + "featuredAgents": "Agents en vedette", + "browseAll": "Tout parcourir", + "popularProjects": "Projets open source populaires", + "selfHostable": "{count, number} auto-hébergeable(s)", + "skillTitle": "Skill TakoAPI pour OpenClaw", + "official": "Officiel", + "skillDescription": "Recherchez, installez et gérez les skills OpenClaw par simple conversation — propulsé par la marketplace TakoAPI.", + "viewOnGithub": "Voir sur GitHub", + "askAgent": "ou demandez à votre agent : « Installe le skill TakoAPI »", + "usingCodingAgent": "Vous utilisez Claude Code, Codex ou OpenCode ?", + "oneCommandInstall": "Installation en une commande", + "mustHaveSkills": "Skills incontournables", + "viewRankings": "Voir le classement", + "categories": "Catégories", + "viewAll": "Tout voir", + "moreCategories": "{count, plural, one {+# catégorie de plus} other {+# catégories de plus}}", + "latestSkills": "Derniers skills" + }, + "Scenarios": { + "frontend": "Frontend", + "backend": "Backend", + "coding": "Code et développement", + "agent-frameworks": "Frameworks d'agents", + "devops": "DevOps et automatisation", + "data-analysis": "Données et analytique", + "product-design": "Conception produit", + "creative": "Création et médias", + "presentations": "Présentations et documents", + "investing": "Investissement en marchés publics", + "venture-analysis": "Capital-risque et modèle économique", + "marketing": "Marketing et croissance", + "sales": "Ventes et CRM", + "customer-support": "Support client", + "research": "Recherche et exploration", + "writing": "Rédaction et contenu", + "productivity": "Productivité et assistant" + }, + "AgentDetail": { + "notFound": "Agent introuvable", + "backToMarketplace": "← Marketplace des agents", + "openSourceProject": "Projet open source", + "signedCard": "Carte signée", + "verifiedPublisher": "Éditeur vérifié", + "by": "par {name}", + "publisherOpenSource": "open source", + "publisherUnknown": "inconnu", + "scenario": "Scénario :", + "stars": "{count, number} étoiles", + "selfHost": "Auto-héberger", + "streaming": "Streaming", + "pushNotifications": "Notifications push", + "skills": "Skills", + "skillsCount": "({count, number})", + "noSkillsProject": "Un projet open source — explorez le code et auto-hébergez-le depuis GitHub.", + "noSkillsHosted": "Cet agent n'a pas déclaré de skills structurés dans son AgentCard.", + "inputMode": "entrée : {mode}", + "outputMode": "sortie : {mode}", + "openSourceProjectHeading": "Projet open source", + "openSourceProjectNote": "Auto-hébergez-le ou explorez le code. Non invocable via la passerelle TakoAPI.", + "viewOnGithub": "Voir sur GitHub", + "integration": "Intégration", + "endpoint": "Endpoint", + "agentCard": "AgentCard", + "homepage": "Page d'accueil", + "callThroughTakoApi": "Invoquez-le via TakoAPI", + "gatewayPhase2": "Passerelle unifiée — l'invocation arrive en phase 2.", + "breadcrumbHome": "Accueil", + "breadcrumbMarketplace": "Marketplace des agents" + }, + "Agents": { + "metaTitle": "Marketplace des agents", + "metaDescription": "Une seule API pour accéder à tous les agents. Parcourez et invoquez des agents IA et des centaines de projets d'agents open source via une API unifiée — décrits par des AgentCards A2A ouvertes.", + "ogTitle": "Marketplace des agents — {siteName}", + "ogDescription": "Découvrez et invoquez des agents IA et des projets d'agents open source via une API unifiée.", + "heroTitle": "Marketplace des agents", + "heroTagline": "Une seule API pour accéder à tous les agents.", + "heroSubtitle": "Découvrez et invoquez des agents IA via une API unifiée — décrits par des AgentCards A2A ouvertes.", + "searchPlaceholder": "Rechercher des agents par nom ou description…", + "search": "Rechercher", + "all": "Tous", + "kindAgents": "Agents", + "kindProjects": "Projets", + "scenarioFilter": "Scénario :", + "protocolFilter": "Protocole :", + "pricingFilter": "Tarification :", + "categoryFilter": "Catégorie :", + "sortLabel": "Trier :", + "sortLatest": "Plus récents", + "sortStars": "Étoiles", + "sortPopular": "Populaires", + "sortCalls": "Les plus appelés", + "sortRating": "Les mieux notés", + "pricingFree": "Gratuit", + "pricingPerCall": "par appel", + "pricingPerTask": "par tâche", + "pricingPerToken": "Par 1k tokens", + "count": "{count, plural, =0 {Aucun agent} one {# agent} other {# agents}}", + "emptyTitle": "Aucun agent ne correspond encore à vos filtres.", + "emptyCta": "Publiez le premier →", + "prev": "← Précédent", + "next": "Suivant →", + "pageOf": "Page {page} sur {total}" + }, + "Components": { + "homeSearchPlaceholder": "Rechercher des skills par nom, description ou auteur...", + "homeSearchButton": "Rechercher", + "agentFree": "Gratuit", + "agentPerCall": "{price}/appel", + "agentPerTask": "{price}/tâche", + "agentPerToken": "{price}/1k tok", + "agentPriceFallbackCall": "appel", + "agentPriceFallbackTask": "tâche", + "agentPriceFallbackToken": "token", + "agentBadgeProject": "projet", + "agentBadgeStreaming": "streaming", + "agentOpenSource": "open source", + "agentSelfHost": "auto-héberger", + "agentSkills": "{count, plural, one {# skill} other {# skills}}", + "skillBy": "par {author}", + "skillLikes": "{count, number}" + }, + "Install": { + "metaTitle": "Installer dans Claude Code, Codex et OpenCode", + "title": "Installer TakoAPI dans Claude Code, Codex et OpenCode", + "description": "Une seule commande installe le skill TakoAPI dans votre agent de code — découvrez et invoquez des agents IA via une passerelle unifiée, et explorez le catalogue de skills OpenClaw. Compatible avec Claude Code, Codex et OpenCode.", + "stepRunInstallerName": "Lancer le programme d'installation", + "stepRunInstallerText": "Exécutez : curl -fsSL https://takoapi.com/install.sh | sh", + "stepUseAgentName": "Utiliser TakoAPI depuis votre agent", + "stepUseAgentText": "Demandez à votre agent de code de trouver ou d'invoquer un agent IA sur TakoAPI.", + "heroBadge": "Une commande, trois agents", + "heroTitle": "Installez TakoAPI dans votre agent de code", + "heroSubtitle": "Déposez le skill TakoAPI dans Claude Code, Codex ou OpenCode — puis découvrez et invoquez n'importe quel agent IA via une passerelle unifiée, directement depuis votre terminal.", + "whatTitle": "Ce que fait le programme d'installation", + "whatWritesSkill": "Écrit un unique skill TakoAPI sous espace de noms dans le répertoire de skills propre à chaque agent — il ne modifie jamais vos fichiers de configuration partagés.", + "whatTeachesAgent": "Apprend à votre agent à appeler le registre TakoAPI et la passerelle via HTTP — aucune dépendance supplémentaire, aucun serveur à exécuter.", + "whatMcpServer": "Vous préférez des outils hébergés ? Enregistrez plutôt le serveur MCP TakoAPI — claude mcp add --transport http takoapi https://takoapi.com/mcp — qui expose search_agents, get_agent, search_skills et invoke_agent comme outils MCP natifs.", + "whatIdempotent": "Est idempotent (sûr à réexécuter) et entièrement réversible avec --uninstall.", + "whatApiKey": "Pour la passerelle facturée à l'usage, créez une clé API dans votre tableau de bord et exportez-la dans TAKO_KEY.", + "footnote": "Sous Windows ou déjà sous Node ? Utilisez npx takoapi-install. Vous préférez lire le script d'abord ? Il s'agit de shell simple, sur takoapi.com/install.sh." + }, + "InstallTabs": { + "universalNote": "Installe le skill TakoAPI dans Claude Code, Codex et OpenCode — détectés automatiquement. Sûr à réexécuter, sans root. Sous Windows ou sous Node, utilisez .", + "tablistLabel": "Agents de code", + "claudeCodeTagline": "La CLI d'Anthropic", + "codexTagline": "La CLI d'OpenAI", + "opencodeTagline": "opencode.ai", + "skillHeading": "Skill — apprend à votre agent à appeler TakoAPI", + "skillUniversalHint": "…ou utilisez la commande universelle ci-dessus — elle couvre aussi {name}.", + "writesHeading": "Écrit", + "howToUseHeading": "Comment l'utiliser", + "claudeCodeUse": "Se charge automatiquement — demandez simplement à Claude de trouver un agent sur TakoAPI.", + "codexUse": "Invoquez avec $takoapi, ou choisissez-le dans le menu /skills.", + "opencodeUse": "Exécutez /takoapi , ou transmettez à @takoapi.", + "mcpHeading": "Serveur MCP — outils hébergés, rien à installer", + "claudeCodeMcpHint": "Une seule commande. Ajoutez --header \"Authorization: Bearer $TAKO_KEY\" pour activer invoke_agent.", + "codexMcpHint": "Ajoutez à ~/.codex/config.toml", + "opencodeMcpHint": "Fusionnez dans ~/.config/opencode/opencode.json", + "mcpToolsNote": "Ajoute les outils : search_agents, get_agent, search_skills, invoke_agent.", + "uninstallHeading": "Désinstaller", + "uninstallNote": "Supprime uniquement les fichiers propres à TakoAPI — il ne touche jamais à la configuration de vos autres agents.", + "copy": "Copier", + "copied": "Copié" + }, + "SkillDetail": { + "notFoundMetaTitle": "Skill introuvable", + "backToSkills": "Retour aux skills", + "by": "par {author}", + "downloads": "Téléchargements", + "stars": "Étoiles", + "views": "Vues", + "likes": "{count, plural, one {# mention J'aime} other {# mentions J'aime}}", + "brief": "Résumé", + "description": "Description", + "whatThisSkillDoes": "Ce que fait ce skill", + "whenToUseIt": "Quand l'utiliser", + "exampleWorkflow": "Exemple de workflow", + "workflowInput": "ENTRÉE", + "workflowAgent": "AGENT", + "workflowOutput": "SORTIE", + "requirements": "Prérequis", + "installation": "Installation", + "clawHubCli": "CLI ClawHub", + "openClawChat": "OpenClaw Chat (collez ceci dans votre conversation)", + "links": "Liens", + "github": "GitHub", + "copyGithubUrl": "Copier l'URL GitHub", + "clawHub": "ClawHub", + "skillNotFound": "Skill introuvable" + }, + "Skills": { + "metaTitle": "Parcourir les skills", + "metaDescription": "Parcourez des milliers de skills OpenClaw pour votre agent de code, répartis dans des dizaines de catégories — avec recherche, filtres et un classement des tendances.", + "ogTitle": "Parcourir les skills — {siteName}", + "ogDescription": "Des milliers de skills OpenClaw pour votre agent de code.", + "heading": "Parcourir les skills", + "searchLabel": "Recherche : « {query} »", + "count": "{count, number} skills trouvés", + "sortLatest": "Plus récents", + "sortPopular": "Les plus populaires", + "sortViews": "Les plus vus", + "sortStars": "Les plus étoilés", + "agentAll": "Tous les agents", + "agentClaudeCode": "Claude Code", + "agentCursor": "Cursor", + "agentWindsurf": "Windsurf", + "agentCodex": "Codex", + "agentAider": "Aider", + "agentCline": "Cline", + "agentCopilot": "Copilot", + "agentGeneric": "Générique", + "all": "Tous", + "emptyTitle": "Aucun skill trouvé", + "emptyHint": "Essayez d'ajuster votre recherche ou vos filtres", + "pageOf": "Page {page} sur {total}" + }, + "Trending": { + "metaTitle": "Skills tendance", + "metaDescription": "Les skills OpenClaw les plus téléchargés et les plus appréciés en ce moment — un classement en direct de ce que les agents de code installent.", + "ogTitle": "Skills tendance — {siteName}", + "ogDescription": "Un classement en direct des skills OpenClaw les plus populaires.", + "title": "Skills tendance", + "subtitle": "Découvrez les skills OpenClaw les plus populaires, classés par la communauté", + "searchPlaceholder": "Rechercher des skills tendance…", + "categories": "Catégories", + "allCategories": "Toutes les catégories", + "downloads": "Téléchargements", + "stars": "Étoiles", + "likes": "Mentions J'aime", + "views": "Vues", + "skill": "Skill", + "count": "{count, plural, =0 {Aucun skill} one {# skill} other {# skills}}", + "countInCategory": "{count, plural, =0 {Aucun skill} one {# skill} other {# skills}} dans {category}", + "emptyTitle": "Aucun skill trouvé", + "emptySubtitle": "Essayez d'ajuster votre recherche ou vos filtres", + "byAuthor": "par {author}", + "showing": "Affichage de {from, number} à {to, number} sur {total, number}", + "prev": "Précédent", + "next": "Suivant" + }, + "Admin": { + "accessDenied": "Accès refusé", + "accessDeniedDescription": "Vous avez besoin de privilèges administrateur pour accéder à cette page.", + "goHome": "Aller à l'accueil", + "backToSite": "Retour au site", + "panelTitle": "Panneau d'administration", + "navDashboard": "Tableau de bord", + "navSkills": "Skills", + "navAgents": "Agents", + "navCategories": "Catégories", + "navUsers": "Utilisateurs", + "navLogs": "Journaux", + "dashboardTitle": "Tableau de bord", + "statTotalSkills": "Total des skills", + "statTotalUsers": "Total des utilisateurs", + "statCategories": "Catégories", + "statTotalLikes": "Total des mentions J'aime", + "statTotalViews": "Total des vues", + "statTotalDownloads": "Total des téléchargements", + "statPendingReview": "En attente de validation", + "recentSkills": "Skills récents", + "topSkillsByDownloads": "Top des skills par téléchargements", + "viewAll": "Tout voir", + "byAuthor": "par {author}", + "statusApproved": "approuvé", + "statusPending": "en attente", + "statusRejected": "rejeté", + "loading": "Chargement…", + "cancel": "Annuler", + "save": "Enregistrer", + "saveChanges": "Enregistrer les modifications", + "delete": "Supprimer", + "edit": "Modifier", + "confirm": "Confirmer", + "preview": "Aperçu", + "agentsTitle": "Agents", + "agentsSubtitle": "Examinez et modérez les agents soumis.", + "filterPending": "En attente", + "filterApproved": "Approuvés", + "filterRejected": "Rejetés", + "filterAll": "Tous", + "noAgentsInView": "Aucun agent dans cette vue.", + "unknownPublisher": "inconnu", + "uncategorized": "sans catégorie", + "agentMetaSkills": "{count, number} skills", + "noScenarios": "aucun scénario", + "reviewNoteLabel": "Note : {note}", + "editScenarios": "Modifier les scénarios", + "actionApprove": "Approuver", + "actionReject": "Rejeter", + "feature": "Mettre en vedette", + "unfeature": "Retirer de la vedette", + "scenariosEditorHint": "场景 Scénarios — 点击切换 / cliquez pour assigner", + "scenarioOption": "{nameZh} · {name}", + "selectedCount": "{count, number} sélectionné(s)", + "rejectReasonPrompt": "Motif du rejet (facultatif) :", + "deleteAgentConfirm": "Supprimer définitivement cet agent ?", + "skillsTitle": "Gestion des skills", + "searchSkillsPlaceholder": "Rechercher des skills...", + "allStatuses": "Tous les statuts", + "filterStatusPending": "En attente", + "filterStatusApproved": "Approuvés", + "filterStatusRejected": "Rejetés", + "allCategories": "Toutes les catégories", + "selectedLabel": "{count, number} sélectionné(s)", + "batchApprove": "Approuver", + "batchReject": "Rejeter", + "batchFeature": "Mettre en vedette", + "batchDelete": "Supprimer", + "batchDeleteConfirm": "Supprimer {count, number} skill(s) ? Cette action est irréversible.", + "colName": "Nom", + "colAuthor": "Auteur", + "colCategory": "Catégorie", + "colStatus": "Statut", + "colDownloads": "Téléchargements", + "colLikes": "Mentions J'aime", + "colViews": "Vues", + "colCreated": "Créé le", + "colActions": "Actions", + "noSkillsFound": "Aucun skill trouvé.", + "showingRange": "Affichage de {from, number} à {to, number} sur {total, number}", + "editSkillTitle": "Modifier le skill", + "fieldName": "Nom", + "fieldAuthor": "Auteur", + "fieldBrief": "Résumé", + "fieldStatus": "Statut", + "optionPending": "En attente", + "optionApproved": "Approuvé", + "optionRejected": "Rejeté", + "fieldFeatured": "En vedette", + "deleteSkillTitle": "Supprimer le skill", + "deleteSkillConfirm": "Voulez-vous vraiment supprimer {name} ? Cette action est irréversible.", + "categoriesTitle": "Catégories", + "addCategory": "Ajouter une catégorie", + "editCategoryTitle": "Modifier la catégorie", + "newCategoryTitle": "Nouvelle catégorie", + "fieldIcon": "Icône", + "fieldDescription": "Description", + "categoryNamePlaceholder": "ex. Analyse de données", + "categoryIconPlaceholder": "ex. chart-bar ou emoji", + "categoryDescriptionPlaceholder": "Description courte", + "nameRequired": "Le nom est obligatoire.", + "saveCategoryFailed": "Échec de l'enregistrement de la catégorie", + "deleteCategoryFailed": "Échec de la suppression de la catégorie", + "fetchCategoriesFailed": "Échec de la récupération des catégories", + "deleteFailed": "Échec de la suppression", + "somethingWentWrong": "Une erreur s'est produite", + "update": "Mettre à jour", + "create": "Créer", + "colSlug": "Slug", + "colSkills": "Skills", + "colDescription": "Description", + "noCategoriesFound": "Aucune catégorie trouvée. Ajoutez-en une ci-dessus.", + "deleting": "...", + "cannotDeleteHasSkills": "Suppression impossible : contient des skills", + "categoriesTotal": "{count, number} {count, plural, one {catégorie} other {catégories}} au total", + "usersTitle": "Utilisateurs", + "usersTotal": "{count, number} {count, plural, one {utilisateur} other {utilisateurs}} au total", + "searchUsersPlaceholder": "Rechercher par nom ou e-mail...", + "colEmail": "E-mail", + "colRole": "Rôle", + "colProvider": "Fournisseur", + "colJoined": "Inscrit le", + "loadingUsers": "Chargement des utilisateurs...", + "noUsersFound": "Aucun utilisateur trouvé.", + "noName": "---", + "roleAdmin": "admin", + "roleUser": "utilisateur", + "providerCredentials": "identifiants", + "demote": "Rétrograder", + "promote": "Promouvoir", + "demoteToUser": "Rétrograder en utilisateur", + "promoteToAdmin": "Promouvoir administrateur", + "logsTitle": "Journaux d'administration", + "logsTotal": "{count, number} {count, plural, one {entrée} other {entrées}} au total", + "colTimestamp": "Horodatage", + "colAdmin": "Admin", + "colAction": "Action", + "colTargetType": "Type de cible", + "colTargetId": "ID de la cible", + "colDetail": "Détail", + "loadingLogs": "Chargement des journaux...", + "noLogsFound": "Aucun journal trouvé.", + "emptyDetail": "---", + "actionCreate": "création", + "actionUpdate": "mise à jour", + "actionDelete": "suppression", + "actionApproveLog": "approbation", + "actionRejectLog": "rejet", + "actionRoleChange": "changement de rôle", + "targetSkill": "skill", + "targetAgent": "agent", + "targetCategory": "catégorie", + "targetUser": "utilisateur" + }, + "Auth": { + "signInTitle": "Se connecter à TakoAPI", + "signInSubtitle": "Accédez à votre tableau de bord de skills", + "signUpTitle": "Créer un compte", + "signUpSubtitle": "Rejoignez la communauté TakoAPI", + "continueWithGoogle": "Continuer avec Google", + "continueWithApple": "Continuer avec Apple", + "signUpWithGoogle": "S'inscrire avec Google", + "signUpWithApple": "S'inscrire avec Apple", + "or": "ou", + "name": "Nom", + "email": "E-mail", + "password": "Mot de passe", + "passwordHint": "Mot de passe (8 caractères minimum)", + "signIn": "Se connecter", + "signingIn": "Connexion...", + "createAccount": "Créer un compte", + "creatingAccount": "Création du compte...", + "invalidCredentials": "E-mail ou mot de passe incorrect", + "registrationFailed": "Échec de l'inscription", + "somethingWentWrong": "Une erreur s'est produite", + "noAccount": "Vous n'avez pas de compte ?", + "signUpLink": "S'inscrire", + "haveAccount": "Vous avez déjà un compte ?", + "signInLink": "Se connecter" + }, + "Dashboard": { + "title": "Tableau de bord développeur", + "signInPrompt": "Connectez-vous pour gérer vos clés API et consulter votre utilisation.", + "signIn": "Se connecter", + "description": "Gérez vos clés API et surveillez l'utilisation de la passerelle. Une clé, une facture, tous les agents.", + "apiKeys": "Clés API", + "createKey": "Créer une clé", + "creating": "Création…", + "copyKeyWarning": "Copiez cette clé maintenant — elle ne sera plus affichée.", + "copy": "Copier", + "copied": "Copié", + "noKeys": "Aucune clé pour l'instant. Créez-en une pour commencer à invoquer des agents.", + "keyFallbackName": "clé", + "created": "créée le {date}", + "lastUsed": "dernière utilisation le {date}", + "neverUsed": "jamais utilisée", + "revoke": "Révoquer", + "revokeConfirm": "Révoquer cette clé ? Les applications qui l'utilisent cesseront de fonctionner.", + "quickstart": "Démarrage rapide", + "usage": "Utilisation", + "totalCalls": "Total des appels", + "agentsUsed": "Agents utilisés", + "totalCount": "{count, number}", + "tableAgent": "Agent", + "tableProtocol": "Protocole", + "tableStatus": "Statut", + "tableLatency": "Latence", + "tableWhen": "Quand", + "noCalls": "Aucun appel pour l'instant. Créez une clé et invoquez un agent pour voir l'utilisation ici." + }, + "Profile": { + "title": "Mon profil", + "signInPrompt": "Veuillez vous connecter pour consulter votre profil.", + "signIn": "Se connecter", + "submissions": "Soumissions", + "likes": "Mentions J'aime", + "views": "Vues", + "statValue": "{count, number}", + "mySubmissions": "Mes soumissions", + "submitNew": "Soumettre", + "tab_all": "Toutes", + "tab_approved": "Approuvées", + "tab_pending": "En attente", + "tab_rejected": "Rejetées", + "tabCount": "{count, number}", + "emptyTab": "Aucune soumission dans cet onglet", + "submitFirst": "Soumettez votre premier skill", + "statusApproved": "Approuvé", + "statusPending": "En attente de validation", + "statusRejected": "Rejeté", + "reviewerNote": "Note du relecteur :" + }, + "Submit": { + "title": "Soumettre un skill", + "subtitle": "Partagez votre skill OpenClaw avec la communauté", + "signInPrompt": "Veuillez vous connecter pour soumettre des skills.", + "signIn": "Se connecter", + "skillSource": "Source du skill", + "githubUrl": "URL GitHub", + "clawSkillsUrl": "URL ClawSkills.sh", + "githubUrlPlaceholder": "https://github.com/username/repo", + "clawSkillsUrlPlaceholder": "https://clawskills.sh/skills/author-skillname", + "autoFill": "Remplissage automatique", + "fetching": "Récupération...", + "filled": "Rempli !", + "skillName": "Nom du skill", + "skillNamePlaceholder": "ex. my-awesome-skill", + "category": "Catégorie", + "selectCategory": "Sélectionnez une catégorie", + "categoryOption": "{name} ({count})", + "brief": "Résumé", + "briefHelper": "- Résumé en une ligne", + "briefPlaceholder": "Une courte description de ce que fait votre skill", + "skillDetails": "Détails du skill", + "skillDetailsHelper": "- Rempli automatiquement à partir du README", + "whatItDoes": "Ce que fait ce skill", + "whatItDoesPlaceholder": "Explication détaillée de ce que fait ce skill, de ses fonctionnalités et de ses capacités...", + "exampleWorkflow": "Exemple de workflow", + "exampleWorkflowHelper": "- ENTRÉE / étapes AGENT / SORTIE", + "exampleWorkflowPlaceholder": "ENTRÉE\nL'utilisateur demande : Faire quelque chose d'utile\n\nAGENT\n1\nExécuter `my-skill action` pour réaliser la tâche\n2\nVérifier le résultat\n\nSORTIE\nTâche réalisée avec succès", + "requirements": "Prérequis", + "requirementsPlaceholder": "- Node.js 18+\n- Clé API du service X\n- etc.", + "submitSkill": "Soumettre le skill", + "submitting": "Soumission...", + "enterUrlFirst": "Veuillez d'abord saisir une URL", + "autoFillFailed": "Échec du remplissage automatique", + "submitFailed": "Échec de la soumission", + "somethingWentWrong": "Une erreur s'est produite" + }, + "SubmitAgent": { + "title": "Publier un agent", + "signInPrompt": "Veuillez vous connecter pour publier un agent.", + "signIn": "Se connecter", + "intro": "Référencez un agent invocable sur la marketplace. Soumettez l'URL de son AgentCard A2A et nous analyserons le reste, ou saisissez-le manuellement.", + "tabUrl": "URL de l'AgentCard", + "tabManual": "Manuel", + "cardUrlLabel": "URL de l'AgentCard", + "cardUrlPlaceholder": "https://your-agent.com/.well-known/agent-card.json", + "cardUrlHelp": "Nous récupérons et validons l'AgentCard A2A (nom, endpoint, capacités, skills).", + "nameLabel": "Nom de l'agent", + "namePlaceholder": "ex. Weather Oracle", + "descriptionLabel": "Description", + "descriptionPlaceholder": "Que fait cet agent ?", + "endpointLabel": "URL de l'endpoint", + "endpointPlaceholder": "https://your-agent.com/a2a", + "protocolsLabel": "Protocoles", + "protocolOpenAiCompat": "Compatible OpenAI", + "categoryLabel": "Catégorie", + "uncategorized": "Sans catégorie", + "pricingLabel": "Tarification", + "pricingFree": "Gratuit", + "pricingPerCall": "Par appel", + "pricingPerTask": "Par tâche", + "pricingPerToken": "Par 1k tokens", + "unitPriceLabel": "Prix unitaire (USD)", + "unitPricePlaceholder": "0.002", + "homepageLabel": "Page d'accueil", + "optional": "facultatif", + "homepagePlaceholder": "https://your-agent.com", + "submit": "Publier l'agent", + "submitting": "Soumission…", + "submitFailed": "Échec de la soumission", + "somethingWentWrong": "Une erreur s'est produite", + "successTitle": "Soumis 🎉", + "pendingReview": "{name} est maintenant en attente de validation.", + "successDetail": "Nous vérifierons l'AgentCard et le publierons sur la marketplace une fois approuvé.", + "backToMarketplace": "← Retour à la marketplace" + } +} diff --git a/messages/hi.json b/messages/hi.json new file mode 100644 index 000000000..bebaaaf82 --- /dev/null +++ b/messages/hi.json @@ -0,0 +1,593 @@ +{ + "Metadata": { + "tagline": "सभी एजेंट्स तक पहुँचने के लिए एक API", + "description": "एक एकीकृत API के ज़रिए AI एजेंट्स खोजें और इनवोक करें — एजेंट्स के लिए OpenRouter जैसा। सैकड़ों ओपन-सोर्स एजेंट प्रोजेक्ट्स और अपने कोडिंग एजेंट के लिए हज़ारों OpenClaw स्किल्स की डायरेक्टरी ब्राउज़ करें।" + }, + "LocaleSwitcher": { + "label": "भाषा" + }, + "Header": { + "searchPlaceholder": "एजेंट्स खोजें...", + "agents": "एजेंट्स", + "skills": "स्किल्स", + "trending": "ट्रेंडिंग", + "publish": "पब्लिश करें", + "publishAgent": "एजेंट पब्लिश करें", + "account": "अकाउंट", + "mySkills": "मेरी स्किल्स", + "apiUsage": "API और उपयोग", + "adminPanel": "एडमिन पैनल", + "signIn": "साइन इन करें", + "signOut": "साइन आउट करें" + }, + "Footer": { + "tagline": "सभी एजेंट्स तक पहुँचने के लिए एक API — साथ ही अपने कोडिंग एजेंट के लिए हज़ारों OpenClaw स्किल्स।", + "agentRegistry": "एजेंट रजिस्ट्री:", + "platform": "प्लेटफ़ॉर्म", + "resources": "संसाधन", + "installInAgent": "अपने एजेंट में इंस्टॉल करें", + "browseAgents": "एजेंट्स ब्राउज़ करें", + "publishAnAgent": "एजेंट पब्लिश करें", + "developerDashboard": "डेवलपर डैशबोर्ड", + "browseSkills": "स्किल्स ब्राउज़ करें", + "awesomeList": "Awesome सूची", + "clawHub": "ClawHub", + "copyright": "© {year} TakoAPI. OpenClaw समुदाय के लिए बनाया गया।" + }, + "Home": { + "heroTitle": "सभी एजेंट्स तक पहुँचने के लिए एक API", + "heroSubtitle": "एक एकीकृत API के ज़रिए {agents, number} AI एजेंट्स खोजें और इनवोक करें — साथ ही अपने कोडिंग एजेंट के लिए {skills, number} स्किल्स।", + "browseAgents": "एजेंट्स ब्राउज़ करें", + "publishAnAgent": "एजेंट पब्लिश करें", + "agentRegistry": "एजेंट रजिस्ट्री:", + "browseByScenario": "परिदृश्य अनुसार ब्राउज़ करें", + "allAgents": "सभी एजेंट्स", + "featuredAgents": "फ़ीचर्ड एजेंट्स", + "browseAll": "सभी ब्राउज़ करें", + "popularProjects": "लोकप्रिय ओपन-सोर्स प्रोजेक्ट्स", + "selfHostable": "{count, number} सेल्फ़-होस्टेबल", + "skillTitle": "OpenClaw के लिए TakoAPI स्किल", + "official": "आधिकारिक", + "skillDescription": "स्वाभाविक बातचीत के ज़रिए OpenClaw स्किल्स खोजें, इंस्टॉल करें और मैनेज करें — TakoAPI मार्केटप्लेस द्वारा संचालित।", + "viewOnGithub": "GitHub पर देखें", + "askAgent": "या अपने एजेंट से कहें: \"TakoAPI स्किल इंस्टॉल करो\"", + "usingCodingAgent": "Claude Code, Codex या OpenCode इस्तेमाल कर रहे हैं?", + "oneCommandInstall": "एक-कमांड इंस्टॉल", + "mustHaveSkills": "ज़रूरी स्किल्स", + "viewRankings": "रैंकिंग देखें", + "categories": "श्रेणियाँ", + "viewAll": "सभी देखें", + "moreCategories": "{count, plural, one {+# और श्रेणी} other {+# और श्रेणियाँ}}", + "latestSkills": "नवीनतम स्किल्स" + }, + "Scenarios": { + "frontend": "फ़्रंटएंड", + "backend": "बैकएंड", + "coding": "कोडिंग और डेव", + "agent-frameworks": "एजेंट फ़्रेमवर्क", + "devops": "DevOps और ऑटोमेशन", + "data-analysis": "डेटा और एनालिटिक्स", + "product-design": "प्रोडक्ट डिज़ाइन", + "creative": "क्रिएटिव और मीडिया", + "presentations": "प्रेज़ेंटेशन और डॉक्स", + "investing": "पब्लिक-मार्केट निवेश", + "venture-analysis": "VC और बिज़नेस-मॉडल", + "marketing": "मार्केटिंग और ग्रोथ", + "sales": "सेल्स और CRM", + "customer-support": "कस्टमर सपोर्ट", + "research": "रिसर्च और सर्च", + "writing": "लेखन और कंटेंट", + "productivity": "प्रोडक्टिविटी और असिस्टेंट" + }, + "AgentDetail": { + "notFound": "एजेंट नहीं मिला", + "backToMarketplace": "← एजेंट मार्केटप्लेस", + "openSourceProject": "ओपन-सोर्स प्रोजेक्ट", + "signedCard": "साइन किया गया कार्ड", + "verifiedPublisher": "सत्यापित पब्लिशर", + "by": "{name} द्वारा", + "publisherOpenSource": "ओपन-सोर्स", + "publisherUnknown": "अज्ञात", + "scenario": "परिदृश्य:", + "stars": "{count, number} स्टार", + "selfHost": "सेल्फ़-होस्ट", + "streaming": "स्ट्रीमिंग", + "pushNotifications": "पुश नोटिफ़िकेशन", + "skills": "स्किल्स", + "skillsCount": "({count, number})", + "noSkillsProject": "एक ओपन-सोर्स प्रोजेक्ट — कोड एक्सप्लोर करें और इसे GitHub से सेल्फ़-होस्ट करें।", + "noSkillsHosted": "इस एजेंट ने अपने AgentCard में संरचित स्किल्स नहीं दर्शाईं।", + "inputMode": "इनपुट: {mode}", + "outputMode": "आउटपुट: {mode}", + "openSourceProjectHeading": "ओपन-सोर्स प्रोजेक्ट", + "openSourceProjectNote": "सेल्फ़-होस्ट करें या कोड एक्सप्लोर करें। TakoAPI गेटवे के ज़रिए इनवोक नहीं किया जा सकता।", + "viewOnGithub": "GitHub पर देखें", + "integration": "इंटीग्रेशन", + "endpoint": "एंडपॉइंट", + "agentCard": "AgentCard", + "homepage": "होमपेज", + "callThroughTakoApi": "इसे TakoAPI के ज़रिए कॉल करें", + "gatewayPhase2": "एकीकृत गेटवे — इनवोकेशन Phase 2 में आएगा।", + "breadcrumbHome": "होम", + "breadcrumbMarketplace": "एजेंट मार्केटप्लेस" + }, + "Agents": { + "metaTitle": "एजेंट मार्केटप्लेस", + "metaDescription": "सभी एजेंट्स तक पहुँचने के लिए एक API। एक एकीकृत API के ज़रिए AI एजेंट्स और सैकड़ों ओपन-सोर्स एजेंट प्रोजेक्ट्स ब्राउज़ करें और इनवोक करें — ओपन A2A AgentCards द्वारा वर्णित।", + "ogTitle": "एजेंट मार्केटप्लेस — {siteName}", + "ogDescription": "एक एकीकृत API के ज़रिए AI एजेंट्स और ओपन-सोर्स एजेंट प्रोजेक्ट्स खोजें और इनवोक करें।", + "heroTitle": "एजेंट मार्केटप्लेस", + "heroTagline": "सभी एजेंट्स तक पहुँचने के लिए एक API।", + "heroSubtitle": "एक एकीकृत API के ज़रिए AI एजेंट्स खोजें और इनवोक करें — ओपन A2A AgentCards द्वारा वर्णित।", + "searchPlaceholder": "नाम या विवरण से एजेंट्स खोजें…", + "search": "खोजें", + "all": "सभी", + "kindAgents": "एजेंट्स", + "kindProjects": "प्रोजेक्ट्स", + "scenarioFilter": "परिदृश्य:", + "protocolFilter": "प्रोटोकॉल:", + "pricingFilter": "प्राइसिंग:", + "categoryFilter": "श्रेणी:", + "sortLabel": "क्रमबद्ध करें:", + "sortLatest": "नवीनतम", + "sortStars": "स्टार", + "sortPopular": "लोकप्रिय", + "sortCalls": "सर्वाधिक कॉल किए गए", + "sortRating": "सर्वोच्च रेटेड", + "pricingFree": "मुफ़्त", + "pricingPerCall": "प्रति कॉल", + "pricingPerTask": "प्रति टास्क", + "pricingPerToken": "प्रति 1k टोकन", + "count": "{count, plural, =0 {कोई एजेंट नहीं} one {# एजेंट} other {# एजेंट्स}}", + "emptyTitle": "अभी तक कोई एजेंट आपके फ़िल्टर से मेल नहीं खाता।", + "emptyCta": "पहला पब्लिश करें →", + "prev": "← पिछला", + "next": "अगला →", + "pageOf": "पेज {page}, कुल {total} में से" + }, + "Components": { + "homeSearchPlaceholder": "नाम, विवरण या लेखक से स्किल्स खोजें...", + "homeSearchButton": "खोजें", + "agentFree": "मुफ़्त", + "agentPerCall": "{price}/कॉल", + "agentPerTask": "{price}/टास्क", + "agentPerToken": "{price}/1k टोकन", + "agentPriceFallbackCall": "कॉल", + "agentPriceFallbackTask": "टास्क", + "agentPriceFallbackToken": "टोकन", + "agentBadgeProject": "प्रोजेक्ट", + "agentBadgeStreaming": "स्ट्रीमिंग", + "agentOpenSource": "ओपन-सोर्स", + "agentSelfHost": "सेल्फ़-होस्ट", + "agentSkills": "{count, plural, one {# स्किल} other {# स्किल्स}}", + "skillBy": "{author} द्वारा", + "skillLikes": "{count, number}" + }, + "Install": { + "metaTitle": "Claude Code, Codex और OpenCode में इंस्टॉल करें", + "title": "Claude Code, Codex और OpenCode में TakoAPI इंस्टॉल करें", + "description": "एक कमांड आपके कोडिंग एजेंट में TakoAPI स्किल इंस्टॉल करती है — एक एकीकृत गेटवे के ज़रिए AI एजेंट्स खोजें और इनवोक करें, और OpenClaw स्किल्स कैटलॉग खोजें। Claude Code, Codex और OpenCode के साथ काम करता है।", + "stepRunInstallerName": "इंस्टॉलर चलाएँ", + "stepRunInstallerText": "चलाएँ: curl -fsSL https://takoapi.com/install.sh | sh", + "stepUseAgentName": "अपने एजेंट से TakoAPI इस्तेमाल करें", + "stepUseAgentText": "अपने कोडिंग एजेंट से TakoAPI पर कोई AI एजेंट खोजने या कॉल करने को कहें।", + "heroBadge": "एक कमांड, तीन एजेंट्स", + "heroTitle": "अपने कोडिंग एजेंट में TakoAPI इंस्टॉल करें", + "heroSubtitle": "TakoAPI स्किल को Claude Code, Codex या OpenCode में डालें — फिर एक एकीकृत गेटवे के ज़रिए किसी भी AI एजेंट को खोजें और इनवोक करें, सीधे अपने टर्मिनल से।", + "whatTitle": "इंस्टॉलर क्या करता है", + "whatWritesSkill": "हर एजेंट की अपनी स्किल्स डायरेक्टरी में एक अकेली, नेमस्पेस वाली TakoAPI स्किल लिखता है — यह आपकी साझा कॉन्फ़िग फ़ाइलों को कभी एडिट नहीं करता।", + "whatTeachesAgent": "आपके एजेंट को HTTP के ज़रिए TakoAPI रजिस्ट्री और गेटवे कॉल करना सिखाता है — कोई अतिरिक्त डिपेंडेंसी नहीं, चलाने के लिए कोई सर्वर नहीं।", + "whatMcpServer": "होस्टेड टूल्स पसंद हैं? इसके बजाय TakoAPI MCP सर्वर रजिस्टर करें — claude mcp add --transport http takoapi https://takoapi.com/mcp — जो search_agents, get_agent, search_skills और invoke_agent को नेटिव MCP टूल्स के रूप में एक्सपोज़ करता है।", + "whatIdempotent": "आइडेम्पोटेंट है (दोबारा चलाना सुरक्षित) और --uninstall के साथ पूरी तरह रिवर्सिबल है।", + "whatApiKey": "मीटर्ड गेटवे के लिए, अपने डैशबोर्ड में एक API की बनाएँ और उसे TAKO_KEY के रूप में एक्सपोर्ट करें।", + "footnote": "Windows पर हैं या पहले से Node में? npx takoapi-install इस्तेमाल करें। पहले स्क्रिप्ट पढ़ना चाहते हैं? यह takoapi.com/install.sh पर सादा शेल है।" + }, + "InstallTabs": { + "universalNote": "TakoAPI स्किल को Claude Code, Codex और OpenCode में इंस्टॉल करता है — अपने आप पहचाना जाता है। दोबारा चलाना सुरक्षित, root नहीं चाहिए। Windows पर या Node में, इस्तेमाल करें।", + "tablistLabel": "कोडिंग एजेंट्स", + "claudeCodeTagline": "Anthropic का CLI", + "codexTagline": "OpenAI का CLI", + "opencodeTagline": "opencode.ai", + "skillHeading": "स्किल — आपके एजेंट को TakoAPI कॉल करना सिखाती है", + "skillUniversalHint": "…या ऊपर दी गई यूनिवर्सल कमांड इस्तेमाल करें — यह {name} को भी कवर करती है।", + "writesHeading": "लिखता है", + "howToUseHeading": "कैसे इस्तेमाल करें", + "claudeCodeUse": "अपने आप लोड होता है — बस Claude से TakoAPI पर कोई एजेंट खोजने को कहें।", + "codexUse": "$takoapi से इनवोक करें, या इसे /skills मेन्यू से चुनें।", + "opencodeUse": "/takoapi चलाएँ, या @takoapi को सौंप दें।", + "mcpHeading": "MCP सर्वर — होस्टेड टूल्स, इंस्टॉल करने को कुछ नहीं", + "claudeCodeMcpHint": "एक कमांड। invoke_agent सक्षम करने के लिए --header \"Authorization: Bearer $TAKO_KEY\" जोड़ें।", + "codexMcpHint": "~/.codex/config.toml में जोड़ें", + "opencodeMcpHint": "~/.config/opencode/opencode.json में मर्ज करें", + "mcpToolsNote": "ये टूल्स जोड़ता है: search_agents, get_agent, search_skills, invoke_agent।", + "uninstallHeading": "अनइंस्टॉल करें", + "uninstallNote": "केवल TakoAPI की अपनी फ़ाइलें हटाता है — यह आपके दूसरे एजेंट कॉन्फ़िग को कभी नहीं छूता।", + "copy": "कॉपी करें", + "copied": "कॉपी हो गया" + }, + "SkillDetail": { + "notFoundMetaTitle": "स्किल नहीं मिली", + "backToSkills": "स्किल्स पर वापस", + "by": "{author} द्वारा", + "downloads": "डाउनलोड", + "stars": "स्टार", + "views": "व्यूज़", + "likes": "{count, plural, one {# लाइक} other {# लाइक्स}}", + "brief": "संक्षिप्त", + "description": "विवरण", + "whatThisSkillDoes": "यह स्किल क्या करती है", + "whenToUseIt": "इसे कब इस्तेमाल करें", + "exampleWorkflow": "उदाहरण वर्कफ़्लो", + "workflowInput": "इनपुट", + "workflowAgent": "एजेंट", + "workflowOutput": "आउटपुट", + "requirements": "आवश्यकताएँ", + "installation": "इंस्टॉलेशन", + "clawHubCli": "ClawHub CLI", + "openClawChat": "OpenClaw Chat (इसे अपनी बातचीत में पेस्ट करें)", + "links": "लिंक", + "github": "GitHub", + "copyGithubUrl": "GitHub URL कॉपी करें", + "clawHub": "ClawHub", + "skillNotFound": "स्किल नहीं मिली" + }, + "Skills": { + "metaTitle": "स्किल्स ब्राउज़ करें", + "metaDescription": "दर्जनों श्रेणियों में अपने कोडिंग एजेंट के लिए हज़ारों OpenClaw स्किल्स ब्राउज़ करें — सर्च, फ़िल्टरिंग और ट्रेंडिंग लीडरबोर्ड के साथ।", + "ogTitle": "स्किल्स ब्राउज़ करें — {siteName}", + "ogDescription": "अपने कोडिंग एजेंट के लिए हज़ारों OpenClaw स्किल्स।", + "heading": "स्किल्स ब्राउज़ करें", + "searchLabel": "खोज: \"{query}\"", + "count": "{count, number} स्किल्स मिलीं", + "sortLatest": "नवीनतम", + "sortPopular": "सर्वाधिक लोकप्रिय", + "sortViews": "सर्वाधिक देखी गईं", + "sortStars": "सर्वाधिक स्टार वाली", + "agentAll": "सभी एजेंट्स", + "agentClaudeCode": "Claude Code", + "agentCursor": "Cursor", + "agentWindsurf": "Windsurf", + "agentCodex": "Codex", + "agentAider": "Aider", + "agentCline": "Cline", + "agentCopilot": "Copilot", + "agentGeneric": "जेनेरिक", + "all": "सभी", + "emptyTitle": "कोई स्किल नहीं मिली", + "emptyHint": "अपनी खोज या फ़िल्टर बदलकर देखें", + "pageOf": "पेज {page}, कुल {total} में से" + }, + "Trending": { + "metaTitle": "ट्रेंडिंग स्किल्स", + "metaDescription": "अभी सबसे ज़्यादा डाउनलोड और सबसे ज़्यादा लाइक की गई OpenClaw स्किल्स — कोडिंग एजेंट्स क्या इंस्टॉल कर रहे हैं इसका लाइव लीडरबोर्ड।", + "ogTitle": "ट्रेंडिंग स्किल्स — {siteName}", + "ogDescription": "सबसे लोकप्रिय OpenClaw स्किल्स का लाइव लीडरबोर्ड।", + "title": "ट्रेंडिंग स्किल्स", + "subtitle": "समुदाय द्वारा रैंक की गई सबसे लोकप्रिय OpenClaw स्किल्स खोजें", + "searchPlaceholder": "ट्रेंडिंग स्किल्स खोजें…", + "categories": "श्रेणियाँ", + "allCategories": "सभी श्रेणियाँ", + "downloads": "डाउनलोड", + "stars": "स्टार", + "likes": "लाइक्स", + "views": "व्यूज़", + "skill": "स्किल", + "count": "{count, plural, =0 {कोई स्किल नहीं} one {# स्किल} other {# स्किल्स}}", + "countInCategory": "{category} में {count, plural, =0 {कोई स्किल नहीं} one {# स्किल} other {# स्किल्स}}", + "emptyTitle": "कोई स्किल नहीं मिली", + "emptySubtitle": "अपनी खोज या फ़िल्टर बदलकर देखें", + "byAuthor": "{author} द्वारा", + "showing": "{total, number} में से {from, number}–{to, number} दिखा रहे हैं", + "prev": "पिछला", + "next": "अगला" + }, + "Admin": { + "accessDenied": "एक्सेस अस्वीकृत", + "accessDeniedDescription": "इस पेज तक पहुँचने के लिए आपको एडमिन अधिकार चाहिए।", + "goHome": "होम जाएँ", + "backToSite": "साइट पर वापस", + "panelTitle": "एडमिन पैनल", + "navDashboard": "डैशबोर्ड", + "navSkills": "स्किल्स", + "navAgents": "एजेंट्स", + "navCategories": "श्रेणियाँ", + "navUsers": "उपयोगकर्ता", + "navLogs": "लॉग्स", + "dashboardTitle": "डैशबोर्ड", + "statTotalSkills": "कुल स्किल्स", + "statTotalUsers": "कुल उपयोगकर्ता", + "statCategories": "श्रेणियाँ", + "statTotalLikes": "कुल लाइक्स", + "statTotalViews": "कुल व्यूज़", + "statTotalDownloads": "कुल डाउनलोड", + "statPendingReview": "समीक्षा लंबित", + "recentSkills": "हाल की स्किल्स", + "topSkillsByDownloads": "डाउनलोड के अनुसार शीर्ष स्किल्स", + "viewAll": "सभी देखें", + "byAuthor": "{author} द्वारा", + "statusApproved": "स्वीकृत", + "statusPending": "लंबित", + "statusRejected": "अस्वीकृत", + "loading": "लोड हो रहा है…", + "cancel": "रद्द करें", + "save": "सहेजें", + "saveChanges": "बदलाव सहेजें", + "delete": "हटाएँ", + "edit": "एडिट करें", + "confirm": "पुष्टि करें", + "preview": "प्रीव्यू", + "agentsTitle": "एजेंट्स", + "agentsSubtitle": "सबमिट किए गए एजेंट्स की समीक्षा और मॉडरेशन करें।", + "filterPending": "लंबित", + "filterApproved": "स्वीकृत", + "filterRejected": "अस्वीकृत", + "filterAll": "सभी", + "noAgentsInView": "इस व्यू में कोई एजेंट नहीं।", + "unknownPublisher": "अज्ञात", + "uncategorized": "अवर्गीकृत", + "agentMetaSkills": "{count, number} स्किल्स", + "noScenarios": "कोई परिदृश्य नहीं", + "reviewNoteLabel": "नोट: {note}", + "editScenarios": "परिदृश्य एडिट करें", + "actionApprove": "स्वीकृत करें", + "actionReject": "अस्वीकृत करें", + "feature": "फ़ीचर करें", + "unfeature": "अनफ़ीचर करें", + "scenariosEditorHint": "场景 परिदृश्य — 点击切换 / असाइन करने के लिए टॉगल करें", + "scenarioOption": "{nameZh} · {name}", + "selectedCount": "{count, number} चयनित", + "rejectReasonPrompt": "अस्वीकृति का कारण (वैकल्पिक):", + "deleteAgentConfirm": "इस एजेंट को स्थायी रूप से हटाएँ?", + "skillsTitle": "स्किल्स प्रबंधन", + "searchSkillsPlaceholder": "स्किल्स खोजें...", + "allStatuses": "सभी स्थितियाँ", + "filterStatusPending": "लंबित", + "filterStatusApproved": "स्वीकृत", + "filterStatusRejected": "अस्वीकृत", + "allCategories": "सभी श्रेणियाँ", + "selectedLabel": "{count, number} चयनित", + "batchApprove": "स्वीकृत करें", + "batchReject": "अस्वीकृत करें", + "batchFeature": "फ़ीचर करें", + "batchDelete": "हटाएँ", + "batchDeleteConfirm": "{count, number} स्किल हटाएँ? इसे पूर्ववत नहीं किया जा सकता।", + "colName": "नाम", + "colAuthor": "लेखक", + "colCategory": "श्रेणी", + "colStatus": "स्थिति", + "colDownloads": "डाउनलोड", + "colLikes": "लाइक्स", + "colViews": "व्यूज़", + "colCreated": "बनाया गया", + "colActions": "क्रियाएँ", + "noSkillsFound": "कोई स्किल नहीं मिली।", + "showingRange": "{total, number} में से {from, number}–{to, number} दिखा रहे हैं", + "editSkillTitle": "स्किल एडिट करें", + "fieldName": "नाम", + "fieldAuthor": "लेखक", + "fieldBrief": "संक्षिप्त", + "fieldStatus": "स्थिति", + "optionPending": "लंबित", + "optionApproved": "स्वीकृत", + "optionRejected": "अस्वीकृत", + "fieldFeatured": "फ़ीचर्ड", + "deleteSkillTitle": "स्किल हटाएँ", + "deleteSkillConfirm": "क्या आप वाकई {name} को हटाना चाहते हैं? इस क्रिया को पूर्ववत नहीं किया जा सकता।", + "categoriesTitle": "श्रेणियाँ", + "addCategory": "श्रेणी जोड़ें", + "editCategoryTitle": "श्रेणी एडिट करें", + "newCategoryTitle": "नई श्रेणी", + "fieldIcon": "आइकन", + "fieldDescription": "विवरण", + "categoryNamePlaceholder": "जैसे डेटा विश्लेषण", + "categoryIconPlaceholder": "जैसे chart-bar या इमोजी", + "categoryDescriptionPlaceholder": "संक्षिप्त विवरण", + "nameRequired": "नाम आवश्यक है।", + "saveCategoryFailed": "श्रेणी सहेजने में विफल", + "deleteCategoryFailed": "श्रेणी हटाने में विफल", + "fetchCategoriesFailed": "श्रेणियाँ लाने में विफल", + "deleteFailed": "हटाना विफल", + "somethingWentWrong": "कुछ गलत हो गया", + "update": "अपडेट करें", + "create": "बनाएँ", + "colSlug": "स्लग", + "colSkills": "स्किल्स", + "colDescription": "विवरण", + "noCategoriesFound": "कोई श्रेणी नहीं मिली। ऊपर एक जोड़ें।", + "deleting": "...", + "cannotDeleteHasSkills": "हटाया नहीं जा सकता: इसमें स्किल्स हैं", + "categoriesTotal": "कुल {count, number} {count, plural, one {श्रेणी} other {श्रेणियाँ}}", + "usersTitle": "उपयोगकर्ता", + "usersTotal": "कुल {count, number} {count, plural, one {उपयोगकर्ता} other {उपयोगकर्ता}}", + "searchUsersPlaceholder": "नाम या ईमेल से खोजें...", + "colEmail": "ईमेल", + "colRole": "भूमिका", + "colProvider": "प्रोवाइडर", + "colJoined": "जुड़े", + "loadingUsers": "उपयोगकर्ता लोड हो रहे हैं...", + "noUsersFound": "कोई उपयोगकर्ता नहीं मिला।", + "noName": "---", + "roleAdmin": "एडमिन", + "roleUser": "उपयोगकर्ता", + "providerCredentials": "क्रेडेंशियल", + "demote": "पदावनत करें", + "promote": "पदोन्नत करें", + "demoteToUser": "उपयोगकर्ता बनाएँ", + "promoteToAdmin": "एडमिन बनाएँ", + "logsTitle": "एडमिन लॉग्स", + "logsTotal": "कुल {count, number} {count, plural, one {प्रविष्टि} other {प्रविष्टियाँ}}", + "colTimestamp": "टाइमस्टैम्प", + "colAdmin": "एडमिन", + "colAction": "क्रिया", + "colTargetType": "टारगेट प्रकार", + "colTargetId": "टारगेट ID", + "colDetail": "विवरण", + "loadingLogs": "लॉग्स लोड हो रहे हैं...", + "noLogsFound": "कोई लॉग नहीं मिला।", + "emptyDetail": "---", + "actionCreate": "बनाएँ", + "actionUpdate": "अपडेट करें", + "actionDelete": "हटाएँ", + "actionApproveLog": "स्वीकृत करें", + "actionRejectLog": "अस्वीकृत करें", + "actionRoleChange": "भूमिका परिवर्तन", + "targetSkill": "स्किल", + "targetAgent": "एजेंट", + "targetCategory": "श्रेणी", + "targetUser": "उपयोगकर्ता" + }, + "Auth": { + "signInTitle": "TakoAPI में साइन इन करें", + "signInSubtitle": "अपने स्किल्स डैशबोर्ड तक पहुँचें", + "signUpTitle": "एक अकाउंट बनाएँ", + "signUpSubtitle": "TakoAPI समुदाय से जुड़ें", + "continueWithGoogle": "Google के साथ जारी रखें", + "continueWithApple": "Apple के साथ जारी रखें", + "signUpWithGoogle": "Google के साथ साइन अप करें", + "signUpWithApple": "Apple के साथ साइन अप करें", + "or": "या", + "name": "नाम", + "email": "ईमेल", + "password": "पासवर्ड", + "passwordHint": "पासवर्ड (कम से कम 8 अक्षर)", + "signIn": "साइन इन करें", + "signingIn": "साइन इन हो रहा है...", + "createAccount": "अकाउंट बनाएँ", + "creatingAccount": "अकाउंट बन रहा है...", + "invalidCredentials": "अमान्य ईमेल या पासवर्ड", + "registrationFailed": "रजिस्ट्रेशन विफल", + "somethingWentWrong": "कुछ गलत हो गया", + "noAccount": "अकाउंट नहीं है?", + "signUpLink": "साइन अप करें", + "haveAccount": "पहले से अकाउंट है?", + "signInLink": "साइन इन करें" + }, + "Dashboard": { + "title": "डेवलपर डैशबोर्ड", + "signInPrompt": "API कीज़ मैनेज करने और उपयोग देखने के लिए साइन इन करें।", + "signIn": "साइन इन करें", + "description": "API कीज़ मैनेज करें और गेटवे उपयोग पर नज़र रखें। एक की, एक बिल, कोई भी एजेंट।", + "apiKeys": "API कीज़", + "createKey": "की बनाएँ", + "creating": "बन रहा है…", + "copyKeyWarning": "इस की को अभी कॉपी करें — यह दोबारा नहीं दिखाई जाएगी।", + "copy": "कॉपी करें", + "copied": "कॉपी हो गया", + "noKeys": "अभी तक कोई की नहीं। एजेंट्स कॉल करना शुरू करने के लिए एक बनाएँ।", + "keyFallbackName": "की", + "created": "{date} को बनाया गया", + "lastUsed": "अंतिम उपयोग {date}", + "neverUsed": "कभी इस्तेमाल नहीं हुई", + "revoke": "रद्द करें", + "revokeConfirm": "इस की को रद्द करें? इसका इस्तेमाल करने वाले ऐप्स काम करना बंद कर देंगे।", + "quickstart": "क्विकस्टार्ट", + "usage": "उपयोग", + "totalCalls": "कुल कॉल", + "agentsUsed": "इस्तेमाल किए गए एजेंट्स", + "totalCount": "{count, number}", + "tableAgent": "एजेंट", + "tableProtocol": "प्रोटोकॉल", + "tableStatus": "स्थिति", + "tableLatency": "लेटेंसी", + "tableWhen": "कब", + "noCalls": "अभी तक कोई कॉल नहीं। उपयोग यहाँ देखने के लिए एक की बनाएँ और किसी एजेंट को कॉल करें।" + }, + "Profile": { + "title": "मेरी प्रोफ़ाइल", + "signInPrompt": "अपनी प्रोफ़ाइल देखने के लिए कृपया साइन इन करें।", + "signIn": "साइन इन करें", + "submissions": "सबमिशन", + "likes": "लाइक्स", + "views": "व्यूज़", + "statValue": "{count, number}", + "mySubmissions": "मेरे सबमिशन", + "submitNew": "नया सबमिट करें", + "tab_all": "सभी", + "tab_approved": "स्वीकृत", + "tab_pending": "लंबित", + "tab_rejected": "अस्वीकृत", + "tabCount": "{count, number}", + "emptyTab": "इस टैब में कोई सबमिशन नहीं", + "submitFirst": "अपनी पहली स्किल सबमिट करें", + "statusApproved": "स्वीकृत", + "statusPending": "समीक्षा लंबित", + "statusRejected": "अस्वीकृत", + "reviewerNote": "समीक्षक नोट:" + }, + "Submit": { + "title": "एक स्किल सबमिट करें", + "subtitle": "अपनी OpenClaw स्किल समुदाय के साथ साझा करें", + "signInPrompt": "स्किल्स सबमिट करने के लिए कृपया साइन इन करें।", + "signIn": "साइन इन करें", + "skillSource": "स्किल स्रोत", + "githubUrl": "GitHub URL", + "clawSkillsUrl": "ClawSkills.sh URL", + "githubUrlPlaceholder": "https://github.com/username/repo", + "clawSkillsUrlPlaceholder": "https://clawskills.sh/skills/author-skillname", + "autoFill": "ऑटो फ़िल", + "fetching": "ला रहे हैं...", + "filled": "भर गया!", + "skillName": "स्किल का नाम", + "skillNamePlaceholder": "जैसे my-awesome-skill", + "category": "श्रेणी", + "selectCategory": "एक श्रेणी चुनें", + "categoryOption": "{name} ({count})", + "brief": "संक्षिप्त", + "briefHelper": "- एक-पंक्ति का सारांश", + "briefPlaceholder": "आपकी स्किल क्या करती है इसका संक्षिप्त विवरण", + "skillDetails": "स्किल विवरण", + "skillDetailsHelper": "- README से अपने आप भरा गया", + "whatItDoes": "यह स्किल क्या करती है", + "whatItDoesPlaceholder": "यह स्किल क्या करती है, इसकी विशेषताएँ और क्षमताएँ क्या हैं इसका विस्तृत विवरण...", + "exampleWorkflow": "उदाहरण वर्कफ़्लो", + "exampleWorkflowHelper": "- इनपुट / एजेंट चरण / आउटपुट", + "exampleWorkflowPlaceholder": "इनपुट\nउपयोगकर्ता पूछता है: कुछ उपयोगी करो\n\nएजेंट\n1\nटास्क पूरा करने के लिए `my-skill action` चलाएँ\n2\nपरिणाम सत्यापित करें\n\nआउटपुट\nटास्क सफलतापूर्वक पूरा हुआ", + "requirements": "आवश्यकताएँ", + "requirementsPlaceholder": "- Node.js 18+\n- सेवा X से API की\n- आदि।", + "submitSkill": "स्किल सबमिट करें", + "submitting": "सबमिट हो रहा है...", + "enterUrlFirst": "कृपया पहले एक URL दर्ज करें", + "autoFillFailed": "ऑटो-फ़िल विफल", + "submitFailed": "सबमिट करने में विफल", + "somethingWentWrong": "कुछ गलत हो गया" + }, + "SubmitAgent": { + "title": "एक एजेंट पब्लिश करें", + "signInPrompt": "एजेंट पब्लिश करने के लिए कृपया साइन इन करें।", + "signIn": "साइन इन करें", + "intro": "मार्केटप्लेस पर एक इनवोक करने योग्य एजेंट सूचीबद्ध करें। इसका A2A AgentCard URL सबमिट करें और हम बाकी पार्स कर लेंगे, या इसे मैन्युअल रूप से भरें।", + "tabUrl": "AgentCard URL", + "tabManual": "मैन्युअल", + "cardUrlLabel": "AgentCard URL", + "cardUrlPlaceholder": "https://your-agent.com/.well-known/agent-card.json", + "cardUrlHelp": "हम A2A AgentCard (नाम, एंडपॉइंट, क्षमताएँ, स्किल्स) लाते और सत्यापित करते हैं।", + "nameLabel": "एजेंट का नाम", + "namePlaceholder": "जैसे Weather Oracle", + "descriptionLabel": "विवरण", + "descriptionPlaceholder": "यह एजेंट क्या करता है?", + "endpointLabel": "एंडपॉइंट URL", + "endpointPlaceholder": "https://your-agent.com/a2a", + "protocolsLabel": "प्रोटोकॉल", + "protocolOpenAiCompat": "OpenAI-संगत", + "categoryLabel": "श्रेणी", + "uncategorized": "अवर्गीकृत", + "pricingLabel": "प्राइसिंग", + "pricingFree": "मुफ़्त", + "pricingPerCall": "प्रति कॉल", + "pricingPerTask": "प्रति टास्क", + "pricingPerToken": "प्रति 1k टोकन", + "unitPriceLabel": "यूनिट मूल्य (USD)", + "unitPricePlaceholder": "0.002", + "homepageLabel": "होमपेज", + "optional": "वैकल्पिक", + "homepagePlaceholder": "https://your-agent.com", + "submit": "एजेंट पब्लिश करें", + "submitting": "सबमिट हो रहा है…", + "submitFailed": "सबमिट करने में विफल", + "somethingWentWrong": "कुछ गलत हो गया", + "successTitle": "सबमिट हो गया 🎉", + "pendingReview": "{name} अब समीक्षा के लिए लंबित है।", + "successDetail": "हम AgentCard सत्यापित करेंगे और स्वीकृत होते ही इसे मार्केटप्लेस पर पब्लिश कर देंगे।", + "backToMarketplace": "← मार्केटप्लेस पर वापस" + } +} diff --git a/messages/id.json b/messages/id.json new file mode 100644 index 000000000..718ba292e --- /dev/null +++ b/messages/id.json @@ -0,0 +1,593 @@ +{ + "Metadata": { + "tagline": "Satu API untuk mengakses semua agen", + "description": "Temukan dan panggil agen AI melalui satu API terpadu — semacam OpenRouter untuk agen. Jelajahi direktori berisi ratusan proyek agen open-source dan ribuan skill OpenClaw untuk coding agent Anda." + }, + "LocaleSwitcher": { + "label": "Bahasa" + }, + "Header": { + "searchPlaceholder": "Cari agen...", + "agents": "Agen", + "skills": "Skill", + "trending": "Tren", + "publish": "Terbitkan", + "publishAgent": "Terbitkan Agen", + "account": "Akun", + "mySkills": "Skill Saya", + "apiUsage": "API & Penggunaan", + "adminPanel": "Panel Admin", + "signIn": "Masuk", + "signOut": "Keluar" + }, + "Footer": { + "tagline": "Satu API untuk mengakses semua agen — plus ribuan skill OpenClaw untuk coding agent Anda.", + "agentRegistry": "Registri agen:", + "platform": "Platform", + "resources": "Sumber Daya", + "installInAgent": "Pasang di agen Anda", + "browseAgents": "Jelajahi Agen", + "publishAnAgent": "Terbitkan Agen", + "developerDashboard": "Dasbor Developer", + "browseSkills": "Jelajahi Skill", + "awesomeList": "Awesome List", + "clawHub": "ClawHub", + "copyright": "© {year} TakoAPI. Dibuat untuk komunitas OpenClaw." + }, + "Home": { + "heroTitle": "Satu API untuk mengakses semua agen", + "heroSubtitle": "Temukan dan panggil {agents, number} agen AI melalui satu API terpadu — plus {skills, number} skill untuk coding agent Anda.", + "browseAgents": "Jelajahi agen", + "publishAnAgent": "Terbitkan agen", + "agentRegistry": "Registri agen:", + "browseByScenario": "Jelajahi berdasarkan skenario", + "allAgents": "Semua agen", + "featuredAgents": "Agen Unggulan", + "browseAll": "Jelajahi semua", + "popularProjects": "Proyek open-source populer", + "selfHostable": "{count, number} bisa di-self-host", + "skillTitle": "Skill TakoAPI untuk OpenClaw", + "official": "Resmi", + "skillDescription": "Cari, pasang, dan kelola skill OpenClaw lewat percakapan alami — didukung oleh marketplace TakoAPI.", + "viewOnGithub": "Lihat di GitHub", + "askAgent": "atau minta agen Anda: \"Pasang skill TakoAPI\"", + "usingCodingAgent": "Memakai Claude Code, Codex, atau OpenCode?", + "oneCommandInstall": "Pasang dengan satu perintah", + "mustHaveSkills": "Skill Wajib Punya", + "viewRankings": "Lihat peringkat", + "categories": "Kategori", + "viewAll": "Lihat semua", + "moreCategories": "{count, plural, other {+# kategori lagi}}", + "latestSkills": "Skill Terbaru" + }, + "Scenarios": { + "frontend": "Frontend", + "backend": "Backend", + "coding": "Coding & Dev", + "agent-frameworks": "Framework Agen", + "devops": "DevOps & Otomasi", + "data-analysis": "Data & Analitik", + "product-design": "Desain Produk", + "creative": "Kreatif & Media", + "presentations": "Presentasi & Dokumen", + "investing": "Investasi Pasar Publik", + "venture-analysis": "VC & Model Bisnis", + "marketing": "Pemasaran & Pertumbuhan", + "sales": "Penjualan & CRM", + "customer-support": "Dukungan Pelanggan", + "research": "Riset & Pencarian", + "writing": "Penulisan & Konten", + "productivity": "Produktivitas & Asisten" + }, + "AgentDetail": { + "notFound": "Agen tidak ditemukan", + "backToMarketplace": "← Marketplace Agen", + "openSourceProject": "Proyek open-source", + "signedCard": "Kartu bertanda tangan", + "verifiedPublisher": "Penerbit terverifikasi", + "by": "oleh {name}", + "publisherOpenSource": "open-source", + "publisherUnknown": "tidak diketahui", + "scenario": "Skenario:", + "stars": "{count, number} bintang", + "selfHost": "Self-host", + "streaming": "Streaming", + "pushNotifications": "Notifikasi push", + "skills": "Skill", + "skillsCount": "({count, number})", + "noSkillsProject": "Proyek open-source — telusuri kodenya dan self-host dari GitHub.", + "noSkillsHosted": "Agen ini tidak mencantumkan skill terstruktur di AgentCard-nya.", + "inputMode": "masuk: {mode}", + "outputMode": "keluar: {mode}", + "openSourceProjectHeading": "Proyek open-source", + "openSourceProjectNote": "Self-host atau telusuri kodenya. Tidak dapat dipanggil melalui gateway TakoAPI.", + "viewOnGithub": "Lihat di GitHub", + "integration": "Integrasi", + "endpoint": "Endpoint", + "agentCard": "AgentCard", + "homepage": "Beranda", + "callThroughTakoApi": "Panggil melalui TakoAPI", + "gatewayPhase2": "Gateway terpadu — pemanggilan hadir di Fase 2.", + "breadcrumbHome": "Beranda", + "breadcrumbMarketplace": "Marketplace Agen" + }, + "Agents": { + "metaTitle": "Marketplace Agen", + "metaDescription": "Satu API untuk mengakses semua agen. Jelajahi dan panggil agen AI serta ratusan proyek agen open-source melalui satu API terpadu — dideskripsikan oleh AgentCard A2A terbuka.", + "ogTitle": "Marketplace Agen — {siteName}", + "ogDescription": "Temukan dan panggil agen AI serta proyek agen open-source melalui satu API terpadu.", + "heroTitle": "Marketplace Agen", + "heroTagline": "Satu API untuk mengakses semua agen.", + "heroSubtitle": "Temukan dan panggil agen AI melalui satu API terpadu — dideskripsikan oleh AgentCard A2A terbuka.", + "searchPlaceholder": "Cari agen berdasarkan nama atau deskripsi…", + "search": "Cari", + "all": "Semua", + "kindAgents": "Agen", + "kindProjects": "Proyek", + "scenarioFilter": "Skenario:", + "protocolFilter": "Protokol:", + "pricingFilter": "Harga:", + "categoryFilter": "Kategori:", + "sortLabel": "Urutkan:", + "sortLatest": "Terbaru", + "sortStars": "Bintang", + "sortPopular": "Populer", + "sortCalls": "Paling sering dipanggil", + "sortRating": "Rating tertinggi", + "pricingFree": "Gratis", + "pricingPerCall": "per panggilan", + "pricingPerTask": "per tugas", + "pricingPerToken": "Per 1k token", + "count": "{count, plural, other {# agen}}", + "emptyTitle": "Belum ada agen yang cocok dengan filter Anda.", + "emptyCta": "Terbitkan yang pertama →", + "prev": "← Sebelumnya", + "next": "Berikutnya →", + "pageOf": "Halaman {page} dari {total}" + }, + "Components": { + "homeSearchPlaceholder": "Cari skill berdasarkan nama, deskripsi, atau penulis...", + "homeSearchButton": "Cari", + "agentFree": "Gratis", + "agentPerCall": "{price}/panggilan", + "agentPerTask": "{price}/tugas", + "agentPerToken": "{price}/1k tok", + "agentPriceFallbackCall": "panggilan", + "agentPriceFallbackTask": "tugas", + "agentPriceFallbackToken": "token", + "agentBadgeProject": "proyek", + "agentBadgeStreaming": "streaming", + "agentOpenSource": "open-source", + "agentSelfHost": "self-host", + "agentSkills": "{count, plural, other {# skill}}", + "skillBy": "oleh {author}", + "skillLikes": "{count, number}" + }, + "Install": { + "metaTitle": "Pasang di Claude Code, Codex & OpenCode", + "title": "Pasang TakoAPI di Claude Code, Codex & OpenCode", + "description": "Satu perintah memasang skill TakoAPI ke coding agent Anda — temukan dan panggil agen AI melalui satu gateway terpadu, serta cari di katalog skill OpenClaw. Kompatibel dengan Claude Code, Codex, dan OpenCode.", + "stepRunInstallerName": "Jalankan installer", + "stepRunInstallerText": "Jalankan: curl -fsSL https://takoapi.com/install.sh | sh", + "stepUseAgentName": "Gunakan TakoAPI dari agen Anda", + "stepUseAgentText": "Minta coding agent Anda untuk menemukan atau memanggil agen AI di TakoAPI.", + "heroBadge": "Satu perintah, tiga agen", + "heroTitle": "Pasang TakoAPI di coding agent Anda", + "heroSubtitle": "Tambahkan skill TakoAPI ke Claude Code, Codex, atau OpenCode — lalu temukan dan panggil agen AI mana pun melalui satu gateway terpadu, langsung dari terminal Anda.", + "whatTitle": "Apa yang dilakukan installer", + "whatWritesSkill": "Menulis satu skill TakoAPI ber-namespace ke direktori skill milik tiap agen — tidak pernah mengubah file konfigurasi bersama Anda.", + "whatTeachesAgent": "Mengajari agen Anda memanggil registri TakoAPI dan gateway lewat HTTP — tanpa dependensi tambahan, tanpa server yang perlu dijalankan.", + "whatMcpServer": "Lebih suka tool yang di-hosting? Daftarkan MCP server TakoAPI sebagai gantinya — claude mcp add --transport http takoapi https://takoapi.com/mcp — yang mengekspos search_agents, get_agent, search_skills, dan invoke_agent sebagai tool MCP native.", + "whatIdempotent": "Bersifat idempoten (aman dijalankan ulang) dan sepenuhnya dapat dibatalkan dengan --uninstall.", + "whatApiKey": "Untuk gateway berbasis kuota, buat kunci API di dasbor Anda dan ekspor sebagai TAKO_KEY.", + "footnote": "Di Windows atau sudah pakai Node? Gunakan npx takoapi-install. Ingin membaca skripnya dulu? Skrip itu berupa shell biasa di takoapi.com/install.sh." + }, + "InstallTabs": { + "universalNote": "Memasang skill TakoAPI ke Claude Code, Codex, dan OpenCode — terdeteksi otomatis. Aman dijalankan ulang, tanpa root. Di Windows atau di Node, gunakan .", + "tablistLabel": "Coding agent", + "claudeCodeTagline": "CLI dari Anthropic", + "codexTagline": "CLI dari OpenAI", + "opencodeTagline": "opencode.ai", + "skillHeading": "Skill — mengajari agen Anda memanggil TakoAPI", + "skillUniversalHint": "…atau gunakan perintah universal di atas — itu mencakup {name} juga.", + "writesHeading": "Menulis", + "howToUseHeading": "Cara menggunakan", + "claudeCodeUse": "Dimuat otomatis — cukup minta Claude menemukan agen di TakoAPI.", + "codexUse": "Panggil dengan $takoapi, atau pilih dari menu /skills.", + "opencodeUse": "Jalankan /takoapi , atau serahkan ke @takoapi.", + "mcpHeading": "MCP server — tool yang di-hosting, tanpa perlu instalasi", + "claudeCodeMcpHint": "Satu perintah. Tambahkan --header \"Authorization: Bearer $TAKO_KEY\" untuk mengaktifkan invoke_agent.", + "codexMcpHint": "Tambahkan ke ~/.codex/config.toml", + "opencodeMcpHint": "Gabungkan ke ~/.config/opencode/opencode.json", + "mcpToolsNote": "Menambahkan tool: search_agents, get_agent, search_skills, invoke_agent.", + "uninstallHeading": "Uninstall", + "uninstallNote": "Hanya menghapus file milik TakoAPI sendiri — tidak pernah menyentuh konfigurasi agen Anda yang lain.", + "copy": "Salin", + "copied": "Tersalin" + }, + "SkillDetail": { + "notFoundMetaTitle": "Skill tidak ditemukan", + "backToSkills": "Kembali ke skill", + "by": "oleh {author}", + "downloads": "Unduhan", + "stars": "Bintang", + "views": "Tayangan", + "likes": "{count, plural, other {# suka}}", + "brief": "Ringkasan", + "description": "Deskripsi", + "whatThisSkillDoes": "Apa yang Dilakukan Skill Ini", + "whenToUseIt": "Kapan Menggunakannya", + "exampleWorkflow": "Contoh Alur Kerja", + "workflowInput": "INPUT", + "workflowAgent": "AGEN", + "workflowOutput": "OUTPUT", + "requirements": "Persyaratan", + "installation": "Instalasi", + "clawHubCli": "ClawHub CLI", + "openClawChat": "OpenClaw Chat (tempel ini ke percakapan Anda)", + "links": "Tautan", + "github": "GitHub", + "copyGithubUrl": "Salin URL GitHub", + "clawHub": "ClawHub", + "skillNotFound": "Skill tidak ditemukan" + }, + "Skills": { + "metaTitle": "Jelajahi Skill", + "metaDescription": "Jelajahi ribuan skill OpenClaw untuk coding agent Anda di puluhan kategori — dengan pencarian, pemfilteran, dan papan peringkat tren.", + "ogTitle": "Jelajahi Skill — {siteName}", + "ogDescription": "Ribuan skill OpenClaw untuk coding agent Anda.", + "heading": "Jelajahi Skill", + "searchLabel": "Cari: \"{query}\"", + "count": "{count, number} skill ditemukan", + "sortLatest": "Terbaru", + "sortPopular": "Paling Populer", + "sortViews": "Paling Banyak Ditonton", + "sortStars": "Paling Banyak Dibintangi", + "agentAll": "Semua agen", + "agentClaudeCode": "Claude Code", + "agentCursor": "Cursor", + "agentWindsurf": "Windsurf", + "agentCodex": "Codex", + "agentAider": "Aider", + "agentCline": "Cline", + "agentCopilot": "Copilot", + "agentGeneric": "Generik", + "all": "Semua", + "emptyTitle": "Tidak ada skill ditemukan", + "emptyHint": "Coba sesuaikan pencarian atau filter Anda", + "pageOf": "Halaman {page} dari {total}" + }, + "Trending": { + "metaTitle": "Skill Tren", + "metaDescription": "Skill OpenClaw yang paling banyak diunduh dan paling banyak disukai saat ini — papan peringkat langsung tentang apa yang sedang dipasang coding agent.", + "ogTitle": "Skill Tren — {siteName}", + "ogDescription": "Papan peringkat langsung untuk skill OpenClaw paling populer.", + "title": "Skill Tren", + "subtitle": "Temukan skill OpenClaw paling populer yang diperingkat oleh komunitas", + "searchPlaceholder": "Cari skill tren…", + "categories": "Kategori", + "allCategories": "Semua Kategori", + "downloads": "Unduhan", + "stars": "Bintang", + "likes": "Suka", + "views": "Tayangan", + "skill": "Skill", + "count": "{count, plural, other {# skill}}", + "countInCategory": "{count, plural, other {# skill}} di {category}", + "emptyTitle": "Tidak ada skill ditemukan", + "emptySubtitle": "Coba sesuaikan pencarian atau filter Anda", + "byAuthor": "oleh {author}", + "showing": "Menampilkan {from, number}–{to, number} dari {total, number}", + "prev": "Sebelumnya", + "next": "Berikutnya" + }, + "Admin": { + "accessDenied": "Akses Ditolak", + "accessDeniedDescription": "Anda memerlukan hak akses admin untuk membuka halaman ini.", + "goHome": "Ke Beranda", + "backToSite": "Kembali ke situs", + "panelTitle": "Panel Admin", + "navDashboard": "Dasbor", + "navSkills": "Skill", + "navAgents": "Agen", + "navCategories": "Kategori", + "navUsers": "Pengguna", + "navLogs": "Log", + "dashboardTitle": "Dasbor", + "statTotalSkills": "Total Skill", + "statTotalUsers": "Total Pengguna", + "statCategories": "Kategori", + "statTotalLikes": "Total Suka", + "statTotalViews": "Total Tayangan", + "statTotalDownloads": "Total Unduhan", + "statPendingReview": "Menunggu Tinjauan", + "recentSkills": "Skill Terbaru", + "topSkillsByDownloads": "Skill Teratas berdasarkan Unduhan", + "viewAll": "Lihat semua", + "byAuthor": "oleh {author}", + "statusApproved": "disetujui", + "statusPending": "menunggu", + "statusRejected": "ditolak", + "loading": "Memuat…", + "cancel": "Batal", + "save": "Simpan", + "saveChanges": "Simpan Perubahan", + "delete": "Hapus", + "edit": "Edit", + "confirm": "Konfirmasi", + "preview": "Pratinjau", + "agentsTitle": "Agen", + "agentsSubtitle": "Tinjau dan moderasi agen yang dikirim.", + "filterPending": "Menunggu", + "filterApproved": "Disetujui", + "filterRejected": "Ditolak", + "filterAll": "Semua", + "noAgentsInView": "Tidak ada agen di tampilan ini.", + "unknownPublisher": "tidak diketahui", + "uncategorized": "tanpa kategori", + "agentMetaSkills": "{count, number} skill", + "noScenarios": "tanpa skenario", + "reviewNoteLabel": "Catatan: {note}", + "editScenarios": "Edit skenario", + "actionApprove": "Setujui", + "actionReject": "Tolak", + "feature": "Jadikan Unggulan", + "unfeature": "Batalkan Unggulan", + "scenariosEditorHint": "场景 Skenario — 点击切换 / klik untuk menetapkan", + "scenarioOption": "{nameZh} · {name}", + "selectedCount": "{count, number} dipilih", + "rejectReasonPrompt": "Alasan penolakan (opsional):", + "deleteAgentConfirm": "Hapus agen ini secara permanen?", + "skillsTitle": "Manajemen Skill", + "searchSkillsPlaceholder": "Cari skill...", + "allStatuses": "Semua Status", + "filterStatusPending": "Menunggu", + "filterStatusApproved": "Disetujui", + "filterStatusRejected": "Ditolak", + "allCategories": "Semua Kategori", + "selectedLabel": "{count, number} dipilih", + "batchApprove": "Setujui", + "batchReject": "Tolak", + "batchFeature": "Jadikan Unggulan", + "batchDelete": "Hapus", + "batchDeleteConfirm": "Hapus {count, number} skill? Tindakan ini tidak dapat dibatalkan.", + "colName": "Nama", + "colAuthor": "Penulis", + "colCategory": "Kategori", + "colStatus": "Status", + "colDownloads": "Unduhan", + "colLikes": "Suka", + "colViews": "Tayangan", + "colCreated": "Dibuat", + "colActions": "Tindakan", + "noSkillsFound": "Tidak ada skill ditemukan.", + "showingRange": "Menampilkan {from, number}–{to, number} dari {total, number}", + "editSkillTitle": "Edit Skill", + "fieldName": "Nama", + "fieldAuthor": "Penulis", + "fieldBrief": "Ringkasan", + "fieldStatus": "Status", + "optionPending": "Menunggu", + "optionApproved": "Disetujui", + "optionRejected": "Ditolak", + "fieldFeatured": "Unggulan", + "deleteSkillTitle": "Hapus Skill", + "deleteSkillConfirm": "Anda yakin ingin menghapus {name}? Tindakan ini tidak dapat dibatalkan.", + "categoriesTitle": "Kategori", + "addCategory": "Tambah Kategori", + "editCategoryTitle": "Edit Kategori", + "newCategoryTitle": "Kategori Baru", + "fieldIcon": "Ikon", + "fieldDescription": "Deskripsi", + "categoryNamePlaceholder": "mis. Analisis Data", + "categoryIconPlaceholder": "mis. chart-bar atau emoji", + "categoryDescriptionPlaceholder": "Deskripsi singkat", + "nameRequired": "Nama wajib diisi.", + "saveCategoryFailed": "Gagal menyimpan kategori", + "deleteCategoryFailed": "Gagal menghapus kategori", + "fetchCategoriesFailed": "Gagal mengambil kategori", + "deleteFailed": "Gagal menghapus", + "somethingWentWrong": "Terjadi kesalahan", + "update": "Perbarui", + "create": "Buat", + "colSlug": "Slug", + "colSkills": "Skill", + "colDescription": "Deskripsi", + "noCategoriesFound": "Tidak ada kategori ditemukan. Tambahkan satu di atas.", + "deleting": "...", + "cannotDeleteHasSkills": "Tidak dapat dihapus: masih punya skill", + "categoriesTotal": "Total {count, number} {count, plural, other {kategori}}", + "usersTitle": "Pengguna", + "usersTotal": "Total {count, number} {count, plural, other {pengguna}}", + "searchUsersPlaceholder": "Cari berdasarkan nama atau email...", + "colEmail": "Email", + "colRole": "Peran", + "colProvider": "Penyedia", + "colJoined": "Bergabung", + "loadingUsers": "Memuat pengguna...", + "noUsersFound": "Tidak ada pengguna ditemukan.", + "noName": "---", + "roleAdmin": "admin", + "roleUser": "pengguna", + "providerCredentials": "kredensial", + "demote": "Turunkan", + "promote": "Naikkan", + "demoteToUser": "Turunkan menjadi pengguna", + "promoteToAdmin": "Naikkan menjadi admin", + "logsTitle": "Log Admin", + "logsTotal": "Total {count, number} {count, plural, other {entri}}", + "colTimestamp": "Stempel Waktu", + "colAdmin": "Admin", + "colAction": "Tindakan", + "colTargetType": "Tipe Target", + "colTargetId": "ID Target", + "colDetail": "Detail", + "loadingLogs": "Memuat log...", + "noLogsFound": "Tidak ada log ditemukan.", + "emptyDetail": "---", + "actionCreate": "buat", + "actionUpdate": "perbarui", + "actionDelete": "hapus", + "actionApproveLog": "setujui", + "actionRejectLog": "tolak", + "actionRoleChange": "ubah peran", + "targetSkill": "skill", + "targetAgent": "agen", + "targetCategory": "kategori", + "targetUser": "pengguna" + }, + "Auth": { + "signInTitle": "Masuk ke TakoAPI", + "signInSubtitle": "Akses dasbor skill Anda", + "signUpTitle": "Buat akun", + "signUpSubtitle": "Bergabunglah dengan komunitas TakoAPI", + "continueWithGoogle": "Lanjutkan dengan Google", + "continueWithApple": "Lanjutkan dengan Apple", + "signUpWithGoogle": "Daftar dengan Google", + "signUpWithApple": "Daftar dengan Apple", + "or": "atau", + "name": "Nama", + "email": "Email", + "password": "Kata Sandi", + "passwordHint": "Kata sandi (min. 8 karakter)", + "signIn": "Masuk", + "signingIn": "Sedang masuk...", + "createAccount": "Buat akun", + "creatingAccount": "Membuat akun...", + "invalidCredentials": "Email atau kata sandi salah", + "registrationFailed": "Pendaftaran gagal", + "somethingWentWrong": "Terjadi kesalahan", + "noAccount": "Belum punya akun?", + "signUpLink": "Daftar", + "haveAccount": "Sudah punya akun?", + "signInLink": "Masuk" + }, + "Dashboard": { + "title": "Dasbor Developer", + "signInPrompt": "Masuk untuk mengelola kunci API dan melihat penggunaan.", + "signIn": "Masuk", + "description": "Kelola kunci API dan pantau penggunaan gateway. Satu kunci, satu tagihan, agen apa pun.", + "apiKeys": "Kunci API", + "createKey": "Buat kunci", + "creating": "Membuat…", + "copyKeyWarning": "Salin kunci ini sekarang — kunci tidak akan ditampilkan lagi.", + "copy": "Salin", + "copied": "Tersalin", + "noKeys": "Belum ada kunci. Buat satu untuk mulai memanggil agen.", + "keyFallbackName": "kunci", + "created": "dibuat {date}", + "lastUsed": "terakhir dipakai {date}", + "neverUsed": "belum pernah dipakai", + "revoke": "Cabut", + "revokeConfirm": "Cabut kunci ini? Aplikasi yang memakainya akan berhenti berfungsi.", + "quickstart": "Mulai Cepat", + "usage": "Penggunaan", + "totalCalls": "Total panggilan", + "agentsUsed": "Agen yang dipakai", + "totalCount": "{count, number}", + "tableAgent": "Agen", + "tableProtocol": "Protokol", + "tableStatus": "Status", + "tableLatency": "Latensi", + "tableWhen": "Waktu", + "noCalls": "Belum ada panggilan. Buat kunci dan panggil agen untuk melihat penggunaan di sini." + }, + "Profile": { + "title": "Profil Saya", + "signInPrompt": "Silakan masuk untuk melihat profil Anda.", + "signIn": "Masuk", + "submissions": "Kiriman", + "likes": "Suka", + "views": "Tayangan", + "statValue": "{count, number}", + "mySubmissions": "Kiriman Saya", + "submitNew": "Kirim baru", + "tab_all": "Semua", + "tab_approved": "Disetujui", + "tab_pending": "Menunggu", + "tab_rejected": "Ditolak", + "tabCount": "{count, number}", + "emptyTab": "Tidak ada kiriman di tab ini", + "submitFirst": "Kirim skill pertama Anda", + "statusApproved": "Disetujui", + "statusPending": "Menunggu tinjauan", + "statusRejected": "Ditolak", + "reviewerNote": "Catatan peninjau:" + }, + "Submit": { + "title": "Kirim Skill", + "subtitle": "Bagikan skill OpenClaw Anda dengan komunitas", + "signInPrompt": "Silakan masuk untuk mengirim skill.", + "signIn": "Masuk", + "skillSource": "Sumber Skill", + "githubUrl": "URL GitHub", + "clawSkillsUrl": "URL ClawSkills.sh", + "githubUrlPlaceholder": "https://github.com/username/repo", + "clawSkillsUrlPlaceholder": "https://clawskills.sh/skills/author-skillname", + "autoFill": "Isi Otomatis", + "fetching": "Mengambil...", + "filled": "Terisi!", + "skillName": "Nama Skill", + "skillNamePlaceholder": "mis. my-awesome-skill", + "category": "Kategori", + "selectCategory": "Pilih kategori", + "categoryOption": "{name} ({count})", + "brief": "Ringkasan", + "briefHelper": "- Ringkasan satu baris", + "briefPlaceholder": "Deskripsi singkat tentang apa yang dilakukan skill Anda", + "skillDetails": "Detail Skill", + "skillDetailsHelper": "- Terisi otomatis dari README", + "whatItDoes": "Apa yang Dilakukan Skill Ini", + "whatItDoesPlaceholder": "Penjelasan rinci tentang apa yang dilakukan skill ini, fitur, dan kemampuannya...", + "exampleWorkflow": "Contoh Alur Kerja", + "exampleWorkflowHelper": "- Langkah INPUT / AGEN / OUTPUT", + "exampleWorkflowPlaceholder": "INPUT\nPengguna meminta: Lakukan sesuatu yang berguna\n\nAGEN\n1\nJalankan `my-skill action` untuk menjalankan tugas\n2\nVerifikasi hasilnya\n\nOUTPUT\nTugas berhasil diselesaikan", + "requirements": "Persyaratan", + "requirementsPlaceholder": "- Node.js 18+\n- Kunci API dari layanan X\n- dll.", + "submitSkill": "Kirim Skill", + "submitting": "Mengirim...", + "enterUrlFirst": "Silakan masukkan URL terlebih dahulu", + "autoFillFailed": "Pengisian otomatis gagal", + "submitFailed": "Gagal mengirim", + "somethingWentWrong": "Terjadi kesalahan" + }, + "SubmitAgent": { + "title": "Terbitkan Agen", + "signInPrompt": "Silakan masuk untuk menerbitkan agen.", + "signIn": "Masuk", + "intro": "Daftarkan agen yang dapat dipanggil di marketplace. Kirim URL AgentCard A2A-nya dan kami akan mengurai sisanya, atau isi secara manual.", + "tabUrl": "URL AgentCard", + "tabManual": "Manual", + "cardUrlLabel": "URL AgentCard", + "cardUrlPlaceholder": "https://your-agent.com/.well-known/agent-card.json", + "cardUrlHelp": "Kami mengambil dan memvalidasi AgentCard A2A (nama, endpoint, kapabilitas, skill).", + "nameLabel": "Nama agen", + "namePlaceholder": "mis. Weather Oracle", + "descriptionLabel": "Deskripsi", + "descriptionPlaceholder": "Apa yang dilakukan agen ini?", + "endpointLabel": "URL Endpoint", + "endpointPlaceholder": "https://your-agent.com/a2a", + "protocolsLabel": "Protokol", + "protocolOpenAiCompat": "Kompatibel dengan OpenAI", + "categoryLabel": "Kategori", + "uncategorized": "Tanpa kategori", + "pricingLabel": "Harga", + "pricingFree": "Gratis", + "pricingPerCall": "Per panggilan", + "pricingPerTask": "Per tugas", + "pricingPerToken": "Per 1k token", + "unitPriceLabel": "Harga satuan (USD)", + "unitPricePlaceholder": "0.002", + "homepageLabel": "Beranda", + "optional": "opsional", + "homepagePlaceholder": "https://your-agent.com", + "submit": "Terbitkan Agen", + "submitting": "Mengirim…", + "submitFailed": "Gagal mengirim", + "somethingWentWrong": "Terjadi kesalahan", + "successTitle": "Terkirim 🎉", + "pendingReview": "{name} kini menunggu tinjauan.", + "successDetail": "Kami akan memverifikasi AgentCard dan menerbitkannya ke marketplace setelah disetujui.", + "backToMarketplace": "← Kembali ke marketplace" + } +} diff --git a/messages/it.json b/messages/it.json new file mode 100644 index 000000000..93e48efe2 --- /dev/null +++ b/messages/it.json @@ -0,0 +1,593 @@ +{ + "Metadata": { + "tagline": "Un'unica API per accedere a tutti gli agenti", + "description": "Scopri e invoca agenti IA tramite un'unica API unificata — un OpenRouter per gli agenti. Esplora una directory di centinaia di progetti di agenti open-source e migliaia di skill OpenClaw per il tuo agente di coding." + }, + "LocaleSwitcher": { + "label": "Lingua" + }, + "Header": { + "searchPlaceholder": "Cerca agenti...", + "agents": "Agenti", + "skills": "Skill", + "trending": "Di tendenza", + "publish": "Pubblica", + "publishAgent": "Pubblica agente", + "account": "Account", + "mySkills": "Le mie skill", + "apiUsage": "API e utilizzo", + "adminPanel": "Pannello admin", + "signIn": "Accedi", + "signOut": "Esci" + }, + "Footer": { + "tagline": "Un'unica API per accedere a tutti gli agenti — più migliaia di skill OpenClaw per il tuo agente di coding.", + "agentRegistry": "Registro degli agenti:", + "platform": "Piattaforma", + "resources": "Risorse", + "installInAgent": "Installa nel tuo agente", + "browseAgents": "Esplora gli agenti", + "publishAnAgent": "Pubblica un agente", + "developerDashboard": "Dashboard per sviluppatori", + "browseSkills": "Esplora le skill", + "awesomeList": "Awesome List", + "clawHub": "ClawHub", + "copyright": "© {year} TakoAPI. Realizzato per la community OpenClaw." + }, + "Home": { + "heroTitle": "Un'unica API per accedere a tutti gli agenti", + "heroSubtitle": "Scopri e invoca {agents, number} agenti IA tramite un'unica API unificata — più {skills, number} skill per il tuo agente di coding.", + "browseAgents": "Esplora gli agenti", + "publishAnAgent": "Pubblica un agente", + "agentRegistry": "Registro degli agenti:", + "browseByScenario": "Esplora per scenario", + "allAgents": "Tutti gli agenti", + "featuredAgents": "Agenti in evidenza", + "browseAll": "Esplora tutti", + "popularProjects": "Progetti open-source popolari", + "selfHostable": "{count, number} self-hostable", + "skillTitle": "Skill TakoAPI per OpenClaw", + "official": "Ufficiale", + "skillDescription": "Cerca, installa e gestisci le skill OpenClaw tramite conversazione naturale — basato sul marketplace TakoAPI.", + "viewOnGithub": "Vedi su GitHub", + "askAgent": "oppure chiedi al tuo agente: \"Installa la skill TakoAPI\"", + "usingCodingAgent": "Usi Claude Code, Codex o OpenCode?", + "oneCommandInstall": "Installazione con un comando", + "mustHaveSkills": "Skill imperdibili", + "viewRankings": "Vedi le classifiche", + "categories": "Categorie", + "viewAll": "Vedi tutto", + "moreCategories": "{count, plural, one {+# altra categoria} other {+# altre categorie}}", + "latestSkills": "Skill più recenti" + }, + "Scenarios": { + "frontend": "Frontend", + "backend": "Backend", + "coding": "Coding e sviluppo", + "agent-frameworks": "Framework per agenti", + "devops": "DevOps e automazione", + "data-analysis": "Dati e analytics", + "product-design": "Design di prodotto", + "creative": "Creatività e media", + "presentations": "Presentazioni e documenti", + "investing": "Investimenti sui mercati pubblici", + "venture-analysis": "VC e modelli di business", + "marketing": "Marketing e crescita", + "sales": "Vendite e CRM", + "customer-support": "Assistenza clienti", + "research": "Ricerca e search", + "writing": "Scrittura e contenuti", + "productivity": "Produttività e assistente" + }, + "AgentDetail": { + "notFound": "Agente non trovato", + "backToMarketplace": "← Marketplace degli agenti", + "openSourceProject": "Progetto open-source", + "signedCard": "Card firmata", + "verifiedPublisher": "Publisher verificato", + "by": "di {name}", + "publisherOpenSource": "open-source", + "publisherUnknown": "sconosciuto", + "scenario": "Scenario:", + "stars": "{count, number} stelle", + "selfHost": "Self-host", + "streaming": "Streaming", + "pushNotifications": "Notifiche push", + "skills": "Skill", + "skillsCount": "({count, number})", + "noSkillsProject": "Un progetto open-source — esplora il codice e fai il self-host da GitHub.", + "noSkillsHosted": "Questo agente non ha dichiarato skill strutturate nella sua AgentCard.", + "inputMode": "in: {mode}", + "outputMode": "out: {mode}", + "openSourceProjectHeading": "Progetto open-source", + "openSourceProjectNote": "Fai il self-host o esplora il codice. Non invocabile tramite il gateway TakoAPI.", + "viewOnGithub": "Vedi su GitHub", + "integration": "Integrazione", + "endpoint": "Endpoint", + "agentCard": "AgentCard", + "homepage": "Homepage", + "callThroughTakoApi": "Invocalo tramite TakoAPI", + "gatewayPhase2": "Gateway unificato — l'invocazione arriva nella Fase 2.", + "breadcrumbHome": "Home", + "breadcrumbMarketplace": "Marketplace degli agenti" + }, + "Agents": { + "metaTitle": "Marketplace degli agenti", + "metaDescription": "Un'unica API per accedere a tutti gli agenti. Esplora e invoca agenti IA e centinaia di progetti di agenti open-source tramite un'unica API unificata — descritti da AgentCard A2A aperte.", + "ogTitle": "Marketplace degli agenti — {siteName}", + "ogDescription": "Scopri e invoca agenti IA e progetti di agenti open-source tramite un'unica API unificata.", + "heroTitle": "Marketplace degli agenti", + "heroTagline": "Un'unica API per accedere a tutti gli agenti.", + "heroSubtitle": "Scopri e invoca agenti IA tramite un'unica API unificata — descritti da AgentCard A2A aperte.", + "searchPlaceholder": "Cerca agenti per nome o descrizione…", + "search": "Cerca", + "all": "Tutti", + "kindAgents": "Agenti", + "kindProjects": "Progetti", + "scenarioFilter": "Scenario:", + "protocolFilter": "Protocollo:", + "pricingFilter": "Prezzo:", + "categoryFilter": "Categoria:", + "sortLabel": "Ordina:", + "sortLatest": "Più recenti", + "sortStars": "Stelle", + "sortPopular": "Popolari", + "sortCalls": "Più invocati", + "sortRating": "Più votati", + "pricingFree": "Gratis", + "pricingPerCall": "per chiamata", + "pricingPerTask": "per task", + "pricingPerToken": "Per 1k token", + "count": "{count, plural, =0 {Nessun agente} one {# agente} other {# agenti}}", + "emptyTitle": "Nessun agente corrisponde ancora ai tuoi filtri.", + "emptyCta": "Pubblica il primo →", + "prev": "← Prec", + "next": "Succ →", + "pageOf": "Pagina {page} di {total}" + }, + "Components": { + "homeSearchPlaceholder": "Cerca skill per nome, descrizione o autore...", + "homeSearchButton": "Cerca", + "agentFree": "Gratis", + "agentPerCall": "{price}/chiamata", + "agentPerTask": "{price}/task", + "agentPerToken": "{price}/1k tok", + "agentPriceFallbackCall": "chiamata", + "agentPriceFallbackTask": "task", + "agentPriceFallbackToken": "token", + "agentBadgeProject": "progetto", + "agentBadgeStreaming": "streaming", + "agentOpenSource": "open-source", + "agentSelfHost": "self-host", + "agentSkills": "{count, plural, one {# skill} other {# skill}}", + "skillBy": "di {author}", + "skillLikes": "{count, number}" + }, + "Install": { + "metaTitle": "Installa in Claude Code, Codex e OpenCode", + "title": "Installa TakoAPI in Claude Code, Codex e OpenCode", + "description": "Un comando installa la skill TakoAPI nel tuo agente di coding — scopri e invoca agenti IA tramite un unico gateway unificato e cerca nel catalogo di skill OpenClaw. Funziona con Claude Code, Codex e OpenCode.", + "stepRunInstallerName": "Esegui l'installer", + "stepRunInstallerText": "Esegui: curl -fsSL https://takoapi.com/install.sh | sh", + "stepUseAgentName": "Usa TakoAPI dal tuo agente", + "stepUseAgentText": "Chiedi al tuo agente di coding di trovare o invocare un agente IA su TakoAPI.", + "heroBadge": "Un comando, tre agenti", + "heroTitle": "Installa TakoAPI nel tuo agente di coding", + "heroSubtitle": "Aggiungi la skill TakoAPI a Claude Code, Codex o OpenCode — poi scopri e invoca qualsiasi agente IA tramite un unico gateway unificato, direttamente dal tuo terminale.", + "whatTitle": "Cosa fa l'installer", + "whatWritesSkill": "Scrive una singola skill TakoAPI con namespace dedicato nella directory delle skill di ciascun agente — non modifica mai i tuoi file di configurazione condivisi.", + "whatTeachesAgent": "Insegna al tuo agente a chiamare il registro TakoAPI e il gateway via HTTP — nessuna dipendenza aggiuntiva, nessun server da avviare.", + "whatMcpServer": "Preferisci strumenti hosted? Registra invece il server MCP di TakoAPI — claude mcp add --transport http takoapi https://takoapi.com/mcp — esponendo search_agents, get_agent, search_skills e invoke_agent come strumenti MCP nativi.", + "whatIdempotent": "È idempotente (puoi rieseguirlo in sicurezza) e completamente reversibile con --uninstall.", + "whatApiKey": "Per il gateway a consumo, crea una chiave API nella tua dashboard ed esportala come TAKO_KEY.", + "footnote": "Su Windows o già in Node? Usa npx takoapi-install. Preferisci leggere prima lo script? È semplice shell su takoapi.com/install.sh." + }, + "InstallTabs": { + "universalNote": "Installa la skill TakoAPI in Claude Code, Codex e OpenCode — rilevati automaticamente. Puoi rieseguirlo in sicurezza, senza root. Su Windows o in Node, usa .", + "tablistLabel": "Agenti di coding", + "claudeCodeTagline": "La CLI di Anthropic", + "codexTagline": "La CLI di OpenAI", + "opencodeTagline": "opencode.ai", + "skillHeading": "Skill — insegna al tuo agente a chiamare TakoAPI", + "skillUniversalHint": "…oppure usa il comando universale qui sopra — copre anche {name}.", + "writesHeading": "Scrive", + "howToUseHeading": "Come usarla", + "claudeCodeUse": "Si carica automaticamente — basta chiedere a Claude di trovare un agente su TakoAPI.", + "codexUse": "Invocala con $takoapi oppure scegliela dal menu /skills.", + "opencodeUse": "Esegui /takoapi oppure passa la mano a @takoapi.", + "mcpHeading": "Server MCP — strumenti hosted, niente da installare", + "claudeCodeMcpHint": "Un comando. Aggiungi --header \"Authorization: Bearer $TAKO_KEY\" per abilitare invoke_agent.", + "codexMcpHint": "Aggiungi a ~/.codex/config.toml", + "opencodeMcpHint": "Unisci a ~/.config/opencode/opencode.json", + "mcpToolsNote": "Aggiunge gli strumenti: search_agents, get_agent, search_skills, invoke_agent.", + "uninstallHeading": "Disinstalla", + "uninstallNote": "Rimuove solo i file di TakoAPI — non tocca mai le configurazioni dei tuoi altri agenti.", + "copy": "Copia", + "copied": "Copiato" + }, + "SkillDetail": { + "notFoundMetaTitle": "Skill non trovata", + "backToSkills": "Torna alle skill", + "by": "di {author}", + "downloads": "Download", + "stars": "Stelle", + "views": "Visualizzazioni", + "likes": "{count, plural, one {# like} other {# like}}", + "brief": "Sintesi", + "description": "Descrizione", + "whatThisSkillDoes": "Cosa fa questa skill", + "whenToUseIt": "Quando usarla", + "exampleWorkflow": "Esempio di workflow", + "workflowInput": "INPUT", + "workflowAgent": "AGENT", + "workflowOutput": "OUTPUT", + "requirements": "Requisiti", + "installation": "Installazione", + "clawHubCli": "CLI di ClawHub", + "openClawChat": "OpenClaw Chat (incolla questo nella tua conversazione)", + "links": "Link", + "github": "GitHub", + "copyGithubUrl": "Copia l'URL di GitHub", + "clawHub": "ClawHub", + "skillNotFound": "Skill non trovata" + }, + "Skills": { + "metaTitle": "Esplora le skill", + "metaDescription": "Esplora migliaia di skill OpenClaw per il tuo agente di coding in decine di categorie — con ricerca, filtri e una classifica delle skill di tendenza.", + "ogTitle": "Esplora le skill — {siteName}", + "ogDescription": "Migliaia di skill OpenClaw per il tuo agente di coding.", + "heading": "Esplora le skill", + "searchLabel": "Cerca: \"{query}\"", + "count": "{count, number} skill trovate", + "sortLatest": "Più recenti", + "sortPopular": "Più popolari", + "sortViews": "Più viste", + "sortStars": "Più stellate", + "agentAll": "Tutti gli agenti", + "agentClaudeCode": "Claude Code", + "agentCursor": "Cursor", + "agentWindsurf": "Windsurf", + "agentCodex": "Codex", + "agentAider": "Aider", + "agentCline": "Cline", + "agentCopilot": "Copilot", + "agentGeneric": "Generico", + "all": "Tutte", + "emptyTitle": "Nessuna skill trovata", + "emptyHint": "Prova a modificare la ricerca o i filtri", + "pageOf": "Pagina {page} di {total}" + }, + "Trending": { + "metaTitle": "Skill di tendenza", + "metaDescription": "Le skill OpenClaw più scaricate e più apprezzate del momento — una classifica live di ciò che gli agenti di coding stanno installando.", + "ogTitle": "Skill di tendenza — {siteName}", + "ogDescription": "Una classifica live delle skill OpenClaw più popolari.", + "title": "Skill di tendenza", + "subtitle": "Scopri le skill OpenClaw più popolari classificate dalla community", + "searchPlaceholder": "Cerca skill di tendenza…", + "categories": "Categorie", + "allCategories": "Tutte le categorie", + "downloads": "Download", + "stars": "Stelle", + "likes": "Like", + "views": "Visualizzazioni", + "skill": "Skill", + "count": "{count, plural, =0 {Nessuna skill} one {# skill} other {# skill}}", + "countInCategory": "{count, plural, =0 {Nessuna skill} one {# skill} other {# skill}} in {category}", + "emptyTitle": "Nessuna skill trovata", + "emptySubtitle": "Prova a modificare la ricerca o i filtri", + "byAuthor": "di {author}", + "showing": "Da {from, number} a {to, number} di {total, number}", + "prev": "Prec", + "next": "Succ" + }, + "Admin": { + "accessDenied": "Accesso negato", + "accessDeniedDescription": "Servono privilegi di amministratore per accedere a questa pagina.", + "goHome": "Vai alla home", + "backToSite": "Torna al sito", + "panelTitle": "Pannello admin", + "navDashboard": "Dashboard", + "navSkills": "Skill", + "navAgents": "Agenti", + "navCategories": "Categorie", + "navUsers": "Utenti", + "navLogs": "Log", + "dashboardTitle": "Dashboard", + "statTotalSkills": "Skill totali", + "statTotalUsers": "Utenti totali", + "statCategories": "Categorie", + "statTotalLikes": "Like totali", + "statTotalViews": "Visualizzazioni totali", + "statTotalDownloads": "Download totali", + "statPendingReview": "In attesa di revisione", + "recentSkills": "Skill recenti", + "topSkillsByDownloads": "Skill principali per download", + "viewAll": "Vedi tutto", + "byAuthor": "di {author}", + "statusApproved": "approvata", + "statusPending": "in attesa", + "statusRejected": "rifiutata", + "loading": "Caricamento…", + "cancel": "Annulla", + "save": "Salva", + "saveChanges": "Salva modifiche", + "delete": "Elimina", + "edit": "Modifica", + "confirm": "Conferma", + "preview": "Anteprima", + "agentsTitle": "Agenti", + "agentsSubtitle": "Esamina e modera gli agenti inviati.", + "filterPending": "In attesa", + "filterApproved": "Approvati", + "filterRejected": "Rifiutati", + "filterAll": "Tutti", + "noAgentsInView": "Nessun agente in questa vista.", + "unknownPublisher": "sconosciuto", + "uncategorized": "senza categoria", + "agentMetaSkills": "{count, number} skill", + "noScenarios": "nessuno scenario", + "reviewNoteLabel": "Nota: {note}", + "editScenarios": "Modifica scenari", + "actionApprove": "Approva", + "actionReject": "Rifiuta", + "feature": "Metti in evidenza", + "unfeature": "Togli dall'evidenza", + "scenariosEditorHint": "场景 Scenari — 点击切换 / tocca per assegnare", + "scenarioOption": "{nameZh} · {name}", + "selectedCount": "{count, number} selezionati", + "rejectReasonPrompt": "Motivo del rifiuto (facoltativo):", + "deleteAgentConfirm": "Eliminare definitivamente questo agente?", + "skillsTitle": "Gestione skill", + "searchSkillsPlaceholder": "Cerca skill...", + "allStatuses": "Tutti gli stati", + "filterStatusPending": "In attesa", + "filterStatusApproved": "Approvate", + "filterStatusRejected": "Rifiutate", + "allCategories": "Tutte le categorie", + "selectedLabel": "{count, number} selezionate", + "batchApprove": "Approva", + "batchReject": "Rifiuta", + "batchFeature": "Metti in evidenza", + "batchDelete": "Elimina", + "batchDeleteConfirm": "Eliminare {count, number} skill? L'operazione non può essere annullata.", + "colName": "Nome", + "colAuthor": "Autore", + "colCategory": "Categoria", + "colStatus": "Stato", + "colDownloads": "Download", + "colLikes": "Like", + "colViews": "Visualizzazioni", + "colCreated": "Creata", + "colActions": "Azioni", + "noSkillsFound": "Nessuna skill trovata.", + "showingRange": "Da {from, number} a {to, number} di {total, number}", + "editSkillTitle": "Modifica skill", + "fieldName": "Nome", + "fieldAuthor": "Autore", + "fieldBrief": "Sintesi", + "fieldStatus": "Stato", + "optionPending": "In attesa", + "optionApproved": "Approvata", + "optionRejected": "Rifiutata", + "fieldFeatured": "In evidenza", + "deleteSkillTitle": "Elimina skill", + "deleteSkillConfirm": "Vuoi davvero eliminare {name}? Questa azione non può essere annullata.", + "categoriesTitle": "Categorie", + "addCategory": "Aggiungi categoria", + "editCategoryTitle": "Modifica categoria", + "newCategoryTitle": "Nuova categoria", + "fieldIcon": "Icona", + "fieldDescription": "Descrizione", + "categoryNamePlaceholder": "es. Analisi dati", + "categoryIconPlaceholder": "es. chart-bar o emoji", + "categoryDescriptionPlaceholder": "Breve descrizione", + "nameRequired": "Il nome è obbligatorio.", + "saveCategoryFailed": "Salvataggio della categoria non riuscito", + "deleteCategoryFailed": "Eliminazione della categoria non riuscita", + "fetchCategoriesFailed": "Recupero delle categorie non riuscito", + "deleteFailed": "Eliminazione non riuscita", + "somethingWentWrong": "Qualcosa è andato storto", + "update": "Aggiorna", + "create": "Crea", + "colSlug": "Slug", + "colSkills": "Skill", + "colDescription": "Descrizione", + "noCategoriesFound": "Nessuna categoria trovata. Aggiungine una sopra.", + "deleting": "...", + "cannotDeleteHasSkills": "Impossibile eliminare: contiene skill", + "categoriesTotal": "{count, number} {count, plural, one {categoria} other {categorie}} in totale", + "usersTitle": "Utenti", + "usersTotal": "{count, number} {count, plural, one {utente} other {utenti}} in totale", + "searchUsersPlaceholder": "Cerca per nome o email...", + "colEmail": "Email", + "colRole": "Ruolo", + "colProvider": "Provider", + "colJoined": "Iscritto il", + "loadingUsers": "Caricamento utenti...", + "noUsersFound": "Nessun utente trovato.", + "noName": "---", + "roleAdmin": "admin", + "roleUser": "utente", + "providerCredentials": "credenziali", + "demote": "Retrocedi", + "promote": "Promuovi", + "demoteToUser": "Retrocedi a utente", + "promoteToAdmin": "Promuovi ad admin", + "logsTitle": "Log admin", + "logsTotal": "{count, number} {count, plural, one {voce} other {voci}} in totale", + "colTimestamp": "Timestamp", + "colAdmin": "Admin", + "colAction": "Azione", + "colTargetType": "Tipo di target", + "colTargetId": "ID target", + "colDetail": "Dettaglio", + "loadingLogs": "Caricamento log...", + "noLogsFound": "Nessun log trovato.", + "emptyDetail": "---", + "actionCreate": "creazione", + "actionUpdate": "aggiornamento", + "actionDelete": "eliminazione", + "actionApproveLog": "approvazione", + "actionRejectLog": "rifiuto", + "actionRoleChange": "cambio di ruolo", + "targetSkill": "skill", + "targetAgent": "agente", + "targetCategory": "categoria", + "targetUser": "utente" + }, + "Auth": { + "signInTitle": "Accedi a TakoAPI", + "signInSubtitle": "Accedi alla tua dashboard delle skill", + "signUpTitle": "Crea un account", + "signUpSubtitle": "Unisciti alla community TakoAPI", + "continueWithGoogle": "Continua con Google", + "continueWithApple": "Continua con Apple", + "signUpWithGoogle": "Registrati con Google", + "signUpWithApple": "Registrati con Apple", + "or": "oppure", + "name": "Nome", + "email": "Email", + "password": "Password", + "passwordHint": "Password (minimo 8 caratteri)", + "signIn": "Accedi", + "signingIn": "Accesso in corso...", + "createAccount": "Crea account", + "creatingAccount": "Creazione account in corso...", + "invalidCredentials": "Email o password non validi", + "registrationFailed": "Registrazione non riuscita", + "somethingWentWrong": "Qualcosa è andato storto", + "noAccount": "Non hai un account?", + "signUpLink": "Registrati", + "haveAccount": "Hai già un account?", + "signInLink": "Accedi" + }, + "Dashboard": { + "title": "Dashboard per sviluppatori", + "signInPrompt": "Accedi per gestire le chiavi API e vedere l'utilizzo.", + "signIn": "Accedi", + "description": "Gestisci le chiavi API e monitora l'utilizzo del gateway. Una chiave, una fattura, qualsiasi agente.", + "apiKeys": "Chiavi API", + "createKey": "Crea chiave", + "creating": "Creazione…", + "copyKeyWarning": "Copia subito questa chiave — non verrà mostrata di nuovo.", + "copy": "Copia", + "copied": "Copiato", + "noKeys": "Ancora nessuna chiave. Creane una per iniziare a invocare gli agenti.", + "keyFallbackName": "chiave", + "created": "creata il {date}", + "lastUsed": "ultimo utilizzo {date}", + "neverUsed": "mai utilizzata", + "revoke": "Revoca", + "revokeConfirm": "Revocare questa chiave? Le app che la usano smetteranno di funzionare.", + "quickstart": "Avvio rapido", + "usage": "Utilizzo", + "totalCalls": "Chiamate totali", + "agentsUsed": "Agenti utilizzati", + "totalCount": "{count, number}", + "tableAgent": "Agente", + "tableProtocol": "Protocollo", + "tableStatus": "Stato", + "tableLatency": "Latenza", + "tableWhen": "Quando", + "noCalls": "Ancora nessuna chiamata. Crea una chiave e invoca un agente per vedere qui l'utilizzo." + }, + "Profile": { + "title": "Il mio profilo", + "signInPrompt": "Accedi per visualizzare il tuo profilo.", + "signIn": "Accedi", + "submissions": "Invii", + "likes": "Like", + "views": "Visualizzazioni", + "statValue": "{count, number}", + "mySubmissions": "I miei invii", + "submitNew": "Invia nuovo", + "tab_all": "Tutti", + "tab_approved": "Approvati", + "tab_pending": "In attesa", + "tab_rejected": "Rifiutati", + "tabCount": "{count, number}", + "emptyTab": "Nessun invio in questa scheda", + "submitFirst": "Invia la tua prima skill", + "statusApproved": "Approvata", + "statusPending": "In attesa di revisione", + "statusRejected": "Rifiutata", + "reviewerNote": "Nota del revisore:" + }, + "Submit": { + "title": "Invia una skill", + "subtitle": "Condividi la tua skill OpenClaw con la community", + "signInPrompt": "Accedi per inviare le skill.", + "signIn": "Accedi", + "skillSource": "Origine della skill", + "githubUrl": "URL GitHub", + "clawSkillsUrl": "URL ClawSkills.sh", + "githubUrlPlaceholder": "https://github.com/username/repo", + "clawSkillsUrlPlaceholder": "https://clawskills.sh/skills/author-skillname", + "autoFill": "Compilazione automatica", + "fetching": "Recupero in corso...", + "filled": "Compilato!", + "skillName": "Nome della skill", + "skillNamePlaceholder": "es. my-awesome-skill", + "category": "Categoria", + "selectCategory": "Seleziona una categoria", + "categoryOption": "{name} ({count})", + "brief": "Sintesi", + "briefHelper": "- Riassunto in una riga", + "briefPlaceholder": "Una breve descrizione di ciò che fa la tua skill", + "skillDetails": "Dettagli della skill", + "skillDetailsHelper": "- Compilato automaticamente dal README", + "whatItDoes": "Cosa fa questa skill", + "whatItDoesPlaceholder": "Spiegazione dettagliata di ciò che fa questa skill, delle sue funzionalità e capacità...", + "exampleWorkflow": "Esempio di workflow", + "exampleWorkflowHelper": "- INPUT / passaggi AGENT / OUTPUT", + "exampleWorkflowPlaceholder": "INPUT\nL'utente chiede: fai qualcosa di utile\n\nAGENT\n1\nEsegui `my-skill action` per svolgere il task\n2\nVerifica il risultato\n\nOUTPUT\nTask completato con successo", + "requirements": "Requisiti", + "requirementsPlaceholder": "- Node.js 18+\n- Chiave API dal servizio X\n- ecc.", + "submitSkill": "Invia skill", + "submitting": "Invio in corso...", + "enterUrlFirst": "Inserisci prima un URL", + "autoFillFailed": "Compilazione automatica non riuscita", + "submitFailed": "Invio non riuscito", + "somethingWentWrong": "Qualcosa è andato storto" + }, + "SubmitAgent": { + "title": "Pubblica un agente", + "signInPrompt": "Accedi per pubblicare un agente.", + "signIn": "Accedi", + "intro": "Inserisci un agente invocabile nel marketplace. Invia l'URL della sua AgentCard A2A e analizzeremo il resto, oppure compilalo manualmente.", + "tabUrl": "URL AgentCard", + "tabManual": "Manuale", + "cardUrlLabel": "URL AgentCard", + "cardUrlPlaceholder": "https://your-agent.com/.well-known/agent-card.json", + "cardUrlHelp": "Recuperiamo e convalidiamo l'AgentCard A2A (nome, endpoint, capacità, skill).", + "nameLabel": "Nome dell'agente", + "namePlaceholder": "es. Weather Oracle", + "descriptionLabel": "Descrizione", + "descriptionPlaceholder": "Cosa fa questo agente?", + "endpointLabel": "URL endpoint", + "endpointPlaceholder": "https://your-agent.com/a2a", + "protocolsLabel": "Protocolli", + "protocolOpenAiCompat": "Compatibile con OpenAI", + "categoryLabel": "Categoria", + "uncategorized": "Senza categoria", + "pricingLabel": "Prezzo", + "pricingFree": "Gratis", + "pricingPerCall": "Per chiamata", + "pricingPerTask": "Per task", + "pricingPerToken": "Per 1k token", + "unitPriceLabel": "Prezzo unitario (USD)", + "unitPricePlaceholder": "0.002", + "homepageLabel": "Homepage", + "optional": "facoltativo", + "homepagePlaceholder": "https://your-agent.com", + "submit": "Pubblica agente", + "submitting": "Invio in corso…", + "submitFailed": "Invio non riuscito", + "somethingWentWrong": "Qualcosa è andato storto", + "successTitle": "Inviato 🎉", + "pendingReview": "{name} è ora in attesa di revisione.", + "successDetail": "Verificheremo l'AgentCard e la pubblicheremo sul marketplace una volta approvata.", + "backToMarketplace": "← Torna al marketplace" + } +} diff --git a/messages/ja.json b/messages/ja.json new file mode 100644 index 000000000..adc84d590 --- /dev/null +++ b/messages/ja.json @@ -0,0 +1,593 @@ +{ + "Metadata": { + "tagline": "すべてのエージェントに、ひとつのAPIで", + "description": "ひとつの統合APIでAIエージェントを発見・呼び出し — エージェント版のOpenRouter。数百のオープンソースエージェントプロジェクトと、コーディングエージェント向けの数千のOpenClawスキルのディレクトリを閲覧できます。" + }, + "LocaleSwitcher": { + "label": "言語" + }, + "Header": { + "searchPlaceholder": "エージェントを検索...", + "agents": "エージェント", + "skills": "スキル", + "trending": "トレンド", + "publish": "公開", + "publishAgent": "エージェントを公開", + "account": "アカウント", + "mySkills": "マイスキル", + "apiUsage": "API・利用状況", + "adminPanel": "管理パネル", + "signIn": "サインイン", + "signOut": "サインアウト" + }, + "Footer": { + "tagline": "すべてのエージェントに、ひとつのAPIで — さらにコーディングエージェント向けの数千のOpenClawスキルも。", + "agentRegistry": "エージェントレジストリ:", + "platform": "プラットフォーム", + "resources": "リソース", + "installInAgent": "エージェントにインストール", + "browseAgents": "エージェントを見る", + "publishAnAgent": "エージェントを公開", + "developerDashboard": "開発者ダッシュボード", + "browseSkills": "スキルを見る", + "awesomeList": "Awesomeリスト", + "clawHub": "ClawHub", + "copyright": "© {year} TakoAPI. OpenClawコミュニティのために構築。" + }, + "Home": { + "heroTitle": "ひとつのAPIで、すべてのエージェントに", + "heroSubtitle": "ひとつの統合APIで{agents, number}のAIエージェントを発見・呼び出し — さらにコーディングエージェント向けの{skills, number}のスキルも。", + "browseAgents": "エージェントを見る", + "publishAnAgent": "エージェントを公開", + "agentRegistry": "エージェントレジストリ:", + "browseByScenario": "シナリオから探す", + "allAgents": "すべてのエージェント", + "featuredAgents": "注目のエージェント", + "browseAll": "すべて見る", + "popularProjects": "人気のオープンソースプロジェクト", + "selfHostable": "セルフホスト可能 {count, number}件", + "skillTitle": "OpenClaw向けTakoAPIスキル", + "official": "公式", + "skillDescription": "自然な対話でOpenClawスキルを検索・インストール・管理 — TakoAPIマーケットプレイスが提供。", + "viewOnGithub": "GitHubで見る", + "askAgent": "またはエージェントに頼む:「TakoAPIスキルをインストールして」", + "usingCodingAgent": "Claude Code、Codex、OpenCodeをお使いですか?", + "oneCommandInstall": "ワンコマンドでインストール", + "mustHaveSkills": "必携スキル", + "viewRankings": "ランキングを見る", + "categories": "カテゴリ", + "viewAll": "すべて見る", + "moreCategories": "{count, plural, other {他+#カテゴリ}}", + "latestSkills": "最新スキル" + }, + "Scenarios": { + "frontend": "フロントエンド", + "backend": "バックエンド", + "coding": "コーディング・開発", + "agent-frameworks": "エージェントフレームワーク", + "devops": "DevOps・自動化", + "data-analysis": "データ・分析", + "product-design": "プロダクトデザイン", + "creative": "クリエイティブ・メディア", + "presentations": "プレゼン・ドキュメント", + "investing": "上場株式投資", + "venture-analysis": "VC・ビジネスモデル", + "marketing": "マーケティング・グロース", + "sales": "セールス・CRM", + "customer-support": "カスタマーサポート", + "research": "リサーチ・検索", + "writing": "ライティング・コンテンツ", + "productivity": "生産性・アシスタント" + }, + "AgentDetail": { + "notFound": "エージェントが見つかりません", + "backToMarketplace": "← エージェントマーケットプレイス", + "openSourceProject": "オープンソースプロジェクト", + "signedCard": "署名付きカード", + "verifiedPublisher": "認証済み公開者", + "by": "{name} 作", + "publisherOpenSource": "オープンソース", + "publisherUnknown": "不明", + "scenario": "シナリオ:", + "stars": "{count, number} スター", + "selfHost": "セルフホスト", + "streaming": "ストリーミング", + "pushNotifications": "プッシュ通知", + "skills": "スキル", + "skillsCount": "({count, number})", + "noSkillsProject": "オープンソースプロジェクトです — コードを確認し、GitHubからセルフホストできます。", + "noSkillsHosted": "このエージェントはAgentCardに構造化されたスキルを公開していません。", + "inputMode": "入力: {mode}", + "outputMode": "出力: {mode}", + "openSourceProjectHeading": "オープンソースプロジェクト", + "openSourceProjectNote": "セルフホストするか、コードを確認できます。TakoAPIゲートウェイ経由では呼び出せません。", + "viewOnGithub": "GitHubで見る", + "integration": "連携", + "endpoint": "エンドポイント", + "agentCard": "AgentCard", + "homepage": "ホームページ", + "callThroughTakoApi": "TakoAPI経由で呼び出す", + "gatewayPhase2": "統合ゲートウェイ — 呼び出し機能はフェーズ2で提供予定。", + "breadcrumbHome": "ホーム", + "breadcrumbMarketplace": "エージェントマーケットプレイス" + }, + "Agents": { + "metaTitle": "エージェントマーケットプレイス", + "metaDescription": "すべてのエージェントに、ひとつのAPIで。ひとつの統合APIでAIエージェントや数百のオープンソースエージェントプロジェクトを閲覧・呼び出し — オープンなA2A AgentCardで記述されています。", + "ogTitle": "エージェントマーケットプレイス — {siteName}", + "ogDescription": "ひとつの統合APIでAIエージェントやオープンソースエージェントプロジェクトを発見・呼び出し。", + "heroTitle": "エージェントマーケットプレイス", + "heroTagline": "すべてのエージェントに、ひとつのAPIで。", + "heroSubtitle": "ひとつの統合APIでAIエージェントを発見・呼び出し — オープンなA2A AgentCardで記述されています。", + "searchPlaceholder": "名前または説明でエージェントを検索…", + "search": "検索", + "all": "すべて", + "kindAgents": "エージェント", + "kindProjects": "プロジェクト", + "scenarioFilter": "シナリオ:", + "protocolFilter": "プロトコル:", + "pricingFilter": "料金:", + "categoryFilter": "カテゴリ:", + "sortLabel": "並び順:", + "sortLatest": "新着順", + "sortStars": "スター数", + "sortPopular": "人気順", + "sortCalls": "呼び出し数順", + "sortRating": "評価順", + "pricingFree": "無料", + "pricingPerCall": "呼び出しごと", + "pricingPerTask": "タスクごと", + "pricingPerToken": "1kトークンあたり", + "count": "{count, plural, other {#件のエージェント}}", + "emptyTitle": "条件に一致するエージェントはまだありません。", + "emptyCta": "最初の1件を公開する →", + "prev": "← 前へ", + "next": "次へ →", + "pageOf": "{total}ページ中{page}ページ" + }, + "Components": { + "homeSearchPlaceholder": "名前・説明・作者でスキルを検索...", + "homeSearchButton": "検索", + "agentFree": "無料", + "agentPerCall": "{price}/呼び出し", + "agentPerTask": "{price}/タスク", + "agentPerToken": "{price}/1kトークン", + "agentPriceFallbackCall": "呼び出し", + "agentPriceFallbackTask": "タスク", + "agentPriceFallbackToken": "トークン", + "agentBadgeProject": "プロジェクト", + "agentBadgeStreaming": "ストリーミング", + "agentOpenSource": "オープンソース", + "agentSelfHost": "セルフホスト", + "agentSkills": "{count, plural, other {#件のスキル}}", + "skillBy": "{author} 作", + "skillLikes": "{count, number}" + }, + "Install": { + "metaTitle": "Claude Code、Codex、OpenCodeにインストール", + "title": "TakoAPIをClaude Code、Codex、OpenCodeにインストール", + "description": "ワンコマンドでTakoAPIスキルをコーディングエージェントにインストール — ひとつの統合ゲートウェイでAIエージェントを発見・呼び出し、OpenClawスキルカタログを検索できます。Claude Code、Codex、OpenCodeに対応。", + "stepRunInstallerName": "インストーラーを実行", + "stepRunInstallerText": "実行: curl -fsSL https://takoapi.com/install.sh | sh", + "stepUseAgentName": "エージェントからTakoAPIを使う", + "stepUseAgentText": "コーディングエージェントに、TakoAPI上のAIエージェントを探すか呼び出すよう頼みます。", + "heroBadge": "ワンコマンドで3つのエージェント", + "heroTitle": "TakoAPIをコーディングエージェントにインストール", + "heroSubtitle": "TakoAPIスキルをClaude Code、Codex、OpenCodeに追加 — ターミナルから、ひとつの統合ゲートウェイで任意のAIエージェントを発見・呼び出せます。", + "whatTitle": "インストーラーの動作", + "whatWritesSkill": "各エージェント専用のスキルディレクトリに、名前空間付きのTakoAPIスキルを1つだけ書き込みます — 共有設定ファイルを編集することはありません。", + "whatTeachesAgent": "エージェントにTakoAPIレジストリとゲートウェイをHTTP経由で呼び出す方法を教えます — 追加の依存関係も、実行するサーバーも不要です。", + "whatMcpServer": "ホスト型ツールがお好みですか? 代わりにTakoAPIのMCPサーバーを登録すれば — claude mcp add --transport http takoapi https://takoapi.com/mcpsearch_agentsget_agentsearch_skillsinvoke_agentがネイティブMCPツールとして利用できます。", + "whatIdempotent": "冪等(再実行しても安全)で、--uninstallにより完全に元に戻せます。", + "whatApiKey": "従量課金ゲートウェイを使うには、ダッシュボードでAPIキーを作成し、TAKO_KEYとしてエクスポートします。", + "footnote": "Windowsをお使いか、すでにNode環境ですか? npx takoapi-installを使ってください。先にスクリプトを読みたい場合は、takoapi.com/install.shでプレーンなシェルとして確認できます。" + }, + "InstallTabs": { + "universalNote": "TakoAPIスキルをClaude Code、Codex、OpenCodeに自動検出してインストールします。再実行も安全で、root権限は不要です。WindowsやNode環境ではを使ってください。", + "tablistLabel": "コーディングエージェント", + "claudeCodeTagline": "AnthropicのCLI", + "codexTagline": "OpenAIのCLI", + "opencodeTagline": "opencode.ai", + "skillHeading": "スキル — エージェントにTakoAPIの呼び出し方を教えます", + "skillUniversalHint": "…または上記の汎用コマンドを使ってください — {name}にも対応しています。", + "writesHeading": "書き込み先", + "howToUseHeading": "使い方", + "claudeCodeUse": "自動で読み込まれます — Claudeに、TakoAPI上のエージェントを探すよう頼むだけです。", + "codexUse": "$takoapiで呼び出すか、/skillsメニューから選択します。", + "opencodeUse": "/takoapi を実行するか、@takoapiに引き継ぎます。", + "mcpHeading": "MCPサーバー — ホスト型ツール、インストール不要", + "claudeCodeMcpHint": "ワンコマンド。invoke_agentを有効にするには --header \"Authorization: Bearer $TAKO_KEY\" を追加します。", + "codexMcpHint": "~/.codex/config.tomlに追加", + "opencodeMcpHint": "~/.config/opencode/opencode.jsonにマージ", + "mcpToolsNote": "追加されるツール: search_agentsget_agentsearch_skillsinvoke_agent。", + "uninstallHeading": "アンインストール", + "uninstallNote": "TakoAPI自身のファイルのみを削除します — 他のエージェント設定には一切触れません。", + "copy": "コピー", + "copied": "コピーしました" + }, + "SkillDetail": { + "notFoundMetaTitle": "スキルが見つかりません", + "backToSkills": "スキル一覧に戻る", + "by": "{author} 作", + "downloads": "ダウンロード", + "stars": "スター", + "views": "閲覧数", + "likes": "{count, plural, other {#件のいいね}}", + "brief": "概要", + "description": "説明", + "whatThisSkillDoes": "このスキルでできること", + "whenToUseIt": "使いどころ", + "exampleWorkflow": "ワークフロー例", + "workflowInput": "入力", + "workflowAgent": "エージェント", + "workflowOutput": "出力", + "requirements": "要件", + "installation": "インストール", + "clawHubCli": "ClawHub CLI", + "openClawChat": "OpenClawチャット(会話に貼り付けてください)", + "links": "リンク", + "github": "GitHub", + "copyGithubUrl": "GitHub URLをコピー", + "clawHub": "ClawHub", + "skillNotFound": "スキルが見つかりません" + }, + "Skills": { + "metaTitle": "スキルを見る", + "metaDescription": "コーディングエージェント向けの数千のOpenClawスキルを、数十のカテゴリにわたって閲覧 — 検索、フィルタリング、トレンドリーダーボード付き。", + "ogTitle": "スキルを見る — {siteName}", + "ogDescription": "コーディングエージェント向けの数千のOpenClawスキル。", + "heading": "スキルを見る", + "searchLabel": "検索: \"{query}\"", + "count": "{count, number}件のスキルが見つかりました", + "sortLatest": "新着順", + "sortPopular": "人気順", + "sortViews": "閲覧数順", + "sortStars": "スター数順", + "agentAll": "すべてのエージェント", + "agentClaudeCode": "Claude Code", + "agentCursor": "Cursor", + "agentWindsurf": "Windsurf", + "agentCodex": "Codex", + "agentAider": "Aider", + "agentCline": "Cline", + "agentCopilot": "Copilot", + "agentGeneric": "汎用", + "all": "すべて", + "emptyTitle": "スキルが見つかりません", + "emptyHint": "検索条件やフィルターを調整してみてください", + "pageOf": "{total}ページ中{page}ページ" + }, + "Trending": { + "metaTitle": "トレンドのスキル", + "metaDescription": "いま最もダウンロードされ、最もいいねを集めているOpenClawスキル — コーディングエージェントが何をインストールしているかをリアルタイムで示すリーダーボード。", + "ogTitle": "トレンドのスキル — {siteName}", + "ogDescription": "人気のOpenClawスキルをリアルタイムで示すリーダーボード。", + "title": "トレンドのスキル", + "subtitle": "コミュニティのランキングで人気のOpenClawスキルを発見しましょう", + "searchPlaceholder": "トレンドのスキルを検索…", + "categories": "カテゴリ", + "allCategories": "すべてのカテゴリ", + "downloads": "ダウンロード", + "stars": "スター", + "likes": "いいね", + "views": "閲覧数", + "skill": "スキル", + "count": "{count, plural, other {#件のスキル}}", + "countInCategory": "{category}内に{count, plural, other {#件のスキル}}", + "emptyTitle": "スキルが見つかりません", + "emptySubtitle": "検索条件やフィルターを調整してみてください", + "byAuthor": "{author} 作", + "showing": "{total, number}件中{from, number}〜{to, number}件を表示", + "prev": "前へ", + "next": "次へ" + }, + "Admin": { + "accessDenied": "アクセスが拒否されました", + "accessDeniedDescription": "このページにアクセスするには管理者権限が必要です。", + "goHome": "ホームへ", + "backToSite": "サイトに戻る", + "panelTitle": "管理パネル", + "navDashboard": "ダッシュボード", + "navSkills": "スキル", + "navAgents": "エージェント", + "navCategories": "カテゴリ", + "navUsers": "ユーザー", + "navLogs": "ログ", + "dashboardTitle": "ダッシュボード", + "statTotalSkills": "総スキル数", + "statTotalUsers": "総ユーザー数", + "statCategories": "カテゴリ数", + "statTotalLikes": "総いいね数", + "statTotalViews": "総閲覧数", + "statTotalDownloads": "総ダウンロード数", + "statPendingReview": "レビュー待ち", + "recentSkills": "最近のスキル", + "topSkillsByDownloads": "ダウンロード数上位のスキル", + "viewAll": "すべて見る", + "byAuthor": "{author} 作", + "statusApproved": "承認済み", + "statusPending": "保留中", + "statusRejected": "却下", + "loading": "読み込み中…", + "cancel": "キャンセル", + "save": "保存", + "saveChanges": "変更を保存", + "delete": "削除", + "edit": "編集", + "confirm": "確認", + "preview": "プレビュー", + "agentsTitle": "エージェント", + "agentsSubtitle": "投稿されたエージェントをレビュー・モデレーションします。", + "filterPending": "保留中", + "filterApproved": "承認済み", + "filterRejected": "却下", + "filterAll": "すべて", + "noAgentsInView": "このビューにエージェントはありません。", + "unknownPublisher": "不明", + "uncategorized": "未分類", + "agentMetaSkills": "{count, number}件のスキル", + "noScenarios": "シナリオなし", + "reviewNoteLabel": "メモ: {note}", + "editScenarios": "シナリオを編集", + "actionApprove": "承認", + "actionReject": "却下", + "feature": "注目に設定", + "unfeature": "注目を解除", + "scenariosEditorHint": "场景 シナリオ — 点击切换 / タップで割り当て", + "scenarioOption": "{nameZh} · {name}", + "selectedCount": "{count, number}件選択中", + "rejectReasonPrompt": "却下の理由(任意):", + "deleteAgentConfirm": "このエージェントを完全に削除しますか?", + "skillsTitle": "スキル管理", + "searchSkillsPlaceholder": "スキルを検索...", + "allStatuses": "すべてのステータス", + "filterStatusPending": "保留中", + "filterStatusApproved": "承認済み", + "filterStatusRejected": "却下", + "allCategories": "すべてのカテゴリ", + "selectedLabel": "{count, number}件選択中", + "batchApprove": "承認", + "batchReject": "却下", + "batchFeature": "注目に設定", + "batchDelete": "削除", + "batchDeleteConfirm": "{count, number}件のスキルを削除しますか? この操作は取り消せません。", + "colName": "名前", + "colAuthor": "作者", + "colCategory": "カテゴリ", + "colStatus": "ステータス", + "colDownloads": "ダウンロード", + "colLikes": "いいね", + "colViews": "閲覧数", + "colCreated": "作成日", + "colActions": "操作", + "noSkillsFound": "スキルが見つかりません。", + "showingRange": "{total, number}件中{from, number}〜{to, number}件を表示", + "editSkillTitle": "スキルを編集", + "fieldName": "名前", + "fieldAuthor": "作者", + "fieldBrief": "概要", + "fieldStatus": "ステータス", + "optionPending": "保留中", + "optionApproved": "承認済み", + "optionRejected": "却下", + "fieldFeatured": "注目", + "deleteSkillTitle": "スキルを削除", + "deleteSkillConfirm": "{name}を削除してもよろしいですか? この操作は取り消せません。", + "categoriesTitle": "カテゴリ", + "addCategory": "カテゴリを追加", + "editCategoryTitle": "カテゴリを編集", + "newCategoryTitle": "新規カテゴリ", + "fieldIcon": "アイコン", + "fieldDescription": "説明", + "categoryNamePlaceholder": "例: データ分析", + "categoryIconPlaceholder": "例: chart-bar または絵文字", + "categoryDescriptionPlaceholder": "短い説明", + "nameRequired": "名前は必須です。", + "saveCategoryFailed": "カテゴリの保存に失敗しました", + "deleteCategoryFailed": "カテゴリの削除に失敗しました", + "fetchCategoriesFailed": "カテゴリの取得に失敗しました", + "deleteFailed": "削除に失敗しました", + "somethingWentWrong": "問題が発生しました", + "update": "更新", + "create": "作成", + "colSlug": "スラッグ", + "colSkills": "スキル", + "colDescription": "説明", + "noCategoriesFound": "カテゴリが見つかりません。上から追加してください。", + "deleting": "...", + "cannotDeleteHasSkills": "削除できません: スキルが存在します", + "categoriesTotal": "{count, plural, other {#件のカテゴリ}}合計", + "usersTitle": "ユーザー", + "usersTotal": "{count, plural, other {#人のユーザー}}合計", + "searchUsersPlaceholder": "名前またはメールで検索...", + "colEmail": "メール", + "colRole": "ロール", + "colProvider": "プロバイダー", + "colJoined": "登録日", + "loadingUsers": "ユーザーを読み込み中...", + "noUsersFound": "ユーザーが見つかりません。", + "noName": "---", + "roleAdmin": "管理者", + "roleUser": "ユーザー", + "providerCredentials": "認証情報", + "demote": "降格", + "promote": "昇格", + "demoteToUser": "ユーザーに降格", + "promoteToAdmin": "管理者に昇格", + "logsTitle": "管理ログ", + "logsTotal": "{count, plural, other {#件のエントリ}}合計", + "colTimestamp": "タイムスタンプ", + "colAdmin": "管理者", + "colAction": "アクション", + "colTargetType": "対象タイプ", + "colTargetId": "対象ID", + "colDetail": "詳細", + "loadingLogs": "ログを読み込み中...", + "noLogsFound": "ログが見つかりません。", + "emptyDetail": "---", + "actionCreate": "作成", + "actionUpdate": "更新", + "actionDelete": "削除", + "actionApproveLog": "承認", + "actionRejectLog": "却下", + "actionRoleChange": "ロール変更", + "targetSkill": "スキル", + "targetAgent": "エージェント", + "targetCategory": "カテゴリ", + "targetUser": "ユーザー" + }, + "Auth": { + "signInTitle": "TakoAPIにサインイン", + "signInSubtitle": "スキルダッシュボードにアクセス", + "signUpTitle": "アカウントを作成", + "signUpSubtitle": "TakoAPIコミュニティに参加", + "continueWithGoogle": "Googleで続ける", + "continueWithApple": "Appleで続ける", + "signUpWithGoogle": "Googleで登録", + "signUpWithApple": "Appleで登録", + "or": "または", + "name": "名前", + "email": "メール", + "password": "パスワード", + "passwordHint": "パスワード(8文字以上)", + "signIn": "サインイン", + "signingIn": "サインインしています...", + "createAccount": "アカウントを作成", + "creatingAccount": "アカウントを作成しています...", + "invalidCredentials": "メールアドレスまたはパスワードが正しくありません", + "registrationFailed": "登録に失敗しました", + "somethingWentWrong": "問題が発生しました", + "noAccount": "アカウントをお持ちでないですか?", + "signUpLink": "登録", + "haveAccount": "すでにアカウントをお持ちですか?", + "signInLink": "サインイン" + }, + "Dashboard": { + "title": "開発者ダッシュボード", + "signInPrompt": "APIキーを管理し、利用状況を確認するにはサインインしてください。", + "signIn": "サインイン", + "description": "APIキーを管理し、ゲートウェイの利用状況を監視します。ひとつのキー、ひとつの請求で、どのエージェントも。", + "apiKeys": "APIキー", + "createKey": "キーを作成", + "creating": "作成中…", + "copyKeyWarning": "今すぐこのキーをコピーしてください — 再表示はされません。", + "copy": "コピー", + "copied": "コピーしました", + "noKeys": "キーがまだありません。エージェントの呼び出しを始めるには作成してください。", + "keyFallbackName": "キー", + "created": "作成日 {date}", + "lastUsed": "最終使用 {date}", + "neverUsed": "未使用", + "revoke": "失効", + "revokeConfirm": "このキーを失効しますか? 使用中のアプリは動作しなくなります。", + "quickstart": "クイックスタート", + "usage": "利用状況", + "totalCalls": "総呼び出し数", + "agentsUsed": "使用エージェント数", + "totalCount": "{count, number}", + "tableAgent": "エージェント", + "tableProtocol": "プロトコル", + "tableStatus": "ステータス", + "tableLatency": "レイテンシ", + "tableWhen": "日時", + "noCalls": "呼び出しがまだありません。キーを作成してエージェントを呼び出すと、ここに利用状況が表示されます。" + }, + "Profile": { + "title": "マイプロフィール", + "signInPrompt": "プロフィールを表示するにはサインインしてください。", + "signIn": "サインイン", + "submissions": "投稿", + "likes": "いいね", + "views": "閲覧数", + "statValue": "{count, number}", + "mySubmissions": "マイ投稿", + "submitNew": "新規投稿", + "tab_all": "すべて", + "tab_approved": "承認済み", + "tab_pending": "保留中", + "tab_rejected": "却下", + "tabCount": "{count, number}", + "emptyTab": "このタブに投稿はありません", + "submitFirst": "最初のスキルを投稿する", + "statusApproved": "承認済み", + "statusPending": "レビュー待ち", + "statusRejected": "却下", + "reviewerNote": "レビュアーのメモ:" + }, + "Submit": { + "title": "スキルを投稿", + "subtitle": "あなたのOpenClawスキルをコミュニティに共有しましょう", + "signInPrompt": "スキルを投稿するにはサインインしてください。", + "signIn": "サインイン", + "skillSource": "スキルのソース", + "githubUrl": "GitHub URL", + "clawSkillsUrl": "ClawSkills.sh URL", + "githubUrlPlaceholder": "https://github.com/username/repo", + "clawSkillsUrlPlaceholder": "https://clawskills.sh/skills/author-skillname", + "autoFill": "自動入力", + "fetching": "取得中...", + "filled": "入力完了!", + "skillName": "スキル名", + "skillNamePlaceholder": "例: my-awesome-skill", + "category": "カテゴリ", + "selectCategory": "カテゴリを選択", + "categoryOption": "{name} ({count})", + "brief": "概要", + "briefHelper": "- 一行の要約", + "briefPlaceholder": "スキルの機能を簡潔に説明", + "skillDetails": "スキルの詳細", + "skillDetailsHelper": "- READMEから自動入力", + "whatItDoes": "このスキルでできること", + "whatItDoesPlaceholder": "このスキルの機能、特徴、できることを詳しく説明...", + "exampleWorkflow": "ワークフロー例", + "exampleWorkflowHelper": "- 入力 / エージェントの手順 / 出力", + "exampleWorkflowPlaceholder": "INPUT\nユーザーの依頼: 何か役立つことをする\n\nAGENT\n1\n`my-skill action`を実行してタスクを処理\n2\n結果を確認\n\nOUTPUT\nタスクが正常に完了", + "requirements": "要件", + "requirementsPlaceholder": "- Node.js 18+\n- サービスXのAPIキー\n- など", + "submitSkill": "スキルを投稿", + "submitting": "投稿中...", + "enterUrlFirst": "先にURLを入力してください", + "autoFillFailed": "自動入力に失敗しました", + "submitFailed": "投稿に失敗しました", + "somethingWentWrong": "問題が発生しました" + }, + "SubmitAgent": { + "title": "エージェントを公開", + "signInPrompt": "エージェントを公開するにはサインインしてください。", + "signIn": "サインイン", + "intro": "呼び出し可能なエージェントをマーケットプレイスに掲載します。A2A AgentCardのURLを送信すれば残りは自動で解析されます。手動で入力することもできます。", + "tabUrl": "AgentCard URL", + "tabManual": "手動", + "cardUrlLabel": "AgentCard URL", + "cardUrlPlaceholder": "https://your-agent.com/.well-known/agent-card.json", + "cardUrlHelp": "A2A AgentCard(名前、エンドポイント、機能、スキル)を取得して検証します。", + "nameLabel": "エージェント名", + "namePlaceholder": "例: Weather Oracle", + "descriptionLabel": "説明", + "descriptionPlaceholder": "このエージェントは何をしますか?", + "endpointLabel": "エンドポイントURL", + "endpointPlaceholder": "https://your-agent.com/a2a", + "protocolsLabel": "プロトコル", + "protocolOpenAiCompat": "OpenAI互換", + "categoryLabel": "カテゴリ", + "uncategorized": "未分類", + "pricingLabel": "料金", + "pricingFree": "無料", + "pricingPerCall": "呼び出しごと", + "pricingPerTask": "タスクごと", + "pricingPerToken": "1kトークンあたり", + "unitPriceLabel": "単価(USD)", + "unitPricePlaceholder": "0.002", + "homepageLabel": "ホームページ", + "optional": "任意", + "homepagePlaceholder": "https://your-agent.com", + "submit": "エージェントを公開", + "submitting": "送信中…", + "submitFailed": "投稿に失敗しました", + "somethingWentWrong": "問題が発生しました", + "successTitle": "送信しました 🎉", + "pendingReview": "{name}はレビュー待ちになりました。", + "successDetail": "AgentCardを検証し、承認され次第マーケットプレイスに公開します。", + "backToMarketplace": "← マーケットプレイスに戻る" + } +} diff --git a/messages/ko.json b/messages/ko.json new file mode 100644 index 000000000..84e359ef0 --- /dev/null +++ b/messages/ko.json @@ -0,0 +1,593 @@ +{ + "Metadata": { + "tagline": "모든 에이전트에 접근하는 단 하나의 API", + "description": "하나의 통합 API로 AI 에이전트를 검색하고 호출하세요 — 에이전트를 위한 OpenRouter입니다. 수백 개의 오픈소스 에이전트 프로젝트와 수천 개의 OpenClaw 스킬 디렉터리를 코딩 에이전트용으로 둘러보세요." + }, + "LocaleSwitcher": { + "label": "언어" + }, + "Header": { + "searchPlaceholder": "에이전트 검색...", + "agents": "에이전트", + "skills": "스킬", + "trending": "트렌딩", + "publish": "게시", + "publishAgent": "에이전트 게시", + "account": "계정", + "mySkills": "내 스킬", + "apiUsage": "API 및 사용량", + "adminPanel": "관리자 패널", + "signIn": "로그인", + "signOut": "로그아웃" + }, + "Footer": { + "tagline": "모든 에이전트에 접근하는 단 하나의 API — 여기에 코딩 에이전트용 수천 개의 OpenClaw 스킬까지.", + "agentRegistry": "에이전트 레지스트리:", + "platform": "플랫폼", + "resources": "리소스", + "installInAgent": "에이전트에 설치", + "browseAgents": "에이전트 둘러보기", + "publishAnAgent": "에이전트 게시", + "developerDashboard": "개발자 대시보드", + "browseSkills": "스킬 둘러보기", + "awesomeList": "Awesome 목록", + "clawHub": "ClawHub", + "copyright": "© {year} TakoAPI. OpenClaw 커뮤니티를 위해 만들었습니다." + }, + "Home": { + "heroTitle": "모든 에이전트에 접근하는 단 하나의 API", + "heroSubtitle": "하나의 통합 API로 {agents, number}개의 AI 에이전트를 검색하고 호출하세요 — 여기에 코딩 에이전트용 {skills, number}개의 스킬까지.", + "browseAgents": "에이전트 둘러보기", + "publishAnAgent": "에이전트 게시", + "agentRegistry": "에이전트 레지스트리:", + "browseByScenario": "시나리오별 둘러보기", + "allAgents": "전체 에이전트", + "featuredAgents": "추천 에이전트", + "browseAll": "전체 보기", + "popularProjects": "인기 오픈소스 프로젝트", + "selfHostable": "셀프 호스팅 가능 {count, number}개", + "skillTitle": "OpenClaw용 TakoAPI 스킬", + "official": "공식", + "skillDescription": "자연스러운 대화로 OpenClaw 스킬을 검색, 설치, 관리하세요 — TakoAPI 마켓플레이스로 구동됩니다.", + "viewOnGithub": "GitHub에서 보기", + "askAgent": "또는 에이전트에게 요청하세요: \"TakoAPI 스킬을 설치해줘\"", + "usingCodingAgent": "Claude Code, Codex, OpenCode를 사용하시나요?", + "oneCommandInstall": "한 줄 명령으로 설치", + "mustHaveSkills": "꼭 필요한 스킬", + "viewRankings": "순위 보기", + "categories": "카테고리", + "viewAll": "전체 보기", + "moreCategories": "{count, plural, other {카테고리 +#개 더보기}}", + "latestSkills": "최신 스킬" + }, + "Scenarios": { + "frontend": "프런트엔드", + "backend": "백엔드", + "coding": "코딩 및 개발", + "agent-frameworks": "에이전트 프레임워크", + "devops": "DevOps 및 자동화", + "data-analysis": "데이터 및 분석", + "product-design": "제품 디자인", + "creative": "크리에이티브 및 미디어", + "presentations": "프레젠테이션 및 문서", + "investing": "공개 시장 투자", + "venture-analysis": "VC 및 비즈니스 모델", + "marketing": "마케팅 및 성장", + "sales": "세일즈 및 CRM", + "customer-support": "고객 지원", + "research": "리서치 및 검색", + "writing": "글쓰기 및 콘텐츠", + "productivity": "생산성 및 어시스턴트" + }, + "AgentDetail": { + "notFound": "에이전트를 찾을 수 없습니다", + "backToMarketplace": "← 에이전트 마켓플레이스", + "openSourceProject": "오픈소스 프로젝트", + "signedCard": "서명된 카드", + "verifiedPublisher": "인증된 게시자", + "by": "{name} 제작", + "publisherOpenSource": "오픈소스", + "publisherUnknown": "알 수 없음", + "scenario": "시나리오:", + "stars": "별 {count, number}개", + "selfHost": "셀프 호스팅", + "streaming": "스트리밍", + "pushNotifications": "푸시 알림", + "skills": "스킬", + "skillsCount": "({count, number})", + "noSkillsProject": "오픈소스 프로젝트입니다 — 코드를 살펴보고 GitHub에서 셀프 호스팅하세요.", + "noSkillsHosted": "이 에이전트는 AgentCard에 구조화된 스킬을 공개하지 않았습니다.", + "inputMode": "입력: {mode}", + "outputMode": "출력: {mode}", + "openSourceProjectHeading": "오픈소스 프로젝트", + "openSourceProjectNote": "셀프 호스팅하거나 코드를 살펴보세요. TakoAPI 게이트웨이로는 호출할 수 없습니다.", + "viewOnGithub": "GitHub에서 보기", + "integration": "연동", + "endpoint": "엔드포인트", + "agentCard": "AgentCard", + "homepage": "홈페이지", + "callThroughTakoApi": "TakoAPI로 호출하기", + "gatewayPhase2": "통합 게이트웨이 — 호출 기능은 2단계에 출시됩니다.", + "breadcrumbHome": "홈", + "breadcrumbMarketplace": "에이전트 마켓플레이스" + }, + "Agents": { + "metaTitle": "에이전트 마켓플레이스", + "metaDescription": "모든 에이전트에 접근하는 단 하나의 API. 하나의 통합 API로 AI 에이전트와 수백 개의 오픈소스 에이전트 프로젝트를 둘러보고 호출하세요 — 개방형 A2A AgentCard로 기술됩니다.", + "ogTitle": "에이전트 마켓플레이스 — {siteName}", + "ogDescription": "하나의 통합 API로 AI 에이전트와 오픈소스 에이전트 프로젝트를 검색하고 호출하세요.", + "heroTitle": "에이전트 마켓플레이스", + "heroTagline": "모든 에이전트에 접근하는 단 하나의 API.", + "heroSubtitle": "하나의 통합 API로 AI 에이전트를 검색하고 호출하세요 — 개방형 A2A AgentCard로 기술됩니다.", + "searchPlaceholder": "이름이나 설명으로 에이전트 검색…", + "search": "검색", + "all": "전체", + "kindAgents": "에이전트", + "kindProjects": "프로젝트", + "scenarioFilter": "시나리오:", + "protocolFilter": "프로토콜:", + "pricingFilter": "가격:", + "categoryFilter": "카테고리:", + "sortLabel": "정렬:", + "sortLatest": "최신순", + "sortStars": "별점순", + "sortPopular": "인기순", + "sortCalls": "호출 많은 순", + "sortRating": "평점순", + "pricingFree": "무료", + "pricingPerCall": "호출당", + "pricingPerTask": "작업당", + "pricingPerToken": "1k 토큰당", + "count": "{count, plural, =0 {에이전트 없음} other {에이전트 #개}}", + "emptyTitle": "아직 필터에 맞는 에이전트가 없습니다.", + "emptyCta": "첫 번째 에이전트를 게시하세요 →", + "prev": "← 이전", + "next": "다음 →", + "pageOf": "{total}페이지 중 {page}페이지" + }, + "Components": { + "homeSearchPlaceholder": "이름, 설명, 작성자로 스킬 검색...", + "homeSearchButton": "검색", + "agentFree": "무료", + "agentPerCall": "{price}/호출", + "agentPerTask": "{price}/작업", + "agentPerToken": "{price}/1k 토큰", + "agentPriceFallbackCall": "호출", + "agentPriceFallbackTask": "작업", + "agentPriceFallbackToken": "토큰", + "agentBadgeProject": "프로젝트", + "agentBadgeStreaming": "스트리밍", + "agentOpenSource": "오픈소스", + "agentSelfHost": "셀프 호스팅", + "agentSkills": "{count, plural, other {스킬 #개}}", + "skillBy": "{author} 제작", + "skillLikes": "{count, number}" + }, + "Install": { + "metaTitle": "Claude Code, Codex, OpenCode에 설치", + "title": "Claude Code, Codex, OpenCode에 TakoAPI 설치", + "description": "한 줄 명령으로 코딩 에이전트에 TakoAPI 스킬을 설치하세요 — 하나의 통합 게이트웨이로 AI 에이전트를 검색하고 호출하며, OpenClaw 스킬 카탈로그를 검색하세요. Claude Code, Codex, OpenCode에서 작동합니다.", + "stepRunInstallerName": "설치 프로그램 실행", + "stepRunInstallerText": "실행: curl -fsSL https://takoapi.com/install.sh | sh", + "stepUseAgentName": "에이전트에서 TakoAPI 사용", + "stepUseAgentText": "코딩 에이전트에게 TakoAPI에서 AI 에이전트를 찾거나 호출하도록 요청하세요.", + "heroBadge": "하나의 명령, 세 개의 에이전트", + "heroTitle": "코딩 에이전트에 TakoAPI 설치", + "heroSubtitle": "Claude Code, Codex, OpenCode에 TakoAPI 스킬을 추가하세요 — 그러면 터미널에서 바로 하나의 통합 게이트웨이로 모든 AI 에이전트를 검색하고 호출할 수 있습니다.", + "whatTitle": "설치 프로그램이 하는 일", + "whatWritesSkill": "네임스페이스가 지정된 단일 TakoAPI 스킬을 각 에이전트 고유의 스킬 디렉터리에 작성합니다 — 공유 설정 파일은 절대 수정하지 않습니다.", + "whatTeachesAgent": "에이전트가 HTTP를 통해 TakoAPI 레지스트리와 게이트웨이를 호출하도록 가르칩니다 — 추가 의존성도, 실행할 서버도 없습니다.", + "whatMcpServer": "호스팅된 도구가 더 좋으신가요? 대신 TakoAPI MCP 서버를 등록하세요 — claude mcp add --transport http takoapi https://takoapi.com/mcpsearch_agents, get_agent, search_skills, invoke_agent를 네이티브 MCP 도구로 노출합니다.", + "whatIdempotent": "멱등성을 가지며(다시 실행해도 안전) --uninstall로 완전히 되돌릴 수 있습니다.", + "whatApiKey": "종량제 게이트웨이를 사용하려면 대시보드에서 API 키를 만들고 TAKO_KEY로 내보내세요.", + "footnote": "Windows이거나 이미 Node 환경인가요? npx takoapi-install를 사용하세요. 스크립트를 먼저 읽어보고 싶으신가요? takoapi.com/install.sh에 일반 셸 스크립트로 있습니다." + }, + "InstallTabs": { + "universalNote": "TakoAPI 스킬을 Claude Code, Codex, OpenCode에 설치합니다 — 자동으로 감지됩니다. 다시 실행해도 안전하며 root 권한이 필요 없습니다. Windows이거나 Node 환경에서는 를 사용하세요.", + "tablistLabel": "코딩 에이전트", + "claudeCodeTagline": "Anthropic의 CLI", + "codexTagline": "OpenAI의 CLI", + "opencodeTagline": "opencode.ai", + "skillHeading": "스킬 — 에이전트가 TakoAPI를 호출하도록 가르칩니다", + "skillUniversalHint": "…또는 위의 범용 명령을 사용하세요 — {name}도 포함됩니다.", + "writesHeading": "작성 위치", + "howToUseHeading": "사용 방법", + "claudeCodeUse": "자동으로 로드됩니다 — Claude에게 TakoAPI에서 에이전트를 찾아달라고 요청하기만 하면 됩니다.", + "codexUse": "$takoapi로 호출하거나 /skills 메뉴에서 선택하세요.", + "opencodeUse": "/takoapi 를 실행하거나 @takoapi로 넘기세요.", + "mcpHeading": "MCP 서버 — 호스팅된 도구, 설치할 것 없음", + "claudeCodeMcpHint": "하나의 명령. invoke_agent를 활성화하려면 --header \"Authorization: Bearer $TAKO_KEY\"를 추가하세요.", + "codexMcpHint": "~/.codex/config.toml에 추가", + "opencodeMcpHint": "~/.config/opencode/opencode.json에 병합", + "mcpToolsNote": "도구 추가: search_agents, get_agent, search_skills, invoke_agent.", + "uninstallHeading": "제거", + "uninstallNote": "TakoAPI 고유의 파일만 제거합니다 — 다른 에이전트 설정은 절대 건드리지 않습니다.", + "copy": "복사", + "copied": "복사됨" + }, + "SkillDetail": { + "notFoundMetaTitle": "스킬을 찾을 수 없습니다", + "backToSkills": "스킬로 돌아가기", + "by": "{author} 제작", + "downloads": "다운로드", + "stars": "별점", + "views": "조회수", + "likes": "{count, plural, other {좋아요 #개}}", + "brief": "요약", + "description": "설명", + "whatThisSkillDoes": "이 스킬이 하는 일", + "whenToUseIt": "사용 시점", + "exampleWorkflow": "예시 워크플로", + "workflowInput": "입력", + "workflowAgent": "에이전트", + "workflowOutput": "출력", + "requirements": "요구 사항", + "installation": "설치", + "clawHubCli": "ClawHub CLI", + "openClawChat": "OpenClaw Chat (대화에 붙여넣으세요)", + "links": "링크", + "github": "GitHub", + "copyGithubUrl": "GitHub URL 복사", + "clawHub": "ClawHub", + "skillNotFound": "스킬을 찾을 수 없습니다" + }, + "Skills": { + "metaTitle": "스킬 둘러보기", + "metaDescription": "수십 개의 카테고리에 걸친 수천 개의 코딩 에이전트용 OpenClaw 스킬을 둘러보세요 — 검색, 필터링, 트렌딩 리더보드를 제공합니다.", + "ogTitle": "스킬 둘러보기 — {siteName}", + "ogDescription": "코딩 에이전트용 수천 개의 OpenClaw 스킬.", + "heading": "스킬 둘러보기", + "searchLabel": "검색: \"{query}\"", + "count": "스킬 {count, number}개 검색됨", + "sortLatest": "최신순", + "sortPopular": "인기순", + "sortViews": "조회수순", + "sortStars": "별점순", + "agentAll": "전체 에이전트", + "agentClaudeCode": "Claude Code", + "agentCursor": "Cursor", + "agentWindsurf": "Windsurf", + "agentCodex": "Codex", + "agentAider": "Aider", + "agentCline": "Cline", + "agentCopilot": "Copilot", + "agentGeneric": "범용", + "all": "전체", + "emptyTitle": "스킬을 찾을 수 없습니다", + "emptyHint": "검색어나 필터를 조정해 보세요", + "pageOf": "{total}페이지 중 {page}페이지" + }, + "Trending": { + "metaTitle": "트렌딩 스킬", + "metaDescription": "지금 가장 많이 다운로드되고 좋아요를 받은 OpenClaw 스킬 — 코딩 에이전트가 설치 중인 스킬의 실시간 리더보드입니다.", + "ogTitle": "트렌딩 스킬 — {siteName}", + "ogDescription": "가장 인기 있는 OpenClaw 스킬의 실시간 리더보드.", + "title": "트렌딩 스킬", + "subtitle": "커뮤니티가 선정한 가장 인기 있는 OpenClaw 스킬을 만나보세요", + "searchPlaceholder": "트렌딩 스킬 검색…", + "categories": "카테고리", + "allCategories": "전체 카테고리", + "downloads": "다운로드", + "stars": "별점", + "likes": "좋아요", + "views": "조회수", + "skill": "스킬", + "count": "{count, plural, =0 {스킬 없음} other {스킬 #개}}", + "countInCategory": "{category}에 {count, plural, =0 {스킬 없음} other {스킬 #개}}", + "emptyTitle": "스킬을 찾을 수 없습니다", + "emptySubtitle": "검색어나 필터를 조정해 보세요", + "byAuthor": "{author} 제작", + "showing": "{total, number}개 중 {from, number}–{to, number}개 표시", + "prev": "이전", + "next": "다음" + }, + "Admin": { + "accessDenied": "접근 거부됨", + "accessDeniedDescription": "이 페이지에 접근하려면 관리자 권한이 필요합니다.", + "goHome": "홈으로 이동", + "backToSite": "사이트로 돌아가기", + "panelTitle": "관리자 패널", + "navDashboard": "대시보드", + "navSkills": "스킬", + "navAgents": "에이전트", + "navCategories": "카테고리", + "navUsers": "사용자", + "navLogs": "로그", + "dashboardTitle": "대시보드", + "statTotalSkills": "전체 스킬", + "statTotalUsers": "전체 사용자", + "statCategories": "카테고리", + "statTotalLikes": "전체 좋아요", + "statTotalViews": "전체 조회수", + "statTotalDownloads": "전체 다운로드", + "statPendingReview": "검토 대기", + "recentSkills": "최근 스킬", + "topSkillsByDownloads": "다운로드 상위 스킬", + "viewAll": "전체 보기", + "byAuthor": "{author} 제작", + "statusApproved": "승인됨", + "statusPending": "대기 중", + "statusRejected": "거부됨", + "loading": "로딩 중…", + "cancel": "취소", + "save": "저장", + "saveChanges": "변경 사항 저장", + "delete": "삭제", + "edit": "편집", + "confirm": "확인", + "preview": "미리보기", + "agentsTitle": "에이전트", + "agentsSubtitle": "제출된 에이전트를 검토하고 관리합니다.", + "filterPending": "대기 중", + "filterApproved": "승인됨", + "filterRejected": "거부됨", + "filterAll": "전체", + "noAgentsInView": "이 보기에 에이전트가 없습니다.", + "unknownPublisher": "알 수 없음", + "uncategorized": "분류 없음", + "agentMetaSkills": "스킬 {count, number}개", + "noScenarios": "시나리오 없음", + "reviewNoteLabel": "메모: {note}", + "editScenarios": "시나리오 편집", + "actionApprove": "승인", + "actionReject": "거부", + "feature": "추천 설정", + "unfeature": "추천 해제", + "scenariosEditorHint": "场景 시나리오 — 点击切换 / 클릭하여 지정", + "scenarioOption": "{nameZh} · {name}", + "selectedCount": "{count, number}개 선택됨", + "rejectReasonPrompt": "거부 사유 (선택 사항):", + "deleteAgentConfirm": "이 에이전트를 영구적으로 삭제하시겠습니까?", + "skillsTitle": "스킬 관리", + "searchSkillsPlaceholder": "스킬 검색...", + "allStatuses": "전체 상태", + "filterStatusPending": "대기 중", + "filterStatusApproved": "승인됨", + "filterStatusRejected": "거부됨", + "allCategories": "전체 카테고리", + "selectedLabel": "{count, number}개 선택됨", + "batchApprove": "승인", + "batchReject": "거부", + "batchFeature": "추천", + "batchDelete": "삭제", + "batchDeleteConfirm": "스킬 {count, number}개를 삭제하시겠습니까? 되돌릴 수 없습니다.", + "colName": "이름", + "colAuthor": "작성자", + "colCategory": "카테고리", + "colStatus": "상태", + "colDownloads": "다운로드", + "colLikes": "좋아요", + "colViews": "조회수", + "colCreated": "생성일", + "colActions": "작업", + "noSkillsFound": "스킬을 찾을 수 없습니다.", + "showingRange": "{total, number}개 중 {from, number}–{to, number}개 표시", + "editSkillTitle": "스킬 편집", + "fieldName": "이름", + "fieldAuthor": "작성자", + "fieldBrief": "요약", + "fieldStatus": "상태", + "optionPending": "대기 중", + "optionApproved": "승인됨", + "optionRejected": "거부됨", + "fieldFeatured": "추천", + "deleteSkillTitle": "스킬 삭제", + "deleteSkillConfirm": "정말로 {name}을(를) 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다.", + "categoriesTitle": "카테고리", + "addCategory": "카테고리 추가", + "editCategoryTitle": "카테고리 편집", + "newCategoryTitle": "새 카테고리", + "fieldIcon": "아이콘", + "fieldDescription": "설명", + "categoryNamePlaceholder": "예: 데이터 분석", + "categoryIconPlaceholder": "예: chart-bar 또는 이모지", + "categoryDescriptionPlaceholder": "짧은 설명", + "nameRequired": "이름은 필수입니다.", + "saveCategoryFailed": "카테고리 저장에 실패했습니다", + "deleteCategoryFailed": "카테고리 삭제에 실패했습니다", + "fetchCategoriesFailed": "카테고리를 불러오지 못했습니다", + "deleteFailed": "삭제에 실패했습니다", + "somethingWentWrong": "문제가 발생했습니다", + "update": "업데이트", + "create": "생성", + "colSlug": "슬러그", + "colSkills": "스킬", + "colDescription": "설명", + "noCategoriesFound": "카테고리를 찾을 수 없습니다. 위에서 추가하세요.", + "deleting": "...", + "cannotDeleteHasSkills": "삭제할 수 없음: 스킬이 있습니다", + "categoriesTotal": "{count, plural, other {카테고리 #개}} 전체", + "usersTitle": "사용자", + "usersTotal": "{count, plural, other {사용자 #명}} 전체", + "searchUsersPlaceholder": "이름 또는 이메일로 검색...", + "colEmail": "이메일", + "colRole": "역할", + "colProvider": "제공자", + "colJoined": "가입일", + "loadingUsers": "사용자 로딩 중...", + "noUsersFound": "사용자를 찾을 수 없습니다.", + "noName": "---", + "roleAdmin": "관리자", + "roleUser": "사용자", + "providerCredentials": "자격 증명", + "demote": "강등", + "promote": "승격", + "demoteToUser": "사용자로 강등", + "promoteToAdmin": "관리자로 승격", + "logsTitle": "관리자 로그", + "logsTotal": "{count, plural, other {항목 #개}} 전체", + "colTimestamp": "타임스탬프", + "colAdmin": "관리자", + "colAction": "작업", + "colTargetType": "대상 유형", + "colTargetId": "대상 ID", + "colDetail": "세부 정보", + "loadingLogs": "로그 로딩 중...", + "noLogsFound": "로그를 찾을 수 없습니다.", + "emptyDetail": "---", + "actionCreate": "생성", + "actionUpdate": "업데이트", + "actionDelete": "삭제", + "actionApproveLog": "승인", + "actionRejectLog": "거부", + "actionRoleChange": "역할 변경", + "targetSkill": "스킬", + "targetAgent": "에이전트", + "targetCategory": "카테고리", + "targetUser": "사용자" + }, + "Auth": { + "signInTitle": "TakoAPI에 로그인", + "signInSubtitle": "스킬 대시보드에 접근하세요", + "signUpTitle": "계정 만들기", + "signUpSubtitle": "TakoAPI 커뮤니티에 참여하세요", + "continueWithGoogle": "Google로 계속하기", + "continueWithApple": "Apple로 계속하기", + "signUpWithGoogle": "Google로 가입", + "signUpWithApple": "Apple로 가입", + "or": "또는", + "name": "이름", + "email": "이메일", + "password": "비밀번호", + "passwordHint": "비밀번호 (최소 8자)", + "signIn": "로그인", + "signingIn": "로그인 중...", + "createAccount": "계정 만들기", + "creatingAccount": "계정 생성 중...", + "invalidCredentials": "이메일 또는 비밀번호가 올바르지 않습니다", + "registrationFailed": "가입에 실패했습니다", + "somethingWentWrong": "문제가 발생했습니다", + "noAccount": "계정이 없으신가요?", + "signUpLink": "가입", + "haveAccount": "이미 계정이 있으신가요?", + "signInLink": "로그인" + }, + "Dashboard": { + "title": "개발자 대시보드", + "signInPrompt": "API 키를 관리하고 사용량을 확인하려면 로그인하세요.", + "signIn": "로그인", + "description": "API 키를 관리하고 게이트웨이 사용량을 모니터링하세요. 하나의 키, 하나의 청구서, 모든 에이전트.", + "apiKeys": "API 키", + "createKey": "키 생성", + "creating": "생성 중…", + "copyKeyWarning": "지금 이 키를 복사하세요 — 다시 표시되지 않습니다.", + "copy": "복사", + "copied": "복사됨", + "noKeys": "아직 키가 없습니다. 에이전트 호출을 시작하려면 키를 만드세요.", + "keyFallbackName": "키", + "created": "{date} 생성됨", + "lastUsed": "마지막 사용 {date}", + "neverUsed": "사용된 적 없음", + "revoke": "취소", + "revokeConfirm": "이 키를 취소하시겠습니까? 이 키를 사용하는 앱이 작동을 멈춥니다.", + "quickstart": "빠른 시작", + "usage": "사용량", + "totalCalls": "전체 호출", + "agentsUsed": "사용한 에이전트", + "totalCount": "{count, number}", + "tableAgent": "에이전트", + "tableProtocol": "프로토콜", + "tableStatus": "상태", + "tableLatency": "지연 시간", + "tableWhen": "시점", + "noCalls": "아직 호출이 없습니다. 키를 만들고 에이전트를 호출하면 여기에 사용량이 표시됩니다." + }, + "Profile": { + "title": "내 프로필", + "signInPrompt": "프로필을 보려면 로그인하세요.", + "signIn": "로그인", + "submissions": "제출", + "likes": "좋아요", + "views": "조회수", + "statValue": "{count, number}", + "mySubmissions": "내 제출", + "submitNew": "새로 제출", + "tab_all": "전체", + "tab_approved": "승인됨", + "tab_pending": "대기 중", + "tab_rejected": "거부됨", + "tabCount": "{count, number}", + "emptyTab": "이 탭에는 제출 항목이 없습니다", + "submitFirst": "첫 스킬을 제출하세요", + "statusApproved": "승인됨", + "statusPending": "검토 대기 중", + "statusRejected": "거부됨", + "reviewerNote": "검토자 메모:" + }, + "Submit": { + "title": "스킬 제출", + "subtitle": "OpenClaw 스킬을 커뮤니티와 공유하세요", + "signInPrompt": "스킬을 제출하려면 로그인하세요.", + "signIn": "로그인", + "skillSource": "스킬 출처", + "githubUrl": "GitHub URL", + "clawSkillsUrl": "ClawSkills.sh URL", + "githubUrlPlaceholder": "https://github.com/username/repo", + "clawSkillsUrlPlaceholder": "https://clawskills.sh/skills/author-skillname", + "autoFill": "자동 채우기", + "fetching": "가져오는 중...", + "filled": "채워짐!", + "skillName": "스킬 이름", + "skillNamePlaceholder": "예: my-awesome-skill", + "category": "카테고리", + "selectCategory": "카테고리 선택", + "categoryOption": "{name} ({count})", + "brief": "요약", + "briefHelper": "- 한 줄 요약", + "briefPlaceholder": "스킬이 하는 일에 대한 짧은 설명", + "skillDetails": "스킬 세부 정보", + "skillDetailsHelper": "- README에서 자동으로 채워집니다", + "whatItDoes": "이 스킬이 하는 일", + "whatItDoesPlaceholder": "이 스킬이 하는 일, 기능, 역량에 대한 자세한 설명...", + "exampleWorkflow": "예시 워크플로", + "exampleWorkflowHelper": "- 입력 / 에이전트 단계 / 출력", + "exampleWorkflowPlaceholder": "INPUT\n사용자 요청: 유용한 작업을 수행해줘\n\nAGENT\n1\n`my-skill action`을 실행하여 작업 수행\n2\n결과 확인\n\nOUTPUT\n작업이 성공적으로 완료됨", + "requirements": "요구 사항", + "requirementsPlaceholder": "- Node.js 18+\n- 서비스 X의 API 키\n- 기타 등등", + "submitSkill": "스킬 제출", + "submitting": "제출 중...", + "enterUrlFirst": "먼저 URL을 입력하세요", + "autoFillFailed": "자동 채우기에 실패했습니다", + "submitFailed": "제출에 실패했습니다", + "somethingWentWrong": "문제가 발생했습니다" + }, + "SubmitAgent": { + "title": "에이전트 게시", + "signInPrompt": "에이전트를 게시하려면 로그인하세요.", + "signIn": "로그인", + "intro": "호출 가능한 에이전트를 마켓플레이스에 등록하세요. A2A AgentCard URL을 제출하면 나머지를 파싱해 드리며, 직접 입력할 수도 있습니다.", + "tabUrl": "AgentCard URL", + "tabManual": "수동", + "cardUrlLabel": "AgentCard URL", + "cardUrlPlaceholder": "https://your-agent.com/.well-known/agent-card.json", + "cardUrlHelp": "A2A AgentCard(이름, 엔드포인트, 기능, 스킬)를 가져와 검증합니다.", + "nameLabel": "에이전트 이름", + "namePlaceholder": "예: Weather Oracle", + "descriptionLabel": "설명", + "descriptionPlaceholder": "이 에이전트는 무엇을 하나요?", + "endpointLabel": "엔드포인트 URL", + "endpointPlaceholder": "https://your-agent.com/a2a", + "protocolsLabel": "프로토콜", + "protocolOpenAiCompat": "OpenAI 호환", + "categoryLabel": "카테고리", + "uncategorized": "분류 없음", + "pricingLabel": "가격", + "pricingFree": "무료", + "pricingPerCall": "호출당", + "pricingPerTask": "작업당", + "pricingPerToken": "1k 토큰당", + "unitPriceLabel": "단가 (USD)", + "unitPricePlaceholder": "0.002", + "homepageLabel": "홈페이지", + "optional": "선택 사항", + "homepagePlaceholder": "https://your-agent.com", + "submit": "에이전트 게시", + "submitting": "제출 중…", + "submitFailed": "제출에 실패했습니다", + "somethingWentWrong": "문제가 발생했습니다", + "successTitle": "제출 완료 🎉", + "pendingReview": "{name}이(가) 이제 검토 대기 중입니다.", + "successDetail": "AgentCard를 검증한 뒤 승인되면 마켓플레이스에 게시합니다.", + "backToMarketplace": "← 마켓플레이스로 돌아가기" + } +} diff --git a/messages/pt.json b/messages/pt.json new file mode 100644 index 000000000..a49d9e9c2 --- /dev/null +++ b/messages/pt.json @@ -0,0 +1,593 @@ +{ + "Metadata": { + "tagline": "Uma API para acessar todos os agentes", + "description": "Descubra e invoque agentes de IA por meio de uma API unificada — um OpenRouter para agentes. Navegue por um diretório com centenas de projetos de agentes open-source e milhares de skills do OpenClaw para o seu agente de código." + }, + "LocaleSwitcher": { + "label": "Idioma" + }, + "Header": { + "searchPlaceholder": "Buscar agentes...", + "agents": "Agentes", + "skills": "Skills", + "trending": "Em alta", + "publish": "Publicar", + "publishAgent": "Publicar agente", + "account": "Conta", + "mySkills": "Minhas skills", + "apiUsage": "API e uso", + "adminPanel": "Painel admin", + "signIn": "Entrar", + "signOut": "Sair" + }, + "Footer": { + "tagline": "Uma API para acessar todos os agentes — além de milhares de skills do OpenClaw para o seu agente de código.", + "agentRegistry": "Registro de agentes:", + "platform": "Plataforma", + "resources": "Recursos", + "installInAgent": "Instale no seu agente", + "browseAgents": "Navegar pelos agentes", + "publishAnAgent": "Publicar um agente", + "developerDashboard": "Painel do desenvolvedor", + "browseSkills": "Navegar pelas skills", + "awesomeList": "Awesome List", + "clawHub": "ClawHub", + "copyright": "© {year} TakoAPI. Feito para a comunidade OpenClaw." + }, + "Home": { + "heroTitle": "Uma API para acessar todos os agentes", + "heroSubtitle": "Descubra e invoque {agents, number} agentes de IA por meio de uma API unificada — além de {skills, number} skills para o seu agente de código.", + "browseAgents": "Navegar pelos agentes", + "publishAnAgent": "Publicar um agente", + "agentRegistry": "Registro de agentes:", + "browseByScenario": "Navegar por cenário", + "allAgents": "Todos os agentes", + "featuredAgents": "Agentes em destaque", + "browseAll": "Ver todos", + "popularProjects": "Projetos open-source populares", + "selfHostable": "{count, number} com self-hosting", + "skillTitle": "Skill TakoAPI para OpenClaw", + "official": "Oficial", + "skillDescription": "Busque, instale e gerencie skills do OpenClaw por meio de uma conversa natural — com a tecnologia do marketplace TakoAPI.", + "viewOnGithub": "Ver no GitHub", + "askAgent": "ou peça ao seu agente: \"Instale a skill do TakoAPI\"", + "usingCodingAgent": "Usa Claude Code, Codex ou OpenCode?", + "oneCommandInstall": "Instalação com um comando", + "mustHaveSkills": "Skills indispensáveis", + "viewRankings": "Ver rankings", + "categories": "Categorias", + "viewAll": "Ver tudo", + "moreCategories": "{count, plural, one {+# categoria} other {+# categorias}}", + "latestSkills": "Skills mais recentes" + }, + "Scenarios": { + "frontend": "Frontend", + "backend": "Backend", + "coding": "Código e Dev", + "agent-frameworks": "Frameworks de agentes", + "devops": "DevOps e Automação", + "data-analysis": "Dados e Analytics", + "product-design": "Design de Produto", + "creative": "Criatividade e Mídia", + "presentations": "Apresentações e Docs", + "investing": "Investimento em Mercado Aberto", + "venture-analysis": "VC e Modelo de Negócio", + "marketing": "Marketing e Crescimento", + "sales": "Vendas e CRM", + "customer-support": "Suporte ao Cliente", + "research": "Pesquisa e Busca", + "writing": "Escrita e Conteúdo", + "productivity": "Produtividade e Assistente" + }, + "AgentDetail": { + "notFound": "Agente não encontrado", + "backToMarketplace": "← Marketplace de agentes", + "openSourceProject": "Projeto open-source", + "signedCard": "Card assinado", + "verifiedPublisher": "Publicador verificado", + "by": "por {name}", + "publisherOpenSource": "open-source", + "publisherUnknown": "desconhecido", + "scenario": "Cenário:", + "stars": "{count, number} estrelas", + "selfHost": "Self-hosting", + "streaming": "Streaming", + "pushNotifications": "Notificações push", + "skills": "Skills", + "skillsCount": "({count, number})", + "noSkillsProject": "Um projeto open-source — explore o código e faça o self-hosting a partir do GitHub.", + "noSkillsHosted": "Este agente não anunciou skills estruturadas em seu AgentCard.", + "inputMode": "entrada: {mode}", + "outputMode": "saída: {mode}", + "openSourceProjectHeading": "Projeto open-source", + "openSourceProjectNote": "Faça o self-hosting ou explore o código. Não invocável pelo gateway do TakoAPI.", + "viewOnGithub": "Ver no GitHub", + "integration": "Integração", + "endpoint": "Endpoint", + "agentCard": "AgentCard", + "homepage": "Página inicial", + "callThroughTakoApi": "Invoque pelo TakoAPI", + "gatewayPhase2": "Gateway unificado — a invocação chega na Fase 2.", + "breadcrumbHome": "Início", + "breadcrumbMarketplace": "Marketplace de agentes" + }, + "Agents": { + "metaTitle": "Marketplace de agentes", + "metaDescription": "Uma API para acessar todos os agentes. Navegue e invoque agentes de IA e centenas de projetos de agentes open-source por meio de uma API unificada — descritos por AgentCards A2A abertos.", + "ogTitle": "Marketplace de agentes — {siteName}", + "ogDescription": "Descubra e invoque agentes de IA e projetos de agentes open-source por meio de uma API unificada.", + "heroTitle": "Marketplace de agentes", + "heroTagline": "Uma API para acessar todos os agentes.", + "heroSubtitle": "Descubra e invoque agentes de IA por meio de uma API unificada — descritos por AgentCards A2A abertos.", + "searchPlaceholder": "Buscar agentes por nome ou descrição…", + "search": "Buscar", + "all": "Todos", + "kindAgents": "Agentes", + "kindProjects": "Projetos", + "scenarioFilter": "Cenário:", + "protocolFilter": "Protocolo:", + "pricingFilter": "Preço:", + "categoryFilter": "Categoria:", + "sortLabel": "Ordenar:", + "sortLatest": "Mais recentes", + "sortStars": "Estrelas", + "sortPopular": "Populares", + "sortCalls": "Mais invocados", + "sortRating": "Mais bem avaliados", + "pricingFree": "Grátis", + "pricingPerCall": "por invocação", + "pricingPerTask": "por tarefa", + "pricingPerToken": "Por 1k tokens", + "count": "{count, plural, =0 {Nenhum agente} one {# agente} other {# agentes}}", + "emptyTitle": "Nenhum agente corresponde aos seus filtros ainda.", + "emptyCta": "Publique o primeiro →", + "prev": "← Anterior", + "next": "Próximo →", + "pageOf": "Página {page} de {total}" + }, + "Components": { + "homeSearchPlaceholder": "Buscar skills por nome, descrição ou autor...", + "homeSearchButton": "Buscar", + "agentFree": "Grátis", + "agentPerCall": "{price}/invocação", + "agentPerTask": "{price}/tarefa", + "agentPerToken": "{price}/1k tok", + "agentPriceFallbackCall": "invocação", + "agentPriceFallbackTask": "tarefa", + "agentPriceFallbackToken": "token", + "agentBadgeProject": "projeto", + "agentBadgeStreaming": "streaming", + "agentOpenSource": "open-source", + "agentSelfHost": "self-hosting", + "agentSkills": "{count, plural, one {# skill} other {# skills}}", + "skillBy": "por {author}", + "skillLikes": "{count, number}" + }, + "Install": { + "metaTitle": "Instale no Claude Code, Codex e OpenCode", + "title": "Instale o TakoAPI no Claude Code, Codex e OpenCode", + "description": "Um comando instala a skill do TakoAPI no seu agente de código — descubra e invoque agentes de IA por meio de um gateway unificado e busque no catálogo de skills do OpenClaw. Funciona com Claude Code, Codex e OpenCode.", + "stepRunInstallerName": "Execute o instalador", + "stepRunInstallerText": "Execute: curl -fsSL https://takoapi.com/install.sh | sh", + "stepUseAgentName": "Use o TakoAPI a partir do seu agente", + "stepUseAgentText": "Peça ao seu agente de código para encontrar ou invocar um agente de IA no TakoAPI.", + "heroBadge": "Um comando, três agentes", + "heroTitle": "Instale o TakoAPI no seu agente de código", + "heroSubtitle": "Adicione a skill do TakoAPI ao Claude Code, Codex ou OpenCode — e então descubra e invoque qualquer agente de IA por meio de um gateway unificado, direto do seu terminal.", + "whatTitle": "O que o instalador faz", + "whatWritesSkill": "Grava uma única skill do TakoAPI, com namespace próprio, no diretório de skills de cada agente — ele nunca edita seus arquivos de configuração compartilhados.", + "whatTeachesAgent": "Ensina seu agente a invocar o registro do TakoAPI e o gateway via HTTP — sem dependências extras, sem servidor para executar.", + "whatMcpServer": "Prefere ferramentas hospedadas? Registre o servidor MCP do TakoAPI — claude mcp add --transport http takoapi https://takoapi.com/mcp — expondo search_agents, get_agent, search_skills e invoke_agent como ferramentas MCP nativas.", + "whatIdempotent": "É idempotente (seguro para reexecutar) e totalmente reversível com --uninstall.", + "whatApiKey": "Para o gateway medido, crie uma chave de API no seu painel e exporte-a como TAKO_KEY.", + "footnote": "No Windows ou já no Node? Use npx takoapi-install. Prefere ler o script primeiro? É shell puro em takoapi.com/install.sh." + }, + "InstallTabs": { + "universalNote": "Instala a skill do TakoAPI no Claude Code, Codex e OpenCode — detectados automaticamente. Seguro para reexecutar, sem root. No Windows ou no Node, use .", + "tablistLabel": "Agentes de código", + "claudeCodeTagline": "CLI da Anthropic", + "codexTagline": "CLI da OpenAI", + "opencodeTagline": "opencode.ai", + "skillHeading": "Skill — ensina seu agente a invocar o TakoAPI", + "skillUniversalHint": "…ou use o comando universal acima — ele cobre o {name} também.", + "writesHeading": "Grava", + "howToUseHeading": "Como usar", + "claudeCodeUse": "Carrega automaticamente — basta pedir ao Claude para encontrar um agente no TakoAPI.", + "codexUse": "Invoque com $takoapi ou escolha no menu /skills.", + "opencodeUse": "Execute /takoapi ou passe para @takoapi.", + "mcpHeading": "Servidor MCP — ferramentas hospedadas, nada para instalar", + "claudeCodeMcpHint": "Um comando. Adicione --header \"Authorization: Bearer $TAKO_KEY\" para habilitar invoke_agent.", + "codexMcpHint": "Adicione a ~/.codex/config.toml", + "opencodeMcpHint": "Mescle em ~/.config/opencode/opencode.json", + "mcpToolsNote": "Adiciona as ferramentas: search_agents, get_agent, search_skills, invoke_agent.", + "uninstallHeading": "Desinstalar", + "uninstallNote": "Remove apenas os arquivos do próprio TakoAPI — ele nunca toca na configuração dos seus outros agentes.", + "copy": "Copiar", + "copied": "Copiado" + }, + "SkillDetail": { + "notFoundMetaTitle": "Skill não encontrada", + "backToSkills": "Voltar às skills", + "by": "por {author}", + "downloads": "Downloads", + "stars": "Estrelas", + "views": "Visualizações", + "likes": "{count, plural, one {# curtida} other {# curtidas}}", + "brief": "Resumo", + "description": "Descrição", + "whatThisSkillDoes": "O que esta skill faz", + "whenToUseIt": "Quando usá-la", + "exampleWorkflow": "Exemplo de fluxo de trabalho", + "workflowInput": "ENTRADA", + "workflowAgent": "AGENTE", + "workflowOutput": "SAÍDA", + "requirements": "Requisitos", + "installation": "Instalação", + "clawHubCli": "CLI do ClawHub", + "openClawChat": "OpenClaw Chat (cole isto na sua conversa)", + "links": "Links", + "github": "GitHub", + "copyGithubUrl": "Copiar URL do GitHub", + "clawHub": "ClawHub", + "skillNotFound": "Skill não encontrada" + }, + "Skills": { + "metaTitle": "Navegar pelas skills", + "metaDescription": "Navegue por milhares de skills do OpenClaw para o seu agente de código em dezenas de categorias — com busca, filtros e um ranking de tendências.", + "ogTitle": "Navegar pelas skills — {siteName}", + "ogDescription": "Milhares de skills do OpenClaw para o seu agente de código.", + "heading": "Navegar pelas skills", + "searchLabel": "Busca: \"{query}\"", + "count": "{count, number} skills encontradas", + "sortLatest": "Mais recentes", + "sortPopular": "Mais populares", + "sortViews": "Mais visualizadas", + "sortStars": "Mais estreladas", + "agentAll": "Todos os agentes", + "agentClaudeCode": "Claude Code", + "agentCursor": "Cursor", + "agentWindsurf": "Windsurf", + "agentCodex": "Codex", + "agentAider": "Aider", + "agentCline": "Cline", + "agentCopilot": "Copilot", + "agentGeneric": "Genérico", + "all": "Todas", + "emptyTitle": "Nenhuma skill encontrada", + "emptyHint": "Tente ajustar sua busca ou filtros", + "pageOf": "Página {page} de {total}" + }, + "Trending": { + "metaTitle": "Skills em alta", + "metaDescription": "As skills do OpenClaw mais baixadas e mais curtidas agora — um ranking ao vivo do que os agentes de código estão instalando.", + "ogTitle": "Skills em alta — {siteName}", + "ogDescription": "Um ranking ao vivo das skills do OpenClaw mais populares.", + "title": "Skills em alta", + "subtitle": "Descubra as skills do OpenClaw mais populares, ranqueadas pela comunidade", + "searchPlaceholder": "Buscar skills em alta…", + "categories": "Categorias", + "allCategories": "Todas as categorias", + "downloads": "Downloads", + "stars": "Estrelas", + "likes": "Curtidas", + "views": "Visualizações", + "skill": "Skill", + "count": "{count, plural, =0 {Nenhuma skill} one {# skill} other {# skills}}", + "countInCategory": "{count, plural, =0 {Nenhuma skill} one {# skill} other {# skills}} em {category}", + "emptyTitle": "Nenhuma skill encontrada", + "emptySubtitle": "Tente ajustar sua busca ou filtros", + "byAuthor": "por {author}", + "showing": "Exibindo {from, number}–{to, number} de {total, number}", + "prev": "Anterior", + "next": "Próximo" + }, + "Admin": { + "accessDenied": "Acesso negado", + "accessDeniedDescription": "Você precisa de privilégios de administrador para acessar esta página.", + "goHome": "Ir para o início", + "backToSite": "Voltar ao site", + "panelTitle": "Painel admin", + "navDashboard": "Dashboard", + "navSkills": "Skills", + "navAgents": "Agentes", + "navCategories": "Categorias", + "navUsers": "Usuários", + "navLogs": "Logs", + "dashboardTitle": "Dashboard", + "statTotalSkills": "Total de skills", + "statTotalUsers": "Total de usuários", + "statCategories": "Categorias", + "statTotalLikes": "Total de curtidas", + "statTotalViews": "Total de visualizações", + "statTotalDownloads": "Total de downloads", + "statPendingReview": "Aguardando revisão", + "recentSkills": "Skills recentes", + "topSkillsByDownloads": "Principais skills por downloads", + "viewAll": "Ver tudo", + "byAuthor": "por {author}", + "statusApproved": "aprovada", + "statusPending": "pendente", + "statusRejected": "rejeitada", + "loading": "Carregando…", + "cancel": "Cancelar", + "save": "Salvar", + "saveChanges": "Salvar alterações", + "delete": "Excluir", + "edit": "Editar", + "confirm": "Confirmar", + "preview": "Pré-visualizar", + "agentsTitle": "Agentes", + "agentsSubtitle": "Revise e modere os agentes enviados.", + "filterPending": "Pendentes", + "filterApproved": "Aprovados", + "filterRejected": "Rejeitados", + "filterAll": "Todos", + "noAgentsInView": "Nenhum agente nesta visualização.", + "unknownPublisher": "desconhecido", + "uncategorized": "sem categoria", + "agentMetaSkills": "{count, number} skills", + "noScenarios": "sem cenários", + "reviewNoteLabel": "Nota: {note}", + "editScenarios": "Editar cenários", + "actionApprove": "Aprovar", + "actionReject": "Rejeitar", + "feature": "Destacar", + "unfeature": "Remover destaque", + "scenariosEditorHint": "场景 Cenários — 点击切换 / clique para atribuir", + "scenarioOption": "{nameZh} · {name}", + "selectedCount": "{count, number} selecionados", + "rejectReasonPrompt": "Motivo da rejeição (opcional):", + "deleteAgentConfirm": "Excluir este agente permanentemente?", + "skillsTitle": "Gerenciamento de skills", + "searchSkillsPlaceholder": "Buscar skills...", + "allStatuses": "Todos os status", + "filterStatusPending": "Pendentes", + "filterStatusApproved": "Aprovadas", + "filterStatusRejected": "Rejeitadas", + "allCategories": "Todas as categorias", + "selectedLabel": "{count, number} selecionadas", + "batchApprove": "Aprovar", + "batchReject": "Rejeitar", + "batchFeature": "Destacar", + "batchDelete": "Excluir", + "batchDeleteConfirm": "Excluir {count, number} skill(s)? Isto não pode ser desfeito.", + "colName": "Nome", + "colAuthor": "Autor", + "colCategory": "Categoria", + "colStatus": "Status", + "colDownloads": "Downloads", + "colLikes": "Curtidas", + "colViews": "Visualizações", + "colCreated": "Criada em", + "colActions": "Ações", + "noSkillsFound": "Nenhuma skill encontrada.", + "showingRange": "Exibindo {from, number}–{to, number} de {total, number}", + "editSkillTitle": "Editar skill", + "fieldName": "Nome", + "fieldAuthor": "Autor", + "fieldBrief": "Resumo", + "fieldStatus": "Status", + "optionPending": "Pendente", + "optionApproved": "Aprovada", + "optionRejected": "Rejeitada", + "fieldFeatured": "Em destaque", + "deleteSkillTitle": "Excluir skill", + "deleteSkillConfirm": "Tem certeza de que deseja excluir {name}? Esta ação não pode ser desfeita.", + "categoriesTitle": "Categorias", + "addCategory": "Adicionar categoria", + "editCategoryTitle": "Editar categoria", + "newCategoryTitle": "Nova categoria", + "fieldIcon": "Ícone", + "fieldDescription": "Descrição", + "categoryNamePlaceholder": "ex.: Análise de dados", + "categoryIconPlaceholder": "ex.: chart-bar ou emoji", + "categoryDescriptionPlaceholder": "Descrição curta", + "nameRequired": "O nome é obrigatório.", + "saveCategoryFailed": "Falha ao salvar a categoria", + "deleteCategoryFailed": "Falha ao excluir a categoria", + "fetchCategoriesFailed": "Falha ao buscar as categorias", + "deleteFailed": "Falha ao excluir", + "somethingWentWrong": "Algo deu errado", + "update": "Atualizar", + "create": "Criar", + "colSlug": "Slug", + "colSkills": "Skills", + "colDescription": "Descrição", + "noCategoriesFound": "Nenhuma categoria encontrada. Adicione uma acima.", + "deleting": "...", + "cannotDeleteHasSkills": "Não é possível excluir: possui skills", + "categoriesTotal": "{count, number} {count, plural, one {categoria} other {categorias}} no total", + "usersTitle": "Usuários", + "usersTotal": "{count, number} {count, plural, one {usuário} other {usuários}} no total", + "searchUsersPlaceholder": "Buscar por nome ou e-mail...", + "colEmail": "E-mail", + "colRole": "Função", + "colProvider": "Provedor", + "colJoined": "Cadastro", + "loadingUsers": "Carregando usuários...", + "noUsersFound": "Nenhum usuário encontrado.", + "noName": "---", + "roleAdmin": "admin", + "roleUser": "usuário", + "providerCredentials": "credenciais", + "demote": "Rebaixar", + "promote": "Promover", + "demoteToUser": "Rebaixar para usuário", + "promoteToAdmin": "Promover a admin", + "logsTitle": "Logs admin", + "logsTotal": "{count, number} {count, plural, one {entrada} other {entradas}} no total", + "colTimestamp": "Data/hora", + "colAdmin": "Admin", + "colAction": "Ação", + "colTargetType": "Tipo do alvo", + "colTargetId": "ID do alvo", + "colDetail": "Detalhe", + "loadingLogs": "Carregando logs...", + "noLogsFound": "Nenhum log encontrado.", + "emptyDetail": "---", + "actionCreate": "criar", + "actionUpdate": "atualizar", + "actionDelete": "excluir", + "actionApproveLog": "aprovar", + "actionRejectLog": "rejeitar", + "actionRoleChange": "alteração de função", + "targetSkill": "skill", + "targetAgent": "agente", + "targetCategory": "categoria", + "targetUser": "usuário" + }, + "Auth": { + "signInTitle": "Entrar no TakoAPI", + "signInSubtitle": "Acesse o painel das suas skills", + "signUpTitle": "Criar uma conta", + "signUpSubtitle": "Junte-se à comunidade TakoAPI", + "continueWithGoogle": "Continuar com o Google", + "continueWithApple": "Continuar com a Apple", + "signUpWithGoogle": "Cadastrar-se com o Google", + "signUpWithApple": "Cadastrar-se com a Apple", + "or": "ou", + "name": "Nome", + "email": "E-mail", + "password": "Senha", + "passwordHint": "Senha (mínimo de 8 caracteres)", + "signIn": "Entrar", + "signingIn": "Entrando...", + "createAccount": "Criar conta", + "creatingAccount": "Criando conta...", + "invalidCredentials": "E-mail ou senha inválidos", + "registrationFailed": "Falha no cadastro", + "somethingWentWrong": "Algo deu errado", + "noAccount": "Não tem uma conta?", + "signUpLink": "Cadastre-se", + "haveAccount": "Já tem uma conta?", + "signInLink": "Entrar" + }, + "Dashboard": { + "title": "Painel do desenvolvedor", + "signInPrompt": "Entre para gerenciar chaves de API e ver o uso.", + "signIn": "Entrar", + "description": "Gerencie chaves de API e monitore o uso do gateway. Uma chave, uma fatura, qualquer agente.", + "apiKeys": "Chaves de API", + "createKey": "Criar chave", + "creating": "Criando…", + "copyKeyWarning": "Copie esta chave agora — ela não será exibida novamente.", + "copy": "Copiar", + "copied": "Copiado", + "noKeys": "Nenhuma chave ainda. Crie uma para começar a invocar agentes.", + "keyFallbackName": "chave", + "created": "criada em {date}", + "lastUsed": "último uso em {date}", + "neverUsed": "nunca usada", + "revoke": "Revogar", + "revokeConfirm": "Revogar esta chave? Os apps que a usam deixarão de funcionar.", + "quickstart": "Início rápido", + "usage": "Uso", + "totalCalls": "Total de invocações", + "agentsUsed": "Agentes usados", + "totalCount": "{count, number}", + "tableAgent": "Agente", + "tableProtocol": "Protocolo", + "tableStatus": "Status", + "tableLatency": "Latência", + "tableWhen": "Quando", + "noCalls": "Nenhuma invocação ainda. Crie uma chave e invoque um agente para ver o uso aqui." + }, + "Profile": { + "title": "Meu perfil", + "signInPrompt": "Entre para ver o seu perfil.", + "signIn": "Entrar", + "submissions": "Envios", + "likes": "Curtidas", + "views": "Visualizações", + "statValue": "{count, number}", + "mySubmissions": "Meus envios", + "submitNew": "Enviar novo", + "tab_all": "Todos", + "tab_approved": "Aprovados", + "tab_pending": "Pendentes", + "tab_rejected": "Rejeitados", + "tabCount": "{count, number}", + "emptyTab": "Nenhum envio nesta aba", + "submitFirst": "Envie a sua primeira skill", + "statusApproved": "Aprovada", + "statusPending": "Aguardando revisão", + "statusRejected": "Rejeitada", + "reviewerNote": "Nota do revisor:" + }, + "Submit": { + "title": "Enviar uma skill", + "subtitle": "Compartilhe a sua skill do OpenClaw com a comunidade", + "signInPrompt": "Entre para enviar skills.", + "signIn": "Entrar", + "skillSource": "Origem da skill", + "githubUrl": "URL do GitHub", + "clawSkillsUrl": "URL do ClawSkills.sh", + "githubUrlPlaceholder": "https://github.com/username/repo", + "clawSkillsUrlPlaceholder": "https://clawskills.sh/skills/author-skillname", + "autoFill": "Preencher automaticamente", + "fetching": "Buscando...", + "filled": "Preenchido!", + "skillName": "Nome da skill", + "skillNamePlaceholder": "ex.: minha-skill-incrivel", + "category": "Categoria", + "selectCategory": "Selecione uma categoria", + "categoryOption": "{name} ({count})", + "brief": "Resumo", + "briefHelper": "- Resumo em uma linha", + "briefPlaceholder": "Uma breve descrição do que a sua skill faz", + "skillDetails": "Detalhes da skill", + "skillDetailsHelper": "- Preenchido automaticamente a partir do README", + "whatItDoes": "O que esta skill faz", + "whatItDoesPlaceholder": "Explicação detalhada do que esta skill faz, seus recursos e capacidades...", + "exampleWorkflow": "Exemplo de fluxo de trabalho", + "exampleWorkflowHelper": "- ENTRADA / etapas do AGENTE / SAÍDA", + "exampleWorkflowPlaceholder": "ENTRADA\nO usuário pede: Faça algo útil\n\nAGENTE\n1\nExecute `my-skill action` para realizar a tarefa\n2\nVerifique o resultado\n\nSAÍDA\nTarefa concluída com sucesso", + "requirements": "Requisitos", + "requirementsPlaceholder": "- Node.js 18+\n- Chave de API do serviço X\n- etc.", + "submitSkill": "Enviar skill", + "submitting": "Enviando...", + "enterUrlFirst": "Insira uma URL primeiro", + "autoFillFailed": "Falha no preenchimento automático", + "submitFailed": "Falha ao enviar", + "somethingWentWrong": "Algo deu errado" + }, + "SubmitAgent": { + "title": "Publicar um agente", + "signInPrompt": "Entre para publicar um agente.", + "signIn": "Entrar", + "intro": "Liste um agente invocável no marketplace. Envie a URL do seu AgentCard A2A e nós analisamos o resto, ou preencha manualmente.", + "tabUrl": "URL do AgentCard", + "tabManual": "Manual", + "cardUrlLabel": "URL do AgentCard", + "cardUrlPlaceholder": "https://your-agent.com/.well-known/agent-card.json", + "cardUrlHelp": "Buscamos e validamos o AgentCard A2A (nome, endpoint, capacidades, skills).", + "nameLabel": "Nome do agente", + "namePlaceholder": "ex.: Weather Oracle", + "descriptionLabel": "Descrição", + "descriptionPlaceholder": "O que este agente faz?", + "endpointLabel": "URL do endpoint", + "endpointPlaceholder": "https://your-agent.com/a2a", + "protocolsLabel": "Protocolos", + "protocolOpenAiCompat": "Compatível com OpenAI", + "categoryLabel": "Categoria", + "uncategorized": "Sem categoria", + "pricingLabel": "Preço", + "pricingFree": "Grátis", + "pricingPerCall": "Por invocação", + "pricingPerTask": "Por tarefa", + "pricingPerToken": "Por 1k tokens", + "unitPriceLabel": "Preço unitário (USD)", + "unitPricePlaceholder": "0.002", + "homepageLabel": "Página inicial", + "optional": "opcional", + "homepagePlaceholder": "https://your-agent.com", + "submit": "Publicar agente", + "submitting": "Enviando…", + "submitFailed": "Falha ao enviar", + "somethingWentWrong": "Algo deu errado", + "successTitle": "Enviado 🎉", + "pendingReview": "{name} está aguardando revisão.", + "successDetail": "Vamos verificar o AgentCard e publicá-lo no marketplace assim que for aprovado.", + "backToMarketplace": "← Voltar ao marketplace" + } +} diff --git a/messages/ru.json b/messages/ru.json new file mode 100644 index 000000000..a2825de50 --- /dev/null +++ b/messages/ru.json @@ -0,0 +1,593 @@ +{ + "Metadata": { + "tagline": "Один API для доступа ко всем агентам", + "description": "Находите и вызывайте ИИ-агентов через единый API — OpenRouter для агентов. Просматривайте каталог из сотен open-source проектов агентов и тысяч навыков OpenClaw для вашего кодинг-агента." + }, + "LocaleSwitcher": { + "label": "Язык" + }, + "Header": { + "searchPlaceholder": "Поиск агентов...", + "agents": "Агенты", + "skills": "Навыки", + "trending": "В тренде", + "publish": "Опубликовать", + "publishAgent": "Опубликовать агента", + "account": "Аккаунт", + "mySkills": "Мои навыки", + "apiUsage": "API и использование", + "adminPanel": "Панель администратора", + "signIn": "Войти", + "signOut": "Выйти" + }, + "Footer": { + "tagline": "Один API для доступа ко всем агентам — плюс тысячи навыков OpenClaw для вашего кодинг-агента.", + "agentRegistry": "Реестр агентов:", + "platform": "Платформа", + "resources": "Ресурсы", + "installInAgent": "Установить в вашего агента", + "browseAgents": "Просмотр агентов", + "publishAnAgent": "Опубликовать агента", + "developerDashboard": "Панель разработчика", + "browseSkills": "Просмотр навыков", + "awesomeList": "Awesome-список", + "clawHub": "ClawHub", + "copyright": "© {year} TakoAPI. Создано для сообщества OpenClaw." + }, + "Home": { + "heroTitle": "Один API для доступа ко всем агентам", + "heroSubtitle": "Находите и вызывайте {agents, number} ИИ-агентов через единый API — плюс {skills, number} навыков для вашего кодинг-агента.", + "browseAgents": "Просмотр агентов", + "publishAnAgent": "Опубликовать агента", + "agentRegistry": "Реестр агентов:", + "browseByScenario": "По сценариям", + "allAgents": "Все агенты", + "featuredAgents": "Рекомендуемые агенты", + "browseAll": "Смотреть все", + "popularProjects": "Популярные open-source проекты", + "selfHostable": "{count, number} с самостоятельным хостингом", + "skillTitle": "Навык TakoAPI для OpenClaw", + "official": "Официальный", + "skillDescription": "Ищите, устанавливайте и управляйте навыками OpenClaw в обычном диалоге — на базе маркетплейса TakoAPI.", + "viewOnGithub": "Открыть на GitHub", + "askAgent": "или попросите агента: «Установи навык TakoAPI»", + "usingCodingAgent": "Используете Claude Code, Codex или OpenCode?", + "oneCommandInstall": "Установка одной командой", + "mustHaveSkills": "Незаменимые навыки", + "viewRankings": "Смотреть рейтинг", + "categories": "Категории", + "viewAll": "Смотреть все", + "moreCategories": "{count, plural, one {+# категория} few {+# категории} many {+# категорий} other {+# категории}}", + "latestSkills": "Новые навыки" + }, + "Scenarios": { + "frontend": "Фронтенд", + "backend": "Бэкенд", + "coding": "Код и разработка", + "agent-frameworks": "Фреймворки для агентов", + "devops": "DevOps и автоматизация", + "data-analysis": "Данные и аналитика", + "product-design": "Продуктовый дизайн", + "creative": "Креатив и медиа", + "presentations": "Презентации и документы", + "investing": "Инвестиции в публичные рынки", + "venture-analysis": "Венчур и бизнес-модели", + "marketing": "Маркетинг и рост", + "sales": "Продажи и CRM", + "customer-support": "Поддержка клиентов", + "research": "Исследования и поиск", + "writing": "Тексты и контент", + "productivity": "Продуктивность и ассистент" + }, + "AgentDetail": { + "notFound": "Агент не найден", + "backToMarketplace": "← Маркетплейс агентов", + "openSourceProject": "Open-source проект", + "signedCard": "Подписанная карточка", + "verifiedPublisher": "Проверенный издатель", + "by": "от {name}", + "publisherOpenSource": "open-source", + "publisherUnknown": "неизвестно", + "scenario": "Сценарий:", + "stars": "{count, number} звёзд", + "selfHost": "Свой хостинг", + "streaming": "Потоковая передача", + "pushNotifications": "Push-уведомления", + "skills": "Навыки", + "skillsCount": "({count, number})", + "noSkillsProject": "Open-source проект — изучите код и разверните его самостоятельно с GitHub.", + "noSkillsHosted": "Этот агент не объявил структурированные навыки в своей AgentCard.", + "inputMode": "вход: {mode}", + "outputMode": "выход: {mode}", + "openSourceProjectHeading": "Open-source проект", + "openSourceProjectNote": "Разверните самостоятельно или изучите код. Недоступен для вызова через шлюз TakoAPI.", + "viewOnGithub": "Открыть на GitHub", + "integration": "Интеграция", + "endpoint": "Endpoint", + "agentCard": "AgentCard", + "homepage": "Главная страница", + "callThroughTakoApi": "Вызвать через TakoAPI", + "gatewayPhase2": "Единый шлюз — вызов появится во второй фазе.", + "breadcrumbHome": "Главная", + "breadcrumbMarketplace": "Маркетплейс агентов" + }, + "Agents": { + "metaTitle": "Маркетплейс агентов", + "metaDescription": "Один API для доступа ко всем агентам. Просматривайте и вызывайте ИИ-агентов и сотни open-source проектов агентов через единый API — описанных открытыми A2A AgentCard.", + "ogTitle": "Маркетплейс агентов — {siteName}", + "ogDescription": "Находите и вызывайте ИИ-агентов и open-source проекты агентов через единый API.", + "heroTitle": "Маркетплейс агентов", + "heroTagline": "Один API для доступа ко всем агентам.", + "heroSubtitle": "Находите и вызывайте ИИ-агентов через единый API — описанных открытыми A2A AgentCard.", + "searchPlaceholder": "Поиск агентов по названию или описанию…", + "search": "Поиск", + "all": "Все", + "kindAgents": "Агенты", + "kindProjects": "Проекты", + "scenarioFilter": "Сценарий:", + "protocolFilter": "Протокол:", + "pricingFilter": "Тарификация:", + "categoryFilter": "Категория:", + "sortLabel": "Сортировка:", + "sortLatest": "Новые", + "sortStars": "Звёзды", + "sortPopular": "Популярные", + "sortCalls": "Чаще вызываемые", + "sortRating": "С лучшим рейтингом", + "pricingFree": "Бесплатно", + "pricingPerCall": "за вызов", + "pricingPerTask": "за задачу", + "pricingPerToken": "За 1 тыс. токенов", + "count": "{count, plural, =0 {Нет агентов} one {# агент} few {# агента} many {# агентов} other {# агента}}", + "emptyTitle": "Пока нет агентов, подходящих под ваши фильтры.", + "emptyCta": "Опубликуйте первого →", + "prev": "← Назад", + "next": "Вперёд →", + "pageOf": "Страница {page} из {total}" + }, + "Components": { + "homeSearchPlaceholder": "Поиск навыков по названию, описанию или автору...", + "homeSearchButton": "Поиск", + "agentFree": "Бесплатно", + "agentPerCall": "{price}/вызов", + "agentPerTask": "{price}/задача", + "agentPerToken": "{price}/1 тыс. ток.", + "agentPriceFallbackCall": "вызов", + "agentPriceFallbackTask": "задача", + "agentPriceFallbackToken": "токен", + "agentBadgeProject": "проект", + "agentBadgeStreaming": "потоковая передача", + "agentOpenSource": "open-source", + "agentSelfHost": "свой хостинг", + "agentSkills": "{count, plural, one {# навык} few {# навыка} many {# навыков} other {# навыка}}", + "skillBy": "от {author}", + "skillLikes": "{count, number}" + }, + "Install": { + "metaTitle": "Установка в Claude Code, Codex и OpenCode", + "title": "Установите TakoAPI в Claude Code, Codex и OpenCode", + "description": "Одна команда устанавливает навык TakoAPI в ваш кодинг-агент — находите и вызывайте ИИ-агентов через единый шлюз и ищите в каталоге навыков OpenClaw. Работает с Claude Code, Codex и OpenCode.", + "stepRunInstallerName": "Запустите установщик", + "stepRunInstallerText": "Выполните: curl -fsSL https://takoapi.com/install.sh | sh", + "stepUseAgentName": "Используйте TakoAPI из вашего агента", + "stepUseAgentText": "Попросите кодинг-агента найти или вызвать ИИ-агента на TakoAPI.", + "heroBadge": "Одна команда, три агента", + "heroTitle": "Установите TakoAPI в ваш кодинг-агент", + "heroSubtitle": "Добавьте навык TakoAPI в Claude Code, Codex или OpenCode — и находите и вызывайте любого ИИ-агента через единый шлюз прямо из терминала.", + "whatTitle": "Что делает установщик", + "whatWritesSkill": "Записывает единый навык TakoAPI с собственным пространством имён в каталог навыков каждого агента — он никогда не редактирует ваши общие конфигурационные файлы.", + "whatTeachesAgent": "Обучает вашего агента обращаться к реестру TakoAPI и шлюзу по HTTP — без лишних зависимостей и без сервера, который нужно запускать.", + "whatMcpServer": "Предпочитаете размещённые инструменты? Зарегистрируйте MCP-сервер TakoAPI — claude mcp add --transport http takoapi https://takoapi.com/mcp — он предоставит search_agents, get_agent, search_skills и invoke_agent как нативные MCP-инструменты.", + "whatIdempotent": "Идемпотентен (можно безопасно перезапускать) и полностью обратим через --uninstall.", + "whatApiKey": "Для тарифицируемого шлюза создайте API-ключ в панели и экспортируйте его как TAKO_KEY.", + "footnote": "На Windows или уже в Node? Используйте npx takoapi-install. Хотите сначала прочитать скрипт? Это обычный shell по адресу takoapi.com/install.sh." + }, + "InstallTabs": { + "universalNote": "Устанавливает навык TakoAPI в Claude Code, Codex и OpenCode — с автоопределением. Можно безопасно перезапускать, без root. На Windows или в Node используйте .", + "tablistLabel": "Кодинг-агенты", + "claudeCodeTagline": "CLI от Anthropic", + "codexTagline": "CLI от OpenAI", + "opencodeTagline": "opencode.ai", + "skillHeading": "Навык — обучает вашего агента вызывать TakoAPI", + "skillUniversalHint": "…или используйте универсальную команду выше — она охватывает и {name}.", + "writesHeading": "Записывает", + "howToUseHeading": "Как использовать", + "claudeCodeUse": "Загружается автоматически — просто попросите Claude найти агента на TakoAPI.", + "codexUse": "Вызовите через $takoapi или выберите в меню /skills.", + "opencodeUse": "Выполните /takoapi или передайте задачу @takoapi.", + "mcpHeading": "MCP-сервер — размещённые инструменты, ничего не нужно устанавливать", + "claudeCodeMcpHint": "Одна команда. Добавьте --header \"Authorization: Bearer $TAKO_KEY\", чтобы включить invoke_agent.", + "codexMcpHint": "Добавьте в ~/.codex/config.toml", + "opencodeMcpHint": "Объедините с ~/.config/opencode/opencode.json", + "mcpToolsNote": "Добавляет инструменты: search_agents, get_agent, search_skills, invoke_agent.", + "uninstallHeading": "Удаление", + "uninstallNote": "Удаляет только собственные файлы TakoAPI — никогда не затрагивает конфигурацию других ваших агентов.", + "copy": "Копировать", + "copied": "Скопировано" + }, + "SkillDetail": { + "notFoundMetaTitle": "Навык не найден", + "backToSkills": "Назад к навыкам", + "by": "от {author}", + "downloads": "Загрузки", + "stars": "Звёзды", + "views": "Просмотры", + "likes": "{count, plural, one {# лайк} few {# лайка} many {# лайков} other {# лайка}}", + "brief": "Кратко", + "description": "Описание", + "whatThisSkillDoes": "Что делает этот навык", + "whenToUseIt": "Когда его использовать", + "exampleWorkflow": "Пример сценария", + "workflowInput": "ВВОД", + "workflowAgent": "АГЕНТ", + "workflowOutput": "ВЫВОД", + "requirements": "Требования", + "installation": "Установка", + "clawHubCli": "ClawHub CLI", + "openClawChat": "OpenClaw Chat (вставьте это в ваш диалог)", + "links": "Ссылки", + "github": "GitHub", + "copyGithubUrl": "Копировать URL GitHub", + "clawHub": "ClawHub", + "skillNotFound": "Навык не найден" + }, + "Skills": { + "metaTitle": "Просмотр навыков", + "metaDescription": "Просматривайте тысячи навыков OpenClaw для вашего кодинг-агента в десятках категорий — с поиском, фильтрами и таблицей лидеров трендов.", + "ogTitle": "Просмотр навыков — {siteName}", + "ogDescription": "Тысячи навыков OpenClaw для вашего кодинг-агента.", + "heading": "Просмотр навыков", + "searchLabel": "Поиск: «{query}»", + "count": "Найдено навыков: {count, number}", + "sortLatest": "Новые", + "sortPopular": "Популярные", + "sortViews": "Просматриваемые", + "sortStars": "По звёздам", + "agentAll": "Все агенты", + "agentClaudeCode": "Claude Code", + "agentCursor": "Cursor", + "agentWindsurf": "Windsurf", + "agentCodex": "Codex", + "agentAider": "Aider", + "agentCline": "Cline", + "agentCopilot": "Copilot", + "agentGeneric": "Универсальные", + "all": "Все", + "emptyTitle": "Навыки не найдены", + "emptyHint": "Попробуйте изменить поисковый запрос или фильтры", + "pageOf": "Страница {page} из {total}" + }, + "Trending": { + "metaTitle": "Навыки в тренде", + "metaDescription": "Самые скачиваемые и популярные навыки OpenClaw прямо сейчас — живая таблица лидеров того, что устанавливают кодинг-агенты.", + "ogTitle": "Навыки в тренде — {siteName}", + "ogDescription": "Живая таблица лидеров самых популярных навыков OpenClaw.", + "title": "Навыки в тренде", + "subtitle": "Откройте самые популярные навыки OpenClaw в рейтинге сообщества", + "searchPlaceholder": "Поиск навыков в тренде…", + "categories": "Категории", + "allCategories": "Все категории", + "downloads": "Загрузки", + "stars": "Звёзды", + "likes": "Лайки", + "views": "Просмотры", + "skill": "Навык", + "count": "{count, plural, =0 {Нет навыков} one {# навык} few {# навыка} many {# навыков} other {# навыка}}", + "countInCategory": "{count, plural, =0 {Нет навыков} one {# навык} few {# навыка} many {# навыков} other {# навыка}} в категории {category}", + "emptyTitle": "Навыки не найдены", + "emptySubtitle": "Попробуйте изменить поисковый запрос или фильтры", + "byAuthor": "от {author}", + "showing": "Показаны {from, number}–{to, number} из {total, number}", + "prev": "Назад", + "next": "Вперёд" + }, + "Admin": { + "accessDenied": "Доступ запрещён", + "accessDeniedDescription": "Для доступа к этой странице нужны права администратора.", + "goHome": "На главную", + "backToSite": "Назад на сайт", + "panelTitle": "Панель администратора", + "navDashboard": "Дашборд", + "navSkills": "Навыки", + "navAgents": "Агенты", + "navCategories": "Категории", + "navUsers": "Пользователи", + "navLogs": "Логи", + "dashboardTitle": "Дашборд", + "statTotalSkills": "Всего навыков", + "statTotalUsers": "Всего пользователей", + "statCategories": "Категории", + "statTotalLikes": "Всего лайков", + "statTotalViews": "Всего просмотров", + "statTotalDownloads": "Всего загрузок", + "statPendingReview": "Ожидают проверки", + "recentSkills": "Недавние навыки", + "topSkillsByDownloads": "Топ навыков по загрузкам", + "viewAll": "Смотреть все", + "byAuthor": "от {author}", + "statusApproved": "одобрено", + "statusPending": "ожидает", + "statusRejected": "отклонено", + "loading": "Загрузка…", + "cancel": "Отмена", + "save": "Сохранить", + "saveChanges": "Сохранить изменения", + "delete": "Удалить", + "edit": "Редактировать", + "confirm": "Подтвердить", + "preview": "Предпросмотр", + "agentsTitle": "Агенты", + "agentsSubtitle": "Проверяйте и модерируйте отправленных агентов.", + "filterPending": "Ожидают", + "filterApproved": "Одобренные", + "filterRejected": "Отклонённые", + "filterAll": "Все", + "noAgentsInView": "В этом представлении нет агентов.", + "unknownPublisher": "неизвестно", + "uncategorized": "без категории", + "agentMetaSkills": "{count, number} навыков", + "noScenarios": "нет сценариев", + "reviewNoteLabel": "Примечание: {note}", + "editScenarios": "Редактировать сценарии", + "actionApprove": "Одобрить", + "actionReject": "Отклонить", + "feature": "В рекомендуемые", + "unfeature": "Убрать из рекомендуемых", + "scenariosEditorHint": "场景 Сценарии — 点击切换 / нажмите для назначения", + "scenarioOption": "{nameZh} · {name}", + "selectedCount": "Выбрано: {count, number}", + "rejectReasonPrompt": "Причина отклонения (необязательно):", + "deleteAgentConfirm": "Удалить этого агента навсегда?", + "skillsTitle": "Управление навыками", + "searchSkillsPlaceholder": "Поиск навыков...", + "allStatuses": "Все статусы", + "filterStatusPending": "Ожидают", + "filterStatusApproved": "Одобренные", + "filterStatusRejected": "Отклонённые", + "allCategories": "Все категории", + "selectedLabel": "Выбрано: {count, number}", + "batchApprove": "Одобрить", + "batchReject": "Отклонить", + "batchFeature": "В рекомендуемые", + "batchDelete": "Удалить", + "batchDeleteConfirm": "Удалить навыков: {count, number}? Это действие необратимо.", + "colName": "Название", + "colAuthor": "Автор", + "colCategory": "Категория", + "colStatus": "Статус", + "colDownloads": "Загрузки", + "colLikes": "Лайки", + "colViews": "Просмотры", + "colCreated": "Создано", + "colActions": "Действия", + "noSkillsFound": "Навыки не найдены.", + "showingRange": "Показаны {from, number}–{to, number} из {total, number}", + "editSkillTitle": "Редактировать навык", + "fieldName": "Название", + "fieldAuthor": "Автор", + "fieldBrief": "Кратко", + "fieldStatus": "Статус", + "optionPending": "Ожидает", + "optionApproved": "Одобрен", + "optionRejected": "Отклонён", + "fieldFeatured": "Рекомендуемый", + "deleteSkillTitle": "Удалить навык", + "deleteSkillConfirm": "Вы уверены, что хотите удалить {name}? Это действие необратимо.", + "categoriesTitle": "Категории", + "addCategory": "Добавить категорию", + "editCategoryTitle": "Редактировать категорию", + "newCategoryTitle": "Новая категория", + "fieldIcon": "Иконка", + "fieldDescription": "Описание", + "categoryNamePlaceholder": "напр. Анализ данных", + "categoryIconPlaceholder": "напр. chart-bar или эмодзи", + "categoryDescriptionPlaceholder": "Краткое описание", + "nameRequired": "Название обязательно.", + "saveCategoryFailed": "Не удалось сохранить категорию", + "deleteCategoryFailed": "Не удалось удалить категорию", + "fetchCategoriesFailed": "Не удалось загрузить категории", + "deleteFailed": "Не удалось удалить", + "somethingWentWrong": "Что-то пошло не так", + "update": "Обновить", + "create": "Создать", + "colSlug": "Slug", + "colSkills": "Навыки", + "colDescription": "Описание", + "noCategoriesFound": "Категории не найдены. Добавьте одну выше.", + "deleting": "...", + "cannotDeleteHasSkills": "Нельзя удалить: есть навыки", + "categoriesTotal": "{count, number} {count, plural, one {категория} few {категории} many {категорий} other {категории}} всего", + "usersTitle": "Пользователи", + "usersTotal": "{count, number} {count, plural, one {пользователь} few {пользователя} many {пользователей} other {пользователя}} всего", + "searchUsersPlaceholder": "Поиск по имени или email...", + "colEmail": "Email", + "colRole": "Роль", + "colProvider": "Провайдер", + "colJoined": "Регистрация", + "loadingUsers": "Загрузка пользователей...", + "noUsersFound": "Пользователи не найдены.", + "noName": "---", + "roleAdmin": "админ", + "roleUser": "пользователь", + "providerCredentials": "учётные данные", + "demote": "Понизить", + "promote": "Повысить", + "demoteToUser": "Понизить до пользователя", + "promoteToAdmin": "Повысить до администратора", + "logsTitle": "Логи администратора", + "logsTotal": "{count, number} {count, plural, one {запись} few {записи} many {записей} other {записи}} всего", + "colTimestamp": "Время", + "colAdmin": "Администратор", + "colAction": "Действие", + "colTargetType": "Тип объекта", + "colTargetId": "ID объекта", + "colDetail": "Детали", + "loadingLogs": "Загрузка логов...", + "noLogsFound": "Логи не найдены.", + "emptyDetail": "---", + "actionCreate": "создание", + "actionUpdate": "обновление", + "actionDelete": "удаление", + "actionApproveLog": "одобрение", + "actionRejectLog": "отклонение", + "actionRoleChange": "смена роли", + "targetSkill": "навык", + "targetAgent": "агент", + "targetCategory": "категория", + "targetUser": "пользователь" + }, + "Auth": { + "signInTitle": "Вход в TakoAPI", + "signInSubtitle": "Доступ к панели ваших навыков", + "signUpTitle": "Создать аккаунт", + "signUpSubtitle": "Присоединяйтесь к сообществу TakoAPI", + "continueWithGoogle": "Продолжить с Google", + "continueWithApple": "Продолжить с Apple", + "signUpWithGoogle": "Зарегистрироваться через Google", + "signUpWithApple": "Зарегистрироваться через Apple", + "or": "или", + "name": "Имя", + "email": "Email", + "password": "Пароль", + "passwordHint": "Пароль (минимум 8 символов)", + "signIn": "Войти", + "signingIn": "Вход...", + "createAccount": "Создать аккаунт", + "creatingAccount": "Создание аккаунта...", + "invalidCredentials": "Неверный email или пароль", + "registrationFailed": "Регистрация не удалась", + "somethingWentWrong": "Что-то пошло не так", + "noAccount": "Нет аккаунта?", + "signUpLink": "Зарегистрироваться", + "haveAccount": "Уже есть аккаунт?", + "signInLink": "Войти" + }, + "Dashboard": { + "title": "Панель разработчика", + "signInPrompt": "Войдите, чтобы управлять API-ключами и просматривать использование.", + "signIn": "Войти", + "description": "Управляйте API-ключами и отслеживайте использование шлюза. Один ключ, один счёт, любой агент.", + "apiKeys": "API-ключи", + "createKey": "Создать ключ", + "creating": "Создание…", + "copyKeyWarning": "Скопируйте этот ключ сейчас — он больше не будет показан.", + "copy": "Копировать", + "copied": "Скопировано", + "noKeys": "Пока нет ключей. Создайте один, чтобы начать вызывать агентов.", + "keyFallbackName": "ключ", + "created": "создан {date}", + "lastUsed": "последнее использование {date}", + "neverUsed": "не использовался", + "revoke": "Отозвать", + "revokeConfirm": "Отозвать этот ключ? Приложения, использующие его, перестанут работать.", + "quickstart": "Быстрый старт", + "usage": "Использование", + "totalCalls": "Всего вызовов", + "agentsUsed": "Использовано агентов", + "totalCount": "{count, number}", + "tableAgent": "Агент", + "tableProtocol": "Протокол", + "tableStatus": "Статус", + "tableLatency": "Задержка", + "tableWhen": "Когда", + "noCalls": "Пока нет вызовов. Создайте ключ и вызовите агента, чтобы увидеть использование здесь." + }, + "Profile": { + "title": "Мой профиль", + "signInPrompt": "Войдите, чтобы просмотреть свой профиль.", + "signIn": "Войти", + "submissions": "Заявки", + "likes": "Лайки", + "views": "Просмотры", + "statValue": "{count, number}", + "mySubmissions": "Мои заявки", + "submitNew": "Отправить новую", + "tab_all": "Все", + "tab_approved": "Одобренные", + "tab_pending": "Ожидают", + "tab_rejected": "Отклонённые", + "tabCount": "{count, number}", + "emptyTab": "В этой вкладке нет заявок", + "submitFirst": "Отправьте свой первый навык", + "statusApproved": "Одобрено", + "statusPending": "Ожидает проверки", + "statusRejected": "Отклонено", + "reviewerNote": "Примечание проверяющего:" + }, + "Submit": { + "title": "Отправить навык", + "subtitle": "Поделитесь своим навыком OpenClaw с сообществом", + "signInPrompt": "Войдите, чтобы отправлять навыки.", + "signIn": "Войти", + "skillSource": "Источник навыка", + "githubUrl": "URL GitHub", + "clawSkillsUrl": "URL ClawSkills.sh", + "githubUrlPlaceholder": "https://github.com/username/repo", + "clawSkillsUrlPlaceholder": "https://clawskills.sh/skills/author-skillname", + "autoFill": "Автозаполнение", + "fetching": "Загрузка...", + "filled": "Заполнено!", + "skillName": "Название навыка", + "skillNamePlaceholder": "напр. my-awesome-skill", + "category": "Категория", + "selectCategory": "Выберите категорию", + "categoryOption": "{name} ({count})", + "brief": "Кратко", + "briefHelper": "- Краткое описание в одну строку", + "briefPlaceholder": "Краткое описание того, что делает ваш навык", + "skillDetails": "Детали навыка", + "skillDetailsHelper": "- Автозаполнение из README", + "whatItDoes": "Что делает этот навык", + "whatItDoesPlaceholder": "Подробное объяснение того, что делает этот навык, его функции и возможности...", + "exampleWorkflow": "Пример сценария", + "exampleWorkflowHelper": "- ВВОД / шаги АГЕНТА / ВЫВОД", + "exampleWorkflowPlaceholder": "ВВОД\nПользователь просит: Сделай что-нибудь полезное\n\nАГЕНТ\n1\nВыполните `my-skill action`, чтобы решить задачу\n2\nПроверьте результат\n\nВЫВОД\nЗадача успешно выполнена", + "requirements": "Требования", + "requirementsPlaceholder": "- Node.js 18+\n- API-ключ от сервиса X\n- и т. д.", + "submitSkill": "Отправить навык", + "submitting": "Отправка...", + "enterUrlFirst": "Сначала введите URL", + "autoFillFailed": "Автозаполнение не удалось", + "submitFailed": "Не удалось отправить", + "somethingWentWrong": "Что-то пошло не так" + }, + "SubmitAgent": { + "title": "Опубликовать агента", + "signInPrompt": "Войдите, чтобы опубликовать агента.", + "signIn": "Войти", + "intro": "Разместите вызываемого агента на маркетплейсе. Отправьте URL его A2A AgentCard, и мы разберём остальное, или заполните вручную.", + "tabUrl": "URL AgentCard", + "tabManual": "Вручную", + "cardUrlLabel": "URL AgentCard", + "cardUrlPlaceholder": "https://your-agent.com/.well-known/agent-card.json", + "cardUrlHelp": "Мы загружаем и проверяем A2A AgentCard (название, endpoint, возможности, навыки).", + "nameLabel": "Название агента", + "namePlaceholder": "напр. Weather Oracle", + "descriptionLabel": "Описание", + "descriptionPlaceholder": "Что делает этот агент?", + "endpointLabel": "URL endpoint", + "endpointPlaceholder": "https://your-agent.com/a2a", + "protocolsLabel": "Протоколы", + "protocolOpenAiCompat": "Совместимый с OpenAI", + "categoryLabel": "Категория", + "uncategorized": "Без категории", + "pricingLabel": "Тарификация", + "pricingFree": "Бесплатно", + "pricingPerCall": "За вызов", + "pricingPerTask": "За задачу", + "pricingPerToken": "За 1 тыс. токенов", + "unitPriceLabel": "Цена за единицу (USD)", + "unitPricePlaceholder": "0.002", + "homepageLabel": "Главная страница", + "optional": "необязательно", + "homepagePlaceholder": "https://your-agent.com", + "submit": "Опубликовать агента", + "submitting": "Отправка…", + "submitFailed": "Не удалось отправить", + "somethingWentWrong": "Что-то пошло не так", + "successTitle": "Отправлено 🎉", + "pendingReview": "{name} теперь ожидает проверки.", + "successDetail": "Мы проверим AgentCard и опубликуем её на маркетплейсе после одобрения.", + "backToMarketplace": "← Назад на маркетплейс" + } +} diff --git a/messages/tr.json b/messages/tr.json new file mode 100644 index 000000000..a421d99a8 --- /dev/null +++ b/messages/tr.json @@ -0,0 +1,593 @@ +{ + "Metadata": { + "tagline": "Tüm ajanlara erişmek için tek API", + "description": "Yapay zekâ ajanlarını tek bir birleşik API üzerinden keşfedin ve çağırın — ajanlar için bir OpenRouter. Kodlama ajanınız için yüzlerce açık kaynaklı ajan projesinden ve binlerce OpenClaw becerisinden oluşan bir dizini gözatın." + }, + "LocaleSwitcher": { + "label": "Dil" + }, + "Header": { + "searchPlaceholder": "Ajan ara...", + "agents": "Ajanlar", + "skills": "Beceriler", + "trending": "Öne Çıkanlar", + "publish": "Yayınla", + "publishAgent": "Ajan Yayınla", + "account": "Hesap", + "mySkills": "Becerilerim", + "apiUsage": "API ve Kullanım", + "adminPanel": "Yönetim Paneli", + "signIn": "Giriş yap", + "signOut": "Çıkış yap" + }, + "Footer": { + "tagline": "Tüm ajanlara erişmek için tek API — ayrıca kodlama ajanınız için binlerce OpenClaw becerisi.", + "agentRegistry": "Ajan kaydı:", + "platform": "Platform", + "resources": "Kaynaklar", + "installInAgent": "Ajanınıza kurun", + "browseAgents": "Ajanlara Gözat", + "publishAnAgent": "Ajan Yayınla", + "developerDashboard": "Geliştirici Paneli", + "browseSkills": "Becerilere Gözat", + "awesomeList": "Awesome Listesi", + "clawHub": "ClawHub", + "copyright": "© {year} TakoAPI. OpenClaw topluluğu için geliştirildi." + }, + "Home": { + "heroTitle": "Tüm ajanlara erişmek için tek API", + "heroSubtitle": "{agents, number} yapay zekâ ajanını tek bir birleşik API üzerinden keşfedin ve çağırın — ayrıca kodlama ajanınız için {skills, number} beceri.", + "browseAgents": "Ajanlara gözat", + "publishAnAgent": "Ajan yayınla", + "agentRegistry": "Ajan kaydı:", + "browseByScenario": "Senaryoya göre gözat", + "allAgents": "Tüm ajanlar", + "featuredAgents": "Öne Çıkan Ajanlar", + "browseAll": "Tümüne gözat", + "popularProjects": "Popüler açık kaynaklı projeler", + "selfHostable": "{count, number} kendi sunucunuzda barındırılabilir", + "skillTitle": "OpenClaw için TakoAPI Becerisi", + "official": "Resmî", + "skillDescription": "OpenClaw becerilerini doğal sohbet yoluyla arayın, kurun ve yönetin — TakoAPI pazaryeri tarafından desteklenir.", + "viewOnGithub": "GitHub'da görüntüle", + "askAgent": "veya ajanınıza sorun: \"TakoAPI becerisini kur\"", + "usingCodingAgent": "Claude Code, Codex veya OpenCode mu kullanıyorsunuz?", + "oneCommandInstall": "Tek komutla kurulum", + "mustHaveSkills": "Olmazsa Olmaz Beceriler", + "viewRankings": "Sıralamaları görüntüle", + "categories": "Kategoriler", + "viewAll": "Tümünü görüntüle", + "moreCategories": "{count, plural, one {+# kategori daha} other {+# kategori daha}}", + "latestSkills": "En Yeni Beceriler" + }, + "Scenarios": { + "frontend": "Ön Yüz", + "backend": "Arka Uç", + "coding": "Kodlama ve Geliştirme", + "agent-frameworks": "Ajan Çatıları", + "devops": "DevOps ve Otomasyon", + "data-analysis": "Veri ve Analitik", + "product-design": "Ürün Tasarımı", + "creative": "Yaratıcılık ve Medya", + "presentations": "Sunumlar ve Belgeler", + "investing": "Halka Açık Piyasa Yatırımı", + "venture-analysis": "Girişim Sermayesi ve İş Modeli", + "marketing": "Pazarlama ve Büyüme", + "sales": "Satış ve CRM", + "customer-support": "Müşteri Desteği", + "research": "Araştırma ve Arama", + "writing": "Yazım ve İçerik", + "productivity": "Verimlilik ve Asistan" + }, + "AgentDetail": { + "notFound": "Ajan bulunamadı", + "backToMarketplace": "← Ajan Pazaryeri", + "openSourceProject": "Açık kaynaklı proje", + "signedCard": "İmzalı kart", + "verifiedPublisher": "Doğrulanmış yayıncı", + "by": "{name} tarafından", + "publisherOpenSource": "açık kaynak", + "publisherUnknown": "bilinmiyor", + "scenario": "Senaryo:", + "stars": "{count, number} yıldız", + "selfHost": "Kendi sunucunuzda barındırın", + "streaming": "Akış", + "pushNotifications": "Anlık bildirimler", + "skills": "Beceriler", + "skillsCount": "({count, number})", + "noSkillsProject": "Açık kaynaklı bir proje — kodu inceleyin ve GitHub'dan kendi sunucunuzda barındırın.", + "noSkillsHosted": "Bu ajan, AgentCard'ında yapılandırılmış beceriler bildirmedi.", + "inputMode": "giriş: {mode}", + "outputMode": "çıkış: {mode}", + "openSourceProjectHeading": "Açık kaynaklı proje", + "openSourceProjectNote": "Kendi sunucunuzda barındırın veya kodu inceleyin. TakoAPI ağ geçidi üzerinden çağrılamaz.", + "viewOnGithub": "GitHub'da görüntüle", + "integration": "Entegrasyon", + "endpoint": "Uç nokta", + "agentCard": "AgentCard", + "homepage": "Ana sayfa", + "callThroughTakoApi": "TakoAPI üzerinden çağırın", + "gatewayPhase2": "Birleşik ağ geçidi — çağırma özelliği 2. Aşamada gelecek.", + "breadcrumbHome": "Ana Sayfa", + "breadcrumbMarketplace": "Ajan Pazaryeri" + }, + "Agents": { + "metaTitle": "Ajan Pazaryeri", + "metaDescription": "Tüm ajanlara erişmek için tek API. Açık A2A AgentCard'larıyla tanımlanan yapay zekâ ajanlarını ve yüzlerce açık kaynaklı ajan projesini tek bir birleşik API üzerinden gözatın ve çağırın.", + "ogTitle": "Ajan Pazaryeri — {siteName}", + "ogDescription": "Yapay zekâ ajanlarını ve açık kaynaklı ajan projelerini tek bir birleşik API üzerinden keşfedin ve çağırın.", + "heroTitle": "Ajan Pazaryeri", + "heroTagline": "Tüm ajanlara erişmek için tek API.", + "heroSubtitle": "Açık A2A AgentCard'larıyla tanımlanan yapay zekâ ajanlarını tek bir birleşik API üzerinden keşfedin ve çağırın.", + "searchPlaceholder": "Ajanları ada veya açıklamaya göre ara…", + "search": "Ara", + "all": "Tümü", + "kindAgents": "Ajanlar", + "kindProjects": "Projeler", + "scenarioFilter": "Senaryo:", + "protocolFilter": "Protokol:", + "pricingFilter": "Fiyatlandırma:", + "categoryFilter": "Kategori:", + "sortLabel": "Sırala:", + "sortLatest": "En Yeni", + "sortStars": "Yıldızlar", + "sortPopular": "Popüler", + "sortCalls": "En Çok Çağrılan", + "sortRating": "En Yüksek Puanlı", + "pricingFree": "Ücretsiz", + "pricingPerCall": "çağrı başına", + "pricingPerTask": "görev başına", + "pricingPerToken": "1k jeton başına", + "count": "{count, plural, =0 {Ajan yok} one {# ajan} other {# ajan}}", + "emptyTitle": "Filtrelerinizle henüz eşleşen ajan yok.", + "emptyCta": "İlkini siz yayınlayın →", + "prev": "← Önceki", + "next": "Sonraki →", + "pageOf": "Sayfa {page} / {total}" + }, + "Components": { + "homeSearchPlaceholder": "Becerileri ada, açıklamaya veya yazara göre ara...", + "homeSearchButton": "Ara", + "agentFree": "Ücretsiz", + "agentPerCall": "{price}/çağrı", + "agentPerTask": "{price}/görev", + "agentPerToken": "{price}/1k jeton", + "agentPriceFallbackCall": "çağrı", + "agentPriceFallbackTask": "görev", + "agentPriceFallbackToken": "jeton", + "agentBadgeProject": "proje", + "agentBadgeStreaming": "akış", + "agentOpenSource": "açık kaynak", + "agentSelfHost": "kendi sunucunuzda barındırın", + "agentSkills": "{count, plural, one {# beceri} other {# beceri}}", + "skillBy": "{author} tarafından", + "skillLikes": "{count, number}" + }, + "Install": { + "metaTitle": "Claude Code, Codex ve OpenCode'a kurun", + "title": "TakoAPI'yi Claude Code, Codex ve OpenCode'a kurun", + "description": "Tek bir komut, TakoAPI becerisini kodlama ajanınıza kurar — yapay zekâ ajanlarını tek bir birleşik ağ geçidi üzerinden keşfedin ve çağırın, OpenClaw beceriler kataloğunda arama yapın. Claude Code, Codex ve OpenCode ile çalışır.", + "stepRunInstallerName": "Kurulum aracını çalıştırın", + "stepRunInstallerText": "Çalıştırın: curl -fsSL https://takoapi.com/install.sh | sh", + "stepUseAgentName": "TakoAPI'yi ajanınızdan kullanın", + "stepUseAgentText": "Kodlama ajanınızdan TakoAPI'deki bir yapay zekâ ajanını bulmasını veya çağırmasını isteyin.", + "heroBadge": "Tek komut, üç ajan", + "heroTitle": "TakoAPI'yi kodlama ajanınıza kurun", + "heroSubtitle": "TakoAPI becerisini Claude Code, Codex veya OpenCode'a ekleyin — ardından doğrudan terminalinizden, tek bir birleşik ağ geçidi üzerinden herhangi bir yapay zekâ ajanını keşfedin ve çağırın.", + "whatTitle": "Kurulum aracı ne yapar", + "whatWritesSkill": "Her ajanın kendi beceriler dizinine tek, ad alanı belirlenmiş bir TakoAPI becerisi yazar — paylaşılan yapılandırma dosyalarınızı asla düzenlemez.", + "whatTeachesAgent": "Ajanınıza TakoAPI kaydını ve ağ geçidini HTTP üzerinden çağırmayı öğretir — ek bağımlılık yok, çalıştırılacak sunucu yok.", + "whatMcpServer": "Barındırılan araçları mı tercih edersiniz? Bunun yerine TakoAPI MCP sunucusunu kaydedin — claude mcp add --transport http takoapi https://takoapi.com/mcpsearch_agents, get_agent, search_skills ve invoke_agent araçlarını yerel MCP araçları olarak sunar.", + "whatIdempotent": "Bağımsız çalıştırılabilirdir (yeniden çalıştırmak güvenlidir) ve --uninstall ile tamamen geri alınabilir.", + "whatApiKey": "Sayaçlı ağ geçidi için panelinizde bir API anahtarı oluşturun ve onu TAKO_KEY olarak dışa aktarın.", + "footnote": "Windows'ta mısınız veya zaten Node içinde misiniz? npx takoapi-install komutunu kullanın. Önce betiği okumayı mı tercih edersiniz? takoapi.com/install.sh adresinde düz kabuk betiği olarak bulunur." + }, + "InstallTabs": { + "universalNote": "TakoAPI becerisini Claude Code, Codex ve OpenCode'a kurar — otomatik algılanır. Yeniden çalıştırmak güvenlidir, root gerektirmez. Windows'ta veya Node içinde kullanın.", + "tablistLabel": "Kodlama ajanları", + "claudeCodeTagline": "Anthropic'in CLI'ı", + "codexTagline": "OpenAI'nin CLI'ı", + "opencodeTagline": "opencode.ai", + "skillHeading": "Beceri — ajanınıza TakoAPI'yi çağırmayı öğretir", + "skillUniversalHint": "…ya da yukarıdaki evrensel komutu kullanın — {name} için de geçerlidir.", + "writesHeading": "Yazdıkları", + "howToUseHeading": "Nasıl kullanılır", + "claudeCodeUse": "Otomatik yüklenir — yalnızca Claude'dan TakoAPI'de bir ajan bulmasını isteyin.", + "codexUse": "$takoapi ile çağırın veya /skills menüsünden seçin.", + "opencodeUse": "/takoapi komutunu çalıştırın veya @takoapi'ye devredin.", + "mcpHeading": "MCP sunucusu — barındırılan araçlar, kurulacak bir şey yok", + "claudeCodeMcpHint": "Tek komut. invoke_agent'ı etkinleştirmek için --header \"Authorization: Bearer $TAKO_KEY\" ekleyin.", + "codexMcpHint": "~/.codex/config.toml dosyasına ekleyin", + "opencodeMcpHint": "~/.config/opencode/opencode.json dosyasına birleştirin", + "mcpToolsNote": "Şu araçları ekler: search_agents, get_agent, search_skills, invoke_agent.", + "uninstallHeading": "Kaldır", + "uninstallNote": "Yalnızca TakoAPI'nin kendi dosyalarını kaldırır — diğer ajan yapılandırmanıza asla dokunmaz.", + "copy": "Kopyala", + "copied": "Kopyalandı" + }, + "SkillDetail": { + "notFoundMetaTitle": "Beceri bulunamadı", + "backToSkills": "Becerilere dön", + "by": "{author} tarafından", + "downloads": "İndirmeler", + "stars": "Yıldızlar", + "views": "Görüntülenmeler", + "likes": "{count, plural, one {# beğeni} other {# beğeni}}", + "brief": "Özet", + "description": "Açıklama", + "whatThisSkillDoes": "Bu Beceri Ne Yapar", + "whenToUseIt": "Ne Zaman Kullanılır", + "exampleWorkflow": "Örnek İş Akışı", + "workflowInput": "GİRİŞ", + "workflowAgent": "AJAN", + "workflowOutput": "ÇIKIŞ", + "requirements": "Gereksinimler", + "installation": "Kurulum", + "clawHubCli": "ClawHub CLI", + "openClawChat": "OpenClaw Chat (bunu sohbetinize yapıştırın)", + "links": "Bağlantılar", + "github": "GitHub", + "copyGithubUrl": "GitHub URL'sini kopyala", + "clawHub": "ClawHub", + "skillNotFound": "Beceri bulunamadı" + }, + "Skills": { + "metaTitle": "Becerilere Gözat", + "metaDescription": "Kodlama ajanınız için binlerce OpenClaw becerisini onlarca kategoride gözatın — arama, filtreleme ve öne çıkanlar tablosuyla.", + "ogTitle": "Becerilere Gözat — {siteName}", + "ogDescription": "Kodlama ajanınız için binlerce OpenClaw becerisi.", + "heading": "Becerilere Gözat", + "searchLabel": "Arama: \"{query}\"", + "count": "{count, number} beceri bulundu", + "sortLatest": "En Yeni", + "sortPopular": "En Popüler", + "sortViews": "En Çok Görüntülenen", + "sortStars": "En Çok Yıldızlı", + "agentAll": "Tüm ajanlar", + "agentClaudeCode": "Claude Code", + "agentCursor": "Cursor", + "agentWindsurf": "Windsurf", + "agentCodex": "Codex", + "agentAider": "Aider", + "agentCline": "Cline", + "agentCopilot": "Copilot", + "agentGeneric": "Genel", + "all": "Tümü", + "emptyTitle": "Beceri bulunamadı", + "emptyHint": "Aramanızı veya filtrelerinizi ayarlamayı deneyin", + "pageOf": "Sayfa {page} / {total}" + }, + "Trending": { + "metaTitle": "Öne Çıkan Beceriler", + "metaDescription": "Şu anda en çok indirilen ve en çok beğenilen OpenClaw becerileri — kodlama ajanlarının neler kurduğunu gösteren canlı bir liderlik tablosu.", + "ogTitle": "Öne Çıkan Beceriler — {siteName}", + "ogDescription": "En popüler OpenClaw becerilerinin canlı bir liderlik tablosu.", + "title": "Öne Çıkan Beceriler", + "subtitle": "Topluluk tarafından sıralanan en popüler OpenClaw becerilerini keşfedin", + "searchPlaceholder": "Öne çıkan becerilerde ara…", + "categories": "Kategoriler", + "allCategories": "Tüm Kategoriler", + "downloads": "İndirmeler", + "stars": "Yıldızlar", + "likes": "Beğeniler", + "views": "Görüntülenmeler", + "skill": "Beceri", + "count": "{count, plural, =0 {Beceri yok} one {# beceri} other {# beceri}}", + "countInCategory": "{category} kategorisinde {count, plural, =0 {beceri yok} one {# beceri} other {# beceri}}", + "emptyTitle": "Beceri bulunamadı", + "emptySubtitle": "Aramanızı veya filtrelerinizi ayarlamayı deneyin", + "byAuthor": "{author} tarafından", + "showing": "{total, number} sonuçtan {from, number}–{to, number} arası gösteriliyor", + "prev": "Önceki", + "next": "Sonraki" + }, + "Admin": { + "accessDenied": "Erişim Reddedildi", + "accessDeniedDescription": "Bu sayfaya erişmek için yönetici ayrıcalıklarına ihtiyacınız var.", + "goHome": "Ana Sayfaya Git", + "backToSite": "Siteye dön", + "panelTitle": "Yönetim Paneli", + "navDashboard": "Panel", + "navSkills": "Beceriler", + "navAgents": "Ajanlar", + "navCategories": "Kategoriler", + "navUsers": "Kullanıcılar", + "navLogs": "Günlükler", + "dashboardTitle": "Panel", + "statTotalSkills": "Toplam Beceri", + "statTotalUsers": "Toplam Kullanıcı", + "statCategories": "Kategoriler", + "statTotalLikes": "Toplam Beğeni", + "statTotalViews": "Toplam Görüntülenme", + "statTotalDownloads": "Toplam İndirme", + "statPendingReview": "İncelenmeyi Bekleyen", + "recentSkills": "Son Beceriler", + "topSkillsByDownloads": "İndirmeye Göre En İyi Beceriler", + "viewAll": "Tümünü görüntüle", + "byAuthor": "{author} tarafından", + "statusApproved": "onaylandı", + "statusPending": "beklemede", + "statusRejected": "reddedildi", + "loading": "Yükleniyor…", + "cancel": "İptal", + "save": "Kaydet", + "saveChanges": "Değişiklikleri Kaydet", + "delete": "Sil", + "edit": "Düzenle", + "confirm": "Onayla", + "preview": "Önizleme", + "agentsTitle": "Ajanlar", + "agentsSubtitle": "Gönderilen ajanları inceleyin ve denetleyin.", + "filterPending": "Beklemede", + "filterApproved": "Onaylandı", + "filterRejected": "Reddedildi", + "filterAll": "Tümü", + "noAgentsInView": "Bu görünümde ajan yok.", + "unknownPublisher": "bilinmiyor", + "uncategorized": "kategorisiz", + "agentMetaSkills": "{count, number} beceri", + "noScenarios": "senaryo yok", + "reviewNoteLabel": "Not: {note}", + "editScenarios": "Senaryoları düzenle", + "actionApprove": "Onayla", + "actionReject": "Reddet", + "feature": "Öne Çıkar", + "unfeature": "Öne Çıkarmayı Kaldır", + "scenariosEditorHint": "场景 Senaryolar — 点击切换 / atamak için değiştir", + "scenarioOption": "{nameZh} · {name}", + "selectedCount": "{count, number} seçildi", + "rejectReasonPrompt": "Reddetme nedeni (isteğe bağlı):", + "deleteAgentConfirm": "Bu ajan kalıcı olarak silinsin mi?", + "skillsTitle": "Beceri Yönetimi", + "searchSkillsPlaceholder": "Beceri ara...", + "allStatuses": "Tüm Durumlar", + "filterStatusPending": "Beklemede", + "filterStatusApproved": "Onaylandı", + "filterStatusRejected": "Reddedildi", + "allCategories": "Tüm Kategoriler", + "selectedLabel": "{count, number} seçildi", + "batchApprove": "Onayla", + "batchReject": "Reddet", + "batchFeature": "Öne Çıkar", + "batchDelete": "Sil", + "batchDeleteConfirm": "{count, number} beceri silinsin mi? Bu işlem geri alınamaz.", + "colName": "Ad", + "colAuthor": "Yazar", + "colCategory": "Kategori", + "colStatus": "Durum", + "colDownloads": "İndirmeler", + "colLikes": "Beğeniler", + "colViews": "Görüntülenmeler", + "colCreated": "Oluşturulma", + "colActions": "İşlemler", + "noSkillsFound": "Beceri bulunamadı.", + "showingRange": "{total, number} sonuçtan {from, number}–{to, number} arası gösteriliyor", + "editSkillTitle": "Beceriyi Düzenle", + "fieldName": "Ad", + "fieldAuthor": "Yazar", + "fieldBrief": "Özet", + "fieldStatus": "Durum", + "optionPending": "Beklemede", + "optionApproved": "Onaylandı", + "optionRejected": "Reddedildi", + "fieldFeatured": "Öne Çıkan", + "deleteSkillTitle": "Beceriyi Sil", + "deleteSkillConfirm": "{name} becerisini silmek istediğinizden emin misiniz? Bu işlem geri alınamaz.", + "categoriesTitle": "Kategoriler", + "addCategory": "Kategori Ekle", + "editCategoryTitle": "Kategoriyi Düzenle", + "newCategoryTitle": "Yeni Kategori", + "fieldIcon": "Simge", + "fieldDescription": "Açıklama", + "categoryNamePlaceholder": "örn. Veri Analizi", + "categoryIconPlaceholder": "örn. chart-bar veya emoji", + "categoryDescriptionPlaceholder": "Kısa açıklama", + "nameRequired": "Ad gereklidir.", + "saveCategoryFailed": "Kategori kaydedilemedi", + "deleteCategoryFailed": "Kategori silinemedi", + "fetchCategoriesFailed": "Kategoriler getirilemedi", + "deleteFailed": "Silme başarısız", + "somethingWentWrong": "Bir şeyler ters gitti", + "update": "Güncelle", + "create": "Oluştur", + "colSlug": "Kısa Ad", + "colSkills": "Beceriler", + "colDescription": "Açıklama", + "noCategoriesFound": "Kategori bulunamadı. Yukarıdan bir tane ekleyin.", + "deleting": "...", + "cannotDeleteHasSkills": "Silinemiyor: becerileri var", + "categoriesTotal": "{count, number} {count, plural, one {kategori} other {kategori}} toplam", + "usersTitle": "Kullanıcılar", + "usersTotal": "{count, number} {count, plural, one {kullanıcı} other {kullanıcı}} toplam", + "searchUsersPlaceholder": "Ada veya e-postaya göre ara...", + "colEmail": "E-posta", + "colRole": "Rol", + "colProvider": "Sağlayıcı", + "colJoined": "Katılma", + "loadingUsers": "Kullanıcılar yükleniyor...", + "noUsersFound": "Kullanıcı bulunamadı.", + "noName": "---", + "roleAdmin": "yönetici", + "roleUser": "kullanıcı", + "providerCredentials": "kimlik bilgileri", + "demote": "Yetkiyi Düşür", + "promote": "Yetkilendir", + "demoteToUser": "Kullanıcıya düşür", + "promoteToAdmin": "Yöneticiye yükselt", + "logsTitle": "Yönetim Günlükleri", + "logsTotal": "{count, number} {count, plural, one {kayıt} other {kayıt}} toplam", + "colTimestamp": "Zaman Damgası", + "colAdmin": "Yönetici", + "colAction": "İşlem", + "colTargetType": "Hedef Türü", + "colTargetId": "Hedef Kimliği", + "colDetail": "Ayrıntı", + "loadingLogs": "Günlükler yükleniyor...", + "noLogsFound": "Günlük bulunamadı.", + "emptyDetail": "---", + "actionCreate": "oluştur", + "actionUpdate": "güncelle", + "actionDelete": "sil", + "actionApproveLog": "onayla", + "actionRejectLog": "reddet", + "actionRoleChange": "rol değişikliği", + "targetSkill": "beceri", + "targetAgent": "ajan", + "targetCategory": "kategori", + "targetUser": "kullanıcı" + }, + "Auth": { + "signInTitle": "TakoAPI'ye giriş yap", + "signInSubtitle": "Beceriler panelinize erişin", + "signUpTitle": "Hesap oluştur", + "signUpSubtitle": "TakoAPI topluluğuna katılın", + "continueWithGoogle": "Google ile devam et", + "continueWithApple": "Apple ile devam et", + "signUpWithGoogle": "Google ile kaydol", + "signUpWithApple": "Apple ile kaydol", + "or": "veya", + "name": "Ad", + "email": "E-posta", + "password": "Parola", + "passwordHint": "Parola (en az 8 karakter)", + "signIn": "Giriş yap", + "signingIn": "Giriş yapılıyor...", + "createAccount": "Hesap oluştur", + "creatingAccount": "Hesap oluşturuluyor...", + "invalidCredentials": "Geçersiz e-posta veya parola", + "registrationFailed": "Kayıt başarısız", + "somethingWentWrong": "Bir şeyler ters gitti", + "noAccount": "Hesabınız yok mu?", + "signUpLink": "Kaydol", + "haveAccount": "Zaten bir hesabınız var mı?", + "signInLink": "Giriş yap" + }, + "Dashboard": { + "title": "Geliştirici Paneli", + "signInPrompt": "API anahtarlarını yönetmek ve kullanımı görüntülemek için giriş yapın.", + "signIn": "Giriş yap", + "description": "API anahtarlarını yönetin ve ağ geçidi kullanımını izleyin. Tek anahtar, tek fatura, herhangi bir ajan.", + "apiKeys": "API Anahtarları", + "createKey": "Anahtar oluştur", + "creating": "Oluşturuluyor…", + "copyKeyWarning": "Bu anahtarı şimdi kopyalayın — bir daha gösterilmeyecek.", + "copy": "Kopyala", + "copied": "Kopyalandı", + "noKeys": "Henüz anahtar yok. Ajanları çağırmaya başlamak için bir tane oluşturun.", + "keyFallbackName": "anahtar", + "created": "{date} tarihinde oluşturuldu", + "lastUsed": "son kullanım {date}", + "neverUsed": "hiç kullanılmadı", + "revoke": "İptal Et", + "revokeConfirm": "Bu anahtar iptal edilsin mi? Onu kullanan uygulamalar çalışmayı durduracak.", + "quickstart": "Hızlı Başlangıç", + "usage": "Kullanım", + "totalCalls": "Toplam çağrı", + "agentsUsed": "Kullanılan ajanlar", + "totalCount": "{count, number}", + "tableAgent": "Ajan", + "tableProtocol": "Protokol", + "tableStatus": "Durum", + "tableLatency": "Gecikme", + "tableWhen": "Zaman", + "noCalls": "Henüz çağrı yok. Burada kullanımı görmek için bir anahtar oluşturun ve bir ajan çağırın." + }, + "Profile": { + "title": "Profilim", + "signInPrompt": "Profilinizi görüntülemek için lütfen giriş yapın.", + "signIn": "Giriş yap", + "submissions": "Gönderimler", + "likes": "Beğeniler", + "views": "Görüntülenmeler", + "statValue": "{count, number}", + "mySubmissions": "Gönderimlerim", + "submitNew": "Yeni gönder", + "tab_all": "Tümü", + "tab_approved": "Onaylandı", + "tab_pending": "Beklemede", + "tab_rejected": "Reddedildi", + "tabCount": "{count, number}", + "emptyTab": "Bu sekmede gönderim yok", + "submitFirst": "İlk becerinizi gönderin", + "statusApproved": "Onaylandı", + "statusPending": "İncelemede", + "statusRejected": "Reddedildi", + "reviewerNote": "İnceleyen notu:" + }, + "Submit": { + "title": "Beceri Gönder", + "subtitle": "OpenClaw becerinizi toplulukla paylaşın", + "signInPrompt": "Beceri göndermek için lütfen giriş yapın.", + "signIn": "Giriş yap", + "skillSource": "Beceri Kaynağı", + "githubUrl": "GitHub URL'si", + "clawSkillsUrl": "ClawSkills.sh URL'si", + "githubUrlPlaceholder": "https://github.com/username/repo", + "clawSkillsUrlPlaceholder": "https://clawskills.sh/skills/author-skillname", + "autoFill": "Otomatik Doldur", + "fetching": "Getiriliyor...", + "filled": "Dolduruldu!", + "skillName": "Beceri Adı", + "skillNamePlaceholder": "örn. my-awesome-skill", + "category": "Kategori", + "selectCategory": "Bir kategori seçin", + "categoryOption": "{name} ({count})", + "brief": "Özet", + "briefHelper": "- Tek satırlık özet", + "briefPlaceholder": "Becerinizin ne yaptığına dair kısa bir açıklama", + "skillDetails": "Beceri Ayrıntıları", + "skillDetailsHelper": "- README'den otomatik dolduruldu", + "whatItDoes": "Bu Beceri Ne Yapar", + "whatItDoesPlaceholder": "Bu becerinin ne yaptığına, özelliklerine ve yeteneklerine dair ayrıntılı açıklama...", + "exampleWorkflow": "Örnek İş Akışı", + "exampleWorkflowHelper": "- GİRİŞ / AJAN adımları / ÇIKIŞ", + "exampleWorkflowPlaceholder": "GİRİŞ\nKullanıcı şunu sorar: Yararlı bir şey yap\n\nAJAN\n1\nGörevi gerçekleştirmek için `my-skill action` komutunu çalıştır\n2\nSonucu doğrula\n\nÇIKIŞ\nGörev başarıyla tamamlandı", + "requirements": "Gereksinimler", + "requirementsPlaceholder": "- Node.js 18+\n- X hizmetinden API anahtarı\n- vb.", + "submitSkill": "Beceriyi Gönder", + "submitting": "Gönderiliyor...", + "enterUrlFirst": "Lütfen önce bir URL girin", + "autoFillFailed": "Otomatik doldurma başarısız", + "submitFailed": "Gönderilemedi", + "somethingWentWrong": "Bir şeyler ters gitti" + }, + "SubmitAgent": { + "title": "Ajan Yayınla", + "signInPrompt": "Bir ajan yayınlamak için lütfen giriş yapın.", + "signIn": "Giriş yap", + "intro": "Pazaryerinde çağrılabilir bir ajan listeleyin. A2A AgentCard URL'sini gönderin, gerisini biz ayrıştıralım ya da elle doldurun.", + "tabUrl": "AgentCard URL'si", + "tabManual": "Elle", + "cardUrlLabel": "AgentCard URL'si", + "cardUrlPlaceholder": "https://your-agent.com/.well-known/agent-card.json", + "cardUrlHelp": "A2A AgentCard'ı (ad, uç nokta, yetenekler, beceriler) getirir ve doğrularız.", + "nameLabel": "Ajan adı", + "namePlaceholder": "örn. Weather Oracle", + "descriptionLabel": "Açıklama", + "descriptionPlaceholder": "Bu ajan ne yapar?", + "endpointLabel": "Uç nokta URL'si", + "endpointPlaceholder": "https://your-agent.com/a2a", + "protocolsLabel": "Protokoller", + "protocolOpenAiCompat": "OpenAI uyumlu", + "categoryLabel": "Kategori", + "uncategorized": "Kategorisiz", + "pricingLabel": "Fiyatlandırma", + "pricingFree": "Ücretsiz", + "pricingPerCall": "Çağrı başına", + "pricingPerTask": "Görev başına", + "pricingPerToken": "1k jeton başına", + "unitPriceLabel": "Birim fiyat (USD)", + "unitPricePlaceholder": "0.002", + "homepageLabel": "Ana sayfa", + "optional": "isteğe bağlı", + "homepagePlaceholder": "https://your-agent.com", + "submit": "Ajan Yayınla", + "submitting": "Gönderiliyor…", + "submitFailed": "Gönderilemedi", + "somethingWentWrong": "Bir şeyler ters gitti", + "successTitle": "Gönderildi 🎉", + "pendingReview": "{name} şu anda incelenmeyi bekliyor.", + "successDetail": "AgentCard'ı doğrulayacağız ve onaylandıktan sonra pazaryerinde yayınlayacağız.", + "backToMarketplace": "← Pazaryerine dön" + } +} diff --git a/messages/vi.json b/messages/vi.json new file mode 100644 index 000000000..1226306f1 --- /dev/null +++ b/messages/vi.json @@ -0,0 +1,593 @@ +{ + "Metadata": { + "tagline": "Một API để truy cập mọi agent", + "description": "Khám phá và gọi các AI agent thông qua một API hợp nhất — một OpenRouter dành cho agent. Duyệt thư mục gồm hàng trăm dự án agent mã nguồn mở và hàng nghìn kỹ năng OpenClaw cho coding agent của bạn." + }, + "LocaleSwitcher": { + "label": "Ngôn ngữ" + }, + "Header": { + "searchPlaceholder": "Tìm kiếm agent...", + "agents": "Agent", + "skills": "Kỹ năng", + "trending": "Thịnh hành", + "publish": "Đăng", + "publishAgent": "Đăng agent", + "account": "Tài khoản", + "mySkills": "Kỹ năng của tôi", + "apiUsage": "API & Sử dụng", + "adminPanel": "Bảng quản trị", + "signIn": "Đăng nhập", + "signOut": "Đăng xuất" + }, + "Footer": { + "tagline": "Một API để truy cập mọi agent — cùng hàng nghìn kỹ năng OpenClaw cho coding agent của bạn.", + "agentRegistry": "Registry agent:", + "platform": "Nền tảng", + "resources": "Tài nguyên", + "installInAgent": "Cài đặt vào agent của bạn", + "browseAgents": "Duyệt agent", + "publishAnAgent": "Đăng một agent", + "developerDashboard": "Bảng điều khiển nhà phát triển", + "browseSkills": "Duyệt kỹ năng", + "awesomeList": "Awesome List", + "clawHub": "ClawHub", + "copyright": "© {year} TakoAPI. Xây dựng cho cộng đồng OpenClaw." + }, + "Home": { + "heroTitle": "Một API để truy cập mọi agent", + "heroSubtitle": "Khám phá và gọi {agents, number} AI agent thông qua một API hợp nhất — cùng {skills, number} kỹ năng cho coding agent của bạn.", + "browseAgents": "Duyệt agent", + "publishAnAgent": "Đăng một agent", + "agentRegistry": "Registry agent:", + "browseByScenario": "Duyệt theo kịch bản", + "allAgents": "Tất cả agent", + "featuredAgents": "Agent nổi bật", + "browseAll": "Duyệt tất cả", + "popularProjects": "Dự án mã nguồn mở phổ biến", + "selfHostable": "{count, number} có thể tự host", + "skillTitle": "Kỹ năng TakoAPI cho OpenClaw", + "official": "Chính thức", + "skillDescription": "Tìm kiếm, cài đặt và quản lý kỹ năng OpenClaw qua hội thoại tự nhiên — được hỗ trợ bởi sàn TakoAPI.", + "viewOnGithub": "Xem trên GitHub", + "askAgent": "hoặc yêu cầu agent của bạn: \"Cài đặt kỹ năng TakoAPI\"", + "usingCodingAgent": "Đang dùng Claude Code, Codex hay OpenCode?", + "oneCommandInstall": "Cài đặt bằng một lệnh", + "mustHaveSkills": "Kỹ năng nên có", + "viewRankings": "Xem xếp hạng", + "categories": "Danh mục", + "viewAll": "Xem tất cả", + "moreCategories": "{count, plural, other {+# danh mục nữa}}", + "latestSkills": "Kỹ năng mới nhất" + }, + "Scenarios": { + "frontend": "Frontend", + "backend": "Backend", + "coding": "Lập trình & Phát triển", + "agent-frameworks": "Framework agent", + "devops": "DevOps & Tự động hóa", + "data-analysis": "Dữ liệu & Phân tích", + "product-design": "Thiết kế sản phẩm", + "creative": "Sáng tạo & Truyền thông", + "presentations": "Trình chiếu & Tài liệu", + "investing": "Đầu tư thị trường đại chúng", + "venture-analysis": "Đầu tư mạo hiểm & Mô hình kinh doanh", + "marketing": "Marketing & Tăng trưởng", + "sales": "Bán hàng & CRM", + "customer-support": "Hỗ trợ khách hàng", + "research": "Nghiên cứu & Tìm kiếm", + "writing": "Viết lách & Nội dung", + "productivity": "Năng suất & Trợ lý" + }, + "AgentDetail": { + "notFound": "Không tìm thấy agent", + "backToMarketplace": "← Sàn agent", + "openSourceProject": "Dự án mã nguồn mở", + "signedCard": "Card đã ký", + "verifiedPublisher": "Nhà phát hành đã xác minh", + "by": "bởi {name}", + "publisherOpenSource": "mã nguồn mở", + "publisherUnknown": "không rõ", + "scenario": "Kịch bản:", + "stars": "{count, number} sao", + "selfHost": "Tự host", + "streaming": "Streaming", + "pushNotifications": "Thông báo đẩy", + "skills": "Kỹ năng", + "skillsCount": "({count, number})", + "noSkillsProject": "Một dự án mã nguồn mở — khám phá mã nguồn và tự host từ GitHub.", + "noSkillsHosted": "Agent này không công bố kỹ năng có cấu trúc trong AgentCard của nó.", + "inputMode": "vào: {mode}", + "outputMode": "ra: {mode}", + "openSourceProjectHeading": "Dự án mã nguồn mở", + "openSourceProjectNote": "Tự host hoặc khám phá mã nguồn. Không thể gọi qua gateway TakoAPI.", + "viewOnGithub": "Xem trên GitHub", + "integration": "Tích hợp", + "endpoint": "Endpoint", + "agentCard": "AgentCard", + "homepage": "Trang chủ", + "callThroughTakoApi": "Gọi qua TakoAPI", + "gatewayPhase2": "Gateway hợp nhất — khả năng gọi ra mắt ở Giai đoạn 2.", + "breadcrumbHome": "Trang chủ", + "breadcrumbMarketplace": "Sàn agent" + }, + "Agents": { + "metaTitle": "Sàn agent", + "metaDescription": "Một API để truy cập mọi agent. Duyệt và gọi các AI agent cùng hàng trăm dự án agent mã nguồn mở thông qua một API hợp nhất — được mô tả bằng AgentCard A2A mở.", + "ogTitle": "Sàn agent — {siteName}", + "ogDescription": "Khám phá và gọi các AI agent và dự án agent mã nguồn mở thông qua một API hợp nhất.", + "heroTitle": "Sàn agent", + "heroTagline": "Một API để truy cập mọi agent.", + "heroSubtitle": "Khám phá và gọi các AI agent thông qua một API hợp nhất — được mô tả bằng AgentCard A2A mở.", + "searchPlaceholder": "Tìm agent theo tên hoặc mô tả…", + "search": "Tìm kiếm", + "all": "Tất cả", + "kindAgents": "Agent", + "kindProjects": "Dự án", + "scenarioFilter": "Kịch bản:", + "protocolFilter": "Giao thức:", + "pricingFilter": "Giá:", + "categoryFilter": "Danh mục:", + "sortLabel": "Sắp xếp:", + "sortLatest": "Mới nhất", + "sortStars": "Sao", + "sortPopular": "Phổ biến", + "sortCalls": "Được gọi nhiều nhất", + "sortRating": "Đánh giá cao nhất", + "pricingFree": "Miễn phí", + "pricingPerCall": "mỗi lần gọi", + "pricingPerTask": "mỗi tác vụ", + "pricingPerToken": "Mỗi 1k token", + "count": "{count, plural, other {# agent}}", + "emptyTitle": "Chưa có agent nào khớp với bộ lọc của bạn.", + "emptyCta": "Đăng agent đầu tiên →", + "prev": "← Trước", + "next": "Sau →", + "pageOf": "Trang {page} / {total}" + }, + "Components": { + "homeSearchPlaceholder": "Tìm kỹ năng theo tên, mô tả hoặc tác giả...", + "homeSearchButton": "Tìm kiếm", + "agentFree": "Miễn phí", + "agentPerCall": "{price}/lần gọi", + "agentPerTask": "{price}/tác vụ", + "agentPerToken": "{price}/1k token", + "agentPriceFallbackCall": "lần gọi", + "agentPriceFallbackTask": "tác vụ", + "agentPriceFallbackToken": "token", + "agentBadgeProject": "dự án", + "agentBadgeStreaming": "streaming", + "agentOpenSource": "mã nguồn mở", + "agentSelfHost": "tự host", + "agentSkills": "{count, plural, other {# kỹ năng}}", + "skillBy": "bởi {author}", + "skillLikes": "{count, number}" + }, + "Install": { + "metaTitle": "Cài đặt trong Claude Code, Codex & OpenCode", + "title": "Cài đặt TakoAPI trong Claude Code, Codex & OpenCode", + "description": "Một lệnh cài đặt kỹ năng TakoAPI vào coding agent của bạn — khám phá và gọi các AI agent thông qua một gateway hợp nhất, và tìm kiếm trong danh mục kỹ năng OpenClaw. Hoạt động với Claude Code, Codex và OpenCode.", + "stepRunInstallerName": "Chạy trình cài đặt", + "stepRunInstallerText": "Chạy: curl -fsSL https://takoapi.com/install.sh | sh", + "stepUseAgentName": "Dùng TakoAPI từ agent của bạn", + "stepUseAgentText": "Yêu cầu coding agent của bạn tìm hoặc gọi một AI agent trên TakoAPI.", + "heroBadge": "Một lệnh, ba agent", + "heroTitle": "Cài đặt TakoAPI trong coding agent của bạn", + "heroSubtitle": "Đưa kỹ năng TakoAPI vào Claude Code, Codex hoặc OpenCode — rồi khám phá và gọi bất kỳ AI agent nào thông qua một gateway hợp nhất, ngay từ terminal của bạn.", + "whatTitle": "Trình cài đặt làm gì", + "whatWritesSkill": "Ghi một kỹ năng TakoAPI đơn lẻ, có namespace riêng, vào thư mục kỹ năng của từng agent — nó không bao giờ chỉnh sửa các tệp cấu hình dùng chung của bạn.", + "whatTeachesAgent": "Hướng dẫn agent của bạn gọi registry TakoAPI và gateway qua HTTP — không cần phụ thuộc thêm, không cần chạy server.", + "whatMcpServer": "Thích công cụ được host? Hãy đăng ký MCP server của TakoAPI thay thế — claude mcp add --transport http takoapi https://takoapi.com/mcp — cung cấp search_agents, get_agent, search_skillsinvoke_agent dưới dạng công cụ MCP gốc.", + "whatIdempotent": "Mang tính idempotent (an toàn khi chạy lại) và có thể hoàn tác hoàn toàn bằng --uninstall.", + "whatApiKey": "Đối với gateway tính phí, hãy tạo một API key trong bảng điều khiển của bạn và export nó dưới dạng TAKO_KEY.", + "footnote": "Trên Windows hoặc đã có Node? Dùng npx takoapi-install. Muốn đọc script trước? Đó là shell thuần tại takoapi.com/install.sh." + }, + "InstallTabs": { + "universalNote": "Cài đặt kỹ năng TakoAPI vào Claude Code, Codex và OpenCode — được tự động phát hiện. An toàn khi chạy lại, không cần root. Trên Windows hoặc trong Node, dùng .", + "tablistLabel": "Coding agent", + "claudeCodeTagline": "CLI của Anthropic", + "codexTagline": "CLI của OpenAI", + "opencodeTagline": "opencode.ai", + "skillHeading": "Kỹ năng — hướng dẫn agent của bạn gọi TakoAPI", + "skillUniversalHint": "…hoặc dùng lệnh phổ quát ở trên — nó cũng bao gồm {name}.", + "writesHeading": "Ghi", + "howToUseHeading": "Cách dùng", + "claudeCodeUse": "Tự động tải — chỉ cần yêu cầu Claude tìm một agent trên TakoAPI.", + "codexUse": "Gọi bằng $takoapi, hoặc chọn từ menu /skills.", + "opencodeUse": "Chạy /takoapi , hoặc chuyển giao cho @takoapi.", + "mcpHeading": "MCP server — công cụ được host, không cần cài gì", + "claudeCodeMcpHint": "Một lệnh. Thêm --header \"Authorization: Bearer $TAKO_KEY\" để bật invoke_agent.", + "codexMcpHint": "Thêm vào ~/.codex/config.toml", + "opencodeMcpHint": "Hợp nhất vào ~/.config/opencode/opencode.json", + "mcpToolsNote": "Thêm công cụ: search_agents, get_agent, search_skills, invoke_agent.", + "uninstallHeading": "Gỡ cài đặt", + "uninstallNote": "Chỉ xóa các tệp riêng của TakoAPI — nó không bao giờ động đến cấu hình agent khác của bạn.", + "copy": "Sao chép", + "copied": "Đã sao chép" + }, + "SkillDetail": { + "notFoundMetaTitle": "Không tìm thấy kỹ năng", + "backToSkills": "Quay lại kỹ năng", + "by": "bởi {author}", + "downloads": "Lượt tải", + "stars": "Sao", + "views": "Lượt xem", + "likes": "{count, plural, other {# lượt thích}}", + "brief": "Tóm tắt", + "description": "Mô tả", + "whatThisSkillDoes": "Kỹ năng này làm gì", + "whenToUseIt": "Khi nào nên dùng", + "exampleWorkflow": "Quy trình ví dụ", + "workflowInput": "ĐẦU VÀO", + "workflowAgent": "AGENT", + "workflowOutput": "ĐẦU RA", + "requirements": "Yêu cầu", + "installation": "Cài đặt", + "clawHubCli": "ClawHub CLI", + "openClawChat": "OpenClaw Chat (dán đoạn này vào cuộc hội thoại của bạn)", + "links": "Liên kết", + "github": "GitHub", + "copyGithubUrl": "Sao chép URL GitHub", + "clawHub": "ClawHub", + "skillNotFound": "Không tìm thấy kỹ năng" + }, + "Skills": { + "metaTitle": "Duyệt kỹ năng", + "metaDescription": "Duyệt hàng nghìn kỹ năng OpenClaw cho coding agent của bạn trên hàng chục danh mục — với tìm kiếm, lọc và bảng xếp hạng thịnh hành.", + "ogTitle": "Duyệt kỹ năng — {siteName}", + "ogDescription": "Hàng nghìn kỹ năng OpenClaw cho coding agent của bạn.", + "heading": "Duyệt kỹ năng", + "searchLabel": "Tìm kiếm: \"{query}\"", + "count": "Tìm thấy {count, number} kỹ năng", + "sortLatest": "Mới nhất", + "sortPopular": "Phổ biến nhất", + "sortViews": "Xem nhiều nhất", + "sortStars": "Nhiều sao nhất", + "agentAll": "Tất cả agent", + "agentClaudeCode": "Claude Code", + "agentCursor": "Cursor", + "agentWindsurf": "Windsurf", + "agentCodex": "Codex", + "agentAider": "Aider", + "agentCline": "Cline", + "agentCopilot": "Copilot", + "agentGeneric": "Tổng quát", + "all": "Tất cả", + "emptyTitle": "Không tìm thấy kỹ năng", + "emptyHint": "Thử điều chỉnh tìm kiếm hoặc bộ lọc của bạn", + "pageOf": "Trang {page} / {total}" + }, + "Trending": { + "metaTitle": "Kỹ năng thịnh hành", + "metaDescription": "Những kỹ năng OpenClaw được tải và thích nhiều nhất ngay lúc này — bảng xếp hạng trực tiếp về những gì coding agent đang cài đặt.", + "ogTitle": "Kỹ năng thịnh hành — {siteName}", + "ogDescription": "Bảng xếp hạng trực tiếp các kỹ năng OpenClaw phổ biến nhất.", + "title": "Kỹ năng thịnh hành", + "subtitle": "Khám phá các kỹ năng OpenClaw phổ biến nhất được cộng đồng xếp hạng", + "searchPlaceholder": "Tìm kỹ năng thịnh hành…", + "categories": "Danh mục", + "allCategories": "Tất cả danh mục", + "downloads": "Lượt tải", + "stars": "Sao", + "likes": "Lượt thích", + "views": "Lượt xem", + "skill": "Kỹ năng", + "count": "{count, plural, other {# kỹ năng}}", + "countInCategory": "{count, plural, other {# kỹ năng}} trong {category}", + "emptyTitle": "Không tìm thấy kỹ năng", + "emptySubtitle": "Thử điều chỉnh tìm kiếm hoặc bộ lọc của bạn", + "byAuthor": "bởi {author}", + "showing": "Hiển thị {from, number}–{to, number} trên {total, number}", + "prev": "Trước", + "next": "Sau" + }, + "Admin": { + "accessDenied": "Truy cập bị từ chối", + "accessDeniedDescription": "Bạn cần quyền quản trị để truy cập trang này.", + "goHome": "Về trang chủ", + "backToSite": "Quay lại trang web", + "panelTitle": "Bảng quản trị", + "navDashboard": "Bảng điều khiển", + "navSkills": "Kỹ năng", + "navAgents": "Agent", + "navCategories": "Danh mục", + "navUsers": "Người dùng", + "navLogs": "Nhật ký", + "dashboardTitle": "Bảng điều khiển", + "statTotalSkills": "Tổng kỹ năng", + "statTotalUsers": "Tổng người dùng", + "statCategories": "Danh mục", + "statTotalLikes": "Tổng lượt thích", + "statTotalViews": "Tổng lượt xem", + "statTotalDownloads": "Tổng lượt tải", + "statPendingReview": "Chờ duyệt", + "recentSkills": "Kỹ năng gần đây", + "topSkillsByDownloads": "Kỹ năng tải nhiều nhất", + "viewAll": "Xem tất cả", + "byAuthor": "bởi {author}", + "statusApproved": "đã duyệt", + "statusPending": "đang chờ", + "statusRejected": "đã từ chối", + "loading": "Đang tải…", + "cancel": "Hủy", + "save": "Lưu", + "saveChanges": "Lưu thay đổi", + "delete": "Xóa", + "edit": "Sửa", + "confirm": "Xác nhận", + "preview": "Xem trước", + "agentsTitle": "Agent", + "agentsSubtitle": "Xem xét và kiểm duyệt các agent đã gửi.", + "filterPending": "Đang chờ", + "filterApproved": "Đã duyệt", + "filterRejected": "Đã từ chối", + "filterAll": "Tất cả", + "noAgentsInView": "Không có agent nào trong chế độ xem này.", + "unknownPublisher": "không rõ", + "uncategorized": "chưa phân loại", + "agentMetaSkills": "{count, number} kỹ năng", + "noScenarios": "không có kịch bản", + "reviewNoteLabel": "Ghi chú: {note}", + "editScenarios": "Sửa kịch bản", + "actionApprove": "Duyệt", + "actionReject": "Từ chối", + "feature": "Đưa lên nổi bật", + "unfeature": "Bỏ nổi bật", + "scenariosEditorHint": "场景 Kịch bản — 点击切换 / nhấn để gán", + "scenarioOption": "{nameZh} · {name}", + "selectedCount": "{count, number} đã chọn", + "rejectReasonPrompt": "Lý do từ chối (tùy chọn):", + "deleteAgentConfirm": "Xóa vĩnh viễn agent này?", + "skillsTitle": "Quản lý kỹ năng", + "searchSkillsPlaceholder": "Tìm kỹ năng...", + "allStatuses": "Tất cả trạng thái", + "filterStatusPending": "Đang chờ", + "filterStatusApproved": "Đã duyệt", + "filterStatusRejected": "Đã từ chối", + "allCategories": "Tất cả danh mục", + "selectedLabel": "{count, number} đã chọn", + "batchApprove": "Duyệt", + "batchReject": "Từ chối", + "batchFeature": "Đưa lên nổi bật", + "batchDelete": "Xóa", + "batchDeleteConfirm": "Xóa {count, number} kỹ năng? Thao tác này không thể hoàn tác.", + "colName": "Tên", + "colAuthor": "Tác giả", + "colCategory": "Danh mục", + "colStatus": "Trạng thái", + "colDownloads": "Lượt tải", + "colLikes": "Lượt thích", + "colViews": "Lượt xem", + "colCreated": "Đã tạo", + "colActions": "Hành động", + "noSkillsFound": "Không tìm thấy kỹ năng.", + "showingRange": "Hiển thị {from, number}–{to, number} trên {total, number}", + "editSkillTitle": "Sửa kỹ năng", + "fieldName": "Tên", + "fieldAuthor": "Tác giả", + "fieldBrief": "Tóm tắt", + "fieldStatus": "Trạng thái", + "optionPending": "Đang chờ", + "optionApproved": "Đã duyệt", + "optionRejected": "Đã từ chối", + "fieldFeatured": "Nổi bật", + "deleteSkillTitle": "Xóa kỹ năng", + "deleteSkillConfirm": "Bạn có chắc muốn xóa {name} không? Thao tác này không thể hoàn tác.", + "categoriesTitle": "Danh mục", + "addCategory": "Thêm danh mục", + "editCategoryTitle": "Sửa danh mục", + "newCategoryTitle": "Danh mục mới", + "fieldIcon": "Biểu tượng", + "fieldDescription": "Mô tả", + "categoryNamePlaceholder": "vd. Phân tích dữ liệu", + "categoryIconPlaceholder": "vd. chart-bar hoặc emoji", + "categoryDescriptionPlaceholder": "Mô tả ngắn", + "nameRequired": "Tên là bắt buộc.", + "saveCategoryFailed": "Lưu danh mục thất bại", + "deleteCategoryFailed": "Xóa danh mục thất bại", + "fetchCategoriesFailed": "Tải danh mục thất bại", + "deleteFailed": "Xóa thất bại", + "somethingWentWrong": "Đã xảy ra lỗi", + "update": "Cập nhật", + "create": "Tạo", + "colSlug": "Slug", + "colSkills": "Kỹ năng", + "colDescription": "Mô tả", + "noCategoriesFound": "Không tìm thấy danh mục. Thêm một danh mục ở trên.", + "deleting": "...", + "cannotDeleteHasSkills": "Không thể xóa: đang có kỹ năng", + "categoriesTotal": "Tổng {count, number} {count, plural, other {danh mục}}", + "usersTitle": "Người dùng", + "usersTotal": "Tổng {count, number} {count, plural, other {người dùng}}", + "searchUsersPlaceholder": "Tìm theo tên hoặc email...", + "colEmail": "Email", + "colRole": "Vai trò", + "colProvider": "Nhà cung cấp", + "colJoined": "Đã tham gia", + "loadingUsers": "Đang tải người dùng...", + "noUsersFound": "Không tìm thấy người dùng.", + "noName": "---", + "roleAdmin": "quản trị viên", + "roleUser": "người dùng", + "providerCredentials": "thông tin đăng nhập", + "demote": "Hạ quyền", + "promote": "Thăng quyền", + "demoteToUser": "Hạ xuống người dùng", + "promoteToAdmin": "Thăng lên quản trị viên", + "logsTitle": "Nhật ký quản trị", + "logsTotal": "Tổng {count, number} {count, plural, other {mục}}", + "colTimestamp": "Dấu thời gian", + "colAdmin": "Quản trị viên", + "colAction": "Hành động", + "colTargetType": "Loại đối tượng", + "colTargetId": "ID đối tượng", + "colDetail": "Chi tiết", + "loadingLogs": "Đang tải nhật ký...", + "noLogsFound": "Không tìm thấy nhật ký.", + "emptyDetail": "---", + "actionCreate": "tạo", + "actionUpdate": "cập nhật", + "actionDelete": "xóa", + "actionApproveLog": "duyệt", + "actionRejectLog": "từ chối", + "actionRoleChange": "đổi vai trò", + "targetSkill": "kỹ năng", + "targetAgent": "agent", + "targetCategory": "danh mục", + "targetUser": "người dùng" + }, + "Auth": { + "signInTitle": "Đăng nhập vào TakoAPI", + "signInSubtitle": "Truy cập bảng điều khiển kỹ năng của bạn", + "signUpTitle": "Tạo tài khoản", + "signUpSubtitle": "Tham gia cộng đồng TakoAPI", + "continueWithGoogle": "Tiếp tục với Google", + "continueWithApple": "Tiếp tục với Apple", + "signUpWithGoogle": "Đăng ký với Google", + "signUpWithApple": "Đăng ký với Apple", + "or": "hoặc", + "name": "Tên", + "email": "Email", + "password": "Mật khẩu", + "passwordHint": "Mật khẩu (tối thiểu 8 ký tự)", + "signIn": "Đăng nhập", + "signingIn": "Đang đăng nhập...", + "createAccount": "Tạo tài khoản", + "creatingAccount": "Đang tạo tài khoản...", + "invalidCredentials": "Email hoặc mật khẩu không hợp lệ", + "registrationFailed": "Đăng ký thất bại", + "somethingWentWrong": "Đã xảy ra lỗi", + "noAccount": "Chưa có tài khoản?", + "signUpLink": "Đăng ký", + "haveAccount": "Đã có tài khoản?", + "signInLink": "Đăng nhập" + }, + "Dashboard": { + "title": "Bảng điều khiển nhà phát triển", + "signInPrompt": "Đăng nhập để quản lý API key và xem mức sử dụng.", + "signIn": "Đăng nhập", + "description": "Quản lý API key và theo dõi mức sử dụng gateway. Một key, một hóa đơn, mọi agent.", + "apiKeys": "API Key", + "createKey": "Tạo key", + "creating": "Đang tạo…", + "copyKeyWarning": "Sao chép key này ngay — nó sẽ không được hiển thị lại.", + "copy": "Sao chép", + "copied": "Đã sao chép", + "noKeys": "Chưa có key nào. Tạo một key để bắt đầu gọi agent.", + "keyFallbackName": "key", + "created": "đã tạo {date}", + "lastUsed": "dùng lần cuối {date}", + "neverUsed": "chưa từng dùng", + "revoke": "Thu hồi", + "revokeConfirm": "Thu hồi key này? Các ứng dụng đang dùng nó sẽ ngừng hoạt động.", + "quickstart": "Bắt đầu nhanh", + "usage": "Mức sử dụng", + "totalCalls": "Tổng lượt gọi", + "agentsUsed": "Agent đã dùng", + "totalCount": "{count, number}", + "tableAgent": "Agent", + "tableProtocol": "Giao thức", + "tableStatus": "Trạng thái", + "tableLatency": "Độ trễ", + "tableWhen": "Thời điểm", + "noCalls": "Chưa có lượt gọi nào. Tạo một key và gọi một agent để xem mức sử dụng tại đây." + }, + "Profile": { + "title": "Hồ sơ của tôi", + "signInPrompt": "Vui lòng đăng nhập để xem hồ sơ của bạn.", + "signIn": "Đăng nhập", + "submissions": "Bài gửi", + "likes": "Lượt thích", + "views": "Lượt xem", + "statValue": "{count, number}", + "mySubmissions": "Bài gửi của tôi", + "submitNew": "Gửi mới", + "tab_all": "Tất cả", + "tab_approved": "Đã duyệt", + "tab_pending": "Đang chờ", + "tab_rejected": "Đã từ chối", + "tabCount": "{count, number}", + "emptyTab": "Không có bài gửi nào trong tab này", + "submitFirst": "Gửi kỹ năng đầu tiên của bạn", + "statusApproved": "Đã duyệt", + "statusPending": "Chờ duyệt", + "statusRejected": "Đã từ chối", + "reviewerNote": "Ghi chú của người duyệt:" + }, + "Submit": { + "title": "Gửi kỹ năng", + "subtitle": "Chia sẻ kỹ năng OpenClaw của bạn với cộng đồng", + "signInPrompt": "Vui lòng đăng nhập để gửi kỹ năng.", + "signIn": "Đăng nhập", + "skillSource": "Nguồn kỹ năng", + "githubUrl": "URL GitHub", + "clawSkillsUrl": "URL ClawSkills.sh", + "githubUrlPlaceholder": "https://github.com/username/repo", + "clawSkillsUrlPlaceholder": "https://clawskills.sh/skills/author-skillname", + "autoFill": "Điền tự động", + "fetching": "Đang tải...", + "filled": "Đã điền!", + "skillName": "Tên kỹ năng", + "skillNamePlaceholder": "vd. my-awesome-skill", + "category": "Danh mục", + "selectCategory": "Chọn một danh mục", + "categoryOption": "{name} ({count})", + "brief": "Tóm tắt", + "briefHelper": "- Tóm tắt một dòng", + "briefPlaceholder": "Mô tả ngắn về những gì kỹ năng của bạn làm", + "skillDetails": "Chi tiết kỹ năng", + "skillDetailsHelper": "- Tự động điền từ README", + "whatItDoes": "Kỹ năng này làm gì", + "whatItDoesPlaceholder": "Giải thích chi tiết về những gì kỹ năng này làm, các tính năng và khả năng của nó...", + "exampleWorkflow": "Quy trình ví dụ", + "exampleWorkflowHelper": "- ĐẦU VÀO / các bước AGENT / ĐẦU RA", + "exampleWorkflowPlaceholder": "ĐẦU VÀO\nNgười dùng yêu cầu: Làm điều gì đó hữu ích\n\nAGENT\n1\nChạy `my-skill action` để thực hiện tác vụ\n2\nKiểm tra kết quả\n\nĐẦU RA\nTác vụ hoàn thành thành công", + "requirements": "Yêu cầu", + "requirementsPlaceholder": "- Node.js 18+\n- API key từ dịch vụ X\n- v.v.", + "submitSkill": "Gửi kỹ năng", + "submitting": "Đang gửi...", + "enterUrlFirst": "Vui lòng nhập URL trước", + "autoFillFailed": "Điền tự động thất bại", + "submitFailed": "Gửi thất bại", + "somethingWentWrong": "Đã xảy ra lỗi" + }, + "SubmitAgent": { + "title": "Đăng một agent", + "signInPrompt": "Vui lòng đăng nhập để đăng một agent.", + "signIn": "Đăng nhập", + "intro": "Liệt kê một agent có thể gọi trên sàn. Gửi URL AgentCard A2A của nó và chúng tôi sẽ phân tích phần còn lại, hoặc điền thủ công.", + "tabUrl": "URL AgentCard", + "tabManual": "Thủ công", + "cardUrlLabel": "URL AgentCard", + "cardUrlPlaceholder": "https://your-agent.com/.well-known/agent-card.json", + "cardUrlHelp": "Chúng tôi tải và xác thực AgentCard A2A (tên, endpoint, khả năng, kỹ năng).", + "nameLabel": "Tên agent", + "namePlaceholder": "vd. Weather Oracle", + "descriptionLabel": "Mô tả", + "descriptionPlaceholder": "Agent này làm gì?", + "endpointLabel": "URL Endpoint", + "endpointPlaceholder": "https://your-agent.com/a2a", + "protocolsLabel": "Giao thức", + "protocolOpenAiCompat": "Tương thích OpenAI", + "categoryLabel": "Danh mục", + "uncategorized": "Chưa phân loại", + "pricingLabel": "Giá", + "pricingFree": "Miễn phí", + "pricingPerCall": "Mỗi lần gọi", + "pricingPerTask": "Mỗi tác vụ", + "pricingPerToken": "Mỗi 1k token", + "unitPriceLabel": "Đơn giá (USD)", + "unitPricePlaceholder": "0.002", + "homepageLabel": "Trang chủ", + "optional": "tùy chọn", + "homepagePlaceholder": "https://your-agent.com", + "submit": "Đăng agent", + "submitting": "Đang gửi…", + "submitFailed": "Gửi thất bại", + "somethingWentWrong": "Đã xảy ra lỗi", + "successTitle": "Đã gửi 🎉", + "pendingReview": "{name} hiện đang chờ duyệt.", + "successDetail": "Chúng tôi sẽ xác minh AgentCard và đăng nó lên sàn sau khi được duyệt.", + "backToMarketplace": "← Quay lại sàn" + } +} diff --git a/messages/zh.json b/messages/zh.json new file mode 100644 index 000000000..f20470ce2 --- /dev/null +++ b/messages/zh.json @@ -0,0 +1,593 @@ +{ + "Metadata": { + "tagline": "一个 API,访问所有智能体", + "description": "通过一个统一 API 发现并调用 AI 智能体——智能体领域的 OpenRouter。浏览数百个开源智能体项目和数千个 OpenClaw 技能,为你的编程智能体所用。" + }, + "LocaleSwitcher": { + "label": "语言" + }, + "Header": { + "searchPlaceholder": "搜索智能体……", + "agents": "智能体", + "skills": "技能", + "trending": "热门", + "publish": "发布", + "publishAgent": "发布智能体", + "account": "账户", + "mySkills": "我的技能", + "apiUsage": "API 与用量", + "adminPanel": "管理后台", + "signIn": "登录", + "signOut": "退出登录" + }, + "Footer": { + "tagline": "一个 API,访问所有智能体——外加数千个 OpenClaw 技能,为你的编程智能体所用。", + "agentRegistry": "智能体注册表:", + "platform": "平台", + "resources": "资源", + "installInAgent": "安装到你的智能体", + "browseAgents": "浏览智能体", + "publishAnAgent": "发布智能体", + "developerDashboard": "开发者控制台", + "browseSkills": "浏览技能", + "awesomeList": "精选清单", + "clawHub": "ClawHub", + "copyright": "© {year} TakoAPI。为 OpenClaw 社区打造。" + }, + "Home": { + "heroTitle": "一个 API,访问所有智能体", + "heroSubtitle": "通过一个统一 API 发现并调用 {agents, number} 个 AI 智能体——外加 {skills, number} 个技能,为你的编程智能体所用。", + "browseAgents": "浏览智能体", + "publishAnAgent": "发布智能体", + "agentRegistry": "智能体注册表:", + "browseByScenario": "按场景浏览", + "allAgents": "全部智能体", + "featuredAgents": "精选智能体", + "browseAll": "查看全部", + "popularProjects": "热门开源项目", + "selfHostable": "{count, number} 个可自托管", + "skillTitle": "面向 OpenClaw 的 TakoAPI 技能", + "official": "官方", + "skillDescription": "通过自然对话搜索、安装并管理 OpenClaw 技能——由 TakoAPI 市场提供支持。", + "viewOnGithub": "在 GitHub 上查看", + "askAgent": "或者让你的智能体执行:“安装 TakoAPI 技能”", + "usingCodingAgent": "在用 Claude Code、Codex 或 OpenCode?", + "oneCommandInstall": "一条命令完成安装", + "mustHaveSkills": "必备技能", + "viewRankings": "查看排行榜", + "categories": "分类", + "viewAll": "查看全部", + "moreCategories": "{count, plural, other {还有 # 个分类}}", + "latestSkills": "最新技能" + }, + "Scenarios": { + "frontend": "前端", + "backend": "后端", + "coding": "编程与开发", + "agent-frameworks": "智能体框架", + "devops": "DevOps 与自动化", + "data-analysis": "数据与分析", + "product-design": "产品设计", + "creative": "创意与媒体", + "presentations": "演示与文档", + "investing": "公开市场投资", + "venture-analysis": "风投与商业模式", + "marketing": "营销与增长", + "sales": "销售与 CRM", + "customer-support": "客户支持", + "research": "研究与搜索", + "writing": "写作与内容", + "productivity": "效率与助手" + }, + "AgentDetail": { + "notFound": "未找到该智能体", + "backToMarketplace": "← 智能体市场", + "openSourceProject": "开源项目", + "signedCard": "已签名卡片", + "verifiedPublisher": "已验证发布者", + "by": "由 {name} 提供", + "publisherOpenSource": "开源", + "publisherUnknown": "未知", + "scenario": "场景:", + "stars": "{count, number} 星标", + "selfHost": "自托管", + "streaming": "流式传输", + "pushNotifications": "推送通知", + "skills": "技能", + "skillsCount": "({count, number})", + "noSkillsProject": "一个开源项目——浏览代码并从 GitHub 自托管。", + "noSkillsHosted": "该智能体未在其 AgentCard 中声明结构化技能。", + "inputMode": "输入:{mode}", + "outputMode": "输出:{mode}", + "openSourceProjectHeading": "开源项目", + "openSourceProjectNote": "自托管或浏览代码。无法通过 TakoAPI 网关调用。", + "viewOnGithub": "在 GitHub 上查看", + "integration": "集成", + "endpoint": "端点", + "agentCard": "AgentCard", + "homepage": "主页", + "callThroughTakoApi": "通过 TakoAPI 调用", + "gatewayPhase2": "统一网关——调用功能将在第二阶段上线。", + "breadcrumbHome": "首页", + "breadcrumbMarketplace": "智能体市场" + }, + "Agents": { + "metaTitle": "智能体市场", + "metaDescription": "一个 API,访问所有智能体。通过一个统一 API 浏览并调用 AI 智能体和数百个开源智能体项目——以开放的 A2A AgentCard 描述。", + "ogTitle": "智能体市场 — {siteName}", + "ogDescription": "通过一个统一 API 发现并调用 AI 智能体和开源智能体项目。", + "heroTitle": "智能体市场", + "heroTagline": "一个 API,访问所有智能体。", + "heroSubtitle": "通过一个统一 API 发现并调用 AI 智能体——以开放的 A2A AgentCard 描述。", + "searchPlaceholder": "按名称或描述搜索智能体……", + "search": "搜索", + "all": "全部", + "kindAgents": "智能体", + "kindProjects": "项目", + "scenarioFilter": "场景:", + "protocolFilter": "协议:", + "pricingFilter": "定价:", + "categoryFilter": "分类:", + "sortLabel": "排序:", + "sortLatest": "最新", + "sortStars": "星标", + "sortPopular": "热门", + "sortCalls": "调用最多", + "sortRating": "评分最高", + "pricingFree": "免费", + "pricingPerCall": "每次调用", + "pricingPerTask": "每个任务", + "pricingPerToken": "每 1k tokens", + "count": "{count, plural, other {# 个智能体}}", + "emptyTitle": "暂无符合筛选条件的智能体。", + "emptyCta": "成为第一个发布者 →", + "prev": "← 上一页", + "next": "下一页 →", + "pageOf": "第 {page} / {total} 页" + }, + "Components": { + "homeSearchPlaceholder": "按名称、描述或作者搜索技能……", + "homeSearchButton": "搜索", + "agentFree": "免费", + "agentPerCall": "{price}/次", + "agentPerTask": "{price}/任务", + "agentPerToken": "{price}/1k tok", + "agentPriceFallbackCall": "次", + "agentPriceFallbackTask": "任务", + "agentPriceFallbackToken": "token", + "agentBadgeProject": "项目", + "agentBadgeStreaming": "流式", + "agentOpenSource": "开源", + "agentSelfHost": "自托管", + "agentSkills": "{count, plural, other {# 个技能}}", + "skillBy": "由 {author} 提供", + "skillLikes": "{count, number}" + }, + "Install": { + "metaTitle": "安装到 Claude Code、Codex 和 OpenCode", + "title": "将 TakoAPI 安装到 Claude Code、Codex 和 OpenCode", + "description": "一条命令即可将 TakoAPI 技能安装到你的编程智能体——通过一个统一网关发现并调用 AI 智能体,并搜索 OpenClaw 技能目录。支持 Claude Code、Codex 和 OpenCode。", + "stepRunInstallerName": "运行安装程序", + "stepRunInstallerText": "运行:curl -fsSL https://takoapi.com/install.sh | sh", + "stepUseAgentName": "从你的智能体使用 TakoAPI", + "stepUseAgentText": "让你的编程智能体在 TakoAPI 上查找或调用某个 AI 智能体。", + "heroBadge": "一条命令,三种智能体", + "heroTitle": "将 TakoAPI 安装到你的编程智能体", + "heroSubtitle": "把 TakoAPI 技能装进 Claude Code、Codex 或 OpenCode——然后通过一个统一网关,直接在终端里发现并调用任意 AI 智能体。", + "whatTitle": "安装程序会做什么", + "whatWritesSkill": "将一个带命名空间的 TakoAPI 技能写入每个智能体各自的技能目录——绝不改动你的共享配置文件。", + "whatTeachesAgent": "教你的智能体通过 HTTP 调用 TakoAPI 注册表和网关——无需额外依赖,也无需运行服务器。", + "whatMcpServer": "更想用托管工具?改为注册 TakoAPI MCP 服务器——claude mcp add --transport http takoapi https://takoapi.com/mcp——将 search_agentsget_agentsearch_skillsinvoke_agent 作为原生 MCP 工具暴露出来。", + "whatIdempotent": "具有幂等性(可安全重复运行),并可通过 --uninstall 完全卸载。", + "whatApiKey": "若要使用计量网关,请在控制台中创建 API 密钥,并将其导出为 TAKO_KEY。", + "footnote": "使用 Windows 或已装有 Node?请用 npx takoapi-install。想先读一遍脚本?它就是纯 shell,位于 takoapi.com/install.sh。" + }, + "InstallTabs": { + "universalNote": "将 TakoAPI 技能安装到 Claude Code、Codex 和 OpenCode——自动检测。可安全重复运行,无需 root。在 Windows 或 Node 环境下请用 。", + "tablistLabel": "编程智能体", + "claudeCodeTagline": "Anthropic 的 CLI", + "codexTagline": "OpenAI 的 CLI", + "opencodeTagline": "opencode.ai", + "skillHeading": "技能——教你的智能体调用 TakoAPI", + "skillUniversalHint": "……或使用上面的通用命令——它同样涵盖 {name}。", + "writesHeading": "写入", + "howToUseHeading": "如何使用", + "claudeCodeUse": "自动加载——只需让 Claude 在 TakoAPI 上查找智能体。", + "codexUse": "用 $takoapi 调用,或从 /skills 菜单中选择。", + "opencodeUse": "运行 /takoapi ,或交接给 @takoapi。", + "mcpHeading": "MCP 服务器——托管工具,无需安装", + "claudeCodeMcpHint": "一条命令。加上 --header \"Authorization: Bearer $TAKO_KEY\" 即可启用 invoke_agent。", + "codexMcpHint": "添加到 ~/.codex/config.toml", + "opencodeMcpHint": "合并到 ~/.config/opencode/opencode.json", + "mcpToolsNote": "新增工具:search_agentsget_agentsearch_skillsinvoke_agent。", + "uninstallHeading": "卸载", + "uninstallNote": "仅移除 TakoAPI 自己的文件——绝不触碰你的其他智能体配置。", + "copy": "复制", + "copied": "已复制" + }, + "SkillDetail": { + "notFoundMetaTitle": "未找到该技能", + "backToSkills": "返回技能列表", + "by": "由 {author} 提供", + "downloads": "下载量", + "stars": "星标", + "views": "浏览量", + "likes": "{count, plural, other {# 个赞}}", + "brief": "简介", + "description": "描述", + "whatThisSkillDoes": "该技能的功能", + "whenToUseIt": "何时使用", + "exampleWorkflow": "示例工作流", + "workflowInput": "输入", + "workflowAgent": "智能体", + "workflowOutput": "输出", + "requirements": "前置要求", + "installation": "安装", + "clawHubCli": "ClawHub CLI", + "openClawChat": "OpenClaw Chat(将此内容粘贴到你的对话中)", + "links": "链接", + "github": "GitHub", + "copyGithubUrl": "复制 GitHub URL", + "clawHub": "ClawHub", + "skillNotFound": "未找到该技能" + }, + "Skills": { + "metaTitle": "浏览技能", + "metaDescription": "跨数十个分类浏览数千个面向编程智能体的 OpenClaw 技能——支持搜索、筛选和热门排行榜。", + "ogTitle": "浏览技能 — {siteName}", + "ogDescription": "数千个面向编程智能体的 OpenClaw 技能。", + "heading": "浏览技能", + "searchLabel": "搜索:“{query}”", + "count": "找到 {count, number} 个技能", + "sortLatest": "最新", + "sortPopular": "最受欢迎", + "sortViews": "浏览最多", + "sortStars": "星标最多", + "agentAll": "全部智能体", + "agentClaudeCode": "Claude Code", + "agentCursor": "Cursor", + "agentWindsurf": "Windsurf", + "agentCodex": "Codex", + "agentAider": "Aider", + "agentCline": "Cline", + "agentCopilot": "Copilot", + "agentGeneric": "通用", + "all": "全部", + "emptyTitle": "未找到技能", + "emptyHint": "试试调整搜索或筛选条件", + "pageOf": "第 {page} / {total} 页" + }, + "Trending": { + "metaTitle": "热门技能", + "metaDescription": "当下下载量和点赞量最高的 OpenClaw 技能——实时呈现编程智能体正在安装哪些技能的排行榜。", + "ogTitle": "热门技能 — {siteName}", + "ogDescription": "最受欢迎 OpenClaw 技能的实时排行榜。", + "title": "热门技能", + "subtitle": "发现社区评选出的最受欢迎 OpenClaw 技能", + "searchPlaceholder": "搜索热门技能……", + "categories": "分类", + "allCategories": "全部分类", + "downloads": "下载量", + "stars": "星标", + "likes": "点赞", + "views": "浏览量", + "skill": "技能", + "count": "{count, plural, other {# 个技能}}", + "countInCategory": "{category} 分类下 {count, plural, other {# 个技能}}", + "emptyTitle": "未找到技能", + "emptySubtitle": "试试调整搜索或筛选条件", + "byAuthor": "由 {author} 提供", + "showing": "显示第 {from, number}–{to, number} 个,共 {total, number} 个", + "prev": "上一页", + "next": "下一页" + }, + "Admin": { + "accessDenied": "访问被拒绝", + "accessDeniedDescription": "你需要管理员权限才能访问此页面。", + "goHome": "返回首页", + "backToSite": "返回站点", + "panelTitle": "管理后台", + "navDashboard": "仪表盘", + "navSkills": "技能", + "navAgents": "智能体", + "navCategories": "分类", + "navUsers": "用户", + "navLogs": "日志", + "dashboardTitle": "仪表盘", + "statTotalSkills": "技能总数", + "statTotalUsers": "用户总数", + "statCategories": "分类", + "statTotalLikes": "点赞总数", + "statTotalViews": "浏览总量", + "statTotalDownloads": "下载总量", + "statPendingReview": "待审核", + "recentSkills": "最近技能", + "topSkillsByDownloads": "下载量最高的技能", + "viewAll": "查看全部", + "byAuthor": "由 {author} 提供", + "statusApproved": "已通过", + "statusPending": "待审核", + "statusRejected": "已拒绝", + "loading": "加载中……", + "cancel": "取消", + "save": "保存", + "saveChanges": "保存更改", + "delete": "删除", + "edit": "编辑", + "confirm": "确认", + "preview": "预览", + "agentsTitle": "智能体", + "agentsSubtitle": "审核并管理提交的智能体。", + "filterPending": "待审核", + "filterApproved": "已通过", + "filterRejected": "已拒绝", + "filterAll": "全部", + "noAgentsInView": "此视图下暂无智能体。", + "unknownPublisher": "未知", + "uncategorized": "未分类", + "agentMetaSkills": "{count, number} 个技能", + "noScenarios": "无场景", + "reviewNoteLabel": "备注:{note}", + "editScenarios": "编辑场景", + "actionApprove": "通过", + "actionReject": "拒绝", + "feature": "设为精选", + "unfeature": "取消精选", + "scenariosEditorHint": "场景 Scenarios — 点击切换 / toggle to assign", + "scenarioOption": "{nameZh} · {name}", + "selectedCount": "已选 {count, number} 个", + "rejectReasonPrompt": "拒绝原因(可选):", + "deleteAgentConfirm": "永久删除该智能体?", + "skillsTitle": "技能管理", + "searchSkillsPlaceholder": "搜索技能……", + "allStatuses": "全部状态", + "filterStatusPending": "待审核", + "filterStatusApproved": "已通过", + "filterStatusRejected": "已拒绝", + "allCategories": "全部分类", + "selectedLabel": "已选 {count, number} 个", + "batchApprove": "通过", + "batchReject": "拒绝", + "batchFeature": "设为精选", + "batchDelete": "删除", + "batchDeleteConfirm": "删除 {count, number} 个技能?此操作无法撤销。", + "colName": "名称", + "colAuthor": "作者", + "colCategory": "分类", + "colStatus": "状态", + "colDownloads": "下载量", + "colLikes": "点赞", + "colViews": "浏览量", + "colCreated": "创建时间", + "colActions": "操作", + "noSkillsFound": "未找到技能。", + "showingRange": "显示第 {from, number}–{to, number} 个,共 {total, number} 个", + "editSkillTitle": "编辑技能", + "fieldName": "名称", + "fieldAuthor": "作者", + "fieldBrief": "简介", + "fieldStatus": "状态", + "optionPending": "待审核", + "optionApproved": "已通过", + "optionRejected": "已拒绝", + "fieldFeatured": "精选", + "deleteSkillTitle": "删除技能", + "deleteSkillConfirm": "确定要删除 {name} 吗?此操作无法撤销。", + "categoriesTitle": "分类", + "addCategory": "添加分类", + "editCategoryTitle": "编辑分类", + "newCategoryTitle": "新建分类", + "fieldIcon": "图标", + "fieldDescription": "描述", + "categoryNamePlaceholder": "例如:数据分析", + "categoryIconPlaceholder": "例如:chart-bar 或 emoji", + "categoryDescriptionPlaceholder": "简短描述", + "nameRequired": "名称为必填项。", + "saveCategoryFailed": "保存分类失败", + "deleteCategoryFailed": "删除分类失败", + "fetchCategoriesFailed": "获取分类失败", + "deleteFailed": "删除失败", + "somethingWentWrong": "出了点问题", + "update": "更新", + "create": "创建", + "colSlug": "Slug", + "colSkills": "技能", + "colDescription": "描述", + "noCategoriesFound": "未找到分类。请在上方添加一个。", + "deleting": "……", + "cannotDeleteHasSkills": "无法删除:存在关联技能", + "categoriesTotal": "{count, plural, other {共 {count, number} 个分类}}", + "usersTitle": "用户", + "usersTotal": "{count, plural, other {共 {count, number} 名用户}}", + "searchUsersPlaceholder": "按姓名或邮箱搜索……", + "colEmail": "邮箱", + "colRole": "角色", + "colProvider": "提供方", + "colJoined": "加入时间", + "loadingUsers": "正在加载用户……", + "noUsersFound": "未找到用户。", + "noName": "---", + "roleAdmin": "管理员", + "roleUser": "用户", + "providerCredentials": "凭据", + "demote": "降级", + "promote": "提升", + "demoteToUser": "降级为用户", + "promoteToAdmin": "提升为管理员", + "logsTitle": "管理日志", + "logsTotal": "{count, plural, other {共 {count, number} 条记录}}", + "colTimestamp": "时间戳", + "colAdmin": "管理员", + "colAction": "操作", + "colTargetType": "目标类型", + "colTargetId": "目标 ID", + "colDetail": "详情", + "loadingLogs": "正在加载日志……", + "noLogsFound": "未找到日志。", + "emptyDetail": "---", + "actionCreate": "创建", + "actionUpdate": "更新", + "actionDelete": "删除", + "actionApproveLog": "通过", + "actionRejectLog": "拒绝", + "actionRoleChange": "角色变更", + "targetSkill": "技能", + "targetAgent": "智能体", + "targetCategory": "分类", + "targetUser": "用户" + }, + "Auth": { + "signInTitle": "登录 TakoAPI", + "signInSubtitle": "进入你的技能控制台", + "signUpTitle": "创建账户", + "signUpSubtitle": "加入 TakoAPI 社区", + "continueWithGoogle": "使用 Google 继续", + "continueWithApple": "使用 Apple 继续", + "signUpWithGoogle": "使用 Google 注册", + "signUpWithApple": "使用 Apple 注册", + "or": "或", + "name": "姓名", + "email": "邮箱", + "password": "密码", + "passwordHint": "密码(至少 8 个字符)", + "signIn": "登录", + "signingIn": "正在登录……", + "createAccount": "创建账户", + "creatingAccount": "正在创建账户……", + "invalidCredentials": "邮箱或密码有误", + "registrationFailed": "注册失败", + "somethingWentWrong": "出了点问题", + "noAccount": "还没有账户?", + "signUpLink": "注册", + "haveAccount": "已经有账户了?", + "signInLink": "登录" + }, + "Dashboard": { + "title": "开发者控制台", + "signInPrompt": "登录以管理 API 密钥并查看用量。", + "signIn": "登录", + "description": "管理 API 密钥并监控网关用量。一个密钥,一份账单,任意智能体。", + "apiKeys": "API 密钥", + "createKey": "创建密钥", + "creating": "正在创建……", + "copyKeyWarning": "立即复制此密钥——它不会再次显示。", + "copy": "复制", + "copied": "已复制", + "noKeys": "暂无密钥。创建一个即可开始调用智能体。", + "keyFallbackName": "密钥", + "created": "创建于 {date}", + "lastUsed": "最后使用于 {date}", + "neverUsed": "从未使用", + "revoke": "吊销", + "revokeConfirm": "吊销此密钥?使用它的应用将无法继续工作。", + "quickstart": "快速上手", + "usage": "用量", + "totalCalls": "总调用次数", + "agentsUsed": "已使用智能体", + "totalCount": "{count, number}", + "tableAgent": "智能体", + "tableProtocol": "协议", + "tableStatus": "状态", + "tableLatency": "延迟", + "tableWhen": "时间", + "noCalls": "暂无调用。创建一个密钥并调用智能体即可在此查看用量。" + }, + "Profile": { + "title": "我的资料", + "signInPrompt": "请登录以查看你的资料。", + "signIn": "登录", + "submissions": "提交", + "likes": "点赞", + "views": "浏览量", + "statValue": "{count, number}", + "mySubmissions": "我的提交", + "submitNew": "提交新内容", + "tab_all": "全部", + "tab_approved": "已通过", + "tab_pending": "待审核", + "tab_rejected": "已拒绝", + "tabCount": "{count, number}", + "emptyTab": "此标签下暂无提交", + "submitFirst": "提交你的第一个技能", + "statusApproved": "已通过", + "statusPending": "待审核", + "statusRejected": "已拒绝", + "reviewerNote": "审核员备注:" + }, + "Submit": { + "title": "提交技能", + "subtitle": "与社区分享你的 OpenClaw 技能", + "signInPrompt": "请登录以提交技能。", + "signIn": "登录", + "skillSource": "技能来源", + "githubUrl": "GitHub URL", + "clawSkillsUrl": "ClawSkills.sh URL", + "githubUrlPlaceholder": "https://github.com/username/repo", + "clawSkillsUrlPlaceholder": "https://clawskills.sh/skills/author-skillname", + "autoFill": "自动填充", + "fetching": "正在获取……", + "filled": "已填充!", + "skillName": "技能名称", + "skillNamePlaceholder": "例如:my-awesome-skill", + "category": "分类", + "selectCategory": "选择一个分类", + "categoryOption": "{name}({count})", + "brief": "简介", + "briefHelper": "- 一句话概述", + "briefPlaceholder": "简要描述你的技能能做什么", + "skillDetails": "技能详情", + "skillDetailsHelper": "- 自动从 README 填充", + "whatItDoes": "该技能的功能", + "whatItDoesPlaceholder": "详细说明该技能的功能、特性与能力……", + "exampleWorkflow": "示例工作流", + "exampleWorkflowHelper": "- 输入 / 智能体步骤 / 输出", + "exampleWorkflowPlaceholder": "INPUT\nUser asks: Do something useful\n\nAGENT\n1\nRun `my-skill action` to perform the task\n2\nVerify the result\n\nOUTPUT\nTask completed successfully", + "requirements": "前置要求", + "requirementsPlaceholder": "- Node.js 18+\n- 来自服务 X 的 API 密钥\n- 等等", + "submitSkill": "提交技能", + "submitting": "正在提交……", + "enterUrlFirst": "请先输入一个 URL", + "autoFillFailed": "自动填充失败", + "submitFailed": "提交失败", + "somethingWentWrong": "出了点问题" + }, + "SubmitAgent": { + "title": "发布智能体", + "signInPrompt": "请登录以发布智能体。", + "signIn": "登录", + "intro": "在市场上发布一个可调用的智能体。提交其 A2A AgentCard URL,我们会解析其余信息,或者你也可以手动填写。", + "tabUrl": "AgentCard URL", + "tabManual": "手动", + "cardUrlLabel": "AgentCard URL", + "cardUrlPlaceholder": "https://your-agent.com/.well-known/agent-card.json", + "cardUrlHelp": "我们会获取并验证 A2A AgentCard(名称、端点、能力、技能)。", + "nameLabel": "智能体名称", + "namePlaceholder": "例如:Weather Oracle", + "descriptionLabel": "描述", + "descriptionPlaceholder": "这个智能体能做什么?", + "endpointLabel": "端点 URL", + "endpointPlaceholder": "https://your-agent.com/a2a", + "protocolsLabel": "协议", + "protocolOpenAiCompat": "OpenAI 兼容", + "categoryLabel": "分类", + "uncategorized": "未分类", + "pricingLabel": "定价", + "pricingFree": "免费", + "pricingPerCall": "每次调用", + "pricingPerTask": "每个任务", + "pricingPerToken": "每 1k tokens", + "unitPriceLabel": "单价(美元)", + "unitPricePlaceholder": "0.002", + "homepageLabel": "主页", + "optional": "可选", + "homepagePlaceholder": "https://your-agent.com", + "submit": "发布智能体", + "submitting": "正在提交……", + "submitFailed": "提交失败", + "somethingWentWrong": "出了点问题", + "successTitle": "已提交 🎉", + "pendingReview": "{name} 现已进入待审核状态。", + "successDetail": "我们会验证 AgentCard,审核通过后将其发布到市场。", + "backToMarketplace": "← 返回市场" + } +} diff --git a/next.config.ts b/next.config.ts index 68a6c64d2..5c5c27c28 100644 --- a/next.config.ts +++ b/next.config.ts @@ -1,7 +1,10 @@ import type { NextConfig } from "next"; +import createNextIntlPlugin from "next-intl/plugin"; + +const withNextIntl = createNextIntlPlugin("./src/i18n/request.ts"); const nextConfig: NextConfig = { output: "standalone", }; -export default nextConfig; +export default withNextIntl(nextConfig); diff --git a/package-lock.json b/package-lock.json index 739eb9bc9..acc07d9ce 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,10 +17,12 @@ "lucide-react": "^1.7.0", "next": "16.2.1", "next-auth": "^5.0.0-beta.30", + "next-intl": "^4.13.0", "prisma": "^6.19.2", "react": "19.2.4", "react-dom": "19.2.4", - "tailwind-merge": "^3.5.0" + "tailwind-merge": "^3.5.0", + "zod": "^4.3.6" }, "devDependencies": { "@tailwindcss/postcss": "^4", @@ -121,7 +123,6 @@ "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.29.0", "@babel/generator": "^7.29.0", @@ -508,6 +509,36 @@ "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, + "node_modules/@formatjs/fast-memoize": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-3.1.6.tgz", + "integrity": "sha512-H5aexk1Le7T9TPmscacZ+1pR6CTa2n1wq+HDVGXhH8TzUlQQpeXzZs91dRtmFHrbeNbjPFPfQujUqm7MHgVoXQ==", + "license": "MIT" + }, + "node_modules/@formatjs/icu-messageformat-parser": { + "version": "3.5.11", + "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-3.5.11.tgz", + "integrity": "sha512-NVsuNsc2dUVG9+4HBJ/srScxtA/18LqGgwtop/tuN/OIBjVl6QA+0KhfZQddDD9sEh2LeVjLFPGVU3ixa3blcA==", + "license": "MIT", + "dependencies": { + "@formatjs/icu-skeleton-parser": "2.1.10" + } + }, + "node_modules/@formatjs/icu-skeleton-parser": { + "version": "2.1.10", + "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-2.1.10.tgz", + "integrity": "sha512-XuSva+8ZGawk8VnD5VD6UeH8KarQ/Z022zgjHDoHmlNiAewstXuuzXc0Hk5pGFSdG+nNw5bfJKXqj1ZXHn9yUA==", + "license": "MIT" + }, + "node_modules/@formatjs/intl-localematcher": { + "version": "0.8.10", + "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.8.10.tgz", + "integrity": "sha512-P/IC3qws3jH+1fEs+o0RIFgXKRaQlFehjS5W0FPAqdo6hgzawLl+eD0q0JjheQ3XtoOe5n8WSYfX06KQZI/QJA==", + "license": "MIT", + "dependencies": { + "@formatjs/fast-memoize": "3.1.6" + } + }, "node_modules/@humanfs/core": { "version": "0.19.1", "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", @@ -1290,13 +1321,319 @@ "url": "https://github.com/sponsors/panva" } }, + "node_modules/@parcel/watcher": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.6.tgz", + "integrity": "sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "detect-libc": "^2.0.3", + "is-glob": "^4.0.3", + "node-addon-api": "^7.0.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.5.6", + "@parcel/watcher-darwin-arm64": "2.5.6", + "@parcel/watcher-darwin-x64": "2.5.6", + "@parcel/watcher-freebsd-x64": "2.5.6", + "@parcel/watcher-linux-arm-glibc": "2.5.6", + "@parcel/watcher-linux-arm-musl": "2.5.6", + "@parcel/watcher-linux-arm64-glibc": "2.5.6", + "@parcel/watcher-linux-arm64-musl": "2.5.6", + "@parcel/watcher-linux-x64-glibc": "2.5.6", + "@parcel/watcher-linux-x64-musl": "2.5.6", + "@parcel/watcher-win32-arm64": "2.5.6", + "@parcel/watcher-win32-ia32": "2.5.6", + "@parcel/watcher-win32-x64": "2.5.6" + } + }, + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.6.tgz", + "integrity": "sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.6.tgz", + "integrity": "sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-x64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.6.tgz", + "integrity": "sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.6.tgz", + "integrity": "sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.6.tgz", + "integrity": "sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-musl": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.6.tgz", + "integrity": "sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.6.tgz", + "integrity": "sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.6.tgz", + "integrity": "sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.6.tgz", + "integrity": "sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.6.tgz", + "integrity": "sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.6.tgz", + "integrity": "sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-ia32": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.6.tgz", + "integrity": "sha512-k35yLp1ZMwwee3Ez/pxBi5cf4AoBKYXj00CZ80jUz5h8prpiaQsiRPKQMxoLstNuqe2vR4RNPEAEcjEFzhEz/g==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.6.tgz", + "integrity": "sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher/node_modules/picomatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/@prisma/client": { "version": "6.19.2", "resolved": "https://registry.npmjs.org/@prisma/client/-/client-6.19.2.tgz", "integrity": "sha512-gR2EMvfK/aTxsuooaDA32D8v+us/8AAet+C3J1cc04SW35FPdZYgLF+iN4NDLUgAaUGTKdAB0CYenu1TAgGdMg==", "hasInstallScript": true, "license": "Apache-2.0", - "peer": true, "engines": { "node": ">=18.18" }, @@ -1344,79 +1681,283 @@ "@prisma/get-platform": "6.19.2" } }, - "node_modules/@prisma/engines-version": { - "version": "7.1.1-3.c2990dca591cba766e3b7ef5d9e8a84796e47ab7", - "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-7.1.1-3.c2990dca591cba766e3b7ef5d9e8a84796e47ab7.tgz", - "integrity": "sha512-03bgb1VD5gvuumNf+7fVGBzfpJPjmqV423l/WxsWk2cNQ42JD0/SsFBPhN6z8iAvdHs07/7ei77SKu7aZfq8bA==", - "license": "Apache-2.0" - }, - "node_modules/@prisma/fetch-engine": { - "version": "6.19.2", - "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-6.19.2.tgz", - "integrity": "sha512-h4Ff4Pho+SR1S8XerMCC12X//oY2bG3Iug/fUnudfcXEUnIeRiBdXHFdGlGOgQ3HqKgosTEhkZMvGM9tWtYC+Q==", - "license": "Apache-2.0", - "dependencies": { - "@prisma/debug": "6.19.2", - "@prisma/engines-version": "7.1.1-3.c2990dca591cba766e3b7ef5d9e8a84796e47ab7", - "@prisma/get-platform": "6.19.2" + "node_modules/@prisma/engines-version": { + "version": "7.1.1-3.c2990dca591cba766e3b7ef5d9e8a84796e47ab7", + "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-7.1.1-3.c2990dca591cba766e3b7ef5d9e8a84796e47ab7.tgz", + "integrity": "sha512-03bgb1VD5gvuumNf+7fVGBzfpJPjmqV423l/WxsWk2cNQ42JD0/SsFBPhN6z8iAvdHs07/7ei77SKu7aZfq8bA==", + "license": "Apache-2.0" + }, + "node_modules/@prisma/fetch-engine": { + "version": "6.19.2", + "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-6.19.2.tgz", + "integrity": "sha512-h4Ff4Pho+SR1S8XerMCC12X//oY2bG3Iug/fUnudfcXEUnIeRiBdXHFdGlGOgQ3HqKgosTEhkZMvGM9tWtYC+Q==", + "license": "Apache-2.0", + "dependencies": { + "@prisma/debug": "6.19.2", + "@prisma/engines-version": "7.1.1-3.c2990dca591cba766e3b7ef5d9e8a84796e47ab7", + "@prisma/get-platform": "6.19.2" + } + }, + "node_modules/@prisma/get-platform": { + "version": "6.19.2", + "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-6.19.2.tgz", + "integrity": "sha512-PGLr06JUSTqIvztJtAzIxOwtWKtJm5WwOG6xpsgD37Rc84FpfUBGLKz65YpJBGtkRQGXTYEFie7pYALocC3MtA==", + "license": "Apache-2.0", + "dependencies": { + "@prisma/debug": "6.19.2" + } + }, + "node_modules/@puppeteer/browsers": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.13.0.tgz", + "integrity": "sha512-46BZJYJjc/WwmKjsvDFykHtXrtomsCIrwYQPOP7VfMJoZY2bsDF9oROBABR3paDjDcmkUye1Pb1BqdcdiipaWA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "debug": "^4.4.3", + "extract-zip": "^2.0.1", + "progress": "^2.0.3", + "proxy-agent": "^6.5.0", + "semver": "^7.7.4", + "tar-fs": "^3.1.1", + "yargs": "^17.7.2" + }, + "bin": { + "browsers": "lib/cjs/main-cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@puppeteer/browsers/node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", + "dev": true, + "license": "MIT" + }, + "node_modules/@schummar/icu-type-parser": { + "version": "1.21.5", + "resolved": "https://registry.npmjs.org/@schummar/icu-type-parser/-/icu-type-parser-1.21.5.tgz", + "integrity": "sha512-bXHSaW5jRTmke9Vd0h5P7BtWZG9Znqb8gSDxZnxaGSJnGwPLDPfS+3g0BKzeWqzgZPsIVZkM7m2tbo18cm5HBw==", + "license": "MIT" + }, + "node_modules/@standard-schema/spec": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", + "license": "MIT" + }, + "node_modules/@swc/core-darwin-arm64": { + "version": "1.15.41", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.15.41.tgz", + "integrity": "sha512-kREh6J5paQFvP3i7f/4FbqRNOJREutVFVOkder4GVyCBQ39YmER55cW/y1NNjwrchzFqgYswFn0mMDCqbqKzrw==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-darwin-x64": { + "version": "1.15.41", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.15.41.tgz", + "integrity": "sha512-N8B56ESFazZAWZyIkecADSPCwlLEinW7QLMEeotCpv4J7VXwfH+OLkmRL8o96UZ+1355fwHxDTS6/wK7yucvkA==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm-gnueabihf": { + "version": "1.15.41", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.15.41.tgz", + "integrity": "sha512-6XrId2fyle0mS5xxON8rU84mPd2Cq1kDJRj+4BnQKTd7u+2kSA6Ww+JkOP0iTNqOqt9OXhPOEAjBHAuonWcdCg==", + "cpu": [ + "arm" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-gnu": { + "version": "1.15.41", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.15.41.tgz", + "integrity": "sha512-ynLIarxlkVnqHn1D0fKOVht6mNU5ks6lrH+MY3kkS+XFaGGgDxFZVjWKJlkYTKm3RCvBTfA8Ng5fLufXheMRKQ==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-musl": { + "version": "1.15.41", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.15.41.tgz", + "integrity": "sha512-dXu/5vd4gh8symyhRF+4G7gOPkjmb4pONhh7sl+6GSiW0LOKZlfu5kXmyFbTz9smOT7jgr002qY9b1nujjXt2A==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-ppc64-gnu": { + "version": "1.15.41", + "resolved": "https://registry.npmjs.org/@swc/core-linux-ppc64-gnu/-/core-linux-ppc64-gnu-1.15.41.tgz", + "integrity": "sha512-XGO6zVPXoPE0gf/XnI4jBbafNT13AYgoh6ns0JCSdOetI/kqVf0vhpz7NuNgAzZrMVCsmieqjPoTwViDgh4mOQ==", + "cpu": [ + "ppc64" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-s390x-gnu": { + "version": "1.15.41", + "resolved": "https://registry.npmjs.org/@swc/core-linux-s390x-gnu/-/core-linux-s390x-gnu-1.15.41.tgz", + "integrity": "sha512-0WUglRwyZtW+iMi7J3iFdrCxreZZIKf4egTwEQfIYRsqFax69A0OrFj+NIoFSE03xBT/IFRrg+S8K6f9Ky+4hA==", + "cpu": [ + "s390x" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-gnu": { + "version": "1.15.41", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.15.41.tgz", + "integrity": "sha512-VxkuQK59c0tHm6uJZCUrS3cyA2JhGGfdU6e41SZz0x/JS+4Sm7C1mIc97In14vkZJopEt7yXA2TouCqZDSygEA==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" } }, - "node_modules/@prisma/get-platform": { - "version": "6.19.2", - "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-6.19.2.tgz", - "integrity": "sha512-PGLr06JUSTqIvztJtAzIxOwtWKtJm5WwOG6xpsgD37Rc84FpfUBGLKz65YpJBGtkRQGXTYEFie7pYALocC3MtA==", - "license": "Apache-2.0", - "dependencies": { - "@prisma/debug": "6.19.2" + "node_modules/@swc/core-linux-x64-musl": { + "version": "1.15.41", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.15.41.tgz", + "integrity": "sha512-/0qXIu1ZxggLuovLb22vFfKHq2AA4n6Whw5UwmVCHk4pkw7KWnPIQpMCEqUMPsNkFJig7PPp/TSYFu8ZEb2rtQ==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" } }, - "node_modules/@puppeteer/browsers": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.13.0.tgz", - "integrity": "sha512-46BZJYJjc/WwmKjsvDFykHtXrtomsCIrwYQPOP7VfMJoZY2bsDF9oROBABR3paDjDcmkUye1Pb1BqdcdiipaWA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "debug": "^4.4.3", - "extract-zip": "^2.0.1", - "progress": "^2.0.3", - "proxy-agent": "^6.5.0", - "semver": "^7.7.4", - "tar-fs": "^3.1.1", - "yargs": "^17.7.2" - }, - "bin": { - "browsers": "lib/cjs/main-cli.js" - }, + "node_modules/@swc/core-win32-arm64-msvc": { + "version": "1.15.41", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.15.41.tgz", + "integrity": "sha512-Y481sMNZM6rECh9VO4+y26N1lWEDAyxnBZskUf37fl90uHE946VHfmiVQWT0uMFOhyJJFovGTRuF4W82dwewUg==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=18" + "node": ">=10" } }, - "node_modules/@puppeteer/browsers/node_modules/semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, + "node_modules/@swc/core-win32-ia32-msvc": { + "version": "1.15.41", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.15.41.tgz", + "integrity": "sha512-BAchBD5qeUzy3hiPSLJtaaoSm4blCLyYffOF1bGE4ETcV+OisqjUAwDQMJj++4bTpvMCDzwC+Bj3PmQyBCtscw==", + "cpu": [ + "ia32" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "win32" + ], "engines": { "node": ">=10" } }, - "node_modules/@rtsao/scc": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", - "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", - "dev": true, - "license": "MIT" + "node_modules/@swc/core-win32-x64-msvc": { + "version": "1.15.41", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.15.41.tgz", + "integrity": "sha512-WOkA+fJ/ViVBQDsSV9JC52NACTe5PhlurA6viASDZGb7HR3KS01ZG7RZ+Bg6SVQFIoq3gSbTsskQVe6EbHFAYw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } }, - "node_modules/@standard-schema/spec": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", - "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", - "license": "MIT" + "node_modules/@swc/counter": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", + "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", + "license": "Apache-2.0" }, "node_modules/@swc/helpers": { "version": "0.5.15", @@ -1427,6 +1968,15 @@ "tslib": "^2.8.0" } }, + "node_modules/@swc/types": { + "version": "0.1.26", + "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.26.tgz", + "integrity": "sha512-lyMwd7WGgG79RS7EERZV3T8wMdmPq3xwyg+1nmAM64kIhx5yl+juO2PYIHb7vTiPgPCj8LYjsNV2T5wiQHUEaw==", + "license": "Apache-2.0", + "dependencies": { + "@swc/counter": "^0.1.3" + } + }, "node_modules/@tailwindcss/node": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.2.2.tgz", @@ -1650,6 +2200,70 @@ "node": ">=14.0.0" } }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@emnapi/core": { + "version": "1.8.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.1.0", + "tslib": "^2.4.0" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@emnapi/runtime": { + "version": "1.8.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@emnapi/wasi-threads": { + "version": "1.1.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@napi-rs/wasm-runtime": { + "version": "1.1.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.7.1", + "@emnapi/runtime": "^1.7.1", + "@tybys/wasm-util": "^0.10.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@tybys/wasm-util": { + "version": "0.10.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/tslib": { + "version": "2.8.1", + "dev": true, + "inBundle": true, + "license": "0BSD", + "optional": true + }, "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.2.2.tgz", @@ -1778,7 +2392,6 @@ "integrity": "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "csstype": "^3.2.2" } @@ -1849,7 +2462,6 @@ "integrity": "sha512-30ScMRHIAD33JJQkgfGW1t8CURZtjc2JpTrq5n2HFhOefbAhb7ucc7xJwdWcrEtqUIYJ73Nybpsggii6GtAHjA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.57.2", "@typescript-eslint/types": "8.57.2", @@ -2375,7 +2987,6 @@ "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", "dev": true, "license": "MIT", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -2883,7 +3494,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", @@ -3372,7 +3982,6 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", - "devOptional": true, "license": "Apache-2.0", "engines": { "node": ">=8" @@ -3383,8 +3992,7 @@ "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1581282.tgz", "integrity": "sha512-nv7iKtNZQshSW2hKzYNr46nM/Cfh5SEvE2oV0/SEGgc9XupIY5ggf84Cz8eJIkBce7S3bmTAauFD6aysMpnqsQ==", "dev": true, - "license": "BSD-3-Clause", - "peer": true + "license": "BSD-3-Clause" }, "node_modules/doctrine": { "version": "2.1.0", @@ -3721,7 +4329,6 @@ "integrity": "sha512-XoMjdBOwe/esVgEvLmNsD3IRHkm7fbKIUGvrleloJXUZgDHig2IPWNniv+GwjyJXzuNqVjlr5+4yVUZjycJwfQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -3907,7 +4514,6 @@ "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@rtsao/scc": "^1.1.0", "array-includes": "^3.1.9", @@ -4769,6 +5375,21 @@ "node": ">= 14" } }, + "node_modules/icu-minify": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/icu-minify/-/icu-minify-4.13.0.tgz", + "integrity": "sha512-SIFMeUHZJjzS5RvIGvybKvWoHjDm9cGVEs2EpJ8PmywOdJLWyblPm7TdPLLoUtkJtwQD7iGhl2WMptZ+N0on+w==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/amannn" + } + ], + "license": "MIT", + "dependencies": { + "@formatjs/icu-messageformat-parser": "^3.4.0" + } + }, "node_modules/ignore": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", @@ -4821,6 +5442,16 @@ "node": ">= 0.4" } }, + "node_modules/intl-messageformat": { + "version": "11.2.8", + "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-11.2.8.tgz", + "integrity": "sha512-l323RCl3qJDVQ8U9j74ut/hVMdg3VPsOHpVMDvFfz9qiq4dPO5ooVYFNVUzzrpgG39a+RLzcXyJb8VFgIU+tUA==", + "license": "BSD-3-Clause", + "dependencies": { + "@formatjs/fast-memoize": "3.1.6", + "@formatjs/icu-messageformat-parser": "3.5.11" + } + }, "node_modules/ip-address": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.1.0.tgz", @@ -4993,7 +5624,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -5049,7 +5679,6 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" @@ -5967,6 +6596,15 @@ "dev": true, "license": "MIT" }, + "node_modules/negotiator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/netmask": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", @@ -6086,6 +6724,94 @@ } } }, + "node_modules/next-intl": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/next-intl/-/next-intl-4.13.0.tgz", + "integrity": "sha512-OvNq2v5XLx4EkQOsAhVE9g+6zdb83XHusADCXXtIW4LILYnjEVaeINdr1lkVWKSjzwNUiMSlH5N4K0OQTRiv6A==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/amannn" + } + ], + "license": "MIT", + "dependencies": { + "@formatjs/intl-localematcher": "^0.8.1", + "@parcel/watcher": "^2.4.1", + "@swc/core": "^1.15.2", + "icu-minify": "^4.13.0", + "negotiator": "^1.0.0", + "next-intl-swc-plugin-extractor": "^4.13.0", + "po-parser": "^2.1.1", + "use-intl": "^4.13.0" + }, + "peerDependencies": { + "next": "^12.0.0 || ^13.0.0 || ^14.0.0 || ^15.0.0 || ^16.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || >=19.0.0-rc <19.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/next-intl-swc-plugin-extractor": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/next-intl-swc-plugin-extractor/-/next-intl-swc-plugin-extractor-4.13.0.tgz", + "integrity": "sha512-6S/fJI0KXvLCL8nhBo9P8eGaJPzmwJBTCzX0NaUIj0VyU8U89d//T+vjMLdNIXl5MlLaYH7B9MbAjb8Mvu+tqQ==", + "license": "MIT" + }, + "node_modules/next-intl/node_modules/@swc/core": { + "version": "1.15.41", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.15.41.tgz", + "integrity": "sha512-03nQq/082QRJJiOvp3FGbgxTGyyxMxohPTjhk/W9bD2J0tk4ukITI7goOhOO2WbaHn/lsPmo/zf8+DIXhwpgYQ==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@swc/counter": "^0.1.3", + "@swc/types": "^0.1.26" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/swc" + }, + "optionalDependencies": { + "@swc/core-darwin-arm64": "1.15.41", + "@swc/core-darwin-x64": "1.15.41", + "@swc/core-linux-arm-gnueabihf": "1.15.41", + "@swc/core-linux-arm64-gnu": "1.15.41", + "@swc/core-linux-arm64-musl": "1.15.41", + "@swc/core-linux-ppc64-gnu": "1.15.41", + "@swc/core-linux-s390x-gnu": "1.15.41", + "@swc/core-linux-x64-gnu": "1.15.41", + "@swc/core-linux-x64-musl": "1.15.41", + "@swc/core-win32-arm64-msvc": "1.15.41", + "@swc/core-win32-ia32-msvc": "1.15.41", + "@swc/core-win32-x64-msvc": "1.15.41" + }, + "peerDependencies": { + "@swc/helpers": ">=0.5.17" + }, + "peerDependenciesMeta": { + "@swc/helpers": { + "optional": true + } + } + }, + "node_modules/next-intl/node_modules/@swc/helpers": { + "version": "0.5.23", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.23.tgz", + "integrity": "sha512-5lSsMOTXURePglDfvuAQUqkGek9Hg2kksOYay2m0+XR++b2NWYL/4sWyuvVBIs8oKnJaxkdi9whaL/sqN13afw==", + "license": "Apache-2.0", + "optional": true, + "peer": true, + "dependencies": { + "tslib": "^2.8.0" + } + }, "node_modules/next/node_modules/postcss": { "version": "8.4.31", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", @@ -6114,6 +6840,12 @@ "node": "^10 || ^12 || >=14" } }, + "node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "license": "MIT" + }, "node_modules/node-exports-info": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/node-exports-info/-/node-exports-info-1.6.0.tgz", @@ -6508,6 +7240,12 @@ "pathe": "^2.0.3" } }, + "node_modules/po-parser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/po-parser/-/po-parser-2.1.1.tgz", + "integrity": "sha512-ECF4zHLbUItpUgE3OTtLKlPjeBN+fKEczj2zYjDfCGOzicNs0GK3Vg2IoAYwx7LH/XYw43fZQP6xnZ4TkNxSLQ==", + "license": "MIT" + }, "node_modules/possible-typed-array-names": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", @@ -6552,7 +7290,6 @@ "resolved": "https://registry.npmjs.org/preact/-/preact-10.24.3.tgz", "integrity": "sha512-Z2dPnBnMUfyQfSQ+GBdsGa16hz35YmLmtTLhM169uW944hYL6xzTYkJjC07j+Wosz733pMWx0fgON3JNw1jJQA==", "license": "MIT", - "peer": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/preact" @@ -6583,7 +7320,6 @@ "integrity": "sha512-XTKeKxtQElcq3U9/jHyxSPgiRgeYDKxWTPOf6NkXA0dNj5j40MfEsZkMbyNpwDWCUv7YBFUl7I2VK/6ALbmhEg==", "hasInstallScript": true, "license": "Apache-2.0", - "peer": true, "dependencies": { "@prisma/config": "6.19.2", "@prisma/engines": "6.19.2" @@ -6754,7 +7490,6 @@ "resolved": "https://registry.npmjs.org/react/-/react-19.2.4.tgz", "integrity": "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==", "license": "MIT", - "peer": true, "engines": { "node": ">=0.10.0" } @@ -6764,7 +7499,6 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.4.tgz", "integrity": "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==", "license": "MIT", - "peer": true, "dependencies": { "scheduler": "^0.27.0" }, @@ -7662,7 +8396,6 @@ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -7832,7 +8565,6 @@ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "devOptional": true, "license": "Apache-2.0", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -7967,6 +8699,27 @@ "punycode": "^2.1.0" } }, + "node_modules/use-intl": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/use-intl/-/use-intl-4.13.0.tgz", + "integrity": "sha512-fAFDrWaASxlhXOipcOyb5VDD+YONqj6+8O8EcG/J7RBoOUF3A8YahRWLN+mBxYMrlMQB8N6Voqk5X+YC+HSL0A==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/amannn" + } + ], + "license": "MIT", + "dependencies": { + "@formatjs/fast-memoize": "^3.1.0", + "@schummar/icu-type-parser": "1.21.5", + "icu-minify": "^4.13.0", + "intl-messageformat": "^11.1.0" + }, + "peerDependencies": { + "react": "^17.0.0 || ^18.0.0 || >=19.0.0-rc <19.0.0 || ^19.0.0" + } + }, "node_modules/webdriver-bidi-protocol": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/webdriver-bidi-protocol/-/webdriver-bidi-protocol-0.4.1.tgz", @@ -8210,9 +8963,7 @@ "version": "4.3.6", "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.6.tgz", "integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==", - "dev": true, "license": "MIT", - "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/package.json b/package.json index a9214a59a..6910add59 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,8 @@ "dev": "next dev", "build": "next build", "start": "next start", - "lint": "eslint" + "lint": "eslint", + "check:i18n": "node scripts/check-i18n.mjs" }, "dependencies": { "@auth/prisma-adapter": "^2.11.1", @@ -18,6 +19,7 @@ "lucide-react": "^1.7.0", "next": "16.2.1", "next-auth": "^5.0.0-beta.30", + "next-intl": "^4.13.0", "prisma": "^6.19.2", "react": "19.2.4", "react-dom": "19.2.4", diff --git a/scripts/check-i18n.mjs b/scripts/check-i18n.mjs new file mode 100644 index 000000000..40a80903a --- /dev/null +++ b/scripts/check-i18n.mjs @@ -0,0 +1,81 @@ +#!/usr/bin/env node +// Guards i18n message catalogs: every messages/.json must have exactly +// the same flattened keys as the source (messages/en.json), and every value +// must be valid ICU. Run with: npm run check:i18n (also used in CI). +import fs from "node:fs"; +import path from "node:path"; + +const DIR = "messages"; +const SOURCE = "en"; + +const flat = (o) => { + const r = {}; + for (const ns of Object.keys(o)) for (const k of Object.keys(o[ns])) r[`${ns}.${k}`] = o[ns][k]; + return r; +}; + +const en = JSON.parse(fs.readFileSync(path.join(DIR, `${SOURCE}.json`), "utf8")); +const enF = flat(en); +const enKeys = new Set(Object.keys(enF)); + +// ICU validation is optional — only runs if the parser (a next-intl dep) is +// resolvable, so the script also works in a bare checkout. +let parse = null; +try { + ({ parse } = await import("@formatjs/icu-messageformat-parser")); +} catch { + console.warn("note: @formatjs/icu-messageformat-parser not found — skipping ICU validation (key parity only)"); +} +// Keys whose English value itself isn't strict-ICU (e.g. a literal "" +// rendered as plain text, not via t.rich) — skip ICU validation for these. +const enParses = new Set(); +if (parse) { + for (const [k, v] of Object.entries(enF)) { + try { parse(String(v)); enParses.add(k); } catch { /* literal-tag edge case */ } + } +} + +const locales = fs + .readdirSync(DIR) + .filter((f) => f.endsWith(".json") && f !== `${SOURCE}.json`) + .map((f) => f.replace(".json", "")) + .sort(); + +let problems = 0; +for (const loc of locales) { + let obj; + try { + obj = JSON.parse(fs.readFileSync(path.join(DIR, `${loc}.json`), "utf8")); + } catch (e) { + console.error(`✗ ${loc}: invalid JSON — ${e.message}`); + problems++; + continue; + } + const f = flat(obj); + const keys = new Set(Object.keys(f)); + const missing = [...enKeys].filter((k) => !keys.has(k)); + const extra = [...keys].filter((k) => !enKeys.has(k)); + let icuErrors = 0; + if (parse) { + for (const k of keys) { + if (!enParses.has(k)) continue; + try { parse(String(f[k])); } catch { icuErrors++; if (icuErrors <= 3) console.error(` ↳ invalid ICU: ${k}`); } + } + } + if (missing.length || extra.length || icuErrors) { + console.error( + `✗ ${loc}: ${missing.length} missing, ${extra.length} extra, ${icuErrors} ICU error(s)` + + (missing.length ? ` (e.g. ${missing.slice(0, 3).join(", ")})` : "") + + (extra.length ? ` (extra e.g. ${extra.slice(0, 3).join(", ")})` : ""), + ); + problems++; + } else { + console.log(`✓ ${loc}: ${keys.size} keys${parse ? ", ICU valid" : ""}`); + } +} + +if (problems) { + console.error(`\n${problems} locale(s) drifted from ${SOURCE}.json — fix before merging.`); + process.exit(1); +} +console.log(`\nAll ${locales.length} locales match ${SOURCE}.json (${enKeys.size} keys) ✓`); diff --git a/src/app/admin/agents/page.tsx b/src/app/[locale]/admin/agents/page.tsx similarity index 81% rename from src/app/admin/agents/page.tsx rename to src/app/[locale]/admin/agents/page.tsx index 982afee7f..d63adf4e9 100644 --- a/src/app/admin/agents/page.tsx +++ b/src/app/[locale]/admin/agents/page.tsx @@ -2,6 +2,7 @@ import { useCallback, useEffect, useState } from "react"; import { Check, X, Star, Trash2, ExternalLink, Tag } from "lucide-react"; +import { useTranslations } from "next-intl"; import { SCENARIOS, findScenario } from "@/lib/scenarios"; type AgentRow = { @@ -19,7 +20,20 @@ type AgentRow = { _count: { skills: number }; }; -const FILTERS = ["PENDING", "APPROVED", "REJECTED", "ALL"]; +const FILTERS = ["PENDING", "APPROVED", "REJECTED", "ALL"] as const; + +const FILTER_LABEL_KEY: Record<(typeof FILTERS)[number], "filterPending" | "filterApproved" | "filterRejected" | "filterAll"> = { + PENDING: "filterPending", + APPROVED: "filterApproved", + REJECTED: "filterRejected", + ALL: "filterAll", +}; + +const STATUS_LABEL_KEY: Record = { + PENDING: "filterPending", + APPROVED: "filterApproved", + REJECTED: "filterRejected", +}; const statusBadge: Record = { PENDING: "bg-amber-50 text-amber-700", @@ -35,6 +49,7 @@ export default function AdminAgentsPage() { const [busy, setBusy] = useState(null); const [editingId, setEditingId] = useState(null); const [draft, setDraft] = useState([]); + const t = useTranslations("Admin"); const load = useCallback(async () => { setLoading(true); @@ -72,12 +87,12 @@ export default function AdminAgentsPage() { }; const reject = async (id: string) => { - const note = prompt("Reason for rejection (optional):") ?? undefined; + const note = prompt(t("rejectReasonPrompt")) ?? undefined; await patch(id, { status: "REJECTED", reviewNote: note }); }; const remove = async (id: string) => { - if (!confirm("Permanently delete this agent?")) return; + if (!confirm(t("deleteAgentConfirm"))) return; setBusy(id); await fetch(`/api/admin/agents/${id}`, { method: "DELETE" }); await load(); @@ -87,8 +102,8 @@ export default function AdminAgentsPage() { return (
-

Agents

-

Review and moderate submitted agents.

+

{t("agentsTitle")}

+

{t("agentsSubtitle")}

@@ -100,15 +115,15 @@ export default function AdminAgentsPage() { filter === f ? "bg-purple-600 text-white" : "bg-white text-gray-600 border border-gray-200 hover:border-purple-300" }`} > - {f.charAt(0) + f.slice(1).toLowerCase()} + {t(FILTER_LABEL_KEY[f])} ))}
{loading ? ( -

Loading…

+

{t("loading")}

) : agents.length === 0 ? ( -

No agents in this view.

+

{t("noAgentsInView")}

) : (
{agents.map((a) => ( @@ -119,12 +134,12 @@ export default function AdminAgentsPage() { {a.name} {a.featured && } - {a.status} + {STATUS_LABEL_KEY[a.status] ? t(STATUS_LABEL_KEY[a.status]) : a.status}

- {a.publisher?.email || a.publisher?.name || "unknown"} · {a.category?.name || "uncategorized"} ·{" "} - {a._count.skills} skills · {a.pricingModel} · {a.endpointUrl} + {a.publisher?.email || a.publisher?.name || t("unknownPublisher")} · {a.category?.name || t("uncategorized")} ·{" "} + {t("agentMetaSkills", { count: a._count.skills })} · {a.pricingModel} · {a.endpointUrl}

{a.scenarios.length > 0 ? (
@@ -143,9 +158,9 @@ export default function AdminAgentsPage() { })}
) : ( -

no scenarios

+

{t("noScenarios")}

)} - {a.reviewNote &&

Note: {a.reviewNote}

} + {a.reviewNote &&

{t("reviewNoteLabel", { note: a.reviewNote })}

}
@@ -163,7 +178,7 @@ export default function AdminAgentsPage() { className={`p-1.5 rounded-lg disabled:opacity-50 ${ editingId === a.id ? "bg-purple-100 text-purple-600" : "text-gray-400 hover:bg-gray-100" }`} - title="Edit scenarios" + title={t("editScenarios")} > @@ -173,7 +188,7 @@ export default function AdminAgentsPage() { disabled={busy === a.id} className="inline-flex items-center gap-1 px-2.5 py-1.5 rounded-lg text-xs font-medium bg-green-50 text-green-700 hover:bg-green-100 disabled:opacity-50" > - Approve + {t("actionApprove")} )} {a.status !== "REJECTED" && ( @@ -182,14 +197,14 @@ export default function AdminAgentsPage() { disabled={busy === a.id} className="inline-flex items-center gap-1 px-2.5 py-1.5 rounded-lg text-xs font-medium bg-red-50 text-red-600 hover:bg-red-100 disabled:opacity-50" > - Reject + {t("actionReject")} )} @@ -197,7 +212,7 @@ export default function AdminAgentsPage() { onClick={() => remove(a.id)} disabled={busy === a.id} className="p-1.5 rounded-lg text-gray-400 hover:bg-red-50 hover:text-red-500 disabled:opacity-50" - title="Delete" + title={t("delete")} > @@ -206,7 +221,7 @@ export default function AdminAgentsPage() { {editingId === a.id && (
-

场景 Scenarios — 点击切换 / toggle to assign

+

{t("scenariosEditorHint")}

{SCENARIOS.map((s) => { const on = draft.includes(s.slug); @@ -221,7 +236,7 @@ export default function AdminAgentsPage() { }`} > {s.emoji} - {s.nameZh} · {s.name} + {t("scenarioOption", { nameZh: s.nameZh, name: s.name })} ); })} @@ -232,16 +247,16 @@ export default function AdminAgentsPage() { disabled={busy === a.id} className="inline-flex items-center gap-1 px-3 py-1.5 rounded-lg text-xs font-medium bg-purple-600 text-white hover:bg-purple-700 disabled:opacity-50" > - Save + {t("save")} - {draft.length} selected + {t("selectedCount", { count: draft.length })}
)} diff --git a/src/app/admin/categories/page.tsx b/src/app/[locale]/admin/categories/page.tsx similarity index 86% rename from src/app/admin/categories/page.tsx rename to src/app/[locale]/admin/categories/page.tsx index ec1301361..3e394d3dc 100644 --- a/src/app/admin/categories/page.tsx +++ b/src/app/[locale]/admin/categories/page.tsx @@ -1,6 +1,7 @@ "use client"; import { useEffect, useState, useCallback } from "react"; +import { useTranslations } from "next-intl"; import { FolderTree, Plus, @@ -26,6 +27,7 @@ interface Category { type SortDir = "asc" | "desc"; export default function AdminCategoriesPage() { + const t = useTranslations("Admin"); const [categories, setCategories] = useState([]); const [loading, setLoading] = useState(true); const [sortDir, setSortDir] = useState("desc"); @@ -92,7 +94,7 @@ export default function AdminCategoriesPage() { async function handleSave() { const name = formName.trim(); if (!name) { - setFormError("Name is required."); + setFormError(t("nameRequired")); return; } @@ -117,13 +119,13 @@ export default function AdminCategoriesPage() { if (!res.ok) { const err = await res.json().catch(() => null); - throw new Error(err?.error ?? "Failed to save category"); + throw new Error(err?.error ?? t("saveCategoryFailed")); } resetForm(); await fetchCategories(); } catch (e: unknown) { - setFormError(e instanceof Error ? e.message : "Something went wrong"); + setFormError(e instanceof Error ? e.message : t("somethingWentWrong")); } finally { setSaving(false); } @@ -137,12 +139,12 @@ export default function AdminCategoriesPage() { }); if (!res.ok) { const err = await res.json().catch(() => null); - throw new Error(err?.error ?? "Failed to delete category"); + throw new Error(err?.error ?? t("deleteCategoryFailed")); } setDeleteConfirmId(null); await fetchCategories(); } catch (e: unknown) { - alert(e instanceof Error ? e.message : "Delete failed"); + alert(e instanceof Error ? e.message : t("deleteFailed")); } finally { setDeleting(false); } @@ -163,14 +165,14 @@ export default function AdminCategoriesPage() {

- Categories + {t("categoriesTitle")}

@@ -179,7 +181,7 @@ export default function AdminCategoriesPage() {

- {editingId ? "Edit Category" : "New Category"} + {editingId ? t("editCategoryTitle") : t("newCategoryTitle")}

@@ -262,9 +264,9 @@ export default function AdminCategoriesPage() {
- - - + + + - - + + @@ -287,7 +289,7 @@ export default function AdminCategoriesPage() { colSpan={5} className="px-5 py-10 text-center text-gray-400" > - No categories found. Add one above. + {t("noCategoriesFound")} )} @@ -314,12 +316,12 @@ export default function AdminCategoriesPage() { -
NameSlug
{t("colName")}{t("colSlug")} @@ -272,12 +274,12 @@ export default function AdminCategoriesPage() { } > - Skills + {t("colSkills")} DescriptionActions{t("colDescription")}{t("colActions")}
{cat.description ?? "—"} +
@@ -331,13 +333,13 @@ export default function AdminCategoriesPage() { disabled={deleting} className="px-2 py-1 rounded bg-red-600 text-white hover:bg-red-700 transition-colors disabled:opacity-50" > - {deleting ? "..." : "Confirm"} + {deleting ? t("deleting") : t("confirm")} ) : ( @@ -347,8 +349,8 @@ export default function AdminCategoriesPage() { className="p-1.5 rounded-lg text-gray-400 hover:text-red-600 hover:bg-red-50 transition-colors disabled:opacity-30 disabled:cursor-not-allowed" title={ count > 0 - ? "Cannot delete: has skills" - : "Delete" + ? t("cannotDeleteHasSkills") + : t("delete") } > @@ -364,8 +366,8 @@ export default function AdminCategoriesPage() {
{/* Summary */} -

- {categories.length} {categories.length === 1 ? "category" : "categories"} total +

+ {t("categoriesTotal", { count: categories.length })}

); diff --git a/src/app/admin/layout.tsx b/src/app/[locale]/admin/layout.tsx similarity index 72% rename from src/app/admin/layout.tsx rename to src/app/[locale]/admin/layout.tsx index 2462e8d2a..62b49f840 100644 --- a/src/app/admin/layout.tsx +++ b/src/app/[locale]/admin/layout.tsx @@ -1,23 +1,24 @@ "use client"; import { useSession } from "next-auth/react"; -import Link from "next/link"; -import { usePathname, useRouter } from "next/navigation"; +import { useTranslations } from "next-intl"; +import { Link, usePathname, useRouter } from "@/i18n/navigation"; import { LayoutDashboard, Package, Bot, FolderTree, Users, ScrollText, ArrowLeft } from "lucide-react"; const NAV_ITEMS = [ - { href: "/admin", label: "Dashboard", icon: LayoutDashboard }, - { href: "/admin/skills", label: "Skills", icon: Package }, - { href: "/admin/agents", label: "Agents", icon: Bot }, - { href: "/admin/categories", label: "Categories", icon: FolderTree }, - { href: "/admin/users", label: "Users", icon: Users }, - { href: "/admin/logs", label: "Logs", icon: ScrollText }, -]; + { href: "/admin", labelKey: "navDashboard", icon: LayoutDashboard }, + { href: "/admin/skills", labelKey: "navSkills", icon: Package }, + { href: "/admin/agents", labelKey: "navAgents", icon: Bot }, + { href: "/admin/categories", labelKey: "navCategories", icon: FolderTree }, + { href: "/admin/users", labelKey: "navUsers", icon: Users }, + { href: "/admin/logs", labelKey: "navLogs", icon: ScrollText }, +] as const; export default function AdminLayout({ children }: { children: React.ReactNode }) { const { data: session, status } = useSession(); const pathname = usePathname(); const router = useRouter(); + const t = useTranslations("Admin"); if (status === "loading") { return ( @@ -31,13 +32,13 @@ export default function AdminLayout({ children }: { children: React.ReactNode }) if (!session || role !== "admin") { return (
-

Access Denied

-

You need admin privileges to access this page.

+

{t("accessDenied")}

+

{t("accessDeniedDescription")}

); @@ -50,9 +51,9 @@ export default function AdminLayout({ children }: { children: React.ReactNode })
- Back to site + {t("backToSite")} -

Admin Panel

+

{t("panelTitle")}