fix(app): add missing i18n keys for host settings (#1478)

* fix(app): add missing i18n keys for host settings

The client UI i18n migration (#1282) referenced translation keys that
were never added to any locale file, so i18next rendered the raw key
string in Settings → Host (e.g. a button labeled
"settings.host.daemon.restart.confirm").

Add the six missing keys to all six locales with real translations:
- settings.host.daemon.rename.submit
- settings.host.daemon.restart.confirm
- settings.host.orchestration.systemPrompt.{edit,reset,save,saving}

The seventh broken reference, in pair-device-modal.tsx, used the wrong
namespace (settings.integrations.pairDevices.rowTitle); the key is
defined at settings.host.pairDevices.rowTitle. Point the reference there.

Reported in https://github.com/getpaseo/paseo/pull/1282#issuecomment-4686672699

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* fix(app): correct machine-translated Save/Saving labels (es/fr/ar)

#1282 left several Save/Saving labels machine-translated into the
"economize money" sense rather than the persist-data sense, so users saw
"Ahorro..." (es), "Économie..." (fr), and "توفير..." (ar) where "Saving..."
was meant.

Fix renameModal.saving and settings.project.actions.{save,saving} in the
three affected locales. ar's actions.save also moves from the conjugated
"يحفظ" to the standard button form "حفظ". Wording matches each locale's
already-correct siblings (e.g. es "Proyecto guardado") and the keys added
in the previous commit. ru and zh-CN were already correct and are untouched.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
维她命@
2026-06-12 05:10:24 +00:00
committed by GitHub
co-authored by Claude Opus 4.8
parent f05544ef8f
commit e4c966b21e
7 changed files with 45 additions and 9 deletions
@@ -14,7 +14,7 @@ const SNAP_POINTS: string[] = ["82%", "94%"];
export function PairDeviceModal({ visible, onClose, testID }: PairDeviceModalProps) { export function PairDeviceModal({ visible, onClose, testID }: PairDeviceModalProps) {
const { t } = useTranslation(); const { t } = useTranslation();
const header = useMemo<SheetHeader>( const header = useMemo<SheetHeader>(
() => ({ title: t("settings.integrations.pairDevices.rowTitle") }), () => ({ title: t("settings.host.pairDevices.rowTitle") }),
[t], [t],
); );
+9 -3
View File
@@ -1294,7 +1294,7 @@ export const ar: TranslationResources = {
}, },
renameModal: { renameModal: {
rename: "إعادة تسمية", rename: "إعادة تسمية",
saving: "توفير...", saving: "جارٍ الحفظ...",
}, },
sidebarCallout: { sidebarCallout: {
dismiss: "رفض", dismiss: "رفض",
@@ -1611,6 +1611,10 @@ export const ar: TranslationResources = {
sheetTitle: "إلحاق موجه النظام", sheetTitle: "إلحاق موجه النظام",
accessibilityLabel: "إلحاق موجه النظام", accessibilityLabel: "إلحاق موجه النظام",
placeholder: "اجعل الردود موجزة دائمًا.", placeholder: "اجعل الردود موجزة دائمًا.",
edit: "تحرير",
reset: "إعادة ضبط",
save: "حفظ",
saving: "جارٍ الحفظ...",
}, },
}, },
agents: { agents: {
@@ -1624,10 +1628,12 @@ export const ar: TranslationResources = {
editLabel: "تحرير التسمية", editLabel: "تحرير التسمية",
title: "إعادة تسمية المضيف", title: "إعادة تسمية المضيف",
placeholder: "بلدي Host", placeholder: "بلدي Host",
submit: "إعادة تسمية",
}, },
restart: { restart: {
title: "إعادة تشغيل البرنامج الخفي", title: "إعادة تشغيل البرنامج الخفي",
hint: "إعادة تشغيل عملية البرنامج الخفي. سيتم إعادة الاتصال بالتطبيق تلقائيًا", hint: "إعادة تشغيل عملية البرنامج الخفي. سيتم إعادة الاتصال بالتطبيق تلقائيًا",
confirm: "إعادة التشغيل",
confirmTitle: "أعد تشغيل{{name}}", confirmTitle: "أعد تشغيل{{name}}",
confirmMessage: confirmMessage:
"سيؤدي هذا إلى إعادة تشغيل البرنامج الخفي. سيستمر العملاء الذين يعملون عليه؛ سيتم إعادة الاتصال بالتطبيق تلقائيًا.", "سيؤدي هذا إلى إعادة تشغيل البرنامج الخفي. سيستمر العملاء الذين يعملون عليه؛ سيتم إعادة الاتصال بالتطبيق تلقائيًا.",
@@ -1793,9 +1799,9 @@ export const ar: TranslationResources = {
actions: { actions: {
reload: "إعادة تحميل", reload: "إعادة تحميل",
tryAgain: "حاول ثانية", tryAgain: "حاول ثانية",
save: "يحفظ", save: "حفظ",
saved: "تم حفظ المشروع", saved: "تم حفظ المشروع",
saving: "توفير...", saving: "جارٍ الحفظ...",
cancel: "يلغي", cancel: "يلغي",
}, },
}, },
+6
View File
@@ -1618,6 +1618,10 @@ export const en = {
sheetTitle: "Append system prompt", sheetTitle: "Append system prompt",
accessibilityLabel: "Append system prompt", accessibilityLabel: "Append system prompt",
placeholder: "Always keep replies concise.", placeholder: "Always keep replies concise.",
edit: "Edit",
reset: "Reset",
save: "Save",
saving: "Saving...",
}, },
}, },
agents: { agents: {
@@ -1631,10 +1635,12 @@ export const en = {
editLabel: "Edit label", editLabel: "Edit label",
title: "Rename host", title: "Rename host",
placeholder: "My Host", placeholder: "My Host",
submit: "Rename",
}, },
restart: { restart: {
title: "Restart daemon", title: "Restart daemon",
hint: "Restarts the daemon process. The app will reconnect automatically", hint: "Restarts the daemon process. The app will reconnect automatically",
confirm: "Restart",
confirmTitle: "Restart {{name}}", confirmTitle: "Restart {{name}}",
confirmMessage: confirmMessage:
"This will restart the daemon. Agents running on it will keep going; the app will reconnect automatically.", "This will restart the daemon. Agents running on it will keep going; the app will reconnect automatically.",
+9 -3
View File
@@ -1329,7 +1329,7 @@ export const es: TranslationResources = {
}, },
renameModal: { renameModal: {
rename: "Rebautizar", rename: "Rebautizar",
saving: "Ahorro...", saving: "Guardando...",
}, },
sidebarCallout: { sidebarCallout: {
dismiss: "Despedir", dismiss: "Despedir",
@@ -1648,6 +1648,10 @@ export const es: TranslationResources = {
sheetTitle: "Agregar mensaje del sistema", sheetTitle: "Agregar mensaje del sistema",
accessibilityLabel: "Agregar mensaje del sistema", accessibilityLabel: "Agregar mensaje del sistema",
placeholder: "Mantenga siempre respuestas concisas.", placeholder: "Mantenga siempre respuestas concisas.",
edit: "Editar",
reset: "Restablecer",
save: "Guardar",
saving: "Guardando...",
}, },
}, },
agents: { agents: {
@@ -1661,10 +1665,12 @@ export const es: TranslationResources = {
editLabel: "Editar etiqueta", editLabel: "Editar etiqueta",
title: "Cambiar nombre de host", title: "Cambiar nombre de host",
placeholder: "MiHost", placeholder: "MiHost",
submit: "Cambiar nombre",
}, },
restart: { restart: {
title: "Reiniciar demonio", title: "Reiniciar demonio",
hint: "Reinicia el proceso del demonio. La aplicación se volverá a conectar automáticamente", hint: "Reinicia el proceso del demonio. La aplicación se volverá a conectar automáticamente",
confirm: "Reiniciar",
confirmTitle: "Reiniciar{{name}}", confirmTitle: "Reiniciar{{name}}",
confirmMessage: confirmMessage:
"Esto reiniciará el demonio. Los agentes que se ejecutan en él seguirán funcionando; la aplicación se volverá a conectar automáticamente.", "Esto reiniciará el demonio. Los agentes que se ejecutan en él seguirán funcionando; la aplicación se volverá a conectar automáticamente.",
@@ -1834,9 +1840,9 @@ export const es: TranslationResources = {
actions: { actions: {
reload: "Recargar", reload: "Recargar",
tryAgain: "Intentar otra vez", tryAgain: "Intentar otra vez",
save: "Ahorrar", save: "Guardar",
saved: "Proyecto guardado", saved: "Proyecto guardado",
saving: "Ahorro...", saving: "Guardando...",
cancel: "Cancelar", cancel: "Cancelar",
}, },
}, },
+8 -2
View File
@@ -1332,7 +1332,7 @@ export const fr: TranslationResources = {
}, },
renameModal: { renameModal: {
rename: "Rebaptiser", rename: "Rebaptiser",
saving: "Économie...", saving: "Sauvegarde...",
}, },
sidebarCallout: { sidebarCallout: {
dismiss: "Rejeter", dismiss: "Rejeter",
@@ -1654,6 +1654,10 @@ export const fr: TranslationResources = {
sheetTitle: "Ajouter une invite système", sheetTitle: "Ajouter une invite système",
accessibilityLabel: "Ajouter une invite système", accessibilityLabel: "Ajouter une invite système",
placeholder: "Gardez toujours des réponses concises.", placeholder: "Gardez toujours des réponses concises.",
edit: "Modifier",
reset: "Réinitialiser",
save: "Sauvegarder",
saving: "Sauvegarde...",
}, },
}, },
agents: { agents: {
@@ -1667,10 +1671,12 @@ export const fr: TranslationResources = {
editLabel: "Modifier l'étiquette", editLabel: "Modifier l'étiquette",
title: "Renommer l'hôte", title: "Renommer l'hôte",
placeholder: "MonHost", placeholder: "MonHost",
submit: "Renommer",
}, },
restart: { restart: {
title: "Redémarrer le démon", title: "Redémarrer le démon",
hint: "Redémarre le processus démon. L'application se reconnectera automatiquement", hint: "Redémarre le processus démon. L'application se reconnectera automatiquement",
confirm: "Redémarrer",
confirmTitle: "Redémarrer{{name}}", confirmTitle: "Redémarrer{{name}}",
confirmMessage: confirmMessage:
"Cela redémarrera le démon. Les agents qui s'y exécutent continueront à fonctionner; l'application se reconnectera automatiquement.", "Cela redémarrera le démon. Les agents qui s'y exécutent continueront à fonctionner; l'application se reconnectera automatiquement.",
@@ -1844,7 +1850,7 @@ export const fr: TranslationResources = {
tryAgain: "Essayer à nouveau", tryAgain: "Essayer à nouveau",
save: "Sauvegarder", save: "Sauvegarder",
saved: "Projet enregistré", saved: "Projet enregistré",
saving: "Économie...", saving: "Sauvegarde...",
cancel: "Annuler", cancel: "Annuler",
}, },
}, },
+6
View File
@@ -1642,6 +1642,10 @@ export const ru: TranslationResources = {
sheetTitle: "Добавить системное приглашение", sheetTitle: "Добавить системное приглашение",
accessibilityLabel: "Добавить системное приглашение", accessibilityLabel: "Добавить системное приглашение",
placeholder: "Всегда отвечайте кратко.", placeholder: "Всегда отвечайте кратко.",
edit: "Редактировать",
reset: "Сбросить",
save: "Сохранить",
saving: "Сохранение...",
}, },
}, },
agents: { agents: {
@@ -1655,10 +1659,12 @@ export const ru: TranslationResources = {
editLabel: "Изменить ярлык", editLabel: "Изменить ярлык",
title: "Переименовать хост", title: "Переименовать хост",
placeholder: "Мой Host", placeholder: "Мой Host",
submit: "Переименовать",
}, },
restart: { restart: {
title: "Перезапустить демон", title: "Перезапустить демон",
hint: "Перезапускает процесс демона. Приложение автоматически переподключится", hint: "Перезапускает процесс демона. Приложение автоматически переподключится",
confirm: "Перезапустить",
confirmTitle: "Перезапустите{{name}}", confirmTitle: "Перезапустите{{name}}",
confirmMessage: confirmMessage:
"Это перезапустит демон. Агенты, работающие на нем, будут продолжать работать; приложение автоматически повторно подключится.", "Это перезапустит демон. Агенты, работающие на нем, будут продолжать работать; приложение автоматически повторно подключится.",
+6
View File
@@ -1593,6 +1593,10 @@ export const zhCN: TranslationResources = {
sheetTitle: "追加 system prompt", sheetTitle: "追加 system prompt",
accessibilityLabel: "追加 system prompt", accessibilityLabel: "追加 system prompt",
placeholder: "始终保持回复简洁。", placeholder: "始终保持回复简洁。",
edit: "编辑",
reset: "重置",
save: "保存",
saving: "保存中...",
}, },
}, },
agents: { agents: {
@@ -1606,10 +1610,12 @@ export const zhCN: TranslationResources = {
editLabel: "编辑标签", editLabel: "编辑标签",
title: "重命名 Host", title: "重命名 Host",
placeholder: "我的 Host", placeholder: "我的 Host",
submit: "重命名",
}, },
restart: { restart: {
title: "重启 Daemon", title: "重启 Daemon",
hint: "重启 Daemon 进程。应用会自动重新连接", hint: "重启 Daemon 进程。应用会自动重新连接",
confirm: "重启",
confirmTitle: "重启 {{name}}", confirmTitle: "重启 {{name}}",
confirmMessage: "这会重启 Daemon。其上运行的 Agent 会继续运行;应用会自动重新连接。", confirmMessage: "这会重启 Daemon。其上运行的 Agent 会继续运行;应用会自动重新连接。",
restarting: "正在重启...", restarting: "正在重启...",