diff --git a/lib/__tests__/email-sanitization.test.ts b/lib/__tests__/email-sanitization.test.ts
index 7ba25b9d5..c5d80bd06 100644
--- a/lib/__tests__/email-sanitization.test.ts
+++ b/lib/__tests__/email-sanitization.test.ts
@@ -433,11 +433,11 @@ describe('email-sanitization', () => {
describe('sanitizeI18nHtml', () => {
it('preserves an authored target="_blank" and hardens rel (regression: DOMPurify strips target)', () => {
const out = sanitizeI18nHtml(
- 'See the documentation.',
+ 'See the documentation.',
);
expect(out).toContain('target="_blank"');
expect(out).toContain('rel="noopener noreferrer"');
- expect(out).toContain('href="/docs/guides/account-security"');
+ expect(out).toContain('href="https://bulwarkmail.org/docs/guides/account-security"');
});
it('leaves links without a target untouched (no spurious new tab)', () => {
diff --git a/lib/__tests__/translations.test.ts b/lib/__tests__/translations.test.ts
index 5e58f7303..005eee087 100644
--- a/lib/__tests__/translations.test.ts
+++ b/lib/__tests__/translations.test.ts
@@ -188,3 +188,16 @@ describe('mail terms are not mistranslated', () => {
expect(resolveKey(table, 'smime.cert_subject')).not.toBe(resolveKey(table, 'email_composer.subject'));
});
});
+
+describe('links in translations', () => {
+ // The docs live on bulwarkmail.org. A path like /docs/... opens on the
+ // webmail's own host, where there is no such page (#1387).
+ it.each(locales)('%s links only to absolute URLs', (locale) => {
+ const table = loadLocale(locale);
+ const relative = getLeafKeys(table).filter((key) => {
+ const value = resolveKey(table, key);
+ return typeof value === 'string' && /href="(?!https:\/\/)/.test(value);
+ });
+ expect(relative).toEqual([]);
+ });
+});
diff --git a/locales/ar/common.json b/locales/ar/common.json
index 20ffb5739..9d4014174 100644
--- a/locales/ar/common.json
+++ b/locales/ar/common.json
@@ -1833,7 +1833,7 @@
"title": "أمان الحساب",
"description": "إدارة كلمة المرور والمصادقة الثنائية وإعدادات الأمان",
"detecting": "جارٍ اكتشاف قدرات الخادم...",
- "not_available": "إدارة أمان الحساب غير متاحة لخادم البريد هذا. قد تكون الأذونات المطلوبة معطّلة. راجع الوثائق للتفاصيل.",
+ "not_available": "إدارة أمان الحساب غير متاحة لخادم البريد هذا. قد تكون الأذونات المطلوبة معطّلة. راجع الوثائق للتفاصيل.",
"password": {
"title": "تغيير كلمة المرور",
"current": "كلمة المرور الحالية",
diff --git a/locales/ca/common.json b/locales/ca/common.json
index 3351973ef..22fa2483e 100644
--- a/locales/ca/common.json
+++ b/locales/ca/common.json
@@ -1833,7 +1833,7 @@
"title": "Seguretat del compte",
"description": "Gestioneu la contrasenya, l'autenticació de dos factors i la configuració de seguretat",
"detecting": "Detectant les capacitats del servidor...",
- "not_available": "La gestió de la seguretat del compte no està disponible per a aquest servidor de correu. És possible que els permisos necessaris estiguin desactivats. Consulteu la documentació per obtenir més detalls.",
+ "not_available": "La gestió de la seguretat del compte no està disponible per a aquest servidor de correu. És possible que els permisos necessaris estiguin desactivats. Consulteu la documentació per obtenir més detalls.",
"password": {
"title": "Canvia la contrasenya",
"current": "Contrasenya actual",
diff --git a/locales/cs/common.json b/locales/cs/common.json
index 30dd9973e..11c13ada8 100644
--- a/locales/cs/common.json
+++ b/locales/cs/common.json
@@ -1826,7 +1826,7 @@
"title": "Zabezpečení účtu",
"description": "Správa hesla, dvoufázového ověření a nastavení zabezpečení",
"detecting": "Zjišťování možností serveru...",
- "not_available": "Správa zabezpečení účtu není pro tento poštovní server k dispozici. Požadovaná oprávnění mohou být vypnuta. Podrobnosti naleznete v dokumentaci.",
+ "not_available": "Správa zabezpečení účtu není pro tento poštovní server k dispozici. Požadovaná oprávnění mohou být vypnuta. Podrobnosti naleznete v dokumentaci.",
"password": {
"title": "Změnit heslo",
"current": "Aktuální heslo",
diff --git a/locales/da/common.json b/locales/da/common.json
index be6b29715..cfc956144 100644
--- a/locales/da/common.json
+++ b/locales/da/common.json
@@ -1829,7 +1829,7 @@
"title": "Kontosikkerhed",
"description": "Administrér din adgangskode, to-faktor-godkendelse og sikkerhedsindstillinger",
"detecting": "Registrerer serverfunktioner...",
- "not_available": "Kontosikkerhedsstyring er ikke tilgængelig for denne mailserver. Nødvendige tilladelser er muligvis deaktiveret. Se dokumentationen for detaljer.",
+ "not_available": "Kontosikkerhedsstyring er ikke tilgængelig for denne mailserver. Nødvendige tilladelser er muligvis deaktiveret. Se dokumentationen for detaljer.",
"password": {
"title": "Skift adgangskode",
"current": "Nuværende adgangskode",
diff --git a/locales/de/common.json b/locales/de/common.json
index a1bce6f33..9be82dc88 100644
--- a/locales/de/common.json
+++ b/locales/de/common.json
@@ -1826,7 +1826,7 @@
"title": "Kontosicherheit",
"description": "Verwalten Sie Ihr Passwort, Zwei-Faktor-Authentifizierung und Sicherheitseinstellungen",
"detecting": "Serverfunktionen werden erkannt...",
- "not_available": "Kontosicherheitsverwaltung ist für diesen Mailserver nicht verfügbar. Erforderliche Berechtigungen könnten deaktiviert sein. Siehe die Dokumentation für Details.",
+ "not_available": "Kontosicherheitsverwaltung ist für diesen Mailserver nicht verfügbar. Erforderliche Berechtigungen könnten deaktiviert sein. Siehe die Dokumentation für Details.",
"password": {
"title": "Passwort ändern",
"current": "Aktuelles Passwort",
diff --git a/locales/en/common.json b/locales/en/common.json
index 7bb0bd233..ef96a3e74 100644
--- a/locales/en/common.json
+++ b/locales/en/common.json
@@ -1833,7 +1833,7 @@
"title": "Account Security",
"description": "Manage your password, two-factor authentication, and security settings",
"detecting": "Detecting server capabilities...",
- "not_available": "Account security management is not available for this mail server. Required permissions may be disabled. See the documentation for details.",
+ "not_available": "Account security management is not available for this mail server. Required permissions may be disabled. See the documentation for details.",
"password": {
"title": "Change Password",
"current": "Current Password",
diff --git a/locales/es/common.json b/locales/es/common.json
index 24c6ef43f..0786a5e94 100644
--- a/locales/es/common.json
+++ b/locales/es/common.json
@@ -1826,7 +1826,7 @@
"title": "Seguridad de la cuenta",
"description": "Administre su contraseña, autenticación de dos factores y configuración de seguridad",
"detecting": "Detectando capacidades del servidor...",
- "not_available": "La gestión de seguridad de la cuenta no está disponible para este servidor de correo. Es posible que los permisos requeridos estén deshabilitados. Consulte la documentación para obtener más detalles.",
+ "not_available": "La gestión de seguridad de la cuenta no está disponible para este servidor de correo. Es posible que los permisos requeridos estén deshabilitados. Consulte la documentación para obtener más detalles.",
"password": {
"title": "Cambiar contraseña",
"current": "Contraseña actual",
diff --git a/locales/et/common.json b/locales/et/common.json
index 8169d98ce..cd1ff559b 100644
--- a/locales/et/common.json
+++ b/locales/et/common.json
@@ -1833,7 +1833,7 @@
"title": "Konto turvalisus",
"description": "Halda oma parooli, kaheastmelist autentimist ja turvasätteid",
"detecting": "Serveri võimekuste tuvastamine...",
- "not_available": "Konto turvahaldus ei ole selle meiliserveri jaoks saadaval. Vajalikud õigused võivad olla keelatud. Üksikasjade jaoks vaata dokumentatsiooni.",
+ "not_available": "Konto turvahaldus ei ole selle meiliserveri jaoks saadaval. Vajalikud õigused võivad olla keelatud. Üksikasjade jaoks vaata dokumentatsiooni.",
"password": {
"title": "Muuda parooli",
"current": "Praegune parool",
diff --git a/locales/fr/common.json b/locales/fr/common.json
index 6b32667b3..61f8abedf 100644
--- a/locales/fr/common.json
+++ b/locales/fr/common.json
@@ -1826,7 +1826,7 @@
"title": "Sécurité du compte",
"description": "Gérez votre mot de passe, l'authentification à deux facteurs et les paramètres de sécurité",
"detecting": "Détection des capacités du serveur...",
- "not_available": "La gestion de la sécurité du compte n'est pas disponible pour ce serveur de messagerie. Les permissions requises peuvent être désactivées. Consultez la documentation pour plus de détails.",
+ "not_available": "La gestion de la sécurité du compte n'est pas disponible pour ce serveur de messagerie. Les permissions requises peuvent être désactivées. Consultez la documentation pour plus de détails.",
"password": {
"title": "Changer le mot de passe",
"current": "Mot de passe actuel",
diff --git a/locales/he/common.json b/locales/he/common.json
index 11e706f09..983ddedd6 100644
--- a/locales/he/common.json
+++ b/locales/he/common.json
@@ -1791,7 +1791,7 @@
"title": "אבטחת חשבון",
"description": "נהל את הסיסמה שלך, אימות דו-שלבי והגדרות אבטחה",
"detecting": "מזהה יכולות שרת...",
- "not_available": "ניהול אבטחת חשבון אינו זמין עבור שרת דואר זה. הרשאות נדרשות עשויות להיות מושבתות. עיין בתיעודלפרטים.",
+ "not_available": "ניהול אבטחת חשבון אינו זמין עבור שרת דואר זה. הרשאות נדרשות עשויות להיות מושבתות. עיין בתיעודלפרטים.",
"password": {
"title": "שנה סיסמה",
"current": "סיסמה נוכחית",
diff --git a/locales/hu/common.json b/locales/hu/common.json
index fe474d12e..c61632ec8 100644
--- a/locales/hu/common.json
+++ b/locales/hu/common.json
@@ -1829,7 +1829,7 @@
"title": "Fiók biztonság",
"description": "Jelszó, kétfaktoros hitelesítés és biztonsági beállítások kezelése",
"detecting": "Szerver képességek érzékelése...",
- "not_available": "A fiók biztonsági kezelés nem érhető el ehhez a levelezőszerverhez. A szükséges engedélyek lehet, hogy le vannak tiltva. Lásd a dokumentációt a részletekért.",
+ "not_available": "A fiók biztonsági kezelés nem érhető el ehhez a levelezőszerverhez. A szükséges engedélyek lehet, hogy le vannak tiltva. Lásd a dokumentációt a részletekért.",
"password": {
"title": "Jelszó módosítása",
"current": "Jelenlegi jelszó",
diff --git a/locales/it/common.json b/locales/it/common.json
index 0f8fa996c..e942c0d92 100644
--- a/locales/it/common.json
+++ b/locales/it/common.json
@@ -1826,7 +1826,7 @@
"title": "Sicurezza dell'account",
"description": "Gestisci la tua password, l'autenticazione a due fattori e le impostazioni di sicurezza",
"detecting": "Rilevamento delle funzionalità del server...",
- "not_available": "La gestione della sicurezza dell'account non è disponibile per questo server di posta. I permessi richiesti potrebbero essere disabilitati. Consultare la documentazione per i dettagli.",
+ "not_available": "La gestione della sicurezza dell'account non è disponibile per questo server di posta. I permessi richiesti potrebbero essere disabilitati. Consultare la documentazione per i dettagli.",
"password": {
"title": "Cambia password",
"current": "Password attuale",
diff --git a/locales/ja/common.json b/locales/ja/common.json
index c07fbdfb2..6685d7bd9 100644
--- a/locales/ja/common.json
+++ b/locales/ja/common.json
@@ -1826,7 +1826,7 @@
"title": "アカウントセキュリティ",
"description": "パスワード、二要素認証、セキュリティ設定を管理します",
"detecting": "サーバー機能を検出中...",
- "not_available": "このメールサーバーではアカウントセキュリティ管理は利用できません。必要な権限が無効になっている可能性があります。詳細はドキュメントを参照してください。",
+ "not_available": "このメールサーバーではアカウントセキュリティ管理は利用できません。必要な権限が無効になっている可能性があります。詳細はドキュメントを参照してください。",
"password": {
"title": "パスワードの変更",
"current": "現在のパスワード",
diff --git a/locales/ko/common.json b/locales/ko/common.json
index 1ec0a9a80..55ff3a530 100644
--- a/locales/ko/common.json
+++ b/locales/ko/common.json
@@ -1826,7 +1826,7 @@
"title": "계정 보안",
"description": "비밀번호, 2단계 인증 및 보안 설정을 관리해요",
"detecting": "서버 기능을 확인하는 중...",
- "not_available": "이 메일 서버에서는 계정 보안 관리를 사용할 수 없어요. 필요한 권한이 비활성화되어 있을 수 있어요. 자세한 내용은 문서를 참고해 주세요.",
+ "not_available": "이 메일 서버에서는 계정 보안 관리를 사용할 수 없어요. 필요한 권한이 비활성화되어 있을 수 있어요. 자세한 내용은 문서를 참고해 주세요.",
"password": {
"title": "비밀번호 변경",
"current": "현재 비밀번호",
diff --git a/locales/mn/common.json b/locales/mn/common.json
index cad57666e..8cfba34fc 100644
--- a/locales/mn/common.json
+++ b/locales/mn/common.json
@@ -1833,7 +1833,7 @@
"title": "Дансны аюулгүй байдал",
"description": "Нууц үг, хоёр хүчин зүйлийн баталгаажуулалт, аюулгүй байдлын тохиргоогоо удирдах",
"detecting": "Серверийн чадварыг илрүүлж байна...",
- "not_available": "Энэ имэйл сервер дээр бүртгэлийн аюулгүй байдлын удирдлага ашиглах боломжгүй. Шаардлагатай зөвшөөрлүүд идэвхгүй байж болно. Дэлгэрэнгүйг баримт бичгээс үзнэ үү.",
+ "not_available": "Энэ имэйл сервер дээр бүртгэлийн аюулгүй байдлын удирдлага ашиглах боломжгүй. Шаардлагатай зөвшөөрлүүд идэвхгүй байж болно. Дэлгэрэнгүйг баримт бичгээс үзнэ үү.",
"password": {
"title": "Нууц үг солих",
"current": "Одоогийн нууц үг",
diff --git a/locales/nb/common.json b/locales/nb/common.json
index 3cdfc2b38..ca25bfab4 100644
--- a/locales/nb/common.json
+++ b/locales/nb/common.json
@@ -1833,7 +1833,7 @@
"title": "Kontosikkerhet",
"description": "Administrer passordet ditt, tofaktorautentisering og sikkerhetsinnstillinger",
"detecting": "Kontrollerer hvilke funksjoner serveren støtter...",
- "not_available": "Administrasjon av kontosikkerhet er ikke tilgjengelig på denne e-postserveren. Nødvendige tillatelser kan være deaktivert. Se dokumentasjonen for mer informasjon.",
+ "not_available": "Administrasjon av kontosikkerhet er ikke tilgjengelig på denne e-postserveren. Nødvendige tillatelser kan være deaktivert. Se dokumentasjonen for mer informasjon.",
"password": {
"title": "Endre passord",
"current": "Gjeldende passord",
diff --git a/locales/nl/common.json b/locales/nl/common.json
index 1875c6628..f5ec92854 100644
--- a/locales/nl/common.json
+++ b/locales/nl/common.json
@@ -1826,7 +1826,7 @@
"title": "Accountbeveiliging",
"description": "Beheer uw wachtwoord, tweefactorauthenticatie en beveiligingsinstellingen",
"detecting": "Servermogelijkheden worden gedetecteerd...",
- "not_available": "Accountbeveiligingsbeheer is niet beschikbaar voor deze mailserver. Vereiste machtigingen kunnen zijn uitgeschakeld. Zie de documentatie voor details.",
+ "not_available": "Accountbeveiligingsbeheer is niet beschikbaar voor deze mailserver. Vereiste machtigingen kunnen zijn uitgeschakeld. Zie de documentatie voor details.",
"password": {
"title": "Wachtwoord wijzigen",
"current": "Huidig wachtwoord",
diff --git a/locales/pl/common.json b/locales/pl/common.json
index 2f6f33bff..76e6ade5b 100644
--- a/locales/pl/common.json
+++ b/locales/pl/common.json
@@ -1826,7 +1826,7 @@
"title": "Bezpieczeństwo konta",
"description": "Zarządzaj hasłem, uwierzytelnianiem dwuskładnikowym i ustawieniami bezpieczeństwa",
"detecting": "Wykrywanie możliwości serwera...",
- "not_available": "Zarządzanie bezpieczeństwem konta nie jest dostępne dla tego serwera pocztowego. Wymagane uprawnienia mogą być wyłączone. Szczegóły znajdziesz w dokumentacji.",
+ "not_available": "Zarządzanie bezpieczeństwem konta nie jest dostępne dla tego serwera pocztowego. Wymagane uprawnienia mogą być wyłączone. Szczegóły znajdziesz w dokumentacji.",
"password": {
"title": "Zmień hasło",
"current": "Aktualne hasło",
diff --git a/locales/pt/common.json b/locales/pt/common.json
index ea29f35ec..9aa227596 100644
--- a/locales/pt/common.json
+++ b/locales/pt/common.json
@@ -1826,7 +1826,7 @@
"title": "Segurança da conta",
"description": "Gerencie sua senha, autenticação de dois fatores e configurações de segurança",
"detecting": "Detectando recursos do servidor...",
- "not_available": "O gerenciamento de segurança da conta não está disponível para este servidor de e-mail. As permissões necessárias podem estar desabilitadas. Consulte a documentação para obter detalhes.",
+ "not_available": "O gerenciamento de segurança da conta não está disponível para este servidor de e-mail. As permissões necessárias podem estar desabilitadas. Consulte a documentação para obter detalhes.",
"password": {
"title": "Alterar senha",
"current": "Senha atual",
diff --git a/locales/ro/common.json b/locales/ro/common.json
index 7db304194..3d87a124e 100644
--- a/locales/ro/common.json
+++ b/locales/ro/common.json
@@ -1833,7 +1833,7 @@
"title": "Securitatea contului",
"description": "Gestionați-vă parola, autentificarea în doi pași și setările de securitate",
"detecting": "Se detectează capacitățile serverului...",
- "not_available": "Gestionarea securității contului nu este disponibilă pentru acest server de e-mail. Este posibil ca permisiunile necesare să fie dezactivate. Consultați documentația pentru detalii.",
+ "not_available": "Gestionarea securității contului nu este disponibilă pentru acest server de e-mail. Este posibil ca permisiunile necesare să fie dezactivate. Consultați documentația pentru detalii.",
"password": {
"title": "Schimbă parola",
"current": "Parola curentă",
diff --git a/locales/ru/common.json b/locales/ru/common.json
index 8ab2e7114..b41fa5cc2 100644
--- a/locales/ru/common.json
+++ b/locales/ru/common.json
@@ -1826,7 +1826,7 @@
"title": "Безопасность аккаунта",
"description": "Управляйте паролем, двухфакторной аутентификацией и настройками безопасности",
"detecting": "Определение возможностей сервера...",
- "not_available": "Управление безопасностью аккаунта недоступно для этого почтового сервера. Требуемые разрешения могут быть отключены. Подробнее см. в документации.",
+ "not_available": "Управление безопасностью аккаунта недоступно для этого почтового сервера. Требуемые разрешения могут быть отключены. Подробнее см. в документации.",
"password": {
"title": "Изменить пароль",
"current": "Текущий пароль",
diff --git a/locales/th/common.json b/locales/th/common.json
index 8013cd1d7..88fb99ce2 100644
--- a/locales/th/common.json
+++ b/locales/th/common.json
@@ -3980,7 +3980,7 @@
"title": "ความปลอดภัยของบัญชี",
"description": "จัดการรหัสผ่าน การยืนยันตัวตนแบบสองขั้นตอน และการตั้งค่าความปลอดภัยของคุณ",
"detecting": "กำลังตรวจสอบความสามารถของเซิร์ฟเวอร์...",
- "not_available": "การจัดการความปลอดภัยของบัญชีไม่พร้อมใช้งานสำหรับเมลเซิร์ฟเวอร์นี้ สิทธิ์ที่จำเป็นอาจถูกปิดใช้งาน ดูรายละเอียดใน เอกสารประกอบ",
+ "not_available": "การจัดการความปลอดภัยของบัญชีไม่พร้อมใช้งานสำหรับเมลเซิร์ฟเวอร์นี้ สิทธิ์ที่จำเป็นอาจถูกปิดใช้งาน ดูรายละเอียดใน เอกสารประกอบ",
"password": {
"title": "เปลี่ยนรหัสผ่าน",
"current": "รหัสผ่านปัจจุบัน",
diff --git a/locales/tr/common.json b/locales/tr/common.json
index 30ed3616c..8b497ec0e 100644
--- a/locales/tr/common.json
+++ b/locales/tr/common.json
@@ -1826,7 +1826,7 @@
"title": "Hesap Güvenliği",
"description": "Parolanızı, iki faktörlü kimlik doğrulamayı ve güvenlik ayarlarını yönetin",
"detecting": "Sunucu özellikleri algılanıyor...",
- "not_available": "Bu posta sunucusu için hesap güvenliği yönetimi kullanılamıyor. Gerekli izinler devre dışı bırakılmış olabilir. Ayrıntılar için belgelere bakın.",
+ "not_available": "Bu posta sunucusu için hesap güvenliği yönetimi kullanılamıyor. Gerekli izinler devre dışı bırakılmış olabilir. Ayrıntılar için belgelere bakın.",
"password": {
"title": "Parolayı Değiştir",
"current": "Mevcut Parola",
diff --git a/locales/uk/common.json b/locales/uk/common.json
index 273e3c804..76268966c 100644
--- a/locales/uk/common.json
+++ b/locales/uk/common.json
@@ -1826,7 +1826,7 @@
"title": "Безпека облікового запису",
"description": "Керуйте своїм паролем, двофакторною автентифікацією та налаштуваннями безпеки",
"detecting": "Виявлення можливостей сервера...",
- "not_available": "Керування безпекою облікового запису недоступне для цього поштового сервера. Необхідні дозволи можуть бути вимкнені. Перегляньте документацію для отримання додаткової інформації.",
+ "not_available": "Керування безпекою облікового запису недоступне для цього поштового сервера. Необхідні дозволи можуть бути вимкнені. Перегляньте документацію для отримання додаткової інформації.",
"password": {
"title": "Змінити пароль",
"current": "Поточний пароль",
diff --git a/locales/zh-TW/common.json b/locales/zh-TW/common.json
index 9749d48ad..e8662b6e2 100644
--- a/locales/zh-TW/common.json
+++ b/locales/zh-TW/common.json
@@ -1833,7 +1833,7 @@
"title": "帳號安全",
"description": "管理您的密碼、雙因素驗證與安全設定",
"detecting": "正在偵測伺服器功能…",
- "not_available": "此郵件伺服器無法管理帳號安全性。可能已停用必要權限。如需詳細資料,請參閱說明文件。",
+ "not_available": "此郵件伺服器無法管理帳號安全性。可能已停用必要權限。如需詳細資料,請參閱說明文件。",
"password": {
"title": "變更密碼",
"current": "目前密碼",
diff --git a/locales/zh/common.json b/locales/zh/common.json
index 9267dc715..20709ebfd 100644
--- a/locales/zh/common.json
+++ b/locales/zh/common.json
@@ -1826,7 +1826,7 @@
"title": "账户安全",
"description": "管理您的密码、双因素身份验证和安全设置",
"detecting": "正在检测服务器功能...",
- "not_available": "此邮件服务器不支持账号安全管理。可能未启用所需权限。详情请参阅文档。",
+ "not_available": "此邮件服务器不支持账号安全管理。可能未启用所需权限。详情请参阅文档。",
"password": {
"title": "更改密码",
"current": "当前密码",