From ea7985ad4d40743ffe2e488b6fd7db6ce81c77f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Ba=C4=8Do?= Date: Tue, 12 Aug 2025 13:56:22 +0200 Subject: [PATCH 1/6] Implement CI/CD action to check EN locale --- .../static-analysis/fallbackLocale.js | 92 +++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 .github/workflows/static-analysis/fallbackLocale.js diff --git a/.github/workflows/static-analysis/fallbackLocale.js b/.github/workflows/static-analysis/fallbackLocale.js new file mode 100644 index 0000000000..f4056195fd --- /dev/null +++ b/.github/workflows/static-analysis/fallbackLocale.js @@ -0,0 +1,92 @@ +/* + * Look into all local files, and collect unique keys. + * Ensure fallback locale (English) has translation for all keys. + */ + +import { readdir, readFile } from "fs/promises"; +import { join } from "path"; + +const translationsPath = join( + __dirname, + "../../../app/config/locale/translations", +); +const fallbackLocale = "en.json"; + +async () => { + try { + const files = await readdir(translationsPath).filter((file) => + file.endsWith(".json"), + ); + + if (files.length === 0) { + console.error("No translation files found in ", translationsPath); + process.exit(1); + } + + // Check if fallback locale exists + if (!files.includes(fallbackLocale)) { + console.error(`Fallback locale file ${fallbackLocale} not found`); + process.exit(1); + } + + // Collect all unique keys from all translation files + const allKeys = new Set(); + + for (const file of files) { + const filePath = join(translationsPath, file); + const content = await readFile(filePath, "utf8"); + const translations = JSON.parse(content); + + // Add all keys from this file + Object.keys(translations).forEach((key) => allKeys.add(key)); + } + + // Read fallback locale + const fallbackPath = join(translationsPath, fallbackLocale); + const fallbackContent = await readFile(fallbackPath, "utf8"); + const fallbackTranslations = JSON.parse(fallbackContent); + + // Check for missing keys in fallback locale + const missingKeys = []; + const fallbackKeys = new Set(Object.keys(fallbackTranslations)); + + for (const key of allKeys) { + if (!fallbackKeys.has(key)) { + missingKeys.push(key); + } + } + + // Report results + console.log( + `Found ${files.length} translation files in ${translationsPath}`, + ); + console.log(`Total unique keys found across all locales: ${allKeys.size}`); + console.log( + `Keys in fallback locale (${fallbackLocale}): ${fallbackKeys.size}`, + ); + + if (missingKeys.length > 0) { + console.error( + `\nERROR: Fallback locale (${fallbackLocale}) is missing ${missingKeys.length} key(s):`, + ); + missingKeys.sort().forEach((key) => { + console.error(` - ${key}`); + }); + console.error( + `\nTo fix this issue, add the missing keys to ${translationsPath}/${fallbackLocale}`, + ); + process.exit(1); + } else { + console.log( + `\nSUCCESS: Fallback locale (${fallbackLocale}) contains all required keys.`, + ); + console.log( + `All ${allKeys.size} translation keys are present in the fallback locale.`, + ); + process.exit(0); + } + } catch (error) { + console.error("Unexpected error: ", error.message); + process.exit(1); + } +}; From 56d60d78665d6d0d81245e6d7eeb5587eb839d84 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Ba=C4=8Do?= Date: Tue, 12 Aug 2025 14:09:36 +0200 Subject: [PATCH 2/6] Finalized locale check script --- .../static-analysis/fallbackLocale.js | 92 -------------- .../workflows/static-analysis/locale/index.js | 115 ++++++++++++++++++ .../static-analysis/locale/package.json | 13 ++ 3 files changed, 128 insertions(+), 92 deletions(-) delete mode 100644 .github/workflows/static-analysis/fallbackLocale.js create mode 100644 .github/workflows/static-analysis/locale/index.js create mode 100644 .github/workflows/static-analysis/locale/package.json diff --git a/.github/workflows/static-analysis/fallbackLocale.js b/.github/workflows/static-analysis/fallbackLocale.js deleted file mode 100644 index f4056195fd..0000000000 --- a/.github/workflows/static-analysis/fallbackLocale.js +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Look into all local files, and collect unique keys. - * Ensure fallback locale (English) has translation for all keys. - */ - -import { readdir, readFile } from "fs/promises"; -import { join } from "path"; - -const translationsPath = join( - __dirname, - "../../../app/config/locale/translations", -); -const fallbackLocale = "en.json"; - -async () => { - try { - const files = await readdir(translationsPath).filter((file) => - file.endsWith(".json"), - ); - - if (files.length === 0) { - console.error("No translation files found in ", translationsPath); - process.exit(1); - } - - // Check if fallback locale exists - if (!files.includes(fallbackLocale)) { - console.error(`Fallback locale file ${fallbackLocale} not found`); - process.exit(1); - } - - // Collect all unique keys from all translation files - const allKeys = new Set(); - - for (const file of files) { - const filePath = join(translationsPath, file); - const content = await readFile(filePath, "utf8"); - const translations = JSON.parse(content); - - // Add all keys from this file - Object.keys(translations).forEach((key) => allKeys.add(key)); - } - - // Read fallback locale - const fallbackPath = join(translationsPath, fallbackLocale); - const fallbackContent = await readFile(fallbackPath, "utf8"); - const fallbackTranslations = JSON.parse(fallbackContent); - - // Check for missing keys in fallback locale - const missingKeys = []; - const fallbackKeys = new Set(Object.keys(fallbackTranslations)); - - for (const key of allKeys) { - if (!fallbackKeys.has(key)) { - missingKeys.push(key); - } - } - - // Report results - console.log( - `Found ${files.length} translation files in ${translationsPath}`, - ); - console.log(`Total unique keys found across all locales: ${allKeys.size}`); - console.log( - `Keys in fallback locale (${fallbackLocale}): ${fallbackKeys.size}`, - ); - - if (missingKeys.length > 0) { - console.error( - `\nERROR: Fallback locale (${fallbackLocale}) is missing ${missingKeys.length} key(s):`, - ); - missingKeys.sort().forEach((key) => { - console.error(` - ${key}`); - }); - console.error( - `\nTo fix this issue, add the missing keys to ${translationsPath}/${fallbackLocale}`, - ); - process.exit(1); - } else { - console.log( - `\nSUCCESS: Fallback locale (${fallbackLocale}) contains all required keys.`, - ); - console.log( - `All ${allKeys.size} translation keys are present in the fallback locale.`, - ); - process.exit(0); - } - } catch (error) { - console.error("Unexpected error: ", error.message); - process.exit(1); - } -}; diff --git a/.github/workflows/static-analysis/locale/index.js b/.github/workflows/static-analysis/locale/index.js new file mode 100644 index 0000000000..dd4594fc4d --- /dev/null +++ b/.github/workflows/static-analysis/locale/index.js @@ -0,0 +1,115 @@ +/* + * Look into all local files, and collect unique keys. + * Ensure fallback locale (English) has translation for all keys. + * If configured as `const strict = true`, all locales will be checked to include all keys. + */ + +import { readdir, readFile } from "fs/promises"; +import { join, dirname } from "path"; +import { fileURLToPath } from "url"; + +const config = { + strict: false, + fallbackLocale: "en.json", +}; + +(async () => { + try { + // Prepare current directory equivalent in ES modules + const __filename = fileURLToPath(import.meta.url); + const __dirname = dirname(__filename); + + const translationsPath = join( + __dirname, + "../../../../app/config/locale/translations", + ); + + const files = (await readdir(translationsPath)).filter((file) => + file.endsWith(".json"), + ); + + if (files.length === 0) { + console.error("No translation files found in ", translationsPath); + process.exit(1); + } + + // Check if fallback locale exists + if (!files.includes(config.fallbackLocale)) { + console.error(`Fallback locale file ${config.fallbackLocale} not found`); + process.exit(1); + } + + console.log( + `Found ${files.length} translation files in ${translationsPath}`, + ); + + // Collect all unique keys from all translation files + const allKeys = new Set(); + + for (const file of files) { + const filePath = join(translationsPath, file); + const content = await readFile(filePath, "utf8"); + const translations = JSON.parse(content); + + // Add all keys from this file + Object.keys(translations).forEach((key) => allKeys.add(key)); + } + + console.log(`Total unique keys found across all locales: ${allKeys.size}`); + + const localesToCheck = []; + if (config.strict) { + localesToCheck.push(...files); + } else { + localesToCheck.push(config.fallbackLocale); + } + + let errorsCount = 0; + let missingLocaleCount = 0; + + for (const localeToCheck of localesToCheck) { + // Read locale + const path = join(translationsPath, localeToCheck); + const content = await readFile(path, "utf8"); + const translations = JSON.parse(content); + + // Check for missing keys in the locale + const keys = new Set(Object.keys(translations)); + console.log(`Keys in locale (${localeToCheck}): ${keys.size}`); + + const missingKeys = []; + for (const key of allKeys) { + if (!keys.has(key)) { + missingKeys.push(key); + } + } + + if (missingKeys.length > 0) { + console.error( + `\nERROR: Fallback locale (${localeToCheck}) is missing ${missingKeys.length} key(s):`, + ); + missingKeys.sort().forEach((key) => { + console.error(` - ${key}`); + }); + console.error( + `\nTo fix this issue, add the missing keys to ${translationsPath}/${localeToCheck}`, + ); + errorsCount++; + missingLocaleCount += missingKeys.length; + } else { + console.log( + `\nSUCCESS: Fallback locale (${localeToCheck}) contains all ${allKeys.size} keys.`, + ); + } + } + + if (errorsCount > 0) { + console.log(`\n${missingLocaleCount} locales missing found across ${errorsCount} locales.`); + process.exit(1); + } + } catch (error) { + console.error("Unexpected error."); + console.error(error); + process.exit(1); + } +})(); diff --git a/.github/workflows/static-analysis/locale/package.json b/.github/workflows/static-analysis/locale/package.json new file mode 100644 index 0000000000..748a3e6d2a --- /dev/null +++ b/.github/workflows/static-analysis/locale/package.json @@ -0,0 +1,13 @@ +{ + "name": "static-analysis-locale", + "version": "1.0.0", + "type": "module", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "", + "license": "ISC", + "description": "" +} From 626f7c754c52c0cd97990caebe76aa69399ba96e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Ba=C4=8Do?= Date: Tue, 12 Aug 2025 14:14:03 +0200 Subject: [PATCH 3/6] Remove unused translations --- app/config/locale/translations/af.json | 2 -- app/config/locale/translations/ar-ma.json | 2 -- app/config/locale/translations/ar.json | 2 -- app/config/locale/translations/as.json | 2 -- app/config/locale/translations/az.json | 2 -- app/config/locale/translations/be.json | 2 -- app/config/locale/translations/bg.json | 2 -- app/config/locale/translations/bh.json | 2 -- app/config/locale/translations/bn.json | 2 -- app/config/locale/translations/bs.json | 2 -- app/config/locale/translations/ca.json | 2 -- app/config/locale/translations/cs.json | 2 -- app/config/locale/translations/da.json | 2 -- app/config/locale/translations/de.json | 2 -- app/config/locale/translations/el.json | 2 -- app/config/locale/translations/eo.json | 2 -- app/config/locale/translations/es.json | 2 -- app/config/locale/translations/fa.json | 2 -- app/config/locale/translations/fi.json | 2 -- app/config/locale/translations/fo.json | 2 -- app/config/locale/translations/fr.json | 2 -- app/config/locale/translations/ga.json | 2 -- app/config/locale/translations/gu.json | 2 -- app/config/locale/translations/he.json | 2 -- app/config/locale/translations/hi.json | 2 -- app/config/locale/translations/hr.json | 2 -- app/config/locale/translations/hu.json | 2 -- app/config/locale/translations/hy.json | 2 -- app/config/locale/translations/id.json | 2 -- app/config/locale/translations/is.json | 2 -- app/config/locale/translations/it.json | 2 -- app/config/locale/translations/ja.json | 2 -- app/config/locale/translations/jv.json | 2 -- app/config/locale/translations/km.json | 2 -- app/config/locale/translations/kn.json | 2 -- app/config/locale/translations/ko.json | 2 -- app/config/locale/translations/la.json | 2 -- app/config/locale/translations/lb.json | 2 -- app/config/locale/translations/lt.json | 2 -- app/config/locale/translations/lv.json | 2 -- app/config/locale/translations/ml.json | 2 -- app/config/locale/translations/mr.json | 2 -- app/config/locale/translations/ms.json | 2 -- app/config/locale/translations/nb.json | 2 -- app/config/locale/translations/ne.json | 2 -- app/config/locale/translations/nl.json | 2 -- app/config/locale/translations/nn.json | 2 -- app/config/locale/translations/or.json | 2 -- app/config/locale/translations/pa.json | 2 -- app/config/locale/translations/pl.json | 2 -- app/config/locale/translations/pt-br.json | 2 -- app/config/locale/translations/pt-pt.json | 2 -- app/config/locale/translations/ro.json | 2 -- app/config/locale/translations/ru.json | 2 -- app/config/locale/translations/sa.json | 2 -- app/config/locale/translations/sd.json | 2 -- app/config/locale/translations/si.json | 2 -- app/config/locale/translations/sk.json | 2 -- app/config/locale/translations/sl.json | 2 -- app/config/locale/translations/sn.json | 2 -- app/config/locale/translations/sq.json | 2 -- app/config/locale/translations/sv.json | 2 -- app/config/locale/translations/ta.json | 2 -- app/config/locale/translations/te.json | 2 -- app/config/locale/translations/th.json | 2 -- app/config/locale/translations/tl.json | 2 -- app/config/locale/translations/tr.json | 2 -- app/config/locale/translations/uk.json | 2 -- app/config/locale/translations/ur.json | 2 -- app/config/locale/translations/vi.json | 2 -- app/config/locale/translations/zh-cn.json | 2 -- app/config/locale/translations/zh-tw.json | 2 -- 72 files changed, 144 deletions(-) diff --git a/app/config/locale/translations/af.json b/app/config/locale/translations/af.json index 9b313ac92a..86da260a90 100644 --- a/app/config/locale/translations/af.json +++ b/app/config/locale/translations/af.json @@ -12,8 +12,6 @@ "emails.verification.signature": "Die {{project}} span", "emails.magicSession.subject": "Teken aan", "emails.magicSession.hello": "Goeie dag,", - "emails.magicSession.body": "Volg hierdie skakel om in te teken.", - "emails.magicSession.footer": "Ignoreer gerus hierdie boodskap as u nie die versoek gestuur het om met die' adres in te teken nie.", "emails.magicSession.thanks": "Baie dankie,", "emails.magicSession.signature": "Die {{project}} span", "emails.recovery.subject": "Herstel Wagwoord", diff --git a/app/config/locale/translations/ar-ma.json b/app/config/locale/translations/ar-ma.json index e4b5b1f558..31b656da60 100644 --- a/app/config/locale/translations/ar-ma.json +++ b/app/config/locale/translations/ar-ma.json @@ -12,8 +12,6 @@ "emails.verification.signature": "فرقة {{project}}", "emails.magicSession.subject": "تكونيكطا", "emails.magicSession.hello": "السلام،", - "emails.magicSession.body": "تبّع هاد الوصلة باش تتكونيكطا.", - "emails.magicSession.footer": "إلا ماشي نتا اللي طلبتي تتكونيكطا بهاد ليميل، ممكن تنخّل هاد البرية.", "emails.magicSession.thanks": "شكرا،", "emails.magicSession.signature": "فرقة {{project}}", "emails.recovery.subject": "تبدال كلمة السر", diff --git a/app/config/locale/translations/ar.json b/app/config/locale/translations/ar.json index eda0652fbe..d005009275 100644 --- a/app/config/locale/translations/ar.json +++ b/app/config/locale/translations/ar.json @@ -12,8 +12,6 @@ "emails.verification.signature": "فريق {{project}}", "emails.magicSession.subject": "تسجيل الدخول", "emails.magicSession.hello": "أهلا،", - "emails.magicSession.body": "اتبع هذا الرابط لتسجيل الدخول", - "emails.magicSession.footer": "لو لم تطلب تسجيل الدخول بهذا البريد الاكتروني ، يمكنك تجاهل هذه الرسالة", "emails.magicSession.thanks": "شكرا،", "emails.magicSession.signature": "فريق {{project}}", "emails.recovery.subject": "تغيير كلمة السر", diff --git a/app/config/locale/translations/as.json b/app/config/locale/translations/as.json index 60e385a8ac..0cad3e1000 100644 --- a/app/config/locale/translations/as.json +++ b/app/config/locale/translations/as.json @@ -12,8 +12,6 @@ "emails.verification.signature": "{{project}} দল", "emails.magicSession.subject": "লগইন", "emails.magicSession.hello": "নমস্কাৰ,", - "emails.magicSession.body": "লগইন কৰিবলৈ এই লিংকটো অনুসৰণ কৰক।", - "emails.magicSession.footer": "যদি আপুনি এই ইমেইল ব্যৱহাৰ কৰি লগইন কৰিবলৈ কোৱা নাছিল, আপুনি এই বাৰ্তাটো উপেক্ষা কৰিব পাৰে।", "emails.magicSession.thanks": "ধন্যবাদ,", "emails.magicSession.signature": "{{project}} দল", "emails.recovery.subject": "পাছৱাৰ্ড ৰিছেট", diff --git a/app/config/locale/translations/az.json b/app/config/locale/translations/az.json index 63e442f7c5..7e0d206ff1 100644 --- a/app/config/locale/translations/az.json +++ b/app/config/locale/translations/az.json @@ -12,8 +12,6 @@ "emails.verification.signature": "{{project}} komandası", "emails.magicSession.subject": "Daxil Olmaq", "emails.magicSession.hello": "Salam,", - "emails.magicSession.body": "Daxil olmaq üçün bu linki izləyin.", - "emails.magicSession.footer": "Bu e-poçtdan istifadə edərək giriş istəməmisinizsə, bu mesajı görməməzlikdən gələ bilərsiniz.", "emails.magicSession.thanks": "Təşəkkürlər,", "emails.magicSession.signature": "{{project}} komandası", "emails.recovery.subject": "Şifrə Sıfırlanması", diff --git a/app/config/locale/translations/be.json b/app/config/locale/translations/be.json index b4ae0827c3..b64ed20bc6 100644 --- a/app/config/locale/translations/be.json +++ b/app/config/locale/translations/be.json @@ -12,8 +12,6 @@ "emails.verification.signature": "каманда {{project}}", "emails.magicSession.subject": "Лагін", "emails.magicSession.hello": "Прывітанне,", - "emails.magicSession.body": "Перайдзіце па спасылцы, каб увайсці.", - "emails.magicSession.footer": "Калі вы не прасілі ўвайсці, выкарыстоўваючы гэты адрас электроннай пошты, праігнаруйце гэтае паведамленне.", "emails.magicSession.thanks": "Дзякуем,", "emails.magicSession.signature": "каманда {{project}}", "emails.recovery.subject": "Скід пароля", diff --git a/app/config/locale/translations/bg.json b/app/config/locale/translations/bg.json index 086c6b283e..f3ed2e7642 100644 --- a/app/config/locale/translations/bg.json +++ b/app/config/locale/translations/bg.json @@ -11,8 +11,6 @@ "emails.verification.signature": "", "emails.magicSession.subject": "", "emails.magicSession.hello": ",", - "emails.magicSession.body": "", - "emails.magicSession.footer": "", "emails.magicSession.thanks": ",", "emails.magicSession.signature": "", "emails.recovery.subject": "", diff --git a/app/config/locale/translations/bh.json b/app/config/locale/translations/bh.json index 7d2b469ed5..04ef824f2b 100644 --- a/app/config/locale/translations/bh.json +++ b/app/config/locale/translations/bh.json @@ -12,8 +12,6 @@ "emails.verification.signature": "{{project}} टीम", "emails.magicSession.subject": "लॉग इन करीं|", "emails.magicSession.hello": "प्रणाम,", - "emails.magicSession.body": "लॉग इन करें लेल दिहल गइल लिंक फॉलो करें|", - "emails.magicSession.footer": "अगर लॉग इन करे के लिए ना कहाले, तो आप ई संदेश क अनदेखा कर सकत अछि।", "emails.magicSession.thanks": "धन्यवाद,", "emails.magicSession.signature": "{{project}} टीम", "emails.recovery.subject": "पासवर्ड बदल क लेल|", diff --git a/app/config/locale/translations/bn.json b/app/config/locale/translations/bn.json index 1157d5cc0f..617d5815a0 100644 --- a/app/config/locale/translations/bn.json +++ b/app/config/locale/translations/bn.json @@ -12,8 +12,6 @@ "emails.verification.signature": "{{project}} টীম", "emails.magicSession.subject": "লগ ইন", "emails.magicSession.hello": "নমস্কার,", - "emails.magicSession.body": "এই লিঙ্কের মাধ্যমে লগ ইন করুন।", - "emails.magicSession.footer": "আপনি যদি এই ইমেলটি ব্যবহার করে লগইন করতে না বলেন, তাহলে আপনি এই বার্তাটি উপেক্ষা করতে পারেন।", "emails.magicSession.thanks": "ধন্যবাদ,", "emails.magicSession.signature": "{{project}} টীম", "emails.recovery.subject": "পাসওয়ার্ড রিসেট", diff --git a/app/config/locale/translations/bs.json b/app/config/locale/translations/bs.json index 1c69619c01..29c081c069 100644 --- a/app/config/locale/translations/bs.json +++ b/app/config/locale/translations/bs.json @@ -11,8 +11,6 @@ "emails.verification.signature": "", "emails.magicSession.subject": "", "emails.magicSession.hello": ",", - "emails.magicSession.body": "", - "emails.magicSession.footer": "", "emails.magicSession.thanks": ",", "emails.magicSession.signature": "", "emails.recovery.subject": "", diff --git a/app/config/locale/translations/ca.json b/app/config/locale/translations/ca.json index ec5112f075..38519f10c9 100644 --- a/app/config/locale/translations/ca.json +++ b/app/config/locale/translations/ca.json @@ -12,8 +12,6 @@ "emails.verification.signature": "Equip {{project}}", "emails.magicSession.subject": "Entrar", "emails.magicSession.hello": "Hola,", - "emails.magicSession.body": "Accedeix a aquest enllaç per a entrar.", - "emails.magicSession.footer": "Si no has sol·licitat entrar amb aquesta adreça electrònica, pots ignorar aquest missatge.", "emails.magicSession.thanks": "Gràcies,", "emails.magicSession.signature": "Equip {{project}}", "emails.recovery.subject": "Reinicialitzar contrasenya", diff --git a/app/config/locale/translations/cs.json b/app/config/locale/translations/cs.json index c67e9299da..f043a6a5c7 100644 --- a/app/config/locale/translations/cs.json +++ b/app/config/locale/translations/cs.json @@ -11,8 +11,6 @@ "emails.verification.signature": "", "emails.magicSession.subject": "", "emails.magicSession.hello": ",", - "emails.magicSession.body": "", - "emails.magicSession.footer": "", "emails.magicSession.thanks": ",", "emails.magicSession.signature": "", "emails.recovery.subject": "", diff --git a/app/config/locale/translations/da.json b/app/config/locale/translations/da.json index ae93b3c3b5..4b4af3446d 100644 --- a/app/config/locale/translations/da.json +++ b/app/config/locale/translations/da.json @@ -12,8 +12,6 @@ "emails.verification.signature": "{{project}} team", "emails.magicSession.subject": "Login", "emails.magicSession.hello": "Hej,", - "emails.magicSession.body": "Følg dette link for at logge ind.", - "emails.magicSession.footer": "Hvis du ikke har bedt om at logge ind med denne email, ignorer venligst denne besked.", "emails.magicSession.thanks": "Tak,", "emails.magicSession.signature": "{{project}} team", "emails.recovery.subject": "Nulstil Password", diff --git a/app/config/locale/translations/de.json b/app/config/locale/translations/de.json index a5a2f0ba43..ce59755f88 100644 --- a/app/config/locale/translations/de.json +++ b/app/config/locale/translations/de.json @@ -12,8 +12,6 @@ "emails.verification.signature": "{{project}}-Team", "emails.magicSession.subject": "Login", "emails.magicSession.hello": "Hey,", - "emails.magicSession.body": "Folge diesem Link, um dich einzuloggen.", - "emails.magicSession.footer": "Solltest du keinen Login für diese E-Mail-Adresse angefordert haben, kannst du diese Nachricht ignorieren.", "emails.magicSession.thanks": "Danke,", "emails.magicSession.signature": "{{project}}-Team", "emails.recovery.subject": "Kennwort zurücksetzen", diff --git a/app/config/locale/translations/el.json b/app/config/locale/translations/el.json index 3576ffb865..ec3b02c691 100644 --- a/app/config/locale/translations/el.json +++ b/app/config/locale/translations/el.json @@ -12,8 +12,6 @@ "emails.verification.signature": "Η ομάδα του {{project}}", "emails.magicSession.subject": "Είσοδος", "emails.magicSession.hello": "Γεια σου,", - "emails.magicSession.body": "Ακολουθήστε αυτό το link για να συνδεθείτε", - "emails.magicSession.footer": "Εάν δεν ζητήσατε να συνδεθείτε χρησιμοποιώντας αυτό το email, μπορείτε να αγνοήσετε αυτό το μήνυμα.", "emails.magicSession.thanks": "Ευχαριστούμε,", "emails.magicSession.signature": "Η ομάδα του {{project}}", "emails.recovery.subject": "Αλλαγή κωδικού πρόσβασης", diff --git a/app/config/locale/translations/eo.json b/app/config/locale/translations/eo.json index 8aba49098b..82d7eb53f0 100644 --- a/app/config/locale/translations/eo.json +++ b/app/config/locale/translations/eo.json @@ -11,8 +11,6 @@ "emails.verification.signature": "Teamo {{project}}", "emails.magicSession.subject": "Login", "emails.magicSession.hello": "Saluton,", - "emails.magicSession.body": "Alklaku ĉi tiun ligon por eniri.", - "emails.magicSession.footer": "Se vi ne petis ĉi tiun konfirmon de ĉi tiu retpoŝto, vi povas ignori ĉi tiun mesaĝon.", "emails.magicSession.thanks": "Dankegon,", "emails.magicSession.signature": "Teamo {{project}}", "emails.recovery.subject": "Parsvorta Restarigo", diff --git a/app/config/locale/translations/es.json b/app/config/locale/translations/es.json index e986b15f3c..27955eae30 100644 --- a/app/config/locale/translations/es.json +++ b/app/config/locale/translations/es.json @@ -12,8 +12,6 @@ "emails.verification.signature": "El equipo de {{project}}.", "emails.magicSession.subject": "Inicio de sesión", "emails.magicSession.hello": "Hola,", - "emails.magicSession.body": "Haz clic en este enlace para iniciar sesión:", - "emails.magicSession.footer": "Si no has solicitado iniciar sesión usando este correo, puedes ignorar este mensaje.", "emails.magicSession.thanks": "Gracias.,", "emails.magicSession.signature": "El equipo de {{project}}", "emails.recovery.subject": "Restablecer contraseña", diff --git a/app/config/locale/translations/fa.json b/app/config/locale/translations/fa.json index 9434b9ff03..f8420288df 100644 --- a/app/config/locale/translations/fa.json +++ b/app/config/locale/translations/fa.json @@ -12,8 +12,6 @@ "emails.verification.signature": "تیم {{user}}", "emails.magicSession.subject": "ورود به حساب کاربری", "emails.magicSession.hello": "سلام،", - "emails.magicSession.body": "برای ورود به حساب‌تان پیوند زیر را دنبال کنید.", - "emails.magicSession.footer": "اگر شما درخواست ورود به حساب کاربری با استفاده از این ایمیل را نداد‌ه‌اید، می‌توانید این پیام را نادیده بگیرید.", "emails.magicSession.thanks": "سپاس فراوان،", "emails.magicSession.signature": "تیم {{user}}", "emails.recovery.subject": "بازیابی گذرواژه", diff --git a/app/config/locale/translations/fi.json b/app/config/locale/translations/fi.json index ca61a95653..da4599bb58 100644 --- a/app/config/locale/translations/fi.json +++ b/app/config/locale/translations/fi.json @@ -11,8 +11,6 @@ "emails.verification.signature": "", "emails.magicSession.subject": "", "emails.magicSession.hello": ",", - "emails.magicSession.body": "", - "emails.magicSession.footer": "", "emails.magicSession.thanks": ",", "emails.magicSession.signature": "", "emails.recovery.subject": "", diff --git a/app/config/locale/translations/fo.json b/app/config/locale/translations/fo.json index a982fd0590..cfe63322b4 100644 --- a/app/config/locale/translations/fo.json +++ b/app/config/locale/translations/fo.json @@ -11,8 +11,6 @@ "emails.verification.signature": "", "emails.magicSession.subject": "", "emails.magicSession.hello": ",", - "emails.magicSession.body": "", - "emails.magicSession.footer": "", "emails.magicSession.thanks": ",", "emails.magicSession.signature": "", "emails.recovery.subject": "", diff --git a/app/config/locale/translations/fr.json b/app/config/locale/translations/fr.json index 3af7193764..7f3fca739d 100644 --- a/app/config/locale/translations/fr.json +++ b/app/config/locale/translations/fr.json @@ -12,8 +12,6 @@ "emails.verification.signature": "Équipe {{project}}", "emails.magicSession.subject": "Connexion", "emails.magicSession.hello": "Bonjour,", - "emails.magicSession.body": "Suivez ce lien pour vous connecter.", - "emails.magicSession.footer": "Si vous n'avez pas demandé à vous connecter en utilisant cet e-mail, vous pouvez ignorer ce message.", "emails.magicSession.thanks": "Merci,", "emails.magicSession.signature": "L'équipe {{project}}", "emails.recovery.subject": "Réinitialisation du mot de passe", diff --git a/app/config/locale/translations/ga.json b/app/config/locale/translations/ga.json index c486e77126..f9611e07b5 100644 --- a/app/config/locale/translations/ga.json +++ b/app/config/locale/translations/ga.json @@ -12,8 +12,6 @@ "emails.verification.signature": "{{project}} foireann", "emails.magicSession.subject": "Logáil isteach", "emails.magicSession.hello": "Haigh,", - "emails.magicSession.body": "Lean an nasc seo chun logáil isteach.", - "emails.magicSession.footer": "Mura ndearna tú iarratas logáil isteach leis an ríomhphost seo, déan neamhaird den teachtaireacht seo.", "emails.magicSession.thanks": "Go raibh maith agat,", "emails.magicSession.signature": "{{project}} foireann", "emails.recovery.subject": "Athshocrú pasfhocail", diff --git a/app/config/locale/translations/gu.json b/app/config/locale/translations/gu.json index 8d5d2fb8d6..8b9b41c0c9 100644 --- a/app/config/locale/translations/gu.json +++ b/app/config/locale/translations/gu.json @@ -12,8 +12,6 @@ "emails.verification.signature": "{{project}} ટીમ", "emails.magicSession.subject": "પ્રવેશ કરો", "emails.magicSession.hello": "નમસ્કાર,", - "emails.magicSession.body": "પ્રવેશ કરવા માટે આ લિંકને અનુસરો.", - "emails.magicSession.footer": "જો તમે આ ઇમેઇલનો ઉપયોગ કરીને પ્રવેશ કરવાનું ન કહ્યું હોય, તો તમે આ સંદેશને અવગણી શકો છો.", "emails.magicSession.thanks": "આભાર,", "emails.magicSession.signature": "{{project}} ટીમ", "emails.recovery.subject": "પાસવર્ડ ફરીથી સેટ કરો", diff --git a/app/config/locale/translations/he.json b/app/config/locale/translations/he.json index 8e5279e5e4..ab61085fa1 100644 --- a/app/config/locale/translations/he.json +++ b/app/config/locale/translations/he.json @@ -12,8 +12,6 @@ "emails.verification.signature": "צוות {{project}}", "emails.magicSession.subject": "כניסה למערכת", "emails.magicSession.hello": "שלום,", - "emails.magicSession.body": "לחץ על קישור זה כדי להיכנס.", - "emails.magicSession.footer": "אם לא ביקשת להיכנס באמצעות דוא\"ל זה, תוכל להתעלם מהודעה זו.", "emails.magicSession.thanks": "תודה,", "emails.magicSession.signature": "צוות {{project}}", "emails.recovery.subject": "איפוס סיסמא", diff --git a/app/config/locale/translations/hi.json b/app/config/locale/translations/hi.json index ef71e287cd..fe2aa9b5d2 100644 --- a/app/config/locale/translations/hi.json +++ b/app/config/locale/translations/hi.json @@ -12,8 +12,6 @@ "emails.verification.signature": "{{project}} टीम", "emails.magicSession.subject": "लॉग इन", "emails.magicSession.hello": "नमस्ते,", - "emails.magicSession.body": "इस लिंक के माध्यम से लॉग-इन करें।", - "emails.magicSession.footer": "यदि आप इस ईमेल द्वारा लॉगिन नहीं करना चाहते हैं, तो आप इस संदेश को नज़रअंदाज़ कर सकते हैं।", "emails.magicSession.thanks": "धन्यवाद,", "emails.magicSession.signature": "{{project}} टीम", "emails.recovery.subject": "पासवर्ड रीसेट", diff --git a/app/config/locale/translations/hr.json b/app/config/locale/translations/hr.json index 8331d67422..7ffe10668b 100644 --- a/app/config/locale/translations/hr.json +++ b/app/config/locale/translations/hr.json @@ -12,8 +12,6 @@ "emails.verification.signature": "{{project}} tim", "emails.magicSession.subject": "Prijavite se", "emails.magicSession.hello": "Pozdrav,", - "emails.magicSession.body": "Slijedite ovu poveznicu za prijavu.", - "emails.magicSession.footer": "Ako niste zatražili prijavu putem ove e-pošte, možete zanemariti ovu poruku.", "emails.magicSession.thanks": "Hvala,", "emails.magicSession.signature": "{{project}} tim", "emails.recovery.subject": "Ponovno postavljanje lozinke", diff --git a/app/config/locale/translations/hu.json b/app/config/locale/translations/hu.json index c21701a509..54e204e798 100644 --- a/app/config/locale/translations/hu.json +++ b/app/config/locale/translations/hu.json @@ -12,8 +12,6 @@ "emails.verification.signature": "a {{project}} csapat", "emails.magicSession.subject": "Bejelentkezés", "emails.magicSession.hello": "Szia,", - "emails.magicSession.body": "Kattints a linkre a bejelentkezéshez.", - "emails.magicSession.footer": "Ha nem te szerettél volna bejelentkezni ezzel az email címmel, akkor nyugodtan hagyd figyelmen kívül ezt az üzenetet.", "emails.magicSession.thanks": "Köszönettel,", "emails.magicSession.signature": "a {{project}} csapat", "emails.recovery.subject": "Jelszó Visszaállítása", diff --git a/app/config/locale/translations/hy.json b/app/config/locale/translations/hy.json index c845526607..08dcbb59eb 100644 --- a/app/config/locale/translations/hy.json +++ b/app/config/locale/translations/hy.json @@ -11,8 +11,6 @@ "emails.verification.signature": "", "emails.magicSession.subject": "", "emails.magicSession.hello": ",", - "emails.magicSession.body": "", - "emails.magicSession.footer": "", "emails.magicSession.thanks": ",", "emails.magicSession.signature": "", "emails.recovery.subject": "", diff --git a/app/config/locale/translations/id.json b/app/config/locale/translations/id.json index 836941f79a..cd9cadc4b1 100644 --- a/app/config/locale/translations/id.json +++ b/app/config/locale/translations/id.json @@ -12,8 +12,6 @@ "emails.verification.signature": "Tim {{project}}", "emails.magicSession.subject": "Masuk", "emails.magicSession.hello": "Hai,", - "emails.magicSession.body": "Ikuti tautan ini untuk masuk.", - "emails.magicSession.footer": "Jika Anda tidak meminta untuk masuk menggunakan email ini, Anda dapat mengabaikan pesan ini.", "emails.magicSession.thanks": "Terima kasih,", "emails.magicSession.signature": "Tim {{project}}", "emails.recovery.subject": "Atur Ulang Kata Sandi", diff --git a/app/config/locale/translations/is.json b/app/config/locale/translations/is.json index 5fede4dda0..4b21e9939b 100644 --- a/app/config/locale/translations/is.json +++ b/app/config/locale/translations/is.json @@ -11,8 +11,6 @@ "emails.verification.signature": "", "emails.magicSession.subject": "", "emails.magicSession.hello": ",", - "emails.magicSession.body": "", - "emails.magicSession.footer": "", "emails.magicSession.thanks": ",", "emails.magicSession.signature": "", "emails.recovery.subject": "", diff --git a/app/config/locale/translations/it.json b/app/config/locale/translations/it.json index f0e290b481..7b419858a3 100644 --- a/app/config/locale/translations/it.json +++ b/app/config/locale/translations/it.json @@ -12,8 +12,6 @@ "emails.verification.signature": "Il team {{project}}", "emails.magicSession.subject": "Login", "emails.magicSession.hello": "Ciao,", - "emails.magicSession.body": "Clicca questo link per accedere.", - "emails.magicSession.footer": "Se non hai richiesto di effettuare l’accesso, puoi ignorare questo messaggio.", "emails.magicSession.thanks": "Grazie,", "emails.magicSession.signature": "Il team {{project}}", "emails.recovery.subject": "Reimpostazione password", diff --git a/app/config/locale/translations/ja.json b/app/config/locale/translations/ja.json index f3ad8fe1ed..6ecfed55a2 100644 --- a/app/config/locale/translations/ja.json +++ b/app/config/locale/translations/ja.json @@ -12,8 +12,6 @@ "emails.verification.signature": "{{project}}チーム", "emails.magicSession.subject": "ログイン", "emails.magicSession.hello": "こんにちは、", - "emails.magicSession.body": "ログインするためには下記リンクをクリックしてください。", - "emails.magicSession.footer": "このメールに心当たりが無い場合は破棄をお願いいたします。", "emails.magicSession.thanks": "ご利用いただきありがとうございます。、", "emails.magicSession.signature": "{{project}}チーム", "emails.recovery.subject": "パスワードリセット", diff --git a/app/config/locale/translations/jv.json b/app/config/locale/translations/jv.json index 71d4f4b24a..3f6b6b9fe2 100644 --- a/app/config/locale/translations/jv.json +++ b/app/config/locale/translations/jv.json @@ -12,8 +12,6 @@ "emails.verification.signature": "Tim {{project}}", "emails.magicSession.subject": "Masuk", "emails.magicSession.hello": "Hai,", - "emails.magicSession.body": "Klik link iki kanggo masuk.", - "emails.magicSession.footer": "Yen sampeyan ora njaluk masuk nggunakake alamat email iki, sampeyan iso nglirwakake pesen iki.", "emails.magicSession.thanks": "Matur nuwun,", "emails.magicSession.signature": "Tim {{project}}", "emails.recovery.subject": "Setel ulang sandi", diff --git a/app/config/locale/translations/km.json b/app/config/locale/translations/km.json index 12ac05e8da..9e93162a6a 100644 --- a/app/config/locale/translations/km.json +++ b/app/config/locale/translations/km.json @@ -11,8 +11,6 @@ "emails.verification.signature": "", "emails.magicSession.subject": "", "emails.magicSession.hello": "", - "emails.magicSession.body": "", - "emails.magicSession.footer": "", "emails.magicSession.thanks": "", "emails.magicSession.signature": "", "emails.recovery.subject": "", diff --git a/app/config/locale/translations/kn.json b/app/config/locale/translations/kn.json index ed35a7947f..40b51c0944 100644 --- a/app/config/locale/translations/kn.json +++ b/app/config/locale/translations/kn.json @@ -12,8 +12,6 @@ "emails.verification.signature": "{{project}} ತಂಡ", "emails.magicSession.subject": "ಲಾಗಿನ್", "emails.magicSession.hello": "ನಮಸ್ಕಾರ,", - "emails.magicSession.body": "ಲಾಗಿನ್ ಮಾಡಲಿಕ್ಕೆ ಈ ಲಿಂಕನ್ನು ಅನುಸರಿಸಿ", - "emails.magicSession.footer": "ನೀವು ಈ ಇಮೇಲನಿಂದ ಲಾಗಿನ್ ಮಾಡಲು ಕೇಳದಿದ್ದರೆ, ಈ ಸಂದೇಶವನ್ನು ನಿರ್ಲಕ್ಷಿಸಿ", "emails.magicSession.thanks": "ಧನ್ಯವಾದಗಳು,", "emails.magicSession.signature": "{{project}} ತಂಡ", "emails.recovery.subject": "ಗುಪ್ತಪದ ಮರುಹೊಂದಿಸಿ", diff --git a/app/config/locale/translations/ko.json b/app/config/locale/translations/ko.json index 0bc425aeae..3bae815d75 100644 --- a/app/config/locale/translations/ko.json +++ b/app/config/locale/translations/ko.json @@ -12,8 +12,6 @@ "emails.verification.signature": "{{project}} 팀", "emails.magicSession.subject": "로그인", "emails.magicSession.hello": "안녕하세요、", - "emails.magicSession.body": "로그인 하시려면 링크를 클릭하여주세요.", - "emails.magicSession.footer": "이 이메일 계정으로 로그인 신청을 하지 않으셨다면 이 메세지를 무시하여주세요.", "emails.magicSession.thanks": "감사합니다、", "emails.magicSession.signature": "{{project}} 팀", "emails.recovery.subject": "비밀번호 재설정", diff --git a/app/config/locale/translations/la.json b/app/config/locale/translations/la.json index fe3e7930e2..bf58232b9a 100644 --- a/app/config/locale/translations/la.json +++ b/app/config/locale/translations/la.json @@ -12,8 +12,6 @@ "emails.verification.signature": "{{project}} Team", "emails.magicSession.subject": "Log in", "emails.magicSession.hello": "Salve ibi,", - "emails.magicSession.body": "Hanc nexum cum login", - "emails.magicSession.footer": "Si verificationem huius inscriptionis non postulasti, nuntium hunc ignorare potes.", "emails.magicSession.thanks": "Gratias,", "emails.magicSession.signature": "{{project}} team", "emails.recovery.subject": "Recuperet password", diff --git a/app/config/locale/translations/lb.json b/app/config/locale/translations/lb.json index 8fe4b346e7..77245036ac 100644 --- a/app/config/locale/translations/lb.json +++ b/app/config/locale/translations/lb.json @@ -12,8 +12,6 @@ "emails.verification.signature": "{{project}} équipe", "emails.magicSession.subject": "Login", "emails.magicSession.hello": "Hey,", - "emails.magicSession.body": "Follegt dëse Link fir umellen.", - "emails.magicSession.footer": "Wann Dir net gefrot hutt Iech mat dëser E -Mail anzemelden, kënnt Dir dëse Message ignoréieren.", "emails.magicSession.thanks": "Merci,", "emails.magicSession.signature": "{{project}} équipe", "emails.recovery.subject": "Password Reset", diff --git a/app/config/locale/translations/lt.json b/app/config/locale/translations/lt.json index 2439428b02..e0a3a84340 100644 --- a/app/config/locale/translations/lt.json +++ b/app/config/locale/translations/lt.json @@ -12,8 +12,6 @@ "emails.verification.signature": "{{project}} komanda", "emails.magicSession.subject": "Prisijungti", "emails.magicSession.hello": "Labas,", - "emails.magicSession.body": "Spauskite šią nuorodą, kad prisijungtumėte.", - "emails.magicSession.footer": "Jei neprašėte prisijungti naudojantis šiuo el. paštu, galite ignoruoti šį pranešimą.", "emails.magicSession.thanks": "Ačiū,", "emails.magicSession.signature": "{{project}} komanda", "emails.recovery.subject": "Slaptažodžio Atkūrimas", diff --git a/app/config/locale/translations/lv.json b/app/config/locale/translations/lv.json index 59edfce7a6..d91977ebad 100644 --- a/app/config/locale/translations/lv.json +++ b/app/config/locale/translations/lv.json @@ -12,8 +12,6 @@ "emails.verification.signature": "{{project}} komanda", "emails.magicSession.subject": "Ieiet", "emails.magicSession.hello": "Sveicināti,", - "emails.magicSession.body": "Sekojiet saitei, lai ieietu.", - "emails.magicSession.footer": "Ja Jūs nepieprasījāt ieiet ar šo e-pasta adresi, lūdzu, ignorējiet šo ziņu.", "emails.magicSession.thanks": "Paldies,", "emails.magicSession.signature": "{{project}} komanda", "emails.recovery.subject": "Paroles atjaunināšana", diff --git a/app/config/locale/translations/ml.json b/app/config/locale/translations/ml.json index bd13f92fa8..ffc9f12a7e 100644 --- a/app/config/locale/translations/ml.json +++ b/app/config/locale/translations/ml.json @@ -12,8 +12,6 @@ "emails.verification.signature": "{{project}} ടീം", "emails.magicSession.subject": "ലോഗിൻ", "emails.magicSession.hello": "നമസ്കാരം,", - "emails.magicSession.body": "ലോഗിൻ ചെയ്യുന്നതിനായി ഈ ലിങ്ക് പിന്തുടരുക.", - "emails.magicSession.footer": "ഈ ഇമെയിൽ ഉപയോഗിച്ച് ലോഗിൻ ചെയ്യാൻ നിങ്ങൾ ആവശ്യപ്പെട്ടില്ലെങ്കിൽ, ഈ സന്ദേശം അവഗണിക്കാവുന്നതാണ്.", "emails.magicSession.thanks": "നന്ദി,", "emails.magicSession.signature": "{{project}} ടീം", "emails.recovery.subject": "രഹസ്യവാക്ക് പുനക്രമീകരണം", diff --git a/app/config/locale/translations/mr.json b/app/config/locale/translations/mr.json index 881afdfe71..d417ac305f 100644 --- a/app/config/locale/translations/mr.json +++ b/app/config/locale/translations/mr.json @@ -12,8 +12,6 @@ "emails.verification.signature": "{{project}} संघ", "emails.magicSession.subject": "लॉगिन करा", "emails.magicSession.hello": "नमस्कार ,", - "emails.magicSession.body": "लॉगिन करण्यासाठी या लिंकचे अनुसरण करा.", - "emails.magicSession.footer": "आपण या ईमेलचा वापर करून लॉगिन करण्यास सांगितले नसल्यास, आपण या संदेशाकडे दुर्लक्ष करू शकता.", "emails.magicSession.thanks": "धन्यवाद,", "emails.magicSession.signature": "{{project}} संघ", "emails.recovery.subject": "पासवर्ड रीसेट", diff --git a/app/config/locale/translations/ms.json b/app/config/locale/translations/ms.json index 448307550e..99d086cd81 100644 --- a/app/config/locale/translations/ms.json +++ b/app/config/locale/translations/ms.json @@ -12,8 +12,6 @@ "emails.verification.signature": "{{project}} team", "emails.magicSession.subject": "Log masuk", "emails.magicSession.hello": "Hey,", - "emails.magicSession.body": "Tekan pautan ini untuk log masuk.", - "emails.magicSession.footer": "Sekiranya anda tidak membuat permintaan untuk log masuk menggunakan email ini, sila abaikan mesej ini.", "emails.magicSession.thanks": "Terima kasih,", "emails.magicSession.signature": "{{project}} team", "emails.recovery.subject": "Menetap semula Kata Laluan", diff --git a/app/config/locale/translations/nb.json b/app/config/locale/translations/nb.json index cc95bacf9e..36e28072d4 100644 --- a/app/config/locale/translations/nb.json +++ b/app/config/locale/translations/nb.json @@ -12,8 +12,6 @@ "emails.verification.signature": "{{project}} team", "emails.magicSession.subject": "Pålogging", "emails.magicSession.hello": "Hei,", - "emails.magicSession.body": "Følg denne lenken for å logge på.", - "emails.magicSession.footer": "Dersom du ikke ba om å logge på med denne e-postadressen, kan du se bort fra denne meldingen.", "emails.magicSession.thanks": "Takk,", "emails.magicSession.signature": "{{project}} team", "emails.recovery.subject": "Nullstille passord", diff --git a/app/config/locale/translations/ne.json b/app/config/locale/translations/ne.json index f1ba841fed..545810d871 100644 --- a/app/config/locale/translations/ne.json +++ b/app/config/locale/translations/ne.json @@ -12,8 +12,6 @@ "emails.verification.signature": "{{project}} समूह", "emails.magicSession.subject": "लगइन", "emails.magicSession.hello": "नमस्ते,", - "emails.magicSession.body": "लगइन गर्नको लागी यो लिंकमा जानुहोस।", - "emails.magicSession.footer": "यदि तपाइँले यो इमेल प्रयोग गरेर लगइन गर्न सोध्नु भएको छैन भने तपाइँले यो सन्देश लाई बेवास्ता गर्न सक्नुहुन्छ।", "emails.magicSession.thanks": "धन्यवाद,", "emails.magicSession.signature": "{{project}} समूह", "emails.recovery.subject": "पासवर्ड रिसेट", diff --git a/app/config/locale/translations/nl.json b/app/config/locale/translations/nl.json index 4f71f67199..9949a2b4b8 100644 --- a/app/config/locale/translations/nl.json +++ b/app/config/locale/translations/nl.json @@ -12,8 +12,6 @@ "emails.verification.signature": "{{project}} team", "emails.magicSession.subject": "Login", "emails.magicSession.hello": "Hoi,", - "emails.magicSession.body": "Volg deze link om in te loggen", - "emails.magicSession.footer": "Als u geen aanvraag heeft gemaakt om met deze mail in te loggen, kan u deze mail negeren", "emails.magicSession.thanks": "Bedankt,", "emails.magicSession.signature": "{{project}} team", "emails.recovery.subject": "Wachtwoord Herinstellen", diff --git a/app/config/locale/translations/nn.json b/app/config/locale/translations/nn.json index 646a57904c..cb5084011e 100644 --- a/app/config/locale/translations/nn.json +++ b/app/config/locale/translations/nn.json @@ -12,8 +12,6 @@ "emails.verification.signature": "{{project}} team", "emails.magicSession.subject": "Pålogging", "emails.magicSession.hello": "Hei,", - "emails.magicSession.body": "Følg denne lenkja for å logge på.", - "emails.magicSession.footer": "Om du ikkje ba om å logge på med denne e-postadressa, kan du ignorera denne meldinga.", "emails.magicSession.thanks": "Takk,", "emails.magicSession.signature": "{{project}} team", "emails.recovery.subject": "Nullstilla passord", diff --git a/app/config/locale/translations/or.json b/app/config/locale/translations/or.json index a8e08b8043..6393067089 100644 --- a/app/config/locale/translations/or.json +++ b/app/config/locale/translations/or.json @@ -12,8 +12,6 @@ "emails.verification.signature": "{{project}} ଦଳ", "emails.magicSession.subject": "ଲଗଇନ୍ କରନ୍ତୁ", "emails.magicSession.hello": "ନମସ୍କାର,", - "emails.magicSession.body": "ଲଗଇନ୍ କରିବାକୁ ଏହି ଲିଙ୍କ୍ ଅନୁସରଣ କରନ୍ତୁ |", - "emails.magicSession.footer": "ଯଦି ଆପଣ ଏହି ଇମେଲ୍ ବ୍ୟବହାର କରି ଲଗଇନ୍ କରିବାକୁ କହି ନାହାଁନ୍ତି, ତେବେ ଆପଣ ଏହି ସନ୍ଦେଶକୁ ଉପେକ୍ଷା କରିପାରିବେ |", "emails.magicSession.thanks": "ଧନ୍ୟବାଦ,", "emails.magicSession.signature": "{{project}} ଦଳ", "emails.recovery.subject": "ପାସୱାର୍ଡ ପୁନଃ ସେଟ୍ କରନ୍ତୁ |", diff --git a/app/config/locale/translations/pa.json b/app/config/locale/translations/pa.json index de71be9f49..2c3d90604c 100644 --- a/app/config/locale/translations/pa.json +++ b/app/config/locale/translations/pa.json @@ -11,8 +11,6 @@ "emails.verification.signature": "", "emails.magicSession.subject": "", "emails.magicSession.hello": ",", - "emails.magicSession.body": "", - "emails.magicSession.footer": "", "emails.magicSession.thanks": ",", "emails.magicSession.signature": "", "emails.recovery.subject": "", diff --git a/app/config/locale/translations/pl.json b/app/config/locale/translations/pl.json index 75bc3a24f9..e10e47f50d 100644 --- a/app/config/locale/translations/pl.json +++ b/app/config/locale/translations/pl.json @@ -12,8 +12,6 @@ "emails.verification.signature": "Zespół {{project}}", "emails.magicSession.subject": "Logowanie", "emails.magicSession.hello": "Cześć,", - "emails.magicSession.body": "Kliknij w ten link, aby zalogować się.", - "emails.magicSession.footer": "Jeśli to nie Ty prosiłeś o logowanie przy użyciu tego adresu e-mail, zignoruj tę wiadomość.", "emails.magicSession.thanks": "Dziękujemy,", "emails.magicSession.signature": "Zespół {{project}}", "emails.recovery.subject": "Resetowanie hasła", diff --git a/app/config/locale/translations/pt-br.json b/app/config/locale/translations/pt-br.json index 7e3af1d3f1..75ad38f887 100644 --- a/app/config/locale/translations/pt-br.json +++ b/app/config/locale/translations/pt-br.json @@ -12,8 +12,6 @@ "emails.verification.signature": "Time {{project}}", "emails.magicSession.subject": "Login", "emails.magicSession.hello": "Olá,", - "emails.magicSession.body": "Clique neste link para entrar.", - "emails.magicSession.footer": "Se você não solicitou conectar-se com este e-mail, ignore essa mensagem.", "emails.magicSession.thanks": "Muito obrigado,", "emails.magicSession.signature": "Time {{project}}", "emails.recovery.subject": "Redefinição de senha", diff --git a/app/config/locale/translations/pt-pt.json b/app/config/locale/translations/pt-pt.json index c13ce558bf..f0c84ab9e6 100644 --- a/app/config/locale/translations/pt-pt.json +++ b/app/config/locale/translations/pt-pt.json @@ -12,8 +12,6 @@ "emails.verification.signature": "Equipa {{project}}", "emails.magicSession.subject": "Login", "emails.magicSession.hello": "Olá ,", - "emails.magicSession.body": "Siga esta ligação para iniciar sessão.", - "emails.magicSession.footer": "Se não pediu para entrar usando este e-mail, pode ignorar esta mensagem.", "emails.magicSession.thanks": "Obrigado,", "emails.magicSession.signature": "Equipa {{project}}", "emails.recovery.subject": "Redefinição de senha", diff --git a/app/config/locale/translations/ro.json b/app/config/locale/translations/ro.json index 88499ce3f6..5def77fa61 100644 --- a/app/config/locale/translations/ro.json +++ b/app/config/locale/translations/ro.json @@ -12,8 +12,6 @@ "emails.verification.signature": "Echipa {{project}}", "emails.magicSession.subject": "Login", "emails.magicSession.hello": "Bună ziua,", - "emails.magicSession.body": "Urmează acest link pentru logare.", - "emails.magicSession.footer": "Dacă nu ai incercat să te loghezi folosing această adresa de email, poți ignora acest mesaj.", "emails.magicSession.thanks": "Mulțumim,", "emails.magicSession.signature": "Echipa {{project}}", "emails.recovery.subject": "Resetare parolă", diff --git a/app/config/locale/translations/ru.json b/app/config/locale/translations/ru.json index f61337de80..322404abd6 100644 --- a/app/config/locale/translations/ru.json +++ b/app/config/locale/translations/ru.json @@ -12,8 +12,6 @@ "emails.verification.signature": "команда {{project}}", "emails.magicSession.subject": "Логин", "emails.magicSession.hello": "Здравствуйте,", - "emails.magicSession.body": "Перейдите по ссылке, чтобы войти.", - "emails.magicSession.footer": "Если вы не просили войти, используя этот адрес электронной почты, проигнорируйте это сообщение.", "emails.magicSession.thanks": "Спасибо,", "emails.magicSession.signature": "команда {{project}}", "emails.recovery.subject": "Сброс пароля", diff --git a/app/config/locale/translations/sa.json b/app/config/locale/translations/sa.json index b3326110d1..36025af90c 100644 --- a/app/config/locale/translations/sa.json +++ b/app/config/locale/translations/sa.json @@ -12,8 +12,6 @@ "emails.verification.signature": "{{project}} गणः", "emails.magicSession.subject": "संप्रवेशः", "emails.magicSession.hello": "अयि,", - "emails.magicSession.body": "संप्रवेशार्थमिदं संयोगसूत्रमनुसरतु।", - "emails.magicSession.footer": "अनेन ई-पत्रण यदि संप्रवेशो नेष्यते तर्हि वात्र्तामिमामुपेक्षताम्‌।", "emails.magicSession.thanks": "धन्यवादः,", "emails.magicSession.signature": "{{project}} गणः", "emails.recovery.subject": "कूटशब्दपुनयाेजनम्‌", diff --git a/app/config/locale/translations/sd.json b/app/config/locale/translations/sd.json index 26c89a1770..c3371903c4 100644 --- a/app/config/locale/translations/sd.json +++ b/app/config/locale/translations/sd.json @@ -12,8 +12,6 @@ "emails.verification.signature": "{{project}} ٽيم", "emails.magicSession.subject": "لاگ ان", "emails.magicSession.hello": "هي ,", - "emails.magicSession.body": "لاگ ان ٿيڻ لاءِ ھن لنڪ تي عمل ڪريو.", - "emails.magicSession.footer": "جيڪڏھن توھان نه پ پيا ھي لاگ ان استعمال ڪندي اي ميل ، توھان نظر انداز ڪري سگھوٿا ھن پيغام کي.", "emails.magicSession.thanks": "مهرباني,", "emails.magicSession.signature": "{{project}} ٽيم", "emails.recovery.subject": "پاسورڊ ري سيٽ", diff --git a/app/config/locale/translations/si.json b/app/config/locale/translations/si.json index e2053407ea..03415c3c2d 100644 --- a/app/config/locale/translations/si.json +++ b/app/config/locale/translations/si.json @@ -12,8 +12,6 @@ "emails.verification.signature": "{{project}} කණ්ඩායම", "emails.magicSession.subject": "ප්‍රවේශ වන්න", "emails.magicSession.hello": "හේයි,", - "emails.magicSession.body": "ප්‍රවේශ වීමට මෙම සම්බන්ධකය අනුගමනය කරන්න.", - "emails.magicSession.footer": "මෙම විද්‍යුත් තැපෑල භාවිතයෙන් ප්‍රවේශ වීමට ඔබ ඉල්ලුවේ නැත්නම්, ඔබට මෙම පණිවිඩය නොසලකා හැරිය හැක.", "emails.magicSession.thanks": "ස්තුතියි,", "emails.magicSession.signature": "{{project}} කණ්ඩායම", "emails.recovery.subject": "මුරපද යළි පිහිටුවීම", diff --git a/app/config/locale/translations/sk.json b/app/config/locale/translations/sk.json index 1b41d8031d..9fe7a39619 100644 --- a/app/config/locale/translations/sk.json +++ b/app/config/locale/translations/sk.json @@ -12,8 +12,6 @@ "emails.verification.signature": "{{project}} tím", "emails.magicSession.subject": "Prihlásenie", "emails.magicSession.hello": "Ahoj,", - "emails.magicSession.body": "Použi tento link pre prihlásenie.", - "emails.magicSession.footer": "Ak si nepožiadal o prihlásenie cez email, túto správu môžeš ignorovať.", "emails.magicSession.thanks": "Ďakujeme,", "emails.magicSession.signature": "{{project}} tím", "emails.recovery.subject": "Obnovenie hesla", diff --git a/app/config/locale/translations/sl.json b/app/config/locale/translations/sl.json index f7c4f41255..23efd4c675 100644 --- a/app/config/locale/translations/sl.json +++ b/app/config/locale/translations/sl.json @@ -11,8 +11,6 @@ "emails.verification.signature": "", "emails.magicSession.subject": "", "emails.magicSession.hello": ",", - "emails.magicSession.body": "", - "emails.magicSession.footer": "", "emails.magicSession.thanks": ",", "emails.magicSession.signature": "", "emails.recovery.subject": "", diff --git a/app/config/locale/translations/sn.json b/app/config/locale/translations/sn.json index 9fcadfaa82..29cb79142c 100644 --- a/app/config/locale/translations/sn.json +++ b/app/config/locale/translations/sn.json @@ -12,8 +12,6 @@ "emails.verification.signature": "Chikwata che{{project}}", "emails.magicSession.subject": "Pinda", "emails.magicSession.hello": "Hesi,", - "emails.magicSession.body": "Baya chinongedzo ichi kuti upinde muakaundi yako.", - "emails.magicSession.footer": "Kana usina kukumbira kupinda muakaundi yako uchishandisa email iyi, unogona kufuratira meseji iyi.", "emails.magicSession.thanks": "Ndatenda,", "emails.magicSession.signature": "Chikwata che{{project}}", "emails.recovery.subject": "Kuchinja pasiwedhi", diff --git a/app/config/locale/translations/sq.json b/app/config/locale/translations/sq.json index 85aa6637f6..39e6aa0d7c 100644 --- a/app/config/locale/translations/sq.json +++ b/app/config/locale/translations/sq.json @@ -11,8 +11,6 @@ "emails.verification.signature": "", "emails.magicSession.subject": "", "emails.magicSession.hello": ",", - "emails.magicSession.body": "", - "emails.magicSession.footer": "", "emails.magicSession.thanks": ",", "emails.magicSession.signature": "", "emails.recovery.subject": "", diff --git a/app/config/locale/translations/sv.json b/app/config/locale/translations/sv.json index 9bff513f0c..6c6ebf6d16 100644 --- a/app/config/locale/translations/sv.json +++ b/app/config/locale/translations/sv.json @@ -12,8 +12,6 @@ "emails.verification.signature": "{{project}} teamet", "emails.magicSession.subject": "Logga in", "emails.magicSession.hello": "Hej,", - "emails.magicSession.body": "Klicka på denna länk för att logga in.", - "emails.magicSession.footer": "Om du inte bad om att logga in med denna e-postadress kan du ignorera detta mail.", "emails.magicSession.thanks": "Tack,", "emails.magicSession.signature": "{{project}} teamet", "emails.recovery.subject": "Återställ lösenord", diff --git a/app/config/locale/translations/ta.json b/app/config/locale/translations/ta.json index 4afcbe9b63..32e7a5d79d 100644 --- a/app/config/locale/translations/ta.json +++ b/app/config/locale/translations/ta.json @@ -12,8 +12,6 @@ "emails.verification.signature": "{{project}} குழு ", "emails.magicSession.subject": "உள்நுழைய", "emails.magicSession.hello": "ஏய்,", - "emails.magicSession.body": "இந்த இணைப்பைப் பின்தொடரவும் உள்நுழைய", - "emails.magicSession.footer": "இந்த மின்னஞ்சலைப் பயன்படுத்தி உள்நுழையுமாறு உங்களிடம் கேட்கப்படாவிட்டால், இந்தச் செய்தியைப் புறக்கணிக்கலாம்.", "emails.magicSession.thanks": "நன்றி,", "emails.magicSession.signature": "{{project}} குழு", "emails.recovery.subject": "கடவுச்சொல் மீட்டமைப்பு", diff --git a/app/config/locale/translations/te.json b/app/config/locale/translations/te.json index 4073fc72d9..e9d7574675 100644 --- a/app/config/locale/translations/te.json +++ b/app/config/locale/translations/te.json @@ -12,8 +12,6 @@ "emails.verification.signature": "{{project}} జట్", "emails.magicSession.subject": "లాగిన్", "emails.magicSession.hello": "నమస్కారము,", - "emails.magicSession.body": "లాగిన్ చేయడానికి ఈ లింక్ ని అనుసరించండి", - "emails.magicSession.footer": "మీరు ఈ ఇమెయిల్ ని ఉపయోగించి లాగిన్ చేయమని అడగకపోతే, మీరు ఈ సందేశాన్ని విస్మరించవచ్చు", "emails.magicSession.thanks": "ధన్యవాదాలు,", "emails.magicSession.signature": "{{project}} జట్", "emails.recovery.subject": "పాస్వర్డ్ రీసెట్", diff --git a/app/config/locale/translations/th.json b/app/config/locale/translations/th.json index 4003ece666..91e7dff7f6 100644 --- a/app/config/locale/translations/th.json +++ b/app/config/locale/translations/th.json @@ -12,8 +12,6 @@ "emails.verification.signature": "ทีม {{project}}", "emails.magicSession.subject": "เข้าสู่ระบบ", "emails.magicSession.hello": "เรียนผู้ใช้งาน", - "emails.magicSession.body": "กดเข้าไปที่ลิงก์นี้เพื่อเข้าสู่ระบบ", - "emails.magicSession.footer": "หากท่านไม่ได้ต้องการที่จะเข้าสู่ระบบด้วยอีเมลนี้ ท่านสามารถเพิกเฉยข้อความนี้ได้", "emails.magicSession.thanks": "ขอบคุณ", "emails.magicSession.signature": "ทีม {{project}}", "emails.recovery.subject": "รีเซ็ตรหัสผ่าน", diff --git a/app/config/locale/translations/tl.json b/app/config/locale/translations/tl.json index 27ea6c088f..af018bf567 100644 --- a/app/config/locale/translations/tl.json +++ b/app/config/locale/translations/tl.json @@ -12,8 +12,6 @@ "emails.verification.signature": "Pangkat ng {{project}}", "emails.magicSession.subject": "Mag log in", "emails.magicSession.hello": "Kamusta ,", - "emails.magicSession.body": "Sundin ang link na ito upang mag-login.", - "emails.magicSession.footer": "Kung hindi mo hiningi na mag-login gamit ang email na ito, maaari mong balewalain ang mensahe na ito.", "emails.magicSession.thanks": "Salamat,", "emails.magicSession.signature": "Pangkat ng {{project}}", "emails.recovery.subject": "I-reset ang password", diff --git a/app/config/locale/translations/tr.json b/app/config/locale/translations/tr.json index a7183152b6..5fd2447d2b 100644 --- a/app/config/locale/translations/tr.json +++ b/app/config/locale/translations/tr.json @@ -12,8 +12,6 @@ "emails.verification.signature": "{{project}} takımı", "emails.magicSession.subject": "Giriş", "emails.magicSession.hello": "Merhaba,", - "emails.magicSession.body": "Giriş yapmak için tıklayın.", - "emails.magicSession.footer": "Eğer bu eposta adresini kullanarak giriş yapmak istemediyseniz devam etmeyin.", "emails.magicSession.thanks": "Teşekkürler,", "emails.magicSession.signature": "{{project}} takımı", "emails.recovery.subject": "Şifremi Sıfırla", diff --git a/app/config/locale/translations/uk.json b/app/config/locale/translations/uk.json index daa003754d..b7b2c2905d 100644 --- a/app/config/locale/translations/uk.json +++ b/app/config/locale/translations/uk.json @@ -12,8 +12,6 @@ "emails.verification.signature": "команда {{project}}", "emails.magicSession.subject": "Логін", "emails.magicSession.hello": "Вітаємо,", - "emails.magicSession.body": "Перейдіть за цим посиланням, щоб увійти.", - "emails.magicSession.footer": "Якщо ви не просили увійти за допомогою цієї електронної пошти, ви можете ігнорувати це повідомлення.", "emails.magicSession.thanks": "Дякуємо,", "emails.magicSession.signature": "команда {{project}}", "emails.recovery.subject": "Скидання пароля", diff --git a/app/config/locale/translations/ur.json b/app/config/locale/translations/ur.json index 8823e0da2e..f8f0284bcf 100644 --- a/app/config/locale/translations/ur.json +++ b/app/config/locale/translations/ur.json @@ -12,8 +12,6 @@ "emails.verification.signature": "ٹیم۔ {{project}}", "emails.magicSession.subject": "اگ ان کریں", "emails.magicSession.hello": "خوش آمدید،", - "emails.magicSession.body": "لاگ ان کرنے کے لیے اس لنک پر عمل کریں۔", - "emails.magicSession.footer": "اگر آپ نے اس ای میل کا استعمال کرتے ہوئے لاگ ان کرنے کے لیے نہیں کہا تو آپ اس پیغام کو نظر انداز کر سکتے ہیں۔", "emails.magicSession.thanks": "شکریہ،", "emails.magicSession.signature": "ٹیم۔ {{project}}", "emails.recovery.subject": "پاس ورڈ ری سیٹ۔", diff --git a/app/config/locale/translations/vi.json b/app/config/locale/translations/vi.json index e9168d9ab8..5ed045ce19 100644 --- a/app/config/locale/translations/vi.json +++ b/app/config/locale/translations/vi.json @@ -12,8 +12,6 @@ "emails.verification.signature": "Nhóm {{project}}", "emails.magicSession.subject": "Đăng nhập", "emails.magicSession.hello": "Chào", - "emails.magicSession.body": "Nhấn vào đường dẫn sau để đăng nhập.", - "emails.magicSession.footer": "Nếu bạn không yêu cầu đăng nhập bằng email, bạn có thể bỏ qua email này.", "emails.magicSession.thanks": "Cảm ơn", "emails.magicSession.signature": "Nhóm {{project}}", "emails.recovery.subject": "Thiết lập lại mật khẩu", diff --git a/app/config/locale/translations/zh-cn.json b/app/config/locale/translations/zh-cn.json index 554b506e9e..b9319badfc 100644 --- a/app/config/locale/translations/zh-cn.json +++ b/app/config/locale/translations/zh-cn.json @@ -12,8 +12,6 @@ "emails.verification.signature": "{{project}} 团队", "emails.magicSession.subject": "登录", "emails.magicSession.hello": "你好、", - "emails.magicSession.body": "点此链接登录。", - "emails.magicSession.footer": "如果您没有要求使用此电子邮件登录,则可忽略此消息。", "emails.magicSession.thanks": "谢谢、", "emails.magicSession.signature": "{{project}} 团队", "emails.recovery.subject": "重设密码", diff --git a/app/config/locale/translations/zh-tw.json b/app/config/locale/translations/zh-tw.json index bb9868d679..0c2ba309d9 100644 --- a/app/config/locale/translations/zh-tw.json +++ b/app/config/locale/translations/zh-tw.json @@ -12,8 +12,6 @@ "emails.verification.signature": "{{project}} 團隊", "emails.magicSession.subject": "登入", "emails.magicSession.hello": "嗨、", - "emails.magicSession.body": "點此連結登入。", - "emails.magicSession.footer": "如果您沒有要求使用此電子郵件登入,則可以忽略此消息。", "emails.magicSession.thanks": "謝謝、", "emails.magicSession.signature": "{{project}} 團隊", "emails.recovery.subject": "重設密碼", From c3665c35ff8eb3a9ea28329b7502d3ebb4bc598b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Ba=C4=8Do?= Date: Tue, 12 Aug 2025 14:14:07 +0200 Subject: [PATCH 4/6] Add CI/CD job --- .github/workflows/static-analysis.yml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.github/workflows/static-analysis.yml b/.github/workflows/static-analysis.yml index 04f8c822c7..80831c4d36 100644 --- a/.github/workflows/static-analysis.yml +++ b/.github/workflows/static-analysis.yml @@ -13,4 +13,9 @@ jobs: - name: Run CodeQL run: | docker run --rm -v $PWD:/app composer:2.6 sh -c \ - "composer install --profile --ignore-platform-reqs && composer check" \ No newline at end of file + "composer install --profile --ignore-platform-reqs && composer check" + + - name: Run Locale check + run: | + docker run --rm -v $PWD:/app node:24-alpine sh -c \ + "cd .github/workflows/static-analysis/locale && node index.js" \ No newline at end of file From b8165579707c41d444f3eab79e8a98b07d537968 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Ba=C4=8Do?= Date: Tue, 12 Aug 2025 15:13:08 +0200 Subject: [PATCH 5/6] Add fallback locale support + tests --- app/config/locale/translations/de.json | 3 +- app/config/locale/translations/en.json | 3 +- app/controllers/api/projects.php | 2 + app/controllers/mock.php | 20 +++++++ app/init/resources.php | 6 ++- composer.json | 2 +- composer.lock | 22 ++++---- .../Platform/Workers/Certificates.php | 1 + tests/e2e/Services/Locale/LocaleBase.php | 53 +++++++++++++++++++ 9 files changed, 95 insertions(+), 17 deletions(-) diff --git a/app/config/locale/translations/de.json b/app/config/locale/translations/de.json index ce59755f88..8f17faf136 100644 --- a/app/config/locale/translations/de.json +++ b/app/config/locale/translations/de.json @@ -245,5 +245,6 @@ "emails.otpSession.clientInfo": "Diese Anmeldung wurde über {{agentClient}} auf {{agentDevice}} {{agentOs}} angefordert. Wenn Sie die Anmeldung nicht angefordert haben, können Sie diese E-Mail getrost ignorieren.", "emails.otpSession.securityPhrase": "Die Sicherheitsphrase für diese E-Mail lautet {{phrase}}. Sie können dieser E-Mail vertrauen, wenn diese Phrase mit der Phrase übereinstimmt, die beim Anmelden angezeigt wird.", "emails.otpSession.thanks": "Danke,", - "emails.otpSession.signature": "{{project}} Team" + "emails.otpSession.signature": "{{project}} Team", + "mock": "Eine Beispielübersetzung für Testzwecke." } diff --git a/app/config/locale/translations/en.json b/app/config/locale/translations/en.json index 072a7f7552..92706b04ab 100644 --- a/app/config/locale/translations/en.json +++ b/app/config/locale/translations/en.json @@ -274,5 +274,6 @@ "continents.eu": "Europe", "continents.na": "North America", "continents.oc": "Oceania", - "continents.sa": "South America" + "continents.sa": "South America", + "mock": "A mock translation for testing purposes." } diff --git a/app/controllers/api/projects.php b/app/controllers/api/projects.php index 6f8e2d45b8..be06ea01dd 100644 --- a/app/controllers/api/projects.php +++ b/app/controllers/api/projects.php @@ -2267,6 +2267,8 @@ App::get('/v1/projects/:projectId/templates/email/:type/:locale') $template = $templates['email.' . $type . '-' . $locale] ?? null; $localeObj = new Locale($locale); + $localeObj->setFallback(System::getEnv('_APP_LOCALE', 'en')); + if (is_null($template)) { /** * different templates, different placeholders. diff --git a/app/controllers/mock.php b/app/controllers/mock.php index 0684e5294a..40ddae8f30 100644 --- a/app/controllers/mock.php +++ b/app/controllers/mock.php @@ -13,6 +13,7 @@ use Utopia\Database\Helpers\ID; use Utopia\Database\Helpers\Permission; use Utopia\Database\Helpers\Role; use Utopia\Database\Validator\UID; +use Utopia\Locale\Locale; use Utopia\System\System; use Utopia\Validator\Host; use Utopia\Validator\Text; @@ -35,6 +36,25 @@ App::get('/v1/mock/tests/general/oauth2') $response->redirect($redirectURI . '?' . \http_build_query(['code' => 'abcdef', 'state' => $state])); }); +App::get('/v1/mock/tests/locale') + ->desc('Mock locale translation key') + ->groups(['mock']) + ->label('scope', 'public') + ->label('docs', false) + ->label('mock', true) + ->inject('locale') + ->inject('localeCodes') + ->inject('request') + ->inject('response') + ->action(function (Locale $locale, array $localeCodes, Request $request, Response $response) { + $localeParam = (string) $request->getParam('locale', $request->getHeader('x-appwrite-locale', '')); + if (\in_array($localeParam, $localeCodes)) { + $locale->setDefault($localeParam); + } + + $response->send($locale->getText('mock')); + }); + App::get('/v1/mock/tests/general/oauth2/token') ->desc('OAuth2 Token') ->groups(['mock']) diff --git a/app/init/resources.php b/app/init/resources.php index 1d3b25062c..9ae132d30c 100644 --- a/app/init/resources.php +++ b/app/init/resources.php @@ -70,7 +70,11 @@ App::setResource('hooks', function ($register) { }, ['register']); App::setResource('register', fn () => $register); -App::setResource('locale', fn () => new Locale(System::getEnv('_APP_LOCALE', 'en'))); +App::setResource('locale', function () { + $locale = new Locale(System::getEnv('_APP_LOCALE', 'en')); + $locale->setFallback(System::getEnv('_APP_LOCALE', 'en')); + return $locale; +}); App::setResource('localeCodes', function () { return array_map(fn ($locale) => $locale['code'], Config::getParam('locale-codes', [])); diff --git a/composer.json b/composer.json index 8ba8e49f4a..7039a65da0 100644 --- a/composer.json +++ b/composer.json @@ -60,7 +60,7 @@ "utopia-php/framework": "0.33.*", "utopia-php/fetch": "0.4.*", "utopia-php/image": "0.8.*", - "utopia-php/locale": "0.4.*", + "utopia-php/locale": "0.8.*", "utopia-php/logger": "0.6.*", "utopia-php/messaging": "0.18.*", "utopia-php/migration": "0.11.*", diff --git a/composer.lock b/composer.lock index 117e91b621..cc27808181 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "761a7e17b49381e68038c92873888125", + "content-hash": "c0641df1dfb292f9d8f0d6b6278d0e9c", "packages": [ { "name": "adhocore/jwt", @@ -3945,22 +3945,24 @@ }, { "name": "utopia-php/locale", - "version": "0.4.0", + "version": "0.8.0", "source": { "type": "git", "url": "https://github.com/utopia-php/locale.git", - "reference": "c2d9358d0fe2f6b6ed5448369f9d1e430c615447" + "reference": "10ffc869c904c45e32ab0c61f4b33ba774777eb6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/utopia-php/locale/zipball/c2d9358d0fe2f6b6ed5448369f9d1e430c615447", - "reference": "c2d9358d0fe2f6b6ed5448369f9d1e430c615447", + "url": "https://api.github.com/repos/utopia-php/locale/zipball/10ffc869c904c45e32ab0c61f4b33ba774777eb6", + "reference": "10ffc869c904c45e32ab0c61f4b33ba774777eb6", "shasum": "" }, "require": { "php": ">=7.4" }, "require-dev": { + "laravel/pint": "1.2.*", + "phpstan/phpstan": "1.*", "phpunit/phpunit": "^9.3", "vimeo/psalm": "4.0.1" }, @@ -3974,12 +3976,6 @@ "license": [ "MIT" ], - "authors": [ - { - "name": "Eldad Fux", - "email": "eldad@appwrite.io" - } - ], "description": "A simple locale library to manage application translations", "keywords": [ "framework", @@ -3990,9 +3986,9 @@ ], "support": { "issues": "https://github.com/utopia-php/locale/issues", - "source": "https://github.com/utopia-php/locale/tree/0.4.0" + "source": "https://github.com/utopia-php/locale/tree/0.8.0" }, - "time": "2021-07-24T11:35:55+00:00" + "time": "2025-08-12T12:58:26+00:00" }, { "name": "utopia-php/logger", diff --git a/src/Appwrite/Platform/Workers/Certificates.php b/src/Appwrite/Platform/Workers/Certificates.php index 300383ef6d..a3fad056bf 100644 --- a/src/Appwrite/Platform/Workers/Certificates.php +++ b/src/Appwrite/Platform/Workers/Certificates.php @@ -373,6 +373,7 @@ class Certificates extends Action Console::warning('Cannot renew domain (' . $domain . ') on attempt no. ' . $attempt . ' certificate: ' . $errorMessage); $locale = new Locale(System::getEnv('_APP_LOCALE', 'en')); + $locale->setFallback(System::getEnv('_APP_LOCALE', 'en')); // Send mail to administrator mail $template = Template::fromFile(__DIR__ . '/../../../../app/config/locale/templates/email-certificate-failed.tpl'); diff --git a/tests/e2e/Services/Locale/LocaleBase.php b/tests/e2e/Services/Locale/LocaleBase.php index ee731a99e5..431a2a4409 100644 --- a/tests/e2e/Services/Locale/LocaleBase.php +++ b/tests/e2e/Services/Locale/LocaleBase.php @@ -269,4 +269,57 @@ trait LocaleBase return []; } + + public function testFallbackLocale() + { + $en = 'A mock translation for testing purposes.'; + $de = 'Eine Beispielübersetzung für Testzwecke.'; + + $response = $this->client->call(Client::METHOD_GET, '/mock/tests/locale', [ + 'x-appwrite-project' => $this->getProject()['$id'], + ]); + + $this->assertEquals($response['headers']['status-code'], 200); + $this->assertEquals($en, $response['body']); + + $response = $this->client->call(Client::METHOD_GET, '/mock/tests/locale', [ + 'x-appwrite-project' => $this->getProject()['$id'], + 'x-appwrite-locale' => 'en' + ]); + + $this->assertEquals($response['headers']['status-code'], 200); + $this->assertEquals($en, $response['body']); + + $response = $this->client->call(Client::METHOD_GET, '/mock/tests/locale', [ + 'x-appwrite-project' => $this->getProject()['$id'], + 'x-appwrite-locale' => 'de' + ]); + + $this->assertEquals($response['headers']['status-code'], 200); + $this->assertEquals($de, $response['body']); + + $response = $this->client->call(Client::METHOD_GET, '/mock/tests/locale', [ + 'x-appwrite-project' => $this->getProject()['$id'], + 'x-appwrite-locale' => 'cs' + ]); + + $this->assertEquals($response['headers']['status-code'], 200); + $this->assertEquals($en, $response['body']); + + $response = $this->client->call(Client::METHOD_GET, '/mock/tests/locale', [ + 'x-appwrite-project' => $this->getProject()['$id'], + 'x-appwrite-locale' => 'non-existing' + ]); + + $this->assertEquals($response['headers']['status-code'], 200); + $this->assertEquals($en, $response['body']); + + $response = $this->client->call(Client::METHOD_GET, '/mock/tests/locale', [ + 'x-appwrite-project' => $this->getProject()['$id'], + 'x-appwrite-locale' => '' + ]); + + $this->assertEquals($response['headers']['status-code'], 200); + $this->assertEquals($en, $response['body']); + } } From 6eaa2015b02a81ba62da4a600f5c473755268965 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matej=20Ba=C4=8Do?= Date: Tue, 12 Aug 2025 15:18:31 +0200 Subject: [PATCH 6/6] Fix CI/CD command --- .github/workflows/static-analysis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/static-analysis.yml b/.github/workflows/static-analysis.yml index 80831c4d36..1c5f36ace3 100644 --- a/.github/workflows/static-analysis.yml +++ b/.github/workflows/static-analysis.yml @@ -18,4 +18,4 @@ jobs: - name: Run Locale check run: | docker run --rm -v $PWD:/app node:24-alpine sh -c \ - "cd .github/workflows/static-analysis/locale && node index.js" \ No newline at end of file + "cd /app/.github/workflows/static-analysis/locale && node index.js"