feat(i18n): localize Voices tab (table header, search, inspector)

VoicesTab now translates the "Voices" title, search placeholder,
"New Voice" button, all six table column headers (Name, Language,
Generations, Samples, Effects, Channels), the avatar alt text, and
the per-row channel MultiSelect (placeholder + "(Default)" suffix).

VoiceInspector routes its form labels through the existing
`profileForm.fields.*` keys, has its own "Default Effects" hint and
avatar/save toasts, and reuses the ProfileForm Zod validation.

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
This commit is contained in:
James Pine
2026-04-20 03:33:52 -07:00
co-authored by Claude Opus 4.7
parent 6e13a30a59
commit 4f384ca64f
4 changed files with 125 additions and 45 deletions
+29
View File
@@ -21,6 +21,35 @@
"settings": "Settings",
"updateBadge": "Update"
},
"voicesTab": {
"title": "Voices",
"loading": "Loading voices…",
"searchPlaceholder": "Search voices…",
"newVoice": "New Voice",
"avatarAlt": "{{name}} avatar",
"selectChannels": "Select channels…",
"channelDefaultLabel": "{{name}} (Default)",
"columns": {
"name": "Name",
"language": "Language",
"generations": "Generations",
"samples": "Samples",
"effects": "Effects",
"channels": "Channels"
}
},
"voiceInspector": {
"loading": "Loading…",
"defaultEffectsHint": "Applied automatically to new generations with this voice.",
"fields": {
"description": "Description"
},
"toast": {
"invalidImageFormat": "Please select PNG, JPG, or WebP",
"avatarUpdated": "Avatar updated",
"savedDescription": "\"{{name}}\" saved."
}
},
"audioChannels": {
"title": "Audio Channels",
"newChannel": "New Channel",