From ac32243bf47fd77d312e9eb3c795f208d587caff Mon Sep 17 00:00:00 2001 From: "Beau Beauchamp, WebTigers" Date: Mon, 24 Aug 2026 17:30:48 -0400 Subject: [PATCH] fix(i18n): the admin chrome was still hardcoded English (v1.0.2) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The platform ships six locales, but PUMA's shared chrome rendered its own labels as literals — My Profile, Lock Screen, Sign Out, Alerts, View all, Activity, the agent aside, the theme/skin/language switchers, the consent banner, and the cron + schedule setup screens stayed English in every locale. 'Skip to content' — an accessibility affordance — was untranslated too. 93 keys across themes/puma/languages/*/theme.php; all six locales at 133 with identical key sets. Time-ago strings became sprintf keys; the inline-JS 'User' fallback now reads a translated data-fallback attribute. DELIBERATELY still English: cPanel/Plesk control names in the cron instructions (Add New Cron Job, Common Settings, ...). The user is hunting for those exact labels on an English cPanel screen — translating them would send them after a button that doesn't exist. Co-Authored-By: Claude Opus 4.8 --- CHANGELOG.md | 17 +++ library/Tiger/Version.php | 2 +- themes/puma/languages/de/theme.php | 111 +++++++++++++++ themes/puma/languages/en/theme.php | 127 ++++++++++++++++++ themes/puma/languages/es/theme.php | 111 +++++++++++++++ themes/puma/languages/fr/theme.php | 111 +++++++++++++++ themes/puma/languages/hi/theme.php | 110 +++++++++++++++ themes/puma/languages/pt/theme.php | 111 +++++++++++++++ themes/puma/layouts/scripts/admin.phtml | 4 +- themes/puma/layouts/scripts/auth.phtml | 4 +- themes/puma/layouts/scripts/layout.phtml | 2 +- .../scripts/_partials/admin-header.phtml | 28 ++-- .../views/scripts/_partials/admin-menu.phtml | 2 +- .../_partials/admin-sidebar-left.phtml | 6 +- .../_partials/admin-sidebar-right.phtml | 10 +- .../views/scripts/_partials/agent-aside.phtml | 24 ++-- .../scripts/_partials/consent-banner.phtml | 6 +- .../views/scripts/_partials/cron-setup.phtml | 60 +++++---- .../scripts/_partials/lang-switcher.phtml | 2 +- .../scripts/_partials/public-header.phtml | 4 +- .../scripts/_partials/schedule-control.phtml | 34 +++-- .../scripts/_partials/skin-switcher.phtml | 16 ++- .../scripts/_partials/theme-switcher.phtml | 8 +- 23 files changed, 810 insertions(+), 100 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5d81e86f..1b0abbb0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,23 @@ All notable changes to **Tiger Core** (`webtigers/tiger-core`). Format follows ## [Unreleased] +## [1.0.2] — 2026-08-24 + +### Fixed +- **The admin chrome was still hardcoded English.** The platform ships six locales, but the shared + PUMA chrome rendered its own labels as literals — so **My Profile**, **Lock Screen**, **Sign Out**, + **Alerts**, **View all**, **Activity**, the agent aside, the theme/skin/language switchers, the + consent banner, and the cron + schedule setup screens all stayed English no matter the locale. + Even `Skip to content` — an accessibility affordance — was untranslated. 93 keys added to + `themes/puma/languages/*/theme.php`, all six locales at 133 with identical key sets. +- Time-ago strings ("15 minutes ago") became `sprintf` keys rather than baked-in English, and the + inline-JS `'User'` fallback now reads a translated `data-fallback` attribute. + +### Note +Third-party UI labels are deliberately NOT translated: the cron setup walks you through **cPanel's +and Plesk's own English screens**, so control names like *Add New Cron Job* stay verbatim in every +locale — translating them would send people hunting for a button that doesn't exist. + ## [1.0.1] — 2026-08-24 ### Fixed diff --git a/library/Tiger/Version.php b/library/Tiger/Version.php index 8954761e..4e19b47c 100644 --- a/library/Tiger/Version.php +++ b/library/Tiger/Version.php @@ -9,5 +9,5 @@ class Tiger_Version { /** Current Tiger Core version. Keep in lockstep with the git tag cut for a release. */ - const VERSION = '1.0.1'; + const VERSION = '1.0.2'; } diff --git a/themes/puma/languages/de/theme.php b/themes/puma/languages/de/theme.php index 4203aa1d..1ed0dcad 100644 --- a/themes/puma/languages/de/theme.php +++ b/themes/puma/languages/de/theme.php @@ -48,4 +48,115 @@ 'theme.footer.terms' => 'Nutzungsbedingungen', 'theme.footer.github' => 'GitHub', 'theme.footer.home' => 'Startseite', + + // ------------------------------------------------------------------ + // Admin-Oberfläche (gemeinsame Shell) — Siezen, wie im Backend üblich + // ------------------------------------------------------------------ + + 'theme.a11y.skip_to_content' => 'Zum Inhalt springen', + 'theme.a11y.toggle_nav' => 'Navigation ein- oder ausblenden', + 'theme.a11y.main_nav' => 'Hauptnavigation', + 'theme.a11y.sidebar_nav' => 'Seitenleistennavigation', + 'theme.a11y.primary_nav' => 'Hauptnavigation', + + 'theme.action.save' => 'Speichern', + 'theme.action.copy' => 'Kopieren', + + 'theme.admin.title' => 'Tiger-Verwaltung', + 'theme.admin.navigation' => 'Navigation', + 'theme.admin.guest' => 'Gast', + 'theme.admin.user_fallback' => 'Benutzer', + 'theme.search.label' => 'Suchen', + + 'theme.admin.alerts' => 'Meldungen', + 'theme.admin.alert.user_locked' => 'Benutzer gesperrt', + 'theme.admin.alert.connection_restored' => 'Verbindung wiederhergestellt', + 'theme.admin.time.minutes_ago' => 'vor %d Minuten', + 'theme.admin.time.hour_ago' => 'vor %d Stunde', + 'theme.admin.view_all' => 'Alle ansehen', + + 'theme.admin.menu.profile' => 'Mein Profil', + 'theme.admin.menu.two_factor' => 'Zwei-Faktor-Authentifizierung', + 'theme.admin.menu.lock_screen' => 'Bildschirm sperren', + 'theme.admin.menu.sign_out' => 'Abmelden', + + 'theme.aside.label' => 'Assistenzbereich', + 'theme.aside.activity' => 'Aktivität', + 'theme.aside.placeholder' => 'Diese optionale Leiste erscheint, sobald eine View %s setzt. Platzieren Sie hier kontextbezogene Widgets: letzte Aktivitäten, Inline-Hilfe, Filter.', + + 'theme.agent.label' => 'KI-Agent', + 'theme.agent.title' => 'Agent', + 'theme.agent.model' => 'Modell', + 'theme.agent.new_chat' => 'Neuer Chat', + 'theme.agent.drop_files' => 'Dateien hier ablegen, um sie anzuhängen', + 'theme.agent.empty' => 'Beginnen Sie ein Gespräch — der Agent handelt mit Ihren Berechtigungen.', + 'theme.agent.input_placeholder' => 'Bitten Sie den Agenten, etwas zu bauen, zu ändern oder zu erklären…', + 'theme.agent.attach' => 'Datei anhängen', + 'theme.agent.mode_title' => 'Automatisierungsgrad', + 'theme.agent.send' => 'Senden', + 'theme.agent.open' => 'KI-Agenten öffnen', + + 'theme.switcher.language' => 'Sprache', + 'theme.switcher.theme' => 'Erscheinungsbild', + 'theme.switcher.browser' => 'Browser', + 'theme.switcher.light' => 'Hell', + 'theme.switcher.dark' => 'Dunkel', + 'theme.switcher.skin' => 'Skin', + 'theme.switcher.skin_title' => 'Skin (Live-Vorschau)', + 'theme.switcher.skin_header' => 'Skin — Live-Vorschau', + 'theme.switcher.custom' => 'Eigenes', + + 'theme.consent.label' => 'Cookie-Einwilligung', + 'theme.consent.learn_more' => 'Mehr erfahren', + 'theme.consent.gpc' => 'Global Privacy Control erkannt — Sie sind von Analyse und Datenweitergabe ausgenommen.', + + 'theme.auth.title_default' => 'Anmelden — Tiger', + + // Die Bezeichnungen der Bedienelemente von cPanel / Plesk bleiben ABSICHTLICH auf Englisch: + // genau so stehen sie auf dem cPanel- bzw. Plesk-Bildschirm, den der Nutzer vor sich hat. + 'theme.cron.title' => 'So richten Sie Cron ein', + 'theme.cron.status.real.title' => 'Ein echter Cron läuft.', + 'theme.cron.status.real.body' => 'Tiger hat in den letzten Minuten vom Cron Ihres Servers gehört — die Zeitpläne laufen pünktlich.', + 'theme.cron.status.pseudo.title' => 'Der Pseudo-Cron nach WordPress-Art ist aktiv.', + 'theme.cron.status.pseudo.body' => 'Es wurde kein echter Cron erkannt, deshalb laufen geplante Aufgaben über den Website-Traffic — für den Anfang in Ordnung, aber auf einer ruhigen Website können Aufgaben zu spät laufen. Richten Sie unten einen echten Cron ein, damit alles zuverlässig und pünktlich läuft.', + 'theme.cron.status.none.title' => 'Es läuft kein Cron.', + 'theme.cron.status.none.body' => 'Sowohl der echte Cron als auch die Traffic-gesteuerte Notlösung sind aus — geplante Aufgaben laufen erst, wenn Sie unten einen Cron einrichten.', + 'theme.cron.command_label' => 'Ihr Cron-Befehl', + 'theme.cron.every_minute_note' => 'Führen Sie ihn jede Minute aus (* * * * *) — Tiger entscheidet intern, welche Aufgaben tatsächlich fällig sind. Ein minütlicher Cron ist also günstig und hält alles pünktlich.', + 'theme.cron.tab.cli' => 'Kommandozeile', + 'theme.cron.tab.claude' => 'Claude Code machen lassen', + 'theme.cron.cpanel.step1' => 'Öffnen Sie in cPanel Advanced → Cron Jobs.', + 'theme.cron.cpanel.step2' => 'Setzen Sie unter Add New Cron Job die Common Settings auf Once Per Minute (* * * * *).', + 'theme.cron.cpanel.step3' => 'Fügen Sie den Befehl von oben in Command ein.', + 'theme.cron.cpanel.step4' => 'Klicken Sie auf Add New Cron Job. Fertig — diese Karte wird innerhalb von ein bis zwei Minuten grün.', + 'theme.cron.cpanel.php_path' => 'Wird php nicht gefunden, verwenden Sie statt php den vollständigen PHP-Pfad Ihres Hosters (z. B. /usr/local/bin/ea-php82).', + 'theme.cron.plesk.step1' => 'Öffnen Sie in Plesk Websites & Domains → Scheduled Tasks für Ihre Domain.', + 'theme.cron.plesk.step2' => 'Klicken Sie auf Add Task und wählen Sie Run a command.', + 'theme.cron.plesk.step3' => 'Stellen Sie Run auf Cron style und tragen Sie * * * * * ein.', + 'theme.cron.plesk.step4' => 'Fügen Sie den Befehl von oben ein und klicken Sie zum Testen auf OK / Run Now.', + 'theme.cron.cli.intro' => 'Verbinden Sie sich per SSH mit dem Server und bearbeiten Sie die Crontab:', + 'theme.cron.cli.add' => 'Fügen Sie diese Zeile hinzu und speichern Sie:', + 'theme.cron.claude.intro' => 'Lassen Sie es Claude Code (oder einen beliebigen Shell-Zugang zu diesem Server) für Sie erledigen — fragen Sie einfach:', + 'theme.cron.claude.prompt' => 'Richte einen minütlichen Cron ein, der Folgendes ausführt:', + 'theme.cron.claude.note' => 'Claude Code trägt den Crontab-Eintrag ein und bestätigt ihn. Bis dahin hält der Traffic-gesteuerte Pseudo-Cron den Betrieb am Laufen.', + + 'theme.schedule.frequency' => 'Häufigkeit', + 'theme.schedule.time' => 'Uhrzeit', + 'theme.schedule.day_of_week' => 'Wochentag', + 'theme.schedule.day_of_month' => 'Tag des Monats', + 'theme.schedule.enabled' => 'Aktiviert', + 'theme.schedule.freq.every_minute' => 'Jede Minute', + 'theme.schedule.freq.every_5_min' => 'Alle 5 Minuten', + 'theme.schedule.freq.every_15_min' => 'Alle 15 Minuten', + 'theme.schedule.freq.hourly' => 'Stündlich', + 'theme.schedule.freq.daily' => 'Täglich', + 'theme.schedule.freq.weekly' => 'Wöchentlich', + 'theme.schedule.freq.monthly' => 'Monatlich', + 'theme.schedule.day.sunday' => 'Sonntag', + 'theme.schedule.day.monday' => 'Montag', + 'theme.schedule.day.tuesday' => 'Dienstag', + 'theme.schedule.day.wednesday' => 'Mittwoch', + 'theme.schedule.day.thursday' => 'Donnerstag', + 'theme.schedule.day.friday' => 'Freitag', + 'theme.schedule.day.saturday' => 'Samstag', ]; diff --git a/themes/puma/languages/en/theme.php b/themes/puma/languages/en/theme.php index b6aa8e30..2af23911 100644 --- a/themes/puma/languages/en/theme.php +++ b/themes/puma/languages/en/theme.php @@ -57,4 +57,131 @@ 'theme.footer.terms' => 'Terms', 'theme.footer.github' => 'GitHub', 'theme.footer.home' => 'Home', + + // ------------------------------------------------------------------ + // Admin chrome (the shared shell: layout, header, sidebars, asides) + // ------------------------------------------------------------------ + + // Accessibility labels (skip links, landmark + control names) + 'theme.a11y.skip_to_content' => 'Skip to content', + 'theme.a11y.toggle_nav' => 'Toggle navigation', + 'theme.a11y.main_nav' => 'Main navigation', + 'theme.a11y.sidebar_nav' => 'Sidebar navigation', + 'theme.a11y.primary_nav' => 'Primary navigation', + + // Shared actions + 'theme.action.save' => 'Save', + 'theme.action.copy' => 'Copy', + + // Admin shell + 'theme.admin.title' => 'Tiger Admin', + 'theme.admin.navigation' => 'Navigation', + 'theme.admin.guest' => 'Guest', + 'theme.admin.user_fallback' => 'User', + 'theme.search.label' => 'Search', + + // Header notifications + 'theme.admin.alerts' => 'Alerts', + 'theme.admin.alert.user_locked' => 'User locked', + 'theme.admin.alert.connection_restored' => 'Connection restored', + 'theme.admin.time.minutes_ago' => '%d minutes ago', + 'theme.admin.time.hour_ago' => '%d hour ago', + 'theme.admin.view_all' => 'View all', + + // Header user menu + 'theme.admin.menu.profile' => 'My Profile', + 'theme.admin.menu.two_factor' => 'Two-Factor Auth', + 'theme.admin.menu.lock_screen' => 'Lock Screen', + 'theme.admin.menu.sign_out' => 'Sign Out', + + // Right aside (contextual rail) + 'theme.aside.label' => 'Assistant panel', + 'theme.aside.activity' => 'Activity', + 'theme.aside.placeholder' => 'This optional rail appears when a view sets %s. Drop contextual widgets here — recent activity, inline help, filters.', + + // TigerAgent aside + 'theme.agent.label' => 'AI Agent', + 'theme.agent.title' => 'Agent', + 'theme.agent.model' => 'Model', + 'theme.agent.new_chat' => 'New chat', + 'theme.agent.drop_files' => 'Drop files to attach', + 'theme.agent.empty' => 'Start a conversation — the agent acts with your permissions.', + 'theme.agent.input_placeholder' => 'Ask the agent to build, change, or explain something…', + 'theme.agent.attach' => 'Attach a file', + 'theme.agent.mode_title' => 'Automation level', + 'theme.agent.send' => 'Send', + 'theme.agent.open' => 'Open the AI agent', + + // Language / theme / skin switchers + 'theme.switcher.language' => 'Language', + 'theme.switcher.theme' => 'Theme', + 'theme.switcher.browser' => 'Browser', + 'theme.switcher.light' => 'Light', + 'theme.switcher.dark' => 'Dark', + 'theme.switcher.skin' => 'Skin', + 'theme.switcher.skin_title' => 'Skin (live preview)', + 'theme.switcher.skin_header' => 'Skin — live preview', + 'theme.switcher.custom' => 'Custom', + + // Cookie-consent banner ("Global Privacy Control" is the standard's own name — kept verbatim) + 'theme.consent.label' => 'Cookie consent', + 'theme.consent.learn_more' => 'Learn more', + 'theme.consent.gpc' => "Global Privacy Control detected — you're opted out of analytics & sharing.", + + // Auth layout + 'theme.auth.title_default' => 'Sign in — Tiger', + + // ------------------------------------------------------------------ + // Cron setup card. NOTE: the names of controls in cPanel's / Plesk's OWN + // interface ("Add New Cron Job", "Common Settings", "Once Per Minute", + // "Command", "Add Task", "Run a command", "Cron style", …) MUST stay in + // English in every locale — the user is looking for them on an English + // cPanel/Plesk screen. Translate the prose around them only. + // ------------------------------------------------------------------ + 'theme.cron.title' => 'How to set up Cron', + 'theme.cron.status.real.title' => 'A real cron is running.', + 'theme.cron.status.real.body' => 'Tiger heard from your server cron in the last couple of minutes — schedules run on time.', + 'theme.cron.status.pseudo.title' => 'WordPress-style pseudo-cron is active.', + 'theme.cron.status.pseudo.body' => 'No real cron detected, so scheduled jobs run on site traffic — fine to start, but a quiet site can run jobs late. Add a real cron below for reliable, on-time scheduling.', + 'theme.cron.status.none.title' => 'No cron is running.', + 'theme.cron.status.none.body' => 'Both real cron and the traffic-driven fallback are off — scheduled jobs will not run until you set one up below.', + 'theme.cron.command_label' => 'Your cron command', + 'theme.cron.every_minute_note' => 'Run it every minute (* * * * *) — Tiger decides internally which jobs are actually due, so a per-minute cron is cheap and keeps everything on time.', + 'theme.cron.tab.cli' => 'Command line', + 'theme.cron.tab.claude' => 'Let Claude Code do it', + 'theme.cron.cpanel.step1' => 'In cPanel, open Advanced → Cron Jobs.', + 'theme.cron.cpanel.step2' => 'Under Add New Cron Job, set Common Settings to Once Per Minute (* * * * *).', + 'theme.cron.cpanel.step3' => 'Paste the command above into Command.', + 'theme.cron.cpanel.step4' => 'Click Add New Cron Job. Done — this card flips to green within a minute or two.', + 'theme.cron.cpanel.php_path' => "If php isn't found, use your host's full PHP path (e.g. /usr/local/bin/ea-php82) in place of php.", + 'theme.cron.plesk.step1' => 'In Plesk, open Websites & Domains → Scheduled Tasks for your domain.', + 'theme.cron.plesk.step2' => 'Click Add Task, choose Run a command.', + 'theme.cron.plesk.step3' => 'Set Run to Cron style and enter * * * * *.', + 'theme.cron.plesk.step4' => 'Paste the command above, then OK / Run Now to test.', + 'theme.cron.cli.intro' => 'SSH into the server and edit the crontab:', + 'theme.cron.cli.add' => 'Add this line, then save:', + 'theme.cron.claude.intro' => 'Have Claude Code (or any shell access to this server) do it for you — just ask:', + 'theme.cron.claude.prompt' => 'Add a per-minute cron that runs:', + 'theme.cron.claude.note' => 'Claude Code will add the crontab entry and confirm it. Until then, the traffic-driven pseudo-cron keeps things moving.', + + // Schedule control (values posted to the API stay the English keys; only the labels localize) + 'theme.schedule.frequency' => 'Frequency', + 'theme.schedule.time' => 'Time', + 'theme.schedule.day_of_week' => 'Day of week', + 'theme.schedule.day_of_month' => 'Day of month', + 'theme.schedule.enabled' => 'Enabled', + 'theme.schedule.freq.every_minute' => 'Every minute', + 'theme.schedule.freq.every_5_min' => 'Every 5 minutes', + 'theme.schedule.freq.every_15_min' => 'Every 15 minutes', + 'theme.schedule.freq.hourly' => 'Hourly', + 'theme.schedule.freq.daily' => 'Daily', + 'theme.schedule.freq.weekly' => 'Weekly', + 'theme.schedule.freq.monthly' => 'Monthly', + 'theme.schedule.day.sunday' => 'Sunday', + 'theme.schedule.day.monday' => 'Monday', + 'theme.schedule.day.tuesday' => 'Tuesday', + 'theme.schedule.day.wednesday' => 'Wednesday', + 'theme.schedule.day.thursday' => 'Thursday', + 'theme.schedule.day.friday' => 'Friday', + 'theme.schedule.day.saturday' => 'Saturday', ]; diff --git a/themes/puma/languages/es/theme.php b/themes/puma/languages/es/theme.php index 9e743a05..0509aa37 100644 --- a/themes/puma/languages/es/theme.php +++ b/themes/puma/languages/es/theme.php @@ -48,4 +48,115 @@ 'theme.footer.terms' => 'Términos', 'theme.footer.github' => 'GitHub', 'theme.footer.home' => 'Inicio', + + // ------------------------------------------------------------------ + // Interfaz del panel de administración (shell compartido) + // ------------------------------------------------------------------ + + 'theme.a11y.skip_to_content' => 'Ir al contenido', + 'theme.a11y.toggle_nav' => 'Mostrar u ocultar la navegación', + 'theme.a11y.main_nav' => 'Navegación principal', + 'theme.a11y.sidebar_nav' => 'Navegación lateral', + 'theme.a11y.primary_nav' => 'Navegación principal', + + 'theme.action.save' => 'Guardar', + 'theme.action.copy' => 'Copiar', + + 'theme.admin.title' => 'Administración de Tiger', + 'theme.admin.navigation' => 'Navegación', + 'theme.admin.guest' => 'Invitado', + 'theme.admin.user_fallback' => 'Usuario', + 'theme.search.label' => 'Buscar', + + 'theme.admin.alerts' => 'Alertas', + 'theme.admin.alert.user_locked' => 'Usuario bloqueado', + 'theme.admin.alert.connection_restored' => 'Conexión restablecida', + 'theme.admin.time.minutes_ago' => 'hace %d minutos', + 'theme.admin.time.hour_ago' => 'hace %d hora', + 'theme.admin.view_all' => 'Ver todo', + + 'theme.admin.menu.profile' => 'Mi perfil', + 'theme.admin.menu.two_factor' => 'Verificación en dos pasos', + 'theme.admin.menu.lock_screen' => 'Bloquear pantalla', + 'theme.admin.menu.sign_out' => 'Cerrar sesión', + + 'theme.aside.label' => 'Panel del asistente', + 'theme.aside.activity' => 'Actividad', + 'theme.aside.placeholder' => 'Este panel opcional aparece cuando una vista define %s. Coloca aquí widgets contextuales: actividad reciente, ayuda en línea, filtros.', + + 'theme.agent.label' => 'Agente de IA', + 'theme.agent.title' => 'Agente', + 'theme.agent.model' => 'Modelo', + 'theme.agent.new_chat' => 'Nueva conversación', + 'theme.agent.drop_files' => 'Suelta los archivos para adjuntarlos', + 'theme.agent.empty' => 'Inicia una conversación: el agente actúa con tus permisos.', + 'theme.agent.input_placeholder' => 'Pide al agente que construya, cambie o explique algo…', + 'theme.agent.attach' => 'Adjuntar un archivo', + 'theme.agent.mode_title' => 'Nivel de automatización', + 'theme.agent.send' => 'Enviar', + 'theme.agent.open' => 'Abrir el agente de IA', + + 'theme.switcher.language' => 'Idioma', + 'theme.switcher.theme' => 'Tema', + 'theme.switcher.browser' => 'Navegador', + 'theme.switcher.light' => 'Claro', + 'theme.switcher.dark' => 'Oscuro', + 'theme.switcher.skin' => 'Skin', + 'theme.switcher.skin_title' => 'Skin (vista previa en vivo)', + 'theme.switcher.skin_header' => 'Skin — vista previa en vivo', + 'theme.switcher.custom' => 'Personalizado', + + 'theme.consent.label' => 'Consentimiento de cookies', + 'theme.consent.learn_more' => 'Más información', + 'theme.consent.gpc' => 'Se ha detectado Global Privacy Control: estás excluido de la analítica y del intercambio de datos.', + + 'theme.auth.title_default' => 'Iniciar sesión — Tiger', + + // Los nombres de los controles de cPanel / Plesk se dejan EN INGLÉS a propósito: el usuario los + // busca tal cual en una pantalla de cPanel o Plesk en inglés. + 'theme.cron.title' => 'Cómo configurar Cron', + 'theme.cron.status.real.title' => 'Hay un cron real en marcha.', + 'theme.cron.status.real.body' => 'Tiger recibió señal del cron de tu servidor en los últimos minutos: las tareas se ejecutan a tiempo.', + 'theme.cron.status.pseudo.title' => 'El pseudo-cron al estilo de WordPress está activo.', + 'theme.cron.status.pseudo.body' => 'No se detectó un cron real, así que las tareas programadas dependen del tráfico del sitio: sirve para empezar, pero en un sitio con poco tráfico pueden ejecutarse tarde. Añade abajo un cron real para una programación fiable y puntual.', + 'theme.cron.status.none.title' => 'No hay ningún cron en marcha.', + 'theme.cron.status.none.body' => 'Tanto el cron real como el respaldo por tráfico están desactivados: las tareas programadas no se ejecutarán hasta que configures uno abajo.', + 'theme.cron.command_label' => 'Tu comando de cron', + 'theme.cron.every_minute_note' => 'Ejecútalo cada minuto (* * * * *): Tiger decide internamente qué tareas tocan, así que un cron por minuto es barato y lo mantiene todo puntual.', + 'theme.cron.tab.cli' => 'Línea de comandos', + 'theme.cron.tab.claude' => 'Que lo haga Claude Code', + 'theme.cron.cpanel.step1' => 'En cPanel, abre Advanced → Cron Jobs.', + 'theme.cron.cpanel.step2' => 'En Add New Cron Job, pon Common Settings en Once Per Minute (* * * * *).', + 'theme.cron.cpanel.step3' => 'Pega el comando de arriba en Command.', + 'theme.cron.cpanel.step4' => 'Haz clic en Add New Cron Job. Listo: esta tarjeta se pondrá verde en uno o dos minutos.', + 'theme.cron.cpanel.php_path' => 'Si no se encuentra php, usa la ruta completa de PHP de tu proveedor (por ejemplo /usr/local/bin/ea-php82) en lugar de php.', + 'theme.cron.plesk.step1' => 'En Plesk, abre Websites & Domains → Scheduled Tasks para tu dominio.', + 'theme.cron.plesk.step2' => 'Haz clic en Add Task y elige Run a command.', + 'theme.cron.plesk.step3' => 'Pon Run en Cron style e introduce * * * * *.', + 'theme.cron.plesk.step4' => 'Pega el comando de arriba y luego pulsa OK / Run Now para probarlo.', + 'theme.cron.cli.intro' => 'Conéctate por SSH al servidor y edita el crontab:', + 'theme.cron.cli.add' => 'Añade esta línea y guarda:', + 'theme.cron.claude.intro' => 'Deja que Claude Code (o cualquier acceso por shell a este servidor) lo haga por ti; basta con pedírselo:', + 'theme.cron.claude.prompt' => 'Añade un cron por minuto que ejecute:', + 'theme.cron.claude.note' => 'Claude Code añadirá la entrada del crontab y lo confirmará. Mientras tanto, el pseudo-cron por tráfico mantiene todo en marcha.', + + 'theme.schedule.frequency' => 'Frecuencia', + 'theme.schedule.time' => 'Hora', + 'theme.schedule.day_of_week' => 'Día de la semana', + 'theme.schedule.day_of_month' => 'Día del mes', + 'theme.schedule.enabled' => 'Activado', + 'theme.schedule.freq.every_minute' => 'Cada minuto', + 'theme.schedule.freq.every_5_min' => 'Cada 5 minutos', + 'theme.schedule.freq.every_15_min' => 'Cada 15 minutos', + 'theme.schedule.freq.hourly' => 'Cada hora', + 'theme.schedule.freq.daily' => 'Cada día', + 'theme.schedule.freq.weekly' => 'Cada semana', + 'theme.schedule.freq.monthly' => 'Cada mes', + 'theme.schedule.day.sunday' => 'Domingo', + 'theme.schedule.day.monday' => 'Lunes', + 'theme.schedule.day.tuesday' => 'Martes', + 'theme.schedule.day.wednesday' => 'Miércoles', + 'theme.schedule.day.thursday' => 'Jueves', + 'theme.schedule.day.friday' => 'Viernes', + 'theme.schedule.day.saturday' => 'Sábado', ]; diff --git a/themes/puma/languages/fr/theme.php b/themes/puma/languages/fr/theme.php index 76c2573e..11274a0f 100644 --- a/themes/puma/languages/fr/theme.php +++ b/themes/puma/languages/fr/theme.php @@ -48,4 +48,115 @@ 'theme.footer.terms' => 'Conditions', 'theme.footer.github' => 'GitHub', 'theme.footer.home' => 'Accueil', + + // ------------------------------------------------------------------ + // Interface d'administration (shell partagé) + // ------------------------------------------------------------------ + + 'theme.a11y.skip_to_content' => 'Aller au contenu', + 'theme.a11y.toggle_nav' => 'Afficher ou masquer la navigation', + 'theme.a11y.main_nav' => 'Navigation principale', + 'theme.a11y.sidebar_nav' => 'Navigation latérale', + 'theme.a11y.primary_nav' => 'Navigation principale', + + 'theme.action.save' => 'Enregistrer', + 'theme.action.copy' => 'Copier', + + 'theme.admin.title' => 'Administration Tiger', + 'theme.admin.navigation' => 'Navigation', + 'theme.admin.guest' => 'Invité', + 'theme.admin.user_fallback' => 'Utilisateur', + 'theme.search.label' => 'Rechercher', + + 'theme.admin.alerts' => 'Alertes', + 'theme.admin.alert.user_locked' => 'Utilisateur verrouillé', + 'theme.admin.alert.connection_restored' => 'Connexion rétablie', + 'theme.admin.time.minutes_ago' => 'il y a %d minutes', + 'theme.admin.time.hour_ago' => 'il y a %d heure', + 'theme.admin.view_all' => 'Tout voir', + + 'theme.admin.menu.profile' => 'Mon profil', + 'theme.admin.menu.two_factor' => 'Authentification à deux facteurs', + 'theme.admin.menu.lock_screen' => "Verrouiller l'écran", + 'theme.admin.menu.sign_out' => 'Se déconnecter', + + 'theme.aside.label' => 'Panneau assistant', + 'theme.aside.activity' => 'Activité', + 'theme.aside.placeholder' => 'Ce panneau optionnel apparaît quand une vue définit %s. Placez-y des widgets contextuels : activité récente, aide en ligne, filtres.', + + 'theme.agent.label' => 'Agent IA', + 'theme.agent.title' => 'Agent', + 'theme.agent.model' => 'Modèle', + 'theme.agent.new_chat' => 'Nouvelle conversation', + 'theme.agent.drop_files' => 'Déposez des fichiers pour les joindre', + 'theme.agent.empty' => 'Démarrez une conversation — l’agent agit avec vos permissions.', + 'theme.agent.input_placeholder' => 'Demandez à l’agent de créer, modifier ou expliquer quelque chose…', + 'theme.agent.attach' => 'Joindre un fichier', + 'theme.agent.mode_title' => "Niveau d'automatisation", + 'theme.agent.send' => 'Envoyer', + 'theme.agent.open' => "Ouvrir l'agent IA", + + 'theme.switcher.language' => 'Langue', + 'theme.switcher.theme' => 'Thème', + 'theme.switcher.browser' => 'Navigateur', + 'theme.switcher.light' => 'Clair', + 'theme.switcher.dark' => 'Sombre', + 'theme.switcher.skin' => 'Skin', + 'theme.switcher.skin_title' => 'Skin (aperçu en direct)', + 'theme.switcher.skin_header' => 'Skin — aperçu en direct', + 'theme.switcher.custom' => 'Personnalisé', + + 'theme.consent.label' => 'Consentement aux cookies', + 'theme.consent.learn_more' => 'En savoir plus', + 'theme.consent.gpc' => 'Global Privacy Control détecté — vous êtes exclu de la mesure d’audience et du partage de données.', + + 'theme.auth.title_default' => 'Connexion — Tiger', + + // Les libellés des contrôles de cPanel / Plesk restent VOLONTAIREMENT en anglais : c'est sous ce + // nom que l'utilisateur les trouve sur l'écran cPanel ou Plesk qu'il a sous les yeux. + 'theme.cron.title' => 'Comment configurer Cron', + 'theme.cron.status.real.title' => 'Un vrai cron tourne.', + 'theme.cron.status.real.body' => 'Tiger a reçu un signal du cron de votre serveur ces dernières minutes — les tâches planifiées partent à l’heure.', + 'theme.cron.status.pseudo.title' => 'Le pseudo-cron façon WordPress est actif.', + 'theme.cron.status.pseudo.body' => 'Aucun vrai cron détecté : les tâches planifiées dépendent du trafic du site — acceptable pour démarrer, mais un site peu visité peut les exécuter en retard. Ajoutez un vrai cron ci-dessous pour une planification fiable et ponctuelle.', + 'theme.cron.status.none.title' => 'Aucun cron ne tourne.', + 'theme.cron.status.none.body' => 'Le vrai cron et la solution de repli pilotée par le trafic sont tous deux désactivés — les tâches planifiées ne partiront pas tant que vous n’en aurez pas configuré un ci-dessous.', + 'theme.cron.command_label' => 'Votre commande cron', + 'theme.cron.every_minute_note' => 'Lancez-la toutes les minutes (* * * * *) — Tiger décide en interne quelles tâches sont réellement dues, donc un cron à la minute coûte peu et garde tout à l’heure.', + 'theme.cron.tab.cli' => 'Ligne de commande', + 'theme.cron.tab.claude' => 'Laisser faire Claude Code', + 'theme.cron.cpanel.step1' => 'Dans cPanel, ouvrez Advanced → Cron Jobs.', + 'theme.cron.cpanel.step2' => 'Sous Add New Cron Job, réglez Common Settings sur Once Per Minute (* * * * *).', + 'theme.cron.cpanel.step3' => 'Collez la commande ci-dessus dans Command.', + 'theme.cron.cpanel.step4' => 'Cliquez sur Add New Cron Job. C’est fait — cette carte passe au vert d’ici une à deux minutes.', + 'theme.cron.cpanel.php_path' => 'Si php est introuvable, utilisez le chemin PHP complet de votre hébergeur (par exemple /usr/local/bin/ea-php82) à la place de php.', + 'theme.cron.plesk.step1' => 'Dans Plesk, ouvrez Websites & Domains → Scheduled Tasks pour votre domaine.', + 'theme.cron.plesk.step2' => 'Cliquez sur Add Task, puis choisissez Run a command.', + 'theme.cron.plesk.step3' => 'Réglez Run sur Cron style et saisissez * * * * *.', + 'theme.cron.plesk.step4' => 'Collez la commande ci-dessus, puis OK / Run Now pour tester.', + 'theme.cron.cli.intro' => 'Connectez-vous au serveur en SSH et éditez la crontab :', + 'theme.cron.cli.add' => 'Ajoutez cette ligne, puis enregistrez :', + 'theme.cron.claude.intro' => 'Laissez Claude Code (ou n’importe quel accès shell à ce serveur) le faire pour vous — demandez-lui simplement :', + 'theme.cron.claude.prompt' => 'Ajoute un cron à la minute qui exécute :', + 'theme.cron.claude.note' => 'Claude Code ajoutera l’entrée crontab et la confirmera. En attendant, le pseudo-cron piloté par le trafic garde les choses en mouvement.', + + 'theme.schedule.frequency' => 'Fréquence', + 'theme.schedule.time' => 'Heure', + 'theme.schedule.day_of_week' => 'Jour de la semaine', + 'theme.schedule.day_of_month' => 'Jour du mois', + 'theme.schedule.enabled' => 'Activé', + 'theme.schedule.freq.every_minute' => 'Toutes les minutes', + 'theme.schedule.freq.every_5_min' => 'Toutes les 5 minutes', + 'theme.schedule.freq.every_15_min' => 'Toutes les 15 minutes', + 'theme.schedule.freq.hourly' => 'Toutes les heures', + 'theme.schedule.freq.daily' => 'Tous les jours', + 'theme.schedule.freq.weekly' => 'Toutes les semaines', + 'theme.schedule.freq.monthly' => 'Tous les mois', + 'theme.schedule.day.sunday' => 'Dimanche', + 'theme.schedule.day.monday' => 'Lundi', + 'theme.schedule.day.tuesday' => 'Mardi', + 'theme.schedule.day.wednesday' => 'Mercredi', + 'theme.schedule.day.thursday' => 'Jeudi', + 'theme.schedule.day.friday' => 'Vendredi', + 'theme.schedule.day.saturday' => 'Samedi', ]; diff --git a/themes/puma/languages/hi/theme.php b/themes/puma/languages/hi/theme.php index 53476177..eccacb45 100644 --- a/themes/puma/languages/hi/theme.php +++ b/themes/puma/languages/hi/theme.php @@ -48,4 +48,114 @@ 'theme.footer.terms' => 'शर्तें', 'theme.footer.github' => 'GitHub', 'theme.footer.home' => 'होम', + + // ------------------------------------------------------------------ + // एडमिन क्रोम (साझा शेल) — तकनीकी शब्द (Cron, cPanel, Skin) ज्यों के त्यों + // ------------------------------------------------------------------ + + 'theme.a11y.skip_to_content' => 'कॉन्टेंट पर जाएँ', + 'theme.a11y.toggle_nav' => 'नेविगेशन दिखाएँ या छिपाएँ', + 'theme.a11y.main_nav' => 'मुख्य नेविगेशन', + 'theme.a11y.sidebar_nav' => 'साइडबार नेविगेशन', + 'theme.a11y.primary_nav' => 'मुख्य नेविगेशन', + + 'theme.action.save' => 'सेव करें', + 'theme.action.copy' => 'कॉपी करें', + + 'theme.admin.title' => 'Tiger एडमिन', + 'theme.admin.navigation' => 'नेविगेशन', + 'theme.admin.guest' => 'अतिथि', + 'theme.admin.user_fallback' => 'यूज़र', + 'theme.search.label' => 'खोजें', + + 'theme.admin.alerts' => 'अलर्ट', + 'theme.admin.alert.user_locked' => 'यूज़र लॉक हो गया', + 'theme.admin.alert.connection_restored' => 'कनेक्शन बहाल हुआ', + 'theme.admin.time.minutes_ago' => '%d मिनट पहले', + 'theme.admin.time.hour_ago' => '%d घंटा पहले', + 'theme.admin.view_all' => 'सभी देखें', + + 'theme.admin.menu.profile' => 'मेरी प्रोफ़ाइल', + 'theme.admin.menu.two_factor' => 'टू-फ़ैक्टर ऑथेंटिकेशन', + 'theme.admin.menu.lock_screen' => 'स्क्रीन लॉक करें', + 'theme.admin.menu.sign_out' => 'साइन आउट', + + 'theme.aside.label' => 'सहायक पैनल', + 'theme.aside.activity' => 'गतिविधि', + 'theme.aside.placeholder' => 'यह वैकल्पिक पट्टी तब दिखती है जब कोई व्यू %s सेट करता है। यहाँ संदर्भ-आधारित विजेट रखें — हाल की गतिविधि, इनलाइन मदद, फ़िल्टर।', + + 'theme.agent.label' => 'AI एजेंट', + 'theme.agent.title' => 'एजेंट', + 'theme.agent.model' => 'मॉडल', + 'theme.agent.new_chat' => 'नई चैट', + 'theme.agent.drop_files' => 'अटैच करने के लिए फ़ाइलें यहाँ छोड़ें', + 'theme.agent.empty' => 'बातचीत शुरू करें — एजेंट आपकी ही अनुमतियों के साथ काम करता है।', + 'theme.agent.input_placeholder' => 'एजेंट से कुछ बनाने, बदलने या समझाने के लिए कहें…', + 'theme.agent.attach' => 'फ़ाइल अटैच करें', + 'theme.agent.mode_title' => 'ऑटोमेशन स्तर', + 'theme.agent.send' => 'भेजें', + 'theme.agent.open' => 'AI एजेंट खोलें', + + 'theme.switcher.language' => 'भाषा', + 'theme.switcher.theme' => 'थीम', + 'theme.switcher.browser' => 'ब्राउज़र', + 'theme.switcher.light' => 'लाइट', + 'theme.switcher.dark' => 'डार्क', + 'theme.switcher.skin' => 'Skin', + 'theme.switcher.skin_title' => 'Skin (लाइव प्रीव्यू)', + 'theme.switcher.skin_header' => 'Skin — लाइव प्रीव्यू', + 'theme.switcher.custom' => 'कस्टम', + + 'theme.consent.label' => 'कुकी सहमति', + 'theme.consent.learn_more' => 'और जानें', + 'theme.consent.gpc' => 'Global Privacy Control का पता चला — आप एनालिटिक्स और डेटा साझाकरण से बाहर हैं।', + + 'theme.auth.title_default' => 'साइन इन — Tiger', + + // cPanel / Plesk के अपने कंट्रोल के नाम जानबूझकर अंग्रेज़ी में रखे गए हैं — स्क्रीन पर वे इसी रूप में दिखते हैं। + 'theme.cron.title' => 'Cron कैसे सेट करें', + 'theme.cron.status.real.title' => 'असली cron चल रहा है।', + 'theme.cron.status.real.body' => 'पिछले कुछ मिनटों में Tiger को आपके सर्वर के cron से संकेत मिला — शेड्यूल समय पर चल रहे हैं।', + 'theme.cron.status.pseudo.title' => 'WordPress-शैली का pseudo-cron सक्रिय है।', + 'theme.cron.status.pseudo.body' => 'कोई असली cron नहीं मिला, इसलिए शेड्यूल किए गए जॉब साइट ट्रैफ़िक पर चलते हैं — शुरुआत के लिए ठीक है, पर कम ट्रैफ़िक वाली साइट पर जॉब देर से चल सकते हैं। भरोसेमंद और समय पर शेड्यूलिंग के लिए नीचे असली cron जोड़ें।', + 'theme.cron.status.none.title' => 'कोई cron नहीं चल रहा।', + 'theme.cron.status.none.body' => 'असली cron और ट्रैफ़िक-आधारित विकल्प, दोनों बंद हैं — जब तक आप नीचे एक सेट नहीं करते, शेड्यूल किए गए जॉब नहीं चलेंगे।', + 'theme.cron.command_label' => 'आपका cron कमांड', + 'theme.cron.every_minute_note' => 'इसे हर मिनट चलाएँ (* * * * *) — कौन-सा जॉब वाकई देय है, यह Tiger अंदर ही तय करता है, इसलिए हर मिनट का cron सस्ता है और सब कुछ समय पर रखता है।', + 'theme.cron.tab.cli' => 'कमांड लाइन', + 'theme.cron.tab.claude' => 'Claude Code से करवाएँ', + 'theme.cron.cpanel.step1' => 'cPanel में Advanced → Cron Jobs खोलें।', + 'theme.cron.cpanel.step2' => 'Add New Cron Job के नीचे Common Settings को Once Per Minute (* * * * *) पर सेट करें।', + 'theme.cron.cpanel.step3' => 'ऊपर दिया कमांड Command में पेस्ट करें।', + 'theme.cron.cpanel.step4' => 'Add New Cron Job पर क्लिक करें। हो गया — यह कार्ड एक-दो मिनट में हरा हो जाएगा।', + 'theme.cron.cpanel.php_path' => 'यदि php न मिले, तो php की जगह अपने होस्ट का पूरा PHP पाथ इस्तेमाल करें (जैसे /usr/local/bin/ea-php82)।', + 'theme.cron.plesk.step1' => 'Plesk में अपने डोमेन के लिए Websites & Domains → Scheduled Tasks खोलें।', + 'theme.cron.plesk.step2' => 'Add Task पर क्लिक करें और Run a command चुनें।', + 'theme.cron.plesk.step3' => 'Run को Cron style पर सेट करें और * * * * * दर्ज करें।', + 'theme.cron.plesk.step4' => 'ऊपर दिया कमांड पेस्ट करें, फिर जाँचने के लिए OK / Run Now दबाएँ।', + 'theme.cron.cli.intro' => 'सर्वर पर SSH से जुड़ें और crontab संपादित करें:', + 'theme.cron.cli.add' => 'यह लाइन जोड़ें और सेव करें:', + 'theme.cron.claude.intro' => 'यह काम Claude Code (या इस सर्वर पर किसी भी शेल एक्सेस) से करवा लें — बस इतना कहें:', + 'theme.cron.claude.prompt' => 'हर मिनट चलने वाला एक cron जोड़ो जो यह चलाए:', + 'theme.cron.claude.note' => 'Claude Code crontab एंट्री जोड़ देगा और उसकी पुष्टि करेगा। तब तक ट्रैफ़िक-आधारित pseudo-cron काम चलाता रहेगा।', + + 'theme.schedule.frequency' => 'आवृत्ति', + 'theme.schedule.time' => 'समय', + 'theme.schedule.day_of_week' => 'सप्ताह का दिन', + 'theme.schedule.day_of_month' => 'महीने का दिन', + 'theme.schedule.enabled' => 'सक्रिय', + 'theme.schedule.freq.every_minute' => 'हर मिनट', + 'theme.schedule.freq.every_5_min' => 'हर 5 मिनट', + 'theme.schedule.freq.every_15_min' => 'हर 15 मिनट', + 'theme.schedule.freq.hourly' => 'हर घंटे', + 'theme.schedule.freq.daily' => 'रोज़', + 'theme.schedule.freq.weekly' => 'हर सप्ताह', + 'theme.schedule.freq.monthly' => 'हर महीने', + 'theme.schedule.day.sunday' => 'रविवार', + 'theme.schedule.day.monday' => 'सोमवार', + 'theme.schedule.day.tuesday' => 'मंगलवार', + 'theme.schedule.day.wednesday' => 'बुधवार', + 'theme.schedule.day.thursday' => 'गुरुवार', + 'theme.schedule.day.friday' => 'शुक्रवार', + 'theme.schedule.day.saturday' => 'शनिवार', ]; diff --git a/themes/puma/languages/pt/theme.php b/themes/puma/languages/pt/theme.php index 5ff58361..05b6c383 100644 --- a/themes/puma/languages/pt/theme.php +++ b/themes/puma/languages/pt/theme.php @@ -48,4 +48,115 @@ 'theme.footer.terms' => 'Termos', 'theme.footer.github' => 'GitHub', 'theme.footer.home' => 'Início', + + // ------------------------------------------------------------------ + // Interface do painel administrativo (shell compartilhado) + // ------------------------------------------------------------------ + + 'theme.a11y.skip_to_content' => 'Ir para o conteúdo', + 'theme.a11y.toggle_nav' => 'Mostrar ou ocultar a navegação', + 'theme.a11y.main_nav' => 'Navegação principal', + 'theme.a11y.sidebar_nav' => 'Navegação lateral', + 'theme.a11y.primary_nav' => 'Navegação principal', + + 'theme.action.save' => 'Salvar', + 'theme.action.copy' => 'Copiar', + + 'theme.admin.title' => 'Administração do Tiger', + 'theme.admin.navigation' => 'Navegação', + 'theme.admin.guest' => 'Visitante', + 'theme.admin.user_fallback' => 'Usuário', + 'theme.search.label' => 'Pesquisar', + + 'theme.admin.alerts' => 'Alertas', + 'theme.admin.alert.user_locked' => 'Usuário bloqueado', + 'theme.admin.alert.connection_restored' => 'Conexão restabelecida', + 'theme.admin.time.minutes_ago' => 'há %d minutos', + 'theme.admin.time.hour_ago' => 'há %d hora', + 'theme.admin.view_all' => 'Ver tudo', + + 'theme.admin.menu.profile' => 'Meu perfil', + 'theme.admin.menu.two_factor' => 'Autenticação em duas etapas', + 'theme.admin.menu.lock_screen' => 'Bloquear a tela', + 'theme.admin.menu.sign_out' => 'Sair', + + 'theme.aside.label' => 'Painel do assistente', + 'theme.aside.activity' => 'Atividade', + 'theme.aside.placeholder' => 'Este painel opcional aparece quando uma view define %s. Coloque aqui widgets contextuais: atividade recente, ajuda embutida, filtros.', + + 'theme.agent.label' => 'Agente de IA', + 'theme.agent.title' => 'Agente', + 'theme.agent.model' => 'Modelo', + 'theme.agent.new_chat' => 'Nova conversa', + 'theme.agent.drop_files' => 'Solte os arquivos para anexar', + 'theme.agent.empty' => 'Comece uma conversa — o agente age com as suas permissões.', + 'theme.agent.input_placeholder' => 'Peça ao agente para criar, alterar ou explicar alguma coisa…', + 'theme.agent.attach' => 'Anexar um arquivo', + 'theme.agent.mode_title' => 'Nível de automação', + 'theme.agent.send' => 'Enviar', + 'theme.agent.open' => 'Abrir o agente de IA', + + 'theme.switcher.language' => 'Idioma', + 'theme.switcher.theme' => 'Tema', + 'theme.switcher.browser' => 'Navegador', + 'theme.switcher.light' => 'Claro', + 'theme.switcher.dark' => 'Escuro', + 'theme.switcher.skin' => 'Skin', + 'theme.switcher.skin_title' => 'Skin (prévia ao vivo)', + 'theme.switcher.skin_header' => 'Skin — prévia ao vivo', + 'theme.switcher.custom' => 'Personalizado', + + 'theme.consent.label' => 'Consentimento de cookies', + 'theme.consent.learn_more' => 'Saiba mais', + 'theme.consent.gpc' => 'Global Privacy Control detectado — você está fora da análise de dados e do compartilhamento.', + + 'theme.auth.title_default' => 'Entrar — Tiger', + + // Os nomes dos controles do cPanel / Plesk ficam EM INGLÊS de propósito: é assim que o usuário + // os encontra na tela do cPanel ou do Plesk. + 'theme.cron.title' => 'Como configurar o Cron', + 'theme.cron.status.real.title' => 'Há um cron real em execução.', + 'theme.cron.status.real.body' => 'O Tiger recebeu sinal do cron do seu servidor nos últimos minutos — os agendamentos rodam na hora certa.', + 'theme.cron.status.pseudo.title' => 'O pseudo-cron no estilo do WordPress está ativo.', + 'theme.cron.status.pseudo.body' => 'Nenhum cron real foi detectado, então as tarefas agendadas dependem do tráfego do site — serve para começar, mas um site parado pode rodar as tarefas atrasadas. Adicione um cron real abaixo para um agendamento confiável e pontual.', + 'theme.cron.status.none.title' => 'Nenhum cron está em execução.', + 'theme.cron.status.none.body' => 'Tanto o cron real quanto a alternativa movida a tráfego estão desligados — as tarefas agendadas não vão rodar até você configurar um abaixo.', + 'theme.cron.command_label' => 'Seu comando de cron', + 'theme.cron.every_minute_note' => 'Rode-o a cada minuto (* * * * *) — o Tiger decide internamente quais tarefas estão vencidas, então um cron por minuto é barato e mantém tudo em dia.', + 'theme.cron.tab.cli' => 'Linha de comando', + 'theme.cron.tab.claude' => 'Deixe o Claude Code fazer', + 'theme.cron.cpanel.step1' => 'No cPanel, abra Advanced → Cron Jobs.', + 'theme.cron.cpanel.step2' => 'Em Add New Cron Job, defina Common Settings como Once Per Minute (* * * * *).', + 'theme.cron.cpanel.step3' => 'Cole o comando acima em Command.', + 'theme.cron.cpanel.step4' => 'Clique em Add New Cron Job. Pronto — este cartão fica verde em um ou dois minutos.', + 'theme.cron.cpanel.php_path' => 'Se o php não for encontrado, use o caminho completo do PHP da sua hospedagem (por exemplo /usr/local/bin/ea-php82) no lugar de php.', + 'theme.cron.plesk.step1' => 'No Plesk, abra Websites & Domains → Scheduled Tasks para o seu domínio.', + 'theme.cron.plesk.step2' => 'Clique em Add Task e escolha Run a command.', + 'theme.cron.plesk.step3' => 'Defina Run como Cron style e informe * * * * *.', + 'theme.cron.plesk.step4' => 'Cole o comando acima e então clique em OK / Run Now para testar.', + 'theme.cron.cli.intro' => 'Conecte-se ao servidor por SSH e edite o crontab:', + 'theme.cron.cli.add' => 'Adicione esta linha e salve:', + 'theme.cron.claude.intro' => 'Deixe o Claude Code (ou qualquer acesso shell a este servidor) fazer isso por você — é só pedir:', + 'theme.cron.claude.prompt' => 'Adicione um cron por minuto que execute:', + 'theme.cron.claude.note' => 'O Claude Code vai adicionar a entrada no crontab e confirmar. Até lá, o pseudo-cron movido a tráfego mantém as coisas andando.', + + 'theme.schedule.frequency' => 'Frequência', + 'theme.schedule.time' => 'Horário', + 'theme.schedule.day_of_week' => 'Dia da semana', + 'theme.schedule.day_of_month' => 'Dia do mês', + 'theme.schedule.enabled' => 'Ativado', + 'theme.schedule.freq.every_minute' => 'A cada minuto', + 'theme.schedule.freq.every_5_min' => 'A cada 5 minutos', + 'theme.schedule.freq.every_15_min' => 'A cada 15 minutos', + 'theme.schedule.freq.hourly' => 'A cada hora', + 'theme.schedule.freq.daily' => 'Todo dia', + 'theme.schedule.freq.weekly' => 'Toda semana', + 'theme.schedule.freq.monthly' => 'Todo mês', + 'theme.schedule.day.sunday' => 'Domingo', + 'theme.schedule.day.monday' => 'Segunda-feira', + 'theme.schedule.day.tuesday' => 'Terça-feira', + 'theme.schedule.day.wednesday' => 'Quarta-feira', + 'theme.schedule.day.thursday' => 'Quinta-feira', + 'theme.schedule.day.friday' => 'Sexta-feira', + 'theme.schedule.day.saturday' => 'Sábado', ]; diff --git a/themes/puma/layouts/scripts/admin.phtml b/themes/puma/layouts/scripts/admin.phtml index b48b5d81..5d283290 100644 --- a/themes/puma/layouts/scripts/admin.phtml +++ b/themes/puma/layouts/scripts/admin.phtml @@ -56,7 +56,7 @@ $_dtLang = [ - <?= $this->escape($this->title ?? 'Tiger Admin') ?> + <?= $this->escape($this->title ?? $this->t('theme.admin.title')) ?> @@ -91,7 +91,7 @@ $_dtLang = [ pageHead ?? '' ?>/styles a view registered via $this->pageStyle() */ ?> -Skip to content +escape($this->t('theme.a11y.skip_to_content')) ?>
render('_partials/admin-header.phtml') ?> diff --git a/themes/puma/layouts/scripts/auth.phtml b/themes/puma/layouts/scripts/auth.phtml index dfb507ed..0e56fc99 100644 --- a/themes/puma/layouts/scripts/auth.phtml +++ b/themes/puma/layouts/scripts/auth.phtml @@ -18,7 +18,7 @@ $_lang = defined('LANG') ? LANG : 'en'; - <?= $this->escape($this->title ?? 'Sign in — Tiger') ?> + <?= $this->escape($this->title ?? $this->t('theme.auth.title_default')) ?> @@ -37,7 +37,7 @@ $_lang = defined('LANG') ? LANG : 'en'; pageHead ?? '' ?>/styles a view registered via $this->pageStyle() */ ?> - Skip to content + escape($this->t('theme.a11y.skip_to_content')) ?>
layout()->content ?> diff --git a/themes/puma/layouts/scripts/layout.phtml b/themes/puma/layouts/scripts/layout.phtml index 525c0939..5463b0c4 100644 --- a/themes/puma/layouts/scripts/layout.phtml +++ b/themes/puma/layouts/scripts/layout.phtml @@ -55,7 +55,7 @@ $_lang = defined('LANG') ? LANG : 'en'; pageHead ?? '' ?> -Skip to content +escape($this->t('theme.a11y.skip_to_content')) ?> render('_partials/public-header.phtml') ?>
diff --git a/themes/puma/views/scripts/_partials/admin-header.phtml b/themes/puma/views/scripts/_partials/admin-header.phtml index 95a75f2f..33e8f160 100644 --- a/themes/puma/views/scripts/_partials/admin-header.phtml +++ b/themes/puma/views/scripts/_partials/admin-header.phtml @@ -11,7 +11,7 @@ */ $auth = Zend_Auth::getInstance(); $identity = $auth->hasIdentity() ? $auth->getIdentity() : null; -$userName = $identity->email ?? 'Guest'; +$userName = $identity->email ?? $this->t('theme.admin.guest'); $userRole = $identity->role ?? 'guest'; $orgName = $identity->org_name ?? ''; @@ -44,7 +44,7 @@ $allowed = function ($resource) use ($acl, $userRole) { ?>
- @@ -55,7 +55,7 @@ $allowed = function ($resource) use ($acl, $userRole) { @@ -71,16 +71,16 @@ $allowed = function ($resource) use ($acl, $userRole) { @@ -100,20 +100,20 @@ $allowed = function ($resource) use ($acl, $userRole) { - escape($userName) ?> + escape($userName) ?> escape($orgName ?: ucfirst($userRole)) ?>
@@ -135,6 +135,6 @@ window.addEventListener('tiger:display-name-changed', function (e) { var el = document.getElementById('header-user-name'); if (!el) { return; } var name = e.detail && e.detail.name; - el.textContent = name || el.getAttribute('data-email') || 'User'; + el.textContent = name || el.getAttribute('data-email') || el.getAttribute('data-fallback') || ''; }); diff --git a/themes/puma/views/scripts/_partials/admin-menu.phtml b/themes/puma/views/scripts/_partials/admin-menu.phtml index a2c54eb1..ff7c5ab9 100644 --- a/themes/puma/views/scripts/_partials/admin-menu.phtml +++ b/themes/puma/views/scripts/_partials/admin-menu.phtml @@ -154,7 +154,7 @@ $render = function ($items, $depth = 0, $group = 'root') use (&$render, $allowed return $html; }; ?> -