diff --git a/packages/stats/app/src/app.tsx b/packages/stats/app/src/app.tsx index 18c0cfe50097..a4627b327804 100644 --- a/packages/stats/app/src/app.tsx +++ b/packages/stats/app/src/app.tsx @@ -2,21 +2,17 @@ import { MetaProvider, Meta, Title } from "@solidjs/meta" import { Router } from "@solidjs/router" import { FileRoutes } from "@solidjs/start/router" import { Suspense } from "solid-js" +import { I18nProvider, useI18n } from "./context/i18n" +import { LanguageProvider } from "./context/language" +import { strip } from "./lib/language" import "./app.css" -function stripLocaleDataPrefix(pathname: string) { - const value = pathname.startsWith("/") ? pathname : `/${pathname}` - return value.replace(/^\/[^/]+(?=\/data(?:\/|$))/, "") -} - function AppMeta() { + const i18n = useI18n() return ( <> - AI Model Usage Rankings | OpenCode Data - + {i18n.t("app.title")} + ) } @@ -26,12 +22,16 @@ export default function App() { ( - - - {props.children} - + + + + + {props.children} + + + )} > diff --git a/packages/stats/app/src/component/locale-links.tsx b/packages/stats/app/src/component/locale-links.tsx new file mode 100644 index 000000000000..1f06def29ffb --- /dev/null +++ b/packages/stats/app/src/component/locale-links.tsx @@ -0,0 +1,17 @@ +import { For } from "solid-js" +import { Link } from "@solidjs/meta" +import { LOCALES, localizedUrl, tag } from "../lib/language" +import { useLanguage } from "../context/language" + +export function LocaleLinks(props: { path: string }) { + const language = useLanguage() + return ( + <> + + + {(locale) => } + + + + ) +} diff --git a/packages/stats/app/src/context/i18n.tsx b/packages/stats/app/src/context/i18n.tsx new file mode 100644 index 000000000000..e844bf987add --- /dev/null +++ b/packages/stats/app/src/context/i18n.tsx @@ -0,0 +1,27 @@ +import { createMemo } from "solid-js" +import { createSimpleContext } from "@opencode-ai/ui/context" +import { dict, type Key } from "../i18n" +import { useLanguage } from "./language" + +function resolve(text: string, params?: Record) { + if (!params) return text + return text.replace(/\{\{(\w+)\}\}/g, (raw, key) => { + const value = params[key] + if (value === undefined || value === null) return raw + return String(value) + }) +} + +export const { use: useI18n, provider: I18nProvider } = createSimpleContext({ + name: "StatsI18n", + init: () => { + const language = useLanguage() + const dictionary = createMemo(() => dict(language.locale())) + + return { + t(key: Key, params?: Record) { + return resolve(dictionary()[key], params) + }, + } + }, +}) diff --git a/packages/stats/app/src/context/language.tsx b/packages/stats/app/src/context/language.tsx new file mode 100644 index 000000000000..c3f6d5ce10f4 --- /dev/null +++ b/packages/stats/app/src/context/language.tsx @@ -0,0 +1,61 @@ +import { createEffect } from "solid-js" +import { getRequestEvent } from "solid-js/web" +import { createStore } from "solid-js/store" +import { createSimpleContext } from "@opencode-ai/ui/context" +import { + LOCALES, + detectFromLanguages, + dir, + label, + localeFromCookieHeader, + localeFromRequest, + parseLocale, + route, + tag, + type Locale, +} from "../lib/language" + +function initial() { + const event = getRequestEvent() + if (event) return localeFromRequest(event.request) + + if (typeof document === "object") { + const fromDom = parseLocale(document.documentElement.dataset.locale) + if (fromDom) return fromDom + const fromCookie = localeFromCookieHeader(document.cookie) + if (fromCookie) return fromCookie + } + + if (typeof navigator !== "object") return "en" satisfies Locale + const languages = navigator.languages?.length ? navigator.languages : [navigator.language] + return detectFromLanguages(languages) +} + +export const { use: useLanguage, provider: LanguageProvider } = createSimpleContext({ + name: "StatsLanguage", + init: () => { + const [store, setStore] = createStore({ + locale: initial(), + }) + + createEffect(() => { + document.documentElement.lang = tag(store.locale) + document.documentElement.dir = dir(store.locale) + document.documentElement.dataset.locale = store.locale + }) + + return { + locale: () => store.locale, + locales: LOCALES, + label, + tag, + dir, + route(pathname: string) { + return route(store.locale, pathname) + }, + setLocale(next: Locale) { + setStore("locale", next) + }, + } + }, +}) diff --git a/packages/stats/app/src/entry-server.tsx b/packages/stats/app/src/entry-server.tsx index f1e054cfa0b3..3cec2cba04dd 100644 --- a/packages/stats/app/src/entry-server.tsx +++ b/packages/stats/app/src/entry-server.tsx @@ -1,5 +1,7 @@ // @refresh reload import { createHandler, StartServer } from "@solidjs/start/server" +import { getRequestEvent } from "solid-js/web" +import { dir, localeFromRequest, tag } from "./lib/language" const statsThemePreloadScript = `;(function () { var preference = "system" @@ -15,20 +17,25 @@ const statsThemePreloadScript = `;(function () { export default createHandler( () => ( ( - - - - - - {assets} - - -
{children}
- {scripts} - - - )} + document={({ assets, children, scripts }) => { + const event = getRequestEvent() + const locale = event ? localeFromRequest(event.request) : "en" + + return ( + + + + + + {assets} + + +
{children}
+ {scripts} + + + ) + }} /> ), { diff --git a/packages/stats/app/src/i18n.ts b/packages/stats/app/src/i18n.ts new file mode 100644 index 000000000000..18a00227dfd7 --- /dev/null +++ b/packages/stats/app/src/i18n.ts @@ -0,0 +1,274 @@ +import { type Locale } from "./lib/language" +import { dict as ar } from "./i18n/ar" +import { dict as br } from "./i18n/br" +import { dict as da } from "./i18n/da" +import { dict as de } from "./i18n/de" +import { dict as es } from "./i18n/es" +import { dict as fr } from "./i18n/fr" +import { dict as it } from "./i18n/it" +import { dict as ja } from "./i18n/ja" +import { dict as ko } from "./i18n/ko" +import { dict as no } from "./i18n/no" +import { dict as pl } from "./i18n/pl" +import { dict as ru } from "./i18n/ru" +import { dict as th } from "./i18n/th" +import { dict as tr } from "./i18n/tr" +import { dict as uk } from "./i18n/uk" +import { dict as zh } from "./i18n/zh" +import { dict as zht } from "./i18n/zht" + +const en = { + "app.title": "AI Model Usage Rankings | OpenCode Data", + "app.description": + "Explore OpenCode Go usage across AI models, including token volume, rankings, market share, token pricing, session cost, cache ratio, and geo breakdowns.", + "app.unfurlAlt": "OpenCode Data wordmark on a dark patterned background", + "nav.dataHome": "Data Home", + "nav.topModels": "Top Models", + "nav.leaderboard": "Leaderboard", + "nav.uniqueUsers": "Unique Users", + "nav.sessionCost": "Session Cost", + "nav.tokenCost": "Token Cost", + "nav.cacheRatio": "Cache Ratio", + "nav.marketShare": "Market Share", + "nav.geoBreakdown": "Geo Breakdown", + "nav.overview": "Overview", + "nav.usage": "Usage", + "nav.users": "Users", + "nav.efficiency": "Efficiency", + "nav.peers": "Peers", + "nav.models": "Models", + "header.brandLabel": "Data home", + "header.sectionNavLabel": "Data sections", + "header.githubAria": "Star OpenCode on GitHub", + "header.github": "GitHub", + "header.tryOpenCode": "Try OpenCode", + "header.openNav": "Open navigation", + "header.closeNav": "Close navigation", + "theme.groupLabel": "Theme", + "theme.dark": "Dark", + "theme.light": "Light", + "theme.system": "System", + "footer.modelData": "Model Data", + "footer.legal": "Legal", + "footer.connect": "Connect", + "footer.newsletter": "Newsletter", + "footer.newsletterBody": "Be the first to know about new releases.", + "footer.language": "Language", + "footer.subscribe": "Subscribe", + "footer.terms": "Terms of service", + "footer.privacy": "Privacy policy", + "footer.contact": "Contact us", + "footer.community": "Community", + "footer.youtube": "YouTube", + "footer.homeAria": "OpenCode home", + "footer.status": "All systems Operational", + "footer.copyright": "© 2026 Anomaly Innovations Inc.", + "bridge.learnMore": "LEARN MORE", + "modal.closeNewsletter": "Close newsletter signup", + "modal.title": "OpenCode Newsletter", + "modal.body": "Be the first to know\nabout new releases.", + "modal.email": "Email address", + "modal.subscribe": "Subscribe", + "modal.subscribing": "Subscribing...", + "modal.success": "You're subscribed.", + "modal.error": "Failed to subscribe", + "product.allUsers": "All Users", + "product.zen": "Zen", + "product.go": "Go", + "range.1D": "1 Day", + "range.1W": "1 Week", + "range.2W": "2 Weeks", + "range.1M": "1 Month", + "range.2M": "2 Months", + "chart.daily": "Daily", + "chart.input": "Input", + "chart.output": "Output", + "chart.cached": "Cached", + "chart.uncached": "Uncached", + "chart.ratio": "Ratio", + "chart.model": "Model", + "chart.cacheRatio": "Cache Ratio", + "chart.costSession": "Cost/Session", + "chart.tokensSession": "Tokens/Session", + "chart.costPerSession": "COST / SESSION", + "chart.tokensPerSession": "TOKENS / SESSION", + "chart.live": "Live", + "chart.percent": "percent", + "chart.leaderboardAria": "Model token leaderboard", + "chart.scrollableLeaderboardAria": "Scrollable model token leaderboard", + "chart.byAuthor": "by {{author}}", + "home.updated": "Updated", + "home.noRows": "No rows yet", + "home.justNow": "just now", + "home.heroCopy": "See which models are winning real usage, how the mix is shifting, and what that means for cost.", + "home.loadingTitle": "Loading data", + "home.loadingDescription": "Reading model aggregates.", + "home.usageTitle": "Usage", + "home.topModelsDescription": "Usage of models across OpenCode Go.", + "home.noUsageTitle": "No usage data", + "home.noUsageDescription": "No model rows matched this product and range.", + "home.noLeaderboardTitle": "No leaderboard data", + "home.noLeaderboardDescription": "No model rows matched this product and range.", + "home.productFilter": "Product filter", + "home.dateRange": "Date range", + "home.stackedUsageChart": "Stacked top model usage chart", + "home.total": "total", + "home.modelUsers": "model users", + "home.new": "New", + "home.uniqueUsersTitle": "Unique Users", + "home.uniqueUsersDescription": "Daily unique OpenCode Go users by model.", + "home.noUserDataTitle": "No user data", + "home.noUserDataDescription": "No user-bearing model rows matched this window.", + "home.uniqueUsersChart": "Stacked unique user chart by model", + "home.marketShareTitle": "Market Share", + "home.marketShareDescription": "Compare token share by model author.", + "home.noMarketTitle": "No market data", + "home.noMarketDescription": "No model rows matched this range.", + "home.marketChart": "Market share by model author", + "home.noData": "No data", + "home.geoTitle": "Geo Breakdown", + "home.geoDescription": "Tokens used by country.", + "home.noGeoTitle": "No geo data", + "home.noGeoDescription": "No geo rows matched this range.", + "home.worldMap": "World map of token usage by country", + "home.geoMapTitle": "Geo Breakdown map", + "home.unknown": "Unknown", + "home.tokenCostTitle": "Token Cost", + "home.tokenCostDescription": "Price per 1M tokens.", + "home.noTokenCostTitle": "No token cost data", + "home.noTokenCostDescription": "No cost-bearing model rows matched this product.", + "home.cacheRatioTitle": "Cache Ratio", + "home.cacheRatioDescription": "Share of input tokens served from cache.", + "home.noCacheTitle": "No cache ratio data", + "home.noCacheDescription": "No input-token model rows matched this product.", + "home.sessionCostTitle": "Session Cost", + "home.sessionCostDescription": "Average cost per session.", + "home.noSessionCostTitle": "No session cost data", + "home.noSessionCostDescription": "No session-bearing model rows matched this product.", + "home.costSession": "Cost/Session", + "lab.title": "{{lab}} AI Model Usage & Rankings | OpenCode Data", + "lab.description": + "Compare {{lab}} models used in OpenCode Go, including token usage, model rankings, context windows, release dates, costs, and model-specific data.", + "lab.loadingTitle": "Model Lab", + "lab.loadingDescription": "Reading model availability and recent OpenCode usage.", + "lab.notFound": "No models matched this lab.", + "lab.heroPrefix": "Explore {{count}} {{lab}} models used in OpenCode", + "lab.heroIncluding": "including {{models}}", + "lab.heroSuffix": "Compare recent token usage, context windows, release dates, and model-specific data.", + "lab.tokensProcessed": "Tokens Processed", + "lab.pending": "Pending", + "lab.usageAfterActivity": "Usage appears after model activity lands", + "lab.latestRelease": "Latest release {{date}}", + "lab.shareOfUsage": "{{share}} of recent OpenCode usage", + "lab.usageTitle": "{{lab}} token usage", + "lab.usageDescription": "Daily OpenCode token volume over the last two months.", + "lab.noUsageTitle": "No usage yet", + "lab.noUsageDescription": "Recent token usage appears here once this lab has activity.", + "lab.dailyTokenChart": "{{lab}} daily token usage chart", + "lab.dailyTokens": "Daily tokens", + "lab.tokens": "tokens", + "lab.modelsTitle": "{{lab}} models", + "lab.modelsDescription": "Catalog details plus recent usage.", + "lab.recentUsageAndLimits": "Recent usage and limits.", + "lab.usage": "Usage", + "lab.share": "Share", + "model.title": "{{model}} Usage, Cost & Rank | OpenCode Data", + "model.description": + "View {{model}} OpenCode Go usage data, including token volume, weekly rank, token mix, costs, cache ratio, sessions, geo breakdowns, and peer models.", + "model.loadingTitle": "Model Data", + "model.loadingDescription": "Reading model aggregates.", + "model.loadingProfile": "Reading the model profile.", + "model.noDataTitle": "No model data", + "model.noDataDescription": "Try opening a model from the leaderboard.", + "model.noMatched": "No model facts or usage rows matched {{id}}.", + "model.fallback": "Model", + "model.catalogFallback": "Model facts from the shared model index. OpenCode Go usage appears once this model has activity.", + "model.unranked": "Unranked across last week's OpenCode Go usage", + "model.ranked": "Ranked #{{rank}} across last week's OpenCode Go usage", + "model.observedVolume": "with {{share}} of observed 2M volume.", + "model.weights": "Model weights: {{label}}", + "model.rank": "7D Rank", + "model.profile": "Model Profile", + "model.listed": "Listed", + "model.noCurrentUsage": "No OpenCode Go usage in the current data window.", + "model.facts": "Model facts", + "model.context": "Context", + "model.output": "Output", + "model.knowledge": "Knowledge", + "model.release": "Release", + "model.inputs": "Inputs", + "model.overviewDescription": "Recent OpenCode Go tokens, unique users, and market position.", + "model.noSummaryTitle": "No usage summary", + "model.noSummaryDescription": "This model has no OpenCode Go usage rows yet.", + "model.tokens": "Tokens", + "model.uniqueUsers": "Unique Users", + "model.lastTwoMonths": "last two months", + "model.sessions": "Sessions", + "model.completedSessions": "completed sessions", + "model.tokenShare": "Token Share", + "model.totalModels": "{{count}} models", + "model.momentum": "Momentum", + "model.vsPreviousWindow": "vs previous window", + "model.usageDescription": "Daily OpenCode Go token volume over the recent two-month window.", + "model.noUsageTitle": "No usage", + "model.noUsageDescription": "No usage landed in the current window.", + "model.dailyTokenChart": "Daily token usage chart", + "model.usersDescription": "Daily unique OpenCode Go users over the recent two-month window.", + "model.noUsersTitle": "No user data", + "model.noUsersDescription": "No user-bearing rows landed in the current window.", + "model.dailyUserChart": "Daily unique user chart", + "model.efficiencyDescription": "Cost, cache behavior, and average OpenCode Go session shape.", + "model.noEfficiencyTitle": "No efficiency data", + "model.noEfficiencyDescription": "Efficiency data appears after usage lands.", + "model.cost": "Cost", + "model.totalSpend": "total spend", + "model.costPerMillion": "Cost / 1M", + "model.inputOutput": "input / output", + "model.observedTokens": "observed all tokens", + "model.costSession": "Cost / Session", + "model.average": "average", + "model.tokensSession": "Tokens / Session", + "model.cacheRatio": "Cache Ratio", + "model.inputTokens": "input tokens", + "model.geoDescription": "OpenCode Go model tokens used by country.", + "model.noGeoTitle": "No geo data", + "model.noGeoDescription": "No OpenCode Go geo rows matched this model.", + "model.worldMap": "World map of model token usage by country", + "model.peersDescription": "Nearby models by recent OpenCode Go token volume.", + "model.noPeersTitle": "No peers", + "model.noPeersDescription": "Peer rankings appear after usage lands.", + "model.noUsageLastWeek": "No usage last week", + "model.newThisWeek": "New this week", + "model.vsPreviousWeek": "{{change}} vs previous week", + "model.pdf": "PDF", + "format.users": "users", + "format.tokens": "tokens", +} as const + +export type Key = keyof typeof en +export type Dict = Record + +const dictionaries = { + ar, + br, + da, + de, + en, + es, + fr, + it, + ja, + ko, + no, + pl, + ru, + th, + tr, + uk, + zh, + zht, +} satisfies Record + +export function dict(locale: Locale) { + return dictionaries[locale] +} diff --git a/packages/stats/app/src/i18n/ar.ts b/packages/stats/app/src/i18n/ar.ts new file mode 100644 index 000000000000..a80c442bbd03 --- /dev/null +++ b/packages/stats/app/src/i18n/ar.ts @@ -0,0 +1,227 @@ +export const dict = { + "app.title": "ترتيب استخدام نماذج الذكاء الاصطناعي | OpenCode Data", + "app.description": + "استكشف استخدام OpenCode Go عبر نماذج الذكاء الاصطناعي، بما في ذلك حجم الرموز، والترتيب، وحصة السوق، وتسعير الرموز، وتكلفة الجلسة، ونسبة التخزين المؤقت، والتوزيع الجغرافي.", + "app.unfurlAlt": "شعار OpenCode Data على خلفية داكنة مزخرفة", + "nav.dataHome": "صفحة البيانات الرئيسية", + "nav.topModels": "أهم النماذج", + "nav.leaderboard": "لوحة الترتيب", + "nav.uniqueUsers": "المستخدمون الفريدون", + "nav.sessionCost": "تكلفة الجلسة", + "nav.tokenCost": "تكلفة الرموز", + "nav.cacheRatio": "نسبة التخزين المؤقت", + "nav.marketShare": "حصة السوق", + "nav.geoBreakdown": "التوزيع الجغرافي", + "nav.overview": "نظرة عامة", + "nav.usage": "الاستخدام", + "nav.users": "المستخدمون", + "nav.efficiency": "الكفاءة", + "nav.peers": "النماذج المشابهة", + "nav.models": "النماذج", + "header.brandLabel": "صفحة البيانات الرئيسية", + "header.sectionNavLabel": "أقسام البيانات", + "header.githubAria": "ضع نجمة لـ OpenCode على GitHub", + "header.github": "GitHub", + "header.tryOpenCode": "جرّب OpenCode", + "header.openNav": "فتح التنقل", + "header.closeNav": "إغلاق التنقل", + "theme.groupLabel": "السمة", + "theme.dark": "داكن", + "theme.light": "فاتح", + "theme.system": "النظام", + "footer.modelData": "بيانات النموذج", + "footer.legal": "قانوني", + "footer.connect": "تواصل", + "footer.newsletter": "النشرة الإخبارية", + "footer.newsletterBody": "كن أول من يعرف بالإصدارات الجديدة.", + "footer.language": "اللغة", + "footer.subscribe": "اشترك", + "footer.terms": "شروط الخدمة", + "footer.privacy": "سياسة الخصوصية", + "footer.contact": "اتصل بنا", + "footer.community": "المجتمع", + "footer.youtube": "YouTube", + "footer.homeAria": "صفحة OpenCode الرئيسية", + "footer.status": "كل الأنظمة تعمل", + "footer.copyright": "© 2026 Anomaly Innovations Inc.", + "bridge.learnMore": "اعرف المزيد", + "modal.closeNewsletter": "إغلاق التسجيل في النشرة الإخبارية", + "modal.title": "نشرة OpenCode الإخبارية", + "modal.body": "كن أول من يعرف\nبالإصدارات الجديدة.", + "modal.email": "عنوان البريد الإلكتروني", + "modal.subscribe": "اشترك", + "modal.subscribing": "جاري الاشتراك...", + "modal.success": "تم اشتراكك.", + "modal.error": "فشل الاشتراك", + "product.allUsers": "كل المستخدمين", + "product.zen": "Zen", + "product.go": "Go", + "range.1D": "يوم واحد", + "range.1W": "أسبوع واحد", + "range.2W": "أسبوعان", + "range.1M": "شهر واحد", + "range.2M": "شهران", + "chart.daily": "يومي", + "chart.input": "الإدخال", + "chart.output": "الإخراج", + "chart.cached": "مخزّن مؤقتًا", + "chart.uncached": "غير مخزّن مؤقتًا", + "chart.ratio": "النسبة", + "chart.model": "النموذج", + "chart.cacheRatio": "نسبة التخزين المؤقت", + "chart.costSession": "التكلفة/الجلسة", + "chart.tokensSession": "الرموز/الجلسة", + "chart.costPerSession": "التكلفة / الجلسة", + "chart.tokensPerSession": "الرموز / الجلسة", + "chart.live": "مباشر", + "chart.percent": "نسبة مئوية", + "chart.leaderboardAria": "لوحة ترتيب رموز النموذج", + "chart.scrollableLeaderboardAria": "لوحة ترتيب رموز النموذج قابلة للتمرير", + "chart.byAuthor": "بواسطة {{author}}", + "home.updated": "تم التحديث", + "home.noRows": "لا توجد صفوف بعد", + "home.justNow": "الآن للتو", + "home.heroCopy": "تعرّف على النماذج التي تحقق استخدامًا فعليًا أكبر، وكيف يتغير المزيج، وما يعنيه ذلك للتكلفة.", + "home.loadingTitle": "تحميل البيانات", + "home.loadingDescription": "قراءة تجميعات النماذج.", + "home.usageTitle": "الاستخدام", + "home.topModelsDescription": "استخدام النماذج عبر OpenCode Go.", + "home.noUsageTitle": "لا توجد بيانات استخدام", + "home.noUsageDescription": "لم تطابق أي صفوف نماذج هذا المنتج وهذا النطاق.", + "home.noLeaderboardTitle": "لا توجد بيانات ترتيب", + "home.noLeaderboardDescription": "لم تطابق أي صفوف نماذج هذا المنتج وهذا النطاق.", + "home.productFilter": "عامل تصفية المنتج", + "home.dateRange": "نطاق التاريخ", + "home.stackedUsageChart": "مخطط استخدام مكدس لأهم النماذج", + "home.total": "الإجمالي", + "home.modelUsers": "مستخدمو النموذج", + "home.new": "جديد", + "home.uniqueUsersTitle": "المستخدمون الفريدون", + "home.uniqueUsersDescription": "المستخدمون اليوميون الفريدون لـ OpenCode Go حسب النموذج.", + "home.noUserDataTitle": "لا توجد بيانات مستخدمين", + "home.noUserDataDescription": "لم تطابق أي صفوف نماذج تحتوي على مستخدمين هذه النافذة.", + "home.uniqueUsersChart": "مخطط مكدس للمستخدمين الفريدين حسب النموذج", + "home.marketShareTitle": "حصة السوق", + "home.marketShareDescription": "قارن حصة الرموز حسب مؤلف النموذج.", + "home.noMarketTitle": "لا توجد بيانات سوق", + "home.noMarketDescription": "لم تطابق أي صفوف نماذج هذا النطاق.", + "home.marketChart": "حصة السوق حسب مؤلف النموذج", + "home.noData": "لا توجد بيانات", + "home.geoTitle": "التوزيع الجغرافي", + "home.geoDescription": "الرموز المستخدمة حسب البلد.", + "home.noGeoTitle": "لا توجد بيانات جغرافية", + "home.noGeoDescription": "لم تطابق أي صفوف جغرافية هذا النطاق.", + "home.worldMap": "خريطة عالمية لاستخدام الرموز حسب البلد", + "home.geoMapTitle": "خريطة التوزيع الجغرافي", + "home.unknown": "غير معروف", + "home.tokenCostTitle": "تكلفة الرموز", + "home.tokenCostDescription": "السعر لكل مليون رمز.", + "home.noTokenCostTitle": "لا توجد بيانات تكلفة الرموز", + "home.noTokenCostDescription": "لم تطابق أي صفوف نماذج ذات تكلفة هذا المنتج.", + "home.cacheRatioTitle": "نسبة التخزين المؤقت", + "home.cacheRatioDescription": "حصة رموز الإدخال التي قُدمت من التخزين المؤقت.", + "home.noCacheTitle": "لا توجد بيانات نسبة التخزين المؤقت", + "home.noCacheDescription": "لم تطابق أي صفوف نماذج ذات رموز إدخال هذا المنتج.", + "home.sessionCostTitle": "تكلفة الجلسة", + "home.sessionCostDescription": "متوسط التكلفة لكل جلسة.", + "home.noSessionCostTitle": "لا توجد بيانات تكلفة الجلسة", + "home.noSessionCostDescription": "لم تطابق أي صفوف نماذج ذات جلسات هذا المنتج.", + "home.costSession": "التكلفة/الجلسة", + "lab.title": "استخدام وترتيب نماذج {{lab}} للذكاء الاصطناعي | OpenCode Data", + "lab.description": + "قارن نماذج {{lab}} المستخدمة في OpenCode Go، بما في ذلك استخدام الرموز، وترتيب النماذج، ونوافذ السياق، وتواريخ الإصدار، والتكاليف، والبيانات الخاصة بكل نموذج.", + "lab.loadingTitle": "مختبر النماذج", + "lab.loadingDescription": "قراءة توفر النماذج واستخدام OpenCode الأخير.", + "lab.notFound": "لم تطابق أي نماذج هذا المختبر.", + "lab.heroPrefix": "استكشف {{count}} من نماذج {{lab}} المستخدمة في OpenCode", + "lab.heroIncluding": "بما في ذلك {{models}}", + "lab.heroSuffix": "قارن الاستخدام الأخير للرموز، ونوافذ السياق، وتواريخ الإصدار، والبيانات الخاصة بكل نموذج.", + "lab.tokensProcessed": "الرموز المعالجة", + "lab.pending": "قيد الانتظار", + "lab.usageAfterActivity": "يظهر الاستخدام بعد وصول نشاط النموذج", + "lab.latestRelease": "آخر إصدار {{date}}", + "lab.shareOfUsage": "{{share}} من استخدام OpenCode الأخير", + "lab.usageTitle": "استخدام رموز {{lab}}", + "lab.usageDescription": "حجم رموز OpenCode اليومي خلال الشهرين الماضيين.", + "lab.noUsageTitle": "لا يوجد استخدام بعد", + "lab.noUsageDescription": "سيظهر الاستخدام الأخير للرموز هنا عندما يصبح لهذا المختبر نشاط.", + "lab.dailyTokenChart": "مخطط استخدام رموز {{lab}} اليومي", + "lab.dailyTokens": "الرموز اليومية", + "lab.tokens": "رموز", + "lab.modelsTitle": "نماذج {{lab}}", + "lab.modelsDescription": "تفاصيل الكتالوج مع الاستخدام الأخير.", + "lab.recentUsageAndLimits": "الاستخدام والحدود الأخيرة.", + "lab.usage": "الاستخدام", + "lab.share": "الحصة", + "model.title": "استخدام {{model}} وتكلفته وترتيبه | OpenCode Data", + "model.description": + "اعرض بيانات استخدام {{model}} في OpenCode Go، بما في ذلك حجم الرموز، والترتيب الأسبوعي، ومزيج الرموز، والتكاليف، ونسبة التخزين المؤقت، والجلسات، والتوزيع الجغرافي، والنماذج المشابهة.", + "model.loadingTitle": "بيانات النموذج", + "model.loadingDescription": "قراءة تجميعات النماذج.", + "model.loadingProfile": "قراءة ملف النموذج.", + "model.noDataTitle": "لا توجد بيانات نموذج", + "model.noDataDescription": "جرّب فتح نموذج من لوحة الترتيب.", + "model.noMatched": "لم تطابق أي حقائق نموذج أو صفوف استخدام {{id}}.", + "model.fallback": "نموذج", + "model.catalogFallback": "حقائق النموذج من فهرس النماذج المشترك. يظهر استخدام OpenCode Go عندما يصبح لهذا النموذج نشاط.", + "model.unranked": "غير مصنف ضمن استخدام OpenCode Go للأسبوع الماضي", + "model.ranked": "مصنف رقم {{rank}} ضمن استخدام OpenCode Go للأسبوع الماضي", + "model.observedVolume": "مع {{share}} من حجم 2M المرصود.", + "model.weights": "أوزان النموذج: {{label}}", + "model.rank": "ترتيب 7 أيام", + "model.profile": "ملف النموذج", + "model.listed": "مدرج", + "model.noCurrentUsage": "لا يوجد استخدام لـ OpenCode Go في نافذة البيانات الحالية.", + "model.facts": "حقائق النموذج", + "model.context": "السياق", + "model.output": "الإخراج", + "model.knowledge": "المعرفة", + "model.release": "الإصدار", + "model.inputs": "المدخلات", + "model.overviewDescription": "رموز OpenCode Go الأخيرة، والمستخدمون الفريدون، وموقع السوق.", + "model.noSummaryTitle": "لا يوجد ملخص استخدام", + "model.noSummaryDescription": "لا يحتوي هذا النموذج على صفوف استخدام OpenCode Go بعد.", + "model.tokens": "الرموز", + "model.uniqueUsers": "المستخدمون الفريدون", + "model.lastTwoMonths": "آخر شهرين", + "model.sessions": "الجلسات", + "model.completedSessions": "الجلسات المكتملة", + "model.tokenShare": "حصة الرموز", + "model.totalModels": "{{count}} نموذجًا", + "model.momentum": "الزخم", + "model.vsPreviousWindow": "مقارنة بالنافذة السابقة", + "model.usageDescription": "حجم رموز OpenCode Go اليومي خلال نافذة الشهرين الأخيرة.", + "model.noUsageTitle": "لا يوجد استخدام", + "model.noUsageDescription": "لم يصل أي استخدام في النافذة الحالية.", + "model.dailyTokenChart": "مخطط استخدام الرموز اليومي", + "model.usersDescription": "المستخدمون اليوميون الفريدون لـ OpenCode Go خلال نافذة الشهرين الأخيرة.", + "model.noUsersTitle": "لا توجد بيانات مستخدمين", + "model.noUsersDescription": "لم تصل أي صفوف تحتوي على مستخدمين في النافذة الحالية.", + "model.dailyUserChart": "مخطط المستخدمين الفريدين اليومي", + "model.efficiencyDescription": "التكلفة، وسلوك التخزين المؤقت، ومتوسط شكل جلسة OpenCode Go.", + "model.noEfficiencyTitle": "لا توجد بيانات كفاءة", + "model.noEfficiencyDescription": "تظهر بيانات الكفاءة بعد وصول الاستخدام.", + "model.cost": "التكلفة", + "model.totalSpend": "إجمالي الإنفاق", + "model.costPerMillion": "التكلفة / 1M", + "model.inputOutput": "الإدخال / الإخراج", + "model.observedTokens": "كل الرموز المرصودة", + "model.costSession": "التكلفة / الجلسة", + "model.average": "المتوسط", + "model.tokensSession": "الرموز / الجلسة", + "model.cacheRatio": "نسبة التخزين المؤقت", + "model.inputTokens": "رموز الإدخال", + "model.geoDescription": "رموز نموذج OpenCode Go المستخدمة حسب البلد.", + "model.noGeoTitle": "لا توجد بيانات جغرافية", + "model.noGeoDescription": "لم تطابق أي صفوف جغرافية في OpenCode Go هذا النموذج.", + "model.worldMap": "خريطة عالمية لاستخدام رموز النموذج حسب البلد", + "model.peersDescription": "نماذج قريبة حسب حجم رموز OpenCode Go الأخير.", + "model.noPeersTitle": "لا توجد نماذج مشابهة", + "model.noPeersDescription": "تظهر ترتيبات النماذج المشابهة بعد وصول الاستخدام.", + "model.noUsageLastWeek": "لا يوجد استخدام الأسبوع الماضي", + "model.newThisWeek": "جديد هذا الأسبوع", + "model.vsPreviousWeek": "{{change}} مقارنة بالأسبوع السابق", + "model.pdf": "PDF", + "format.users": "مستخدمون", + "format.tokens": "رموز", +} as const diff --git a/packages/stats/app/src/i18n/br.ts b/packages/stats/app/src/i18n/br.ts new file mode 100644 index 000000000000..02229abbbfaa --- /dev/null +++ b/packages/stats/app/src/i18n/br.ts @@ -0,0 +1,227 @@ +export const dict = { + "app.title": "Ranking de uso de modelos de IA | OpenCode Data", + "app.description": + "Explore o uso do OpenCode Go em modelos de IA, incluindo volume de tokens, rankings, participação de mercado, preço por token, custo por sessão, taxa de cache e distribuição geográfica.", + "app.unfurlAlt": "Logotipo do OpenCode Data sobre um fundo escuro padronizado", + "nav.dataHome": "Início dos dados", + "nav.topModels": "Principais modelos", + "nav.leaderboard": "Classificação", + "nav.uniqueUsers": "Usuários únicos", + "nav.sessionCost": "Custo da sessão", + "nav.tokenCost": "Custo de tokens", + "nav.cacheRatio": "Taxa de cache", + "nav.marketShare": "Participação de mercado", + "nav.geoBreakdown": "Distribuição geográfica", + "nav.overview": "Visão geral", + "nav.usage": "Uso", + "nav.users": "Usuários", + "nav.efficiency": "Eficiência", + "nav.peers": "Pares", + "nav.models": "Modelos", + "header.brandLabel": "Início dos dados", + "header.sectionNavLabel": "Seções de dados", + "header.githubAria": "Dar estrela ao OpenCode no GitHub", + "header.github": "GitHub", + "header.tryOpenCode": "Experimente o OpenCode", + "header.openNav": "Abrir navegação", + "header.closeNav": "Fechar navegação", + "theme.groupLabel": "Tema", + "theme.dark": "Escuro", + "theme.light": "Claro", + "theme.system": "Sistema", + "footer.modelData": "Dados do modelo", + "footer.legal": "Legal", + "footer.connect": "Conectar", + "footer.newsletter": "Newsletter", + "footer.newsletterBody": "Seja a primeira pessoa a saber sobre novos lançamentos.", + "footer.language": "Idioma", + "footer.subscribe": "Inscrever-se", + "footer.terms": "Termos de serviço", + "footer.privacy": "Política de privacidade", + "footer.contact": "Fale conosco", + "footer.community": "Comunidade", + "footer.youtube": "YouTube", + "footer.homeAria": "Início do OpenCode", + "footer.status": "Todos os sistemas operacionais", + "footer.copyright": "© 2026 Anomaly Innovations Inc.", + "bridge.learnMore": "SAIBA MAIS", + "modal.closeNewsletter": "Fechar inscrição na newsletter", + "modal.title": "Newsletter do OpenCode", + "modal.body": "Seja a primeira pessoa a saber\nsobre novos lançamentos.", + "modal.email": "Endereço de email", + "modal.subscribe": "Inscrever-se", + "modal.subscribing": "Inscrevendo...", + "modal.success": "Inscrição realizada.", + "modal.error": "Falha ao inscrever", + "product.allUsers": "Todos os usuários", + "product.zen": "Zen", + "product.go": "Go", + "range.1D": "1 dia", + "range.1W": "1 semana", + "range.2W": "2 semanas", + "range.1M": "1 mês", + "range.2M": "2 meses", + "chart.daily": "Diário", + "chart.input": "Entrada", + "chart.output": "Saída", + "chart.cached": "Em cache", + "chart.uncached": "Sem cache", + "chart.ratio": "Taxa", + "chart.model": "Modelo", + "chart.cacheRatio": "Taxa de cache", + "chart.costSession": "Custo/sessão", + "chart.tokensSession": "Tokens/sessão", + "chart.costPerSession": "CUSTO / SESSÃO", + "chart.tokensPerSession": "TOKENS / SESSÃO", + "chart.live": "Ao vivo", + "chart.percent": "por cento", + "chart.leaderboardAria": "Classificação de tokens do modelo", + "chart.scrollableLeaderboardAria": "Classificação rolável de tokens do modelo", + "chart.byAuthor": "por {{author}}", + "home.updated": "Atualizado", + "home.noRows": "Ainda não há linhas", + "home.justNow": "agora mesmo", + "home.heroCopy": "Veja quais modelos estão vencendo em uso real, como a combinação está mudando e o que isso significa para o custo.", + "home.loadingTitle": "Carregando dados", + "home.loadingDescription": "Lendo agregados de modelos.", + "home.usageTitle": "Uso", + "home.topModelsDescription": "Uso de modelos no OpenCode Go.", + "home.noUsageTitle": "Sem dados de uso", + "home.noUsageDescription": "Nenhuma linha de modelo correspondeu a este produto e intervalo.", + "home.noLeaderboardTitle": "Sem dados de classificação", + "home.noLeaderboardDescription": "Nenhuma linha de modelo correspondeu a este produto e intervalo.", + "home.productFilter": "Filtro de produto", + "home.dateRange": "Intervalo de datas", + "home.stackedUsageChart": "Gráfico empilhado de uso dos principais modelos", + "home.total": "total", + "home.modelUsers": "usuários do modelo", + "home.new": "Novo", + "home.uniqueUsersTitle": "Usuários únicos", + "home.uniqueUsersDescription": "Usuários únicos diários do OpenCode Go por modelo.", + "home.noUserDataTitle": "Sem dados de usuários", + "home.noUserDataDescription": "Nenhuma linha de modelo com usuários correspondeu a esta janela.", + "home.uniqueUsersChart": "Gráfico empilhado de usuários únicos por modelo", + "home.marketShareTitle": "Participação de mercado", + "home.marketShareDescription": "Compare a participação de tokens por autor do modelo.", + "home.noMarketTitle": "Sem dados de mercado", + "home.noMarketDescription": "Nenhuma linha de modelo correspondeu a este intervalo.", + "home.marketChart": "Participação de mercado por autor do modelo", + "home.noData": "Sem dados", + "home.geoTitle": "Distribuição geográfica", + "home.geoDescription": "Tokens usados por país.", + "home.noGeoTitle": "Sem dados geográficos", + "home.noGeoDescription": "Nenhuma linha geográfica correspondeu a este intervalo.", + "home.worldMap": "Mapa-múndi do uso de tokens por país", + "home.geoMapTitle": "Mapa da distribuição geográfica", + "home.unknown": "Desconhecido", + "home.tokenCostTitle": "Custo de tokens", + "home.tokenCostDescription": "Preço por 1 milhão de tokens.", + "home.noTokenCostTitle": "Sem dados de custo de tokens", + "home.noTokenCostDescription": "Nenhuma linha de modelo com custo correspondeu a este produto.", + "home.cacheRatioTitle": "Taxa de cache", + "home.cacheRatioDescription": "Parcela dos tokens de entrada atendida pelo cache.", + "home.noCacheTitle": "Sem dados de taxa de cache", + "home.noCacheDescription": "Nenhuma linha de modelo com tokens de entrada correspondeu a este produto.", + "home.sessionCostTitle": "Custo da sessão", + "home.sessionCostDescription": "Custo médio por sessão.", + "home.noSessionCostTitle": "Sem dados de custo da sessão", + "home.noSessionCostDescription": "Nenhuma linha de modelo com sessões correspondeu a este produto.", + "home.costSession": "Custo/sessão", + "lab.title": "Uso e ranking de modelos de IA da {{lab}} | OpenCode Data", + "lab.description": + "Compare modelos da {{lab}} usados no OpenCode Go, incluindo uso de tokens, ranking de modelos, janelas de contexto, datas de lançamento, custos e dados específicos de cada modelo.", + "lab.loadingTitle": "Laboratório de modelos", + "lab.loadingDescription": "Lendo disponibilidade de modelos e uso recente do OpenCode.", + "lab.notFound": "Nenhum modelo correspondeu a este laboratório.", + "lab.heroPrefix": "Explore {{count}} modelos da {{lab}} usados no OpenCode", + "lab.heroIncluding": "incluindo {{models}}", + "lab.heroSuffix": "Compare uso recente de tokens, janelas de contexto, datas de lançamento e dados específicos de cada modelo.", + "lab.tokensProcessed": "Tokens processados", + "lab.pending": "Pendente", + "lab.usageAfterActivity": "O uso aparece depois que a atividade do modelo chega", + "lab.latestRelease": "Último lançamento em {{date}}", + "lab.shareOfUsage": "{{share}} do uso recente do OpenCode", + "lab.usageTitle": "Uso de tokens da {{lab}}", + "lab.usageDescription": "Volume diário de tokens do OpenCode nos últimos dois meses.", + "lab.noUsageTitle": "Ainda sem uso", + "lab.noUsageDescription": "O uso recente de tokens aparece aqui quando este laboratório tiver atividade.", + "lab.dailyTokenChart": "Gráfico diário de uso de tokens da {{lab}}", + "lab.dailyTokens": "Tokens diários", + "lab.tokens": "tokens", + "lab.modelsTitle": "Modelos da {{lab}}", + "lab.modelsDescription": "Detalhes do catálogo mais uso recente.", + "lab.recentUsageAndLimits": "Uso recente e limites.", + "lab.usage": "Uso", + "lab.share": "Participação", + "model.title": "Uso, custo e posição de {{model}} | OpenCode Data", + "model.description": + "Veja dados de uso de {{model}} no OpenCode Go, incluindo volume de tokens, ranking semanal, combinação de tokens, custos, taxa de cache, sessões, distribuição geográfica e modelos pares.", + "model.loadingTitle": "Dados do modelo", + "model.loadingDescription": "Lendo agregados de modelos.", + "model.loadingProfile": "Lendo o perfil do modelo.", + "model.noDataTitle": "Sem dados do modelo", + "model.noDataDescription": "Tente abrir um modelo pela classificação.", + "model.noMatched": "Nenhum fato do modelo ou linha de uso correspondeu a {{id}}.", + "model.fallback": "Modelo", + "model.catalogFallback": "Fatos do modelo do índice compartilhado de modelos. O uso no OpenCode Go aparece quando este modelo tiver atividade.", + "model.unranked": "Sem classificação no uso do OpenCode Go da última semana", + "model.ranked": "Classificado em #{{rank}} no uso do OpenCode Go da última semana", + "model.observedVolume": "com {{share}} do volume observado de 2M.", + "model.weights": "Pesos do modelo: {{label}}", + "model.rank": "Ranking 7D", + "model.profile": "Perfil do modelo", + "model.listed": "Listado", + "model.noCurrentUsage": "Sem uso do OpenCode Go na janela de dados atual.", + "model.facts": "Fatos do modelo", + "model.context": "Contexto", + "model.output": "Saída", + "model.knowledge": "Conhecimento", + "model.release": "Lançamento", + "model.inputs": "Entradas", + "model.overviewDescription": "Tokens recentes do OpenCode Go, usuários únicos e posição de mercado.", + "model.noSummaryTitle": "Sem resumo de uso", + "model.noSummaryDescription": "Este modelo ainda não tem linhas de uso do OpenCode Go.", + "model.tokens": "Tokens", + "model.uniqueUsers": "Usuários únicos", + "model.lastTwoMonths": "últimos dois meses", + "model.sessions": "Sessões", + "model.completedSessions": "sessões concluídas", + "model.tokenShare": "Participação de tokens", + "model.totalModels": "{{count}} modelos", + "model.momentum": "Momento", + "model.vsPreviousWindow": "vs janela anterior", + "model.usageDescription": "Volume diário de tokens do OpenCode Go na janela recente de dois meses.", + "model.noUsageTitle": "Sem uso", + "model.noUsageDescription": "Nenhum uso chegou na janela atual.", + "model.dailyTokenChart": "Gráfico diário de uso de tokens", + "model.usersDescription": "Usuários únicos diários do OpenCode Go na janela recente de dois meses.", + "model.noUsersTitle": "Sem dados de usuários", + "model.noUsersDescription": "Nenhuma linha com usuários chegou na janela atual.", + "model.dailyUserChart": "Gráfico diário de usuários únicos", + "model.efficiencyDescription": "Custo, comportamento de cache e formato médio da sessão do OpenCode Go.", + "model.noEfficiencyTitle": "Sem dados de eficiência", + "model.noEfficiencyDescription": "Os dados de eficiência aparecem depois que o uso chega.", + "model.cost": "Custo", + "model.totalSpend": "gasto total", + "model.costPerMillion": "Custo / 1M", + "model.inputOutput": "entrada / saída", + "model.observedTokens": "todos os tokens observados", + "model.costSession": "Custo / sessão", + "model.average": "média", + "model.tokensSession": "Tokens / sessão", + "model.cacheRatio": "Taxa de cache", + "model.inputTokens": "tokens de entrada", + "model.geoDescription": "Tokens do modelo OpenCode Go usados por país.", + "model.noGeoTitle": "Sem dados geográficos", + "model.noGeoDescription": "Nenhuma linha geográfica do OpenCode Go correspondeu a este modelo.", + "model.worldMap": "Mapa-múndi do uso de tokens do modelo por país", + "model.peersDescription": "Modelos próximos por volume recente de tokens do OpenCode Go.", + "model.noPeersTitle": "Sem pares", + "model.noPeersDescription": "Os rankings de pares aparecem depois que o uso chega.", + "model.noUsageLastWeek": "Sem uso na semana passada", + "model.newThisWeek": "Novo esta semana", + "model.vsPreviousWeek": "{{change}} vs semana anterior", + "model.pdf": "PDF", + "format.users": "usuários", + "format.tokens": "tokens", +} as const diff --git a/packages/stats/app/src/i18n/da.ts b/packages/stats/app/src/i18n/da.ts new file mode 100644 index 000000000000..5c87ad0428aa --- /dev/null +++ b/packages/stats/app/src/i18n/da.ts @@ -0,0 +1,227 @@ +export const dict = { + "app.title": "Ranglister for brug af AI-modeller | OpenCode Data", + "app.description": + "Udforsk brugen af OpenCode Go på tværs af AI-modeller, inklusive tokenvolumen, ranglister, markedsandel, tokenpriser, sessionsomkostning, cacheandel og geografiske opdelinger.", + "app.unfurlAlt": "OpenCode Data-ordmærke på en mørk mønstret baggrund", + "nav.dataHome": "Dataforside", + "nav.topModels": "Topmodeller", + "nav.leaderboard": "Rangliste", + "nav.uniqueUsers": "Unikke brugere", + "nav.sessionCost": "Sessionsomkostning", + "nav.tokenCost": "Tokenomkostning", + "nav.cacheRatio": "Cacheandel", + "nav.marketShare": "Markedsandel", + "nav.geoBreakdown": "Geografisk opdeling", + "nav.overview": "Overblik", + "nav.usage": "Brug", + "nav.users": "Brugere", + "nav.efficiency": "Effektivitet", + "nav.peers": "Lignende modeller", + "nav.models": "Modeller", + "header.brandLabel": "Dataforside", + "header.sectionNavLabel": "Datasektioner", + "header.githubAria": "Giv OpenCode en stjerne på GitHub", + "header.github": "GitHub", + "header.tryOpenCode": "Prøv OpenCode", + "header.openNav": "Åbn navigation", + "header.closeNav": "Luk navigation", + "theme.groupLabel": "Tema", + "theme.dark": "Mørkt", + "theme.light": "Lyst", + "theme.system": "System", + "footer.modelData": "Modeldata", + "footer.legal": "Juridisk", + "footer.connect": "Kontakt", + "footer.newsletter": "Nyhedsbrev", + "footer.newsletterBody": "Vær den første til at høre om nye udgivelser.", + "footer.language": "Sprog", + "footer.subscribe": "Tilmeld", + "footer.terms": "Servicevilkår", + "footer.privacy": "Privatlivspolitik", + "footer.contact": "Kontakt os", + "footer.community": "Fællesskab", + "footer.youtube": "YouTube", + "footer.homeAria": "OpenCode-forside", + "footer.status": "Alle systemer er i drift", + "footer.copyright": "© 2026 Anomaly Innovations Inc.", + "bridge.learnMore": "LÆR MERE", + "modal.closeNewsletter": "Luk tilmelding til nyhedsbrev", + "modal.title": "OpenCode-nyhedsbrev", + "modal.body": "Vær den første til at høre\nom nye udgivelser.", + "modal.email": "E-mailadresse", + "modal.subscribe": "Tilmeld", + "modal.subscribing": "Tilmelder...", + "modal.success": "Du er tilmeldt.", + "modal.error": "Tilmelding mislykkedes", + "product.allUsers": "Alle brugere", + "product.zen": "Zen", + "product.go": "Go", + "range.1D": "1 dag", + "range.1W": "1 uge", + "range.2W": "2 uger", + "range.1M": "1 måned", + "range.2M": "2 måneder", + "chart.daily": "Dagligt", + "chart.input": "Input", + "chart.output": "Output", + "chart.cached": "Cachelagret", + "chart.uncached": "Ikke cachelagret", + "chart.ratio": "Forhold", + "chart.model": "Model", + "chart.cacheRatio": "Cacheandel", + "chart.costSession": "Omkostning/session", + "chart.tokensSession": "Tokens/session", + "chart.costPerSession": "OMKOSTNING / SESSION", + "chart.tokensPerSession": "TOKENS / SESSION", + "chart.live": "Live", + "chart.percent": "procent", + "chart.leaderboardAria": "Rangliste over modeltokens", + "chart.scrollableLeaderboardAria": "Rulbar rangliste over modeltokens", + "chart.byAuthor": "af {{author}}", + "home.updated": "Opdateret", + "home.noRows": "Ingen rækker endnu", + "home.justNow": "lige nu", + "home.heroCopy": "Se hvilke modeller der vinder reel brug, hvordan mixet skifter, og hvad det betyder for omkostningerne.", + "home.loadingTitle": "Indlæser data", + "home.loadingDescription": "Læser modelaggregater.", + "home.usageTitle": "Brug", + "home.topModelsDescription": "Brug af modeller på tværs af OpenCode Go.", + "home.noUsageTitle": "Ingen brugsdata", + "home.noUsageDescription": "Ingen modelrækker matchede dette produkt og interval.", + "home.noLeaderboardTitle": "Ingen ranglistedata", + "home.noLeaderboardDescription": "Ingen modelrækker matchede dette produkt og interval.", + "home.productFilter": "Produktfilter", + "home.dateRange": "Datointerval", + "home.stackedUsageChart": "Stablet brugsdiagram for topmodeller", + "home.total": "i alt", + "home.modelUsers": "modelbrugere", + "home.new": "Ny", + "home.uniqueUsersTitle": "Unikke brugere", + "home.uniqueUsersDescription": "Daglige unikke OpenCode Go-brugere efter model.", + "home.noUserDataTitle": "Ingen brugerdata", + "home.noUserDataDescription": "Ingen modelrækker med brugere matchede dette vindue.", + "home.uniqueUsersChart": "Stablet diagram over unikke brugere efter model", + "home.marketShareTitle": "Markedsandel", + "home.marketShareDescription": "Sammenlign tokenandel efter modelforfatter.", + "home.noMarketTitle": "Ingen markedsdata", + "home.noMarketDescription": "Ingen modelrækker matchede dette interval.", + "home.marketChart": "Markedsandel efter modelforfatter", + "home.noData": "Ingen data", + "home.geoTitle": "Geografisk opdeling", + "home.geoDescription": "Tokens brugt efter land.", + "home.noGeoTitle": "Ingen geodata", + "home.noGeoDescription": "Ingen georækker matchede dette interval.", + "home.worldMap": "Verdenskort over tokenbrug efter land", + "home.geoMapTitle": "Kort over geografisk opdeling", + "home.unknown": "Ukendt", + "home.tokenCostTitle": "Tokenomkostning", + "home.tokenCostDescription": "Pris pr. 1 mio. tokens.", + "home.noTokenCostTitle": "Ingen tokenomkostningsdata", + "home.noTokenCostDescription": "Ingen modelrækker med omkostninger matchede dette produkt.", + "home.cacheRatioTitle": "Cacheandel", + "home.cacheRatioDescription": "Andel af inputtokens leveret fra cache.", + "home.noCacheTitle": "Ingen cacheandelsdata", + "home.noCacheDescription": "Ingen modelrækker med inputtokens matchede dette produkt.", + "home.sessionCostTitle": "Sessionsomkostning", + "home.sessionCostDescription": "Gennemsnitlig omkostning pr. session.", + "home.noSessionCostTitle": "Ingen sessionsomkostningsdata", + "home.noSessionCostDescription": "Ingen modelrækker med sessioner matchede dette produkt.", + "home.costSession": "Omkostning/session", + "lab.title": "{{lab}} AI-modelbrug og ranglister | OpenCode Data", + "lab.description": + "Sammenlign {{lab}}-modeller brugt i OpenCode Go, inklusive tokenbrug, modelranglister, kontekstvinduer, udgivelsesdatoer, omkostninger og modelspecifikke data.", + "lab.loadingTitle": "Modellab", + "lab.loadingDescription": "Læser modeltilgængelighed og seneste OpenCode-brug.", + "lab.notFound": "Ingen modeller matchede dette lab.", + "lab.heroPrefix": "Udforsk {{count}} {{lab}}-modeller brugt i OpenCode", + "lab.heroIncluding": "inklusive {{models}}", + "lab.heroSuffix": "Sammenlign seneste tokenbrug, kontekstvinduer, udgivelsesdatoer og modelspecifikke data.", + "lab.tokensProcessed": "Behandlede tokens", + "lab.pending": "Afventer", + "lab.usageAfterActivity": "Brug vises, når modelaktivitet lander", + "lab.latestRelease": "Seneste udgivelse {{date}}", + "lab.shareOfUsage": "{{share}} af den seneste OpenCode-brug", + "lab.usageTitle": "{{lab}}-tokenbrug", + "lab.usageDescription": "Daglig OpenCode-tokenvolumen over de sidste to måneder.", + "lab.noUsageTitle": "Ingen brug endnu", + "lab.noUsageDescription": "Seneste tokenbrug vises her, når dette lab har aktivitet.", + "lab.dailyTokenChart": "Dagligt diagram over {{lab}}-tokenbrug", + "lab.dailyTokens": "Daglige tokens", + "lab.tokens": "tokens", + "lab.modelsTitle": "{{lab}}-modeller", + "lab.modelsDescription": "Katalogdetaljer plus seneste brug.", + "lab.recentUsageAndLimits": "Seneste brug og grænser.", + "lab.usage": "Brug", + "lab.share": "Andel", + "model.title": "{{model}} brug, omkostning og rang | OpenCode Data", + "model.description": + "Se OpenCode Go-brugsdata for {{model}}, inklusive tokenvolumen, ugentlig rang, tokenmix, omkostninger, cacheandel, sessioner, geografiske opdelinger og lignende modeller.", + "model.loadingTitle": "Modeldata", + "model.loadingDescription": "Læser modelaggregater.", + "model.loadingProfile": "Læser modelprofilen.", + "model.noDataTitle": "Ingen modeldata", + "model.noDataDescription": "Prøv at åbne en model fra ranglisten.", + "model.noMatched": "Ingen modelfakta eller brugsrækker matchede {{id}}.", + "model.fallback": "Model", + "model.catalogFallback": "Modelfakta fra det fælles modelindeks. OpenCode Go-brug vises, når denne model har aktivitet.", + "model.unranked": "Ikke rangeret i sidste uges OpenCode Go-brug", + "model.ranked": "Rangeret #{{rank}} i sidste uges OpenCode Go-brug", + "model.observedVolume": "med {{share}} af observeret 2M-volumen.", + "model.weights": "Modelvægte: {{label}}", + "model.rank": "7D-rang", + "model.profile": "Modelprofil", + "model.listed": "Opført", + "model.noCurrentUsage": "Ingen OpenCode Go-brug i det aktuelle datavindue.", + "model.facts": "Modelfakta", + "model.context": "Kontekst", + "model.output": "Output", + "model.knowledge": "Viden", + "model.release": "Udgivelse", + "model.inputs": "Input", + "model.overviewDescription": "Seneste OpenCode Go-tokens, unikke brugere og markedsposition.", + "model.noSummaryTitle": "Ingen brugsoversigt", + "model.noSummaryDescription": "Denne model har endnu ingen OpenCode Go-brugsrækker.", + "model.tokens": "Tokens", + "model.uniqueUsers": "Unikke brugere", + "model.lastTwoMonths": "sidste to måneder", + "model.sessions": "Sessioner", + "model.completedSessions": "fuldførte sessioner", + "model.tokenShare": "Tokenandel", + "model.totalModels": "{{count}} modeller", + "model.momentum": "Momentum", + "model.vsPreviousWindow": "vs forrige vindue", + "model.usageDescription": "Daglig OpenCode Go-tokenvolumen i det seneste tomånedersvindue.", + "model.noUsageTitle": "Ingen brug", + "model.noUsageDescription": "Ingen brug landede i det aktuelle vindue.", + "model.dailyTokenChart": "Dagligt diagram over tokenbrug", + "model.usersDescription": "Daglige unikke OpenCode Go-brugere i det seneste tomånedersvindue.", + "model.noUsersTitle": "Ingen brugerdata", + "model.noUsersDescription": "Ingen rækker med brugere landede i det aktuelle vindue.", + "model.dailyUserChart": "Dagligt diagram over unikke brugere", + "model.efficiencyDescription": "Omkostning, cacheadfærd og gennemsnitlig OpenCode Go-sessionsform.", + "model.noEfficiencyTitle": "Ingen effektivitetsdata", + "model.noEfficiencyDescription": "Effektivitetsdata vises, når brug lander.", + "model.cost": "Omkostning", + "model.totalSpend": "samlet forbrug", + "model.costPerMillion": "Omkostning / 1 mio.", + "model.inputOutput": "input / output", + "model.observedTokens": "alle observerede tokens", + "model.costSession": "Omkostning / session", + "model.average": "gennemsnit", + "model.tokensSession": "Tokens / session", + "model.cacheRatio": "Cacheandel", + "model.inputTokens": "inputtokens", + "model.geoDescription": "OpenCode Go-modeltokens brugt efter land.", + "model.noGeoTitle": "Ingen geodata", + "model.noGeoDescription": "Ingen OpenCode Go-georækker matchede denne model.", + "model.worldMap": "Verdenskort over modeltokenbrug efter land", + "model.peersDescription": "Nærliggende modeller efter seneste OpenCode Go-tokenvolumen.", + "model.noPeersTitle": "Ingen lignende modeller", + "model.noPeersDescription": "Ranglister over lignende modeller vises, når brug lander.", + "model.noUsageLastWeek": "Ingen brug sidste uge", + "model.newThisWeek": "Ny denne uge", + "model.vsPreviousWeek": "{{change}} vs forrige uge", + "model.pdf": "PDF", + "format.users": "brugere", + "format.tokens": "tokens", +} as const diff --git a/packages/stats/app/src/i18n/de.ts b/packages/stats/app/src/i18n/de.ts new file mode 100644 index 000000000000..7f19ec0f11a8 --- /dev/null +++ b/packages/stats/app/src/i18n/de.ts @@ -0,0 +1,227 @@ +export const dict = { + "app.title": "KI-Modellnutzungs-Rankings | OpenCode Data", + "app.description": + "Erkunde die OpenCode Go-Nutzung über KI-Modelle hinweg, einschließlich Tokenvolumen, Rankings, Marktanteil, Tokenpreisen, Sitzungskosten, Cache-Anteil und geografischen Aufschlüsselungen.", + "app.unfurlAlt": "OpenCode Data-Wortmarke auf dunklem gemustertem Hintergrund", + "nav.dataHome": "Daten-Startseite", + "nav.topModels": "Top-Modelle", + "nav.leaderboard": "Bestenliste", + "nav.uniqueUsers": "Eindeutige Nutzer", + "nav.sessionCost": "Sitzungskosten", + "nav.tokenCost": "Tokenkosten", + "nav.cacheRatio": "Cache-Anteil", + "nav.marketShare": "Marktanteil", + "nav.geoBreakdown": "Geografische Aufschlüsselung", + "nav.overview": "Übersicht", + "nav.usage": "Nutzung", + "nav.users": "Nutzer", + "nav.efficiency": "Effizienz", + "nav.peers": "Vergleichsmodelle", + "nav.models": "Modelle", + "header.brandLabel": "Daten-Startseite", + "header.sectionNavLabel": "Datenbereiche", + "header.githubAria": "OpenCode auf GitHub mit Stern markieren", + "header.github": "GitHub", + "header.tryOpenCode": "OpenCode ausprobieren", + "header.openNav": "Navigation öffnen", + "header.closeNav": "Navigation schließen", + "theme.groupLabel": "Design", + "theme.dark": "Dunkel", + "theme.light": "Hell", + "theme.system": "System", + "footer.modelData": "Modelldaten", + "footer.legal": "Rechtliches", + "footer.connect": "Kontakt", + "footer.newsletter": "Newsletter", + "footer.newsletterBody": "Erfahre als Erstes von neuen Veröffentlichungen.", + "footer.language": "Sprache", + "footer.subscribe": "Abonnieren", + "footer.terms": "Nutzungsbedingungen", + "footer.privacy": "Datenschutzerklärung", + "footer.contact": "Kontakt aufnehmen", + "footer.community": "Community", + "footer.youtube": "YouTube", + "footer.homeAria": "OpenCode-Startseite", + "footer.status": "Alle Systeme betriebsbereit", + "footer.copyright": "© 2026 Anomaly Innovations Inc.", + "bridge.learnMore": "MEHR ERFAHREN", + "modal.closeNewsletter": "Newsletter-Anmeldung schließen", + "modal.title": "OpenCode-Newsletter", + "modal.body": "Erfahre als Erstes\nvon neuen Veröffentlichungen.", + "modal.email": "E-Mail-Adresse", + "modal.subscribe": "Abonnieren", + "modal.subscribing": "Wird abonniert...", + "modal.success": "Du hast dich angemeldet.", + "modal.error": "Anmeldung fehlgeschlagen", + "product.allUsers": "Alle Nutzer", + "product.zen": "Zen", + "product.go": "Go", + "range.1D": "1 Tag", + "range.1W": "1 Woche", + "range.2W": "2 Wochen", + "range.1M": "1 Monat", + "range.2M": "2 Monate", + "chart.daily": "Täglich", + "chart.input": "Eingabe", + "chart.output": "Ausgabe", + "chart.cached": "Gecacht", + "chart.uncached": "Nicht gecacht", + "chart.ratio": "Verhältnis", + "chart.model": "Modell", + "chart.cacheRatio": "Cache-Anteil", + "chart.costSession": "Kosten/Sitzung", + "chart.tokensSession": "Tokens/Sitzung", + "chart.costPerSession": "KOSTEN / SITZUNG", + "chart.tokensPerSession": "TOKENS / SITZUNG", + "chart.live": "Live", + "chart.percent": "Prozent", + "chart.leaderboardAria": "Modell-Token-Bestenliste", + "chart.scrollableLeaderboardAria": "Scrollbare Modell-Token-Bestenliste", + "chart.byAuthor": "von {{author}}", + "home.updated": "Aktualisiert", + "home.noRows": "Noch keine Zeilen", + "home.justNow": "gerade eben", + "home.heroCopy": "Sieh, welche Modelle echte Nutzung gewinnen, wie sich der Mix verschiebt und was das für die Kosten bedeutet.", + "home.loadingTitle": "Daten werden geladen", + "home.loadingDescription": "Modellaggregate werden gelesen.", + "home.usageTitle": "Nutzung", + "home.topModelsDescription": "Nutzung von Modellen in OpenCode Go.", + "home.noUsageTitle": "Keine Nutzungsdaten", + "home.noUsageDescription": "Keine Modellzeilen passten zu diesem Produkt und Zeitraum.", + "home.noLeaderboardTitle": "Keine Bestenlistendaten", + "home.noLeaderboardDescription": "Keine Modellzeilen passten zu diesem Produkt und Zeitraum.", + "home.productFilter": "Produktfilter", + "home.dateRange": "Datumsbereich", + "home.stackedUsageChart": "Gestapeltes Nutzungsdiagramm der Top-Modelle", + "home.total": "gesamt", + "home.modelUsers": "Modellnutzer", + "home.new": "Neu", + "home.uniqueUsersTitle": "Eindeutige Nutzer", + "home.uniqueUsersDescription": "Täglich eindeutige OpenCode Go-Nutzer nach Modell.", + "home.noUserDataTitle": "Keine Nutzerdaten", + "home.noUserDataDescription": "Keine Modellzeilen mit Nutzern passten zu diesem Zeitraum.", + "home.uniqueUsersChart": "Gestapeltes Diagramm eindeutiger Nutzer nach Modell", + "home.marketShareTitle": "Marktanteil", + "home.marketShareDescription": "Vergleiche den Tokenanteil nach Modellautor.", + "home.noMarketTitle": "Keine Marktdaten", + "home.noMarketDescription": "Keine Modellzeilen passten zu diesem Zeitraum.", + "home.marketChart": "Marktanteil nach Modellautor", + "home.noData": "Keine Daten", + "home.geoTitle": "Geografische Aufschlüsselung", + "home.geoDescription": "Nach Land verwendete Tokens.", + "home.noGeoTitle": "Keine Geodaten", + "home.noGeoDescription": "Keine Geozeilen passten zu diesem Zeitraum.", + "home.worldMap": "Weltkarte der Tokennutzung nach Land", + "home.geoMapTitle": "Karte der geografischen Aufschlüsselung", + "home.unknown": "Unbekannt", + "home.tokenCostTitle": "Tokenkosten", + "home.tokenCostDescription": "Preis pro 1 Mio. Tokens.", + "home.noTokenCostTitle": "Keine Tokenkostendaten", + "home.noTokenCostDescription": "Keine Modellzeilen mit Kostendaten passten zu diesem Produkt.", + "home.cacheRatioTitle": "Cache-Anteil", + "home.cacheRatioDescription": "Anteil der Eingabetokens, die aus dem Cache bedient wurden.", + "home.noCacheTitle": "Keine Cache-Anteilsdaten", + "home.noCacheDescription": "Keine Modellzeilen mit Eingabetokens passten zu diesem Produkt.", + "home.sessionCostTitle": "Sitzungskosten", + "home.sessionCostDescription": "Durchschnittliche Kosten pro Sitzung.", + "home.noSessionCostTitle": "Keine Sitzungskostendaten", + "home.noSessionCostDescription": "Keine Modellzeilen mit Sitzungen passten zu diesem Produkt.", + "home.costSession": "Kosten/Sitzung", + "lab.title": "{{lab}} KI-Modellnutzung und Rankings | OpenCode Data", + "lab.description": + "Vergleiche {{lab}}-Modelle, die in OpenCode Go verwendet werden, einschließlich Tokennutzung, Modellrankings, Kontextfenstern, Veröffentlichungsdaten, Kosten und modellspezifischen Daten.", + "lab.loadingTitle": "Modelllabor", + "lab.loadingDescription": "Modellverfügbarkeit und aktuelle OpenCode-Nutzung werden gelesen.", + "lab.notFound": "Keine Modelle passten zu diesem Lab.", + "lab.heroPrefix": "Erkunde {{count}} {{lab}}-Modelle, die in OpenCode verwendet werden", + "lab.heroIncluding": "einschließlich {{models}}", + "lab.heroSuffix": "Vergleiche aktuelle Tokennutzung, Kontextfenster, Veröffentlichungsdaten und modellspezifische Daten.", + "lab.tokensProcessed": "Verarbeitete Tokens", + "lab.pending": "Ausstehend", + "lab.usageAfterActivity": "Nutzung erscheint, sobald Modellaktivität vorliegt", + "lab.latestRelease": "Neueste Veröffentlichung {{date}}", + "lab.shareOfUsage": "{{share}} der aktuellen OpenCode-Nutzung", + "lab.usageTitle": "{{lab}}-Tokennutzung", + "lab.usageDescription": "Tägliches OpenCode-Tokenvolumen der letzten zwei Monate.", + "lab.noUsageTitle": "Noch keine Nutzung", + "lab.noUsageDescription": "Aktuelle Tokennutzung erscheint hier, sobald dieses Lab Aktivität hat.", + "lab.dailyTokenChart": "Diagramm der täglichen {{lab}}-Tokennutzung", + "lab.dailyTokens": "Tägliche Tokens", + "lab.tokens": "Tokens", + "lab.modelsTitle": "{{lab}}-Modelle", + "lab.modelsDescription": "Katalogdetails plus aktuelle Nutzung.", + "lab.recentUsageAndLimits": "Aktuelle Nutzung und Limits.", + "lab.usage": "Nutzung", + "lab.share": "Anteil", + "model.title": "{{model}} Nutzung, Kosten und Rang | OpenCode Data", + "model.description": + "Sieh dir OpenCode Go-Nutzungsdaten für {{model}} an, einschließlich Tokenvolumen, Wochenrang, Tokenmix, Kosten, Cache-Anteil, Sitzungen, geografischer Aufschlüsselung und Vergleichsmodellen.", + "model.loadingTitle": "Modelldaten", + "model.loadingDescription": "Modellaggregate werden gelesen.", + "model.loadingProfile": "Modellprofil wird gelesen.", + "model.noDataTitle": "Keine Modelldaten", + "model.noDataDescription": "Öffne ein Modell aus der Bestenliste.", + "model.noMatched": "Keine Modellfakten oder Nutzungszeilen passten zu {{id}}.", + "model.fallback": "Modell", + "model.catalogFallback": "Modellfakten aus dem gemeinsamen Modellindex. OpenCode Go-Nutzung erscheint, sobald dieses Modell Aktivität hat.", + "model.unranked": "In der OpenCode Go-Nutzung der letzten Woche nicht platziert", + "model.ranked": "Rang #{{rank}} in der OpenCode Go-Nutzung der letzten Woche", + "model.observedVolume": "mit {{share}} des beobachteten 2M-Volumens.", + "model.weights": "Modellgewichte: {{label}}", + "model.rank": "7T-Rang", + "model.profile": "Modellprofil", + "model.listed": "Gelistet", + "model.noCurrentUsage": "Keine OpenCode Go-Nutzung im aktuellen Datenfenster.", + "model.facts": "Modellfakten", + "model.context": "Kontext", + "model.output": "Ausgabe", + "model.knowledge": "Wissensstand", + "model.release": "Veröffentlichung", + "model.inputs": "Eingaben", + "model.overviewDescription": "Aktuelle OpenCode Go-Tokens, eindeutige Nutzer und Marktposition.", + "model.noSummaryTitle": "Keine Nutzungsübersicht", + "model.noSummaryDescription": "Dieses Modell hat noch keine OpenCode Go-Nutzungszeilen.", + "model.tokens": "Tokens", + "model.uniqueUsers": "Eindeutige Nutzer", + "model.lastTwoMonths": "letzte zwei Monate", + "model.sessions": "Sitzungen", + "model.completedSessions": "abgeschlossene Sitzungen", + "model.tokenShare": "Tokenanteil", + "model.totalModels": "{{count}} Modelle", + "model.momentum": "Momentum", + "model.vsPreviousWindow": "ggü. vorherigem Fenster", + "model.usageDescription": "Tägliches OpenCode Go-Tokenvolumen im aktuellen Zwei-Monats-Fenster.", + "model.noUsageTitle": "Keine Nutzung", + "model.noUsageDescription": "Im aktuellen Fenster ist keine Nutzung eingegangen.", + "model.dailyTokenChart": "Diagramm der täglichen Tokennutzung", + "model.usersDescription": "Täglich eindeutige OpenCode Go-Nutzer im aktuellen Zwei-Monats-Fenster.", + "model.noUsersTitle": "Keine Nutzerdaten", + "model.noUsersDescription": "Im aktuellen Fenster sind keine Zeilen mit Nutzern eingegangen.", + "model.dailyUserChart": "Diagramm der täglich eindeutigen Nutzer", + "model.efficiencyDescription": "Kosten, Cache-Verhalten und durchschnittliche OpenCode Go-Sitzungsform.", + "model.noEfficiencyTitle": "Keine Effizienzdaten", + "model.noEfficiencyDescription": "Effizienzdaten erscheinen, nachdem Nutzung eingegangen ist.", + "model.cost": "Kosten", + "model.totalSpend": "Gesamtausgaben", + "model.costPerMillion": "Kosten / 1 Mio.", + "model.inputOutput": "Eingabe / Ausgabe", + "model.observedTokens": "alle beobachteten Tokens", + "model.costSession": "Kosten / Sitzung", + "model.average": "Durchschnitt", + "model.tokensSession": "Tokens / Sitzung", + "model.cacheRatio": "Cache-Anteil", + "model.inputTokens": "Eingabetokens", + "model.geoDescription": "OpenCode Go-Modelltokens nach Land.", + "model.noGeoTitle": "Keine Geodaten", + "model.noGeoDescription": "Keine OpenCode Go-Geozeilen passten zu diesem Modell.", + "model.worldMap": "Weltkarte der Modelltokennutzung nach Land", + "model.peersDescription": "Nahe Modelle nach aktuellem OpenCode Go-Tokenvolumen.", + "model.noPeersTitle": "Keine Vergleichsmodelle", + "model.noPeersDescription": "Vergleichsrankings erscheinen, nachdem Nutzung eingegangen ist.", + "model.noUsageLastWeek": "Keine Nutzung letzte Woche", + "model.newThisWeek": "Neu diese Woche", + "model.vsPreviousWeek": "{{change}} ggü. vorheriger Woche", + "model.pdf": "PDF", + "format.users": "Nutzer", + "format.tokens": "Tokens", +} as const diff --git a/packages/stats/app/src/i18n/es.ts b/packages/stats/app/src/i18n/es.ts new file mode 100644 index 000000000000..b680499fc808 --- /dev/null +++ b/packages/stats/app/src/i18n/es.ts @@ -0,0 +1,227 @@ +export const dict = { + "app.title": "Clasificaciones de uso de modelos de IA | OpenCode Data", + "app.description": + "Explora el uso de OpenCode Go en modelos de IA, incluido el volumen de tokens, clasificaciones, cuota de mercado, precios de tokens, coste por sesión, ratio de caché y desgloses geográficos.", + "app.unfurlAlt": "Logotipo textual de OpenCode Data sobre un fondo oscuro con patrón", + "nav.dataHome": "Inicio de datos", + "nav.topModels": "Modelos principales", + "nav.leaderboard": "Clasificación", + "nav.uniqueUsers": "Usuarios únicos", + "nav.sessionCost": "Coste por sesión", + "nav.tokenCost": "Coste de tokens", + "nav.cacheRatio": "Ratio de caché", + "nav.marketShare": "Cuota de mercado", + "nav.geoBreakdown": "Desglose geográfico", + "nav.overview": "Resumen", + "nav.usage": "Uso", + "nav.users": "Usuarios", + "nav.efficiency": "Eficiencia", + "nav.peers": "Modelos similares", + "nav.models": "Modelos", + "header.brandLabel": "Inicio de datos", + "header.sectionNavLabel": "Secciones de datos", + "header.githubAria": "Dale una estrella a OpenCode en GitHub", + "header.github": "GitHub", + "header.tryOpenCode": "Probar OpenCode", + "header.openNav": "Abrir navegación", + "header.closeNav": "Cerrar navegación", + "theme.groupLabel": "Tema", + "theme.dark": "Oscuro", + "theme.light": "Claro", + "theme.system": "Sistema", + "footer.modelData": "Datos de modelos", + "footer.legal": "Legal", + "footer.connect": "Conectar", + "footer.newsletter": "Boletín", + "footer.newsletterBody": "Entérate antes que nadie de los nuevos lanzamientos.", + "footer.language": "Idioma", + "footer.subscribe": "Suscribirse", + "footer.terms": "Términos del servicio", + "footer.privacy": "Política de privacidad", + "footer.contact": "Contáctanos", + "footer.community": "Comunidad", + "footer.youtube": "YouTube", + "footer.homeAria": "Inicio de OpenCode", + "footer.status": "Todos los sistemas están operativos", + "footer.copyright": "© 2026 Anomaly Innovations Inc.", + "bridge.learnMore": "MÁS INFORMACIÓN", + "modal.closeNewsletter": "Cerrar suscripción al boletín", + "modal.title": "Boletín de OpenCode", + "modal.body": "Entérate antes que nadie\nde los nuevos lanzamientos.", + "modal.email": "Dirección de correo", + "modal.subscribe": "Suscribirse", + "modal.subscribing": "Suscribiendo...", + "modal.success": "Suscripción completada.", + "modal.error": "No se pudo suscribir", + "product.allUsers": "Todos los usuarios", + "product.zen": "Zen", + "product.go": "Go", + "range.1D": "1 día", + "range.1W": "1 semana", + "range.2W": "2 semanas", + "range.1M": "1 mes", + "range.2M": "2 meses", + "chart.daily": "Diario", + "chart.input": "Entrada", + "chart.output": "Salida", + "chart.cached": "En caché", + "chart.uncached": "Sin caché", + "chart.ratio": "Ratio", + "chart.model": "Modelo", + "chart.cacheRatio": "Ratio de caché", + "chart.costSession": "Coste/sesión", + "chart.tokensSession": "Tokens/sesión", + "chart.costPerSession": "COSTE / SESIÓN", + "chart.tokensPerSession": "TOKENS / SESIÓN", + "chart.live": "En directo", + "chart.percent": "porcentaje", + "chart.leaderboardAria": "Clasificación de tokens por modelo", + "chart.scrollableLeaderboardAria": "Clasificación desplazable de tokens por modelo", + "chart.byAuthor": "por {{author}}", + "home.updated": "Actualizado", + "home.noRows": "Aún no hay filas", + "home.justNow": "ahora mismo", + "home.heroCopy": "Mira qué modelos ganan uso real, cómo cambia la mezcla y qué significa eso para el coste.", + "home.loadingTitle": "Cargando datos", + "home.loadingDescription": "Leyendo agregados de modelos.", + "home.usageTitle": "Uso", + "home.topModelsDescription": "Uso de modelos en OpenCode Go.", + "home.noUsageTitle": "Sin datos de uso", + "home.noUsageDescription": "Ninguna fila de modelo coincidió con este producto y rango.", + "home.noLeaderboardTitle": "Sin datos de clasificación", + "home.noLeaderboardDescription": "Ninguna fila de modelo coincidió con este producto y rango.", + "home.productFilter": "Filtro de producto", + "home.dateRange": "Rango de fechas", + "home.stackedUsageChart": "Gráfico apilado de uso de los modelos principales", + "home.total": "total", + "home.modelUsers": "usuarios del modelo", + "home.new": "Nuevo", + "home.uniqueUsersTitle": "Usuarios únicos", + "home.uniqueUsersDescription": "Usuarios únicos diarios de OpenCode Go por modelo.", + "home.noUserDataTitle": "Sin datos de usuarios", + "home.noUserDataDescription": "Ninguna fila de modelo con usuarios coincidió con esta ventana.", + "home.uniqueUsersChart": "Gráfico apilado de usuarios únicos por modelo", + "home.marketShareTitle": "Cuota de mercado", + "home.marketShareDescription": "Compara la cuota de tokens por autor del modelo.", + "home.noMarketTitle": "Sin datos de mercado", + "home.noMarketDescription": "Ninguna fila de modelo coincidió con este rango.", + "home.marketChart": "Cuota de mercado por autor del modelo", + "home.noData": "Sin datos", + "home.geoTitle": "Desglose geográfico", + "home.geoDescription": "Tokens usados por país.", + "home.noGeoTitle": "Sin datos geográficos", + "home.noGeoDescription": "Ninguna fila geográfica coincidió con este rango.", + "home.worldMap": "Mapa mundial del uso de tokens por país", + "home.geoMapTitle": "Mapa de desglose geográfico", + "home.unknown": "Desconocido", + "home.tokenCostTitle": "Coste de tokens", + "home.tokenCostDescription": "Precio por 1 M de tokens.", + "home.noTokenCostTitle": "Sin datos de coste de tokens", + "home.noTokenCostDescription": "Ninguna fila de modelo con costes coincidió con este producto.", + "home.cacheRatioTitle": "Ratio de caché", + "home.cacheRatioDescription": "Porción de tokens de entrada servidos desde caché.", + "home.noCacheTitle": "Sin datos de ratio de caché", + "home.noCacheDescription": "Ninguna fila de modelo con tokens de entrada coincidió con este producto.", + "home.sessionCostTitle": "Coste por sesión", + "home.sessionCostDescription": "Coste medio por sesión.", + "home.noSessionCostTitle": "Sin datos de coste por sesión", + "home.noSessionCostDescription": "Ninguna fila de modelo con sesiones coincidió con este producto.", + "home.costSession": "Coste/sesión", + "lab.title": "Uso y clasificaciones de modelos de IA de {{lab}} | OpenCode Data", + "lab.description": + "Compara modelos de {{lab}} usados en OpenCode Go, incluido uso de tokens, clasificaciones de modelos, ventanas de contexto, fechas de lanzamiento, costes y datos específicos del modelo.", + "lab.loadingTitle": "Laboratorio de modelos", + "lab.loadingDescription": "Leyendo disponibilidad de modelos y uso reciente de OpenCode.", + "lab.notFound": "Ningún modelo coincidió con este laboratorio.", + "lab.heroPrefix": "Explora {{count}} modelos de {{lab}} usados en OpenCode", + "lab.heroIncluding": "incluidos {{models}}", + "lab.heroSuffix": "Compara uso reciente de tokens, ventanas de contexto, fechas de lanzamiento y datos específicos del modelo.", + "lab.tokensProcessed": "Tokens procesados", + "lab.pending": "Pendiente", + "lab.usageAfterActivity": "El uso aparece después de que llegue actividad del modelo", + "lab.latestRelease": "Último lanzamiento {{date}}", + "lab.shareOfUsage": "{{share}} del uso reciente de OpenCode", + "lab.usageTitle": "Uso de tokens de {{lab}}", + "lab.usageDescription": "Volumen diario de tokens de OpenCode durante los últimos dos meses.", + "lab.noUsageTitle": "Aún sin uso", + "lab.noUsageDescription": "El uso reciente de tokens aparecerá aquí cuando este laboratorio tenga actividad.", + "lab.dailyTokenChart": "Gráfico de uso diario de tokens de {{lab}}", + "lab.dailyTokens": "Tokens diarios", + "lab.tokens": "tokens", + "lab.modelsTitle": "Modelos de {{lab}}", + "lab.modelsDescription": "Detalles del catálogo más uso reciente.", + "lab.recentUsageAndLimits": "Uso reciente y límites.", + "lab.usage": "Uso", + "lab.share": "Cuota", + "model.title": "Uso, coste y posición de {{model}} | OpenCode Data", + "model.description": + "Consulta datos de uso de {{model}} en OpenCode Go, incluido volumen de tokens, posición semanal, mezcla de tokens, costes, ratio de caché, sesiones, desgloses geográficos y modelos similares.", + "model.loadingTitle": "Datos del modelo", + "model.loadingDescription": "Leyendo agregados del modelo.", + "model.loadingProfile": "Leyendo el perfil del modelo.", + "model.noDataTitle": "Sin datos del modelo", + "model.noDataDescription": "Prueba a abrir un modelo desde la clasificación.", + "model.noMatched": "Ningún dato del modelo ni fila de uso coincidió con {{id}}.", + "model.fallback": "Modelo", + "model.catalogFallback": "Datos del modelo desde el índice compartido de modelos. El uso de OpenCode Go aparecerá cuando este modelo tenga actividad.", + "model.unranked": "Sin clasificación en el uso de OpenCode Go de la semana pasada", + "model.ranked": "Clasificado #{{rank}} en el uso de OpenCode Go de la semana pasada", + "model.observedVolume": "con {{share}} del volumen 2M observado.", + "model.weights": "Pesos del modelo: {{label}}", + "model.rank": "Posición 7D", + "model.profile": "Perfil del modelo", + "model.listed": "Listado", + "model.noCurrentUsage": "Sin uso de OpenCode Go en la ventana de datos actual.", + "model.facts": "Datos del modelo", + "model.context": "Contexto", + "model.output": "Salida", + "model.knowledge": "Conocimiento", + "model.release": "Lanzamiento", + "model.inputs": "Entradas", + "model.overviewDescription": "Tokens recientes de OpenCode Go, usuarios únicos y posición de mercado.", + "model.noSummaryTitle": "Sin resumen de uso", + "model.noSummaryDescription": "Este modelo aún no tiene filas de uso de OpenCode Go.", + "model.tokens": "Tokens", + "model.uniqueUsers": "Usuarios únicos", + "model.lastTwoMonths": "últimos dos meses", + "model.sessions": "Sesiones", + "model.completedSessions": "sesiones completadas", + "model.tokenShare": "Cuota de tokens", + "model.totalModels": "{{count}} modelos", + "model.momentum": "Impulso", + "model.vsPreviousWindow": "vs ventana anterior", + "model.usageDescription": "Volumen diario de tokens de OpenCode Go durante la ventana reciente de dos meses.", + "model.noUsageTitle": "Sin uso", + "model.noUsageDescription": "No llegó uso en la ventana actual.", + "model.dailyTokenChart": "Gráfico de uso diario de tokens", + "model.usersDescription": "Usuarios únicos diarios de OpenCode Go durante la ventana reciente de dos meses.", + "model.noUsersTitle": "Sin datos de usuarios", + "model.noUsersDescription": "No llegaron filas con usuarios en la ventana actual.", + "model.dailyUserChart": "Gráfico diario de usuarios únicos", + "model.efficiencyDescription": "Coste, comportamiento de caché y forma media de sesión de OpenCode Go.", + "model.noEfficiencyTitle": "Sin datos de eficiencia", + "model.noEfficiencyDescription": "Los datos de eficiencia aparecen después de que llegue uso.", + "model.cost": "Coste", + "model.totalSpend": "gasto total", + "model.costPerMillion": "Coste / 1 M", + "model.inputOutput": "entrada / salida", + "model.observedTokens": "todos los tokens observados", + "model.costSession": "Coste / sesión", + "model.average": "media", + "model.tokensSession": "Tokens / sesión", + "model.cacheRatio": "Ratio de caché", + "model.inputTokens": "tokens de entrada", + "model.geoDescription": "Tokens del modelo de OpenCode Go usados por país.", + "model.noGeoTitle": "Sin datos geográficos", + "model.noGeoDescription": "Ninguna fila geográfica de OpenCode Go coincidió con este modelo.", + "model.worldMap": "Mapa mundial del uso de tokens del modelo por país", + "model.peersDescription": "Modelos cercanos por volumen reciente de tokens de OpenCode Go.", + "model.noPeersTitle": "Sin modelos similares", + "model.noPeersDescription": "Las clasificaciones de modelos similares aparecen después de que llegue uso.", + "model.noUsageLastWeek": "Sin uso la semana pasada", + "model.newThisWeek": "Nuevo esta semana", + "model.vsPreviousWeek": "{{change}} vs semana anterior", + "model.pdf": "PDF", + "format.users": "usuarios", + "format.tokens": "tokens", +} as const diff --git a/packages/stats/app/src/i18n/fr.ts b/packages/stats/app/src/i18n/fr.ts new file mode 100644 index 000000000000..83b372f4c50e --- /dev/null +++ b/packages/stats/app/src/i18n/fr.ts @@ -0,0 +1,227 @@ +export const dict = { + "app.title": "Classements d'utilisation des modèles d'IA | OpenCode Data", + "app.description": + "Explorez l'utilisation d'OpenCode Go par modèle d'IA, avec le volume de tokens, les classements, la part de marché, le prix des tokens, le coût par session, le taux de cache et les répartitions géographiques.", + "app.unfurlAlt": "Logo textuel OpenCode Data sur un fond sombre à motif", + "nav.dataHome": "Accueil des données", + "nav.topModels": "Meilleurs modèles", + "nav.leaderboard": "Classement", + "nav.uniqueUsers": "Utilisateurs uniques", + "nav.sessionCost": "Coût par session", + "nav.tokenCost": "Coût des tokens", + "nav.cacheRatio": "Taux de cache", + "nav.marketShare": "Part de marché", + "nav.geoBreakdown": "Répartition géographique", + "nav.overview": "Aperçu", + "nav.usage": "Utilisation", + "nav.users": "Utilisateurs", + "nav.efficiency": "Efficacité", + "nav.peers": "Modèles proches", + "nav.models": "Modèles", + "header.brandLabel": "Accueil des données", + "header.sectionNavLabel": "Sections de données", + "header.githubAria": "Ajouter une étoile à OpenCode sur GitHub", + "header.github": "GitHub", + "header.tryOpenCode": "Essayer OpenCode", + "header.openNav": "Ouvrir la navigation", + "header.closeNav": "Fermer la navigation", + "theme.groupLabel": "Thème", + "theme.dark": "Sombre", + "theme.light": "Clair", + "theme.system": "Système", + "footer.modelData": "Données des modèles", + "footer.legal": "Mentions légales", + "footer.connect": "Contact", + "footer.newsletter": "Newsletter", + "footer.newsletterBody": "Soyez informé en premier des nouvelles versions.", + "footer.language": "Langue", + "footer.subscribe": "S'abonner", + "footer.terms": "Conditions d'utilisation", + "footer.privacy": "Politique de confidentialité", + "footer.contact": "Nous contacter", + "footer.community": "Communauté", + "footer.youtube": "YouTube", + "footer.homeAria": "Accueil OpenCode", + "footer.status": "Tous les systèmes sont opérationnels", + "footer.copyright": "© 2026 Anomaly Innovations Inc.", + "bridge.learnMore": "EN SAVOIR PLUS", + "modal.closeNewsletter": "Fermer l'inscription à la newsletter", + "modal.title": "Newsletter OpenCode", + "modal.body": "Soyez informé en premier\ndes nouvelles versions.", + "modal.email": "Adresse e-mail", + "modal.subscribe": "S'abonner", + "modal.subscribing": "Inscription...", + "modal.success": "Vous êtes inscrit.", + "modal.error": "Échec de l'inscription", + "product.allUsers": "Tous les utilisateurs", + "product.zen": "Zen", + "product.go": "Go", + "range.1D": "1 jour", + "range.1W": "1 semaine", + "range.2W": "2 semaines", + "range.1M": "1 mois", + "range.2M": "2 mois", + "chart.daily": "Quotidien", + "chart.input": "Entrée", + "chart.output": "Sortie", + "chart.cached": "Mis en cache", + "chart.uncached": "Non mis en cache", + "chart.ratio": "Ratio", + "chart.model": "Modèle", + "chart.cacheRatio": "Taux de cache", + "chart.costSession": "Coût/session", + "chart.tokensSession": "Tokens/session", + "chart.costPerSession": "COÛT / SESSION", + "chart.tokensPerSession": "TOKENS / SESSION", + "chart.live": "En direct", + "chart.percent": "pourcentage", + "chart.leaderboardAria": "Classement des tokens par modèle", + "chart.scrollableLeaderboardAria": "Classement déroulant des tokens par modèle", + "chart.byAuthor": "par {{author}}", + "home.updated": "Mis à jour", + "home.noRows": "Aucune ligne pour l'instant", + "home.justNow": "à l'instant", + "home.heroCopy": "Voyez quels modèles gagnent en usage réel, comment la répartition évolue et ce que cela signifie pour les coûts.", + "home.loadingTitle": "Chargement des données", + "home.loadingDescription": "Lecture des agrégats de modèles.", + "home.usageTitle": "Utilisation", + "home.topModelsDescription": "Utilisation des modèles dans OpenCode Go.", + "home.noUsageTitle": "Aucune donnée d'utilisation", + "home.noUsageDescription": "Aucune ligne de modèle ne correspondait à ce produit et à cette période.", + "home.noLeaderboardTitle": "Aucune donnée de classement", + "home.noLeaderboardDescription": "Aucune ligne de modèle ne correspondait à ce produit et à cette période.", + "home.productFilter": "Filtre produit", + "home.dateRange": "Période", + "home.stackedUsageChart": "Graphique empilé d'utilisation des meilleurs modèles", + "home.total": "total", + "home.modelUsers": "utilisateurs du modèle", + "home.new": "Nouveau", + "home.uniqueUsersTitle": "Utilisateurs uniques", + "home.uniqueUsersDescription": "Utilisateurs uniques quotidiens d'OpenCode Go par modèle.", + "home.noUserDataTitle": "Aucune donnée utilisateur", + "home.noUserDataDescription": "Aucune ligne de modèle avec utilisateurs ne correspondait à cette fenêtre.", + "home.uniqueUsersChart": "Graphique empilé des utilisateurs uniques par modèle", + "home.marketShareTitle": "Part de marché", + "home.marketShareDescription": "Comparez la part de tokens par auteur de modèle.", + "home.noMarketTitle": "Aucune donnée de marché", + "home.noMarketDescription": "Aucune ligne de modèle ne correspondait à cette période.", + "home.marketChart": "Part de marché par auteur de modèle", + "home.noData": "Aucune donnée", + "home.geoTitle": "Répartition géographique", + "home.geoDescription": "Tokens utilisés par pays.", + "home.noGeoTitle": "Aucune donnée géographique", + "home.noGeoDescription": "Aucune ligne géographique ne correspondait à cette période.", + "home.worldMap": "Carte mondiale de l'utilisation des tokens par pays", + "home.geoMapTitle": "Carte de répartition géographique", + "home.unknown": "Inconnu", + "home.tokenCostTitle": "Coût des tokens", + "home.tokenCostDescription": "Prix par million de tokens.", + "home.noTokenCostTitle": "Aucune donnée de coût des tokens", + "home.noTokenCostDescription": "Aucune ligne de modèle avec coût ne correspondait à ce produit.", + "home.cacheRatioTitle": "Taux de cache", + "home.cacheRatioDescription": "Part des tokens d'entrée servis depuis le cache.", + "home.noCacheTitle": "Aucune donnée de taux de cache", + "home.noCacheDescription": "Aucune ligne de modèle avec tokens d'entrée ne correspondait à ce produit.", + "home.sessionCostTitle": "Coût par session", + "home.sessionCostDescription": "Coût moyen par session.", + "home.noSessionCostTitle": "Aucune donnée de coût par session", + "home.noSessionCostDescription": "Aucune ligne de modèle avec sessions ne correspondait à ce produit.", + "home.costSession": "Coût/session", + "lab.title": "Utilisation et classements des modèles d'IA {{lab}} | OpenCode Data", + "lab.description": + "Comparez les modèles {{lab}} utilisés dans OpenCode Go, avec l'utilisation des tokens, les classements de modèles, les fenêtres de contexte, les dates de sortie, les coûts et les données propres aux modèles.", + "lab.loadingTitle": "Laboratoire de modèles", + "lab.loadingDescription": "Lecture de la disponibilité des modèles et de l'utilisation récente d'OpenCode.", + "lab.notFound": "Aucun modèle ne correspondait à ce laboratoire.", + "lab.heroPrefix": "Explorez {{count}} modèles {{lab}} utilisés dans OpenCode", + "lab.heroIncluding": "dont {{models}}", + "lab.heroSuffix": "Comparez l'utilisation récente des tokens, les fenêtres de contexte, les dates de sortie et les données propres aux modèles.", + "lab.tokensProcessed": "Tokens traités", + "lab.pending": "En attente", + "lab.usageAfterActivity": "L'utilisation apparaît après l'arrivée de l'activité du modèle", + "lab.latestRelease": "Dernière sortie {{date}}", + "lab.shareOfUsage": "{{share}} de l'utilisation récente d'OpenCode", + "lab.usageTitle": "Utilisation des tokens {{lab}}", + "lab.usageDescription": "Volume quotidien de tokens OpenCode sur les deux derniers mois.", + "lab.noUsageTitle": "Aucune utilisation pour l'instant", + "lab.noUsageDescription": "L'utilisation récente des tokens apparaîtra ici dès que ce laboratoire aura de l'activité.", + "lab.dailyTokenChart": "Graphique quotidien d'utilisation des tokens {{lab}}", + "lab.dailyTokens": "Tokens quotidiens", + "lab.tokens": "tokens", + "lab.modelsTitle": "Modèles {{lab}}", + "lab.modelsDescription": "Détails du catalogue plus utilisation récente.", + "lab.recentUsageAndLimits": "Utilisation récente et limites.", + "lab.usage": "Utilisation", + "lab.share": "Part", + "model.title": "Utilisation, coût et rang de {{model}} | OpenCode Data", + "model.description": + "Consultez les données d'utilisation OpenCode Go de {{model}}, avec le volume de tokens, le rang hebdomadaire, la répartition des tokens, les coûts, le taux de cache, les sessions, les répartitions géographiques et les modèles proches.", + "model.loadingTitle": "Données du modèle", + "model.loadingDescription": "Lecture des agrégats du modèle.", + "model.loadingProfile": "Lecture du profil du modèle.", + "model.noDataTitle": "Aucune donnée de modèle", + "model.noDataDescription": "Essayez d'ouvrir un modèle depuis le classement.", + "model.noMatched": "Aucun fait de modèle ni aucune ligne d'utilisation ne correspondait à {{id}}.", + "model.fallback": "Modèle", + "model.catalogFallback": "Faits du modèle issus de l'index partagé des modèles. L'utilisation OpenCode Go apparaîtra dès que ce modèle aura de l'activité.", + "model.unranked": "Non classé dans l'utilisation OpenCode Go de la semaine dernière", + "model.ranked": "Classé #{{rank}} dans l'utilisation OpenCode Go de la semaine dernière", + "model.observedVolume": "avec {{share}} du volume 2M observé.", + "model.weights": "Poids du modèle : {{label}}", + "model.rank": "Rang 7 j", + "model.profile": "Profil du modèle", + "model.listed": "Répertorié", + "model.noCurrentUsage": "Aucune utilisation OpenCode Go dans la fenêtre de données actuelle.", + "model.facts": "Faits du modèle", + "model.context": "Contexte", + "model.output": "Sortie", + "model.knowledge": "Connaissances", + "model.release": "Sortie", + "model.inputs": "Entrées", + "model.overviewDescription": "Tokens OpenCode Go récents, utilisateurs uniques et position sur le marché.", + "model.noSummaryTitle": "Aucun résumé d'utilisation", + "model.noSummaryDescription": "Ce modèle n'a pas encore de lignes d'utilisation OpenCode Go.", + "model.tokens": "Tokens", + "model.uniqueUsers": "Utilisateurs uniques", + "model.lastTwoMonths": "deux derniers mois", + "model.sessions": "Sessions", + "model.completedSessions": "sessions terminées", + "model.tokenShare": "Part de tokens", + "model.totalModels": "{{count}} modèles", + "model.momentum": "Dynamique", + "model.vsPreviousWindow": "vs fenêtre précédente", + "model.usageDescription": "Volume quotidien de tokens OpenCode Go sur la fenêtre récente de deux mois.", + "model.noUsageTitle": "Aucune utilisation", + "model.noUsageDescription": "Aucune utilisation n'est arrivée dans la fenêtre actuelle.", + "model.dailyTokenChart": "Graphique quotidien d'utilisation des tokens", + "model.usersDescription": "Utilisateurs uniques quotidiens d'OpenCode Go sur la fenêtre récente de deux mois.", + "model.noUsersTitle": "Aucune donnée utilisateur", + "model.noUsersDescription": "Aucune ligne avec utilisateurs n'est arrivée dans la fenêtre actuelle.", + "model.dailyUserChart": "Graphique quotidien des utilisateurs uniques", + "model.efficiencyDescription": "Coût, comportement du cache et forme moyenne des sessions OpenCode Go.", + "model.noEfficiencyTitle": "Aucune donnée d'efficacité", + "model.noEfficiencyDescription": "Les données d'efficacité apparaissent après l'arrivée de l'utilisation.", + "model.cost": "Coût", + "model.totalSpend": "dépense totale", + "model.costPerMillion": "Coût / 1 M", + "model.inputOutput": "entrée / sortie", + "model.observedTokens": "tous les tokens observés", + "model.costSession": "Coût / session", + "model.average": "moyenne", + "model.tokensSession": "Tokens / session", + "model.cacheRatio": "Taux de cache", + "model.inputTokens": "tokens d'entrée", + "model.geoDescription": "Tokens du modèle OpenCode Go utilisés par pays.", + "model.noGeoTitle": "Aucune donnée géographique", + "model.noGeoDescription": "Aucune ligne géographique OpenCode Go ne correspondait à ce modèle.", + "model.worldMap": "Carte mondiale de l'utilisation des tokens du modèle par pays", + "model.peersDescription": "Modèles proches par volume récent de tokens OpenCode Go.", + "model.noPeersTitle": "Aucun modèle proche", + "model.noPeersDescription": "Les classements de modèles proches apparaissent après l'arrivée de l'utilisation.", + "model.noUsageLastWeek": "Aucune utilisation la semaine dernière", + "model.newThisWeek": "Nouveau cette semaine", + "model.vsPreviousWeek": "{{change}} vs semaine précédente", + "model.pdf": "PDF", + "format.users": "utilisateurs", + "format.tokens": "tokens", +} as const diff --git a/packages/stats/app/src/i18n/it.ts b/packages/stats/app/src/i18n/it.ts new file mode 100644 index 000000000000..dd583ec5eddb --- /dev/null +++ b/packages/stats/app/src/i18n/it.ts @@ -0,0 +1,227 @@ +export const dict = { + "app.title": "Classifiche di utilizzo dei modelli IA | OpenCode Data", + "app.description": + "Esplora l'utilizzo di OpenCode Go nei modelli IA, inclusi volume di token, classifiche, quota di mercato, prezzi dei token, costo per sessione, rapporto cache e ripartizioni geografiche.", + "app.unfurlAlt": "Logotipo OpenCode Data su uno sfondo scuro con motivo", + "nav.dataHome": "Home dati", + "nav.topModels": "Modelli principali", + "nav.leaderboard": "Classifica", + "nav.uniqueUsers": "Utenti unici", + "nav.sessionCost": "Costo sessione", + "nav.tokenCost": "Costo token", + "nav.cacheRatio": "Rapporto cache", + "nav.marketShare": "Quota di mercato", + "nav.geoBreakdown": "Ripartizione geografica", + "nav.overview": "Panoramica", + "nav.usage": "Utilizzo", + "nav.users": "Utenti", + "nav.efficiency": "Efficienza", + "nav.peers": "Modelli simili", + "nav.models": "Modelli", + "header.brandLabel": "Home dati", + "header.sectionNavLabel": "Sezioni dati", + "header.githubAria": "Aggiungi una stella a OpenCode su GitHub", + "header.github": "GitHub", + "header.tryOpenCode": "Prova OpenCode", + "header.openNav": "Apri navigazione", + "header.closeNav": "Chiudi navigazione", + "theme.groupLabel": "Tema", + "theme.dark": "Scuro", + "theme.light": "Chiaro", + "theme.system": "Sistema", + "footer.modelData": "Dati modello", + "footer.legal": "Note legali", + "footer.connect": "Contatti", + "footer.newsletter": "Newsletter", + "footer.newsletterBody": "Scopri per primo le nuove versioni.", + "footer.language": "Lingua", + "footer.subscribe": "Iscriviti", + "footer.terms": "Termini di servizio", + "footer.privacy": "Informativa sulla privacy", + "footer.contact": "Contattaci", + "footer.community": "Community", + "footer.youtube": "YouTube", + "footer.homeAria": "Home OpenCode", + "footer.status": "Tutti i sistemi sono operativi", + "footer.copyright": "© 2026 Anomaly Innovations Inc.", + "bridge.learnMore": "SCOPRI DI PIÙ", + "modal.closeNewsletter": "Chiudi iscrizione alla newsletter", + "modal.title": "Newsletter OpenCode", + "modal.body": "Scopri per primo\nle nuove versioni.", + "modal.email": "Indirizzo email", + "modal.subscribe": "Iscriviti", + "modal.subscribing": "Iscrizione in corso...", + "modal.success": "Iscrizione completata.", + "modal.error": "Iscrizione non riuscita", + "product.allUsers": "Tutti gli utenti", + "product.zen": "Zen", + "product.go": "Go", + "range.1D": "1 giorno", + "range.1W": "1 settimana", + "range.2W": "2 settimane", + "range.1M": "1 mese", + "range.2M": "2 mesi", + "chart.daily": "Giornaliero", + "chart.input": "Input", + "chart.output": "Output", + "chart.cached": "In cache", + "chart.uncached": "Non in cache", + "chart.ratio": "Rapporto", + "chart.model": "Modello", + "chart.cacheRatio": "Rapporto cache", + "chart.costSession": "Costo/sessione", + "chart.tokensSession": "Token/sessione", + "chart.costPerSession": "COSTO / SESSIONE", + "chart.tokensPerSession": "TOKEN / SESSIONE", + "chart.live": "Live", + "chart.percent": "percentuale", + "chart.leaderboardAria": "Classifica token dei modelli", + "chart.scrollableLeaderboardAria": "Classifica token dei modelli scorrevole", + "chart.byAuthor": "di {{author}}", + "home.updated": "Aggiornato", + "home.noRows": "Ancora nessuna riga", + "home.justNow": "proprio ora", + "home.heroCopy": "Scopri quali modelli stanno vincendo nell'uso reale, come cambia il mix e cosa significa per i costi.", + "home.loadingTitle": "Caricamento dati", + "home.loadingDescription": "Lettura degli aggregati dei modelli.", + "home.usageTitle": "Utilizzo", + "home.topModelsDescription": "Utilizzo dei modelli in OpenCode Go.", + "home.noUsageTitle": "Nessun dato di utilizzo", + "home.noUsageDescription": "Nessuna riga modello corrispondeva a questo prodotto e intervallo.", + "home.noLeaderboardTitle": "Nessun dato di classifica", + "home.noLeaderboardDescription": "Nessuna riga modello corrispondeva a questo prodotto e intervallo.", + "home.productFilter": "Filtro prodotto", + "home.dateRange": "Intervallo date", + "home.stackedUsageChart": "Grafico di utilizzo impilato dei modelli principali", + "home.total": "totale", + "home.modelUsers": "utenti del modello", + "home.new": "Nuovo", + "home.uniqueUsersTitle": "Utenti unici", + "home.uniqueUsersDescription": "Utenti unici giornalieri di OpenCode Go per modello.", + "home.noUserDataTitle": "Nessun dato utente", + "home.noUserDataDescription": "Nessuna riga modello con utenti corrispondeva a questa finestra.", + "home.uniqueUsersChart": "Grafico impilato degli utenti unici per modello", + "home.marketShareTitle": "Quota di mercato", + "home.marketShareDescription": "Confronta la quota di token per autore del modello.", + "home.noMarketTitle": "Nessun dato di mercato", + "home.noMarketDescription": "Nessuna riga modello corrispondeva a questo intervallo.", + "home.marketChart": "Quota di mercato per autore del modello", + "home.noData": "Nessun dato", + "home.geoTitle": "Ripartizione geografica", + "home.geoDescription": "Token usati per paese.", + "home.noGeoTitle": "Nessun dato geografico", + "home.noGeoDescription": "Nessuna riga geografica corrispondeva a questo intervallo.", + "home.worldMap": "Mappa mondiale dell'utilizzo dei token per paese", + "home.geoMapTitle": "Mappa della ripartizione geografica", + "home.unknown": "Sconosciuto", + "home.tokenCostTitle": "Costo token", + "home.tokenCostDescription": "Prezzo per 1 M di token.", + "home.noTokenCostTitle": "Nessun dato sul costo dei token", + "home.noTokenCostDescription": "Nessuna riga modello con costi corrispondeva a questo prodotto.", + "home.cacheRatioTitle": "Rapporto cache", + "home.cacheRatioDescription": "Quota di token di input serviti dalla cache.", + "home.noCacheTitle": "Nessun dato sul rapporto cache", + "home.noCacheDescription": "Nessuna riga modello con token di input corrispondeva a questo prodotto.", + "home.sessionCostTitle": "Costo sessione", + "home.sessionCostDescription": "Costo medio per sessione.", + "home.noSessionCostTitle": "Nessun dato sul costo sessione", + "home.noSessionCostDescription": "Nessuna riga modello con sessioni corrispondeva a questo prodotto.", + "home.costSession": "Costo/sessione", + "lab.title": "Utilizzo e classifiche dei modelli IA {{lab}} | OpenCode Data", + "lab.description": + "Confronta i modelli {{lab}} usati in OpenCode Go, inclusi utilizzo dei token, classifiche dei modelli, finestre di contesto, date di rilascio, costi e dati specifici del modello.", + "lab.loadingTitle": "Laboratorio modelli", + "lab.loadingDescription": "Lettura della disponibilità dei modelli e dell'utilizzo recente di OpenCode.", + "lab.notFound": "Nessun modello corrispondeva a questo laboratorio.", + "lab.heroPrefix": "Esplora {{count}} modelli {{lab}} usati in OpenCode", + "lab.heroIncluding": "inclusi {{models}}", + "lab.heroSuffix": "Confronta l'utilizzo recente dei token, le finestre di contesto, le date di rilascio e i dati specifici del modello.", + "lab.tokensProcessed": "Token elaborati", + "lab.pending": "In sospeso", + "lab.usageAfterActivity": "L'utilizzo appare dopo l'arrivo dell'attività del modello", + "lab.latestRelease": "Ultima versione {{date}}", + "lab.shareOfUsage": "{{share}} dell'utilizzo recente di OpenCode", + "lab.usageTitle": "Utilizzo token {{lab}}", + "lab.usageDescription": "Volume giornaliero di token OpenCode negli ultimi due mesi.", + "lab.noUsageTitle": "Ancora nessun utilizzo", + "lab.noUsageDescription": "L'utilizzo recente dei token apparirà qui quando questo laboratorio avrà attività.", + "lab.dailyTokenChart": "Grafico giornaliero dell'utilizzo token {{lab}}", + "lab.dailyTokens": "Token giornalieri", + "lab.tokens": "token", + "lab.modelsTitle": "Modelli {{lab}}", + "lab.modelsDescription": "Dettagli del catalogo più utilizzo recente.", + "lab.recentUsageAndLimits": "Utilizzo recente e limiti.", + "lab.usage": "Utilizzo", + "lab.share": "Quota", + "model.title": "Utilizzo, costo e posizione di {{model}} | OpenCode Data", + "model.description": + "Visualizza i dati di utilizzo di {{model}} in OpenCode Go, inclusi volume di token, rango settimanale, mix di token, costi, rapporto cache, sessioni, ripartizioni geografiche e modelli simili.", + "model.loadingTitle": "Dati modello", + "model.loadingDescription": "Lettura degli aggregati del modello.", + "model.loadingProfile": "Lettura del profilo del modello.", + "model.noDataTitle": "Nessun dato modello", + "model.noDataDescription": "Prova ad aprire un modello dalla classifica.", + "model.noMatched": "Nessun fatto modello o riga di utilizzo corrispondeva a {{id}}.", + "model.fallback": "Modello", + "model.catalogFallback": "Fatti del modello dall'indice condiviso dei modelli. L'utilizzo di OpenCode Go appare quando questo modello ha attività.", + "model.unranked": "Non classificato nell'utilizzo OpenCode Go della scorsa settimana", + "model.ranked": "Posizione #{{rank}} nell'utilizzo OpenCode Go della scorsa settimana", + "model.observedVolume": "con {{share}} del volume 2M osservato.", + "model.weights": "Pesi del modello: {{label}}", + "model.rank": "Posizione 7G", + "model.profile": "Profilo modello", + "model.listed": "Elencato", + "model.noCurrentUsage": "Nessun utilizzo di OpenCode Go nella finestra dati attuale.", + "model.facts": "Fatti del modello", + "model.context": "Contesto", + "model.output": "Output", + "model.knowledge": "Conoscenza", + "model.release": "Versione", + "model.inputs": "Input", + "model.overviewDescription": "Token recenti di OpenCode Go, utenti unici e posizione di mercato.", + "model.noSummaryTitle": "Nessun riepilogo di utilizzo", + "model.noSummaryDescription": "Questo modello non ha ancora righe di utilizzo di OpenCode Go.", + "model.tokens": "Token", + "model.uniqueUsers": "Utenti unici", + "model.lastTwoMonths": "ultimi due mesi", + "model.sessions": "Sessioni", + "model.completedSessions": "sessioni completate", + "model.tokenShare": "Quota token", + "model.totalModels": "{{count}} modelli", + "model.momentum": "Slancio", + "model.vsPreviousWindow": "vs finestra precedente", + "model.usageDescription": "Volume giornaliero di token OpenCode Go nella recente finestra di due mesi.", + "model.noUsageTitle": "Nessun utilizzo", + "model.noUsageDescription": "Nessun utilizzo è arrivato nella finestra attuale.", + "model.dailyTokenChart": "Grafico giornaliero di utilizzo dei token", + "model.usersDescription": "Utenti unici giornalieri di OpenCode Go nella recente finestra di due mesi.", + "model.noUsersTitle": "Nessun dato utente", + "model.noUsersDescription": "Nessuna riga con utenti è arrivata nella finestra attuale.", + "model.dailyUserChart": "Grafico giornaliero degli utenti unici", + "model.efficiencyDescription": "Costi, comportamento della cache e forma media della sessione OpenCode Go.", + "model.noEfficiencyTitle": "Nessun dato di efficienza", + "model.noEfficiencyDescription": "I dati di efficienza appaiono dopo l'arrivo dell'utilizzo.", + "model.cost": "Costo", + "model.totalSpend": "spesa totale", + "model.costPerMillion": "Costo / 1 M", + "model.inputOutput": "input / output", + "model.observedTokens": "tutti i token osservati", + "model.costSession": "Costo / sessione", + "model.average": "media", + "model.tokensSession": "Token / sessione", + "model.cacheRatio": "Rapporto cache", + "model.inputTokens": "token di input", + "model.geoDescription": "Token del modello OpenCode Go usati per paese.", + "model.noGeoTitle": "Nessun dato geografico", + "model.noGeoDescription": "Nessuna riga geografica OpenCode Go corrispondeva a questo modello.", + "model.worldMap": "Mappa mondiale dell'utilizzo dei token del modello per paese", + "model.peersDescription": "Modelli vicini per volume recente di token OpenCode Go.", + "model.noPeersTitle": "Nessun modello simile", + "model.noPeersDescription": "Le classifiche dei modelli simili appaiono dopo l'arrivo dell'utilizzo.", + "model.noUsageLastWeek": "Nessun utilizzo la scorsa settimana", + "model.newThisWeek": "Nuovo questa settimana", + "model.vsPreviousWeek": "{{change}} vs settimana precedente", + "model.pdf": "PDF", + "format.users": "utenti", + "format.tokens": "token", +} as const diff --git a/packages/stats/app/src/i18n/ja.ts b/packages/stats/app/src/i18n/ja.ts new file mode 100644 index 000000000000..75208aaebf52 --- /dev/null +++ b/packages/stats/app/src/i18n/ja.ts @@ -0,0 +1,229 @@ +import type { Key } from "../i18n" + +export const dict = { + "app.title": "AIモデル使用ランキング | OpenCodeデータ", + "app.description": + "OpenCode GoでのAIモデル利用状況を、トークン量、ランキング、マーケットシェア、トークン価格、セッションコスト、キャッシュ比率、地域別内訳まで確認できます。", + "app.unfurlAlt": "暗いパターン背景上のOpenCode Dataワードマーク", + "nav.dataHome": "データホーム", + "nav.topModels": "上位モデル", + "nav.leaderboard": "ランキング", + "nav.uniqueUsers": "ユニークユーザー", + "nav.sessionCost": "セッションコスト", + "nav.tokenCost": "トークンコスト", + "nav.cacheRatio": "キャッシュ比率", + "nav.marketShare": "マーケットシェア", + "nav.geoBreakdown": "地域別内訳", + "nav.overview": "概要", + "nav.usage": "使用量", + "nav.users": "ユーザー", + "nav.efficiency": "効率", + "nav.peers": "類似モデル", + "nav.models": "モデル", + "header.brandLabel": "データホーム", + "header.sectionNavLabel": "データセクション", + "header.githubAria": "GitHubでOpenCodeにスターを付ける", + "header.github": "GitHub", + "header.tryOpenCode": "OpenCodeを試す", + "header.openNav": "ナビゲーションを開く", + "header.closeNav": "ナビゲーションを閉じる", + "theme.groupLabel": "テーマ", + "theme.dark": "ダーク", + "theme.light": "ライト", + "theme.system": "システム", + "footer.modelData": "モデルデータ", + "footer.legal": "法務", + "footer.connect": "つながる", + "footer.newsletter": "ニュースレター", + "footer.newsletterBody": "新しいリリース情報をいち早く受け取れます。", + "footer.language": "言語", + "footer.subscribe": "登録", + "footer.terms": "利用規約", + "footer.privacy": "プライバシーポリシー", + "footer.contact": "お問い合わせ", + "footer.community": "コミュニティ", + "footer.youtube": "YouTube", + "footer.homeAria": "OpenCodeホーム", + "footer.status": "すべてのシステムは正常稼働中", + "footer.copyright": "© 2026 Anomaly Innovations Inc.", + "bridge.learnMore": "詳しく見る", + "modal.closeNewsletter": "ニュースレター登録を閉じる", + "modal.title": "OpenCodeニュースレター", + "modal.body": "新しいリリース情報を\nいち早く受け取れます。", + "modal.email": "メールアドレス", + "modal.subscribe": "登録", + "modal.subscribing": "登録中...", + "modal.success": "登録しました。", + "modal.error": "登録に失敗しました", + "product.allUsers": "すべてのユーザー", + "product.zen": "Zen", + "product.go": "Go", + "range.1D": "1日", + "range.1W": "1週間", + "range.2W": "2週間", + "range.1M": "1か月", + "range.2M": "2か月", + "chart.daily": "日次", + "chart.input": "入力", + "chart.output": "出力", + "chart.cached": "キャッシュ済み", + "chart.uncached": "未キャッシュ", + "chart.ratio": "比率", + "chart.model": "モデル", + "chart.cacheRatio": "キャッシュ比率", + "chart.costSession": "コスト/セッション", + "chart.tokensSession": "トークン/セッション", + "chart.costPerSession": "コスト / セッション", + "chart.tokensPerSession": "トークン / セッション", + "chart.live": "ライブ", + "chart.percent": "パーセント", + "chart.leaderboardAria": "モデルのトークンランキング", + "chart.scrollableLeaderboardAria": "スクロール可能なモデルのトークンランキング", + "chart.byAuthor": "提供元: {{author}}", + "home.updated": "更新済み", + "home.noRows": "まだ行がありません", + "home.justNow": "たった今", + "home.heroCopy": "実際の利用でどのモデルが伸びているか、利用構成がどう変化しているか、それがコストに何を意味するかを確認できます。", + "home.loadingTitle": "データを読み込み中", + "home.loadingDescription": "モデル集計を読み込んでいます。", + "home.usageTitle": "使用量", + "home.topModelsDescription": "OpenCode Goにおけるモデルの使用状況。", + "home.noUsageTitle": "使用データがありません", + "home.noUsageDescription": "このプロダクトと期間に一致するモデル行はありません。", + "home.noLeaderboardTitle": "ランキングデータがありません", + "home.noLeaderboardDescription": "このプロダクトと期間に一致するモデル行はありません。", + "home.productFilter": "プロダクトフィルター", + "home.dateRange": "日付範囲", + "home.stackedUsageChart": "上位モデル使用量の積み上げグラフ", + "home.total": "合計", + "home.modelUsers": "モデルユーザー", + "home.new": "新規", + "home.uniqueUsersTitle": "ユニークユーザー", + "home.uniqueUsersDescription": "モデル別のOpenCode Go日次ユニークユーザー。", + "home.noUserDataTitle": "ユーザーデータがありません", + "home.noUserDataDescription": "この期間に一致するユーザー付きモデル行はありません。", + "home.uniqueUsersChart": "モデル別ユニークユーザーの積み上げグラフ", + "home.marketShareTitle": "マーケットシェア", + "home.marketShareDescription": "モデル作者別にトークンシェアを比較します。", + "home.noMarketTitle": "マーケットデータがありません", + "home.noMarketDescription": "この期間に一致するモデル行はありません。", + "home.marketChart": "モデル作者別マーケットシェア", + "home.noData": "データなし", + "home.geoTitle": "地域別内訳", + "home.geoDescription": "国別のトークン使用量。", + "home.noGeoTitle": "地域データがありません", + "home.noGeoDescription": "この期間に一致する地域行はありません。", + "home.worldMap": "国別トークン使用量の世界地図", + "home.geoMapTitle": "地域別内訳マップ", + "home.unknown": "不明", + "home.tokenCostTitle": "トークンコスト", + "home.tokenCostDescription": "100万トークンあたりの価格。", + "home.noTokenCostTitle": "トークンコストデータがありません", + "home.noTokenCostDescription": "このプロダクトに一致するコスト付きモデル行はありません。", + "home.cacheRatioTitle": "キャッシュ比率", + "home.cacheRatioDescription": "キャッシュから提供された入力トークンの割合。", + "home.noCacheTitle": "キャッシュ比率データがありません", + "home.noCacheDescription": "このプロダクトに一致する入力トークン付きモデル行はありません。", + "home.sessionCostTitle": "セッションコスト", + "home.sessionCostDescription": "セッションあたりの平均コスト。", + "home.noSessionCostTitle": "セッションコストデータがありません", + "home.noSessionCostDescription": "このプロダクトに一致するセッション付きモデル行はありません。", + "home.costSession": "コスト/セッション", + "lab.title": "{{lab}} AIモデル使用量とランキング | OpenCodeデータ", + "lab.description": + "OpenCode Goで使用されている{{lab}}モデルを、トークン使用量、モデルランキング、コンテキストウィンドウ、リリース日、コスト、モデル別データで比較できます。", + "lab.loadingTitle": "モデルラボ", + "lab.loadingDescription": "モデルの利用可否と最近のOpenCode使用状況を読み込んでいます。", + "lab.notFound": "このラボに一致するモデルはありません。", + "lab.heroPrefix": "OpenCodeで使用されている{{count}}件の{{lab}}モデルを確認", + "lab.heroIncluding": "{{models}}など", + "lab.heroSuffix": "最近のトークン使用量、コンテキストウィンドウ、リリース日、モデル別データを比較できます。", + "lab.tokensProcessed": "処理済みトークン", + "lab.pending": "保留中", + "lab.usageAfterActivity": "モデルのアクティビティが届くと使用量が表示されます", + "lab.latestRelease": "最新リリース {{date}}", + "lab.shareOfUsage": "最近のOpenCode使用量の{{share}}", + "lab.usageTitle": "{{lab}}のトークン使用量", + "lab.usageDescription": "過去2か月の日次OpenCodeトークン量。", + "lab.noUsageTitle": "まだ使用量がありません", + "lab.noUsageDescription": "このラボにアクティビティが発生すると、最近のトークン使用量がここに表示されます。", + "lab.dailyTokenChart": "{{lab}}の日次トークン使用量グラフ", + "lab.dailyTokens": "日次トークン", + "lab.tokens": "トークン", + "lab.modelsTitle": "{{lab}}モデル", + "lab.modelsDescription": "カタログ詳細と最近の使用量。", + "lab.recentUsageAndLimits": "最近の使用量と制限。", + "lab.usage": "使用量", + "lab.share": "シェア", + "model.title": "{{model}}の使用量、コスト、ランク | OpenCodeデータ", + "model.description": + "{{model}}のOpenCode Go使用データを、トークン量、週間ランク、トークン構成、コスト、キャッシュ比率、セッション、地域別内訳、類似モデルまで確認できます。", + "model.loadingTitle": "モデルデータ", + "model.loadingDescription": "モデル集計を読み込んでいます。", + "model.loadingProfile": "モデルプロフィールを読み込んでいます。", + "model.noDataTitle": "モデルデータがありません", + "model.noDataDescription": "ランキングからモデルを開いてみてください。", + "model.noMatched": "{{id}}に一致するモデル情報または使用行はありません。", + "model.fallback": "モデル", + "model.catalogFallback": "共有モデルインデックスのモデル情報です。このモデルにアクティビティが発生するとOpenCode Go使用量が表示されます。", + "model.unranked": "先週のOpenCode Go使用量では未ランク", + "model.ranked": "先週のOpenCode Go使用量で#{{rank}}位", + "model.observedVolume": "観測された2M量の{{share}}。", + "model.weights": "モデル重み: {{label}}", + "model.rank": "7日ランク", + "model.profile": "モデルプロフィール", + "model.listed": "掲載日", + "model.noCurrentUsage": "現在のデータ期間にはOpenCode Go使用量がありません。", + "model.facts": "モデル情報", + "model.context": "コンテキスト", + "model.output": "出力", + "model.knowledge": "知識", + "model.release": "リリース", + "model.inputs": "入力", + "model.overviewDescription": "最近のOpenCode Goトークン、ユニークユーザー、市場での位置。", + "model.noSummaryTitle": "使用概要がありません", + "model.noSummaryDescription": "このモデルにはまだOpenCode Goの使用行がありません。", + "model.tokens": "トークン", + "model.uniqueUsers": "ユニークユーザー", + "model.lastTwoMonths": "過去2か月", + "model.sessions": "セッション", + "model.completedSessions": "完了セッション", + "model.tokenShare": "トークンシェア", + "model.totalModels": "{{count}}件のモデル", + "model.momentum": "勢い", + "model.vsPreviousWindow": "前の期間比", + "model.usageDescription": "直近2か月の期間におけるOpenCode Goの日次トークン量。", + "model.noUsageTitle": "使用量がありません", + "model.noUsageDescription": "現在の期間には使用量がありません。", + "model.dailyTokenChart": "日次トークン使用量グラフ", + "model.usersDescription": "直近2か月の期間におけるOpenCode Goの日次ユニークユーザー。", + "model.noUsersTitle": "ユーザーデータがありません", + "model.noUsersDescription": "現在の期間にはユーザー付き行がありません。", + "model.dailyUserChart": "日次ユニークユーザーグラフ", + "model.efficiencyDescription": "コスト、キャッシュ動作、平均的なOpenCode Goセッションの形。", + "model.noEfficiencyTitle": "効率データがありません", + "model.noEfficiencyDescription": "使用量が届くと効率データが表示されます。", + "model.cost": "コスト", + "model.totalSpend": "総支出", + "model.costPerMillion": "100万あたりのコスト", + "model.inputOutput": "入力 / 出力", + "model.observedTokens": "観測された全トークン", + "model.costSession": "コスト / セッション", + "model.average": "平均", + "model.tokensSession": "トークン / セッション", + "model.cacheRatio": "キャッシュ比率", + "model.inputTokens": "入力トークン", + "model.geoDescription": "国別のOpenCode Goモデルのトークン使用量。", + "model.noGeoTitle": "地域データがありません", + "model.noGeoDescription": "このモデルに一致するOpenCode Go地域行はありません。", + "model.worldMap": "国別モデル別トークン使用量の世界地図", + "model.peersDescription": "最近のOpenCode Goトークン量が近いモデル。", + "model.noPeersTitle": "類似モデルがありません", + "model.noPeersDescription": "使用量が届くと類似モデルのランキングが表示されます。", + "model.noUsageLastWeek": "先週の使用量なし", + "model.newThisWeek": "今週新規", + "model.vsPreviousWeek": "前週比 {{change}}", + "model.pdf": "PDF", + "format.users": "ユーザー", + "format.tokens": "トークン", +} satisfies Record diff --git a/packages/stats/app/src/i18n/ko.ts b/packages/stats/app/src/i18n/ko.ts new file mode 100644 index 000000000000..67cf53027a5c --- /dev/null +++ b/packages/stats/app/src/i18n/ko.ts @@ -0,0 +1,229 @@ +import type { Key } from "../i18n" + +export const dict = { + "app.title": "AI 모델 사용 순위 | OpenCode 데이터", + "app.description": + "OpenCode Go에서 AI 모델이 어떻게 사용되는지 토큰 볼륨, 순위, 시장 점유율, 토큰 가격, 세션 비용, 캐시 비율, 지역별 분포까지 살펴보세요.", + "app.unfurlAlt": "어두운 패턴 배경 위의 OpenCode Data 워드마크", + "nav.dataHome": "데이터 홈", + "nav.topModels": "상위 모델", + "nav.leaderboard": "리더보드", + "nav.uniqueUsers": "순 사용자", + "nav.sessionCost": "세션 비용", + "nav.tokenCost": "토큰 비용", + "nav.cacheRatio": "캐시 비율", + "nav.marketShare": "시장 점유율", + "nav.geoBreakdown": "지역별 분포", + "nav.overview": "개요", + "nav.usage": "사용량", + "nav.users": "사용자", + "nav.efficiency": "효율", + "nav.peers": "비슷한 모델", + "nav.models": "모델", + "header.brandLabel": "데이터 홈", + "header.sectionNavLabel": "데이터 섹션", + "header.githubAria": "GitHub에서 OpenCode에 스타 주기", + "header.github": "GitHub", + "header.tryOpenCode": "OpenCode 사용해 보기", + "header.openNav": "내비게이션 열기", + "header.closeNav": "내비게이션 닫기", + "theme.groupLabel": "테마", + "theme.dark": "다크", + "theme.light": "라이트", + "theme.system": "시스템", + "footer.modelData": "모델 데이터", + "footer.legal": "법률", + "footer.connect": "연결", + "footer.newsletter": "뉴스레터", + "footer.newsletterBody": "새 릴리스를 가장 먼저 받아보세요.", + "footer.language": "언어", + "footer.subscribe": "구독", + "footer.terms": "서비스 약관", + "footer.privacy": "개인정보처리방침", + "footer.contact": "문의하기", + "footer.community": "커뮤니티", + "footer.youtube": "YouTube", + "footer.homeAria": "OpenCode 홈", + "footer.status": "모든 시스템 정상 운영 중", + "footer.copyright": "© 2026 Anomaly Innovations Inc.", + "bridge.learnMore": "더 알아보기", + "modal.closeNewsletter": "뉴스레터 가입 닫기", + "modal.title": "OpenCode 뉴스레터", + "modal.body": "새 릴리스를\n가장 먼저 받아보세요.", + "modal.email": "이메일 주소", + "modal.subscribe": "구독", + "modal.subscribing": "구독 중...", + "modal.success": "구독되었습니다.", + "modal.error": "구독에 실패했습니다", + "product.allUsers": "모든 사용자", + "product.zen": "Zen", + "product.go": "Go", + "range.1D": "1일", + "range.1W": "1주", + "range.2W": "2주", + "range.1M": "1개월", + "range.2M": "2개월", + "chart.daily": "일간", + "chart.input": "입력", + "chart.output": "출력", + "chart.cached": "캐시됨", + "chart.uncached": "캐시 안 됨", + "chart.ratio": "비율", + "chart.model": "모델", + "chart.cacheRatio": "캐시 비율", + "chart.costSession": "비용/세션", + "chart.tokensSession": "토큰/세션", + "chart.costPerSession": "비용 / 세션", + "chart.tokensPerSession": "토큰 / 세션", + "chart.live": "실시간", + "chart.percent": "퍼센트", + "chart.leaderboardAria": "모델 토큰 리더보드", + "chart.scrollableLeaderboardAria": "스크롤 가능한 모델 토큰 리더보드", + "chart.byAuthor": "{{author}} 제공", + "home.updated": "업데이트됨", + "home.noRows": "아직 행이 없습니다", + "home.justNow": "방금 전", + "home.heroCopy": "실제 사용량에서 어떤 모델이 앞서고 있는지, 사용 구성이 어떻게 바뀌는지, 그것이 비용에 어떤 의미인지 확인하세요.", + "home.loadingTitle": "데이터 로딩 중", + "home.loadingDescription": "모델 집계를 읽는 중입니다.", + "home.usageTitle": "사용량", + "home.topModelsDescription": "OpenCode Go 전반의 모델 사용량입니다.", + "home.noUsageTitle": "사용 데이터 없음", + "home.noUsageDescription": "이 제품과 범위에 맞는 모델 행이 없습니다.", + "home.noLeaderboardTitle": "리더보드 데이터 없음", + "home.noLeaderboardDescription": "이 제품과 범위에 맞는 모델 행이 없습니다.", + "home.productFilter": "제품 필터", + "home.dateRange": "날짜 범위", + "home.stackedUsageChart": "상위 모델 사용량 누적 차트", + "home.total": "합계", + "home.modelUsers": "모델 사용자", + "home.new": "신규", + "home.uniqueUsersTitle": "순 사용자", + "home.uniqueUsersDescription": "모델별 일간 OpenCode Go 순 사용자입니다.", + "home.noUserDataTitle": "사용자 데이터 없음", + "home.noUserDataDescription": "이 기간에 맞는 사용자 포함 모델 행이 없습니다.", + "home.uniqueUsersChart": "모델별 순 사용자 누적 차트", + "home.marketShareTitle": "시장 점유율", + "home.marketShareDescription": "모델 작성자별 토큰 점유율을 비교합니다.", + "home.noMarketTitle": "시장 데이터 없음", + "home.noMarketDescription": "이 범위에 맞는 모델 행이 없습니다.", + "home.marketChart": "모델 작성자별 시장 점유율", + "home.noData": "데이터 없음", + "home.geoTitle": "지역별 분포", + "home.geoDescription": "국가별 사용 토큰입니다.", + "home.noGeoTitle": "지역 데이터 없음", + "home.noGeoDescription": "이 범위에 맞는 지역 행이 없습니다.", + "home.worldMap": "국가별 토큰 사용량 세계 지도", + "home.geoMapTitle": "지역별 분포 지도", + "home.unknown": "알 수 없음", + "home.tokenCostTitle": "토큰 비용", + "home.tokenCostDescription": "100만 토큰당 가격입니다.", + "home.noTokenCostTitle": "토큰 비용 데이터 없음", + "home.noTokenCostDescription": "이 제품에 맞는 비용 포함 모델 행이 없습니다.", + "home.cacheRatioTitle": "캐시 비율", + "home.cacheRatioDescription": "캐시에서 제공된 입력 토큰의 비율입니다.", + "home.noCacheTitle": "캐시 비율 데이터 없음", + "home.noCacheDescription": "이 제품에 맞는 입력 토큰 포함 모델 행이 없습니다.", + "home.sessionCostTitle": "세션 비용", + "home.sessionCostDescription": "세션당 평균 비용입니다.", + "home.noSessionCostTitle": "세션 비용 데이터 없음", + "home.noSessionCostDescription": "이 제품에 맞는 세션 포함 모델 행이 없습니다.", + "home.costSession": "비용/세션", + "lab.title": "{{lab}} AI 모델 사용량 및 순위 | OpenCode 데이터", + "lab.description": + "OpenCode Go에서 사용되는 {{lab}} 모델을 토큰 사용량, 모델 순위, 컨텍스트 창, 출시일, 비용, 모델별 데이터까지 비교하세요.", + "lab.loadingTitle": "모델 랩", + "lab.loadingDescription": "모델 가용성과 최근 OpenCode 사용량을 읽는 중입니다.", + "lab.notFound": "이 랩과 일치하는 모델이 없습니다.", + "lab.heroPrefix": "OpenCode에서 사용된 {{count}}개의 {{lab}} 모델 살펴보기", + "lab.heroIncluding": "{{models}} 포함", + "lab.heroSuffix": "최근 토큰 사용량, 컨텍스트 창, 출시일, 모델별 데이터를 비교하세요.", + "lab.tokensProcessed": "처리된 토큰", + "lab.pending": "대기 중", + "lab.usageAfterActivity": "모델 활동이 들어오면 사용량이 표시됩니다", + "lab.latestRelease": "최신 출시 {{date}}", + "lab.shareOfUsage": "최근 OpenCode 사용량의 {{share}}", + "lab.usageTitle": "{{lab}} 토큰 사용량", + "lab.usageDescription": "지난 두 달 동안의 일간 OpenCode 토큰 볼륨입니다.", + "lab.noUsageTitle": "아직 사용량 없음", + "lab.noUsageDescription": "이 랩에 활동이 생기면 최근 토큰 사용량이 여기에 표시됩니다.", + "lab.dailyTokenChart": "{{lab}} 일간 토큰 사용량 차트", + "lab.dailyTokens": "일간 토큰", + "lab.tokens": "토큰", + "lab.modelsTitle": "{{lab}} 모델", + "lab.modelsDescription": "카탈로그 세부 정보와 최근 사용량입니다.", + "lab.recentUsageAndLimits": "최근 사용량과 한도입니다.", + "lab.usage": "사용량", + "lab.share": "점유율", + "model.title": "{{model}} 사용량, 비용 및 순위 | OpenCode 데이터", + "model.description": + "{{model}}의 OpenCode Go 사용 데이터를 토큰 볼륨, 주간 순위, 토큰 구성, 비용, 캐시 비율, 세션, 지역별 분포, 비슷한 모델까지 확인하세요.", + "model.loadingTitle": "모델 데이터", + "model.loadingDescription": "모델 집계를 읽는 중입니다.", + "model.loadingProfile": "모델 프로필을 읽는 중입니다.", + "model.noDataTitle": "모델 데이터 없음", + "model.noDataDescription": "리더보드에서 모델을 열어보세요.", + "model.noMatched": "{{id}}와 일치하는 모델 정보나 사용 행이 없습니다.", + "model.fallback": "모델", + "model.catalogFallback": "공유 모델 인덱스의 모델 정보입니다. 이 모델에 활동이 생기면 OpenCode Go 사용량이 표시됩니다.", + "model.unranked": "지난주 OpenCode Go 사용량에서 순위 없음", + "model.ranked": "지난주 OpenCode Go 사용량에서 #{{rank}}위", + "model.observedVolume": "관측된 2M 볼륨의 {{share}}.", + "model.weights": "모델 가중치: {{label}}", + "model.rank": "7일 순위", + "model.profile": "모델 프로필", + "model.listed": "등록됨", + "model.noCurrentUsage": "현재 데이터 기간에는 OpenCode Go 사용량이 없습니다.", + "model.facts": "모델 정보", + "model.context": "컨텍스트", + "model.output": "출력", + "model.knowledge": "지식", + "model.release": "출시", + "model.inputs": "입력", + "model.overviewDescription": "최근 OpenCode Go 토큰, 순 사용자, 시장 위치입니다.", + "model.noSummaryTitle": "사용 요약 없음", + "model.noSummaryDescription": "이 모델에는 아직 OpenCode Go 사용 행이 없습니다.", + "model.tokens": "토큰", + "model.uniqueUsers": "순 사용자", + "model.lastTwoMonths": "지난 두 달", + "model.sessions": "세션", + "model.completedSessions": "완료된 세션", + "model.tokenShare": "토큰 점유율", + "model.totalModels": "{{count}}개 모델", + "model.momentum": "모멘텀", + "model.vsPreviousWindow": "이전 기간 대비", + "model.usageDescription": "최근 두 달 기간의 일간 OpenCode Go 토큰 볼륨입니다.", + "model.noUsageTitle": "사용량 없음", + "model.noUsageDescription": "현재 기간에는 사용량이 없습니다.", + "model.dailyTokenChart": "일간 토큰 사용량 차트", + "model.usersDescription": "최근 두 달 기간의 일간 OpenCode Go 순 사용자입니다.", + "model.noUsersTitle": "사용자 데이터 없음", + "model.noUsersDescription": "현재 기간에는 사용자 포함 행이 없습니다.", + "model.dailyUserChart": "일간 순 사용자 차트", + "model.efficiencyDescription": "비용, 캐시 동작, 평균 OpenCode Go 세션 형태입니다.", + "model.noEfficiencyTitle": "효율 데이터 없음", + "model.noEfficiencyDescription": "사용량이 들어오면 효율 데이터가 표시됩니다.", + "model.cost": "비용", + "model.totalSpend": "총 지출", + "model.costPerMillion": "100만당 비용", + "model.inputOutput": "입력 / 출력", + "model.observedTokens": "관측된 전체 토큰", + "model.costSession": "비용 / 세션", + "model.average": "평균", + "model.tokensSession": "토큰 / 세션", + "model.cacheRatio": "캐시 비율", + "model.inputTokens": "입력 토큰", + "model.geoDescription": "국가별 OpenCode Go 모델 토큰 사용량입니다.", + "model.noGeoTitle": "지역 데이터 없음", + "model.noGeoDescription": "이 모델과 일치하는 OpenCode Go 지역 행이 없습니다.", + "model.worldMap": "국가별 모델 토큰 사용량 세계 지도", + "model.peersDescription": "최근 OpenCode Go 토큰 볼륨이 가까운 모델입니다.", + "model.noPeersTitle": "비슷한 모델 없음", + "model.noPeersDescription": "사용량이 들어오면 비슷한 모델 순위가 표시됩니다.", + "model.noUsageLastWeek": "지난주 사용량 없음", + "model.newThisWeek": "이번 주 신규", + "model.vsPreviousWeek": "지난주 대비 {{change}}", + "model.pdf": "PDF", + "format.users": "사용자", + "format.tokens": "토큰", +} satisfies Record diff --git a/packages/stats/app/src/i18n/no.ts b/packages/stats/app/src/i18n/no.ts new file mode 100644 index 000000000000..6f15af0118be --- /dev/null +++ b/packages/stats/app/src/i18n/no.ts @@ -0,0 +1,227 @@ +export const dict = { + "app.title": "Rangeringer for bruk av AI-modeller | OpenCode Data", + "app.description": + "Utforsk bruk av OpenCode Go på tvers av AI-modeller, inkludert tokenvolum, rangeringer, markedsandel, tokenpriser, øktkostnad, cacheandel og geografiske fordelinger.", + "app.unfurlAlt": "OpenCode Data-ordmerke på en mørk mønstret bakgrunn", + "nav.dataHome": "Dataforside", + "nav.topModels": "Toppmodeller", + "nav.leaderboard": "Rangering", + "nav.uniqueUsers": "Unike brukere", + "nav.sessionCost": "Øktkostnad", + "nav.tokenCost": "Tokenkostnad", + "nav.cacheRatio": "Cacheandel", + "nav.marketShare": "Markedsandel", + "nav.geoBreakdown": "Geografisk fordeling", + "nav.overview": "Oversikt", + "nav.usage": "Bruk", + "nav.users": "Brukere", + "nav.efficiency": "Effektivitet", + "nav.peers": "Lignende modeller", + "nav.models": "Modeller", + "header.brandLabel": "Dataforside", + "header.sectionNavLabel": "Dataseksjoner", + "header.githubAria": "Gi OpenCode en stjerne på GitHub", + "header.github": "GitHub", + "header.tryOpenCode": "Prøv OpenCode", + "header.openNav": "Åpne navigasjon", + "header.closeNav": "Lukk navigasjon", + "theme.groupLabel": "Tema", + "theme.dark": "Mørkt", + "theme.light": "Lyst", + "theme.system": "System", + "footer.modelData": "Modelldata", + "footer.legal": "Juridisk", + "footer.connect": "Kontakt", + "footer.newsletter": "Nyhetsbrev", + "footer.newsletterBody": "Vær først ute med å høre om nye utgivelser.", + "footer.language": "Språk", + "footer.subscribe": "Abonner", + "footer.terms": "Tjenestevilkår", + "footer.privacy": "Personvernerklæring", + "footer.contact": "Kontakt oss", + "footer.community": "Fellesskap", + "footer.youtube": "YouTube", + "footer.homeAria": "OpenCode-forside", + "footer.status": "Alle systemer er operative", + "footer.copyright": "© 2026 Anomaly Innovations Inc.", + "bridge.learnMore": "LES MER", + "modal.closeNewsletter": "Lukk påmelding til nyhetsbrev", + "modal.title": "OpenCode-nyhetsbrev", + "modal.body": "Vær først ute med å høre\nom nye utgivelser.", + "modal.email": "E-postadresse", + "modal.subscribe": "Abonner", + "modal.subscribing": "Abonnerer...", + "modal.success": "Du er abonnert.", + "modal.error": "Kunne ikke abonnere", + "product.allUsers": "Alle brukere", + "product.zen": "Zen", + "product.go": "Go", + "range.1D": "1 dag", + "range.1W": "1 uke", + "range.2W": "2 uker", + "range.1M": "1 måned", + "range.2M": "2 måneder", + "chart.daily": "Daglig", + "chart.input": "Inndata", + "chart.output": "Utdata", + "chart.cached": "Bufret", + "chart.uncached": "Ikke bufret", + "chart.ratio": "Forhold", + "chart.model": "Modell", + "chart.cacheRatio": "Cacheandel", + "chart.costSession": "Kostnad/økt", + "chart.tokensSession": "Tokens/økt", + "chart.costPerSession": "KOSTNAD / ØKT", + "chart.tokensPerSession": "TOKENS / ØKT", + "chart.live": "Direkte", + "chart.percent": "prosent", + "chart.leaderboardAria": "Rangering av modelltokens", + "chart.scrollableLeaderboardAria": "Rullbar rangering av modelltokens", + "chart.byAuthor": "av {{author}}", + "home.updated": "Oppdatert", + "home.noRows": "Ingen rader ennå", + "home.justNow": "akkurat nå", + "home.heroCopy": "Se hvilke modeller som vinner reell bruk, hvordan miksen endrer seg, og hva det betyr for kostnadene.", + "home.loadingTitle": "Laster data", + "home.loadingDescription": "Leser modellaggregater.", + "home.usageTitle": "Bruk", + "home.topModelsDescription": "Bruk av modeller på tvers av OpenCode Go.", + "home.noUsageTitle": "Ingen bruksdata", + "home.noUsageDescription": "Ingen modellrader matchet dette produktet og intervallet.", + "home.noLeaderboardTitle": "Ingen rangeringsdata", + "home.noLeaderboardDescription": "Ingen modellrader matchet dette produktet og intervallet.", + "home.productFilter": "Produktfilter", + "home.dateRange": "Datoområde", + "home.stackedUsageChart": "Stablet bruksdiagram for toppmodeller", + "home.total": "totalt", + "home.modelUsers": "modellbrukere", + "home.new": "Ny", + "home.uniqueUsersTitle": "Unike brukere", + "home.uniqueUsersDescription": "Daglige unike OpenCode Go-brukere etter modell.", + "home.noUserDataTitle": "Ingen brukerdata", + "home.noUserDataDescription": "Ingen modellrader med brukere matchet dette vinduet.", + "home.uniqueUsersChart": "Stablet diagram over unike brukere etter modell", + "home.marketShareTitle": "Markedsandel", + "home.marketShareDescription": "Sammenlign tokenandel etter modellforfatter.", + "home.noMarketTitle": "Ingen markedsdata", + "home.noMarketDescription": "Ingen modellrader matchet dette intervallet.", + "home.marketChart": "Markedsandel etter modellforfatter", + "home.noData": "Ingen data", + "home.geoTitle": "Geografisk fordeling", + "home.geoDescription": "Tokens brukt etter land.", + "home.noGeoTitle": "Ingen geodata", + "home.noGeoDescription": "Ingen georader matchet dette intervallet.", + "home.worldMap": "Verdenskart over tokenbruk etter land", + "home.geoMapTitle": "Kart over geografisk fordeling", + "home.unknown": "Ukjent", + "home.tokenCostTitle": "Tokenkostnad", + "home.tokenCostDescription": "Pris per 1 mill. tokens.", + "home.noTokenCostTitle": "Ingen tokenkostnadsdata", + "home.noTokenCostDescription": "Ingen modellrader med kostnader matchet dette produktet.", + "home.cacheRatioTitle": "Cacheandel", + "home.cacheRatioDescription": "Andel inndata-tokens levert fra cache.", + "home.noCacheTitle": "Ingen cacheandelsdata", + "home.noCacheDescription": "Ingen modellrader med inndata-tokens matchet dette produktet.", + "home.sessionCostTitle": "Øktkostnad", + "home.sessionCostDescription": "Gjennomsnittlig kostnad per økt.", + "home.noSessionCostTitle": "Ingen øktkostnadsdata", + "home.noSessionCostDescription": "Ingen modellrader med økter matchet dette produktet.", + "home.costSession": "Kostnad/økt", + "lab.title": "{{lab}} AI-modellbruk og rangeringer | OpenCode Data", + "lab.description": + "Sammenlign {{lab}}-modeller brukt i OpenCode Go, inkludert tokenbruk, modellrangeringer, kontekstvinduer, utgivelsesdatoer, kostnader og modellspesifikke data.", + "lab.loadingTitle": "Modellab", + "lab.loadingDescription": "Leser modelltilgjengelighet og nylig OpenCode-bruk.", + "lab.notFound": "Ingen modeller matchet dette laben.", + "lab.heroPrefix": "Utforsk {{count}} {{lab}}-modeller brukt i OpenCode", + "lab.heroIncluding": "inkludert {{models}}", + "lab.heroSuffix": "Sammenlign nylig tokenbruk, kontekstvinduer, utgivelsesdatoer og modellspesifikke data.", + "lab.tokensProcessed": "Behandlede tokens", + "lab.pending": "Venter", + "lab.usageAfterActivity": "Bruk vises etter at modellaktivitet lander", + "lab.latestRelease": "Siste utgivelse {{date}}", + "lab.shareOfUsage": "{{share}} av nylig OpenCode-bruk", + "lab.usageTitle": "{{lab}} tokenbruk", + "lab.usageDescription": "Daglig OpenCode-tokenvolum over de siste to månedene.", + "lab.noUsageTitle": "Ingen bruk ennå", + "lab.noUsageDescription": "Nylig tokenbruk vises her når denne laben har aktivitet.", + "lab.dailyTokenChart": "Daglig diagram over {{lab}} tokenbruk", + "lab.dailyTokens": "Daglige tokens", + "lab.tokens": "tokens", + "lab.modelsTitle": "{{lab}}-modeller", + "lab.modelsDescription": "Katalogdetaljer pluss nylig bruk.", + "lab.recentUsageAndLimits": "Nylig bruk og grenser.", + "lab.usage": "Bruk", + "lab.share": "Andel", + "model.title": "{{model}} bruk, kostnad og rangering | OpenCode Data", + "model.description": + "Se OpenCode Go-bruksdata for {{model}}, inkludert tokenvolum, ukentlig rangering, tokenmiks, kostnader, cacheandel, økter, geografiske fordelinger og lignende modeller.", + "model.loadingTitle": "Modelldata", + "model.loadingDescription": "Leser modellaggregater.", + "model.loadingProfile": "Leser modellprofilen.", + "model.noDataTitle": "Ingen modelldata", + "model.noDataDescription": "Prøv å åpne en modell fra rangeringen.", + "model.noMatched": "Ingen modellfakta eller bruksrader matchet {{id}}.", + "model.fallback": "Modell", + "model.catalogFallback": "Modellfakta fra den delte modellindeksen. OpenCode Go-bruk vises når denne modellen har aktivitet.", + "model.unranked": "Ikke rangert i forrige ukes OpenCode Go-bruk", + "model.ranked": "Rangert #{{rank}} i forrige ukes OpenCode Go-bruk", + "model.observedVolume": "med {{share}} av observert 2M-volum.", + "model.weights": "Modellvekter: {{label}}", + "model.rank": "7D-rangering", + "model.profile": "Modellprofil", + "model.listed": "Oppført", + "model.noCurrentUsage": "Ingen OpenCode Go-bruk i gjeldende datavindu.", + "model.facts": "Modellfakta", + "model.context": "Kontekst", + "model.output": "Utdata", + "model.knowledge": "Kunnskap", + "model.release": "Utgivelse", + "model.inputs": "Inndata", + "model.overviewDescription": "Nylige OpenCode Go-tokens, unike brukere og markedsposisjon.", + "model.noSummaryTitle": "Ingen bruksoversikt", + "model.noSummaryDescription": "Denne modellen har ingen OpenCode Go-bruksrader ennå.", + "model.tokens": "Tokens", + "model.uniqueUsers": "Unike brukere", + "model.lastTwoMonths": "siste to måneder", + "model.sessions": "Økter", + "model.completedSessions": "fullførte økter", + "model.tokenShare": "Tokenandel", + "model.totalModels": "{{count}} modeller", + "model.momentum": "Momentum", + "model.vsPreviousWindow": "mot forrige vindu", + "model.usageDescription": "Daglig OpenCode Go-tokenvolum i det nylige tomånedersvinduet.", + "model.noUsageTitle": "Ingen bruk", + "model.noUsageDescription": "Ingen bruk landet i gjeldende vindu.", + "model.dailyTokenChart": "Daglig diagram over tokenbruk", + "model.usersDescription": "Daglige unike OpenCode Go-brukere i det nylige tomånedersvinduet.", + "model.noUsersTitle": "Ingen brukerdata", + "model.noUsersDescription": "Ingen rader med brukere landet i gjeldende vindu.", + "model.dailyUserChart": "Daglig diagram over unike brukere", + "model.efficiencyDescription": "Kostnad, cacheatferd og gjennomsnittlig OpenCode Go-øktform.", + "model.noEfficiencyTitle": "Ingen effektivitetsdata", + "model.noEfficiencyDescription": "Effektivitetsdata vises etter at bruk lander.", + "model.cost": "Kostnad", + "model.totalSpend": "totalt forbruk", + "model.costPerMillion": "Kostnad / 1 mill.", + "model.inputOutput": "inndata / utdata", + "model.observedTokens": "alle observerte tokens", + "model.costSession": "Kostnad / økt", + "model.average": "gjennomsnitt", + "model.tokensSession": "Tokens / økt", + "model.cacheRatio": "Cacheandel", + "model.inputTokens": "inndata-tokens", + "model.geoDescription": "OpenCode Go-modelltokens brukt etter land.", + "model.noGeoTitle": "Ingen geodata", + "model.noGeoDescription": "Ingen OpenCode Go-georader matchet denne modellen.", + "model.worldMap": "Verdenskart over modelltokenbruk etter land", + "model.peersDescription": "Nærliggende modeller etter nylig OpenCode Go-tokenvolum.", + "model.noPeersTitle": "Ingen lignende modeller", + "model.noPeersDescription": "Rangeringer for lignende modeller vises etter at bruk lander.", + "model.noUsageLastWeek": "Ingen bruk forrige uke", + "model.newThisWeek": "Ny denne uken", + "model.vsPreviousWeek": "{{change}} mot forrige uke", + "model.pdf": "PDF", + "format.users": "brukere", + "format.tokens": "tokens", +} as const diff --git a/packages/stats/app/src/i18n/pl.ts b/packages/stats/app/src/i18n/pl.ts new file mode 100644 index 000000000000..5bd42e7bf53b --- /dev/null +++ b/packages/stats/app/src/i18n/pl.ts @@ -0,0 +1,227 @@ +export const dict = { + "app.title": "Rankingi użycia modeli AI | OpenCode Data", + "app.description": + "Przeglądaj użycie OpenCode Go w modelach AI, w tym wolumen tokenów, rankingi, udział w rynku, ceny tokenów, koszt sesji, współczynnik cache i podziały geograficzne.", + "app.unfurlAlt": "Znak słowny OpenCode Data na ciemnym wzorzystym tle", + "nav.dataHome": "Strona danych", + "nav.topModels": "Najlepsze modele", + "nav.leaderboard": "Ranking", + "nav.uniqueUsers": "Unikalni użytkownicy", + "nav.sessionCost": "Koszt sesji", + "nav.tokenCost": "Koszt tokenów", + "nav.cacheRatio": "Współczynnik cache", + "nav.marketShare": "Udział w rynku", + "nav.geoBreakdown": "Podział geograficzny", + "nav.overview": "Przegląd", + "nav.usage": "Użycie", + "nav.users": "Użytkownicy", + "nav.efficiency": "Wydajność", + "nav.peers": "Podobne modele", + "nav.models": "Modele", + "header.brandLabel": "Strona danych", + "header.sectionNavLabel": "Sekcje danych", + "header.githubAria": "Dodaj gwiazdkę OpenCode na GitHub", + "header.github": "GitHub", + "header.tryOpenCode": "Wypróbuj OpenCode", + "header.openNav": "Otwórz nawigację", + "header.closeNav": "Zamknij nawigację", + "theme.groupLabel": "Motyw", + "theme.dark": "Ciemny", + "theme.light": "Jasny", + "theme.system": "Systemowy", + "footer.modelData": "Dane modeli", + "footer.legal": "Informacje prawne", + "footer.connect": "Kontakt", + "footer.newsletter": "Newsletter", + "footer.newsletterBody": "Dowiedz się jako pierwszy o nowych wydaniach.", + "footer.language": "Język", + "footer.subscribe": "Subskrybuj", + "footer.terms": "Warunki korzystania", + "footer.privacy": "Polityka prywatności", + "footer.contact": "Skontaktuj się z nami", + "footer.community": "Społeczność", + "footer.youtube": "YouTube", + "footer.homeAria": "Strona główna OpenCode", + "footer.status": "Wszystkie systemy działają", + "footer.copyright": "© 2026 Anomaly Innovations Inc.", + "bridge.learnMore": "DOWIEDZ SIĘ WIĘCEJ", + "modal.closeNewsletter": "Zamknij zapis do newslettera", + "modal.title": "Newsletter OpenCode", + "modal.body": "Dowiedz się jako pierwszy\no nowych wydaniach.", + "modal.email": "Adres e-mail", + "modal.subscribe": "Subskrybuj", + "modal.subscribing": "Subskrybowanie...", + "modal.success": "Subskrypcja aktywna.", + "modal.error": "Nie udało się subskrybować", + "product.allUsers": "Wszyscy użytkownicy", + "product.zen": "Zen", + "product.go": "Go", + "range.1D": "1 dzień", + "range.1W": "1 tydzień", + "range.2W": "2 tygodnie", + "range.1M": "1 miesiąc", + "range.2M": "2 miesiące", + "chart.daily": "Dziennie", + "chart.input": "Wejście", + "chart.output": "Wyjście", + "chart.cached": "Z cache", + "chart.uncached": "Bez cache", + "chart.ratio": "Współczynnik", + "chart.model": "Model", + "chart.cacheRatio": "Współczynnik cache", + "chart.costSession": "Koszt/sesja", + "chart.tokensSession": "Tokeny/sesja", + "chart.costPerSession": "KOSZT / SESJA", + "chart.tokensPerSession": "TOKENY / SESJA", + "chart.live": "Na żywo", + "chart.percent": "procent", + "chart.leaderboardAria": "Ranking tokenów modeli", + "chart.scrollableLeaderboardAria": "Przewijany ranking tokenów modeli", + "chart.byAuthor": "autor: {{author}}", + "home.updated": "Zaktualizowano", + "home.noRows": "Nie ma jeszcze wierszy", + "home.justNow": "przed chwilą", + "home.heroCopy": "Zobacz, które modele wygrywają w realnym użyciu, jak zmienia się miks i co to oznacza dla kosztów.", + "home.loadingTitle": "Ładowanie danych", + "home.loadingDescription": "Odczytywanie agregatów modeli.", + "home.usageTitle": "Użycie", + "home.topModelsDescription": "Użycie modeli w OpenCode Go.", + "home.noUsageTitle": "Brak danych użycia", + "home.noUsageDescription": "Żadne wiersze modeli nie pasowały do tego produktu i zakresu.", + "home.noLeaderboardTitle": "Brak danych rankingu", + "home.noLeaderboardDescription": "Żadne wiersze modeli nie pasowały do tego produktu i zakresu.", + "home.productFilter": "Filtr produktu", + "home.dateRange": "Zakres dat", + "home.stackedUsageChart": "Skumulowany wykres użycia najlepszych modeli", + "home.total": "razem", + "home.modelUsers": "użytkownicy modelu", + "home.new": "Nowy", + "home.uniqueUsersTitle": "Unikalni użytkownicy", + "home.uniqueUsersDescription": "Dzienni unikalni użytkownicy OpenCode Go według modelu.", + "home.noUserDataTitle": "Brak danych użytkowników", + "home.noUserDataDescription": "Żadne wiersze modeli z użytkownikami nie pasowały do tego okna.", + "home.uniqueUsersChart": "Skumulowany wykres unikalnych użytkowników według modelu", + "home.marketShareTitle": "Udział w rynku", + "home.marketShareDescription": "Porównaj udział tokenów według autora modelu.", + "home.noMarketTitle": "Brak danych rynkowych", + "home.noMarketDescription": "Żadne wiersze modeli nie pasowały do tego zakresu.", + "home.marketChart": "Udział w rynku według autora modelu", + "home.noData": "Brak danych", + "home.geoTitle": "Podział geograficzny", + "home.geoDescription": "Tokeny użyte według kraju.", + "home.noGeoTitle": "Brak danych geograficznych", + "home.noGeoDescription": "Żadne wiersze geograficzne nie pasowały do tego zakresu.", + "home.worldMap": "Mapa świata użycia tokenów według kraju", + "home.geoMapTitle": "Mapa podziału geograficznego", + "home.unknown": "Nieznane", + "home.tokenCostTitle": "Koszt tokenów", + "home.tokenCostDescription": "Cena za 1 mln tokenów.", + "home.noTokenCostTitle": "Brak danych kosztu tokenów", + "home.noTokenCostDescription": "Żadne wiersze modeli z kosztami nie pasowały do tego produktu.", + "home.cacheRatioTitle": "Współczynnik cache", + "home.cacheRatioDescription": "Udział tokenów wejściowych obsłużonych z cache.", + "home.noCacheTitle": "Brak danych współczynnika cache", + "home.noCacheDescription": "Żadne wiersze modeli z tokenami wejściowymi nie pasowały do tego produktu.", + "home.sessionCostTitle": "Koszt sesji", + "home.sessionCostDescription": "Średni koszt na sesję.", + "home.noSessionCostTitle": "Brak danych kosztu sesji", + "home.noSessionCostDescription": "Żadne wiersze modeli z sesjami nie pasowały do tego produktu.", + "home.costSession": "Koszt/sesja", + "lab.title": "Użycie i rankingi modeli AI {{lab}} | OpenCode Data", + "lab.description": + "Porównaj modele {{lab}} używane w OpenCode Go, w tym użycie tokenów, rankingi modeli, okna kontekstu, daty wydań, koszty i dane specyficzne dla modeli.", + "lab.loadingTitle": "Laboratorium modeli", + "lab.loadingDescription": "Odczytywanie dostępności modeli i ostatniego użycia OpenCode.", + "lab.notFound": "Żadne modele nie pasowały do tego laboratorium.", + "lab.heroPrefix": "Przeglądaj {{count}} modeli {{lab}} używanych w OpenCode", + "lab.heroIncluding": "w tym {{models}}", + "lab.heroSuffix": "Porównaj ostatnie użycie tokenów, okna kontekstu, daty wydań i dane specyficzne dla modeli.", + "lab.tokensProcessed": "Przetworzone tokeny", + "lab.pending": "Oczekujące", + "lab.usageAfterActivity": "Użycie pojawi się po nadejściu aktywności modelu", + "lab.latestRelease": "Najnowsze wydanie {{date}}", + "lab.shareOfUsage": "{{share}} ostatniego użycia OpenCode", + "lab.usageTitle": "Użycie tokenów {{lab}}", + "lab.usageDescription": "Dzienny wolumen tokenów OpenCode z ostatnich dwóch miesięcy.", + "lab.noUsageTitle": "Jeszcze brak użycia", + "lab.noUsageDescription": "Ostatnie użycie tokenów pojawi się tutaj, gdy to laboratorium będzie mieć aktywność.", + "lab.dailyTokenChart": "Dzienny wykres użycia tokenów {{lab}}", + "lab.dailyTokens": "Dzienne tokeny", + "lab.tokens": "tokeny", + "lab.modelsTitle": "Modele {{lab}}", + "lab.modelsDescription": "Szczegóły katalogu plus ostatnie użycie.", + "lab.recentUsageAndLimits": "Ostatnie użycie i limity.", + "lab.usage": "Użycie", + "lab.share": "Udział", + "model.title": "Użycie, koszt i pozycja {{model}} | OpenCode Data", + "model.description": + "Zobacz dane użycia {{model}} w OpenCode Go, w tym wolumen tokenów, tygodniową pozycję, miks tokenów, koszty, współczynnik cache, sesje, podziały geograficzne i podobne modele.", + "model.loadingTitle": "Dane modelu", + "model.loadingDescription": "Odczytywanie agregatów modelu.", + "model.loadingProfile": "Odczytywanie profilu modelu.", + "model.noDataTitle": "Brak danych modelu", + "model.noDataDescription": "Spróbuj otworzyć model z rankingu.", + "model.noMatched": "Żadne fakty modelu ani wiersze użycia nie pasowały do {{id}}.", + "model.fallback": "Model", + "model.catalogFallback": "Fakty modelu ze wspólnego indeksu modeli. Użycie OpenCode Go pojawi się, gdy ten model będzie mieć aktywność.", + "model.unranked": "Bez pozycji w użyciu OpenCode Go z zeszłego tygodnia", + "model.ranked": "Pozycja #{{rank}} w użyciu OpenCode Go z zeszłego tygodnia", + "model.observedVolume": "z {{share}} obserwowanego wolumenu 2M.", + "model.weights": "Wagi modelu: {{label}}", + "model.rank": "Pozycja 7D", + "model.profile": "Profil modelu", + "model.listed": "W katalogu", + "model.noCurrentUsage": "Brak użycia OpenCode Go w bieżącym oknie danych.", + "model.facts": "Fakty modelu", + "model.context": "Kontekst", + "model.output": "Wyjście", + "model.knowledge": "Wiedza", + "model.release": "Wydanie", + "model.inputs": "Wejścia", + "model.overviewDescription": "Ostatnie tokeny OpenCode Go, unikalni użytkownicy i pozycja rynkowa.", + "model.noSummaryTitle": "Brak podsumowania użycia", + "model.noSummaryDescription": "Ten model nie ma jeszcze wierszy użycia OpenCode Go.", + "model.tokens": "Tokeny", + "model.uniqueUsers": "Unikalni użytkownicy", + "model.lastTwoMonths": "ostatnie dwa miesiące", + "model.sessions": "Sesje", + "model.completedSessions": "zakończone sesje", + "model.tokenShare": "Udział tokenów", + "model.totalModels": "{{count}} modeli", + "model.momentum": "Momentum", + "model.vsPreviousWindow": "vs poprzednie okno", + "model.usageDescription": "Dzienny wolumen tokenów OpenCode Go w ostatnim dwumiesięcznym oknie.", + "model.noUsageTitle": "Brak użycia", + "model.noUsageDescription": "W bieżącym oknie nie pojawiło się użycie.", + "model.dailyTokenChart": "Dzienny wykres użycia tokenów", + "model.usersDescription": "Dzienni unikalni użytkownicy OpenCode Go w ostatnim dwumiesięcznym oknie.", + "model.noUsersTitle": "Brak danych użytkowników", + "model.noUsersDescription": "W bieżącym oknie nie pojawiły się wiersze z użytkownikami.", + "model.dailyUserChart": "Dzienny wykres unikalnych użytkowników", + "model.efficiencyDescription": "Koszt, zachowanie cache i średni kształt sesji OpenCode Go.", + "model.noEfficiencyTitle": "Brak danych wydajności", + "model.noEfficiencyDescription": "Dane wydajności pojawią się po nadejściu użycia.", + "model.cost": "Koszt", + "model.totalSpend": "łączne wydatki", + "model.costPerMillion": "Koszt / 1 mln", + "model.inputOutput": "wejście / wyjście", + "model.observedTokens": "wszystkie obserwowane tokeny", + "model.costSession": "Koszt / sesja", + "model.average": "średnio", + "model.tokensSession": "Tokeny / sesja", + "model.cacheRatio": "Współczynnik cache", + "model.inputTokens": "tokeny wejściowe", + "model.geoDescription": "Tokeny modelu OpenCode Go użyte według kraju.", + "model.noGeoTitle": "Brak danych geograficznych", + "model.noGeoDescription": "Żadne wiersze geograficzne OpenCode Go nie pasowały do tego modelu.", + "model.worldMap": "Mapa świata użycia tokenów modelu według kraju", + "model.peersDescription": "Pobliskie modele według ostatniego wolumenu tokenów OpenCode Go.", + "model.noPeersTitle": "Brak podobnych modeli", + "model.noPeersDescription": "Rankingi podobnych modeli pojawią się po nadejściu użycia.", + "model.noUsageLastWeek": "Brak użycia w zeszłym tygodniu", + "model.newThisWeek": "Nowy w tym tygodniu", + "model.vsPreviousWeek": "{{change}} vs poprzedni tydzień", + "model.pdf": "PDF", + "format.users": "użytkownicy", + "format.tokens": "tokeny", +} as const diff --git a/packages/stats/app/src/i18n/ru.ts b/packages/stats/app/src/i18n/ru.ts new file mode 100644 index 000000000000..da29d34233e3 --- /dev/null +++ b/packages/stats/app/src/i18n/ru.ts @@ -0,0 +1,227 @@ +export const dict = { + "app.title": "Рейтинги использования ИИ-моделей | OpenCode Data", + "app.description": + "Изучайте использование OpenCode Go по ИИ-моделям: объем токенов, рейтинги, долю рынка, цены токенов, стоимость сеанса, долю кэша и географические разрезы.", + "app.unfurlAlt": "Словесный знак OpenCode Data на темном узорном фоне", + "nav.dataHome": "Главная данных", + "nav.topModels": "Лучшие модели", + "nav.leaderboard": "Рейтинг", + "nav.uniqueUsers": "Уникальные пользователи", + "nav.sessionCost": "Стоимость сеанса", + "nav.tokenCost": "Стоимость токенов", + "nav.cacheRatio": "Доля кэша", + "nav.marketShare": "Доля рынка", + "nav.geoBreakdown": "Географический разрез", + "nav.overview": "Обзор", + "nav.usage": "Использование", + "nav.users": "Пользователи", + "nav.efficiency": "Эффективность", + "nav.peers": "Похожие модели", + "nav.models": "Модели", + "header.brandLabel": "Главная данных", + "header.sectionNavLabel": "Разделы данных", + "header.githubAria": "Поставить звезду OpenCode на GitHub", + "header.github": "GitHub", + "header.tryOpenCode": "Попробовать OpenCode", + "header.openNav": "Открыть навигацию", + "header.closeNav": "Закрыть навигацию", + "theme.groupLabel": "Тема", + "theme.dark": "Темная", + "theme.light": "Светлая", + "theme.system": "Системная", + "footer.modelData": "Данные моделей", + "footer.legal": "Правовая информация", + "footer.connect": "Связаться", + "footer.newsletter": "Рассылка", + "footer.newsletterBody": "Узнавайте о новых релизах первыми.", + "footer.language": "Язык", + "footer.subscribe": "Подписаться", + "footer.terms": "Условия обслуживания", + "footer.privacy": "Политика конфиденциальности", + "footer.contact": "Свяжитесь с нами", + "footer.community": "Сообщество", + "footer.youtube": "YouTube", + "footer.homeAria": "Главная OpenCode", + "footer.status": "Все системы работают", + "footer.copyright": "© 2026 Anomaly Innovations Inc.", + "bridge.learnMore": "УЗНАТЬ БОЛЬШЕ", + "modal.closeNewsletter": "Закрыть форму подписки", + "modal.title": "Рассылка OpenCode", + "modal.body": "Узнавайте первыми\nо новых релизах.", + "modal.email": "Адрес электронной почты", + "modal.subscribe": "Подписаться", + "modal.subscribing": "Оформляем подписку...", + "modal.success": "Вы подписаны.", + "modal.error": "Не удалось подписаться", + "product.allUsers": "Все пользователи", + "product.zen": "Zen", + "product.go": "Go", + "range.1D": "1 день", + "range.1W": "1 неделя", + "range.2W": "2 недели", + "range.1M": "1 месяц", + "range.2M": "2 месяца", + "chart.daily": "Ежедневно", + "chart.input": "Ввод", + "chart.output": "Вывод", + "chart.cached": "Из кэша", + "chart.uncached": "Без кэша", + "chart.ratio": "Соотношение", + "chart.model": "Модель", + "chart.cacheRatio": "Доля кэша", + "chart.costSession": "Стоимость/сеанс", + "chart.tokensSession": "Токены/сеанс", + "chart.costPerSession": "СТОИМОСТЬ / СЕАНС", + "chart.tokensPerSession": "ТОКЕНЫ / СЕАНС", + "chart.live": "В реальном времени", + "chart.percent": "процент", + "chart.leaderboardAria": "Рейтинг моделей по токенам", + "chart.scrollableLeaderboardAria": "Прокручиваемый рейтинг моделей по токенам", + "chart.byAuthor": "автор: {{author}}", + "home.updated": "Обновлено", + "home.noRows": "Строк пока нет", + "home.justNow": "только что", + "home.heroCopy": "Посмотрите, какие модели выигрывают в реальном использовании, как меняется состав и что это значит для стоимости.", + "home.loadingTitle": "Загрузка данных", + "home.loadingDescription": "Читаем агрегаты моделей.", + "home.usageTitle": "Использование", + "home.topModelsDescription": "Использование моделей в OpenCode Go.", + "home.noUsageTitle": "Нет данных использования", + "home.noUsageDescription": "Нет строк моделей для этого продукта и диапазона.", + "home.noLeaderboardTitle": "Нет данных рейтинга", + "home.noLeaderboardDescription": "Нет строк моделей для этого продукта и диапазона.", + "home.productFilter": "Фильтр продукта", + "home.dateRange": "Диапазон дат", + "home.stackedUsageChart": "Составной график использования лучших моделей", + "home.total": "всего", + "home.modelUsers": "пользователи модели", + "home.new": "Новая", + "home.uniqueUsersTitle": "Уникальные пользователи", + "home.uniqueUsersDescription": "Ежедневные уникальные пользователи OpenCode Go по моделям.", + "home.noUserDataTitle": "Нет данных пользователей", + "home.noUserDataDescription": "Нет строк моделей с пользователями для этого окна.", + "home.uniqueUsersChart": "Составной график уникальных пользователей по моделям", + "home.marketShareTitle": "Доля рынка", + "home.marketShareDescription": "Сравните долю токенов по автору модели.", + "home.noMarketTitle": "Нет рыночных данных", + "home.noMarketDescription": "Нет строк моделей для этого диапазона.", + "home.marketChart": "Доля рынка по автору модели", + "home.noData": "Нет данных", + "home.geoTitle": "Географический разрез", + "home.geoDescription": "Токены, использованные по странам.", + "home.noGeoTitle": "Нет геоданных", + "home.noGeoDescription": "Нет географических строк для этого диапазона.", + "home.worldMap": "Карта мира использования токенов по странам", + "home.geoMapTitle": "Карта географического разреза", + "home.unknown": "Неизвестно", + "home.tokenCostTitle": "Стоимость токенов", + "home.tokenCostDescription": "Цена за 1 млн токенов.", + "home.noTokenCostTitle": "Нет данных стоимости токенов", + "home.noTokenCostDescription": "Нет строк моделей со стоимостью для этого продукта.", + "home.cacheRatioTitle": "Доля кэша", + "home.cacheRatioDescription": "Доля входных токенов, обслуженных из кэша.", + "home.noCacheTitle": "Нет данных доли кэша", + "home.noCacheDescription": "Нет строк моделей с входными токенами для этого продукта.", + "home.sessionCostTitle": "Стоимость сеанса", + "home.sessionCostDescription": "Средняя стоимость за сеанс.", + "home.noSessionCostTitle": "Нет данных стоимости сеанса", + "home.noSessionCostDescription": "Нет строк моделей с сеансами для этого продукта.", + "home.costSession": "Стоимость/сеанс", + "lab.title": "Использование и рейтинги ИИ-моделей {{lab}} | OpenCode Data", + "lab.description": + "Сравните модели {{lab}}, используемые в OpenCode Go: использование токенов, рейтинги моделей, контекстные окна, даты релизов, стоимость и данные конкретных моделей.", + "lab.loadingTitle": "Лаборатория моделей", + "lab.loadingDescription": "Читаем доступность моделей и недавнее использование OpenCode.", + "lab.notFound": "Нет моделей, соответствующих этой лаборатории.", + "lab.heroPrefix": "Изучайте {{count}} моделей {{lab}}, используемых в OpenCode", + "lab.heroIncluding": "включая {{models}}", + "lab.heroSuffix": "Сравните недавнее использование токенов, контекстные окна, даты релизов и данные конкретных моделей.", + "lab.tokensProcessed": "Обработанные токены", + "lab.pending": "Ожидает", + "lab.usageAfterActivity": "Использование появится после активности модели", + "lab.latestRelease": "Последний релиз {{date}}", + "lab.shareOfUsage": "{{share}} недавнего использования OpenCode", + "lab.usageTitle": "Использование токенов {{lab}}", + "lab.usageDescription": "Ежедневный объем токенов OpenCode за последние два месяца.", + "lab.noUsageTitle": "Использования пока нет", + "lab.noUsageDescription": "Недавнее использование токенов появится здесь, когда у этой лаборатории будет активность.", + "lab.dailyTokenChart": "Ежедневный график использования токенов {{lab}}", + "lab.dailyTokens": "Ежедневные токены", + "lab.tokens": "токены", + "lab.modelsTitle": "Модели {{lab}}", + "lab.modelsDescription": "Детали каталога и недавнее использование.", + "lab.recentUsageAndLimits": "Недавнее использование и лимиты.", + "lab.usage": "Использование", + "lab.share": "Доля", + "model.title": "Использование, стоимость и ранг {{model}} | OpenCode Data", + "model.description": + "Посмотрите данные использования {{model}} в OpenCode Go: объем токенов, недельный ранг, состав токенов, стоимость, долю кэша, сеансы, географические разрезы и похожие модели.", + "model.loadingTitle": "Данные модели", + "model.loadingDescription": "Читаем агрегаты модели.", + "model.loadingProfile": "Читаем профиль модели.", + "model.noDataTitle": "Нет данных модели", + "model.noDataDescription": "Попробуйте открыть модель из рейтинга.", + "model.noMatched": "Нет фактов модели или строк использования для {{id}}.", + "model.fallback": "Модель", + "model.catalogFallback": "Факты модели из общего индекса моделей. Использование OpenCode Go появится, когда у этой модели будет активность.", + "model.unranked": "Нет рейтинга по использованию OpenCode Go за прошлую неделю", + "model.ranked": "Ранг #{{rank}} по использованию OpenCode Go за прошлую неделю", + "model.observedVolume": "с {{share}} наблюдаемого объема 2M.", + "model.weights": "Веса модели: {{label}}", + "model.rank": "Ранг за 7 дн.", + "model.profile": "Профиль модели", + "model.listed": "В каталоге", + "model.noCurrentUsage": "Нет использования OpenCode Go в текущем окне данных.", + "model.facts": "Факты модели", + "model.context": "Контекст", + "model.output": "Вывод", + "model.knowledge": "Знания", + "model.release": "Релиз", + "model.inputs": "Входы", + "model.overviewDescription": "Недавние токены OpenCode Go, уникальные пользователи и рыночная позиция.", + "model.noSummaryTitle": "Нет сводки использования", + "model.noSummaryDescription": "У этой модели пока нет строк использования OpenCode Go.", + "model.tokens": "Токены", + "model.uniqueUsers": "Уникальные пользователи", + "model.lastTwoMonths": "последние два месяца", + "model.sessions": "Сеансы", + "model.completedSessions": "завершенные сеансы", + "model.tokenShare": "Доля токенов", + "model.totalModels": "{{count}} моделей", + "model.momentum": "Динамика", + "model.vsPreviousWindow": "к предыдущему окну", + "model.usageDescription": "Ежедневный объем токенов OpenCode Go за недавнее двухмесячное окно.", + "model.noUsageTitle": "Нет использования", + "model.noUsageDescription": "В текущем окне использование не появилось.", + "model.dailyTokenChart": "Ежедневный график использования токенов", + "model.usersDescription": "Ежедневные уникальные пользователи OpenCode Go за недавнее двухмесячное окно.", + "model.noUsersTitle": "Нет данных пользователей", + "model.noUsersDescription": "В текущем окне нет строк с пользователями.", + "model.dailyUserChart": "Ежедневный график уникальных пользователей", + "model.efficiencyDescription": "Стоимость, поведение кэша и средняя форма сеанса OpenCode Go.", + "model.noEfficiencyTitle": "Нет данных эффективности", + "model.noEfficiencyDescription": "Данные эффективности появятся после использования.", + "model.cost": "Стоимость", + "model.totalSpend": "общие расходы", + "model.costPerMillion": "Стоимость / 1 млн", + "model.inputOutput": "ввод / вывод", + "model.observedTokens": "все наблюдаемые токены", + "model.costSession": "Стоимость / сеанс", + "model.average": "в среднем", + "model.tokensSession": "Токены / сеанс", + "model.cacheRatio": "Доля кэша", + "model.inputTokens": "входные токены", + "model.geoDescription": "Токены модели OpenCode Go, использованные по странам.", + "model.noGeoTitle": "Нет геоданных", + "model.noGeoDescription": "Нет географических строк OpenCode Go для этой модели.", + "model.worldMap": "Карта мира использования токенов модели по странам", + "model.peersDescription": "Близкие модели по недавнему объему токенов OpenCode Go.", + "model.noPeersTitle": "Нет похожих моделей", + "model.noPeersDescription": "Рейтинги похожих моделей появятся после использования.", + "model.noUsageLastWeek": "Нет использования на прошлой неделе", + "model.newThisWeek": "Новая на этой неделе", + "model.vsPreviousWeek": "{{change}} к предыдущей неделе", + "model.pdf": "PDF", + "format.users": "пользователи", + "format.tokens": "токены", +} as const diff --git a/packages/stats/app/src/i18n/th.ts b/packages/stats/app/src/i18n/th.ts new file mode 100644 index 000000000000..b2b03f56ea94 --- /dev/null +++ b/packages/stats/app/src/i18n/th.ts @@ -0,0 +1,229 @@ +import type { Key } from "../i18n" + +export const dict = { + "app.title": "อันดับการใช้งานโมเดล AI | ข้อมูล OpenCode", + "app.description": + "สำรวจการใช้งาน OpenCode Go ในโมเดล AI ต่างๆ รวมถึงปริมาณ token อันดับ ส่วนแบ่งตลาด ราคา token ต้นทุนต่อเซสชัน อัตราแคช และข้อมูลแยกตามภูมิศาสตร์", + "app.unfurlAlt": "เวิร์ดมาร์ก OpenCode Data บนพื้นหลังลวดลายสีเข้ม", + "nav.dataHome": "หน้าหลักข้อมูล", + "nav.topModels": "โมเดลยอดนิยม", + "nav.leaderboard": "ลีดเดอร์บอร์ด", + "nav.uniqueUsers": "ผู้ใช้ไม่ซ้ำ", + "nav.sessionCost": "ต้นทุนเซสชัน", + "nav.tokenCost": "ต้นทุน Token", + "nav.cacheRatio": "อัตราแคช", + "nav.marketShare": "ส่วนแบ่งตลาด", + "nav.geoBreakdown": "แยกตามภูมิศาสตร์", + "nav.overview": "ภาพรวม", + "nav.usage": "การใช้งาน", + "nav.users": "ผู้ใช้", + "nav.efficiency": "ประสิทธิภาพ", + "nav.peers": "โมเดลใกล้เคียง", + "nav.models": "โมเดล", + "header.brandLabel": "หน้าหลักข้อมูล", + "header.sectionNavLabel": "ส่วนข้อมูล", + "header.githubAria": "กดดาว OpenCode บน GitHub", + "header.github": "GitHub", + "header.tryOpenCode": "ลองใช้ OpenCode", + "header.openNav": "เปิดการนำทาง", + "header.closeNav": "ปิดการนำทาง", + "theme.groupLabel": "ธีม", + "theme.dark": "มืด", + "theme.light": "สว่าง", + "theme.system": "ระบบ", + "footer.modelData": "ข้อมูลโมเดล", + "footer.legal": "กฎหมาย", + "footer.connect": "ติดต่อ", + "footer.newsletter": "จดหมายข่าว", + "footer.newsletterBody": "รับข่าวการปล่อยเวอร์ชันใหม่ก่อนใคร", + "footer.language": "ภาษา", + "footer.subscribe": "สมัครรับข่าวสาร", + "footer.terms": "ข้อกำหนดการให้บริการ", + "footer.privacy": "นโยบายความเป็นส่วนตัว", + "footer.contact": "ติดต่อเรา", + "footer.community": "ชุมชน", + "footer.youtube": "YouTube", + "footer.homeAria": "หน้าหลัก OpenCode", + "footer.status": "ทุกระบบทำงานปกติ", + "footer.copyright": "© 2026 Anomaly Innovations Inc.", + "bridge.learnMore": "ดูเพิ่มเติม", + "modal.closeNewsletter": "ปิดการสมัครจดหมายข่าว", + "modal.title": "จดหมายข่าว OpenCode", + "modal.body": "รับข่าวการปล่อยเวอร์ชันใหม่\nก่อนใคร", + "modal.email": "ที่อยู่อีเมล", + "modal.subscribe": "สมัครรับข่าวสาร", + "modal.subscribing": "กำลังสมัคร...", + "modal.success": "สมัครเรียบร้อยแล้ว", + "modal.error": "สมัครไม่สำเร็จ", + "product.allUsers": "ผู้ใช้ทั้งหมด", + "product.zen": "Zen", + "product.go": "Go", + "range.1D": "1 วัน", + "range.1W": "1 สัปดาห์", + "range.2W": "2 สัปดาห์", + "range.1M": "1 เดือน", + "range.2M": "2 เดือน", + "chart.daily": "รายวัน", + "chart.input": "อินพุต", + "chart.output": "เอาต์พุต", + "chart.cached": "แคชแล้ว", + "chart.uncached": "ไม่แคช", + "chart.ratio": "อัตราส่วน", + "chart.model": "โมเดล", + "chart.cacheRatio": "อัตราแคช", + "chart.costSession": "ต้นทุน/เซสชัน", + "chart.tokensSession": "Token/เซสชัน", + "chart.costPerSession": "ต้นทุน / เซสชัน", + "chart.tokensPerSession": "Token / เซสชัน", + "chart.live": "สด", + "chart.percent": "เปอร์เซ็นต์", + "chart.leaderboardAria": "ลีดเดอร์บอร์ด token ของโมเดล", + "chart.scrollableLeaderboardAria": "ลีดเดอร์บอร์ด token ของโมเดลแบบเลื่อนได้", + "chart.byAuthor": "โดย {{author}}", + "home.updated": "อัปเดตแล้ว", + "home.noRows": "ยังไม่มีแถวข้อมูล", + "home.justNow": "เมื่อสักครู่", + "home.heroCopy": "ดูว่าโมเดลใดชนะในการใช้งานจริง ส่วนผสมการใช้งานเปลี่ยนไปอย่างไร และสิ่งนั้นหมายถึงต้นทุนอย่างไร", + "home.loadingTitle": "กำลังโหลดข้อมูล", + "home.loadingDescription": "กำลังอ่านข้อมูลสรุปของโมเดล", + "home.usageTitle": "การใช้งาน", + "home.topModelsDescription": "การใช้งานโมเดลบน OpenCode Go", + "home.noUsageTitle": "ไม่มีข้อมูลการใช้งาน", + "home.noUsageDescription": "ไม่มีแถวโมเดลที่ตรงกับผลิตภัณฑ์และช่วงเวลานี้", + "home.noLeaderboardTitle": "ไม่มีข้อมูลลีดเดอร์บอร์ด", + "home.noLeaderboardDescription": "ไม่มีแถวโมเดลที่ตรงกับผลิตภัณฑ์และช่วงเวลานี้", + "home.productFilter": "ตัวกรองผลิตภัณฑ์", + "home.dateRange": "ช่วงวันที่", + "home.stackedUsageChart": "กราฟซ้อนการใช้งานของโมเดลยอดนิยม", + "home.total": "รวม", + "home.modelUsers": "ผู้ใช้โมเดล", + "home.new": "ใหม่", + "home.uniqueUsersTitle": "ผู้ใช้ไม่ซ้ำ", + "home.uniqueUsersDescription": "ผู้ใช้ OpenCode Go ไม่ซ้ำรายวัน แยกตามโมเดล", + "home.noUserDataTitle": "ไม่มีข้อมูลผู้ใช้", + "home.noUserDataDescription": "ไม่มีแถวโมเดลที่มีข้อมูลผู้ใช้ตรงกับช่วงเวลานี้", + "home.uniqueUsersChart": "กราฟซ้อนผู้ใช้ไม่ซ้ำแยกตามโมเดล", + "home.marketShareTitle": "ส่วนแบ่งตลาด", + "home.marketShareDescription": "เปรียบเทียบส่วนแบ่ง token ตามผู้สร้างโมเดล", + "home.noMarketTitle": "ไม่มีข้อมูลตลาด", + "home.noMarketDescription": "ไม่มีแถวโมเดลที่ตรงกับช่วงเวลานี้", + "home.marketChart": "ส่วนแบ่งตลาดตามผู้สร้างโมเดล", + "home.noData": "ไม่มีข้อมูล", + "home.geoTitle": "แยกตามภูมิศาสตร์", + "home.geoDescription": "token ที่ใช้แยกตามประเทศ", + "home.noGeoTitle": "ไม่มีข้อมูลภูมิศาสตร์", + "home.noGeoDescription": "ไม่มีแถวภูมิศาสตร์ที่ตรงกับช่วงเวลานี้", + "home.worldMap": "แผนที่โลกของการใช้ token แยกตามประเทศ", + "home.geoMapTitle": "แผนที่แยกตามภูมิศาสตร์", + "home.unknown": "ไม่ทราบ", + "home.tokenCostTitle": "ต้นทุน Token", + "home.tokenCostDescription": "ราคาต่อ 1 ล้าน token", + "home.noTokenCostTitle": "ไม่มีข้อมูลต้นทุน token", + "home.noTokenCostDescription": "ไม่มีแถวโมเดลที่มีข้อมูลต้นทุนตรงกับผลิตภัณฑ์นี้", + "home.cacheRatioTitle": "อัตราแคช", + "home.cacheRatioDescription": "สัดส่วน input token ที่ให้บริการจากแคช", + "home.noCacheTitle": "ไม่มีข้อมูลอัตราแคช", + "home.noCacheDescription": "ไม่มีแถวโมเดลที่มี input token ตรงกับผลิตภัณฑ์นี้", + "home.sessionCostTitle": "ต้นทุนเซสชัน", + "home.sessionCostDescription": "ต้นทุนเฉลี่ยต่อเซสชัน", + "home.noSessionCostTitle": "ไม่มีข้อมูลต้นทุนเซสชัน", + "home.noSessionCostDescription": "ไม่มีแถวโมเดลที่มีข้อมูลเซสชันตรงกับผลิตภัณฑ์นี้", + "home.costSession": "ต้นทุน/เซสชัน", + "lab.title": "การใช้งานและอันดับโมเดล AI ของ {{lab}} | ข้อมูล OpenCode", + "lab.description": + "เปรียบเทียบโมเดล {{lab}} ที่ใช้ใน OpenCode Go รวมถึงการใช้ token อันดับโมเดล หน้าต่างบริบท วันที่ปล่อย ต้นทุน และข้อมูลเฉพาะโมเดล", + "lab.loadingTitle": "แล็บโมเดล", + "lab.loadingDescription": "กำลังอ่านความพร้อมของโมเดลและการใช้งาน OpenCode ล่าสุด", + "lab.notFound": "ไม่มีโมเดลที่ตรงกับแล็บนี้", + "lab.heroPrefix": "สำรวจโมเดล {{lab}} จำนวน {{count}} รายการที่ใช้ใน OpenCode", + "lab.heroIncluding": "รวมถึง {{models}}", + "lab.heroSuffix": "เปรียบเทียบการใช้ token ล่าสุด หน้าต่างบริบท วันที่ปล่อย และข้อมูลเฉพาะโมเดล", + "lab.tokensProcessed": "Token ที่ประมวลผลแล้ว", + "lab.pending": "รอดำเนินการ", + "lab.usageAfterActivity": "การใช้งานจะแสดงหลังจากมีกิจกรรมของโมเดลเข้ามา", + "lab.latestRelease": "รุ่นล่าสุด {{date}}", + "lab.shareOfUsage": "{{share}} ของการใช้งาน OpenCode ล่าสุด", + "lab.usageTitle": "การใช้ token ของ {{lab}}", + "lab.usageDescription": "ปริมาณ token รายวันของ OpenCode ในช่วงสองเดือนล่าสุด", + "lab.noUsageTitle": "ยังไม่มีการใช้งาน", + "lab.noUsageDescription": "การใช้ token ล่าสุดจะแสดงที่นี่เมื่อแล็บนี้มีกิจกรรม", + "lab.dailyTokenChart": "กราฟการใช้ token รายวันของ {{lab}}", + "lab.dailyTokens": "token รายวัน", + "lab.tokens": "token", + "lab.modelsTitle": "โมเดล {{lab}}", + "lab.modelsDescription": "รายละเอียดแค็ตตาล็อกและการใช้งานล่าสุด", + "lab.recentUsageAndLimits": "การใช้งานและขีดจำกัดล่าสุด", + "lab.usage": "การใช้งาน", + "lab.share": "ส่วนแบ่ง", + "model.title": "การใช้งาน ต้นทุน และอันดับของ {{model}} | ข้อมูล OpenCode", + "model.description": + "ดูข้อมูลการใช้งาน OpenCode Go ของ {{model}} รวมถึงปริมาณ token อันดับรายสัปดาห์ ส่วนผสม token ต้นทุน อัตราแคช เซสชัน ข้อมูลแยกตามภูมิศาสตร์ และโมเดลใกล้เคียง", + "model.loadingTitle": "ข้อมูลโมเดล", + "model.loadingDescription": "กำลังอ่านข้อมูลสรุปของโมเดล", + "model.loadingProfile": "กำลังอ่านโปรไฟล์โมเดล", + "model.noDataTitle": "ไม่มีข้อมูลโมเดล", + "model.noDataDescription": "ลองเปิดโมเดลจากลีดเดอร์บอร์ด", + "model.noMatched": "ไม่มีข้อเท็จจริงของโมเดลหรือแถวการใช้งานที่ตรงกับ {{id}}", + "model.fallback": "โมเดล", + "model.catalogFallback": "ข้อเท็จจริงของโมเดลจากดัชนีโมเดลที่ใช้ร่วมกัน การใช้งาน OpenCode Go จะแสดงเมื่อโมเดลนี้มีกิจกรรม", + "model.unranked": "ไม่มีอันดับในการใช้งาน OpenCode Go ของสัปดาห์ที่แล้ว", + "model.ranked": "อันดับ #{{rank}} ในการใช้งาน OpenCode Go ของสัปดาห์ที่แล้ว", + "model.observedVolume": "พร้อม {{share}} ของปริมาณ 2M ที่สังเกตได้", + "model.weights": "น้ำหนักโมเดล: {{label}}", + "model.rank": "อันดับ 7 วัน", + "model.profile": "โปรไฟล์โมเดล", + "model.listed": "อยู่ในรายการ", + "model.noCurrentUsage": "ไม่มีการใช้งาน OpenCode Go ในช่วงข้อมูลปัจจุบัน", + "model.facts": "ข้อเท็จจริงของโมเดล", + "model.context": "บริบท", + "model.output": "เอาต์พุต", + "model.knowledge": "ความรู้", + "model.release": "รุ่น", + "model.inputs": "อินพุต", + "model.overviewDescription": "token ล่าสุดของ OpenCode Go ผู้ใช้ไม่ซ้ำ และตำแหน่งในตลาด", + "model.noSummaryTitle": "ไม่มีสรุปการใช้งาน", + "model.noSummaryDescription": "โมเดลนี้ยังไม่มีแถวการใช้งาน OpenCode Go", + "model.tokens": "Token", + "model.uniqueUsers": "ผู้ใช้ไม่ซ้ำ", + "model.lastTwoMonths": "สองเดือนล่าสุด", + "model.sessions": "เซสชัน", + "model.completedSessions": "เซสชันที่เสร็จสิ้น", + "model.tokenShare": "ส่วนแบ่ง Token", + "model.totalModels": "{{count}} โมเดล", + "model.momentum": "โมเมนตัม", + "model.vsPreviousWindow": "เทียบกับช่วงก่อนหน้า", + "model.usageDescription": "ปริมาณ token รายวันของ OpenCode Go ในช่วงสองเดือนล่าสุด", + "model.noUsageTitle": "ไม่มีการใช้งาน", + "model.noUsageDescription": "ไม่มีการใช้งานในช่วงปัจจุบัน", + "model.dailyTokenChart": "กราฟการใช้ token รายวัน", + "model.usersDescription": "ผู้ใช้ OpenCode Go ไม่ซ้ำรายวันในช่วงสองเดือนล่าสุด", + "model.noUsersTitle": "ไม่มีข้อมูลผู้ใช้", + "model.noUsersDescription": "ไม่มีแถวที่มีข้อมูลผู้ใช้ในช่วงปัจจุบัน", + "model.dailyUserChart": "กราฟผู้ใช้ไม่ซ้ำรายวัน", + "model.efficiencyDescription": "ต้นทุน พฤติกรรมแคช และรูปแบบเซสชัน OpenCode Go โดยเฉลี่ย", + "model.noEfficiencyTitle": "ไม่มีข้อมูลประสิทธิภาพ", + "model.noEfficiencyDescription": "ข้อมูลประสิทธิภาพจะแสดงหลังจากมีการใช้งานเข้ามา", + "model.cost": "ต้นทุน", + "model.totalSpend": "ยอดใช้จ่ายรวม", + "model.costPerMillion": "ต้นทุน / 1 ล้าน", + "model.inputOutput": "อินพุต / เอาต์พุต", + "model.observedTokens": "token ทั้งหมดที่สังเกตได้", + "model.costSession": "ต้นทุน / เซสชัน", + "model.average": "เฉลี่ย", + "model.tokensSession": "Token / เซสชัน", + "model.cacheRatio": "อัตราแคช", + "model.inputTokens": "input token", + "model.geoDescription": "token ของโมเดล OpenCode Go ที่ใช้แยกตามประเทศ", + "model.noGeoTitle": "ไม่มีข้อมูลภูมิศาสตร์", + "model.noGeoDescription": "ไม่มีแถวภูมิศาสตร์ของ OpenCode Go ที่ตรงกับโมเดลนี้", + "model.worldMap": "แผนที่โลกของการใช้ token ของโมเดลแยกตามประเทศ", + "model.peersDescription": "โมเดลใกล้เคียงตามปริมาณ token ล่าสุดของ OpenCode Go", + "model.noPeersTitle": "ไม่มีโมเดลใกล้เคียง", + "model.noPeersDescription": "อันดับโมเดลใกล้เคียงจะแสดงหลังจากมีการใช้งานเข้ามา", + "model.noUsageLastWeek": "ไม่มีการใช้งานเมื่อสัปดาห์ที่แล้ว", + "model.newThisWeek": "ใหม่ในสัปดาห์นี้", + "model.vsPreviousWeek": "{{change}} เทียบกับสัปดาห์ก่อน", + "model.pdf": "PDF", + "format.users": "ผู้ใช้", + "format.tokens": "token", +} satisfies Record diff --git a/packages/stats/app/src/i18n/tr.ts b/packages/stats/app/src/i18n/tr.ts new file mode 100644 index 000000000000..320c33924a4f --- /dev/null +++ b/packages/stats/app/src/i18n/tr.ts @@ -0,0 +1,227 @@ +export const dict = { + "app.title": "Yapay Zeka Model Kullanım Sıralamaları | OpenCode Data", + "app.description": + "OpenCode Go kullanımını yapay zeka modelleri genelinde keşfedin: token hacmi, sıralamalar, pazar payı, token fiyatlandırması, oturum maliyeti, önbellek oranı ve coğrafi dağılımlar.", + "app.unfurlAlt": "Koyu desenli arka plan üzerinde OpenCode Data logosu", + "nav.dataHome": "Veri Ana Sayfası", + "nav.topModels": "En İyi Modeller", + "nav.leaderboard": "Sıralama", + "nav.uniqueUsers": "Benzersiz Kullanıcılar", + "nav.sessionCost": "Oturum Maliyeti", + "nav.tokenCost": "Token Maliyeti", + "nav.cacheRatio": "Önbellek Oranı", + "nav.marketShare": "Pazar Payı", + "nav.geoBreakdown": "Coğrafi Dağılım", + "nav.overview": "Genel Bakış", + "nav.usage": "Kullanım", + "nav.users": "Kullanıcılar", + "nav.efficiency": "Verimlilik", + "nav.peers": "Benzerler", + "nav.models": "Modeller", + "header.brandLabel": "Veri ana sayfası", + "header.sectionNavLabel": "Veri bölümleri", + "header.githubAria": "GitHub'da OpenCode'a yıldız ver", + "header.github": "GitHub", + "header.tryOpenCode": "OpenCode'u dene", + "header.openNav": "Gezinmeyi aç", + "header.closeNav": "Gezinmeyi kapat", + "theme.groupLabel": "Tema", + "theme.dark": "Koyu", + "theme.light": "Açık", + "theme.system": "Sistem", + "footer.modelData": "Model Verileri", + "footer.legal": "Yasal", + "footer.connect": "Bağlan", + "footer.newsletter": "Bülten", + "footer.newsletterBody": "Yeni sürümlerden ilk haberdar olun.", + "footer.language": "Dil", + "footer.subscribe": "Abone ol", + "footer.terms": "Hizmet şartları", + "footer.privacy": "Gizlilik politikası", + "footer.contact": "Bize ulaşın", + "footer.community": "Topluluk", + "footer.youtube": "YouTube", + "footer.homeAria": "OpenCode ana sayfası", + "footer.status": "Tüm sistemler çalışıyor", + "footer.copyright": "© 2026 Anomaly Innovations Inc.", + "bridge.learnMore": "DAHA FAZLA BİLGİ", + "modal.closeNewsletter": "Bülten kaydını kapat", + "modal.title": "OpenCode Bülteni", + "modal.body": "Yeni sürümlerden ilk\nhaberdar olun.", + "modal.email": "E-posta adresi", + "modal.subscribe": "Abone ol", + "modal.subscribing": "Abone olunuyor...", + "modal.success": "Abone oldunuz.", + "modal.error": "Abonelik başarısız oldu", + "product.allUsers": "Tüm Kullanıcılar", + "product.zen": "Zen", + "product.go": "Go", + "range.1D": "1 Gün", + "range.1W": "1 Hafta", + "range.2W": "2 Hafta", + "range.1M": "1 Ay", + "range.2M": "2 Ay", + "chart.daily": "Günlük", + "chart.input": "Girdi", + "chart.output": "Çıktı", + "chart.cached": "Önbellekte", + "chart.uncached": "Önbelleksiz", + "chart.ratio": "Oran", + "chart.model": "Model", + "chart.cacheRatio": "Önbellek Oranı", + "chart.costSession": "Maliyet/Oturum", + "chart.tokensSession": "Token/Oturum", + "chart.costPerSession": "MALİYET / OTURUM", + "chart.tokensPerSession": "TOKEN / OTURUM", + "chart.live": "Canlı", + "chart.percent": "yüzde", + "chart.leaderboardAria": "Model token sıralaması", + "chart.scrollableLeaderboardAria": "Kaydırılabilir model token sıralaması", + "chart.byAuthor": "{{author}} tarafından", + "home.updated": "Güncellendi", + "home.noRows": "Henüz satır yok", + "home.justNow": "az önce", + "home.heroCopy": "Gerçek kullanımda hangi modellerin öne geçtiğini, karışımın nasıl değiştiğini ve bunun maliyet için ne anlama geldiğini görün.", + "home.loadingTitle": "Veriler yükleniyor", + "home.loadingDescription": "Model toplamları okunuyor.", + "home.usageTitle": "Kullanım", + "home.topModelsDescription": "OpenCode Go genelinde model kullanımı.", + "home.noUsageTitle": "Kullanım verisi yok", + "home.noUsageDescription": "Bu ürün ve aralıkla eşleşen model satırı yok.", + "home.noLeaderboardTitle": "Sıralama verisi yok", + "home.noLeaderboardDescription": "Bu ürün ve aralıkla eşleşen model satırı yok.", + "home.productFilter": "Ürün filtresi", + "home.dateRange": "Tarih aralığı", + "home.stackedUsageChart": "En iyi model kullanımı yığılmış grafiği", + "home.total": "toplam", + "home.modelUsers": "model kullanıcıları", + "home.new": "Yeni", + "home.uniqueUsersTitle": "Benzersiz Kullanıcılar", + "home.uniqueUsersDescription": "Modele göre günlük benzersiz OpenCode Go kullanıcıları.", + "home.noUserDataTitle": "Kullanıcı verisi yok", + "home.noUserDataDescription": "Bu pencereyle eşleşen kullanıcı içeren model satırı yok.", + "home.uniqueUsersChart": "Modele göre yığılmış benzersiz kullanıcı grafiği", + "home.marketShareTitle": "Pazar Payı", + "home.marketShareDescription": "Model yazarına göre token payını karşılaştırın.", + "home.noMarketTitle": "Pazar verisi yok", + "home.noMarketDescription": "Bu aralıkla eşleşen model satırı yok.", + "home.marketChart": "Model yazarına göre pazar payı", + "home.noData": "Veri yok", + "home.geoTitle": "Coğrafi Dağılım", + "home.geoDescription": "Ülkeye göre kullanılan tokenlar.", + "home.noGeoTitle": "Coğrafi veri yok", + "home.noGeoDescription": "Bu aralıkla eşleşen coğrafi satır yok.", + "home.worldMap": "Ülkeye göre token kullanımının dünya haritası", + "home.geoMapTitle": "Coğrafi Dağılım haritası", + "home.unknown": "Bilinmiyor", + "home.tokenCostTitle": "Token Maliyeti", + "home.tokenCostDescription": "1 milyon token başına fiyat.", + "home.noTokenCostTitle": "Token maliyeti verisi yok", + "home.noTokenCostDescription": "Bu ürünle eşleşen maliyet içeren model satırı yok.", + "home.cacheRatioTitle": "Önbellek Oranı", + "home.cacheRatioDescription": "Önbellekten karşılanan giriş tokenlarının payı.", + "home.noCacheTitle": "Önbellek oranı verisi yok", + "home.noCacheDescription": "Bu ürünle eşleşen giriş tokenı içeren model satırı yok.", + "home.sessionCostTitle": "Oturum Maliyeti", + "home.sessionCostDescription": "Oturum başına ortalama maliyet.", + "home.noSessionCostTitle": "Oturum maliyeti verisi yok", + "home.noSessionCostDescription": "Bu ürünle eşleşen oturum içeren model satırı yok.", + "home.costSession": "Maliyet/Oturum", + "lab.title": "{{lab}} Yapay Zeka Model Kullanımı ve Sıralamaları | OpenCode Data", + "lab.description": + "OpenCode Go'da kullanılan {{lab}} modellerini karşılaştırın: token kullanımı, model sıralamaları, bağlam pencereleri, yayın tarihleri, maliyetler ve modele özel veriler.", + "lab.loadingTitle": "Model Laboratuvarı", + "lab.loadingDescription": "Model kullanılabilirliği ve son OpenCode kullanımı okunuyor.", + "lab.notFound": "Bu laboratuvarla eşleşen model yok.", + "lab.heroPrefix": "OpenCode'da kullanılan {{count}} {{lab}} modelini keşfedin", + "lab.heroIncluding": "{{models}} dahil", + "lab.heroSuffix": "Son token kullanımını, bağlam pencerelerini, yayın tarihlerini ve modele özel verileri karşılaştırın.", + "lab.tokensProcessed": "İşlenen Tokenlar", + "lab.pending": "Beklemede", + "lab.usageAfterActivity": "Kullanım, model etkinliği ulaştıktan sonra görünür", + "lab.latestRelease": "Son yayın {{date}}", + "lab.shareOfUsage": "Son OpenCode kullanımının {{share}} kadarı", + "lab.usageTitle": "{{lab}} token kullanımı", + "lab.usageDescription": "Son iki ayda günlük OpenCode token hacmi.", + "lab.noUsageTitle": "Henüz kullanım yok", + "lab.noUsageDescription": "Bu laboratuvarda etkinlik olduğunda son token kullanımı burada görünür.", + "lab.dailyTokenChart": "{{lab}} günlük token kullanım grafiği", + "lab.dailyTokens": "Günlük tokenlar", + "lab.tokens": "token", + "lab.modelsTitle": "{{lab}} modelleri", + "lab.modelsDescription": "Katalog ayrıntıları ve son kullanım.", + "lab.recentUsageAndLimits": "Son kullanım ve sınırlar.", + "lab.usage": "Kullanım", + "lab.share": "Pay", + "model.title": "{{model}} Kullanımı, Maliyeti ve Sırası | OpenCode Data", + "model.description": + "{{model}} için OpenCode Go kullanım verilerini görüntüleyin: token hacmi, haftalık sıra, token karışımı, maliyetler, önbellek oranı, oturumlar, coğrafi dağılımlar ve benzer modeller.", + "model.loadingTitle": "Model Verileri", + "model.loadingDescription": "Model toplamları okunuyor.", + "model.loadingProfile": "Model profili okunuyor.", + "model.noDataTitle": "Model verisi yok", + "model.noDataDescription": "Sıralamadan bir model açmayı deneyin.", + "model.noMatched": "{{id}} ile eşleşen model bilgisi veya kullanım satırı yok.", + "model.fallback": "Model", + "model.catalogFallback": "Paylaşılan model dizininden model bilgileri. Bu modelde etkinlik olduğunda OpenCode Go kullanımı görünür.", + "model.unranked": "Geçen haftaki OpenCode Go kullanımında sıralanmamış", + "model.ranked": "Geçen haftaki OpenCode Go kullanımında #{{rank}} sırada", + "model.observedVolume": "gözlemlenen 2M hacmin {{share}} payıyla.", + "model.weights": "Model ağırlıkları: {{label}}", + "model.rank": "7G Sıra", + "model.profile": "Model Profili", + "model.listed": "Listelendi", + "model.noCurrentUsage": "Geçerli veri penceresinde OpenCode Go kullanımı yok.", + "model.facts": "Model bilgileri", + "model.context": "Bağlam", + "model.output": "Çıktı", + "model.knowledge": "Bilgi", + "model.release": "Yayın", + "model.inputs": "Girdiler", + "model.overviewDescription": "Son OpenCode Go tokenları, benzersiz kullanıcılar ve pazar konumu.", + "model.noSummaryTitle": "Kullanım özeti yok", + "model.noSummaryDescription": "Bu modelde henüz OpenCode Go kullanım satırı yok.", + "model.tokens": "Tokenlar", + "model.uniqueUsers": "Benzersiz Kullanıcılar", + "model.lastTwoMonths": "son iki ay", + "model.sessions": "Oturumlar", + "model.completedSessions": "tamamlanan oturumlar", + "model.tokenShare": "Token Payı", + "model.totalModels": "{{count}} model", + "model.momentum": "İvme", + "model.vsPreviousWindow": "önceki pencereye göre", + "model.usageDescription": "Son iki aylık pencerede günlük OpenCode Go token hacmi.", + "model.noUsageTitle": "Kullanım yok", + "model.noUsageDescription": "Geçerli pencereye kullanım gelmedi.", + "model.dailyTokenChart": "Günlük token kullanım grafiği", + "model.usersDescription": "Son iki aylık pencerede günlük benzersiz OpenCode Go kullanıcıları.", + "model.noUsersTitle": "Kullanıcı verisi yok", + "model.noUsersDescription": "Geçerli pencereye kullanıcı içeren satır gelmedi.", + "model.dailyUserChart": "Günlük benzersiz kullanıcı grafiği", + "model.efficiencyDescription": "Maliyet, önbellek davranışı ve ortalama OpenCode Go oturum yapısı.", + "model.noEfficiencyTitle": "Verimlilik verisi yok", + "model.noEfficiencyDescription": "Verimlilik verileri kullanım geldikten sonra görünür.", + "model.cost": "Maliyet", + "model.totalSpend": "toplam harcama", + "model.costPerMillion": "Maliyet / 1M", + "model.inputOutput": "girdi / çıktı", + "model.observedTokens": "gözlemlenen tüm tokenlar", + "model.costSession": "Maliyet / Oturum", + "model.average": "ortalama", + "model.tokensSession": "Token / Oturum", + "model.cacheRatio": "Önbellek Oranı", + "model.inputTokens": "giriş tokenları", + "model.geoDescription": "Ülkeye göre kullanılan OpenCode Go model tokenları.", + "model.noGeoTitle": "Coğrafi veri yok", + "model.noGeoDescription": "Bu modelle eşleşen OpenCode Go coğrafi satırı yok.", + "model.worldMap": "Ülkeye göre model token kullanımının dünya haritası", + "model.peersDescription": "Son OpenCode Go token hacmine göre yakındaki modeller.", + "model.noPeersTitle": "Benzer yok", + "model.noPeersDescription": "Benzer model sıralamaları kullanım geldikten sonra görünür.", + "model.noUsageLastWeek": "Geçen hafta kullanım yok", + "model.newThisWeek": "Bu hafta yeni", + "model.vsPreviousWeek": "önceki haftaya göre {{change}}", + "model.pdf": "PDF", + "format.users": "kullanıcı", + "format.tokens": "token", +} as const diff --git a/packages/stats/app/src/i18n/uk.ts b/packages/stats/app/src/i18n/uk.ts new file mode 100644 index 000000000000..f46e563b7833 --- /dev/null +++ b/packages/stats/app/src/i18n/uk.ts @@ -0,0 +1,227 @@ +export const dict = { + "app.title": "Рейтинги використання моделей ШІ | OpenCode Data", + "app.description": + "Досліджуйте використання OpenCode Go серед моделей ШІ, зокрема обсяг токенів, рейтинги, частку ринку, ціни токенів, вартість сеансу, частку кешу та географічні розрізи.", + "app.unfurlAlt": "Словесний знак OpenCode Data на темному візерунковому тлі", + "nav.dataHome": "Головна даних", + "nav.topModels": "Найкращі моделі", + "nav.leaderboard": "Рейтинг", + "nav.uniqueUsers": "Унікальні користувачі", + "nav.sessionCost": "Вартість сеансу", + "nav.tokenCost": "Вартість токенів", + "nav.cacheRatio": "Частка кешу", + "nav.marketShare": "Частка ринку", + "nav.geoBreakdown": "Географічний розріз", + "nav.overview": "Огляд", + "nav.usage": "Використання", + "nav.users": "Користувачі", + "nav.efficiency": "Ефективність", + "nav.peers": "Схожі моделі", + "nav.models": "Моделі", + "header.brandLabel": "Головна даних", + "header.sectionNavLabel": "Розділи даних", + "header.githubAria": "Поставити зірку OpenCode на GitHub", + "header.github": "GitHub", + "header.tryOpenCode": "Спробувати OpenCode", + "header.openNav": "Відкрити навігацію", + "header.closeNav": "Закрити навігацію", + "theme.groupLabel": "Тема", + "theme.dark": "Темна", + "theme.light": "Світла", + "theme.system": "Системна", + "footer.modelData": "Дані моделей", + "footer.legal": "Правова інформація", + "footer.connect": "Зв'язок", + "footer.newsletter": "Розсилка", + "footer.newsletterBody": "Дізнавайтеся про нові релізи першими.", + "footer.language": "Мова", + "footer.subscribe": "Підписатися", + "footer.terms": "Умови обслуговування", + "footer.privacy": "Політика конфіденційності", + "footer.contact": "Зв'яжіться з нами", + "footer.community": "Спільнота", + "footer.youtube": "YouTube", + "footer.homeAria": "Головна OpenCode", + "footer.status": "Усі системи працюють", + "footer.copyright": "© 2026 Anomaly Innovations Inc.", + "bridge.learnMore": "ДІЗНАТИСЯ БІЛЬШЕ", + "modal.closeNewsletter": "Закрити форму підписки", + "modal.title": "Розсилка OpenCode", + "modal.body": "Дізнавайтеся першими\nпро нові релізи.", + "modal.email": "Адреса електронної пошти", + "modal.subscribe": "Підписатися", + "modal.subscribing": "Оформлюємо підписку...", + "modal.success": "Ви підписалися.", + "modal.error": "Не вдалося підписатися", + "product.allUsers": "Усі користувачі", + "product.zen": "Zen", + "product.go": "Go", + "range.1D": "1 день", + "range.1W": "1 тиждень", + "range.2W": "2 тижні", + "range.1M": "1 місяць", + "range.2M": "2 місяці", + "chart.daily": "Щоденно", + "chart.input": "Вхід", + "chart.output": "Вихід", + "chart.cached": "З кешу", + "chart.uncached": "Без кешу", + "chart.ratio": "Співвідношення", + "chart.model": "Модель", + "chart.cacheRatio": "Частка кешу", + "chart.costSession": "Вартість/сеанс", + "chart.tokensSession": "Токени/сеанс", + "chart.costPerSession": "ВАРТІСТЬ / СЕАНС", + "chart.tokensPerSession": "ТОКЕНИ / СЕАНС", + "chart.live": "Наживо", + "chart.percent": "відсоток", + "chart.leaderboardAria": "Рейтинг моделей за токенами", + "chart.scrollableLeaderboardAria": "Прокручуваний рейтинг моделей за токенами", + "chart.byAuthor": "автор: {{author}}", + "home.updated": "Оновлено", + "home.noRows": "Рядків поки немає", + "home.justNow": "щойно", + "home.heroCopy": "Подивіться, які моделі перемагають у реальному використанні, як змінюється мікс і що це означає для вартості.", + "home.loadingTitle": "Завантаження даних", + "home.loadingDescription": "Читаємо агрегати моделей.", + "home.usageTitle": "Використання", + "home.topModelsDescription": "Використання моделей в OpenCode Go.", + "home.noUsageTitle": "Немає даних використання", + "home.noUsageDescription": "Жодні рядки моделей не відповідали цьому продукту й діапазону.", + "home.noLeaderboardTitle": "Немає даних рейтингу", + "home.noLeaderboardDescription": "Жодні рядки моделей не відповідали цьому продукту й діапазону.", + "home.productFilter": "Фільтр продукту", + "home.dateRange": "Діапазон дат", + "home.stackedUsageChart": "Складена діаграма використання найкращих моделей", + "home.total": "усього", + "home.modelUsers": "користувачі моделі", + "home.new": "Нова", + "home.uniqueUsersTitle": "Унікальні користувачі", + "home.uniqueUsersDescription": "Щоденні унікальні користувачі OpenCode Go за моделлю.", + "home.noUserDataTitle": "Немає даних користувачів", + "home.noUserDataDescription": "Жодні рядки моделей із користувачами не відповідали цьому вікну.", + "home.uniqueUsersChart": "Складена діаграма унікальних користувачів за моделлю", + "home.marketShareTitle": "Частка ринку", + "home.marketShareDescription": "Порівняйте частку токенів за автором моделі.", + "home.noMarketTitle": "Немає ринкових даних", + "home.noMarketDescription": "Жодні рядки моделей не відповідали цьому діапазону.", + "home.marketChart": "Частка ринку за автором моделі", + "home.noData": "Немає даних", + "home.geoTitle": "Географічний розріз", + "home.geoDescription": "Токени, використані за країнами.", + "home.noGeoTitle": "Немає геоданих", + "home.noGeoDescription": "Жодні географічні рядки не відповідали цьому діапазону.", + "home.worldMap": "Карта світу використання токенів за країнами", + "home.geoMapTitle": "Карта географічного розрізу", + "home.unknown": "Невідомо", + "home.tokenCostTitle": "Вартість токенів", + "home.tokenCostDescription": "Ціна за 1 млн токенів.", + "home.noTokenCostTitle": "Немає даних вартості токенів", + "home.noTokenCostDescription": "Жодні рядки моделей із вартістю не відповідали цьому продукту.", + "home.cacheRatioTitle": "Частка кешу", + "home.cacheRatioDescription": "Частка вхідних токенів, обслужених із кешу.", + "home.noCacheTitle": "Немає даних частки кешу", + "home.noCacheDescription": "Жодні рядки моделей із вхідними токенами не відповідали цьому продукту.", + "home.sessionCostTitle": "Вартість сеансу", + "home.sessionCostDescription": "Середня вартість за сеанс.", + "home.noSessionCostTitle": "Немає даних вартості сеансу", + "home.noSessionCostDescription": "Жодні рядки моделей із сеансами не відповідали цьому продукту.", + "home.costSession": "Вартість/сеанс", + "lab.title": "Використання та рейтинги моделей ШІ {{lab}} | OpenCode Data", + "lab.description": + "Порівняйте моделі {{lab}}, які використовуються в OpenCode Go, зокрема використання токенів, рейтинги моделей, контекстні вікна, дати релізів, вартість і дані конкретних моделей.", + "lab.loadingTitle": "Лабораторія моделей", + "lab.loadingDescription": "Читаємо доступність моделей і нещодавнє використання OpenCode.", + "lab.notFound": "Жодна модель не відповідала цій лабораторії.", + "lab.heroPrefix": "Досліджуйте {{count}} моделей {{lab}}, що використовуються в OpenCode", + "lab.heroIncluding": "зокрема {{models}}", + "lab.heroSuffix": "Порівняйте нещодавнє використання токенів, контекстні вікна, дати релізів і дані конкретних моделей.", + "lab.tokensProcessed": "Оброблені токени", + "lab.pending": "Очікується", + "lab.usageAfterActivity": "Використання з'явиться після активності моделі", + "lab.latestRelease": "Останній реліз {{date}}", + "lab.shareOfUsage": "{{share}} нещодавнього використання OpenCode", + "lab.usageTitle": "Використання токенів {{lab}}", + "lab.usageDescription": "Щоденний обсяг токенів OpenCode за останні два місяці.", + "lab.noUsageTitle": "Використання поки немає", + "lab.noUsageDescription": "Нещодавнє використання токенів з'явиться тут, коли ця лабораторія матиме активність.", + "lab.dailyTokenChart": "Щоденна діаграма використання токенів {{lab}}", + "lab.dailyTokens": "Щоденні токени", + "lab.tokens": "токени", + "lab.modelsTitle": "Моделі {{lab}}", + "lab.modelsDescription": "Деталі каталогу плюс нещодавнє використання.", + "lab.recentUsageAndLimits": "Нещодавнє використання та ліміти.", + "lab.usage": "Використання", + "lab.share": "Частка", + "model.title": "Використання, вартість і ранг {{model}} | OpenCode Data", + "model.description": + "Перегляньте дані використання {{model}} в OpenCode Go, зокрема обсяг токенів, тижневий ранг, мікс токенів, вартість, частку кешу, сеанси, географічні розрізи та схожі моделі.", + "model.loadingTitle": "Дані моделі", + "model.loadingDescription": "Читаємо агрегати моделі.", + "model.loadingProfile": "Читаємо профіль моделі.", + "model.noDataTitle": "Немає даних моделі", + "model.noDataDescription": "Спробуйте відкрити модель із рейтингу.", + "model.noMatched": "Жодні факти моделі або рядки використання не відповідали {{id}}.", + "model.fallback": "Модель", + "model.catalogFallback": "Факти моделі зі спільного індексу моделей. Використання OpenCode Go з'явиться, коли ця модель матиме активність.", + "model.unranked": "Без рейтингу у використанні OpenCode Go за минулий тиждень", + "model.ranked": "Ранг #{{rank}} у використанні OpenCode Go за минулий тиждень", + "model.observedVolume": "з {{share}} спостережуваного обсягу 2M.", + "model.weights": "Ваги моделі: {{label}}", + "model.rank": "Ранг за 7 дн.", + "model.profile": "Профіль моделі", + "model.listed": "У каталозі", + "model.noCurrentUsage": "Немає використання OpenCode Go в поточному вікні даних.", + "model.facts": "Факти моделі", + "model.context": "Контекст", + "model.output": "Вихід", + "model.knowledge": "Знання", + "model.release": "Реліз", + "model.inputs": "Входи", + "model.overviewDescription": "Нещодавні токени OpenCode Go, унікальні користувачі та ринкова позиція.", + "model.noSummaryTitle": "Немає підсумку використання", + "model.noSummaryDescription": "Ця модель ще не має рядків використання OpenCode Go.", + "model.tokens": "Токени", + "model.uniqueUsers": "Унікальні користувачі", + "model.lastTwoMonths": "останні два місяці", + "model.sessions": "Сеанси", + "model.completedSessions": "завершені сеанси", + "model.tokenShare": "Частка токенів", + "model.totalModels": "{{count}} моделей", + "model.momentum": "Динаміка", + "model.vsPreviousWindow": "до попереднього вікна", + "model.usageDescription": "Щоденний обсяг токенів OpenCode Go за нещодавнє двомісячне вікно.", + "model.noUsageTitle": "Немає використання", + "model.noUsageDescription": "У поточному вікні використання не з'явилося.", + "model.dailyTokenChart": "Щоденна діаграма використання токенів", + "model.usersDescription": "Щоденні унікальні користувачі OpenCode Go за нещодавнє двомісячне вікно.", + "model.noUsersTitle": "Немає даних користувачів", + "model.noUsersDescription": "У поточному вікні немає рядків із користувачами.", + "model.dailyUserChart": "Щоденна діаграма унікальних користувачів", + "model.efficiencyDescription": "Вартість, поведінка кешу та середня форма сеансу OpenCode Go.", + "model.noEfficiencyTitle": "Немає даних ефективності", + "model.noEfficiencyDescription": "Дані ефективності з'являться після використання.", + "model.cost": "Вартість", + "model.totalSpend": "загальні витрати", + "model.costPerMillion": "Вартість / 1 млн", + "model.inputOutput": "вхід / вихід", + "model.observedTokens": "усі спостережувані токени", + "model.costSession": "Вартість / сеанс", + "model.average": "у середньому", + "model.tokensSession": "Токени / сеанс", + "model.cacheRatio": "Частка кешу", + "model.inputTokens": "вхідні токени", + "model.geoDescription": "Токени моделі OpenCode Go, використані за країнами.", + "model.noGeoTitle": "Немає геоданих", + "model.noGeoDescription": "Жодні географічні рядки OpenCode Go не відповідали цій моделі.", + "model.worldMap": "Карта світу використання токенів моделі за країнами", + "model.peersDescription": "Близькі моделі за нещодавнім обсягом токенів OpenCode Go.", + "model.noPeersTitle": "Немає схожих моделей", + "model.noPeersDescription": "Рейтинги схожих моделей з'являться після використання.", + "model.noUsageLastWeek": "Немає використання минулого тижня", + "model.newThisWeek": "Нова цього тижня", + "model.vsPreviousWeek": "{{change}} до попереднього тижня", + "model.pdf": "PDF", + "format.users": "користувачі", + "format.tokens": "токени", +} as const diff --git a/packages/stats/app/src/i18n/zh.ts b/packages/stats/app/src/i18n/zh.ts new file mode 100644 index 000000000000..d493206900bd --- /dev/null +++ b/packages/stats/app/src/i18n/zh.ts @@ -0,0 +1,229 @@ +import type { Key } from "../i18n" + +export const dict = { + "app.title": "AI 模型使用排名 | OpenCode 数据", + "app.description": + "探索 OpenCode Go 在各 AI 模型上的使用情况,包括 token 用量、排名、市场份额、token 价格、会话成本、缓存比例和地理分布。", + "app.unfurlAlt": "深色纹理背景上的 OpenCode Data 字标", + "nav.dataHome": "数据首页", + "nav.topModels": "热门模型", + "nav.leaderboard": "排行榜", + "nav.uniqueUsers": "独立用户", + "nav.sessionCost": "会话成本", + "nav.tokenCost": "Token 成本", + "nav.cacheRatio": "缓存比例", + "nav.marketShare": "市场份额", + "nav.geoBreakdown": "地理分布", + "nav.overview": "概览", + "nav.usage": "用量", + "nav.users": "用户", + "nav.efficiency": "效率", + "nav.peers": "同类模型", + "nav.models": "模型", + "header.brandLabel": "数据首页", + "header.sectionNavLabel": "数据分区", + "header.githubAria": "在 GitHub 上为 OpenCode 加星", + "header.github": "GitHub", + "header.tryOpenCode": "试用 OpenCode", + "header.openNav": "打开导航", + "header.closeNav": "关闭导航", + "theme.groupLabel": "主题", + "theme.dark": "深色", + "theme.light": "浅色", + "theme.system": "跟随系统", + "footer.modelData": "模型数据", + "footer.legal": "法律", + "footer.connect": "联系", + "footer.newsletter": "新闻通讯", + "footer.newsletterBody": "第一时间了解新版本发布。", + "footer.language": "语言", + "footer.subscribe": "订阅", + "footer.terms": "服务条款", + "footer.privacy": "隐私政策", + "footer.contact": "联系我们", + "footer.community": "社区", + "footer.youtube": "YouTube", + "footer.homeAria": "OpenCode 首页", + "footer.status": "所有系统运行正常", + "footer.copyright": "© 2026 Anomaly Innovations Inc.", + "bridge.learnMore": "了解更多", + "modal.closeNewsletter": "关闭新闻通讯注册", + "modal.title": "OpenCode 新闻通讯", + "modal.body": "第一时间了解\n新版本发布。", + "modal.email": "电子邮箱地址", + "modal.subscribe": "订阅", + "modal.subscribing": "正在订阅...", + "modal.success": "你已订阅。", + "modal.error": "订阅失败", + "product.allUsers": "所有用户", + "product.zen": "Zen", + "product.go": "Go", + "range.1D": "1 天", + "range.1W": "1 周", + "range.2W": "2 周", + "range.1M": "1 个月", + "range.2M": "2 个月", + "chart.daily": "每日", + "chart.input": "输入", + "chart.output": "输出", + "chart.cached": "已缓存", + "chart.uncached": "未缓存", + "chart.ratio": "比例", + "chart.model": "模型", + "chart.cacheRatio": "缓存比例", + "chart.costSession": "成本/会话", + "chart.tokensSession": "Token/会话", + "chart.costPerSession": "成本 / 会话", + "chart.tokensPerSession": "Token / 会话", + "chart.live": "实时", + "chart.percent": "百分比", + "chart.leaderboardAria": "模型 token 排行榜", + "chart.scrollableLeaderboardAria": "可滚动的模型 token 排行榜", + "chart.byAuthor": "作者:{{author}}", + "home.updated": "已更新", + "home.noRows": "暂无数据行", + "home.justNow": "刚刚", + "home.heroCopy": "查看哪些模型正在赢得真实使用量、使用组合如何变化,以及这对成本意味着什么。", + "home.loadingTitle": "正在加载数据", + "home.loadingDescription": "正在读取模型汇总。", + "home.usageTitle": "用量", + "home.topModelsDescription": "OpenCode Go 中各模型的使用情况。", + "home.noUsageTitle": "无使用数据", + "home.noUsageDescription": "没有符合该产品和时间范围的模型行。", + "home.noLeaderboardTitle": "无排行榜数据", + "home.noLeaderboardDescription": "没有符合该产品和时间范围的模型行。", + "home.productFilter": "产品筛选", + "home.dateRange": "日期范围", + "home.stackedUsageChart": "热门模型用量堆叠图", + "home.total": "总计", + "home.modelUsers": "模型用户", + "home.new": "新", + "home.uniqueUsersTitle": "独立用户", + "home.uniqueUsersDescription": "按模型显示的每日 OpenCode Go 独立用户。", + "home.noUserDataTitle": "无用户数据", + "home.noUserDataDescription": "没有符合该窗口且包含用户的模型行。", + "home.uniqueUsersChart": "按模型显示的独立用户堆叠图", + "home.marketShareTitle": "市场份额", + "home.marketShareDescription": "按模型作者比较 token 份额。", + "home.noMarketTitle": "无市场数据", + "home.noMarketDescription": "没有符合该时间范围的模型行。", + "home.marketChart": "按模型作者显示的市场份额", + "home.noData": "无数据", + "home.geoTitle": "地理分布", + "home.geoDescription": "按国家/地区统计的 token 使用量。", + "home.noGeoTitle": "无地理数据", + "home.noGeoDescription": "没有符合该时间范围的地理行。", + "home.worldMap": "按国家/地区显示 token 使用量的世界地图", + "home.geoMapTitle": "地理分布地图", + "home.unknown": "未知", + "home.tokenCostTitle": "Token 成本", + "home.tokenCostDescription": "每 100 万 token 的价格。", + "home.noTokenCostTitle": "无 token 成本数据", + "home.noTokenCostDescription": "没有符合该产品且包含成本的模型行。", + "home.cacheRatioTitle": "缓存比例", + "home.cacheRatioDescription": "从缓存提供的输入 token 占比。", + "home.noCacheTitle": "无缓存比例数据", + "home.noCacheDescription": "没有符合该产品且包含输入 token 的模型行。", + "home.sessionCostTitle": "会话成本", + "home.sessionCostDescription": "每次会话的平均成本。", + "home.noSessionCostTitle": "无会话成本数据", + "home.noSessionCostDescription": "没有符合该产品且包含会话的模型行。", + "home.costSession": "成本/会话", + "lab.title": "{{lab}} AI 模型使用量与排名 | OpenCode 数据", + "lab.description": + "比较在 OpenCode Go 中使用的 {{lab}} 模型,包括 token 用量、模型排名、上下文窗口、发布日期、成本和模型专属数据。", + "lab.loadingTitle": "模型实验室", + "lab.loadingDescription": "正在读取模型可用性和近期 OpenCode 使用情况。", + "lab.notFound": "没有匹配此实验室的模型。", + "lab.heroPrefix": "探索 OpenCode 中使用的 {{count}} 个 {{lab}} 模型", + "lab.heroIncluding": "包括 {{models}}", + "lab.heroSuffix": "比较近期 token 用量、上下文窗口、发布日期和模型专属数据。", + "lab.tokensProcessed": "已处理 Token", + "lab.pending": "待定", + "lab.usageAfterActivity": "模型活动到达后会显示使用量", + "lab.latestRelease": "最新发布 {{date}}", + "lab.shareOfUsage": "占近期 OpenCode 使用量的 {{share}}", + "lab.usageTitle": "{{lab}} token 用量", + "lab.usageDescription": "过去两个月的每日 OpenCode token 用量。", + "lab.noUsageTitle": "暂无使用量", + "lab.noUsageDescription": "此实验室有活动后,近期 token 用量会显示在这里。", + "lab.dailyTokenChart": "{{lab}} 每日 token 用量图", + "lab.dailyTokens": "每日 token", + "lab.tokens": "token", + "lab.modelsTitle": "{{lab}} 模型", + "lab.modelsDescription": "目录详情与近期使用量。", + "lab.recentUsageAndLimits": "近期使用量和限制。", + "lab.usage": "用量", + "lab.share": "份额", + "model.title": "{{model}} 使用量、成本与排名 | OpenCode 数据", + "model.description": + "查看 {{model}} 的 OpenCode Go 使用数据,包括 token 用量、周排名、token 组合、成本、缓存比例、会话、地理分布和同类模型。", + "model.loadingTitle": "模型数据", + "model.loadingDescription": "正在读取模型汇总。", + "model.loadingProfile": "正在读取模型档案。", + "model.noDataTitle": "无模型数据", + "model.noDataDescription": "请尝试从排行榜打开一个模型。", + "model.noMatched": "没有匹配 {{id}} 的模型事实或使用行。", + "model.fallback": "模型", + "model.catalogFallback": "来自共享模型索引的模型事实。此模型产生活动后会显示 OpenCode Go 使用量。", + "model.unranked": "未进入上周 OpenCode Go 使用量排名", + "model.ranked": "在上周 OpenCode Go 使用量中排名 #{{rank}}", + "model.observedVolume": "占观测到的 2M 用量的 {{share}}。", + "model.weights": "模型权重:{{label}}", + "model.rank": "7 日排名", + "model.profile": "模型档案", + "model.listed": "已列出", + "model.noCurrentUsage": "当前数据窗口中没有 OpenCode Go 使用量。", + "model.facts": "模型事实", + "model.context": "上下文", + "model.output": "输出", + "model.knowledge": "知识", + "model.release": "发布", + "model.inputs": "输入", + "model.overviewDescription": "近期 OpenCode Go token、独立用户和市场位置。", + "model.noSummaryTitle": "无使用摘要", + "model.noSummaryDescription": "此模型尚无 OpenCode Go 使用行。", + "model.tokens": "Token", + "model.uniqueUsers": "独立用户", + "model.lastTwoMonths": "过去两个月", + "model.sessions": "会话", + "model.completedSessions": "已完成会话", + "model.tokenShare": "Token 份额", + "model.totalModels": "{{count}} 个模型", + "model.momentum": "趋势", + "model.vsPreviousWindow": "相较上一窗口", + "model.usageDescription": "近期两个月窗口内的每日 OpenCode Go token 用量。", + "model.noUsageTitle": "无使用量", + "model.noUsageDescription": "当前窗口中没有使用量。", + "model.dailyTokenChart": "每日 token 用量图", + "model.usersDescription": "近期两个月窗口内的每日 OpenCode Go 独立用户。", + "model.noUsersTitle": "无用户数据", + "model.noUsersDescription": "当前窗口中没有包含用户的行。", + "model.dailyUserChart": "每日独立用户图", + "model.efficiencyDescription": "成本、缓存行为和平均 OpenCode Go 会话形态。", + "model.noEfficiencyTitle": "无效率数据", + "model.noEfficiencyDescription": "使用量到达后会显示效率数据。", + "model.cost": "成本", + "model.totalSpend": "总支出", + "model.costPerMillion": "每 100 万成本", + "model.inputOutput": "输入 / 输出", + "model.observedTokens": "观测到的全部 token", + "model.costSession": "成本 / 会话", + "model.average": "平均", + "model.tokensSession": "Token / 会话", + "model.cacheRatio": "缓存比例", + "model.inputTokens": "输入 token", + "model.geoDescription": "按国家/地区统计的 OpenCode Go 模型 token 使用量。", + "model.noGeoTitle": "无地理数据", + "model.noGeoDescription": "没有符合此模型的 OpenCode Go 地理行。", + "model.worldMap": "按国家/地区显示模型 token 使用量的世界地图", + "model.peersDescription": "按近期 OpenCode Go token 用量排列的相近模型。", + "model.noPeersTitle": "无同类模型", + "model.noPeersDescription": "使用量到达后会显示同类模型排名。", + "model.noUsageLastWeek": "上周无使用量", + "model.newThisWeek": "本周新增", + "model.vsPreviousWeek": "较上周 {{change}}", + "model.pdf": "PDF", + "format.users": "用户", + "format.tokens": "token", +} satisfies Record diff --git a/packages/stats/app/src/i18n/zht.ts b/packages/stats/app/src/i18n/zht.ts new file mode 100644 index 000000000000..37faa6dc4168 --- /dev/null +++ b/packages/stats/app/src/i18n/zht.ts @@ -0,0 +1,229 @@ +import type { Key } from "../i18n" + +export const dict = { + "app.title": "AI 模型使用排名 | OpenCode 數據", + "app.description": + "探索 OpenCode Go 在各 AI 模型上的使用情況,包括 token 用量、排名、市場佔有率、token 價格、工作階段成本、快取比例和地理分布。", + "app.unfurlAlt": "深色紋理背景上的 OpenCode Data 字標", + "nav.dataHome": "數據首頁", + "nav.topModels": "熱門模型", + "nav.leaderboard": "排行榜", + "nav.uniqueUsers": "不重複使用者", + "nav.sessionCost": "工作階段成本", + "nav.tokenCost": "Token 成本", + "nav.cacheRatio": "快取比例", + "nav.marketShare": "市場佔有率", + "nav.geoBreakdown": "地理分布", + "nav.overview": "總覽", + "nav.usage": "用量", + "nav.users": "使用者", + "nav.efficiency": "效率", + "nav.peers": "同類模型", + "nav.models": "模型", + "header.brandLabel": "數據首頁", + "header.sectionNavLabel": "數據分區", + "header.githubAria": "在 GitHub 上為 OpenCode 加星", + "header.github": "GitHub", + "header.tryOpenCode": "試用 OpenCode", + "header.openNav": "開啟導覽", + "header.closeNav": "關閉導覽", + "theme.groupLabel": "主題", + "theme.dark": "深色", + "theme.light": "淺色", + "theme.system": "跟隨系統", + "footer.modelData": "模型數據", + "footer.legal": "法律", + "footer.connect": "聯絡", + "footer.newsletter": "電子報", + "footer.newsletterBody": "第一時間了解新版本發布。", + "footer.language": "語言", + "footer.subscribe": "訂閱", + "footer.terms": "服務條款", + "footer.privacy": "隱私權政策", + "footer.contact": "聯絡我們", + "footer.community": "社群", + "footer.youtube": "YouTube", + "footer.homeAria": "OpenCode 首頁", + "footer.status": "所有系統運作正常", + "footer.copyright": "© 2026 Anomaly Innovations Inc.", + "bridge.learnMore": "了解更多", + "modal.closeNewsletter": "關閉電子報註冊", + "modal.title": "OpenCode 電子報", + "modal.body": "第一時間了解\n新版本發布。", + "modal.email": "電子郵件地址", + "modal.subscribe": "訂閱", + "modal.subscribing": "正在訂閱...", + "modal.success": "你已訂閱。", + "modal.error": "訂閱失敗", + "product.allUsers": "所有使用者", + "product.zen": "Zen", + "product.go": "Go", + "range.1D": "1 天", + "range.1W": "1 週", + "range.2W": "2 週", + "range.1M": "1 個月", + "range.2M": "2 個月", + "chart.daily": "每日", + "chart.input": "輸入", + "chart.output": "輸出", + "chart.cached": "已快取", + "chart.uncached": "未快取", + "chart.ratio": "比例", + "chart.model": "模型", + "chart.cacheRatio": "快取比例", + "chart.costSession": "成本/工作階段", + "chart.tokensSession": "Token/工作階段", + "chart.costPerSession": "成本 / 工作階段", + "chart.tokensPerSession": "Token / 工作階段", + "chart.live": "即時", + "chart.percent": "百分比", + "chart.leaderboardAria": "模型 token 排行榜", + "chart.scrollableLeaderboardAria": "可捲動的模型 token 排行榜", + "chart.byAuthor": "作者:{{author}}", + "home.updated": "已更新", + "home.noRows": "暫無資料列", + "home.justNow": "剛剛", + "home.heroCopy": "查看哪些模型正在贏得真實使用量、使用組合如何變化,以及這對成本意味著什麼。", + "home.loadingTitle": "正在載入數據", + "home.loadingDescription": "正在讀取模型彙總。", + "home.usageTitle": "用量", + "home.topModelsDescription": "OpenCode Go 中各模型的使用情況。", + "home.noUsageTitle": "無使用數據", + "home.noUsageDescription": "沒有符合該產品和時間範圍的模型列。", + "home.noLeaderboardTitle": "無排行榜數據", + "home.noLeaderboardDescription": "沒有符合該產品和時間範圍的模型列。", + "home.productFilter": "產品篩選", + "home.dateRange": "日期範圍", + "home.stackedUsageChart": "熱門模型用量堆疊圖", + "home.total": "總計", + "home.modelUsers": "模型使用者", + "home.new": "新", + "home.uniqueUsersTitle": "不重複使用者", + "home.uniqueUsersDescription": "按模型顯示的每日 OpenCode Go 不重複使用者。", + "home.noUserDataTitle": "無使用者數據", + "home.noUserDataDescription": "沒有符合該視窗且包含使用者的模型列。", + "home.uniqueUsersChart": "按模型顯示的不重複使用者堆疊圖", + "home.marketShareTitle": "市場佔有率", + "home.marketShareDescription": "按模型作者比較 token 佔有率。", + "home.noMarketTitle": "無市場數據", + "home.noMarketDescription": "沒有符合該時間範圍的模型列。", + "home.marketChart": "按模型作者顯示的市場佔有率", + "home.noData": "無數據", + "home.geoTitle": "地理分布", + "home.geoDescription": "按國家/地區統計的 token 使用量。", + "home.noGeoTitle": "無地理數據", + "home.noGeoDescription": "沒有符合該時間範圍的地理列。", + "home.worldMap": "按國家/地區顯示 token 使用量的世界地圖", + "home.geoMapTitle": "地理分布地圖", + "home.unknown": "未知", + "home.tokenCostTitle": "Token 成本", + "home.tokenCostDescription": "每 100 萬 token 的價格。", + "home.noTokenCostTitle": "無 token 成本數據", + "home.noTokenCostDescription": "沒有符合該產品且包含成本的模型列。", + "home.cacheRatioTitle": "快取比例", + "home.cacheRatioDescription": "由快取提供的輸入 token 佔比。", + "home.noCacheTitle": "無快取比例數據", + "home.noCacheDescription": "沒有符合該產品且包含輸入 token 的模型列。", + "home.sessionCostTitle": "工作階段成本", + "home.sessionCostDescription": "每個工作階段的平均成本。", + "home.noSessionCostTitle": "無工作階段成本數據", + "home.noSessionCostDescription": "沒有符合該產品且包含工作階段的模型列。", + "home.costSession": "成本/工作階段", + "lab.title": "{{lab}} AI 模型使用量與排名 | OpenCode 數據", + "lab.description": + "比較在 OpenCode Go 中使用的 {{lab}} 模型,包括 token 用量、模型排名、上下文視窗、發布日期、成本和模型專屬數據。", + "lab.loadingTitle": "模型實驗室", + "lab.loadingDescription": "正在讀取模型可用性和近期 OpenCode 使用情況。", + "lab.notFound": "沒有符合此實驗室的模型。", + "lab.heroPrefix": "探索 OpenCode 中使用的 {{count}} 個 {{lab}} 模型", + "lab.heroIncluding": "包括 {{models}}", + "lab.heroSuffix": "比較近期 token 用量、上下文視窗、發布日期和模型專屬數據。", + "lab.tokensProcessed": "已處理 Token", + "lab.pending": "待定", + "lab.usageAfterActivity": "模型活動到達後會顯示使用量", + "lab.latestRelease": "最新發布 {{date}}", + "lab.shareOfUsage": "佔近期 OpenCode 使用量的 {{share}}", + "lab.usageTitle": "{{lab}} token 用量", + "lab.usageDescription": "過去兩個月的每日 OpenCode token 用量。", + "lab.noUsageTitle": "暫無使用量", + "lab.noUsageDescription": "此實驗室有活動後,近期 token 用量會顯示在這裡。", + "lab.dailyTokenChart": "{{lab}} 每日 token 用量圖", + "lab.dailyTokens": "每日 token", + "lab.tokens": "token", + "lab.modelsTitle": "{{lab}} 模型", + "lab.modelsDescription": "目錄詳情與近期使用量。", + "lab.recentUsageAndLimits": "近期使用量和限制。", + "lab.usage": "用量", + "lab.share": "佔比", + "model.title": "{{model}} 使用量、成本與排名 | OpenCode 數據", + "model.description": + "查看 {{model}} 的 OpenCode Go 使用數據,包括 token 用量、週排名、token 組合、成本、快取比例、工作階段、地理分布和同類模型。", + "model.loadingTitle": "模型數據", + "model.loadingDescription": "正在讀取模型彙總。", + "model.loadingProfile": "正在讀取模型檔案。", + "model.noDataTitle": "無模型數據", + "model.noDataDescription": "請嘗試從排行榜開啟一個模型。", + "model.noMatched": "沒有符合 {{id}} 的模型事實或使用列。", + "model.fallback": "模型", + "model.catalogFallback": "來自共享模型索引的模型事實。此模型產生活動後會顯示 OpenCode Go 使用量。", + "model.unranked": "未進入上週 OpenCode Go 使用量排名", + "model.ranked": "在上週 OpenCode Go 使用量中排名 #{{rank}}", + "model.observedVolume": "佔觀測到的 2M 用量的 {{share}}。", + "model.weights": "模型權重:{{label}}", + "model.rank": "7 日排名", + "model.profile": "模型檔案", + "model.listed": "已列出", + "model.noCurrentUsage": "目前數據視窗中沒有 OpenCode Go 使用量。", + "model.facts": "模型事實", + "model.context": "上下文", + "model.output": "輸出", + "model.knowledge": "知識", + "model.release": "發布", + "model.inputs": "輸入", + "model.overviewDescription": "近期 OpenCode Go token、不重複使用者和市場位置。", + "model.noSummaryTitle": "無使用摘要", + "model.noSummaryDescription": "此模型尚無 OpenCode Go 使用列。", + "model.tokens": "Token", + "model.uniqueUsers": "不重複使用者", + "model.lastTwoMonths": "過去兩個月", + "model.sessions": "工作階段", + "model.completedSessions": "已完成工作階段", + "model.tokenShare": "Token 佔比", + "model.totalModels": "{{count}} 個模型", + "model.momentum": "趨勢", + "model.vsPreviousWindow": "相較上一視窗", + "model.usageDescription": "近期兩個月視窗內的每日 OpenCode Go token 用量。", + "model.noUsageTitle": "無使用量", + "model.noUsageDescription": "目前視窗中沒有使用量。", + "model.dailyTokenChart": "每日 token 用量圖", + "model.usersDescription": "近期兩個月視窗內的每日 OpenCode Go 不重複使用者。", + "model.noUsersTitle": "無使用者數據", + "model.noUsersDescription": "目前視窗中沒有包含使用者的列。", + "model.dailyUserChart": "每日不重複使用者圖", + "model.efficiencyDescription": "成本、快取行為和平均 OpenCode Go 工作階段形態。", + "model.noEfficiencyTitle": "無效率數據", + "model.noEfficiencyDescription": "使用量到達後會顯示效率數據。", + "model.cost": "成本", + "model.totalSpend": "總支出", + "model.costPerMillion": "每 100 萬成本", + "model.inputOutput": "輸入 / 輸出", + "model.observedTokens": "觀測到的全部 token", + "model.costSession": "成本 / 工作階段", + "model.average": "平均", + "model.tokensSession": "Token / 工作階段", + "model.cacheRatio": "快取比例", + "model.inputTokens": "輸入 token", + "model.geoDescription": "按國家/地區統計的 OpenCode Go 模型 token 使用量。", + "model.noGeoTitle": "無地理數據", + "model.noGeoDescription": "沒有符合此模型的 OpenCode Go 地理列。", + "model.worldMap": "按國家/地區顯示模型 token 使用量的世界地圖", + "model.peersDescription": "按近期 OpenCode Go token 用量排列的相近模型。", + "model.noPeersTitle": "無同類模型", + "model.noPeersDescription": "使用量到達後會顯示同類模型排名。", + "model.noUsageLastWeek": "上週無使用量", + "model.newThisWeek": "本週新增", + "model.vsPreviousWeek": "較上週 {{change}}", + "model.pdf": "PDF", + "format.users": "使用者", + "format.tokens": "token", +} satisfies Record diff --git a/packages/stats/app/src/lib/language.ts b/packages/stats/app/src/lib/language.ts new file mode 100644 index 000000000000..73c2caabd0e0 --- /dev/null +++ b/packages/stats/app/src/lib/language.ts @@ -0,0 +1,48 @@ +import { route as localeRoute, strip as localeStrip } from "../../../../console/app/src/lib/language" +import type { Locale } from "../../../../console/app/src/lib/language" + +export { + LOCALES, + LOCALE_COOKIE, + LOCALE_HEADER, + clearCookie, + cookie, + detectFromAcceptLanguage, + detectFromLanguages, + dir, + fromPathname, + label, + localeFromCookieHeader, + localeFromRequest, + parseLocale, + tag, +} from "../../../../console/app/src/lib/language" + +export type { Locale } from "../../../../console/app/src/lib/language" + +export const basePath = "/data" +export const baseUrl = "https://opencode.ai" + +function normalizeDataPathname(pathname: string) { + const next = localeStrip(pathname) + const path = next.startsWith("/") ? next : `/${next}` + const trailing = path.endsWith("/") + const segments = path.split("/").filter(Boolean) + const dataIndex = segments.lastIndexOf(basePath.slice(1)) + const rest = dataIndex === -1 ? segments : segments.slice(dataIndex + 1) + const normalized = `${basePath}${rest.length ? `/${rest.join("/")}` : "/"}` + if (trailing && !normalized.endsWith("/")) return `${normalized}/` + return normalized +} + +export function strip(pathname: string) { + return normalizeDataPathname(pathname) +} + +export function route(locale: Locale, pathname: string) { + return localeRoute(locale, normalizeDataPathname(pathname)) +} + +export function localizedUrl(locale: Locale, pathname: string) { + return `${baseUrl}${route(locale, pathname)}` +} diff --git a/packages/stats/app/src/routes/[lab]/[model].tsx b/packages/stats/app/src/routes/[lab]/[model].tsx index 223218fcbbba..5d4dd1ae92a1 100644 --- a/packages/stats/app/src/routes/[lab]/[model].tsx +++ b/packages/stats/app/src/routes/[lab]/[model].tsx @@ -1,5 +1,5 @@ import "../index.css" -import { Link, Meta, Title } from "@solidjs/meta" +import { Meta, Title } from "@solidjs/meta" import { ProviderIcon } from "@opencode-ai/ui/provider-icon" import { geoEquirectangular, geoPath } from "d3-geo" import { scaleSqrt } from "d3-scale" @@ -19,6 +19,10 @@ import { createMemo, createSignal, For, onMount, Show, type JSX } from "solid-js import { getRequestEvent } from "solid-js/web" import type { FeatureCollection, GeometryObject, GeoJsonProperties } from "geojson" import type { GeometryCollection, Topology } from "topojson-specification" +import { LocaleLinks } from "../../component/locale-links" +import { useI18n } from "../../context/i18n" +import { useLanguage } from "../../context/language" +import { localizedUrl } from "../../lib/language" import { findModelCatalogEntry, formatCatalogLabName, @@ -38,30 +42,9 @@ import { type ThemePreference, } from "../stats-shell" -const statsCanonicalBaseUrl = "https://opencode.ai/data/" const statsUnfurlPath = "banner.png" -const statsUnfurlAlt = "OpenCode Data wordmark on a dark patterned background" -const statsUnfurlUrl = new URL(statsUnfurlPath, statsCanonicalBaseUrl).toString() -const modelHeaderLinks: readonly HeaderLink[] = [ - { href: "#overview", label: "Overview" }, - { href: "#usage", label: "Usage" }, - { href: "#users", label: "Users" }, - { href: "#efficiency", label: "Efficiency" }, - { href: "#geo-breakdown", label: "Geo Breakdown" }, - { href: "#peers", label: "Peers" }, -] -const modelFooterLinks: readonly HeaderLink[] = [ - { href: import.meta.env.BASE_URL, label: "Data Home" }, - { href: `${import.meta.env.BASE_URL}#top-models`, label: "Top Models" }, - { href: `${import.meta.env.BASE_URL}#leaderboard`, label: "Leaderboard" }, - { href: `${import.meta.env.BASE_URL}#session-cost`, label: "Session Cost" }, - { href: `${import.meta.env.BASE_URL}#token-cost`, label: "Token Cost" }, - { href: `${import.meta.env.BASE_URL}#market-share`, label: "Market Share" }, - { href: `${import.meta.env.BASE_URL}#geo-breakdown`, label: "Geo Breakdown" }, -] const geoMapWidth = 960 const geoMapHeight = 430 -const countryDisplayNames = new Intl.DisplayNames(["en"], { type: "region" }) type IsoCountryCode = readonly [string, string, string] type WorldCountryProperties = GeoJsonProperties & { name?: string } @@ -100,6 +83,8 @@ const getModelData = query(async (lab: string, model: string) => { }, "getStatsModelData") export default function StatsModel() { + const i18n = useI18n() + const language = useLanguage() const event = getRequestEvent() event?.response.headers.set("Cache-Control", "public, max-age=60, s-maxage=300, stale-while-revalidate=86400") const params = useParams() @@ -119,19 +104,34 @@ export default function StatsModel() { }) const githubStars = createAsync(() => getGitHubStars()) const [themePreference, setThemePreference] = createSignal("system") - const modelName = createMemo(() => catalogEntry()?.name ?? stats()?.model ?? modelParam() ?? "Model") + const modelName = createMemo(() => catalogEntry()?.name ?? stats()?.model ?? modelParam() ?? i18n.t("model.fallback")) const labName = createMemo(() => formatCatalogLabName(catalogEntry()?.lab ?? stats()?.provider ?? labParam())) - const modelTitle = createMemo(() => `${modelName()} Usage, Cost & Rank | OpenCode Data`) + const modelTitle = createMemo(() => i18n.t("model.title", { model: modelName() })) const modelDescription = createMemo( - () => - `View ${modelName()} OpenCode Go usage data, including token volume, weekly rank, token mix, costs, cache ratio, sessions, geo breakdowns, and peer models.`, + () => i18n.t("model.description", { model: modelName() }), ) - const modelUrl = createMemo(() => - new URL( - catalogEntry()?.id ?? [labParam(), stats()?.slug ?? modelParam()].filter((part) => part.length > 0).join("/"), - statsCanonicalBaseUrl, - ).toString(), + const modelPath = createMemo( + () => `/data/${catalogEntry()?.id ?? [labParam(), stats()?.slug ?? modelParam()].filter((part) => part.length > 0).join("/")}`, ) + const modelUrl = createMemo(() => localizedUrl(language.locale(), modelPath())) + const statsUnfurlUrl = new URL(statsUnfurlPath, localizedUrl("en", "/data/")).toString() + const modelHeaderLinks = createMemo(() => [ + { href: "#overview", label: i18n.t("nav.overview") }, + { href: "#usage", label: i18n.t("nav.usage") }, + { href: "#users", label: i18n.t("nav.users") }, + { href: "#efficiency", label: i18n.t("nav.efficiency") }, + { href: "#geo-breakdown", label: i18n.t("nav.geoBreakdown") }, + { href: "#peers", label: i18n.t("nav.peers") }, + ]) + const modelFooterLinks = createMemo(() => [ + { href: import.meta.env.BASE_URL, label: i18n.t("nav.dataHome") }, + { href: `${import.meta.env.BASE_URL}#top-models`, label: i18n.t("nav.topModels") }, + { href: `${import.meta.env.BASE_URL}#session-cost`, label: i18n.t("nav.sessionCost") }, + { href: `${import.meta.env.BASE_URL}#token-cost`, label: i18n.t("nav.tokenCost") }, + { href: `${import.meta.env.BASE_URL}#cache-ratio`, label: i18n.t("nav.cacheRatio") }, + { href: `${import.meta.env.BASE_URL}#market-share`, label: i18n.t("nav.marketShare") }, + { href: `${import.meta.env.BASE_URL}#geo-breakdown`, label: i18n.t("nav.geoBreakdown") }, + ]) const updateThemePreference = (preference: ThemePreference) => { applyThemePreference(preference) setThemePreference(preference) @@ -151,7 +151,7 @@ export default function StatsModel() {
{modelTitle()} - + @@ -161,13 +161,13 @@ export default function StatsModel() { - + - -
+ +
}> @@ -187,7 +187,7 @@ export default function StatsModel() {
@@ -195,85 +195,91 @@ export default function StatsModel() { } function ModelLoading() { + const i18n = useI18n() + const language = useLanguage() return ( <>
- - Data + + {i18n.t("footer.modelData")} -

Model Data

-

Reading model aggregates from model_stat.

+

{i18n.t("model.loadingTitle")}

+

{i18n.t("model.loadingDescription")}

- +
) } function ModelNotFound(props: { lab: string; model: string }) { + const i18n = useI18n() + const language = useLanguage() return ( <>
- - Data + + {i18n.t("footer.modelData")} -

{props.model || "Model"}

-

No model facts or model_stat rows matched {props.lab ? `${props.lab}/${props.model}` : props.model}.

+

{props.model || i18n.t("model.fallback")}

+

{i18n.t("model.noMatched", { id: props.lab ? `${props.lab}/${props.model}` : props.model })}

- +
) } function ModelHero(props: { data: StatsModelData | null; catalog: ModelCatalogEntry | null; labName: string }) { + const i18n = useI18n() + const language = useLanguage() const labId = () => props.catalog?.lab ?? props.data?.provider ?? props.labName - const modelId = () => props.catalog?.id ?? props.data?.model ?? "Model" + const modelId = () => props.catalog?.id ?? props.data?.model ?? i18n.t("model.fallback") const weights = () => props.catalog?.weights[0] return (
- - Data + + {i18n.t("footer.modelData")}
-

{props.catalog?.name ?? props.data?.model ?? "Model"}

+

{props.catalog?.name ?? props.data?.model ?? i18n.t("model.fallback")}

Model facts from the shared model index. OpenCode Go usage appears once this model has activity.

+

{i18n.t("model.catalogFallback")}

} > {(data) => (

{data().rank === null - ? "Unranked across last week's OpenCode Go usage" - : `Ranked #${data().rank} across last week's OpenCode Go usage`}{" "} - with {formatPercent(data().tokenShare)} of observed 2M volume. + ? i18n.t("model.unranked") + : i18n.t("model.ranked", { rank: data().rank ?? "" })}{" "} + {i18n.t("model.observedVolume", { share: formatPercent(data().tokenShare) })}

)}
{(weight) => ( - Model weights: {weight().label} + {i18n.t("model.weights", { label: weight().label })} )} @@ -281,9 +287,9 @@ function ModelHero(props: { data: StatsModelData | null; catalog: ModelCatalogEn }> {(data) => (
- 7D Rank + {i18n.t("model.rank")} {data().rank === null ? "—" : `#${data().rank}`} -

{formatModelRankMoveLabel(data())}

+

{formatModelRankMoveLabel(data(), i18n)}

)}
@@ -295,24 +301,38 @@ function ModelHero(props: { data: StatsModelData | null; catalog: ModelCatalogEn } function ModelCatalogCallout(props: { catalog: ModelCatalogEntry | null }) { + const i18n = useI18n() + const language = useLanguage() return (
- Model Profile - {props.catalog?.releaseDate ? formatCatalogDate(props.catalog.releaseDate) : "Listed"} -

No OpenCode Go usage in the current data window.

+ {i18n.t("model.profile")} + + {props.catalog?.releaseDate + ? formatCatalogDate(props.catalog.releaseDate, language.tag(language.locale()), i18n.t("home.unknown")) + : i18n.t("model.listed")} + +

{i18n.t("model.noCurrentUsage")}

) } function ModelCatalogPanel(props: { data: ModelCatalogEntry }) { + const i18n = useI18n() + const language = useLanguage() return ( -