Skip to content

Commit d9b9485

Browse files
committed
fix(app): a11y translations
1 parent 366da59 commit d9b9485

39 files changed

Lines changed: 213 additions & 28 deletions

packages/app/src/components/dialog-connect-provider.tsx

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,15 @@ export function DialogConnectProvider(props: { provider: string }) {
144144

145145
return (
146146
<Dialog
147-
title={<IconButton tabIndex={-1} icon="arrow-left" variant="ghost" onClick={goBack} aria-label="Go back" />}
147+
title={
148+
<IconButton
149+
tabIndex={-1}
150+
icon="arrow-left"
151+
variant="ghost"
152+
onClick={goBack}
153+
aria-label={language.t("common.goBack")}
154+
/>
155+
}
148156
>
149157
<div class="flex flex-col gap-6 px-2.5 pb-3">
150158
<div class="px-2.5 flex gap-4 items-center">

packages/app/src/components/dialog-edit-project.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ export function DialogEditProject(props: { project: LocalProject }) {
193193
{(color) => (
194194
<button
195195
type="button"
196-
aria-label={`Select ${color} color`}
196+
aria-label={language.t("dialog.project.edit.color.select", { color })}
197197
aria-pressed={store.color === color}
198198
classList={{
199199
"flex items-center justify-center size-10 p-0.5 rounded-lg overflow-hidden transition-colors cursor-default": true,

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ export function DialogSelectServer() {
158158
icon="circle-x"
159159
variant="ghost"
160160
class="bg-transparent transition-opacity shrink-0 hover:scale-110"
161-
aria-label="Remove server"
161+
aria-label={language.t("dialog.server.action.remove")}
162162
onClick={(e) => {
163163
e.stopPropagation()
164164
handleRemove(i)

packages/app/src/components/prompt-input.tsx

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1487,7 +1487,7 @@ export const PromptInput: Component<PromptInputProps> = (props) => {
14871487
variant="ghost"
14881488
class="h-6 w-6"
14891489
onClick={() => prompt.context.removeActive()}
1490-
aria-label="Remove active file from context"
1490+
aria-label={language.t("prompt.context.removeActiveFile")}
14911491
/>
14921492
</div>
14931493
)}
@@ -1525,7 +1525,7 @@ export const PromptInput: Component<PromptInputProps> = (props) => {
15251525
variant="ghost"
15261526
class="h-6 w-6"
15271527
onClick={() => prompt.context.remove(item.key)}
1528-
aria-label="Remove file from context"
1528+
aria-label={language.t("prompt.context.removeFile")}
15291529
/>
15301530
</div>
15311531
)}
@@ -1558,7 +1558,7 @@ export const PromptInput: Component<PromptInputProps> = (props) => {
15581558
type="button"
15591559
onClick={() => removeImageAttachment(attachment.id)}
15601560
class="absolute -top-1.5 -right-1.5 size-5 rounded-full bg-surface-raised-stronger-non-alpha border border-border-base flex items-center justify-center opacity-0 group-hover:opacity-100 transition-opacity hover:bg-surface-raised-base-hover"
1561-
aria-label="Remove attachment"
1561+
aria-label={language.t("prompt.attachment.remove")}
15621562
>
15631563
<Icon name="close" class="size-3 text-text-weak" />
15641564
</button>
@@ -1691,7 +1691,11 @@ export const PromptInput: Component<PromptInputProps> = (props) => {
16911691
"text-text-base": !permission.isAutoAccepting(params.id!, sdk.directory),
16921692
"hover:bg-surface-success-base": permission.isAutoAccepting(params.id!, sdk.directory),
16931693
}}
1694-
aria-label="Toggle auto-accept permissions"
1694+
aria-label={
1695+
permission.isAutoAccepting(params.id!, sdk.directory)
1696+
? language.t("command.permissions.autoaccept.disable")
1697+
: language.t("command.permissions.autoaccept.enable")
1698+
}
16951699
aria-pressed={permission.isAutoAccepting(params.id!, sdk.directory)}
16961700
>
16971701
<Icon
@@ -1726,7 +1730,7 @@ export const PromptInput: Component<PromptInputProps> = (props) => {
17261730
variant="ghost"
17271731
class="size-6"
17281732
onClick={() => fileInputRef.click()}
1729-
aria-label="Attach file"
1733+
aria-label={language.t("prompt.action.attachFile")}
17301734
>
17311735
<Icon name="photo" class="size-4.5" />
17321736
</Button>
@@ -1759,7 +1763,7 @@ export const PromptInput: Component<PromptInputProps> = (props) => {
17591763
icon={working() ? "stop" : "arrow-up"}
17601764
variant="primary"
17611765
class="h-6 w-4.5"
1762-
aria-label={working() ? "Stop" : "Send message"}
1766+
aria-label={working() ? language.t("prompt.action.stop") : language.t("prompt.action.send")}
17631767
/>
17641768
</Tooltip>
17651769
</div>

packages/app/src/components/session-context-usage.tsx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,13 @@ export function SessionContextUsage(props: SessionContextUsageProps) {
9696
<Switch>
9797
<Match when={variant() === "indicator"}>{circle()}</Match>
9898
<Match when={true}>
99-
<Button type="button" variant="ghost" class="size-6" onClick={openContext} aria-label="View context usage">
99+
<Button
100+
type="button"
101+
variant="ghost"
102+
class="size-6"
103+
onClick={openContext}
104+
aria-label={language.t("context.usage.view")}
105+
>
100106
{circle()}
101107
</Button>
102108
</Match>

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

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ export function SessionHeader() {
4848
const currentSession = createMemo(() => sync.data.session.find((s) => s.id === params.id))
4949
const shareEnabled = createMemo(() => sync.data.config.share !== "disabled")
5050
const showShare = createMemo(() => shareEnabled() && !!currentSession())
51+
const showReview = createMemo(() => !!currentSession())
5152
const sessionKey = createMemo(() => `${params.dir}${params.id ? "/" + params.id : ""}`)
5253
const view = createMemo(() => layout.view(sessionKey()))
5354

@@ -135,7 +136,7 @@ export function SessionHeader() {
135136
type="button"
136137
class="hidden md:flex w-[320px] p-1 pl-1.5 items-center gap-2 justify-between rounded-md border border-border-weak-base bg-surface-raised-base transition-colors cursor-default hover:bg-surface-raised-base-hover focus:bg-surface-raised-base-hover active:bg-surface-raised-base-active"
137138
onClick={() => command.trigger("file.open")}
138-
aria-label="Search files"
139+
aria-label={language.t("session.header.searchFiles")}
139140
>
140141
<div class="flex min-w-0 flex-1 items-center gap-2 overflow-visible">
141142
<Icon name="magnifying-glass" size="normal" class="icon-base shrink-0" />
@@ -185,7 +186,7 @@ export function SessionHeader() {
185186
variant="ghost"
186187
class="group/review-toggle size-6 p-0"
187188
onClick={() => view().reviewPanel.toggle()}
188-
aria-label="Toggle review panel"
189+
aria-label={language.t("command.review.toggle")}
189190
aria-expanded={view().reviewPanel.opened()}
190191
aria-controls="review-panel"
191192
tabIndex={showReview() ? 0 : -1}
@@ -219,7 +220,7 @@ export function SessionHeader() {
219220
variant="ghost"
220221
class="group/terminal-toggle size-6 p-0"
221222
onClick={() => view().terminal.toggle()}
222-
aria-label="Toggle terminal"
223+
aria-label={language.t("command.terminal.toggle")}
223224
aria-expanded={view().terminal.opened()}
224225
aria-controls="terminal-panel"
225226
>
@@ -323,7 +324,11 @@ export function SessionHeader() {
323324
class="rounded-l-none"
324325
onClick={copyLink}
325326
disabled={state.unshare}
326-
aria-label="Copy share link"
327+
aria-label={
328+
state.copied
329+
? language.t("session.share.copy.copied")
330+
: language.t("session.share.copy.copyLink")
331+
}
327332
/>
328333
</Tooltip>
329334
</Show>

packages/app/src/components/session/session-sortable-tab.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ export function SortableTab(props: { tab: string; onTabClose: (tab: string) => v
4141
icon="close"
4242
variant="ghost"
4343
onClick={() => props.onTabClose(props.tab)}
44-
aria-label="Close tab"
44+
aria-label={language.t("common.closeTab")}
4545
/>
4646
</Tooltip>
4747
}

packages/app/src/components/session/session-sortable-terminal-tab.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ export function SortableTerminalTab(props: { terminal: LocalPTY; onClose?: () =>
139139
e.stopPropagation()
140140
close()
141141
}}
142-
aria-label="Close terminal"
142+
aria-label={language.t("terminal.close")}
143143
/>
144144
}
145145
>

packages/app/src/i18n/ar.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,7 @@ export const dict = {
153153
"model.tooltip.context": "حد السياق {{limit}}",
154154

155155
"common.search.placeholder": "بحث",
156+
"common.goBack": "رجوع",
156157
"common.loading": "جارٍ التحميل",
157158
"common.loading.ellipsis": "...",
158159
"common.cancel": "إلغاء",
@@ -199,7 +200,10 @@ export const dict = {
199200
"prompt.slash.badge.custom": "مخصص",
200201
"prompt.context.active": "نشط",
201202
"prompt.context.includeActiveFile": "تضمين الملف النشط",
203+
"prompt.context.removeActiveFile": "إزالة الملف النشط من السياق",
204+
"prompt.context.removeFile": "إزالة الملف من السياق",
202205
"prompt.action.attachFile": "إرفاق ملف",
206+
"prompt.attachment.remove": "إزالة المرفق",
203207
"prompt.action.send": "إرسال",
204208
"prompt.action.stop": "توقف",
205209

@@ -243,6 +247,7 @@ export const dict = {
243247
"dialog.server.default.none": "لم يتم تحديد خادم",
244248
"dialog.server.default.set": "تعيين الخادم الحالي كافتراضي",
245249
"dialog.server.default.clear": "مسح",
250+
"dialog.server.action.remove": "إزالة الخادم",
246251

247252
"dialog.project.edit.title": "تحرير المشروع",
248253
"dialog.project.edit.name": "الاسم",
@@ -251,6 +256,7 @@ export const dict = {
251256
"dialog.project.edit.icon.hint": "انقر أو اسحب صورة",
252257
"dialog.project.edit.icon.recommended": "موصى به: 128x128px",
253258
"dialog.project.edit.color": "لون",
259+
"dialog.project.edit.color.select": "اختر لون {{color}}",
254260

255261
"context.breakdown.title": "تفصيل السياق",
256262
"context.breakdown.note": 'تفصيل تقريبي لرموز الإدخال. يشمل "أخرى" تعريفات الأدوات والنفقات العامة.',
@@ -284,6 +290,7 @@ export const dict = {
284290
"context.usage.usage": "استخدام",
285291
"context.usage.cost": "تكلفة",
286292
"context.usage.clickToView": "انقر لعرض السياق",
293+
"context.usage.view": "عرض استخدام السياق",
287294

288295
"language.en": "الإنجليزية",
289296
"language.zh": "الصينية (المبسطة)",
@@ -385,6 +392,7 @@ export const dict = {
385392
"session.tab.session": "جلسة",
386393
"session.tab.review": "مراجعة",
387394
"session.tab.context": "سياق",
395+
"session.panel.reviewAndFiles": "المراجعة والملفات",
388396
"session.review.filesChanged": "تم تغيير {{count}} ملفات",
389397
"session.review.loadingChanges": "جارٍ تحميل التغييرات...",
390398
"session.review.empty": "لا توجد تغييرات في هذه الجلسة بعد",
@@ -402,6 +410,7 @@ export const dict = {
402410
"session.new.lastModified": "آخر تعديل",
403411

404412
"session.header.search.placeholder": "بحث {{project}}",
413+
"session.header.searchFiles": "بحث عن الملفات",
405414

406415
"session.share.popover.title": "نشر على الويب",
407416
"session.share.popover.description.shared": "هذه الجلسة عامة على الويب. يمكن لأي شخص لديه الرابط الوصول إليها.",
@@ -422,6 +431,7 @@ export const dict = {
422431
"terminal.loading": "جارٍ تحميل المحطة الطرفية...",
423432
"terminal.title": "محطة طرفية",
424433
"terminal.title.numbered": "محطة طرفية {{number}}",
434+
"terminal.close": "إغلاق المحطة الطرفية",
425435
"terminal.connectionLost.title": "فقد الاتصال",
426436
"terminal.connectionLost.description": "انقطع اتصال المحطة الطرفية. يمكن أن يحدث هذا عند إعادة تشغيل الخادم.",
427437

@@ -439,6 +449,7 @@ export const dict = {
439449
"common.key.esc": "ESC",
440450

441451
"sidebar.menu.toggle": "تبديل القائمة",
452+
"sidebar.nav.projectsAndSessions": "المشاريع والجلسات",
442453
"sidebar.settings": "الإعدادات",
443454
"sidebar.help": "مساعدة",
444455
"sidebar.workspaces.enable": "تمكين مساحات العمل",

packages/app/src/i18n/da.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,7 @@ export const dict = {
136136
"model.tag.latest": "Nyeste",
137137

138138
"common.search.placeholder": "Søg",
139+
"common.goBack": "Gå tilbage",
139140
"common.loading": "Indlæser",
140141
"common.cancel": "Annuller",
141142
"common.submit": "Indsend",
@@ -181,7 +182,10 @@ export const dict = {
181182
"prompt.slash.badge.custom": "brugerdefineret",
182183
"prompt.context.active": "aktiv",
183184
"prompt.context.includeActiveFile": "Inkluder aktiv fil",
185+
"prompt.context.removeActiveFile": "Fjern aktiv fil fra kontekst",
186+
"prompt.context.removeFile": "Fjern fil fra kontekst",
184187
"prompt.action.attachFile": "Vedhæft fil",
188+
"prompt.attachment.remove": "Fjern vedhæftning",
185189
"prompt.action.send": "Send",
186190
"prompt.action.stop": "Stop",
187191

@@ -225,6 +229,7 @@ export const dict = {
225229
"dialog.server.default.none": "Ingen server valgt",
226230
"dialog.server.default.set": "Sæt nuværende server som standard",
227231
"dialog.server.default.clear": "Ryd",
232+
"dialog.server.action.remove": "Fjern server",
228233

229234
"dialog.project.edit.title": "Rediger projekt",
230235
"dialog.project.edit.name": "Navn",
@@ -233,6 +238,7 @@ export const dict = {
233238
"dialog.project.edit.icon.hint": "Klik eller træk et billede",
234239
"dialog.project.edit.icon.recommended": "Anbefalet: 128x128px",
235240
"dialog.project.edit.color": "Farve",
241+
"dialog.project.edit.color.select": "Vælg farven {{color}}",
236242

237243
"context.breakdown.title": "Kontekstfordeling",
238244
"context.breakdown.note":
@@ -267,6 +273,7 @@ export const dict = {
267273
"context.usage.usage": "Forbrug",
268274
"context.usage.cost": "Omkostning",
269275
"context.usage.clickToView": "Klik for at se kontekst",
276+
"context.usage.view": "Se kontekstforbrug",
270277

271278
"language.en": "Engelsk",
272279
"language.zh": "Kinesisk (forenklet)",
@@ -369,6 +376,7 @@ export const dict = {
369376
"session.tab.session": "Session",
370377
"session.tab.review": "Gennemgang",
371378
"session.tab.context": "Kontekst",
379+
"session.panel.reviewAndFiles": "Gennemgang og filer",
372380
"session.review.filesChanged": "{{count}} Filer ændret",
373381
"session.review.loadingChanges": "Indlæser ændringer...",
374382
"session.review.empty": "Ingen ændringer i denne session endnu",
@@ -385,6 +393,7 @@ export const dict = {
385393
"session.new.lastModified": "Sidst ændret",
386394

387395
"session.header.search.placeholder": "Søg {{project}}",
396+
"session.header.searchFiles": "Søg efter filer",
388397

389398
"session.share.popover.title": "Udgiv på nettet",
390399
"session.share.popover.description.shared":
@@ -407,6 +416,7 @@ export const dict = {
407416
"terminal.loading": "Indlæser terminal...",
408417
"terminal.title": "Terminal",
409418
"terminal.title.numbered": "Terminal {{number}}",
419+
"terminal.close": "Luk terminal",
410420

411421
"common.closeTab": "Luk fane",
412422
"common.dismiss": "Afvis",
@@ -420,6 +430,7 @@ export const dict = {
420430
"common.edit": "Rediger",
421431
"common.loadMore": "Indlæs flere",
422432

433+
"sidebar.nav.projectsAndSessions": "Projekter og sessioner",
423434
"sidebar.settings": "Indstillinger",
424435
"sidebar.help": "Hjælp",
425436
"sidebar.workspaces.enable": "Aktiver arbejdsområder",

0 commit comments

Comments
 (0)