Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions packages/app/AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
- When migrating existing copy to i18n, preserve the English text byte-for-byte unless the task explicitly requests a copy change.
- NEVER change existing English text or English keys to facilitate translation. English is intentional, designer-written source copy; adapt locale-specific translations and i18n mechanics around it.
- Keep locale complexity behind the shared typed i18n APIs. Feature and component code should use `language.t(...)` for ordinary copy and `language.plural(baseKey, count, params)` for count-sensitive copy. It must not inspect the locale, call `Intl.PluralRules`, construct or select plural-category keys such as `.one` or `.other`, or branch on locale-specific grammar.
- Do not compose translated count phrases or sentence fragments in feature components. Add a focused language-context operation that owns plural selection and composition when one UI concept needs coordinated keys.
- Prefer complete translated phrases. Do not concatenate grammatical fragments or make call sites assemble sentences. Keep placeholders to irreducible dynamic values such as names, paths, and counts.
- If a translation cannot be expressed by the current API, deepen the shared language/UI i18n module so one typed call owns locale selection, plural resolution, fallback, and interpolation. Do not leak that machinery into product code.
- Do not translate from model knowledge alone. Verify terminology and grammar with Unicode CLDR locale/plural data, Microsoft Localization Style Guides and terminology, Apple localization/style guidance and localized platform UI, Mozilla localization style guides, Mozilla Pontoon, and the Firefox localization corpus at `github.com/mozilla-l10n/firefox-l10n`.
Expand Down
4 changes: 1 addition & 3 deletions packages/app/src/new-session/workspace/selector.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -194,9 +194,7 @@ export function PromptWorkspaceSelector(props: {
}}
>
<Icon name="outline-worktree" />
<span class="min-w-0 flex-1 truncate">
{language.t("session.new.workspace.existing").replace(/(…|\.{3})$/, "")}
</span>
<span class="min-w-0 flex-1 truncate">{language.t("session.new.workspace.existingLabel")}</span>
</Menu.SubTrigger>
<Menu.Portal>
<Menu.SubContent class="max-h-[66.667dvh] w-[200px] overflow-y-auto !pb-0 [&>[data-component=menu-v2-item]:last-child]:mb-0.5 [@media(max-height:600px)]:max-h-[calc(100dvh-48px)]">
Expand Down
2 changes: 1 addition & 1 deletion packages/app/src/providers/connect/controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -175,7 +175,7 @@ export function createProviderConnectionController(options: {
}
if (selected.type !== "oauth") return
if (selected.form?.some((field) => field.type !== "string")) {
dispatch({ type: "auth.error", error: "This authentication form contains unsupported fields" })
dispatch({ type: "auth.error", error: language.t("provider.connect.error.unsupportedFields") })
return
}
dispatch({ type: "auth.pending" })
Expand Down
416 changes: 416 additions & 0 deletions packages/app/src/runtime/i18n/am.ts

Large diffs are not rendered by default.

490 changes: 490 additions & 0 deletions packages/app/src/runtime/i18n/ar.ts

Large diffs are not rendered by default.

442 changes: 442 additions & 0 deletions packages/app/src/runtime/i18n/az.ts

Large diffs are not rendered by default.

446 changes: 446 additions & 0 deletions packages/app/src/runtime/i18n/bg.ts

Large diffs are not rendered by default.

438 changes: 438 additions & 0 deletions packages/app/src/runtime/i18n/bn.ts

Large diffs are not rendered by default.

463 changes: 463 additions & 0 deletions packages/app/src/runtime/i18n/br.ts

Large diffs are not rendered by default.

457 changes: 456 additions & 1 deletion packages/app/src/runtime/i18n/bs.ts

Large diffs are not rendered by default.

465 changes: 465 additions & 0 deletions packages/app/src/runtime/i18n/ca.ts

Large diffs are not rendered by default.

468 changes: 468 additions & 0 deletions packages/app/src/runtime/i18n/cs.ts

Large diffs are not rendered by default.

437 changes: 437 additions & 0 deletions packages/app/src/runtime/i18n/da.ts

Large diffs are not rendered by default.

458 changes: 458 additions & 0 deletions packages/app/src/runtime/i18n/de.ts

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions packages/app/src/runtime/i18n/desktop-native.ts
Original file line number Diff line number Diff line change
Expand Up @@ -306,6 +306,7 @@ export const DESKTOP_NATIVE_ENGLISH = {
"desktop.dialog.saveFile": "Save file",
"desktop.dialog.files": "Files",
"desktop.server.local": "Local Server",
"desktop.onboarding.defaultProject": "Default Project",

"desktop.wsl.error.windowsOnly": "WSL is only available on Windows",
"desktop.wsl.error.unavailable": "WSL is unavailable",
Expand Down
672 changes: 570 additions & 102 deletions packages/app/src/runtime/i18n/dv.ts

Large diffs are not rendered by default.

451 changes: 451 additions & 0 deletions packages/app/src/runtime/i18n/dz.ts

Large diffs are not rendered by default.

464 changes: 464 additions & 0 deletions packages/app/src/runtime/i18n/el.ts

Large diffs are not rendered by default.

25 changes: 25 additions & 0 deletions packages/app/src/runtime/i18n/en.ts
Original file line number Diff line number Diff line change
Expand Up @@ -198,6 +198,7 @@ export const dict = {
"provider.connect.status.inProgress": "Authorization in progress…",
"provider.connect.status.waiting": "Waiting for authorization…",
"provider.connect.status.failed": "Authorization failed: {{error}}",
"provider.connect.error.unsupportedFields": "This authentication form contains unsupported fields",
"provider.connect.apiKey.description":
"Enter your {{provider}} API key to connect your account and use {{provider}} models in OpenCode.",
"provider.connect.apiKey.label": "{{provider}} API key",
Expand Down Expand Up @@ -266,6 +267,8 @@ export const dict = {

"provider.disconnect.toast.disconnected.title": "{{provider}} disconnected",
"provider.disconnect.toast.disconnected.description": "{{provider}} models are no longer available.",
"provider.disconnect.toast.noCredentials.description": "No removable credentials found for {{provider}}.",
"provider.disconnect.toast.failed.description": "Failed to disconnect {{provider}}.",

"model.tag.free": "Free",
"model.tag.latest": "Latest",
Expand Down Expand Up @@ -296,6 +299,15 @@ export const dict = {
"common.loading.ellipsis": "…",
"common.cancel": "Cancel",
"common.clear": "Clear",
"common.color.orange": "orange",
"common.color.yellow": "yellow",
"common.color.cyan": "cyan",
"common.color.green": "green",
"common.color.red": "red",
"common.color.pink": "pink",
"common.color.blue": "blue",
"common.color.purple": "purple",
"common.color.gray": "gray",
"common.open": "Open",
"common.connect": "Connect",
"common.disconnect": "Disconnect",
Expand Down Expand Up @@ -643,6 +655,13 @@ export const dict = {
"toast.session.listFailed.title": "Failed to load sessions for {{project}}",
"toast.project.reloadFailed.title": "Failed to reload {{project}}",
"toast.migration.failed.title": "Data migration failed",
"toast.migration.progress.clearingOldEvents": "Clearing old events",
"toast.migration.progress.migratingSessions": "Migrating sessions",
"toast.migration.progress.migratingSessions.current": "Migrating sessions {{current}}",
"toast.migration.progress.migratingSessions.progress": "Migrating sessions {{current}}/{{total}}",
"toast.migration.progress.working": "Migrating data",
"toast.migration.progress.working.current": "Migrating data {{current}}",
"toast.migration.progress.working.progress": "Migrating data {{current}}/{{total}}",

"toast.update.title": "Update available",
"toast.update.description": "A new version of OpenCode ({{version}}) is now available to install.",
Expand Down Expand Up @@ -781,6 +800,8 @@ export const dict = {
"session.timeline.notice.cancelled": "{{actor}} cancelled",
"session.error.serverConnection": "Can't connect to this server",
"session.review.filesChanged": "Files Changed {{count}}",
"session.review.filesChangedCount.one": "{{count}} file changed",
"session.review.filesChangedCount.other": "{{count}} files changed",
"session.review.change.one": "Change",
"session.review.change.other": "Changes",
"session.review.loadingChanges": "Loading changes…",
Expand Down Expand Up @@ -841,6 +862,7 @@ export const dict = {
"session.new.workspace.triggerLocal": "Local",
"session.new.workspace.local": "Local repository",
"session.new.workspace.existing": "Worktree…",
"session.new.workspace.existingLabel": "Worktree",
"session.new.git.none": "No Git",
"session.new.lastModified": "Last modified",

Expand Down Expand Up @@ -901,6 +923,7 @@ export const dict = {

"session.browser.address": "Browser address",
"session.browser.replaced": "Browser control moved to another desktop window.",
"session.browser.unsupported": "This desktop app does not support the browser pane.",
"session.browser.suspended": "Browser suspended. Interact with this session to reconnect.",
"session.browser.address.placeholder": "Enter URL",

Expand Down Expand Up @@ -1029,6 +1052,8 @@ export const dict = {
"settings.about.writtenBy": "Written by",
"settings.about.illustratedBy": "Illustrated by",
"settings.about.and": "and",
"settings.about.writtenByNames": "Written by {{names}}",
"settings.about.illustratedByNames": "Illustrated by {{names}}",
"settings.about.otherContributor.one": "{{count}} other",
"settings.about.otherContributor.other": "{{count}} others",
"settings.about.firstPublished": "First published in Missouri, USA",
Expand Down
Loading
Loading