* fix(i18n): localize manual Docker update guidance * Release exp-v0.52.55: localize manual Docker update guidance (#5973, #5959) --------- Co-authored-by: KaliShodan <25535214+jbbottoms@users.noreply.github.com> Co-authored-by: nesquena-hermes <agent@nesquena-hermes>
This commit is contained in:
6 files changed
+68
-6
No files matched your search
@@ -13,6 +13,8 @@
|
|||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|
||||||
|
- **The Docker "manual update" banner instruction is now localized.** On Docker/no-git deployments the update banner shows the manual update command; that guidance string was hardcoded in English. It now goes through the i18n system, so it renders in the active language (English fallback where a translation isn't present yet). Thanks @jbbottoms. (#5973, #5959)
|
||||||
|
|
||||||
- **Cross-platform test suite stabilized.** The profile skill-statistics coverage test now selects a genuinely-incompatible platform per-OS (so the incompatibility assertion holds on macOS as well as Linux), and eight pytest class-scoped instance-fixture deprecation warnings were removed by switching to state-free module fixtures. Test-only; no product code changes. Thanks @tahabakhit. (#5970)
|
- **Cross-platform test suite stabilized.** The profile skill-statistics coverage test now selects a genuinely-incompatible platform per-OS (so the incompatibility assertion holds on macOS as well as Linux), and eight pytest class-scoped instance-fixture deprecation warnings were removed by switching to state-free module fixtures. Test-only; no product code changes. Thanks @tahabakhit. (#5970)
|
||||||
|
|
||||||
- **The transcript no longer jumps up while you type in a multi-row composer.** When the composer had grown to multiple rows and you were scrolled to the bottom, every keystroke nudged the transcript upward (by roughly the composer's height) and quietly broke stream auto-follow — you'd have to scroll back down. The auto-resize now preserves the scroll position of a bottom-pinned reader, so typing keeps you pinned and streaming keeps following. Readers who deliberately scrolled up are unaffected. Thanks @JeffArcLogic for the report and repro. (#5962, #5514)
|
- **The transcript no longer jumps up while you type in a multi-row composer.** When the composer had grown to multiple rows and you were scrolled to the bottom, every keystroke nudged the transcript upward (by roughly the composer's height) and quietly broke stream auto-follow — you'd have to scroll back down. The auto-resize now preserves the scroll position of a bottom-pinned reader, so typing keeps you pinned and streaming keeps following. Readers who deliberately scrolled up are unaffected. Thanks @JeffArcLogic for the report and repro. (#5962, #5514)
|
||||||
|
|||||||
@@ -648,6 +648,7 @@ const LOCALES = {
|
|||||||
settings_updates_disabled: 'Update checks disabled',
|
settings_updates_disabled: 'Update checks disabled',
|
||||||
settings_update_check_failed: 'Update check failed',
|
settings_update_check_failed: 'Update check failed',
|
||||||
settings_update_no_git: 'Can\'t check for updates (not a git checkout)',
|
settings_update_no_git: 'Can\'t check for updates (not a git checkout)',
|
||||||
|
settings_update_manual_docker: 'Manual update required: run {0}, then recreate the container.',
|
||||||
settings_label_workspace_panel_open: 'Keep workspace panel open by default',
|
settings_label_workspace_panel_open: 'Keep workspace panel open by default',
|
||||||
settings_desc_workspace_panel_open: 'When enabled, the workspace / file browser panel opens automatically with each new session. You can still close it manually at any time.',
|
settings_desc_workspace_panel_open: 'When enabled, the workspace / file browser panel opens automatically with each new session. You can still close it manually at any time.',
|
||||||
settings_label_workspace_todos_tab: 'Show Todos tab in workspace panel',
|
settings_label_workspace_todos_tab: 'Show Todos tab in workspace panel',
|
||||||
@@ -2394,6 +2395,7 @@ const LOCALES = {
|
|||||||
settings_updates_disabled: 'Verifica aggiornamenti disabilitata',
|
settings_updates_disabled: 'Verifica aggiornamenti disabilitata',
|
||||||
settings_update_check_failed: 'Verifica aggiornamenti fallita',
|
settings_update_check_failed: 'Verifica aggiornamenti fallita',
|
||||||
settings_update_no_git: 'Impossibile verificare aggiornamenti (non \u00e8 un checkout git)',
|
settings_update_no_git: 'Impossibile verificare aggiornamenti (non \u00e8 un checkout git)',
|
||||||
|
settings_update_manual_docker: 'Aggiornamento manuale richiesto: esegui {0}, quindi ricrea il container.',
|
||||||
settings_label_workspace_panel_open: 'Mantieni il pannello workspace aperto per impostazione predefinita',
|
settings_label_workspace_panel_open: 'Mantieni il pannello workspace aperto per impostazione predefinita',
|
||||||
settings_desc_workspace_panel_open: 'Se abilitato, il pannello workspace/esplora file si apre automaticamente a ogni nuova sessione. Puoi comunque chiuderlo manualmente in qualsiasi momento.',
|
settings_desc_workspace_panel_open: 'Se abilitato, il pannello workspace/esplora file si apre automaticamente a ogni nuova sessione. Puoi comunque chiuderlo manualmente in qualsiasi momento.',
|
||||||
settings_label_workspace_todos_tab: 'Mostra tab Todos nel pannello workspace',
|
settings_label_workspace_todos_tab: 'Mostra tab Todos nel pannello workspace',
|
||||||
@@ -4130,6 +4132,7 @@ const LOCALES = {
|
|||||||
settings_updates_available: '{count} 件のアップデートあり',
|
settings_updates_available: '{count} 件のアップデートあり',
|
||||||
settings_update_check_failed: 'アップデート確認失敗',
|
settings_update_check_failed: 'アップデート確認失敗',
|
||||||
settings_update_no_git: 'アップデートを確認できません(gitチェックアウトではありません)',
|
settings_update_no_git: 'アップデートを確認できません(gitチェックアウトではありません)',
|
||||||
|
settings_update_manual_docker: '手動更新が必要です: {0} を実行してから、コンテナを再作成してください。',
|
||||||
settings_updates_disabled: 'アップデート確認は無効です',
|
settings_updates_disabled: 'アップデート確認は無効です',
|
||||||
settings_label_workspace_panel_open: 'ワークスペースパネルをデフォルトで開いておく',
|
settings_label_workspace_panel_open: 'ワークスペースパネルをデフォルトで開いておく',
|
||||||
settings_desc_workspace_panel_open: '有効にすると、新しいセッションごとにワークスペース/ファイルブラウザパネルが自動で開きます。手動でいつでも閉じられます。',
|
settings_desc_workspace_panel_open: '有効にすると、新しいセッションごとにワークスペース/ファイルブラウザパネルが自動で開きます。手動でいつでも閉じられます。',
|
||||||
@@ -6621,6 +6624,7 @@ const LOCALES = {
|
|||||||
settings_updates_disabled: 'Проверка обновлений отключена',
|
settings_updates_disabled: 'Проверка обновлений отключена',
|
||||||
settings_update_check_failed: 'Ошибка проверки обновлений',
|
settings_update_check_failed: 'Ошибка проверки обновлений',
|
||||||
settings_update_no_git: 'Невозможно проверить обновления (не git-клон)',
|
settings_update_no_git: 'Невозможно проверить обновления (не git-клон)',
|
||||||
|
settings_update_manual_docker: 'Требуется обновление вручную: выполните {0}, затем пересоздайте контейнер.',
|
||||||
settings_label_workspace_panel_open: 'Открывать панель рабочей области по умолчанию',
|
settings_label_workspace_panel_open: 'Открывать панель рабочей области по умолчанию',
|
||||||
settings_desc_workspace_panel_open: 'При включении панель файлов будет открываться автоматически в каждой новой сессии.',
|
settings_desc_workspace_panel_open: 'При включении панель файлов будет открываться автоматически в каждой новой сессии.',
|
||||||
settings_label_workspace_todos_tab: 'Показывать вкладку Todos в панели рабочей области',
|
settings_label_workspace_todos_tab: 'Показывать вкладку Todos в панели рабочей области',
|
||||||
@@ -8327,6 +8331,7 @@ const LOCALES = {
|
|||||||
settings_updates_disabled: 'Comprobación de actualizaciones desactivada',
|
settings_updates_disabled: 'Comprobación de actualizaciones desactivada',
|
||||||
settings_update_check_failed: 'Error al comprobar actualizaciones',
|
settings_update_check_failed: 'Error al comprobar actualizaciones',
|
||||||
settings_update_no_git: 'No se pueden comprobar actualizaciones (no es un checkout git)',
|
settings_update_no_git: 'No se pueden comprobar actualizaciones (no es un checkout git)',
|
||||||
|
settings_update_manual_docker: 'Se requiere una actualización manual: ejecuta {0} y luego vuelve a crear el contenedor.',
|
||||||
settings_label_workspace_panel_open: 'Mantener panel de espacio abierto',
|
settings_label_workspace_panel_open: 'Mantener panel de espacio abierto',
|
||||||
settings_desc_workspace_panel_open: 'Al activar, el panel de archivos se abre automáticamente en cada nueva sesión. Aún puedes cerrarlo manualmente.',
|
settings_desc_workspace_panel_open: 'Al activar, el panel de archivos se abre automáticamente en cada nueva sesión. Aún puedes cerrarlo manualmente.',
|
||||||
settings_label_workspace_todos_tab: 'Mostrar pestaña Todos en el panel de espacio de trabajo',
|
settings_label_workspace_todos_tab: 'Mostrar pestaña Todos en el panel de espacio de trabajo',
|
||||||
@@ -9673,6 +9678,7 @@ const LOCALES = {
|
|||||||
settings_updates_disabled: 'Update-Prüfung deaktiviert',
|
settings_updates_disabled: 'Update-Prüfung deaktiviert',
|
||||||
settings_update_check_failed: 'Update-Prüfung fehlgeschlagen',
|
settings_update_check_failed: 'Update-Prüfung fehlgeschlagen',
|
||||||
settings_update_no_git: 'Updates können nicht geprüft werden (kein Git-Checkout)',
|
settings_update_no_git: 'Updates können nicht geprüft werden (kein Git-Checkout)',
|
||||||
|
settings_update_manual_docker: 'Manuelles Update erforderlich: Führe {0} aus und erstelle anschließend den Container neu.',
|
||||||
settings_label_workspace_panel_open: 'Arbeitsbereich-Panel standardmäßig öffnen',
|
settings_label_workspace_panel_open: 'Arbeitsbereich-Panel standardmäßig öffnen',
|
||||||
settings_desc_workspace_panel_open: 'Wenn aktiviert, wird der Datei-Browser bei jeder neuen Sitzung automatisch geöffnet. Er kann jederzeit manuell geschlossen werden.',
|
settings_desc_workspace_panel_open: 'Wenn aktiviert, wird der Datei-Browser bei jeder neuen Sitzung automatisch geöffnet. Er kann jederzeit manuell geschlossen werden.',
|
||||||
settings_label_workspace_todos_tab: 'Todos-Tab im Arbeitsbereich-Panel anzeigen',
|
settings_label_workspace_todos_tab: 'Todos-Tab im Arbeitsbereich-Panel anzeigen',
|
||||||
@@ -11696,6 +11702,7 @@ const LOCALES = {
|
|||||||
settings_updates_disabled: '更新检查已禁用',
|
settings_updates_disabled: '更新检查已禁用',
|
||||||
settings_update_check_failed: '更新检查失败',
|
settings_update_check_failed: '更新检查失败',
|
||||||
settings_update_no_git: '无法检查更新(非 git 签出)',
|
settings_update_no_git: '无法检查更新(非 git 签出)',
|
||||||
|
settings_update_manual_docker: '需要手动更新:运行 {0},然后重新创建容器。',
|
||||||
settings_label_workspace_panel_open: '默认保持工作区面板打开',
|
settings_label_workspace_panel_open: '默认保持工作区面板打开',
|
||||||
settings_desc_workspace_panel_open: '启用后,工作区/文件浏览器面板会在每次新会话时自动打开。您仍可随时手动关闭。',
|
settings_desc_workspace_panel_open: '启用后,工作区/文件浏览器面板会在每次新会话时自动打开。您仍可随时手动关闭。',
|
||||||
settings_label_workspace_todos_tab: '在工作区面板中显示待办事项标签',
|
settings_label_workspace_todos_tab: '在工作区面板中显示待办事项标签',
|
||||||
@@ -12612,6 +12619,7 @@ const LOCALES = {
|
|||||||
settings_updates_disabled: '更新檢查已停用',
|
settings_updates_disabled: '更新檢查已停用',
|
||||||
settings_update_check_failed: '更新檢查失敗',
|
settings_update_check_failed: '更新檢查失敗',
|
||||||
settings_update_no_git: '無法檢查更新(非 git 簽出)',
|
settings_update_no_git: '無法檢查更新(非 git 簽出)',
|
||||||
|
settings_update_manual_docker: '需要手動更新:執行 {0},然後重新建立容器。',
|
||||||
settings_label_workspace_panel_open: '預設保持工作區面板開啟',
|
settings_label_workspace_panel_open: '預設保持工作區面板開啟',
|
||||||
settings_desc_workspace_panel_open: '啟用後,工作區/檔案瀏覽器面板會在每次新對話時自動開啟。仍可隨時手動關閉。',
|
settings_desc_workspace_panel_open: '啟用後,工作區/檔案瀏覽器面板會在每次新對話時自動開啟。仍可隨時手動關閉。',
|
||||||
settings_label_workspace_todos_tab: '在工作區面板顯示待辦事項標籤',
|
settings_label_workspace_todos_tab: '在工作區面板顯示待辦事項標籤',
|
||||||
@@ -14244,6 +14252,7 @@ const LOCALES = {
|
|||||||
settings_updates_disabled: 'Verificação de updates desativada',
|
settings_updates_disabled: 'Verificação de updates desativada',
|
||||||
settings_update_check_failed: 'Falha ao verificar updates',
|
settings_update_check_failed: 'Falha ao verificar updates',
|
||||||
settings_update_no_git: 'Não é possível verificar updates (não é um checkout git)',
|
settings_update_no_git: 'Não é possível verificar updates (não é um checkout git)',
|
||||||
|
settings_update_manual_docker: 'Atualização manual necessária: execute {0} e depois recrie o container.',
|
||||||
settings_label_workspace_panel_open: 'Manter painel workspace aberto por padrão',
|
settings_label_workspace_panel_open: 'Manter painel workspace aberto por padrão',
|
||||||
settings_desc_workspace_panel_open: 'Quando ativo, o painel workspace abre automaticamente com cada nova sessão.',
|
settings_desc_workspace_panel_open: 'Quando ativo, o painel workspace abre automaticamente com cada nova sessão.',
|
||||||
settings_label_workspace_todos_tab: 'Mostrar aba Todos no painel workspace',
|
settings_label_workspace_todos_tab: 'Mostrar aba Todos no painel workspace',
|
||||||
@@ -15880,6 +15889,7 @@ const LOCALES = {
|
|||||||
settings_updates_disabled: 'Update checks disabled',
|
settings_updates_disabled: 'Update checks disabled',
|
||||||
settings_update_check_failed: 'Update check failed',
|
settings_update_check_failed: 'Update check failed',
|
||||||
settings_update_no_git: '업데이트를 확인할 수 없습니다 (git 체크아웃이 아닙니다)',
|
settings_update_no_git: '업데이트를 확인할 수 없습니다 (git 체크아웃이 아닙니다)',
|
||||||
|
settings_update_manual_docker: '수동 업데이트가 필요합니다. {0}을(를) 실행한 다음 컨테이너를 다시 생성하세요.',
|
||||||
settings_label_workspace_panel_open: '기본으로 워크스페이스 패널 열기',
|
settings_label_workspace_panel_open: '기본으로 워크스페이스 패널 열기',
|
||||||
settings_desc_workspace_panel_open: '활성화하면 새 세션마다 워크스페이스/파일 브라우저 패널이 자동으로 열립니다. 언제든지 수동으로 닫을 수 있습니다.',
|
settings_desc_workspace_panel_open: '활성화하면 새 세션마다 워크스페이스/파일 브라우저 패널이 자동으로 열립니다. 언제든지 수동으로 닫을 수 있습니다.',
|
||||||
settings_label_workspace_todos_tab: '워크스페이스 패널에 Todos 탭 표시',
|
settings_label_workspace_todos_tab: '워크스페이스 패널에 Todos 탭 표시',
|
||||||
@@ -17631,6 +17641,7 @@ const LOCALES = {
|
|||||||
settings_updates_disabled: 'Vérifications des mises à jour désactivées',
|
settings_updates_disabled: 'Vérifications des mises à jour désactivées',
|
||||||
settings_update_check_failed: 'Échec de la vérification des mises à jour',
|
settings_update_check_failed: 'Échec de la vérification des mises à jour',
|
||||||
settings_update_no_git: 'Impossible de vérifier les mises à jour (pas un dépôt git)',
|
settings_update_no_git: 'Impossible de vérifier les mises à jour (pas un dépôt git)',
|
||||||
|
settings_update_manual_docker: 'Mise à jour manuelle requise : exécutez {0}, puis recréez le conteneur.',
|
||||||
settings_label_workspace_panel_open: 'Garder le panneau de l\'espace de travail ouvert par défaut',
|
settings_label_workspace_panel_open: 'Garder le panneau de l\'espace de travail ouvert par défaut',
|
||||||
settings_desc_workspace_panel_open: 'Lorsqu\'il est activé, le panneau de l\'espace de travail / navigateur de fichiers s\'ouvre automatiquement à chaque nouvelle session. Vous pouvez toujours le fermer manuellement à tout moment.',
|
settings_desc_workspace_panel_open: 'Lorsqu\'il est activé, le panneau de l\'espace de travail / navigateur de fichiers s\'ouvre automatiquement à chaque nouvelle session. Vous pouvez toujours le fermer manuellement à tout moment.',
|
||||||
settings_label_workspace_todos_tab: 'Afficher l\'onglet Todos dans le panneau de l\'espace de travail',
|
settings_label_workspace_todos_tab: 'Afficher l\'onglet Todos dans le panneau de l\'espace de travail',
|
||||||
@@ -19785,6 +19796,7 @@ const LOCALES = {
|
|||||||
settings_up_to_date: 'Aktuální ✓',
|
settings_up_to_date: 'Aktuální ✓',
|
||||||
settings_update_check_failed: 'Kontrola aktualizací selhala',
|
settings_update_check_failed: 'Kontrola aktualizací selhala',
|
||||||
settings_update_no_git: 'Nelze kontrolovat aktualizace (nejde o git checkout)',
|
settings_update_no_git: 'Nelze kontrolovat aktualizace (nejde o git checkout)',
|
||||||
|
settings_update_manual_docker: 'Je vyžadována ruční aktualizace: spusťte {0} a poté znovu vytvořte kontejner.',
|
||||||
update_later: 'Later',
|
update_later: 'Later',
|
||||||
update_now: 'Update Now',
|
update_now: 'Update Now',
|
||||||
update_updating: 'Updating…',
|
update_updating: 'Updating…',
|
||||||
@@ -21032,6 +21044,7 @@ const LOCALES = {
|
|||||||
settings_updates_disabled: 'Güncelleme kontrolleri devre dışı bırakıldı',
|
settings_updates_disabled: 'Güncelleme kontrolleri devre dışı bırakıldı',
|
||||||
settings_update_check_failed: 'Güncelleme kontrolü başarısız oldu',
|
settings_update_check_failed: 'Güncelleme kontrolü başarısız oldu',
|
||||||
settings_update_no_git: 'Güncellemeler kontrol edilemiyor (git checkout değil)',
|
settings_update_no_git: 'Güncellemeler kontrol edilemiyor (git checkout değil)',
|
||||||
|
settings_update_manual_docker: 'Elle güncelleme gerekiyor: {0} komutunu çalıştırın, ardından kapsayıcıyı yeniden oluşturun.',
|
||||||
settings_label_workspace_panel_open: 'Çalışma alanı panelini varsayılan olarak açık tut',
|
settings_label_workspace_panel_open: 'Çalışma alanı panelini varsayılan olarak açık tut',
|
||||||
settings_desc_workspace_panel_open: 'Etkinleştirildiğinde, çalışma alanı / dosya tarayıcı paneli her yeni oturumda otomatik olarak açılır. Yine de istediğiniz zaman manuel olarak kapatabilirsiniz.',
|
settings_desc_workspace_panel_open: 'Etkinleştirildiğinde, çalışma alanı / dosya tarayıcı paneli her yeni oturumda otomatik olarak açılır. Yine de istediğiniz zaman manuel olarak kapatabilirsiniz.',
|
||||||
settings_label_workspace_todos_tab: 'Çalışma alanı panelinde Todos sekmesini göster',
|
settings_label_workspace_todos_tab: 'Çalışma alanı panelinde Todos sekmesini göster',
|
||||||
@@ -22785,6 +22798,7 @@ const LOCALES = {
|
|||||||
settings_updates_disabled: 'Sprawdzanie aktualizacji wyłączone',
|
settings_updates_disabled: 'Sprawdzanie aktualizacji wyłączone',
|
||||||
settings_update_check_failed: 'Sprawdzanie aktualizacji nie powiodło się',
|
settings_update_check_failed: 'Sprawdzanie aktualizacji nie powiodło się',
|
||||||
settings_update_no_git: 'Nie można sprawdzić aktualizacji (nie jest to klon git)',
|
settings_update_no_git: 'Nie można sprawdzić aktualizacji (nie jest to klon git)',
|
||||||
|
settings_update_manual_docker: 'Wymagana jest ręczna aktualizacja: uruchom {0}, a następnie utwórz kontener ponownie.',
|
||||||
settings_label_workspace_panel_open: 'Zachowaj panel obszaru roboczego domyślnie otwarty',
|
settings_label_workspace_panel_open: 'Zachowaj panel obszaru roboczego domyślnie otwarty',
|
||||||
settings_desc_workspace_panel_open: 'Gdy ta opcja jest włączona, panel obszaru roboczego / przeglądarki plików otwiera się automatycznie przy każdej nowej sesji. Nadal możesz go zamknąć ręcznie w dowolnym momencie.',
|
settings_desc_workspace_panel_open: 'Gdy ta opcja jest włączona, panel obszaru roboczego / przeglądarki plików otwiera się automatycznie przy każdej nowej sesji. Nadal możesz go zamknąć ręcznie w dowolnym momencie.',
|
||||||
settings_label_session_jump_buttons: 'Pokaż przyciski skoku sesji',
|
settings_label_session_jump_buttons: 'Pokaż przyciski skoku sesji',
|
||||||
@@ -25524,6 +25538,7 @@ const LOCALES = {
|
|||||||
settings_updates_disabled: 'Đã tắt kiểm tra cập nhật',
|
settings_updates_disabled: 'Đã tắt kiểm tra cập nhật',
|
||||||
settings_update_check_failed: 'Kiểm tra cập nhật thất bại',
|
settings_update_check_failed: 'Kiểm tra cập nhật thất bại',
|
||||||
settings_update_no_git: 'Không thể kiểm tra cập nhật (không phải bản checkout git)',
|
settings_update_no_git: 'Không thể kiểm tra cập nhật (không phải bản checkout git)',
|
||||||
|
settings_update_manual_docker: 'Cần cập nhật thủ công: chạy {0}, sau đó tạo lại container.',
|
||||||
settings_label_workspace_panel_open: 'Giữ panel workspace mở theo mặc định',
|
settings_label_workspace_panel_open: 'Giữ panel workspace mở theo mặc định',
|
||||||
settings_desc_workspace_panel_open: 'Khi bật, panel workspace / trình duyệt tệp sẽ tự mở với mỗi phiên mới. Bạn vẫn có thể đóng thủ công bất cứ lúc nào.',
|
settings_desc_workspace_panel_open: 'Khi bật, panel workspace / trình duyệt tệp sẽ tự mở với mỗi phiên mới. Bạn vẫn có thể đóng thủ công bất cứ lúc nào.',
|
||||||
settings_label_workspace_todos_tab: 'Hiển thị tab Todos trong bảng workspace',
|
settings_label_workspace_todos_tab: 'Hiển thị tab Todos trong bảng workspace',
|
||||||
|
|||||||
+1
-3
@@ -11907,9 +11907,7 @@ async function checkUpdatesNow(channelOverride){
|
|||||||
if(agentPart) parts.push(agentPart);
|
if(agentPart) parts.push(agentPart);
|
||||||
const manualInstruction=(typeof _formatManualUpdateInstruction==='function')
|
const manualInstruction=(typeof _formatManualUpdateInstruction==='function')
|
||||||
? _formatManualUpdateInstruction(data.webui)
|
? _formatManualUpdateInstruction(data.webui)
|
||||||
: (data.webui&&data.webui.no_git&&data.webui.manual_update&&data.webui.behind>0
|
: null;
|
||||||
? 'Manual update required: run docker pull ghcr.io/nesquena/hermes-webui:latest, then recreate the container.'
|
|
||||||
: null);
|
|
||||||
// Track non-git targets separately so a mixed deployment (one git
|
// Track non-git targets separately so a mixed deployment (one git
|
||||||
// checkout + one no-git install) never hides the "can't check" state
|
// checkout + one no-git install) never hides the "can't check" state
|
||||||
// behind an up-to-date summary (#4356).
|
// behind an up-to-date summary (#4356).
|
||||||
|
|||||||
+1
-1
@@ -9217,7 +9217,7 @@ function _formatUpdateTargetStatus(label,info){
|
|||||||
}
|
}
|
||||||
function _formatManualUpdateInstruction(info){
|
function _formatManualUpdateInstruction(info){
|
||||||
if(!(info&&info.no_git&&info.manual_update&&info.behind>0)) return null;
|
if(!(info&&info.no_git&&info.manual_update&&info.behind>0)) return null;
|
||||||
return 'Manual update required: run docker pull ghcr.io/nesquena/hermes-webui:latest, then recreate the container.';
|
return t('settings_update_manual_docker','docker pull ghcr.io/nesquena/hermes-webui:latest');
|
||||||
}
|
}
|
||||||
function _formatUpdateCheckError(label,info){
|
function _formatUpdateCheckError(label,info){
|
||||||
if(!info||!info.error) return null;
|
if(!info||!info.error) return null;
|
||||||
|
|||||||
@@ -0,0 +1,38 @@
|
|||||||
|
"""Regression tests for localized Docker manual-update guidance (#5959)."""
|
||||||
|
|
||||||
|
import re
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
|
||||||
|
ROOT = Path(__file__).resolve().parents[1]
|
||||||
|
|
||||||
|
|
||||||
|
def read(relative_path: str) -> str:
|
||||||
|
return (ROOT / relative_path).read_text(encoding="utf-8")
|
||||||
|
|
||||||
|
|
||||||
|
def test_manual_update_instruction_exists_in_every_locale():
|
||||||
|
source = read("static/i18n.js")
|
||||||
|
assert source.count("settings_update_manual_docker:") == 15
|
||||||
|
|
||||||
|
values = re.findall(r"settings_update_manual_docker:\s*'([^']*)'", source)
|
||||||
|
assert len(values) == 15
|
||||||
|
assert all("{0}" in value for value in values)
|
||||||
|
|
||||||
|
|
||||||
|
def test_manual_update_instruction_uses_translation_helper():
|
||||||
|
source = read("static/ui.js")
|
||||||
|
match = re.search(
|
||||||
|
r"function _formatManualUpdateInstruction\b.*?\n\}", source, re.DOTALL
|
||||||
|
)
|
||||||
|
assert match
|
||||||
|
function_source = match.group(0)
|
||||||
|
assert "t('settings_update_manual_docker'" in function_source
|
||||||
|
assert "docker pull ghcr.io/nesquena/hermes-webui:latest" in function_source
|
||||||
|
assert "Manual update required" not in function_source
|
||||||
|
|
||||||
|
|
||||||
|
def test_settings_panel_has_no_hardcoded_manual_update_fallback():
|
||||||
|
source = read("static/panels.js")
|
||||||
|
assert "Manual update required" not in source
|
||||||
|
assert "_formatManualUpdateInstruction(data.webui)" in source
|
||||||
@@ -1783,6 +1783,10 @@ class TestUpdateBannerUx:
|
|||||||
format_fn = extract_js_function(src, '_formatUpdateTargetStatus')
|
format_fn = extract_js_function(src, '_formatUpdateTargetStatus')
|
||||||
instruction_fn = extract_js_function(src, '_formatManualUpdateInstruction')
|
instruction_fn = extract_js_function(src, '_formatManualUpdateInstruction')
|
||||||
script = f"""
|
script = f"""
|
||||||
|
function t(key, ...args) {{
|
||||||
|
const values = {{ settings_update_manual_docker: 'Manual update required: run {{0}}, then recreate the container.' }};
|
||||||
|
return (values[key] || key).replace(/\{{(\d+)\}}/g, (_, i) => args[Number(i)] ?? '');
|
||||||
|
}}
|
||||||
{format_fn}
|
{format_fn}
|
||||||
{instruction_fn}
|
{instruction_fn}
|
||||||
const manual=_formatUpdateTargetStatus('WebUI', {{
|
const manual=_formatUpdateTargetStatus('WebUI', {{
|
||||||
@@ -1818,6 +1822,10 @@ const state = {{
|
|||||||
global.window = {{}};
|
global.window = {{}};
|
||||||
global.$ = (id) => state[id] || null;
|
global.$ = (id) => state[id] || null;
|
||||||
global._renderUpdateWhatsNewLinks = () => {{}};
|
global._renderUpdateWhatsNewLinks = () => {{}};
|
||||||
|
global.t = (key, ...args) => {{
|
||||||
|
const values = {{ settings_update_manual_docker: 'Manual update required: run {{0}}, then recreate the container.' }};
|
||||||
|
return (values[key] || key).replace(/\{{(\d+)\}}/g, (_, i) => args[Number(i)] ?? '');
|
||||||
|
}};
|
||||||
{format_fn}
|
{format_fn}
|
||||||
{instruction_fn}
|
{instruction_fn}
|
||||||
{show_fn}
|
{show_fn}
|
||||||
@@ -1871,16 +1879,17 @@ let apiData = {{
|
|||||||
agent: null,
|
agent: null,
|
||||||
}};
|
}};
|
||||||
function $(id) {{ return state[id] || null; }}
|
function $(id) {{ return state[id] || null; }}
|
||||||
function t(key) {{
|
function t(key, ...args) {{
|
||||||
const values = {{
|
const values = {{
|
||||||
settings_checking: 'Checking',
|
settings_checking: 'Checking',
|
||||||
settings_check_now: 'Check now',
|
settings_check_now: 'Check now',
|
||||||
settings_updates_available: '{{count}} update(s) available',
|
settings_updates_available: '{{count}} update(s) available',
|
||||||
settings_update_no_git: 'Cannot check for updates',
|
settings_update_no_git: 'Cannot check for updates',
|
||||||
|
settings_update_manual_docker: 'Manual update required: run {{0}}, then recreate the container.',
|
||||||
settings_up_to_date: 'Up to date',
|
settings_up_to_date: 'Up to date',
|
||||||
settings_update_check_failed: 'Check failed',
|
settings_update_check_failed: 'Check failed',
|
||||||
}};
|
}};
|
||||||
return values[key] || key;
|
return (values[key] || key).replace(/\{{(\d+)\}}/g, (_, i) => args[Number(i)] ?? '');
|
||||||
}}
|
}}
|
||||||
async function api() {{ return apiData; }}
|
async function api() {{ return apiData; }}
|
||||||
function _showUpdateBanner() {{}}
|
function _showUpdateBanner() {{}}
|
||||||
|
|||||||
Reference in new issue
Block a user