Repository navigation
fix(i18n): complete Ukrainian (uk-UA) UI translation coverage - #2988
diegosouzapw merged 18 commits into
Conversation
…ab, and 20 tests (cheaper-inference#2959) Integrated into release/v3.8.8
… scopes to all dynamic tool definitions (cheaper-inference#2958) Integrated into release/v3.8.8
…heaper-inference#2957) Integrated into release/v3.8.8
…mizations (cheaper-inference#2951) Integrated into release/v3.8.8
…ombo target's providerId over model-inferred provider (cheaper-inference#2946) Integrated into release/v3.8.8
…native Claude OAuth (cheaper-inference#2943) Integrated into release/v3.8.8
Integrated into release/v3.8.8
…#2938) Integrated into release/v3.8.8
Integrated into release/v3.8.8
Integrated into release/v3.8.8
Signed-off-by: Xiangzhe <xiangzhedev@gmail.com>
Translates ~267 previously-English or __MISSING__ entries in the Ukrainian locale, focused on the most user-visible surfaces: - sidebar: all menu items, section labels, page subtitles - header: page titles and descriptions - apiManager: 3 __MISSING__ endpoint-restriction keys - common: high-traffic UI labels (buttons, statuses, common nouns) - settings: 7 newly-added Home-page quota/topology keys Key parity with en.json restored: 0 missing, 0 extra.
…-ui-menu fix(i18n): translate Ukrainian (uk-UA) menu and UI strings
…w-cn-endpoint-selector feat(providers): add SiliconFlow endpoint selector
Follow-up to cheaper-inference#2981. Translates all remaining __MISSING__ entries and addresses the high-traffic English fallbacks across the dashboard so no `__MISSING__:` markers remain visible in any locale UI. Scope (642 +/ 642 −, ~620 keys touched): - apiManager: filter chips (status/type), schedule, visibility, day abbreviations, search placeholder, plural counts (ICU one/few/many). - providers: page-section descriptions (Compatible, OAuth, Free tier, API key, Cloud Agent), Web Fetch chip, miniPlayground.testLabel. - combos: wizard steps 1-4 (titles + descs), filters (All/Intelligent/Deterministic), usage guide buttons (Hide/Don't show again), email visibility hints, builder/manual model labels. - usage / quota dashboard: stat cards (Total/Critical/Alert/Healthy), filters Type/Tier, purchase types (Subscription/OAuth Free/API Key), card labels (Updated/Refreshing/Resets in/Credits/Unlimited), evals strategy labels, history columns. Also fixes a pre-existing bad translation: "Редагувати обрізки" → "Редагувати порогові значення" (editCutoffs). - analytics: full dashboard — diversity scoring, chart axes/labels, range presets (Today/Yesterday/Last 3 days/etc.), period buttons, infrastructure/performance/highlights sections. - webhooks: full page including wizard (3 steps), howItWorks guide, HMAC verification recipes, deliveries log columns, integration kinds (Slack/Telegram/Discord/PagerDuty/Teams/Email/Custom), URL validator messages, per-integration form fields/placeholders. - skills: marketplace tab, install modal, popular skills, ON/OFF/AUTO modes, search/pagination, errors. - health: provider health matrix, lockouts/cooldowns, model pill summaries, score/last request/last error. - mcpDashboard / a2aDashboard: transport modes, disabled states, intros, step-by-step setup instructions. - settings.routing: all DSL operations (drop paragraph/replace text/ inject billing header/obfuscate words/etc.), auto-routing variants (LKGP / Coding / Fast / Cheap / Offline / Smart), Antigravity signature modes, client cache_control preserve modes, vision bridge, payload rules editor, request limits, Codex fast-tier, Vercel relay deploy modal, ICU plural for op count. - settings.authz (new section): 5-tier route classification, bypass policy, kill-switch, password prompts, error messages. - cloudAgents, cache, proxyRegistry, miniPlayground, logs, costs, endpoint, media, agents, contextRtk, contextCaveman: remaining high-traffic strings. - sidebar: gemini-code-assist feedback applied — "Білий лейбл" is unnatural in Ukrainian product copy, switched to "Брендування" / "Налаштування брендування" for whitelabeling / whitelabelingDesc. Methodology: keys are only overwritten when the existing Ukrainian value equals the English original OR begins with `__MISSING__:`. No already-translated keys were touched (verified by skipped=0 on the patch run). For ICU plurals, full Ukrainian one/few/many/other rules are used where the source defined plural categories. Loanwords kept in Latin script when they identify a product or protocol (OAuth, MITM, MCP, A2A, RTK, Caveman, FTS5, HMAC, ZWJ, IANA, SDK, CLI, ENV). Validation: - Key parity vs en.json restored: 6961/6961 (0 missing, 0 extra). - Remaining `__MISSING__:` markers in uk-UA.json: 0. - File is valid JSON; diff is purely value changes in src/i18n/messages/uk-UA.json — no structural changes. - Built and tested locally; service comes up; dashboard pages render the expected Ukrainian on Providers / API Manager / Combos / Quota / Settings (incl. Authz) / Webhooks / MCP / A2A / Skills / Health. Related: cheaper-inference#2981 (initial menu/header translation, merged).
|
Note Gemini is unable to generate a review for this pull request due to the file types involved not being currently supported. |
Code Review SummaryStatus: 13 Issues Found | Recommendation: Address before merge Overview
Issue Details (click to expand)WARNING
Other Observations (not in diff)The PR successfully removes all
Files Reviewed (1 file)
|
Code Review SummaryStatus: No Issues Found | Recommendation: Merge The PR successfully removes all Incremental Changes (since previous review)This PR received 3 additional translation improvements:
Files Reviewed (1 file)
Other Observations (not in diff - pre-existing untranslated strings)The following untranslated strings exist in the file but were not modified in this PR (shown as context, not
These untranslated strings are in sections that were not within the PR's scope (as described: "high-traffic English fallbacks across the dashboard"). They could be addressed in a follow-up PR if full Ukrainian UI coverage is desired. Reviewed by laguna-m.1-20260312:free · 220,291 tokens |
…xtRtk, contextCombos
Follow-up commit addressing the 13 WARNING items kilo-code-bot flagged
on this PR. All were pre-existing English fallbacks in sections not
covered by the original commit.
Translated:
- common (6): retry, expirationBannerExpiringSoon, errorCount,
backupReasonManual, safeSearchModerate, activeLimiters.
- themesPage (7): full section — title, description, presetColors,
customTheme, customThemeDesc, createTheme, activePreset.
- contextRtk (22+): page chrome and engine config — title,
description, enabled, intensity (Minimal/Standard/Aggressive),
toolResults, assistantMessages, codeBlocks, maxLines, maxChars,
filterTesting, pasteOutput placeholder, run, result, previewEmpty,
detected, tokensFiltered, filtersActive, requests, avgSavings,
advancedMode kept ("Просунутий" already present).
- contextRtk.simpleMode: forced overwrite from low-quality "просто"
→ "Простий режим" (proper noun-phrase form matching advancedMode).
- contextCombos (20): full compression-combos editor — title,
description, createCombo, editCombo, deleteCombo, deleteConfirm,
pipeline, addStep, removeStep, name, descriptionField,
languagePacks, outputMode, assignToRouting, noAssignments,
default, setAsDefault, save, cancel, enabled.
Not addressed:
- vercelRelay* (bot flagged "consistency"): kept as-is — "Vercel
Relay" is a product proper noun, same handling as OmniRoute /
GitHub / Slack elsewhere in this file.
Methodology unchanged from the parent commit: only overwrite keys
whose existing Ukrainian value equals English or starts with
`__MISSING__:`. One forced overwrite (`contextRtk.simpleMode`)
explicitly noted above.
Three quality fixes in contextRtk caught while reviewing the kilo-bot
feedback in detail:
- presetLow: "світло" → "Легкий". The English source is "Light",
sibling of presetHigh ("Aggressive") and presetMedium ("Standard")
— i.e. it labels a low-intensity preset, not the noun "light"
(opposite of darkness). "Легкий" matches the lightweight-intensity
meaning and reads naturally alongside "Стандартний" / "Агресивний".
- presetMaxLines: "Макс вихідних ліній" → "Макс. вихідних рядків".
"Lines" here refers to rows of text. "Лінія" in Ukrainian means a
geometric line; for text output the correct word is "рядок".
- tooltipMaxLines: previously rendered the inverse meaning of the
source. EN: "Maximum lines to keep from command output. Excess is
truncated." Previous UK: "Максимальна кількість рядків, які не
потрібно виводити командою. Надлишки обрізаються." (says the
opposite — "lines that should NOT be output"). New: "Максимальна
кількість рядків виводу команди, які зберігаються. Надлишок
обрізається."
|
Obrigado pela contribuição contínua com a tradução! Integramos manualmente a PR #2981 hoje mais cedo, mas isso gerou conflitos maciços no arquivo |
…followup # Conflicts: # .env.example # .source/browser.ts # .source/server.ts # docs/frameworks/MCP-SERVER.md # open-sse/handlers/chatCore.ts # open-sse/mcp-server/server.ts # src/app/(dashboard)/dashboard/api-manager/ApiManagerPageClient.tsx # src/i18n/messages/uk-UA.json # tests/unit/api-manager-page-static.test.ts
8ef8a9b
into
cheaper-inference:release/v3.8.8
|
Merged into |
…env-doc fixes - bump package.json / open-sse / electron / openapi / llm.txt to 3.8.8 - restructure CHANGELOG: Unreleased -> [3.8.8], dedup broken Notion/MCP block (was 12x) - add every PR since v3.8.7 that was missing: Quota Share Engine (#2859/#3022/#3032), page redesigns (#2827/#2839/#2847/#2849/#2869/#2873), and fixes #2960/#2973/#2984/ #3021/#3029/#3031/#3035/#3036/#3037/#3039/#3043/#3028; folded #2978/#2988/#3041 - insert [3.8.8] section into all 41 i18n CHANGELOGs + sync llm.txt mirrors - document OMNIROUTE_PLUGINS_ALLOW_EXEC in .env.example + ENVIRONMENT.md (env-doc-sync gap)
…r-inference#2988) Integrated into release/v3.8.8. Applied your Ukrainian translations across the current uk-UA.json structure (709 keys improved from English/__MISSING__ to proper Ukrainian), preserving release's latest key set. Thanks @Lion-killer!
…env-doc fixes - bump package.json / open-sse / electron / openapi / llm.txt to 3.8.8 - restructure CHANGELOG: Unreleased -> [3.8.8], dedup broken Notion/MCP block (was 12x) - add every PR since v3.8.7 that was missing: Quota Share Engine (cheaper-inference#2859/cheaper-inference#3022/cheaper-inference#3032), page redesigns (cheaper-inference#2827/cheaper-inference#2839/cheaper-inference#2847/cheaper-inference#2849/cheaper-inference#2869/cheaper-inference#2873), and fixes cheaper-inference#2960/cheaper-inference#2973/cheaper-inference#2984/ cheaper-inference#3021/cheaper-inference#3029/cheaper-inference#3031/cheaper-inference#3035/cheaper-inference#3036/cheaper-inference#3037/cheaper-inference#3039/cheaper-inference#3043/cheaper-inference#3028; folded cheaper-inference#2978/cheaper-inference#2988/cheaper-inference#3041 - insert [3.8.8] section into all 41 i18n CHANGELOGs + sync llm.txt mirrors - document OMNIROUTE_PLUGINS_ALLOW_EXEC in .env.example + ENVIRONMENT.md (env-doc-sync gap)
…r-inference#2988) Integrated into release/v3.8.8. Applied your Ukrainian translations across the current uk-UA.json structure (709 keys improved from English/__MISSING__ to proper Ukrainian), preserving release's latest key set. Thanks @Lion-killer!
…env-doc fixes - bump package.json / open-sse / electron / openapi / llm.txt to 3.8.8 - restructure CHANGELOG: Unreleased -> [3.8.8], dedup broken Notion/MCP block (was 12x) - add every PR since v3.8.7 that was missing: Quota Share Engine (cheaper-inference#2859/cheaper-inference#3022/cheaper-inference#3032), page redesigns (cheaper-inference#2827/cheaper-inference#2839/cheaper-inference#2847/cheaper-inference#2849/cheaper-inference#2869/cheaper-inference#2873), and fixes cheaper-inference#2960/cheaper-inference#2973/cheaper-inference#2984/ cheaper-inference#3021/cheaper-inference#3029/cheaper-inference#3031/cheaper-inference#3035/cheaper-inference#3036/cheaper-inference#3037/cheaper-inference#3039/cheaper-inference#3043/cheaper-inference#3028; folded cheaper-inference#2978/cheaper-inference#2988/cheaper-inference#3041 - insert [3.8.8] section into all 41 i18n CHANGELOGs + sync llm.txt mirrors - document OMNIROUTE_PLUGINS_ALLOW_EXEC in .env.example + ENVIRONMENT.md (env-doc-sync gap)
…r-inference#2988) Integrated into release/v3.8.8. Applied your Ukrainian translations across the current uk-UA.json structure (709 keys improved from English/__MISSING__ to proper Ukrainian), preserving release's latest key set. Thanks @Lion-killer!
…env-doc fixes - bump package.json / open-sse / electron / openapi / llm.txt to 3.8.8 - restructure CHANGELOG: Unreleased -> [3.8.8], dedup broken Notion/MCP block (was 12x) - add every PR since v3.8.7 that was missing: Quota Share Engine (cheaper-inference#2859/cheaper-inference#3022/cheaper-inference#3032), page redesigns (cheaper-inference#2827/cheaper-inference#2839/cheaper-inference#2847/cheaper-inference#2849/cheaper-inference#2869/cheaper-inference#2873), and fixes cheaper-inference#2960/cheaper-inference#2973/cheaper-inference#2984/ cheaper-inference#3021/cheaper-inference#3029/cheaper-inference#3031/cheaper-inference#3035/cheaper-inference#3036/cheaper-inference#3037/cheaper-inference#3039/cheaper-inference#3043/cheaper-inference#3028; folded cheaper-inference#2978/cheaper-inference#2988/cheaper-inference#3041 - insert [3.8.8] section into all 41 i18n CHANGELOGs + sync llm.txt mirrors - document OMNIROUTE_PLUGINS_ALLOW_EXEC in .env.example + ENVIRONMENT.md (env-doc-sync gap)
Summary
Follow-up to #2981. Eliminates every remaining
__MISSING__:marker fromuk-UA.jsonand translates the high-traffic English fallbacks across the dashboard — ~620 keys, no English remains on the visible UI surfaces I audited.After this PR the Ukrainian locale has full parity with
en.json(6961 / 6961 keys, 0 missing / 0 extra, 0__MISSING__:markers).Scope by page / section
apiManager— filter chips (Status/Type), schedule (From/Until/Days/Timezone + day abbreviations Пн-Нд), search placeholder, visibility/auto-resolve settings. PluralendpointsRestricteduses full Ukrainian one/few/many/other ICU rules.providers— page-section descriptions (Compatible / OAuth / Free tier / API key / Cloud Agent / Web Fetch), filter chips (No Auth / Upstream Proxy / Web Fetch), risk-notice modal (oauth / webCookie / deprecated variants), Antigravity client profile.miniPlayground— the "Test" button next to every provider connection card + all field labels (Endpoint / API Key / Model / Voice / Speed / Input / Format / Duration / Query / etc.).combos— wizard steps 1-4 (titles + descriptions), filters (All / Intelligent / Deterministic), usage-guide buttons (Hide / Don't show again), email visibility hints, builder labels.usage(Provider Quota page) — stat cards (Total/Critical/Alert/Healthy), filters Type/Tier, purchase types (Subscription / OAuth Free / API Key), card labels (Updated / Refreshing / Resets in / Credits / Unlimited / Next reset UTC), evals strategy labels, history columns. Also fixes a pre-existing bad translation:editCutoffswas "Редагувати обрізки" ("scraps") → now "Редагувати порогові значення" ("threshold values").analytics— full Usage Analytics dashboard: diversity scoring + Shannon entropy, chart axes/labels (Requests/Input/Output/Total/Cost/Share/Service Tier/Cache read), range presets (Today / Yesterday / Last 3 days / This week / Last 14 days / This month + custom), period buttons (1D/7D/30D/90D/YTD/All), Infrastructure / Performance / Highlights sections.webhooks— full page: 3-step setup wizard, "How webhooks work" guide, HMAC verification recipes (Node.js / Python / Bash), deliveries log columns, integration kinds (Slack / Telegram / Discord / PagerDuty / Teams / Email / Custom), URL validator messages, per-integration form fields/placeholders/tutorials, retry/timeout notes.skills— marketplace tab, install modal (paste-JSON / upload-JSON / from-marketplace), popular-skills list, ON/OFF/AUTO modes, search + pagination + error states.health— Provider Health Matrix, lockout / cooldown / inferred / locked badges, model pill summaries, score / last request / last error.mcpDashboard,a2aDashboard— transport mode descriptions (stdio / SSE / Streamable HTTP), disabled-state CTAs, step-by-step setup intros.settings.routing— all DSL operations (drop paragraph contains / starts with / replace text / replace regex / drop block / prepend block / append block / inject billing header / obfuscate words) with full multi-paragraph hints, auto-routing variants (LKGP / Coding / Fast / Cheap / Offline / Smart), Antigravity signature modes (Enabled / Bypass / Bypass Strict), clientcache_controlpreserve modes, vision bridge, payload-rules editor, request limits, Codex fast-tier toggle, Vercel relay deploy modal. ICU plural for op count.settings.authz(new section, previously a blank__MISSING__block) — 5-tier route classification (Local only / Always protected / Management / Client API / Public), manage-scope bypass policy, kill-switch, password-prompt modal, error catalog (PASSWORD_REQUIRED / PASSWORD_MISMATCH / INSUFFICIENT_SCOPE / BYPASS_PREFIX_NOT_ALLOWED / GENERIC).cloudAgents,cache,proxyRegistry,logs,costs,endpoint,media,agents,contextRtk,contextCaveman,common— remaining filter chips, status badges, intro guides, table columns, time helpers (just now / minutes ago / hours ago / days ago).gemini-code-assist feedback from #2981 (applied)
Suggestions 2 & 3 from #2981 review applied:
sidebar.whitelabeling: "Білий лейбл" → "Брендування" (Branding — natural product term).sidebar.whitelabelingDesc: "Білий лейбл" → "Налаштування брендування".Suggestion 1 (ICU plural for
combos.daysAgo) is not in this PR — handled separately if you want; this PR is locale-fill rather than ICU-plural-cleanup.Methodology
Keys are only overwritten when the existing UK value equals the EN original OR starts with
__MISSING__:. No already-translated keys are touched (verified byskipped=0on the patch run). Loanwords that identify products/protocols stay in Latin: OAuth, MITM, MCP, A2A, RTK, Caveman, FTS5, HMAC, ZWJ, IANA, SDK, CLI, ENV, DEF, Codex, Antigravity, Anthropic.Related Issues
__MISSING__:i18n keys in Docker latest #2738 (zh-CN).Validation
python3 -c "import json; json.load(open(...))"— file is valid JSON.en.json: 6961 / 6961 (0 missing / 0 extra).__MISSING__:markers inuk-UA.json: 0 (was 577 before patch).npm run build(Next.js 16.2.6, webpack) — successful.npm run lint,npm run test:unit— not run locally; this is a translation-only change with no code/structural modifications.Tests Added Or Updated
None. Translation-only PR; no production code changed.
Reviewer Notes
apiManager.endpointsRestricted,settings.routingOpSummaryCount) use Ukrainian one/few/many/other categories: 1 → one, 2-4 → few, 5+ → many.editCutoffs("обрізки" → "порогові значення") is technically pre-existing string-cleanup unrelated to the__MISSING__:set, but it was visibly broken on the Quota page so I bundled it here.