From 7e980f10fd03d90e0ecea119b419f474d3bff6a7 Mon Sep 17 00:00:00 2001 From: Kenneth Hendricks <50819541+kenhendricks00@users.noreply.github.com> Date: Sun, 25 Jan 2026 14:55:11 -0500 Subject: [PATCH] Add files via upload --- src/_locales/de/messages.json | 270 ++++++++++++++++++++++++++++++++++ src/_locales/en/messages.json | 270 ++++++++++++++++++++++++++++++++++ src/_locales/es/messages.json | 270 ++++++++++++++++++++++++++++++++++ src/_locales/fr/messages.json | 270 ++++++++++++++++++++++++++++++++++ src/_locales/ja/messages.json | 270 ++++++++++++++++++++++++++++++++++ src/_locales/pt/messages.json | 270 ++++++++++++++++++++++++++++++++++ src/_locales/ru/messages.json | 270 ++++++++++++++++++++++++++++++++++ src/js/i18n.js | 178 ++++++++++++++++++++++ src/pub/index.html | 19 +-- src/pub/index.js | 22 ++- src/pub/settings-page.html | 98 +++++++----- src/pub/settings-page.js | 22 +++ src/pub/warning-page.html | 21 +-- 13 files changed, 2188 insertions(+), 62 deletions(-) create mode 100644 src/_locales/de/messages.json create mode 100644 src/_locales/en/messages.json create mode 100644 src/_locales/es/messages.json create mode 100644 src/_locales/fr/messages.json create mode 100644 src/_locales/ja/messages.json create mode 100644 src/_locales/pt/messages.json create mode 100644 src/_locales/ru/messages.json create mode 100644 src/js/i18n.js diff --git a/src/_locales/de/messages.json b/src/_locales/de/messages.json new file mode 100644 index 0000000..15347d0 --- /dev/null +++ b/src/_locales/de/messages.json @@ -0,0 +1,270 @@ +{ + "extensionName": { + "message": "FMHY SafeGuard", + "description": "Name of the extension" + }, + "extensionDescription": { + "message": "Schützen Sie Ihr Surfen mit Echtzeit-Sicherheitsprüfungen von Websites, unterstützt durch die FMHY-Filterliste.", + "description": "Description of the extension" + }, + "checkingSiteStatus": { + "message": "Website-Status wird überprüft...", + "description": "Loading message in popup" + }, + "reason": { + "message": "Grund", + "description": "Label for unsafe site reason" + }, + "fmhyNote": { + "message": "FMHY-Hinweis", + "description": "Label for FMHY notes section" + }, + "thinkMistake": { + "message": "Denken Sie, das ist ein Fehler?", + "description": "Feedback prompt" + }, + "letUsKnow": { + "message": "Lassen Sie es uns wissen", + "description": "Link text for reporting issues" + }, + "poweredBy": { + "message": "Unterstützt von", + "description": "Footer text" + }, + "fmhyFilterlist": { + "message": "FMHY Filterlist", + "description": "Filterlist name" + }, + "statusUnsafe": { + "message": "$DOMAIN$ ist als unsicher markiert. Es wird empfohlen, diese Seite zu meiden.", + "description": "Unsafe site message", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "statusPotentiallyUnsafe": { + "message": "$DOMAIN$ ist potenziell unsicher. Gehen Sie mit Vorsicht vor.", + "description": "Potentially unsafe site message", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "statusFmhy": { + "message": "$DOMAIN$ ist eine FMHY-bezogene Seite. Sie können vertrauen.", + "description": "FMHY site message", + "placeholders": { + "domain": { + "content": "$1", + "example": "fmhy.net" + } + } + }, + "statusSafe": { + "message": "$DOMAIN$ ist sicher zum Surfen.", + "description": "Safe site message", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "statusStarred": { + "message": "$DOMAIN$ ist eine markierte Seite.", + "description": "Starred site message", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "statusUnknown": { + "message": "$DOMAIN$ ist nicht in unserer Datenbank.", + "description": "Unknown site message", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "statusNoData": { + "message": "Website-Status kann nicht überprüft werden. Bitte versuchen Sie es später erneut.", + "description": "No data available message" + }, + "warningPageTitle": { + "message": "FMHY SafeGuard - Warnung", + "description": "Warning page title" + }, + "warningText": { + "message": "Diese Seite wurde als unsicher markiert.", + "description": "Warning page main text" + }, + "warningRecommendation": { + "message": "Es wird empfohlen, diese Seite zu meiden.", + "description": "Warning page recommendation" + }, + "goBack": { + "message": "Zurück (Empfohlen)", + "description": "Go back button text" + }, + "proceedAnyway": { + "message": "Trotzdem fortfahren", + "description": "Proceed button text" + }, + "settingsTitle": { + "message": "FMHY SafeGuard Einstellungen", + "description": "Settings page title" + }, + "filterlistStatistics": { + "message": "Filterlisten-Statistiken", + "description": "Settings section title" + }, + "lastUpdated": { + "message": "Zuletzt aktualisiert:", + "description": "Last updated label" + }, + "unsafeSites": { + "message": "Unsichere Seiten", + "description": "Stat label" + }, + "potentiallyUnsafeSites": { + "message": "Potenziell unsichere Seiten", + "description": "Stat label" + }, + "safeSites": { + "message": "Sichere Seiten", + "description": "Stat label" + }, + "nextUpdateScheduled": { + "message": "Nächste Aktualisierung geplant für:", + "description": "Update schedule label" + }, + "theme": { + "message": "Design", + "description": "Theme setting title" + }, + "themeDescription": { + "message": "Wählen Sie Ihren bevorzugten Darstellungsmodus", + "description": "Theme setting description" + }, + "systemDefault": { + "message": "Systemstandard", + "description": "Theme option" + }, + "darkMode": { + "message": "Dunkler Modus", + "description": "Theme option" + }, + "amoled": { + "message": "AMOLED", + "description": "Theme option" + }, + "lightMode": { + "message": "Heller Modus", + "description": "Theme option" + }, + "warningPage": { + "message": "Warnseite", + "description": "Setting title" + }, + "warningPageDescription": { + "message": "Warnseite für unsichere Seiten anzeigen", + "description": "Setting description" + }, + "linkHighlighting": { + "message": "Link-Hervorhebung", + "description": "Setting title" + }, + "linkHighlightingDescription": { + "message": "Sichere und unsichere Links auf Webseiten visuell hervorheben", + "description": "Setting description" + }, + "highlightSafeLinks": { + "message": "Sichere Links hervorheben (grün)", + "description": "Setting option" + }, + "highlightUnsafeLinks": { + "message": "Unsichere Links hervorheben (rot)", + "description": "Setting option" + }, + "showWarningBanners": { + "message": "Warnbanner neben unsicheren Links anzeigen", + "description": "Setting option" + }, + "safeLinkColor": { + "message": "Farbe für sichere Links", + "description": "Setting option" + }, + "unsafeLinkColor": { + "message": "Farbe für unsichere Links", + "description": "Setting option" + }, + "autoUpdateFilterlist": { + "message": "Filterliste automatisch aktualisieren", + "description": "Setting title" + }, + "autoUpdateDescription": { + "message": "Sicherheitsfilter automatisch aktualisieren", + "description": "Setting description" + }, + "daily": { + "message": "Täglich", + "description": "Update frequency option" + }, + "weekly": { + "message": "Wöchentlich", + "description": "Update frequency option" + }, + "monthly": { + "message": "Monatlich", + "description": "Update frequency option" + }, + "domainManagement": { + "message": "Domain-Verwaltung", + "description": "Setting title" + }, + "domainManagementDescription": { + "message": "Domains manuell zu sicheren oder unsicheren Listen hinzufügen", + "description": "Setting description" + }, + "safeDomains": { + "message": "Sichere Domains (eine pro Zeile)", + "description": "Textarea label" + }, + "unsafeDomains": { + "message": "Unsichere Domains (eine pro Zeile)", + "description": "Textarea label" + }, + "saveSettings": { + "message": "Einstellungen speichern", + "description": "Save button text" + }, + "settingsSaved": { + "message": "Einstellungen erfolgreich gespeichert!", + "description": "Success notification" + }, + "openSettings": { + "message": "Einstellungen öffnen", + "description": "Settings button tooltip" + }, + "language": { + "message": "Sprache", + "description": "Language setting title" + }, + "languageDescription": { + "message": "Wählen Sie Ihre bevorzugte Sprache", + "description": "Language setting description" + }, + "autoDetect": { + "message": "Automatisch erkennen", + "description": "Auto-detect language option" + } +} diff --git a/src/_locales/en/messages.json b/src/_locales/en/messages.json new file mode 100644 index 0000000..7069cff --- /dev/null +++ b/src/_locales/en/messages.json @@ -0,0 +1,270 @@ +{ + "extensionName": { + "message": "FMHY SafeGuard", + "description": "Name of the extension" + }, + "extensionDescription": { + "message": "Protect your browsing with real-time website safety checks powered by the FMHY Filterlist.", + "description": "Description of the extension" + }, + "checkingSiteStatus": { + "message": "Checking site status...", + "description": "Loading message in popup" + }, + "reason": { + "message": "Reason", + "description": "Label for unsafe site reason" + }, + "fmhyNote": { + "message": "FMHY Note", + "description": "Label for FMHY notes section" + }, + "thinkMistake": { + "message": "Think this is a mistake?", + "description": "Feedback prompt" + }, + "letUsKnow": { + "message": "Let us know", + "description": "Link text for reporting issues" + }, + "poweredBy": { + "message": "Powered by", + "description": "Footer text" + }, + "fmhyFilterlist": { + "message": "FMHY Filterlist", + "description": "Filterlist name" + }, + "statusUnsafe": { + "message": "$DOMAIN$ is flagged as unsafe. It's recommended to avoid this site.", + "description": "Unsafe site message", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "statusPotentiallyUnsafe": { + "message": "$DOMAIN$ is potentially unsafe. Proceed with caution.", + "description": "Potentially unsafe site message", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "statusFmhy": { + "message": "$DOMAIN$ is an FMHY related site. Proceed confidently.", + "description": "FMHY site message", + "placeholders": { + "domain": { + "content": "$1", + "example": "fmhy.net" + } + } + }, + "statusSafe": { + "message": "$DOMAIN$ is safe to browse.", + "description": "Safe site message", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "statusStarred": { + "message": "$DOMAIN$ is a starred site.", + "description": "Starred site message", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "statusUnknown": { + "message": "$DOMAIN$ is not in our database.", + "description": "Unknown site message", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "statusNoData": { + "message": "Unable to check site status. Please try again later.", + "description": "No data available message" + }, + "warningPageTitle": { + "message": "FMHY SafeGuard - Warning", + "description": "Warning page title" + }, + "warningText": { + "message": "This site has been flagged as unsafe.", + "description": "Warning page main text" + }, + "warningRecommendation": { + "message": "It's recommended to avoid this site.", + "description": "Warning page recommendation" + }, + "goBack": { + "message": "Go Back (Recommended)", + "description": "Go back button text" + }, + "proceedAnyway": { + "message": "Proceed Anyway", + "description": "Proceed button text" + }, + "settingsTitle": { + "message": "FMHY SafeGuard Settings", + "description": "Settings page title" + }, + "filterlistStatistics": { + "message": "Filterlist Statistics", + "description": "Settings section title" + }, + "lastUpdated": { + "message": "Last Updated:", + "description": "Last updated label" + }, + "unsafeSites": { + "message": "Unsafe Sites", + "description": "Stat label" + }, + "potentiallyUnsafeSites": { + "message": "Potentially Unsafe Sites", + "description": "Stat label" + }, + "safeSites": { + "message": "Safe Sites", + "description": "Stat label" + }, + "nextUpdateScheduled": { + "message": "Next update scheduled for:", + "description": "Update schedule label" + }, + "theme": { + "message": "Theme", + "description": "Theme setting title" + }, + "themeDescription": { + "message": "Choose your preferred appearance mode", + "description": "Theme setting description" + }, + "systemDefault": { + "message": "System Default", + "description": "Theme option" + }, + "darkMode": { + "message": "Dark Mode", + "description": "Theme option" + }, + "amoled": { + "message": "AMOLED", + "description": "Theme option" + }, + "lightMode": { + "message": "Light Mode", + "description": "Theme option" + }, + "warningPage": { + "message": "Warning Page", + "description": "Setting title" + }, + "warningPageDescription": { + "message": "Show warning page for unsafe sites", + "description": "Setting description" + }, + "linkHighlighting": { + "message": "Link Highlighting", + "description": "Setting title" + }, + "linkHighlightingDescription": { + "message": "Visually highlight safe and unsafe links in web pages", + "description": "Setting description" + }, + "highlightSafeLinks": { + "message": "Highlight safe links (green)", + "description": "Setting option" + }, + "highlightUnsafeLinks": { + "message": "Highlight unsafe links (red)", + "description": "Setting option" + }, + "showWarningBanners": { + "message": "Show warning banners next to unsafe links", + "description": "Setting option" + }, + "safeLinkColor": { + "message": "Safe link color", + "description": "Setting option" + }, + "unsafeLinkColor": { + "message": "Unsafe link color", + "description": "Setting option" + }, + "autoUpdateFilterlist": { + "message": "Auto-Update Filterlist", + "description": "Setting title" + }, + "autoUpdateDescription": { + "message": "Automatically update security filters", + "description": "Setting description" + }, + "daily": { + "message": "Daily", + "description": "Update frequency option" + }, + "weekly": { + "message": "Weekly", + "description": "Update frequency option" + }, + "monthly": { + "message": "Monthly", + "description": "Update frequency option" + }, + "domainManagement": { + "message": "Domain Management", + "description": "Setting title" + }, + "domainManagementDescription": { + "message": "Manually add domains to safe or unsafe lists", + "description": "Setting description" + }, + "safeDomains": { + "message": "Safe Domains (one per line)", + "description": "Textarea label" + }, + "unsafeDomains": { + "message": "Unsafe Domains (one per line)", + "description": "Textarea label" + }, + "saveSettings": { + "message": "Save Settings", + "description": "Save button text" + }, + "settingsSaved": { + "message": "Settings saved successfully!", + "description": "Success notification" + }, + "openSettings": { + "message": "Open Settings", + "description": "Settings button tooltip" + }, + "language": { + "message": "Language", + "description": "Language setting title" + }, + "languageDescription": { + "message": "Choose your preferred language", + "description": "Language setting description" + }, + "autoDetect": { + "message": "Auto-detect", + "description": "Auto-detect language option" + } +} diff --git a/src/_locales/es/messages.json b/src/_locales/es/messages.json new file mode 100644 index 0000000..4c76c9d --- /dev/null +++ b/src/_locales/es/messages.json @@ -0,0 +1,270 @@ +{ + "extensionName": { + "message": "FMHY SafeGuard", + "description": "Name of the extension" + }, + "extensionDescription": { + "message": "Protege tu navegación con verificaciones de seguridad de sitios web en tiempo real impulsadas por la lista de filtros de FMHY.", + "description": "Description of the extension" + }, + "checkingSiteStatus": { + "message": "Verificando estado del sitio...", + "description": "Loading message in popup" + }, + "reason": { + "message": "Razón", + "description": "Label for unsafe site reason" + }, + "fmhyNote": { + "message": "Nota de FMHY", + "description": "Label for FMHY notes section" + }, + "thinkMistake": { + "message": "¿Crees que es un error?", + "description": "Feedback prompt" + }, + "letUsKnow": { + "message": "Avísanos", + "description": "Link text for reporting issues" + }, + "poweredBy": { + "message": "Desarrollado por", + "description": "Footer text" + }, + "fmhyFilterlist": { + "message": "FMHY Filterlist", + "description": "Filterlist name" + }, + "statusUnsafe": { + "message": "$DOMAIN$ está marcado como inseguro. Se recomienda evitar este sitio.", + "description": "Unsafe site message", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "statusPotentiallyUnsafe": { + "message": "$DOMAIN$ es potencialmente inseguro. Procede con precaución.", + "description": "Potentially unsafe site message", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "statusFmhy": { + "message": "$DOMAIN$ es un sitio relacionado con FMHY. Procede con confianza.", + "description": "FMHY site message", + "placeholders": { + "domain": { + "content": "$1", + "example": "fmhy.net" + } + } + }, + "statusSafe": { + "message": "$DOMAIN$ es seguro para navegar.", + "description": "Safe site message", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "statusStarred": { + "message": "$DOMAIN$ es un sitio destacado.", + "description": "Starred site message", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "statusUnknown": { + "message": "$DOMAIN$ no está en nuestra base de datos.", + "description": "Unknown site message", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "statusNoData": { + "message": "No se puede verificar el estado del sitio. Por favor, inténtalo de nuevo más tarde.", + "description": "No data available message" + }, + "warningPageTitle": { + "message": "FMHY SafeGuard - Advertencia", + "description": "Warning page title" + }, + "warningText": { + "message": "Este sitio ha sido marcado como inseguro.", + "description": "Warning page main text" + }, + "warningRecommendation": { + "message": "Se recomienda evitar este sitio.", + "description": "Warning page recommendation" + }, + "goBack": { + "message": "Volver (Recomendado)", + "description": "Go back button text" + }, + "proceedAnyway": { + "message": "Continuar de todos modos", + "description": "Proceed button text" + }, + "settingsTitle": { + "message": "Configuración de FMHY SafeGuard", + "description": "Settings page title" + }, + "filterlistStatistics": { + "message": "Estadísticas de la lista de filtros", + "description": "Settings section title" + }, + "lastUpdated": { + "message": "Última actualización:", + "description": "Last updated label" + }, + "unsafeSites": { + "message": "Sitios inseguros", + "description": "Stat label" + }, + "potentiallyUnsafeSites": { + "message": "Sitios potencialmente inseguros", + "description": "Stat label" + }, + "safeSites": { + "message": "Sitios seguros", + "description": "Stat label" + }, + "nextUpdateScheduled": { + "message": "Próxima actualización programada para:", + "description": "Update schedule label" + }, + "theme": { + "message": "Tema", + "description": "Theme setting title" + }, + "themeDescription": { + "message": "Elige tu modo de apariencia preferido", + "description": "Theme setting description" + }, + "systemDefault": { + "message": "Predeterminado del sistema", + "description": "Theme option" + }, + "darkMode": { + "message": "Modo oscuro", + "description": "Theme option" + }, + "amoled": { + "message": "AMOLED", + "description": "Theme option" + }, + "lightMode": { + "message": "Modo claro", + "description": "Theme option" + }, + "warningPage": { + "message": "Página de advertencia", + "description": "Setting title" + }, + "warningPageDescription": { + "message": "Mostrar página de advertencia para sitios inseguros", + "description": "Setting description" + }, + "linkHighlighting": { + "message": "Resaltado de enlaces", + "description": "Setting title" + }, + "linkHighlightingDescription": { + "message": "Resaltar visualmente enlaces seguros e inseguros en páginas web", + "description": "Setting description" + }, + "highlightSafeLinks": { + "message": "Resaltar enlaces seguros (verde)", + "description": "Setting option" + }, + "highlightUnsafeLinks": { + "message": "Resaltar enlaces inseguros (rojo)", + "description": "Setting option" + }, + "showWarningBanners": { + "message": "Mostrar banners de advertencia junto a enlaces inseguros", + "description": "Setting option" + }, + "safeLinkColor": { + "message": "Color de enlace seguro", + "description": "Setting option" + }, + "unsafeLinkColor": { + "message": "Color de enlace inseguro", + "description": "Setting option" + }, + "autoUpdateFilterlist": { + "message": "Actualización automática de la lista de filtros", + "description": "Setting title" + }, + "autoUpdateDescription": { + "message": "Actualizar automáticamente los filtros de seguridad", + "description": "Setting description" + }, + "daily": { + "message": "Diariamente", + "description": "Update frequency option" + }, + "weekly": { + "message": "Semanalmente", + "description": "Update frequency option" + }, + "monthly": { + "message": "Mensualmente", + "description": "Update frequency option" + }, + "domainManagement": { + "message": "Gestión de dominios", + "description": "Setting title" + }, + "domainManagementDescription": { + "message": "Agregar dominios manualmente a las listas de seguros o inseguros", + "description": "Setting description" + }, + "safeDomains": { + "message": "Dominios seguros (uno por línea)", + "description": "Textarea label" + }, + "unsafeDomains": { + "message": "Dominios inseguros (uno por línea)", + "description": "Textarea label" + }, + "saveSettings": { + "message": "Guardar configuración", + "description": "Save button text" + }, + "settingsSaved": { + "message": "¡Configuración guardada correctamente!", + "description": "Success notification" + }, + "openSettings": { + "message": "Abrir configuración", + "description": "Settings button tooltip" + }, + "language": { + "message": "Idioma", + "description": "Language setting title" + }, + "languageDescription": { + "message": "Elige tu idioma preferido", + "description": "Language setting description" + }, + "autoDetect": { + "message": "Detectar automáticamente", + "description": "Auto-detect language option" + } +} diff --git a/src/_locales/fr/messages.json b/src/_locales/fr/messages.json new file mode 100644 index 0000000..77d63ac --- /dev/null +++ b/src/_locales/fr/messages.json @@ -0,0 +1,270 @@ +{ + "extensionName": { + "message": "FMHY SafeGuard", + "description": "Name of the extension" + }, + "extensionDescription": { + "message": "Protégez votre navigation avec des vérifications de sécurité des sites web en temps réel, alimentées par la liste de filtres FMHY.", + "description": "Description of the extension" + }, + "checkingSiteStatus": { + "message": "Vérification du statut du site...", + "description": "Loading message in popup" + }, + "reason": { + "message": "Raison", + "description": "Label for unsafe site reason" + }, + "fmhyNote": { + "message": "Note FMHY", + "description": "Label for FMHY notes section" + }, + "thinkMistake": { + "message": "Vous pensez que c'est une erreur ?", + "description": "Feedback prompt" + }, + "letUsKnow": { + "message": "Faites-le nous savoir", + "description": "Link text for reporting issues" + }, + "poweredBy": { + "message": "Propulsé par", + "description": "Footer text" + }, + "fmhyFilterlist": { + "message": "FMHY Filterlist", + "description": "Filterlist name" + }, + "statusUnsafe": { + "message": "$DOMAIN$ est signalé comme dangereux. Il est recommandé d'éviter ce site.", + "description": "Unsafe site message", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "statusPotentiallyUnsafe": { + "message": "$DOMAIN$ est potentiellement dangereux. Procédez avec prudence.", + "description": "Potentially unsafe site message", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "statusFmhy": { + "message": "$DOMAIN$ est un site lié à FMHY. Vous pouvez faire confiance.", + "description": "FMHY site message", + "placeholders": { + "domain": { + "content": "$1", + "example": "fmhy.net" + } + } + }, + "statusSafe": { + "message": "$DOMAIN$ est sûr pour naviguer.", + "description": "Safe site message", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "statusStarred": { + "message": "$DOMAIN$ est un site favori.", + "description": "Starred site message", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "statusUnknown": { + "message": "$DOMAIN$ n'est pas dans notre base de données.", + "description": "Unknown site message", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "statusNoData": { + "message": "Impossible de vérifier le statut du site. Veuillez réessayer plus tard.", + "description": "No data available message" + }, + "warningPageTitle": { + "message": "FMHY SafeGuard - Avertissement", + "description": "Warning page title" + }, + "warningText": { + "message": "Ce site a été signalé comme dangereux.", + "description": "Warning page main text" + }, + "warningRecommendation": { + "message": "Il est recommandé d'éviter ce site.", + "description": "Warning page recommendation" + }, + "goBack": { + "message": "Retour (Recommandé)", + "description": "Go back button text" + }, + "proceedAnyway": { + "message": "Continuer quand même", + "description": "Proceed button text" + }, + "settingsTitle": { + "message": "Paramètres FMHY SafeGuard", + "description": "Settings page title" + }, + "filterlistStatistics": { + "message": "Statistiques de la liste de filtres", + "description": "Settings section title" + }, + "lastUpdated": { + "message": "Dernière mise à jour :", + "description": "Last updated label" + }, + "unsafeSites": { + "message": "Sites dangereux", + "description": "Stat label" + }, + "potentiallyUnsafeSites": { + "message": "Sites potentiellement dangereux", + "description": "Stat label" + }, + "safeSites": { + "message": "Sites sûrs", + "description": "Stat label" + }, + "nextUpdateScheduled": { + "message": "Prochaine mise à jour prévue pour :", + "description": "Update schedule label" + }, + "theme": { + "message": "Thème", + "description": "Theme setting title" + }, + "themeDescription": { + "message": "Choisissez votre mode d'apparence préféré", + "description": "Theme setting description" + }, + "systemDefault": { + "message": "Par défaut du système", + "description": "Theme option" + }, + "darkMode": { + "message": "Mode sombre", + "description": "Theme option" + }, + "amoled": { + "message": "AMOLED", + "description": "Theme option" + }, + "lightMode": { + "message": "Mode clair", + "description": "Theme option" + }, + "warningPage": { + "message": "Page d'avertissement", + "description": "Setting title" + }, + "warningPageDescription": { + "message": "Afficher la page d'avertissement pour les sites dangereux", + "description": "Setting description" + }, + "linkHighlighting": { + "message": "Mise en évidence des liens", + "description": "Setting title" + }, + "linkHighlightingDescription": { + "message": "Mettre en évidence visuellement les liens sûrs et dangereux sur les pages web", + "description": "Setting description" + }, + "highlightSafeLinks": { + "message": "Mettre en évidence les liens sûrs (vert)", + "description": "Setting option" + }, + "highlightUnsafeLinks": { + "message": "Mettre en évidence les liens dangereux (rouge)", + "description": "Setting option" + }, + "showWarningBanners": { + "message": "Afficher des bannières d'avertissement à côté des liens dangereux", + "description": "Setting option" + }, + "safeLinkColor": { + "message": "Couleur des liens sûrs", + "description": "Setting option" + }, + "unsafeLinkColor": { + "message": "Couleur des liens dangereux", + "description": "Setting option" + }, + "autoUpdateFilterlist": { + "message": "Mise à jour automatique de la liste de filtres", + "description": "Setting title" + }, + "autoUpdateDescription": { + "message": "Mettre à jour automatiquement les filtres de sécurité", + "description": "Setting description" + }, + "daily": { + "message": "Quotidien", + "description": "Update frequency option" + }, + "weekly": { + "message": "Hebdomadaire", + "description": "Update frequency option" + }, + "monthly": { + "message": "Mensuel", + "description": "Update frequency option" + }, + "domainManagement": { + "message": "Gestion des domaines", + "description": "Setting title" + }, + "domainManagementDescription": { + "message": "Ajouter manuellement des domaines aux listes sûres ou dangereuses", + "description": "Setting description" + }, + "safeDomains": { + "message": "Domaines sûrs (un par ligne)", + "description": "Textarea label" + }, + "unsafeDomains": { + "message": "Domaines dangereux (un par ligne)", + "description": "Textarea label" + }, + "saveSettings": { + "message": "Enregistrer les paramètres", + "description": "Save button text" + }, + "settingsSaved": { + "message": "Paramètres enregistrés avec succès !", + "description": "Success notification" + }, + "openSettings": { + "message": "Ouvrir les paramètres", + "description": "Settings button tooltip" + }, + "language": { + "message": "Langue", + "description": "Language setting title" + }, + "languageDescription": { + "message": "Choisissez votre langue préférée", + "description": "Language setting description" + }, + "autoDetect": { + "message": "Détection automatique", + "description": "Auto-detect language option" + } +} diff --git a/src/_locales/ja/messages.json b/src/_locales/ja/messages.json new file mode 100644 index 0000000..89b8a08 --- /dev/null +++ b/src/_locales/ja/messages.json @@ -0,0 +1,270 @@ +{ + "extensionName": { + "message": "FMHY SafeGuard", + "description": "Name of the extension" + }, + "extensionDescription": { + "message": "FMHYフィルターリストを使用したリアルタイムのウェブサイト安全性チェックでブラウジングを保護します。", + "description": "Description of the extension" + }, + "checkingSiteStatus": { + "message": "サイトの状態を確認中...", + "description": "Loading message in popup" + }, + "reason": { + "message": "理由", + "description": "Label for unsafe site reason" + }, + "fmhyNote": { + "message": "FMHYノート", + "description": "Label for FMHY notes section" + }, + "thinkMistake": { + "message": "間違いだと思いますか?", + "description": "Feedback prompt" + }, + "letUsKnow": { + "message": "お知らせください", + "description": "Link text for reporting issues" + }, + "poweredBy": { + "message": "提供:", + "description": "Footer text" + }, + "fmhyFilterlist": { + "message": "FMHY Filterlist", + "description": "Filterlist name" + }, + "statusUnsafe": { + "message": "$DOMAIN$ は危険としてフラグが立てられています。このサイトを避けることをお勧めします。", + "description": "Unsafe site message", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "statusPotentiallyUnsafe": { + "message": "$DOMAIN$ は潜在的に危険です。注意して進んでください。", + "description": "Potentially unsafe site message", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "statusFmhy": { + "message": "$DOMAIN$ はFMHY関連のサイトです。安心して進んでください。", + "description": "FMHY site message", + "placeholders": { + "domain": { + "content": "$1", + "example": "fmhy.net" + } + } + }, + "statusSafe": { + "message": "$DOMAIN$ は安全に閲覧できます。", + "description": "Safe site message", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "statusStarred": { + "message": "$DOMAIN$ はお気に入りのサイトです。", + "description": "Starred site message", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "statusUnknown": { + "message": "$DOMAIN$ はデータベースにありません。", + "description": "Unknown site message", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "statusNoData": { + "message": "サイトの状態を確認できません。後でもう一度お試しください。", + "description": "No data available message" + }, + "warningPageTitle": { + "message": "FMHY SafeGuard - 警告", + "description": "Warning page title" + }, + "warningText": { + "message": "このサイトは危険としてフラグが立てられています。", + "description": "Warning page main text" + }, + "warningRecommendation": { + "message": "このサイトを避けることをお勧めします。", + "description": "Warning page recommendation" + }, + "goBack": { + "message": "戻る(推奨)", + "description": "Go back button text" + }, + "proceedAnyway": { + "message": "それでも続行", + "description": "Proceed button text" + }, + "settingsTitle": { + "message": "FMHY SafeGuard 設定", + "description": "Settings page title" + }, + "filterlistStatistics": { + "message": "フィルターリスト統計", + "description": "Settings section title" + }, + "lastUpdated": { + "message": "最終更新:", + "description": "Last updated label" + }, + "unsafeSites": { + "message": "危険なサイト", + "description": "Stat label" + }, + "potentiallyUnsafeSites": { + "message": "潜在的に危険なサイト", + "description": "Stat label" + }, + "safeSites": { + "message": "安全なサイト", + "description": "Stat label" + }, + "nextUpdateScheduled": { + "message": "次回更新予定:", + "description": "Update schedule label" + }, + "theme": { + "message": "テーマ", + "description": "Theme setting title" + }, + "themeDescription": { + "message": "お好みの外観モードを選択してください", + "description": "Theme setting description" + }, + "systemDefault": { + "message": "システムデフォルト", + "description": "Theme option" + }, + "darkMode": { + "message": "ダークモード", + "description": "Theme option" + }, + "amoled": { + "message": "AMOLED", + "description": "Theme option" + }, + "lightMode": { + "message": "ライトモード", + "description": "Theme option" + }, + "warningPage": { + "message": "警告ページ", + "description": "Setting title" + }, + "warningPageDescription": { + "message": "危険なサイトに警告ページを表示", + "description": "Setting description" + }, + "linkHighlighting": { + "message": "リンクのハイライト", + "description": "Setting title" + }, + "linkHighlightingDescription": { + "message": "ウェブページ上の安全なリンクと危険なリンクを視覚的にハイライト", + "description": "Setting description" + }, + "highlightSafeLinks": { + "message": "安全なリンクをハイライト(緑)", + "description": "Setting option" + }, + "highlightUnsafeLinks": { + "message": "危険なリンクをハイライト(赤)", + "description": "Setting option" + }, + "showWarningBanners": { + "message": "危険なリンクの横に警告バナーを表示", + "description": "Setting option" + }, + "safeLinkColor": { + "message": "安全なリンクの色", + "description": "Setting option" + }, + "unsafeLinkColor": { + "message": "危険なリンクの色", + "description": "Setting option" + }, + "autoUpdateFilterlist": { + "message": "フィルターリストの自動更新", + "description": "Setting title" + }, + "autoUpdateDescription": { + "message": "セキュリティフィルターを自動的に更新", + "description": "Setting description" + }, + "daily": { + "message": "毎日", + "description": "Update frequency option" + }, + "weekly": { + "message": "毎週", + "description": "Update frequency option" + }, + "monthly": { + "message": "毎月", + "description": "Update frequency option" + }, + "domainManagement": { + "message": "ドメイン管理", + "description": "Setting title" + }, + "domainManagementDescription": { + "message": "安全または危険なリストにドメインを手動で追加", + "description": "Setting description" + }, + "safeDomains": { + "message": "安全なドメイン(1行に1つ)", + "description": "Textarea label" + }, + "unsafeDomains": { + "message": "危険なドメイン(1行に1つ)", + "description": "Textarea label" + }, + "saveSettings": { + "message": "設定を保存", + "description": "Save button text" + }, + "settingsSaved": { + "message": "設定が正常に保存されました!", + "description": "Success notification" + }, + "openSettings": { + "message": "設定を開く", + "description": "Settings button tooltip" + }, + "language": { + "message": "言語", + "description": "Language setting title" + }, + "languageDescription": { + "message": "お好みの言語を選択してください", + "description": "Language setting description" + }, + "autoDetect": { + "message": "自動検出", + "description": "Auto-detect language option" + } +} diff --git a/src/_locales/pt/messages.json b/src/_locales/pt/messages.json new file mode 100644 index 0000000..a5dc667 --- /dev/null +++ b/src/_locales/pt/messages.json @@ -0,0 +1,270 @@ +{ + "extensionName": { + "message": "FMHY SafeGuard", + "description": "Name of the extension" + }, + "extensionDescription": { + "message": "Proteja sua navegação com verificações de segurança de sites em tempo real, alimentadas pela lista de filtros FMHY.", + "description": "Description of the extension" + }, + "checkingSiteStatus": { + "message": "Verificando status do site...", + "description": "Loading message in popup" + }, + "reason": { + "message": "Motivo", + "description": "Label for unsafe site reason" + }, + "fmhyNote": { + "message": "Nota FMHY", + "description": "Label for FMHY notes section" + }, + "thinkMistake": { + "message": "Acha que é um erro?", + "description": "Feedback prompt" + }, + "letUsKnow": { + "message": "Avise-nos", + "description": "Link text for reporting issues" + }, + "poweredBy": { + "message": "Desenvolvido por", + "description": "Footer text" + }, + "fmhyFilterlist": { + "message": "FMHY Filterlist", + "description": "Filterlist name" + }, + "statusUnsafe": { + "message": "$DOMAIN$ está marcado como inseguro. É recomendado evitar este site.", + "description": "Unsafe site message", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "statusPotentiallyUnsafe": { + "message": "$DOMAIN$ é potencialmente inseguro. Prossiga com cautela.", + "description": "Potentially unsafe site message", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "statusFmhy": { + "message": "$DOMAIN$ é um site relacionado ao FMHY. Prossiga com confiança.", + "description": "FMHY site message", + "placeholders": { + "domain": { + "content": "$1", + "example": "fmhy.net" + } + } + }, + "statusSafe": { + "message": "$DOMAIN$ é seguro para navegar.", + "description": "Safe site message", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "statusStarred": { + "message": "$DOMAIN$ é um site destacado.", + "description": "Starred site message", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "statusUnknown": { + "message": "$DOMAIN$ não está em nosso banco de dados.", + "description": "Unknown site message", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "statusNoData": { + "message": "Não foi possível verificar o status do site. Por favor, tente novamente mais tarde.", + "description": "No data available message" + }, + "warningPageTitle": { + "message": "FMHY SafeGuard - Aviso", + "description": "Warning page title" + }, + "warningText": { + "message": "Este site foi marcado como inseguro.", + "description": "Warning page main text" + }, + "warningRecommendation": { + "message": "É recomendado evitar este site.", + "description": "Warning page recommendation" + }, + "goBack": { + "message": "Voltar (Recomendado)", + "description": "Go back button text" + }, + "proceedAnyway": { + "message": "Continuar mesmo assim", + "description": "Proceed button text" + }, + "settingsTitle": { + "message": "Configurações do FMHY SafeGuard", + "description": "Settings page title" + }, + "filterlistStatistics": { + "message": "Estatísticas da lista de filtros", + "description": "Settings section title" + }, + "lastUpdated": { + "message": "Última atualização:", + "description": "Last updated label" + }, + "unsafeSites": { + "message": "Sites inseguros", + "description": "Stat label" + }, + "potentiallyUnsafeSites": { + "message": "Sites potencialmente inseguros", + "description": "Stat label" + }, + "safeSites": { + "message": "Sites seguros", + "description": "Stat label" + }, + "nextUpdateScheduled": { + "message": "Próxima atualização agendada para:", + "description": "Update schedule label" + }, + "theme": { + "message": "Tema", + "description": "Theme setting title" + }, + "themeDescription": { + "message": "Escolha seu modo de aparência preferido", + "description": "Theme setting description" + }, + "systemDefault": { + "message": "Padrão do sistema", + "description": "Theme option" + }, + "darkMode": { + "message": "Modo escuro", + "description": "Theme option" + }, + "amoled": { + "message": "AMOLED", + "description": "Theme option" + }, + "lightMode": { + "message": "Modo claro", + "description": "Theme option" + }, + "warningPage": { + "message": "Página de aviso", + "description": "Setting title" + }, + "warningPageDescription": { + "message": "Mostrar página de aviso para sites inseguros", + "description": "Setting description" + }, + "linkHighlighting": { + "message": "Destaque de links", + "description": "Setting title" + }, + "linkHighlightingDescription": { + "message": "Destacar visualmente links seguros e inseguros em páginas da web", + "description": "Setting description" + }, + "highlightSafeLinks": { + "message": "Destacar links seguros (verde)", + "description": "Setting option" + }, + "highlightUnsafeLinks": { + "message": "Destacar links inseguros (vermelho)", + "description": "Setting option" + }, + "showWarningBanners": { + "message": "Mostrar banners de aviso ao lado de links inseguros", + "description": "Setting option" + }, + "safeLinkColor": { + "message": "Cor do link seguro", + "description": "Setting option" + }, + "unsafeLinkColor": { + "message": "Cor do link inseguro", + "description": "Setting option" + }, + "autoUpdateFilterlist": { + "message": "Atualização automática da lista de filtros", + "description": "Setting title" + }, + "autoUpdateDescription": { + "message": "Atualizar automaticamente os filtros de segurança", + "description": "Setting description" + }, + "daily": { + "message": "Diariamente", + "description": "Update frequency option" + }, + "weekly": { + "message": "Semanalmente", + "description": "Update frequency option" + }, + "monthly": { + "message": "Mensalmente", + "description": "Update frequency option" + }, + "domainManagement": { + "message": "Gerenciamento de domínios", + "description": "Setting title" + }, + "domainManagementDescription": { + "message": "Adicionar domínios manualmente às listas de seguros ou inseguros", + "description": "Setting description" + }, + "safeDomains": { + "message": "Domínios seguros (um por linha)", + "description": "Textarea label" + }, + "unsafeDomains": { + "message": "Domínios inseguros (um por linha)", + "description": "Textarea label" + }, + "saveSettings": { + "message": "Salvar configurações", + "description": "Save button text" + }, + "settingsSaved": { + "message": "Configurações salvas com sucesso!", + "description": "Success notification" + }, + "openSettings": { + "message": "Abrir configurações", + "description": "Settings button tooltip" + }, + "language": { + "message": "Idioma", + "description": "Language setting title" + }, + "languageDescription": { + "message": "Escolha seu idioma preferido", + "description": "Language setting description" + }, + "autoDetect": { + "message": "Detectar automaticamente", + "description": "Auto-detect language option" + } +} diff --git a/src/_locales/ru/messages.json b/src/_locales/ru/messages.json new file mode 100644 index 0000000..6ac604e --- /dev/null +++ b/src/_locales/ru/messages.json @@ -0,0 +1,270 @@ +{ + "extensionName": { + "message": "FMHY SafeGuard", + "description": "Name of the extension" + }, + "extensionDescription": { + "message": "Защитите свой браузер с помощью проверки безопасности сайтов в реальном времени на основе списка фильтров FMHY.", + "description": "Description of the extension" + }, + "checkingSiteStatus": { + "message": "Проверка статуса сайта...", + "description": "Loading message in popup" + }, + "reason": { + "message": "Причина", + "description": "Label for unsafe site reason" + }, + "fmhyNote": { + "message": "Заметка FMHY", + "description": "Label for FMHY notes section" + }, + "thinkMistake": { + "message": "Думаете, это ошибка?", + "description": "Feedback prompt" + }, + "letUsKnow": { + "message": "Сообщите нам", + "description": "Link text for reporting issues" + }, + "poweredBy": { + "message": "Работает на", + "description": "Footer text" + }, + "fmhyFilterlist": { + "message": "FMHY Filterlist", + "description": "Filterlist name" + }, + "statusUnsafe": { + "message": "$DOMAIN$ отмечен как небезопасный. Рекомендуется избегать этот сайт.", + "description": "Unsafe site message", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "statusPotentiallyUnsafe": { + "message": "$DOMAIN$ потенциально небезопасен. Действуйте с осторожностью.", + "description": "Potentially unsafe site message", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "statusFmhy": { + "message": "$DOMAIN$ — сайт, связанный с FMHY. Можете доверять.", + "description": "FMHY site message", + "placeholders": { + "domain": { + "content": "$1", + "example": "fmhy.net" + } + } + }, + "statusSafe": { + "message": "$DOMAIN$ безопасен для просмотра.", + "description": "Safe site message", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "statusStarred": { + "message": "$DOMAIN$ — избранный сайт.", + "description": "Starred site message", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "statusUnknown": { + "message": "$DOMAIN$ отсутствует в нашей базе данных.", + "description": "Unknown site message", + "placeholders": { + "domain": { + "content": "$1", + "example": "example.com" + } + } + }, + "statusNoData": { + "message": "Не удалось проверить статус сайта. Пожалуйста, попробуйте позже.", + "description": "No data available message" + }, + "warningPageTitle": { + "message": "FMHY SafeGuard - Предупреждение", + "description": "Warning page title" + }, + "warningText": { + "message": "Этот сайт отмечен как небезопасный.", + "description": "Warning page main text" + }, + "warningRecommendation": { + "message": "Рекомендуется избегать этот сайт.", + "description": "Warning page recommendation" + }, + "goBack": { + "message": "Вернуться (Рекомендуется)", + "description": "Go back button text" + }, + "proceedAnyway": { + "message": "Продолжить всё равно", + "description": "Proceed button text" + }, + "settingsTitle": { + "message": "Настройки FMHY SafeGuard", + "description": "Settings page title" + }, + "filterlistStatistics": { + "message": "Статистика списка фильтров", + "description": "Settings section title" + }, + "lastUpdated": { + "message": "Последнее обновление:", + "description": "Last updated label" + }, + "unsafeSites": { + "message": "Небезопасные сайты", + "description": "Stat label" + }, + "potentiallyUnsafeSites": { + "message": "Потенциально небезопасные сайты", + "description": "Stat label" + }, + "safeSites": { + "message": "Безопасные сайты", + "description": "Stat label" + }, + "nextUpdateScheduled": { + "message": "Следующее обновление запланировано на:", + "description": "Update schedule label" + }, + "theme": { + "message": "Тема", + "description": "Theme setting title" + }, + "themeDescription": { + "message": "Выберите предпочитаемый режим оформления", + "description": "Theme setting description" + }, + "systemDefault": { + "message": "Системная", + "description": "Theme option" + }, + "darkMode": { + "message": "Тёмная тема", + "description": "Theme option" + }, + "amoled": { + "message": "AMOLED", + "description": "Theme option" + }, + "lightMode": { + "message": "Светлая тема", + "description": "Theme option" + }, + "warningPage": { + "message": "Страница предупреждения", + "description": "Setting title" + }, + "warningPageDescription": { + "message": "Показывать страницу предупреждения для небезопасных сайтов", + "description": "Setting description" + }, + "linkHighlighting": { + "message": "Подсветка ссылок", + "description": "Setting title" + }, + "linkHighlightingDescription": { + "message": "Визуально выделять безопасные и небезопасные ссылки на веб-страницах", + "description": "Setting description" + }, + "highlightSafeLinks": { + "message": "Выделять безопасные ссылки (зелёным)", + "description": "Setting option" + }, + "highlightUnsafeLinks": { + "message": "Выделять небезопасные ссылки (красным)", + "description": "Setting option" + }, + "showWarningBanners": { + "message": "Показывать предупреждающие баннеры рядом с небезопасными ссылками", + "description": "Setting option" + }, + "safeLinkColor": { + "message": "Цвет безопасной ссылки", + "description": "Setting option" + }, + "unsafeLinkColor": { + "message": "Цвет небезопасной ссылки", + "description": "Setting option" + }, + "autoUpdateFilterlist": { + "message": "Автообновление списка фильтров", + "description": "Setting title" + }, + "autoUpdateDescription": { + "message": "Автоматически обновлять фильтры безопасности", + "description": "Setting description" + }, + "daily": { + "message": "Ежедневно", + "description": "Update frequency option" + }, + "weekly": { + "message": "Еженедельно", + "description": "Update frequency option" + }, + "monthly": { + "message": "Ежемесячно", + "description": "Update frequency option" + }, + "domainManagement": { + "message": "Управление доменами", + "description": "Setting title" + }, + "domainManagementDescription": { + "message": "Вручную добавлять домены в списки безопасных или небезопасных", + "description": "Setting description" + }, + "safeDomains": { + "message": "Безопасные домены (по одному на строку)", + "description": "Textarea label" + }, + "unsafeDomains": { + "message": "Небезопасные домены (по одному на строку)", + "description": "Textarea label" + }, + "saveSettings": { + "message": "Сохранить настройки", + "description": "Save button text" + }, + "settingsSaved": { + "message": "Настройки успешно сохранены!", + "description": "Success notification" + }, + "openSettings": { + "message": "Открыть настройки", + "description": "Settings button tooltip" + }, + "language": { + "message": "Язык", + "description": "Language setting title" + }, + "languageDescription": { + "message": "Выберите предпочитаемый язык", + "description": "Language setting description" + }, + "autoDetect": { + "message": "Автоопределение", + "description": "Auto-detect language option" + } +} diff --git a/src/js/i18n.js b/src/js/i18n.js new file mode 100644 index 0000000..584a574 --- /dev/null +++ b/src/js/i18n.js @@ -0,0 +1,178 @@ +// i18n helper for FMHY SafeGuard +// This script handles internationalization for HTML pages + +(function() { + const browserAPI = typeof browser !== "undefined" ? browser : chrome; + + // Cache for loaded translations + let translations = {}; + let currentLanguage = "en"; + + // Supported languages + const SUPPORTED_LANGUAGES = ["en", "es", "ru", "de", "pt", "fr", "ja"]; + + // Get the user's preferred language from storage + async function getPreferredLanguage() { + try { + const { language } = await browserAPI.storage.local.get("language"); + if (language && language !== "auto" && SUPPORTED_LANGUAGES.includes(language)) { + return language; + } + } catch (e) { + console.error("Error getting language preference:", e); + } + // Fall back to browser language or English + const browserLang = browserAPI.i18n.getUILanguage().split("-")[0]; + return SUPPORTED_LANGUAGES.includes(browserLang) ? browserLang : "en"; + } + + // Load translations from JSON file + async function loadTranslations(lang) { + if (translations[lang]) { + return translations[lang]; + } + + try { + const url = browserAPI.runtime.getURL(`_locales/${lang}/messages.json`); + const response = await fetch(url); + if (response.ok) { + translations[lang] = await response.json(); + return translations[lang]; + } + } catch (e) { + console.error(`Error loading translations for ${lang}:`, e); + } + + // Fall back to English if loading fails + if (lang !== "en") { + return loadTranslations("en"); + } + return {}; + } + + // Get a message from loaded translations + function getMessageFromTranslations(key, substitutions) { + const langData = translations[currentLanguage] || translations["en"] || {}; + const entry = langData[key]; + + if (!entry || !entry.message) { + // Fall back to browser API + return browserAPI.i18n.getMessage(key, substitutions) || key; + } + + let message = entry.message; + + // Handle substitutions (e.g., $DOMAIN$) + if (substitutions) { + const subs = Array.isArray(substitutions) ? substitutions : [substitutions]; + subs.forEach((sub, index) => { + // Replace $1, $2, etc. and named placeholders + message = message.replace(new RegExp(`\\$${index + 1}`, "g"), sub); + if (entry.placeholders) { + Object.keys(entry.placeholders).forEach((name) => { + const placeholder = entry.placeholders[name]; + if (placeholder.content === `$${index + 1}`) { + message = message.replace(new RegExp(`\\$${name.toUpperCase()}\\$`, "g"), sub); + } + }); + } + }); + } + + return message; + } + + // Apply translations to elements with data-i18n attribute + function applyTranslations() { + // Translate elements with data-i18n attribute (text content) + document.querySelectorAll("[data-i18n]").forEach((element) => { + const key = element.getAttribute("data-i18n"); + const message = getMessageFromTranslations(key); + if (message && message !== key) { + element.textContent = message; + } + }); + + // Translate elements with data-i18n-html attribute (innerHTML) + document.querySelectorAll("[data-i18n-html]").forEach((element) => { + const key = element.getAttribute("data-i18n-html"); + const message = getMessageFromTranslations(key); + if (message && message !== key) { + element.innerHTML = message; + } + }); + + // Translate placeholders + document.querySelectorAll("[data-i18n-placeholder]").forEach((element) => { + const key = element.getAttribute("data-i18n-placeholder"); + const message = getMessageFromTranslations(key); + if (message && message !== key) { + element.placeholder = message; + } + }); + + // Translate titles (tooltips) + document.querySelectorAll("[data-i18n-title]").forEach((element) => { + const key = element.getAttribute("data-i18n-title"); + const message = getMessageFromTranslations(key); + if (message && message !== key) { + element.title = message; + } + }); + + // Translate page title + const titleElement = document.querySelector("title[data-i18n]"); + if (titleElement) { + const key = titleElement.getAttribute("data-i18n"); + const message = getMessageFromTranslations(key); + if (message && message !== key) { + document.title = message; + } + } + } + + // Promise that resolves when i18n is ready + let readyResolve; + const readyPromise = new Promise(resolve => { readyResolve = resolve; }); + + // Initialize i18n system + async function init() { + currentLanguage = await getPreferredLanguage(); + await loadTranslations(currentLanguage); + // Also load English as fallback + if (currentLanguage !== "en") { + await loadTranslations("en"); + } + applyTranslations(); + readyResolve(); // Signal that i18n is ready + } + + // Run initialization when DOM is ready + if (document.readyState === "loading") { + document.addEventListener("DOMContentLoaded", init); + } else { + init(); + } + + // Expose functions globally for use in other scripts + window.i18n = { + getMessage: getMessageFromTranslations, + applyTranslations: applyTranslations, + setLanguage: async function(lang) { + if (SUPPORTED_LANGUAGES.includes(lang) || lang === "auto") { + if (lang === "auto") { + const browserLang = browserAPI.i18n.getUILanguage().split("-")[0]; + currentLanguage = SUPPORTED_LANGUAGES.includes(browserLang) ? browserLang : "en"; + } else { + currentLanguage = lang; + } + await loadTranslations(currentLanguage); + applyTranslations(); + } + }, + getCurrentLanguage: function() { + return currentLanguage; + }, + ready: readyPromise + }; +})(); diff --git a/src/pub/index.html b/src/pub/index.html index ec925ce..362a439 100644 --- a/src/pub/index.html +++ b/src/pub/index.html @@ -292,9 +292,9 @@
- Checking site status...
+Checking site status...
- Think this is a mistake? - Let us know. + Think this is a mistake? + Let us know.