diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index b7dc3afd9c8507..f2befa4c32da2c 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -33,7 +33,7 @@ jobs: with: filters: | has-files-requiring-all-checks: - - "!(**.md|.github/CODEOWNERS|docs/**|help/**|apps/web/public/static/locales/**/common.json)" + - "!(**.md|.github/CODEOWNERS|docs/**|help/**|packages/lib/server/locales/**/common.json)" - name: Get Latest Commit SHA id: get_sha run: | diff --git a/apps/api/v2/next-i18next.config.js b/apps/api/v2/next-i18next.config.js index a07cf209817826..ee9d17e313e884 100644 --- a/apps/api/v2/next-i18next.config.js +++ b/apps/api/v2/next-i18next.config.js @@ -5,7 +5,7 @@ const i18nConfig = require("@calcom/config/next-i18next.config"); /** @type {import("next-i18next").UserConfig} */ const config = { ...i18nConfig, - localePath: path.resolve("../../web/public/static/locales"), + localePath: path.resolve("../../packages/lib/server/locales"), }; module.exports = config; diff --git a/apps/web/app/(booking-page-wrapper)/org/[orgSlug]/[user]/[type]/embed/page.tsx b/apps/web/app/(booking-page-wrapper)/org/[orgSlug]/[user]/[type]/embed/page.tsx index 2f58711984f413..37c80e8c4cb268 100644 --- a/apps/web/app/(booking-page-wrapper)/org/[orgSlug]/[user]/[type]/embed/page.tsx +++ b/apps/web/app/(booking-page-wrapper)/org/[orgSlug]/[user]/[type]/embed/page.tsx @@ -32,7 +32,7 @@ const ServerPage = async ({ params, searchParams }: ServerPageProps) => { const eventLocale = props.eventData?.interfaceLanguage; const ns = "common"; - let translations; + let translations: Record = {}; if (eventLocale) { const ns = "common"; translations = await loadTranslations(eventLocale, ns); diff --git a/apps/web/app/(booking-page-wrapper)/org/[orgSlug]/[user]/[type]/page.tsx b/apps/web/app/(booking-page-wrapper)/org/[orgSlug]/[user]/[type]/page.tsx index 9f8fa8a7dc8c3d..8aa98742a6a03b 100644 --- a/apps/web/app/(booking-page-wrapper)/org/[orgSlug]/[user]/[type]/page.tsx +++ b/apps/web/app/(booking-page-wrapper)/org/[orgSlug]/[user]/[type]/page.tsx @@ -68,7 +68,7 @@ const ServerPage = async ({ params, searchParams }: PageProps) => { const eventLocale = props.eventData?.interfaceLanguage; const ns = "common"; - let translations; + let translations: Record = {}; if (eventLocale) { const ns = "common"; translations = await loadTranslations(eventLocale, ns); diff --git a/apps/web/next.config.js b/apps/web/next.config.js index 255c1c2a2bdc34..7167a90c64c6e7 100644 --- a/apps/web/next.config.js +++ b/apps/web/next.config.js @@ -1,5 +1,5 @@ require("dotenv").config({ path: "../../.env" }); -const englishTranslation = require("./public/static/locales/en/common.json"); +const englishTranslation = require("../../packages/lib/server/locales/en/common.json"); const { withAxiom } = require("next-axiom"); const { version } = require("./package.json"); const { diff --git a/apps/web/package.json b/apps/web/package.json index 291ffeb17cccb4..fde8357a63469a 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -15,7 +15,7 @@ "type-check": "tsc --pretty --noEmit", "type-check:ci": "tsc-absolute --pretty --noEmit", "sentry:release": "NODE_OPTIONS='--max-old-space-size=6144' node scripts/create-sentry-release.js", - "copy-static": "node scripts/copy-app-store-static.js", + "copy-static": "node scripts/copy-app-store-static.js && node scripts/copy-locales-static.js", "build": "yarn copy-static && next build && yarn sentry:release", "start": "next start", "lint": "eslint . --ignore-path .gitignore", diff --git a/apps/web/playwright/lib/localize.ts b/apps/web/playwright/lib/localize.ts index 2afc3d46d3eaaf..7b6feccb7b7e75 100644 --- a/apps/web/playwright/lib/localize.ts +++ b/apps/web/playwright/lib/localize.ts @@ -2,7 +2,7 @@ import { loadJSON } from "./loadJSON"; // Provide an standalone localize utility not managed by next-i18n export async function localize(locale: string) { - const localeModule = `../../public/static/locales/${locale}/common.json`; + const localeModule = `../../../../packages/lib/server/locales/${locale}/common.json`; const localeMap = loadJSON(localeModule); return (message: string) => { if (message in localeMap) return localeMap[message]; diff --git a/apps/web/scripts/check-missing-translations.ts b/apps/web/scripts/check-missing-translations.ts index d032b48085b964..3435286f99df49 100644 --- a/apps/web/scripts/check-missing-translations.ts +++ b/apps/web/scripts/check-missing-translations.ts @@ -3,7 +3,7 @@ import { join } from "path"; const TEMPLATE_LANGUAGE = "en"; const SPECIFIC_LOCALES = process.argv.slice(2) || []; -const LOCALES_PATH = join(__dirname, "../public/static/locales"); +const LOCALES_PATH = join(__dirname, "../../../packages/lib/server/locales"); const ALL_LOCALES = readdirSync(LOCALES_PATH); diff --git a/apps/web/scripts/copy-locales-static.js b/apps/web/scripts/copy-locales-static.js new file mode 100644 index 00000000000000..e0cc48d3d8f567 --- /dev/null +++ b/apps/web/scripts/copy-locales-static.js @@ -0,0 +1,25 @@ +const fs = require("fs"); +const path = require("path"); +const glob = require("glob"); + +const copyLocalesStatic = () => { + const localeFiles = glob.sync("../../packages/lib/server/locales/**/*.json", { nodir: true }); + + localeFiles.forEach((file) => { + const relativePath = file.replace("../../packages/lib/server/locales/", ""); + + // Create destination directory if it doesn't exist + const destDir = path.join(process.cwd(), "public", "static", "locales", path.dirname(relativePath)); + if (!fs.existsSync(destDir)) { + fs.mkdirSync(destDir, { recursive: true }); + } + + // Copy file to destination + const destPath = path.join(process.cwd(), "public", "static", "locales", relativePath); + fs.copyFileSync(file, destPath); + console.log(`Copied ${file} to ${destPath}`); + }); +}; + +// Run the copy function +copyLocalesStatic(); diff --git a/i18n-unused.config.js b/i18n-unused.config.js index 4b4310e2735f2d..3909b124f40a72 100644 --- a/i18n-unused.config.js +++ b/i18n-unused.config.js @@ -23,7 +23,7 @@ const translationKeyRegex = /(?>(); const i18nInstanceCache = new Map(); @@ -10,27 +10,25 @@ const i18nInstanceCache = new Map(); * Implements caching to avoid redundant network requests * @returns {Promise>} English translations object or empty object on failure */ -async function loadFallbackTranslations() { - const cacheKey = "en-common"; +async function loadFallbackTranslations(): Promise> { + const cacheKey = `en-common-${CALCOM_VERSION}`; if (translationCache.has(cacheKey)) { - return translationCache.get(cacheKey); + return translationCache.get(cacheKey)!; } try { - const res = await fetch(`${WEBAPP_URL}/static/locales/en/common.json`, { - cache: process.env.NODE_ENV === "production" ? "force-cache" : "no-store", - }); + const { getBundledTranslations } = await import("./translationBundler"); + const translations = getBundledTranslations("en", "common"); - if (!res.ok) { - throw new Error(`Failed to fetch fallback translations: ${res.status}`); + if (Object.keys(translations).length === 0) { + throw new Error("No English fallback translations found"); } - const translations = await res.json(); translationCache.set(cacheKey, translations); return translations; } catch (error) { - console.error("Could not fetch fallback translations:", error); + console.error("Could not load fallback translations:", error); return {}; } } @@ -41,25 +39,22 @@ async function loadFallbackTranslations() { * @param {string} ns - The namespace for the translations * @returns {Promise>} Translations object or fallback translations on failure */ -export async function loadTranslations(_locale: string, ns: string) { +export async function loadTranslations(_locale: string, ns: string): Promise> { const locale = _locale === "zh" ? "zh-CN" : _locale; - const cacheKey = `${locale}-${ns}`; + const cacheKey = `${locale}-${ns}-${CALCOM_VERSION}`; if (translationCache.has(cacheKey)) { - return translationCache.get(cacheKey); + return translationCache.get(cacheKey)!; } try { - const url = `${WEBAPP_URL}/static/locales/${locale}/${ns}.json`; - const response = await fetch(url, { - cache: process.env.NODE_ENV === "production" ? "force-cache" : "no-store", - }); + const { getBundledTranslations } = await import("./translationBundler"); + const translations = getBundledTranslations(locale, ns); - if (!response.ok) { - throw new Error(`Failed to fetch translations: ${response.status}`); + if (Object.keys(translations).length === 0) { + throw new Error(`No translations found for ${locale}/${ns}`); } - const translations = await response.json(); translationCache.set(cacheKey, translations); return translations; } catch (error) { @@ -76,7 +71,7 @@ export async function loadTranslations(_locale: string, ns: string) { * @returns {Promise} A translation function bound to the specified locale and namespace */ export const getTranslation = async (locale: string, ns: string) => { - const cacheKey = `${locale}-${ns}`; + const cacheKey = `${locale}-${ns}-${CALCOM_VERSION}`; if (i18nInstanceCache.has(cacheKey)) { return i18nInstanceCache.get(cacheKey).getFixedT(locale, ns); } diff --git a/apps/web/public/static/locales/ar/common.json b/packages/lib/server/locales/ar/common.json similarity index 99% rename from apps/web/public/static/locales/ar/common.json rename to packages/lib/server/locales/ar/common.json index 850cf5da880302..c6f63fd5b8bf43 100644 --- a/apps/web/public/static/locales/ar/common.json +++ b/packages/lib/server/locales/ar/common.json @@ -3360,4 +3360,4 @@ "license_key_saved": "تم حفظ مفتاح الترخيص بنجاح", "timezone_mismatch_tooltip": "أنت تشاهد التقرير بناءً على المنطقة الزمنية لملفك الشخصي ({{userTimezone}})، بينما متصفحك مضبوط على المنطقة الزمنية ({{browserTimezone}})", "ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ أضف السلاسل الجديدة أعلاه هنا ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑" -} \ No newline at end of file +} diff --git a/apps/web/public/static/locales/az/common.json b/packages/lib/server/locales/az/common.json similarity index 99% rename from apps/web/public/static/locales/az/common.json rename to packages/lib/server/locales/az/common.json index c9f1edd35cab40..d6fc7538f7be3f 100644 --- a/apps/web/public/static/locales/az/common.json +++ b/packages/lib/server/locales/az/common.json @@ -3360,4 +3360,4 @@ "license_key_saved": "Lisenziya açarı uğurla saxlanıldı", "timezone_mismatch_tooltip": "Siz hesabatı profil saat qurşağınıza ({{userTimezone}}) əsasən görürsünüz, brauzeriniz isə başqa saat qurşağına ({{browserTimezone}}) təyin edilib", "ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ Yeni sətirləri bura əlavə edin ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑" -} \ No newline at end of file +} diff --git a/apps/web/public/static/locales/bg/common.json b/packages/lib/server/locales/bg/common.json similarity index 99% rename from apps/web/public/static/locales/bg/common.json rename to packages/lib/server/locales/bg/common.json index fee0aa5aabfc49..9cfbf24b24c218 100644 --- a/apps/web/public/static/locales/bg/common.json +++ b/packages/lib/server/locales/bg/common.json @@ -3360,4 +3360,4 @@ "license_key_saved": "Лицензионният ключ е успешно записан", "timezone_mismatch_tooltip": "Преглеждате отчета според часовата зона на вашия профил ({{userTimezone}}), докато браузърът ви е настроен на часова зона ({{browserTimezone}})", "ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ Добавете новите си низове над този ред ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑" -} \ No newline at end of file +} diff --git a/apps/web/public/static/locales/bn/common.json b/packages/lib/server/locales/bn/common.json similarity index 99% rename from apps/web/public/static/locales/bn/common.json rename to packages/lib/server/locales/bn/common.json index 55ffe062eae4f8..2a65c9f8705e5e 100644 --- a/apps/web/public/static/locales/bn/common.json +++ b/packages/lib/server/locales/bn/common.json @@ -3360,4 +3360,4 @@ "license_key_saved": "লাইসেন্স কী সফলভাবে সংরক্ষিত হয়েছে", "timezone_mismatch_tooltip": "আপনি আপনার প্রোফাইল টাইমজোন ({{userTimezone}}) অনুসারে রিপোর্ট দেখছেন, যখন আপনার ব্রাউজার টাইমজোন ({{browserTimezone}}) এ সেট করা আছে", "ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑ুষান্ত" -} \ No newline at end of file +} diff --git a/apps/web/public/static/locales/ca/common.json b/packages/lib/server/locales/ca/common.json similarity index 99% rename from apps/web/public/static/locales/ca/common.json rename to packages/lib/server/locales/ca/common.json index e738abbc017367..9aac0ea9b31134 100644 --- a/apps/web/public/static/locales/ca/common.json +++ b/packages/lib/server/locales/ca/common.json @@ -3360,4 +3360,4 @@ "license_key_saved": "Clau de llicència desada correctament", "timezone_mismatch_tooltip": "Esteu veient l'informe basat en la zona horària del vostre perfil ({{userTimezone}}), mentre que el vostre navegador està configurat a la zona horària ({{browserTimezone}})", "ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ Afegiu les vostres noves cadenes a dalt ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑" -} \ No newline at end of file +} diff --git a/apps/web/public/static/locales/cs/common.json b/packages/lib/server/locales/cs/common.json similarity index 99% rename from apps/web/public/static/locales/cs/common.json rename to packages/lib/server/locales/cs/common.json index 80b5beafa804df..b07cdbf64d90c5 100644 --- a/apps/web/public/static/locales/cs/common.json +++ b/packages/lib/server/locales/cs/common.json @@ -3360,4 +3360,4 @@ "license_key_saved": "Licenční klíč byl úspěšně uložen", "timezone_mismatch_tooltip": "Prohlížíte si report na základě časového pásma vašeho profilu ({{userTimezone}}), zatímco váš prohlížeč je nastaven na časové pásmo ({{browserTimezone}})", "ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ Přidejte své nové řetězce nahoru ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑" -} \ No newline at end of file +} diff --git a/apps/web/public/static/locales/da/common.json b/packages/lib/server/locales/da/common.json similarity index 99% rename from apps/web/public/static/locales/da/common.json rename to packages/lib/server/locales/da/common.json index 684aec1b743298..c55288fd540f70 100644 --- a/apps/web/public/static/locales/da/common.json +++ b/packages/lib/server/locales/da/common.json @@ -3360,4 +3360,4 @@ "license_key_saved": "Licensnøgle blev gemt med succes", "timezone_mismatch_tooltip": "Du ser rapporten baseret på din profils tidszone ({{userTimezone}}), mens din browser er indstillet til tidszonen ({{browserTimezone}})", "ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ Tilføj dine nye strenge ovenfor her ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑" -} \ No newline at end of file +} diff --git a/apps/web/public/static/locales/de/common.json b/packages/lib/server/locales/de/common.json similarity index 100% rename from apps/web/public/static/locales/de/common.json rename to packages/lib/server/locales/de/common.json diff --git a/apps/web/public/static/locales/el/common.json b/packages/lib/server/locales/el/common.json similarity index 99% rename from apps/web/public/static/locales/el/common.json rename to packages/lib/server/locales/el/common.json index 6ee4dabb5b8c0b..d01137a658ea1b 100644 --- a/apps/web/public/static/locales/el/common.json +++ b/packages/lib/server/locales/el/common.json @@ -3360,4 +3360,4 @@ "license_key_saved": "Το κλειδί άδειας αποθηκεύτηκε με επιτυχία", "timezone_mismatch_tooltip": "Βλέπετε την αναφορά με βάση τη ζώνη ώρας του προφίλ σας ({{userTimezone}}), ενώ ο περιηγητής σας είναι ρυθμισμένος στη ζώνη ώρας ({{browserTimezone}})", "ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ Προσθέστε τις νέες συμβολοσειρές σας πάνω από εδώ ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑" -} \ No newline at end of file +} diff --git a/apps/web/public/static/locales/en/common.json b/packages/lib/server/locales/en/common.json similarity index 99% rename from apps/web/public/static/locales/en/common.json rename to packages/lib/server/locales/en/common.json index 5bc7990ab03288..b9103f0d9a97c5 100644 --- a/apps/web/public/static/locales/en/common.json +++ b/packages/lib/server/locales/en/common.json @@ -283,7 +283,7 @@ "guests": "Guests", "guest": "Guest", "web_conferencing_details_to_follow": "Web conferencing details to follow in the confirmation email.", - "confirmation":"Confirmation", + "confirmation": "Confirmation", "what_booker_should_provide": "What your booker should provide to receive confirmations", "404_the_user": "The username", "username": "Username", diff --git a/apps/web/public/static/locales/es-419/common.json b/packages/lib/server/locales/es-419/common.json similarity index 99% rename from apps/web/public/static/locales/es-419/common.json rename to packages/lib/server/locales/es-419/common.json index e5b5c1d22af2fb..fcb4d020f2cf72 100644 --- a/apps/web/public/static/locales/es-419/common.json +++ b/packages/lib/server/locales/es-419/common.json @@ -3360,4 +3360,4 @@ "license_key_saved": "Clave de licencia guardada correctamente", "timezone_mismatch_tooltip": "Estás viendo el informe basado en la zona horaria de tu perfil ({{userTimezone}}), mientras que tu navegador está configurado en la zona horaria ({{browserTimezone}})", "ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ Agrega tus nuevas cadenas arriba de esta línea ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑" -} \ No newline at end of file +} diff --git a/apps/web/public/static/locales/es/common.json b/packages/lib/server/locales/es/common.json similarity index 99% rename from apps/web/public/static/locales/es/common.json rename to packages/lib/server/locales/es/common.json index 2eac870db33164..cd7932fddfa1dd 100644 --- a/apps/web/public/static/locales/es/common.json +++ b/packages/lib/server/locales/es/common.json @@ -3360,4 +3360,4 @@ "license_key_saved": "Clave de licencia guardada correctamente", "timezone_mismatch_tooltip": "Estás viendo el informe basado en la zona horaria de tu perfil ({{userTimezone}}), mientras que tu navegador está configurado en la zona horaria ({{browserTimezone}})", "ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ Agregue sus nuevas cadenas arriba ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑" -} \ No newline at end of file +} diff --git a/apps/web/public/static/locales/et/common.json b/packages/lib/server/locales/et/common.json similarity index 99% rename from apps/web/public/static/locales/et/common.json rename to packages/lib/server/locales/et/common.json index e5dda8ff207cfa..852e3860ac1b6b 100644 --- a/apps/web/public/static/locales/et/common.json +++ b/packages/lib/server/locales/et/common.json @@ -3360,4 +3360,4 @@ "license_key_saved": "Litsentsivõti salvestati edukalt", "timezone_mismatch_tooltip": "Te vaatate aruannet oma profiili ajavööndi ({{userTimezone}}) alusel, samal ajal kui teie brauser on seadistatud ajavööndisse ({{browserTimezone}})", "ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ Add your new strings above here ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑" -} \ No newline at end of file +} diff --git a/apps/web/public/static/locales/eu/common.json b/packages/lib/server/locales/eu/common.json similarity index 99% rename from apps/web/public/static/locales/eu/common.json rename to packages/lib/server/locales/eu/common.json index 58daf56d0421d9..6df084944feed8 100644 --- a/apps/web/public/static/locales/eu/common.json +++ b/packages/lib/server/locales/eu/common.json @@ -3360,4 +3360,4 @@ "license_key_saved": "Lizentzia gakoa ondo gorde da", "timezone_mismatch_tooltip": "Txostena zure profileko ordu-zonaren arabera ikusten ari zara ({{userTimezone}}), zure nabigatzailea ordu-zona honetan ezarrita dagoen bitartean ({{browserTimezone}})", "ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ Gehitu zure kate berriak honen gainean ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑" -} \ No newline at end of file +} diff --git a/apps/web/public/static/locales/fi/common.json b/packages/lib/server/locales/fi/common.json similarity index 99% rename from apps/web/public/static/locales/fi/common.json rename to packages/lib/server/locales/fi/common.json index 6c8b62b2c8ad7e..1a3c507ab545bc 100644 --- a/apps/web/public/static/locales/fi/common.json +++ b/packages/lib/server/locales/fi/common.json @@ -3360,4 +3360,4 @@ "license_key_saved": "Lisenssiavain tallennettu onnistuneesti", "timezone_mismatch_tooltip": "Tarkastelet raporttia profiilisi aikavyöhykkeen ({{userTimezone}}) mukaan, kun taas selaimesi on asetettu aikavyöhykkeelle ({{browserTimezone}})", "ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ Lisää uudet merkkijonot tämän yläpuolelle ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑" -} \ No newline at end of file +} diff --git a/apps/web/public/static/locales/fr/common.json b/packages/lib/server/locales/fr/common.json similarity index 100% rename from apps/web/public/static/locales/fr/common.json rename to packages/lib/server/locales/fr/common.json diff --git a/apps/web/public/static/locales/he/common.json b/packages/lib/server/locales/he/common.json similarity index 99% rename from apps/web/public/static/locales/he/common.json rename to packages/lib/server/locales/he/common.json index fa9b173bbed99e..ce584a2fa5beaf 100644 --- a/apps/web/public/static/locales/he/common.json +++ b/packages/lib/server/locales/he/common.json @@ -3360,4 +3360,4 @@ "license_key_saved": "מפתח הרישיון נשמר בהצלחה", "timezone_mismatch_tooltip": "אתה צופה בדוח על בסיס אזור הזמן של הפרופיל שלך ({{userTimezone}}), בעוד שהדפדפן שלך מוגדר לאזור זמן ({{browserTimezone}})", "ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ Add your new strings above here ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑" -} \ No newline at end of file +} diff --git a/apps/web/public/static/locales/hr/common.json b/packages/lib/server/locales/hr/common.json similarity index 99% rename from apps/web/public/static/locales/hr/common.json rename to packages/lib/server/locales/hr/common.json index 67d00d7aa4e07b..314c86c4605806 100644 --- a/apps/web/public/static/locales/hr/common.json +++ b/packages/lib/server/locales/hr/common.json @@ -453,4 +453,4 @@ "reschedule_cta_short": "Zakažite ponovno ovdje.", "you_and_conjunction": "Vi &", "email_survey_triggered_by_workflow": "Ova anketa je pokrenuta Workflow-om u Calu." -} \ No newline at end of file +} diff --git a/apps/web/public/static/locales/hu/common.json b/packages/lib/server/locales/hu/common.json similarity index 99% rename from apps/web/public/static/locales/hu/common.json rename to packages/lib/server/locales/hu/common.json index e123be8d149b29..be05318d9bb4d1 100644 --- a/apps/web/public/static/locales/hu/common.json +++ b/packages/lib/server/locales/hu/common.json @@ -3360,4 +3360,4 @@ "license_key_saved": "A licenckulcs sikeresen mentve", "timezone_mismatch_tooltip": "A jelentést az Ön profiljában beállított időzóna ({{userTimezone}}) alapján tekinti meg, míg a böngészője a következő időzónára van állítva: {{browserTimezone}}", "ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ Adja hozzá az új karakterláncokat fent ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑" -} \ No newline at end of file +} diff --git a/apps/web/public/static/locales/id/common.json b/packages/lib/server/locales/id/common.json similarity index 99% rename from apps/web/public/static/locales/id/common.json rename to packages/lib/server/locales/id/common.json index d40bcb3d45774b..ef2e7058b33c3b 100644 --- a/apps/web/public/static/locales/id/common.json +++ b/packages/lib/server/locales/id/common.json @@ -166,4 +166,4 @@ "reschedule_cta_short": "Jadwal ulang di sini.", "you_and_conjunction": "Anda &", "email_survey_triggered_by_workflow": "Survei ini dipicu oleh Workflow di Cal." -} \ No newline at end of file +} diff --git a/apps/web/public/static/locales/it/common.json b/packages/lib/server/locales/it/common.json similarity index 99% rename from apps/web/public/static/locales/it/common.json rename to packages/lib/server/locales/it/common.json index 41700aaa739dde..f986b61afe1b6e 100644 --- a/apps/web/public/static/locales/it/common.json +++ b/packages/lib/server/locales/it/common.json @@ -3360,4 +3360,4 @@ "license_key_saved": "Chiave di licenza salvata con successo", "timezone_mismatch_tooltip": "Stai visualizzando il report in base al fuso orario del tuo profilo ({{userTimezone}}), mentre il tuo browser è impostato sul fuso orario ({{browserTimezone}})", "ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ Aggiungi le tue nuove stringhe qui sopra ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑" -} \ No newline at end of file +} diff --git a/apps/web/public/static/locales/iw/common.json b/packages/lib/server/locales/iw/common.json similarity index 100% rename from apps/web/public/static/locales/iw/common.json rename to packages/lib/server/locales/iw/common.json diff --git a/apps/web/public/static/locales/ja/common.json b/packages/lib/server/locales/ja/common.json similarity index 99% rename from apps/web/public/static/locales/ja/common.json rename to packages/lib/server/locales/ja/common.json index 0752558e21615d..c84c69c12339ef 100644 --- a/apps/web/public/static/locales/ja/common.json +++ b/packages/lib/server/locales/ja/common.json @@ -3360,4 +3360,4 @@ "license_key_saved": "ライセンスキーが正常に保存されました", "timezone_mismatch_tooltip": "あなたはプロフィールのタイムゾーン({{userTimezone}})に基づいてレポートを表示していますが、ブラウザのタイムゾーンは({{browserTimezone}})に設定されています", "ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ この上に新しい文字列を追加してください ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑" -} \ No newline at end of file +} diff --git a/apps/web/public/static/locales/km/common.json b/packages/lib/server/locales/km/common.json similarity index 99% rename from apps/web/public/static/locales/km/common.json rename to packages/lib/server/locales/km/common.json index c6dc7e1cc820f2..2e264103cab34b 100644 --- a/apps/web/public/static/locales/km/common.json +++ b/packages/lib/server/locales/km/common.json @@ -3360,4 +3360,4 @@ "license_key_saved": "សោអាជ្ញាប័ណ្ណត្រូវបានរក្សាទុកដោយជោគជ័យ", "timezone_mismatch_tooltip": "អ្នកកំពុងមើលរបាយការណ៍ដោយផ្អែកលើតំបន់ពេលវេលាប្រវត្តិរូបរបស់អ្នក ({{userTimezone}}) ខណៈពេលដែលកម្មវិធីរុករករបស់អ្នកត្រូវបានកំណត់ទៅតំបន់ពេលវេលា ({{browserTimezone}})", "ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ បន្ថែមខ្សែអក្សរថ្មីរបស់អ្នកនៅខាងលើនេះ ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑" -} \ No newline at end of file +} diff --git a/apps/web/public/static/locales/ko/common.json b/packages/lib/server/locales/ko/common.json similarity index 99% rename from apps/web/public/static/locales/ko/common.json rename to packages/lib/server/locales/ko/common.json index 638308d2eebe89..09477b63cd3390 100644 --- a/apps/web/public/static/locales/ko/common.json +++ b/packages/lib/server/locales/ko/common.json @@ -3360,4 +3360,4 @@ "license_key_saved": "라이선스 키가 성공적으로 저장되었습니다", "timezone_mismatch_tooltip": "프로필 시간대({{userTimezone}})를 기준으로 보고서를 보고 계시지만, 브라우저는 다른 시간대({{browserTimezone}})로 설정되어 있습니다", "ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ 여기에 새 문자열을 추가하세요 ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑" -} \ No newline at end of file +} diff --git a/apps/web/public/static/locales/lv/common.json b/packages/lib/server/locales/lv/common.json similarity index 99% rename from apps/web/public/static/locales/lv/common.json rename to packages/lib/server/locales/lv/common.json index 9ff2299ca175e5..0081e086e30add 100644 --- a/apps/web/public/static/locales/lv/common.json +++ b/packages/lib/server/locales/lv/common.json @@ -162,4 +162,4 @@ "reschedule_cta_short": "Pārzīmēt šeit.", "you_and_conjunction": "Jūs &", "email_survey_triggered_by_workflow": "Šo aptauju aktivizēja darbplūsma Cal." -} \ No newline at end of file +} diff --git a/apps/web/public/static/locales/nl/common.json b/packages/lib/server/locales/nl/common.json similarity index 99% rename from apps/web/public/static/locales/nl/common.json rename to packages/lib/server/locales/nl/common.json index bea0beb49909ea..51a1aed027af4e 100644 --- a/apps/web/public/static/locales/nl/common.json +++ b/packages/lib/server/locales/nl/common.json @@ -3360,4 +3360,4 @@ "license_key_saved": "Licentiesleutel succesvol opgeslagen", "timezone_mismatch_tooltip": "Je bekijkt het rapport op basis van je profieltijdzone ({{userTimezone}}), terwijl je browser is ingesteld op tijdzone ({{browserTimezone}})", "ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ Voeg uw nieuwe strings hierboven toe ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑" -} \ No newline at end of file +} diff --git a/apps/web/public/static/locales/no/common.json b/packages/lib/server/locales/no/common.json similarity index 99% rename from apps/web/public/static/locales/no/common.json rename to packages/lib/server/locales/no/common.json index 8a3fdc37ebf21e..430570a76045ea 100644 --- a/apps/web/public/static/locales/no/common.json +++ b/packages/lib/server/locales/no/common.json @@ -3360,4 +3360,4 @@ "license_key_saved": "Lisenssnøkkel lagret", "timezone_mismatch_tooltip": "Du ser rapporten basert på tidssonen i profilen din ({{userTimezone}}), mens nettleseren din er satt til tidssonen ({{browserTimezone}})", "ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ Legg til dine nye strenger over her ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑" -} \ No newline at end of file +} diff --git a/apps/web/public/static/locales/pl/common.json b/packages/lib/server/locales/pl/common.json similarity index 100% rename from apps/web/public/static/locales/pl/common.json rename to packages/lib/server/locales/pl/common.json diff --git a/apps/web/public/static/locales/pt-BR/common.json b/packages/lib/server/locales/pt-BR/common.json similarity index 99% rename from apps/web/public/static/locales/pt-BR/common.json rename to packages/lib/server/locales/pt-BR/common.json index 00a71a556df391..817b2acab8062d 100644 --- a/apps/web/public/static/locales/pt-BR/common.json +++ b/packages/lib/server/locales/pt-BR/common.json @@ -3360,4 +3360,4 @@ "license_key_saved": "Chave de licença salva com sucesso", "timezone_mismatch_tooltip": "Você está visualizando o relatório com base no fuso horário do seu perfil ({{userTimezone}}), enquanto seu navegador está configurado para o fuso horário ({{browserTimezone}})", "ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ Adicione suas novas strings aqui em cima ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑" -} \ No newline at end of file +} diff --git a/apps/web/public/static/locales/pt/common.json b/packages/lib/server/locales/pt/common.json similarity index 99% rename from apps/web/public/static/locales/pt/common.json rename to packages/lib/server/locales/pt/common.json index 1346421a598c5a..89b491a5e8447b 100644 --- a/apps/web/public/static/locales/pt/common.json +++ b/packages/lib/server/locales/pt/common.json @@ -3360,4 +3360,4 @@ "license_key_saved": "Chave de licença salva com sucesso", "timezone_mismatch_tooltip": "Você está visualizando o relatório com base no fuso horário do seu perfil ({{userTimezone}}), enquanto seu navegador está configurado para o fuso horário ({{browserTimezone}})", "ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ Add your new strings above here ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑" -} \ No newline at end of file +} diff --git a/apps/web/public/static/locales/ro/common.json b/packages/lib/server/locales/ro/common.json similarity index 99% rename from apps/web/public/static/locales/ro/common.json rename to packages/lib/server/locales/ro/common.json index d5441a8c3075c6..690928f90e25c2 100644 --- a/apps/web/public/static/locales/ro/common.json +++ b/packages/lib/server/locales/ro/common.json @@ -3360,4 +3360,4 @@ "license_key_saved": "Cheia de licență a fost salvată cu succes", "timezone_mismatch_tooltip": "Vizualizați raportul pe baza fusului orar al profilului dvs. ({{userTimezone}}), în timp ce browserul dvs. este setat pe fusul orar ({{browserTimezone}})", "ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ Adăugați stringurile noi deasupra acestui rând ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑" -} \ No newline at end of file +} diff --git a/apps/web/public/static/locales/ru/common.json b/packages/lib/server/locales/ru/common.json similarity index 99% rename from apps/web/public/static/locales/ru/common.json rename to packages/lib/server/locales/ru/common.json index 7a2ac0fa8cb46d..a91520dda12eeb 100644 --- a/apps/web/public/static/locales/ru/common.json +++ b/packages/lib/server/locales/ru/common.json @@ -3360,4 +3360,4 @@ "license_key_saved": "Лицензионный ключ успешно сохранён", "timezone_mismatch_tooltip": "Вы просматриваете отчёт в часовом поясе вашего профиля ({{userTimezone}}), в то время как ваш браузер настроен на часовой пояс ({{browserTimezone}})", "ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ Добавьте строки выше ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑" -} \ No newline at end of file +} diff --git a/apps/web/public/static/locales/sk-SK/common.json b/packages/lib/server/locales/sk-SK/common.json similarity index 99% rename from apps/web/public/static/locales/sk-SK/common.json rename to packages/lib/server/locales/sk-SK/common.json index bb72c3319cc9d5..a6f1666ce1d096 100644 --- a/apps/web/public/static/locales/sk-SK/common.json +++ b/packages/lib/server/locales/sk-SK/common.json @@ -3360,4 +3360,4 @@ "license_key_saved": "Licenčný kľúč bol úspešne uložený", "timezone_mismatch_tooltip": "Prezeráte si správu na základe časového pásma vášho profilu ({{userTimezone}}), zatiaľ čo váš prehliadač je nastavený na časové pásmo ({{browserTimezone}})", "ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ Pridajte svoje nové reťazce nad túto líniu ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑" -} \ No newline at end of file +} diff --git a/apps/web/public/static/locales/sk/common.json b/packages/lib/server/locales/sk/common.json similarity index 99% rename from apps/web/public/static/locales/sk/common.json rename to packages/lib/server/locales/sk/common.json index 23dd604fe45985..7053f4791b8d11 100644 --- a/apps/web/public/static/locales/sk/common.json +++ b/packages/lib/server/locales/sk/common.json @@ -67,4 +67,4 @@ "reschedule_cta_short": "Preplánujte tu.", "you_and_conjunction": "Vy &", "email_survey_triggered_by_workflow": "Tento prieskum bol spustený pracovným postupom v Cal." -} \ No newline at end of file +} diff --git a/apps/web/public/static/locales/sr/common.json b/packages/lib/server/locales/sr/common.json similarity index 99% rename from apps/web/public/static/locales/sr/common.json rename to packages/lib/server/locales/sr/common.json index 5518583e04bcfe..8f548f8d55acee 100644 --- a/apps/web/public/static/locales/sr/common.json +++ b/packages/lib/server/locales/sr/common.json @@ -3360,4 +3360,4 @@ "license_key_saved": "Licencni ključ je uspešno sačuvan", "timezone_mismatch_tooltip": "Gledate izveštaj na osnovu vremenske zone vašeg profila ({{userTimezone}}), dok je vaš pretraživač podešen na vremensku zonu ({{browserTimezone}})", "ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ Dodajte svoje nove stringove iznad ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑" -} \ No newline at end of file +} diff --git a/apps/web/public/static/locales/sv/common.json b/packages/lib/server/locales/sv/common.json similarity index 99% rename from apps/web/public/static/locales/sv/common.json rename to packages/lib/server/locales/sv/common.json index e458bc18cf211b..ee792a059de55e 100644 --- a/apps/web/public/static/locales/sv/common.json +++ b/packages/lib/server/locales/sv/common.json @@ -3360,4 +3360,4 @@ "license_key_saved": "Licensnyckeln sparades framgångsrikt", "timezone_mismatch_tooltip": "Du tittar på rapporten baserat på din profiltidszon ({{userTimezone}}), medan din webbläsare är inställd på tidszonen ({{browserTimezone}})", "ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ Add your new strings above here ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑" -} \ No newline at end of file +} diff --git a/apps/web/public/static/locales/ta/common.json b/packages/lib/server/locales/ta/common.json similarity index 99% rename from apps/web/public/static/locales/ta/common.json rename to packages/lib/server/locales/ta/common.json index 9d0004781170b0..16cefd136796c4 100644 --- a/apps/web/public/static/locales/ta/common.json +++ b/packages/lib/server/locales/ta/common.json @@ -211,4 +211,4 @@ "reschedule_cta_short": "இங்கே மீண்டும் ஷெடியூல் செய்யவும்.", "you_and_conjunction": "நீங்கள் &", "email_survey_triggered_by_workflow": "இந்த ஆய்வு Cal-ல் உள்ள பணிப்பாய்வு மூலம் தூண்டப்பட்டது." -} \ No newline at end of file +} diff --git a/apps/web/public/static/locales/th/common.json b/packages/lib/server/locales/th/common.json similarity index 100% rename from apps/web/public/static/locales/th/common.json rename to packages/lib/server/locales/th/common.json diff --git a/apps/web/public/static/locales/tr/common.json b/packages/lib/server/locales/tr/common.json similarity index 99% rename from apps/web/public/static/locales/tr/common.json rename to packages/lib/server/locales/tr/common.json index 8fa7d594b182b4..334878937fe89d 100644 --- a/apps/web/public/static/locales/tr/common.json +++ b/packages/lib/server/locales/tr/common.json @@ -3360,4 +3360,4 @@ "license_key_saved": "Lisans anahtarı başarıyla kaydedildi", "timezone_mismatch_tooltip": "Raporu profil saat diliminize ({{userTimezone}}) göre görüntülüyorsunuz, ancak tarayıcınız ({{browserTimezone}}) saat dilimine ayarlı", "ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ Yeni dizelerinizi yukarıya ekleyin ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑" -} \ No newline at end of file +} diff --git a/apps/web/public/static/locales/uk/common.json b/packages/lib/server/locales/uk/common.json similarity index 99% rename from apps/web/public/static/locales/uk/common.json rename to packages/lib/server/locales/uk/common.json index b7b90b8bcc3ca5..b34675709dfd19 100644 --- a/apps/web/public/static/locales/uk/common.json +++ b/packages/lib/server/locales/uk/common.json @@ -3360,4 +3360,4 @@ "license_key_saved": "Ліцензійний ключ успішно збережено", "timezone_mismatch_tooltip": "Ви переглядаєте звіт на основі часового поясу вашого профілю ({{userTimezone}}), тоді як у вашому браузері встановлено часовий пояс ({{browserTimezone}})", "ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ Add your new strings above here ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑" -} \ No newline at end of file +} diff --git a/apps/web/public/static/locales/vi/common.json b/packages/lib/server/locales/vi/common.json similarity index 99% rename from apps/web/public/static/locales/vi/common.json rename to packages/lib/server/locales/vi/common.json index 96e3b6f42965cb..2b1d416152c159 100644 --- a/apps/web/public/static/locales/vi/common.json +++ b/packages/lib/server/locales/vi/common.json @@ -3360,4 +3360,4 @@ "license_key_saved": "Đã lưu khóa giấy phép thành công", "timezone_mismatch_tooltip": "Bạn đang xem báo cáo dựa trên múi giờ hồ sơ của bạn ({{userTimezone}}), trong khi trình duyệt của bạn được đặt theo múi giờ ({{browserTimezone}})", "ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ Add your new strings above here ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑" -} \ No newline at end of file +} diff --git a/apps/web/public/static/locales/zh-CN/common.json b/packages/lib/server/locales/zh-CN/common.json similarity index 99% rename from apps/web/public/static/locales/zh-CN/common.json rename to packages/lib/server/locales/zh-CN/common.json index 18f53468d96cd4..6119c2963a34f7 100644 --- a/apps/web/public/static/locales/zh-CN/common.json +++ b/packages/lib/server/locales/zh-CN/common.json @@ -3360,4 +3360,4 @@ "license_key_saved": "许可证密钥已成功保存", "timezone_mismatch_tooltip": "您正在根据您的个人资料时区({{userTimezone}})查看报告,而您的浏览器设置为时区({{browserTimezone}})", "ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ 在此上方添加您的新字符串 ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑" -} \ No newline at end of file +} diff --git a/apps/web/public/static/locales/zh-TW/common.json b/packages/lib/server/locales/zh-TW/common.json similarity index 99% rename from apps/web/public/static/locales/zh-TW/common.json rename to packages/lib/server/locales/zh-TW/common.json index 212bd870893ca9..bda66b2ceb9ffc 100644 --- a/apps/web/public/static/locales/zh-TW/common.json +++ b/packages/lib/server/locales/zh-TW/common.json @@ -3360,4 +3360,4 @@ "license_key_saved": "授權金鑰已成功儲存", "timezone_mismatch_tooltip": "您正在根據您的個人資料時區({{userTimezone}})查看報告,而您的瀏覽器設置為時區({{browserTimezone}})", "ADD_NEW_STRINGS_ABOVE_THIS_LINE_TO_PREVENT_MERGE_CONFLICTS": "↑↑↑↑↑↑↑↑↑↑↑↑↑ 請在此處新增您的字串 ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑" -} \ No newline at end of file +} diff --git a/packages/lib/server/translationBundler.ts b/packages/lib/server/translationBundler.ts new file mode 100644 index 00000000000000..8b73e971d92708 --- /dev/null +++ b/packages/lib/server/translationBundler.ts @@ -0,0 +1,68 @@ +import { readFileSync } from "fs"; +import { join } from "path"; +import path from "path"; + +import { CALCOM_VERSION } from "@calcom/lib/constants"; + +function findMonorepoRoot(): string { + let currentDir = __dirname; + while (currentDir !== path.dirname(currentDir)) { + try { + const packageJsonPath = path.join(currentDir, "package.json"); + const packageJson = JSON.parse(readFileSync(packageJsonPath, "utf-8")); + if (packageJson.workspaces && packageJson.name === "calcom-monorepo") { + return currentDir; + } + } catch (error) { + // package.json doesn't exist in this directory + // Just continue to the next directory + } + currentDir = path.dirname(currentDir); + } + + throw new Error("Could not find monorepo root - repository structure may be corrupted"); +} + +const LOCALES_PATH = path.join(findMonorepoRoot(), "packages/lib/server/locales"); + +interface LocaleCache { + [cacheKey: string]: Record; +} + +let localeCache: LocaleCache = {}; +let cacheVersion: string | null = null; + +function loadTranslationForLocale(locale: string, ns: string): Record { + const cacheKey = `${locale}-${ns}-${CALCOM_VERSION}`; + + if (cacheVersion === CALCOM_VERSION && localeCache[cacheKey]) { + return localeCache[cacheKey]; + } + + if (cacheVersion !== CALCOM_VERSION) { + localeCache = {}; + cacheVersion = CALCOM_VERSION; + } + + try { + const translationPath = join(LOCALES_PATH, locale, `${ns}.json`); + const translations = JSON.parse(readFileSync(translationPath, "utf-8")); + localeCache[cacheKey] = translations; + return translations; + } catch (error) { + console.warn(`Failed to load translations for ${locale}/${ns}:`, error); + return {}; + } +} + +export function getBundledTranslations(locale: string, ns: string): Record { + const normalizedLocale = locale === "zh" ? "zh-CN" : locale; + + const translations = loadTranslationForLocale(normalizedLocale, ns); + if (Object.keys(translations).length > 0) { + return translations; + } + + const englishTranslations = loadTranslationForLocale("en", ns); + return englishTranslations; +} diff --git a/packages/platform/atoms/cal-provider/BaseCalProvider.tsx b/packages/platform/atoms/cal-provider/BaseCalProvider.tsx index e230a4ba29b85a..926c5276094162 100644 --- a/packages/platform/atoms/cal-provider/BaseCalProvider.tsx +++ b/packages/platform/atoms/cal-provider/BaseCalProvider.tsx @@ -3,14 +3,14 @@ import type { ReactNode } from "react"; import { useState } from "react"; import { useCallback } from "react"; +import deTranslations from "@calcom/lib/server/locales/de/common.json"; +import enTranslations from "@calcom/lib/server/locales/en/common.json"; +import esTranslations from "@calcom/lib/server/locales/es/common.json"; +import frTranslations from "@calcom/lib/server/locales/fr/common.json"; +import nlTranslations from "@calcom/lib/server/locales/nl/common.json"; +import ptBrTranslations from "@calcom/lib/server/locales/pt-BR/common.json"; import type { API_VERSIONS_ENUM } from "@calcom/platform-constants"; import { IconSprites } from "@calcom/ui/components/icon"; -import deTranslations from "@calcom/web/public/static/locales/de/common.json"; -import enTranslations from "@calcom/web/public/static/locales/en/common.json"; -import esTranslations from "@calcom/web/public/static/locales/es/common.json"; -import frTranslations from "@calcom/web/public/static/locales/fr/common.json"; -import nlTranslations from "@calcom/web/public/static/locales/nl/common.json"; -import ptBrTranslations from "@calcom/web/public/static/locales/pt-BR/common.json"; import { AtomsContext } from "../hooks/useAtomsContext"; import { useMe } from "../hooks/useMe"; diff --git a/packages/platform/atoms/cal-provider/languages.ts b/packages/platform/atoms/cal-provider/languages.ts index 5828b651910bb4..7cc07c5cecd836 100644 --- a/packages/platform/atoms/cal-provider/languages.ts +++ b/packages/platform/atoms/cal-provider/languages.ts @@ -1,9 +1,9 @@ -import type deTranslations from "@calcom/web/public/static/locales/de/common.json"; -import type enTranslations from "@calcom/web/public/static/locales/en/common.json"; -import type esTranslations from "@calcom/web/public/static/locales/es/common.json"; -import type frTranslations from "@calcom/web/public/static/locales/fr/common.json"; -import type nlTranslations from "@calcom/web/public/static/locales/nl/common.json"; -import type ptBrTranslations from "@calcom/web/public/static/locales/pt-BR/common.json"; +import type deTranslations from "@calcom/lib/server/locales/de/common.json"; +import type enTranslations from "@calcom/lib/server/locales/en/common.json"; +import type esTranslations from "@calcom/lib/server/locales/es/common.json"; +import type frTranslations from "@calcom/lib/server/locales/fr/common.json"; +import type nlTranslations from "@calcom/lib/server/locales/nl/common.json"; +import type ptBrTranslations from "@calcom/lib/server/locales/pt-BR/common.json"; export type enTranslationKeys = keyof typeof enTranslations; export type frTranslationKeys = keyof typeof frTranslations; diff --git a/packages/platform/atoms/vite.config.ts b/packages/platform/atoms/vite.config.ts index 975682e09daa43..af84a687721824 100644 --- a/packages/platform/atoms/vite.config.ts +++ b/packages/platform/atoms/vite.config.ts @@ -62,9 +62,9 @@ export default defineConfig(({ mode }) => { "@calcom/platform-constants": path.resolve(__dirname, "../constants/index.ts"), "@calcom/platform-types": path.resolve(__dirname, "../types/index.ts"), "@calcom/platform-utils": path.resolve(__dirname, "../constants/index.ts"), - "@calcom/web/public/static/locales/en/common.json": path.resolve( + "@calcom/lib/server/locales/en/common.json": path.resolve( __dirname, - "../../../apps/web/public/static/locales/en/common.json" + "../../lib/server/locales/en/common.json" ), }, }, diff --git a/yarn.lock b/yarn.lock index f85a816617b056..a271c553f512b8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -21704,6 +21704,7 @@ __metadata: prettier: ^2.8.6 prismock: ^1.33.4 resize-observer-polyfill: ^1.5.1 + ts-node: ^10.9.2 tsc-absolute: ^1.0.0 turbo: ^1.10.1 typescript: ^5.7.2 @@ -44895,6 +44896,44 @@ __metadata: languageName: node linkType: hard +"ts-node@npm:^10.9.2": + version: 10.9.2 + resolution: "ts-node@npm:10.9.2" + dependencies: + "@cspotcode/source-map-support": ^0.8.0 + "@tsconfig/node10": ^1.0.7 + "@tsconfig/node12": ^1.0.7 + "@tsconfig/node14": ^1.0.0 + "@tsconfig/node16": ^1.0.2 + acorn: ^8.4.1 + acorn-walk: ^8.1.1 + arg: ^4.1.0 + create-require: ^1.1.0 + diff: ^4.0.1 + make-error: ^1.1.1 + v8-compile-cache-lib: ^3.0.1 + yn: 3.1.1 + peerDependencies: + "@swc/core": ">=1.2.50" + "@swc/wasm": ">=1.2.50" + "@types/node": "*" + typescript: ">=2.7" + peerDependenciesMeta: + "@swc/core": + optional: true + "@swc/wasm": + optional: true + bin: + ts-node: dist/bin.js + ts-node-cwd: dist/bin-cwd.js + ts-node-esm: dist/bin-esm.js + ts-node-script: dist/bin-script.js + ts-node-transpile-only: dist/bin-transpile.js + ts-script: dist/bin-script-deprecated.js + checksum: fde256c9073969e234526e2cfead42591b9a2aec5222bac154b0de2fa9e4ceb30efcd717ee8bc785a56f3a119bdd5aa27b333d9dbec94ed254bd26f8944c67ac + languageName: node + linkType: hard + "ts-pattern@npm:4.3.0": version: 4.3.0 resolution: "ts-pattern@npm:4.3.0"