Skip to content

Commit 6ef3af7

Browse files
authored
chore(app): i18n sync (anomalyco#15362)
1 parent e5ae6c5 commit 6ef3af7

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

65 files changed

+1096
-71
lines changed

packages/app/src/components/dialog-release-notes.tsx

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { createSignal } from "solid-js"
22
import { Dialog } from "@opencode-ai/ui/dialog"
33
import { Button } from "@opencode-ai/ui/button"
44
import { useDialog } from "@opencode-ai/ui/context/dialog"
5+
import { useLanguage } from "@/context/language"
56
import { useSettings } from "@/context/settings"
67

78
export type Highlight = {
@@ -16,6 +17,7 @@ export type Highlight = {
1617

1718
export function DialogReleaseNotes(props: { highlights: Highlight[] }) {
1819
const dialog = useDialog()
20+
const language = useLanguage()
1921
const settings = useSettings()
2022
const [index, setIndex] = createSignal(0)
2123

@@ -83,16 +85,16 @@ export function DialogReleaseNotes(props: { highlights: Highlight[] }) {
8385
<div class="flex flex-col items-start gap-3">
8486
{isLast() ? (
8587
<Button variant="primary" size="large" onClick={handleClose}>
86-
Get started
88+
{language.t("dialog.releaseNotes.action.getStarted")}
8789
</Button>
8890
) : (
8991
<Button variant="secondary" size="large" onClick={handleNext}>
90-
Next
92+
{language.t("dialog.releaseNotes.action.next")}
9193
</Button>
9294
)}
9395

9496
<Button variant="ghost" size="small" onClick={handleDisable}>
95-
Don't show these in the future
97+
{language.t("dialog.releaseNotes.action.hideFuture")}
9698
</Button>
9799
</div>
98100

@@ -128,7 +130,7 @@ export function DialogReleaseNotes(props: { highlights: Highlight[] }) {
128130
{feature()!.media!.type === "image" ? (
129131
<img
130132
src={feature()!.media!.src}
131-
alt={feature()!.media!.alt ?? feature()?.title ?? "Release preview"}
133+
alt={feature()!.media!.alt ?? feature()?.title ?? language.t("dialog.releaseNotes.media.alt")}
132134
class="w-full h-full object-cover"
133135
/>
134136
) : (

packages/app/src/components/dialog-select-file.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -449,7 +449,7 @@ export function DialogSelectFile(props: { mode?: DialogSelectFileMode; onOpenFil
449449
</div>
450450
<Show when={item.updated}>
451451
<span class="text-12-regular text-text-weak whitespace-nowrap ml-2">
452-
{getRelativeTime(new Date(item.updated!).toISOString())}
452+
{getRelativeTime(new Date(item.updated!).toISOString(), language.t)}
453453
</span>
454454
</Show>
455455
</div>

packages/app/src/components/session/session-header.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -430,7 +430,7 @@ export function SessionHeader() {
430430
<Spinner class="size-3.5 text-icon-base" />
431431
</Show>
432432
</div>
433-
<span class="text-12-regular text-text-strong">Open</span>
433+
<span class="text-12-regular text-text-strong">{language.t("common.open")}</span>
434434
</Button>
435435
<div class="self-stretch w-px bg-border-weak-base" />
436436
<DropdownMenu

packages/app/src/components/settings-providers.tsx

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ export const SettingsProviders: Component = () => {
162162
when={canDisconnect(item)}
163163
fallback={
164164
<span class="text-14-regular text-text-base opacity-0 group-hover:opacity-100 transition-opacity duration-200 pr-3 cursor-default">
165-
Connected from your environment variables
165+
{language.t("settings.providers.connected.environmentDescription")}
166166
</span>
167167
}
168168
>
@@ -229,10 +229,12 @@ export const SettingsProviders: Component = () => {
229229
<div class="flex flex-col min-w-0">
230230
<div class="flex flex-wrap items-center gap-x-3 gap-y-1">
231231
<ProviderIcon id={icon("synthetic")} class="size-5 shrink-0 icon-strong-base" />
232-
<span class="text-14-medium text-text-strong">Custom provider</span>
232+
<span class="text-14-medium text-text-strong">{language.t("provider.custom.title")}</span>
233233
<Tag>{language.t("settings.providers.tag.custom")}</Tag>
234234
</div>
235-
<span class="text-12-regular text-text-weak pl-8">Add an OpenAI-compatible provider by base URL.</span>
235+
<span class="text-12-regular text-text-weak pl-8">
236+
{language.t("settings.providers.custom.description")}
237+
</span>
236238
</div>
237239
<Button
238240
size="large"

packages/app/src/context/global-sync.tsx

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,10 @@ function createGlobalSync() {
204204
showToast({
205205
variant: "error",
206206
title: language.t("toast.session.listFailed.title", { project }),
207-
description: formatServerError(err),
207+
description: formatServerError(err, {
208+
unknown: language.t("error.chain.unknown"),
209+
invalidConfiguration: language.t("error.server.invalidConfiguration"),
210+
}),
208211
})
209212
})
210213

@@ -234,6 +237,8 @@ function createGlobalSync() {
234237
setStore: child[1],
235238
vcsCache: cache,
236239
loadSessions,
240+
unknownError: language.t("error.chain.unknown"),
241+
invalidConfigurationError: language.t("error.server.invalidConfiguration"),
237242
})
238243
})()
239244

@@ -308,6 +313,9 @@ function createGlobalSync() {
308313
url: globalSDK.url,
309314
}),
310315
requestFailedTitle: language.t("common.requestFailed"),
316+
unknownError: language.t("error.chain.unknown"),
317+
invalidConfigurationError: language.t("error.server.invalidConfiguration"),
318+
formatMoreCount: (count) => language.t("common.moreCountSuffix", { count }),
311319
setGlobalStore,
312320
})
313321
}

packages/app/src/context/global-sync/bootstrap.ts

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,9 @@ export async function bootstrapGlobal(input: {
3636
connectErrorTitle: string
3737
connectErrorDescription: string
3838
requestFailedTitle: string
39+
unknownError: string
40+
invalidConfigurationError: string
41+
formatMoreCount: (count: number) => string
3942
setGlobalStore: SetStoreFunction<GlobalStore>
4043
}) {
4144
const health = await input.globalSDK.global
@@ -88,8 +91,11 @@ export async function bootstrapGlobal(input: {
8891
const results = await Promise.allSettled(tasks)
8992
const errors = results.filter((r): r is PromiseRejectedResult => r.status === "rejected").map((r) => r.reason)
9093
if (errors.length) {
91-
const message = errors[0] instanceof Error ? errors[0].message : String(errors[0])
92-
const more = errors.length > 1 ? ` (+${errors.length - 1} more)` : ""
94+
const message = formatServerError(errors[0], {
95+
unknown: input.unknownError,
96+
invalidConfiguration: input.invalidConfigurationError,
97+
})
98+
const more = errors.length > 1 ? input.formatMoreCount(errors.length - 1) : ""
9399
showToast({
94100
variant: "error",
95101
title: input.requestFailedTitle,
@@ -116,6 +122,8 @@ export async function bootstrapDirectory(input: {
116122
setStore: SetStoreFunction<State>
117123
vcsCache: VcsCache
118124
loadSessions: (directory: string) => Promise<void> | void
125+
unknownError: string
126+
invalidConfigurationError: string
119127
}) {
120128
if (input.store.status !== "complete") input.setStore("status", "loading")
121129

@@ -137,7 +145,10 @@ export async function bootstrapDirectory(input: {
137145
showToast({
138146
variant: "error",
139147
title: `Failed to reload ${project}`,
140-
description: formatServerError(err),
148+
description: formatServerError(err, {
149+
unknown: input.unknownError,
150+
invalidConfiguration: input.invalidConfigurationError,
151+
}),
141152
})
142153
input.setStore("status", "partial")
143154
return

packages/app/src/i18n/ar.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -734,4 +734,18 @@ export const dict = {
734734
"workspace.reset.archived.one": "ستتم أرشفة جلسة واحدة.",
735735
"workspace.reset.archived.many": "ستتم أرشفة {{count}} جلسات.",
736736
"workspace.reset.note": "سيؤدي هذا إلى إعادة تعيين مساحة العمل لتتطابق مع الفرع الافتراضي.",
737+
"common.open": "فتح",
738+
"dialog.releaseNotes.action.getStarted": "البدء",
739+
"dialog.releaseNotes.action.next": "التالي",
740+
"dialog.releaseNotes.action.hideFuture": "عدم إظهار هذا في المستقبل",
741+
"dialog.releaseNotes.media.alt": "معاينة الإصدار",
742+
"toast.project.reloadFailed.title": "فشل في إعادة تحميل {{project}}",
743+
"error.server.invalidConfiguration": "تكوين غير صالح",
744+
"common.moreCountSuffix": " (+{{count}} إضافي)",
745+
"common.time.justNow": "الآن",
746+
"common.time.minutesAgo.short": "قبل {{count}} د",
747+
"common.time.hoursAgo.short": "قبل {{count}} س",
748+
"common.time.daysAgo.short": "قبل {{count}} ي",
749+
"settings.providers.connected.environmentDescription": "متصل من متغيرات البيئة الخاصة بك",
750+
"settings.providers.custom.description": "أضف مزود متوافق مع OpenAI بواسطة عنوان URL الأساسي.",
737751
}

packages/app/src/i18n/br.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -742,4 +742,18 @@ export const dict = {
742742
"workspace.reset.archived.one": "1 sessão será arquivada.",
743743
"workspace.reset.archived.many": "{{count}} sessões serão arquivadas.",
744744
"workspace.reset.note": "Isso redefinirá o espaço de trabalho para corresponder ao branch padrão.",
745+
"common.open": "Abrir",
746+
"dialog.releaseNotes.action.getStarted": "Começar",
747+
"dialog.releaseNotes.action.next": "Próximo",
748+
"dialog.releaseNotes.action.hideFuture": "Não mostrar isso no futuro",
749+
"dialog.releaseNotes.media.alt": "Prévia do lançamento",
750+
"toast.project.reloadFailed.title": "Falha ao recarregar {{project}}",
751+
"error.server.invalidConfiguration": "Configuração inválida",
752+
"common.moreCountSuffix": " (+{{count}} mais)",
753+
"common.time.justNow": "Agora mesmo",
754+
"common.time.minutesAgo.short": "{{count}}m atrás",
755+
"common.time.hoursAgo.short": "{{count}}h atrás",
756+
"common.time.daysAgo.short": "{{count}}d atrás",
757+
"settings.providers.connected.environmentDescription": "Conectado a partir de suas variáveis de ambiente",
758+
"settings.providers.custom.description": "Adicionar um provedor compatível com a OpenAI através do URL base.",
745759
}

packages/app/src/i18n/bs.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -819,4 +819,18 @@ export const dict = {
819819
"workspace.reset.archived.one": "1 sesija će biti arhivirana.",
820820
"workspace.reset.archived.many": "Biće arhivirano {{count}} sesija.",
821821
"workspace.reset.note": "Ovo će resetovati radni prostor da odgovara podrazumijevanoj grani.",
822+
"common.open": "Otvori",
823+
"dialog.releaseNotes.action.getStarted": "Započni",
824+
"dialog.releaseNotes.action.next": "Sljedeće",
825+
"dialog.releaseNotes.action.hideFuture": "Ne prikazuj ovo u budućnosti",
826+
"dialog.releaseNotes.media.alt": "Pregled izdanja",
827+
"toast.project.reloadFailed.title": "Nije uspjelo ponovno učitavanje {{project}}",
828+
"error.server.invalidConfiguration": "Nevažeća konfiguracija",
829+
"common.moreCountSuffix": " (+{{count}} više)",
830+
"common.time.justNow": "Upravo sada",
831+
"common.time.minutesAgo.short": "prije {{count}} min",
832+
"common.time.hoursAgo.short": "prije {{count}} h",
833+
"common.time.daysAgo.short": "prije {{count}} d",
834+
"settings.providers.connected.environmentDescription": "Povezano sa vašim varijablama okruženja",
835+
"settings.providers.custom.description": "Dodajte provajdera kompatibilnog s OpenAI putem osnovnog URL-a.",
822836
}

packages/app/src/i18n/da.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -813,4 +813,18 @@ export const dict = {
813813
"workspace.reset.archived.one": "1 session vil blive arkiveret.",
814814
"workspace.reset.archived.many": "{{count}} sessioner vil blive arkiveret.",
815815
"workspace.reset.note": "Dette vil nulstille arbejdsområdet til at matche hovedgrenen.",
816+
"common.open": "Åbn",
817+
"dialog.releaseNotes.action.getStarted": "Kom i gang",
818+
"dialog.releaseNotes.action.next": "Næste",
819+
"dialog.releaseNotes.action.hideFuture": "Vis ikke disse i fremtiden",
820+
"dialog.releaseNotes.media.alt": "Forhåndsvisning af udgivelse",
821+
"toast.project.reloadFailed.title": "Kunne ikke genindlæse {{project}}",
822+
"error.server.invalidConfiguration": "Ugyldig konfiguration",
823+
"common.moreCountSuffix": " (+{{count}} mere)",
824+
"common.time.justNow": "Lige nu",
825+
"common.time.minutesAgo.short": "{{count}}m siden",
826+
"common.time.hoursAgo.short": "{{count}}t siden",
827+
"common.time.daysAgo.short": "{{count}}d siden",
828+
"settings.providers.connected.environmentDescription": "Tilsluttet fra dine miljøvariabler",
829+
"settings.providers.custom.description": "Tilføj en OpenAI-kompatibel udbyder via basis-URL.",
816830
}

0 commit comments

Comments
 (0)