localize-ai
Advanced tools
@@ -5,3 +5,3 @@ type LanguageContextType = { | ||
| setLang: (lang: string) => void; | ||
| translations: Record<string, string>; | ||
| cache: Record<string, Record<string, Record<string, string>>>; | ||
| }; | ||
@@ -8,0 +8,0 @@ declare const LanguageContext: import("react").Context<LanguageContextType | null>; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"LanguageContext.d.ts","sourceRoot":"","sources":["../../src/context/LanguageContext.ts"],"names":[],"mappings":"AAEA,KAAK,mBAAmB,GAAG;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAEtC,CAAC;AAGF,QAAA,MAAM,eAAe,qDAAkD,CAAC;AAExE,eAAe,eAAe,CAAC"} | ||
| {"version":3,"file":"LanguageContext.d.ts","sourceRoot":"","sources":["../../src/context/LanguageContext.ts"],"names":[],"mappings":"AAEA,KAAK,mBAAmB,GAAG;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAEhC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;CAC/D,CAAC;AAGF,QAAA,MAAM,eAAe,qDAAkD,CAAC;AAExE,eAAe,eAAe,CAAC"} |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"LanguageContextProvider.d.ts","sourceRoot":"","sources":["../../src/context/LanguageContextProvider.tsx"],"names":[],"mappings":"AAGA,iBAAS,uBAAuB,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,kDA2E3E;AAED,eAAe,uBAAuB,CAAC"} | ||
| {"version":3,"file":"LanguageContextProvider.d.ts","sourceRoot":"","sources":["../../src/context/LanguageContextProvider.tsx"],"names":[],"mappings":"AAGA,iBAAS,uBAAuB,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,kDAiD3E;AAED,eAAe,uBAAuB,CAAC"} |
@@ -7,6 +7,5 @@ import { jsx as _jsx } from "react/jsx-runtime"; | ||
| const [supportedLangs, setSupportedLangs] = useState([]); | ||
| const [translations, setTranslations] = useState({}); | ||
| const [isReady, setIsReady] = useState(false); | ||
| // ๐ฅ cache โ lang โ namespace โ translations | ||
| const cache = useRef({}); | ||
| // ๐น Load runtime config ONCE | ||
| useEffect(() => { | ||
@@ -18,3 +17,2 @@ async function loadConfig() { | ||
| setSupportedLangs(config.supportedLangs || []); | ||
| // set initial language safely | ||
| const initialLang = config.supportedLangs?.includes(config.sourceLanguage) | ||
@@ -34,33 +32,12 @@ ? config.sourceLanguage | ||
| }, []); | ||
| // ๐น Load translations WHEN lang changes | ||
| useEffect(() => { | ||
| if (!lang) | ||
| return; | ||
| if (cache.current[lang]) { | ||
| setTranslations(cache.current[lang]); | ||
| return; | ||
| } | ||
| async function loadTranslations() { | ||
| try { | ||
| const res = await fetch(`/translations_${lang}.json`); | ||
| if (!res.ok) | ||
| throw new Error("Missing translation file"); | ||
| const data = await res.json(); | ||
| if (Object.keys(data).length > 0) { | ||
| cache.current[lang] = data; | ||
| } | ||
| setTranslations(data); | ||
| } | ||
| catch (err) { | ||
| console.warn(`โ ๏ธ No translations found for ${lang}`); | ||
| setTranslations({}); | ||
| } | ||
| } | ||
| loadTranslations(); | ||
| }, [lang]); | ||
| if (!isReady) | ||
| return null; | ||
| return (_jsx(LanguageContext.Provider, { value: { lang, setLang, supportedLangs, translations }, children: children })); | ||
| return (_jsx(LanguageContext.Provider, { value: { | ||
| lang, | ||
| setLang, | ||
| supportedLangs, | ||
| cache: cache.current, // ๐ฅ expose cache | ||
| }, children: children })); | ||
| } | ||
| export default LanguageContextProvider; | ||
| //# sourceMappingURL=LanguageContextProvider.js.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"LanguageContextProvider.js","sourceRoot":"","sources":["../../src/context/LanguageContextProvider.tsx"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"LanguageContextProvider.js","sourceRoot":"","sources":["../../src/context/LanguageContextProvider.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACpD,OAAO,eAAe,MAAM,sBAAsB,CAAC;AAEnD,SAAS,uBAAuB,CAAC,EAAE,QAAQ,EAAiC;IAC1E,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAS,IAAI,CAAC,CAAC;IAC/C,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAW,EAAE,CAAC,CAAC;IACnE,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAE9C,6CAA6C;IAC7C,MAAM,KAAK,GAAG,MAAM,CAClB,EAAE,CACH,CAAC;IAEF,SAAS,CAAC,GAAG,EAAE;QACb,KAAK,UAAU,UAAU;YACvB,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,wBAAwB,CAAC,CAAC;gBAClD,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;gBAEhC,iBAAiB,CAAC,MAAM,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC;gBAE/C,MAAM,WAAW,GAAG,MAAM,CAAC,cAAc,EAAE,QAAQ,CACjD,MAAM,CAAC,cAAc,CACtB;oBACC,CAAC,CAAC,MAAM,CAAC,cAAc;oBACvB,CAAC,CAAC,IAAI,CAAC;gBAET,OAAO,CAAC,WAAW,CAAC,CAAC;YACvB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,IAAI,CAAC,kCAAkC,EAAE,GAAG,CAAC,CAAC;YACxD,CAAC;oBAAS,CAAC;gBACT,UAAU,CAAC,IAAI,CAAC,CAAC;YACnB,CAAC;QACH,CAAC;QAED,UAAU,EAAE,CAAC;IACf,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAE1B,OAAO,CACL,KAAC,eAAe,CAAC,QAAQ,IACvB,KAAK,EAAE;YACL,IAAI;YACJ,OAAO;YACP,cAAc;YACd,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,kBAAkB;SACzC,YAEA,QAAQ,GACgB,CAC5B,CAAC;AACJ,CAAC;AAED,eAAe,uBAAuB,CAAC"} |
@@ -1,2 +0,2 @@ | ||
| export declare function useTranslation(): { | ||
| export declare function useTranslation(namespace?: string): { | ||
| t: (key: string, vars?: Record<string, any>) => string; | ||
@@ -3,0 +3,0 @@ setLang: (lang: string) => void; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"useTranslations.d.ts","sourceRoot":"","sources":["../../src/hooks/useTranslations.ts"],"names":[],"mappings":"AASA,wBAAgB,cAAc;aA6BZ,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAG,MAAM;;;;EAY5D"} | ||
| {"version":3,"file":"useTranslations.d.ts","sourceRoot":"","sources":["../../src/hooks/useTranslations.ts"],"names":[],"mappings":"AAOA,wBAAgB,cAAc,CAAC,SAAS,GAAE,MAAiB;aAgEzC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAG,MAAM;;;;EAS5D"} |
@@ -1,9 +0,7 @@ | ||
| import { useContext } from "react"; | ||
| import { useContext, useEffect, useState } from "react"; | ||
| import LanguageContext from "../context/LanguageContext.js"; | ||
| // ๐ฅ SAME NORMALIZER (IMPORTANT โ MUST MATCH EXTRACTOR) | ||
| function normalize(text) { | ||
| return text | ||
| .trim(); | ||
| return text.trim(); | ||
| } | ||
| export function useTranslation() { | ||
| export function useTranslation(namespace = "common") { | ||
| const context = useContext(LanguageContext); | ||
@@ -13,3 +11,34 @@ if (!context) { | ||
| } | ||
| const { lang, translations, setLang, supportedLangs } = context; | ||
| const { lang, setLang, supportedLangs, cache } = context; | ||
| const [translations, setTranslations] = useState({}); | ||
| // ๐ฅ Load namespace dynamically | ||
| useEffect(() => { | ||
| if (!lang) | ||
| return; | ||
| async function loadNamespace() { | ||
| // โ check cache first | ||
| if (cache[lang]?.[namespace]) { | ||
| setTranslations(cache[lang][namespace]); | ||
| return; | ||
| } | ||
| try { | ||
| const res = await fetch(`/locales/${lang}/${namespace}.json`); | ||
| if (!res.ok) | ||
| throw new Error("Missing namespace file"); | ||
| const data = await res.json(); | ||
| // ๐ฅ init cache | ||
| if (!cache[lang]) | ||
| cache[lang] = {}; | ||
| cache[lang][namespace] = data; | ||
| setTranslations(data); | ||
| } | ||
| catch (err) { | ||
| console.warn(`โ ๏ธ Missing ${namespace} for ${lang}, falling back`); | ||
| // fallback โ empty (t will return key) | ||
| setTranslations({}); | ||
| } | ||
| } | ||
| loadNamespace(); | ||
| }, [lang, namespace]); | ||
| // ๐ฅ interpolation | ||
| function interpolate(text, vars) { | ||
@@ -27,7 +56,6 @@ if (!vars) | ||
| } | ||
| // ๐ฅ translation function | ||
| function t(key, vars) { | ||
| const normalizedKey = normalize(key); | ||
| const baseText = translations[normalizedKey] || | ||
| translations[key] || | ||
| key; | ||
| const baseText = translations[normalizedKey] || translations[key] || key; | ||
| return interpolate(baseText, vars); | ||
@@ -34,0 +62,0 @@ } |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"useTranslations.js","sourceRoot":"","sources":["../../src/hooks/useTranslations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACnC,OAAO,eAAe,MAAM,+BAA+B,CAAC;AAE5D,wDAAwD;AACxD,SAAS,SAAS,CAAC,IAAY;IAC7B,OAAO,IAAI;SACR,IAAI,EAAE,CAAA;AACX,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,MAAM,OAAO,GAAG,UAAU,CAAC,eAAe,CAAC,CAAC;IAE5C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,4DAA4D,CAC7D,CAAC;IACJ,CAAC;IAED,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC;IAEhE,SAAS,WAAW,CAClB,IAAY,EACZ,IAA0B;QAE1B,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QAEvB,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE;YAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;YAE/B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,OAAO,CAAC,IAAI,CAAC,wBAAwB,GAAG,EAAE,CAAC,CAAC;gBAC5C,OAAO,KAAK,GAAG,IAAI,CAAC;YACtB,CAAC;YAED,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,SAAS,CAAC,CAAC,GAAW,EAAE,IAA0B;QAChD,MAAM,aAAa,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;QAErC,MAAM,QAAQ,GACZ,YAAY,CAAC,aAAa,CAAC;YAC3B,YAAY,CAAC,GAAG,CAAC;YACjB,GAAG,CAAC;QAEN,OAAO,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IACrC,CAAC;IAED,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC;AAC9C,CAAC"} | ||
| {"version":3,"file":"useTranslations.js","sourceRoot":"","sources":["../../src/hooks/useTranslations.ts"],"names":[],"mappings":"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"} |
@@ -19,6 +19,12 @@ import fs from "fs"; | ||
| } | ||
| // ๐ฅ UPDATED TYPE (namespace based) | ||
| const raw = JSON.parse(fs.readFileSync(INPUT, "utf-8")); | ||
| const cleaned = raw.filter(isValid); | ||
| // ๐ฅ CLEAN PER NAMESPACE (same logic preserved) | ||
| const cleaned = {}; | ||
| Object.entries(raw).forEach(([namespace, strings]) => { | ||
| cleaned[namespace] = strings.filter(isValid); | ||
| }); | ||
| // ๐ฅ WRITE SAME STRUCTURE | ||
| fs.writeFileSync(OUTPUT, JSON.stringify(cleaned, null, 2)); | ||
| console.log(`โ Cleaned strings: ${cleaned.length}`); | ||
| console.log(`โ Cleaned namespaces: ${Object.keys(cleaned).length}`); | ||
| //# sourceMappingURL=cleanTranslations.js.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"cleanTranslations.js","sourceRoot":"","sources":["../../src/scripts/cleanTranslations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;AAE3B,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC;AACpD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,sBAAsB,CAAC,CAAC;AAEvD,SAAS,OAAO,CAAC,IAAY;IAC3B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IAC3C,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACrC,IAAI,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAC7C,OAAO,IAAI,CAAC;AACd,CAAC;AAED,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;IAC1B,OAAO,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;IAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,GAAG,GAAa,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;AAElE,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAEpC,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAE3D,OAAO,CAAC,GAAG,CAAC,sBAAsB,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC"} | ||
| {"version":3,"file":"cleanTranslations.js","sourceRoot":"","sources":["../../src/scripts/cleanTranslations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;AAE3B,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC;AACpD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,sBAAsB,CAAC,CAAC;AAEvD,SAAS,OAAO,CAAC,IAAY;IAC3B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IAC3C,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACrC,IAAI,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAC7C,OAAO,IAAI,CAAC;AACd,CAAC;AAED,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;IAC1B,OAAO,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;IAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,oCAAoC;AACpC,MAAM,GAAG,GAA6B,IAAI,CAAC,KAAK,CAC9C,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,CAChC,CAAC;AAEF,gDAAgD;AAChD,MAAM,OAAO,GAA6B,EAAE,CAAC;AAE7C,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE;IACnD,OAAO,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAC/C,CAAC,CAAC,CAAC;AAEH,0BAA0B;AAC1B,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAE3D,OAAO,CAAC,GAAG,CAAC,yBAAyB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC"} |
@@ -109,9 +109,16 @@ import fs from "fs"; | ||
| // translations | ||
| if (fs.existsSync(PUBLIC_DIR)) { | ||
| const files = fs.readdirSync(PUBLIC_DIR); | ||
| files.forEach((file) => { | ||
| if (/^translations_.*\.json$/.test(file)) { | ||
| const fullPath = path.join(PUBLIC_DIR, file); | ||
| logResult(fullPath, cleanJsonFile(fullPath, usedKeys)); | ||
| } | ||
| const LOCALES_DIR = path.join(ROOT, "public", "locales"); | ||
| if (fs.existsSync(LOCALES_DIR)) { | ||
| const langs = fs.readdirSync(LOCALES_DIR); | ||
| langs.forEach((lang) => { | ||
| const langDir = path.join(LOCALES_DIR, lang); | ||
| if (!fs.statSync(langDir).isDirectory()) | ||
| return; | ||
| const files = fs.readdirSync(langDir); | ||
| files.forEach((file) => { | ||
| if (file.endsWith(".json")) { | ||
| const fullPath = path.join(langDir, file); | ||
| logResult(fullPath, cleanJsonFile(fullPath, usedKeys)); | ||
| } | ||
| }); | ||
| }); | ||
@@ -118,0 +125,0 @@ } |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"deleteSync.js","sourceRoot":"","sources":["../../src/scripts/deleteSync.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"deleteSync.js","sourceRoot":"","sources":["../../src/scripts/deleteSync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,cAAc,MAAM,iBAAiB,CAAC;AAC7C,OAAO,KAAK,CAAC,MAAM,cAAc,CAAC;AAElC,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,CAAC;AAExC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;AAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAEvC,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC;AAC7D,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,sBAAsB,CAAC,CAAC;AAE7D,oDAAoD;AACpD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAE7C,iCAAiC;AACjC,SAAS,SAAS,CAAC,IAAY;IAC7B,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;AACrB,CAAC;AAED,mCAAmC;AACnC,SAAS,WAAW;IAClB,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IAEnC,SAAS,OAAO,CAAC,GAAW;QAC1B,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAElC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAEtC,IAAI,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;gBACxC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACpB,CAAC;iBAAM,IAAI,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC3C,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBAEnD,IAAI,CAAC;oBACH,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE;wBAChC,UAAU,EAAE,QAAQ;wBACpB,OAAO,EAAE,CAAC,KAAK,EAAE,YAAY,CAAC;qBAC/B,CAAC,CAAC;oBAEH,QAAQ,CAAC,GAAG,EAAE;wBACZ,cAAc,CAAC,IAAS;4BACtB,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC;4BAE9C,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,KAAK,GAAG;gCAAE,OAAO;4BAE3D,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;4BACzB,IAAI,CAAC,QAAQ;gCAAE,OAAO;4BAEtB,IAAI,KAAK,GAAkB,IAAI,CAAC;4BAEhC,IAAI,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC;gCAChC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;4BACzB,CAAC;iCAAM,IAAI,CAAC,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,CAAC;gCACzC,IAAI,QAAQ,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;oCAAE,OAAO;gCAE5C,KAAK,GAAG,QAAQ,CAAC,MAAM;qCACpB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC;qCAChC,IAAI,CAAC,EAAE,CAAC,CAAC;4BACd,CAAC;4BAED,IAAI,CAAC,KAAK;gCAAE,OAAO;4BAEnB,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;wBACjC,CAAC;qBACF,CAAC,CAAC;gBACL,CAAC;gBAAC,MAAM,CAAC;oBACP,OAAO,CAAC,IAAI,CAAC,qBAAqB,QAAQ,EAAE,CAAC,CAAC;gBAChD,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,CAAC,OAAO,CAAC,CAAC;IAEjB,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,uCAAuC;AACvC,SAAS,aAAa,CAAC,QAAgB,EAAE,QAAqB;IAC5D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,CAAC,CAAC;IAEvC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;IAE5D,IAAI,OAAY,CAAC;IACjB,IAAI,YAAY,GAAG,CAAC,CAAC;IAErB,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAE3B,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAW,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAErE,YAAY,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IACzC,CAAC;SAAM,CAAC;QACN,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;QAExC,OAAO,GAAG,MAAM,CAAC,WAAW,CAC1B,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CACrE,CAAC;QAEF,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;QAC1C,YAAY,GAAG,MAAM,GAAG,KAAK,CAAC;IAChC,CAAC;IAED,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAE7D,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,iBAAiB;AACjB,SAAS,GAAG;IACV,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;IAEvC,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAE/B,OAAO,CAAC,GAAG,CAAC,WAAW,QAAQ,CAAC,IAAI,gBAAgB,CAAC,CAAC;IAEtD,IAAI,YAAY,GAAG,CAAC,CAAC;IAErB,SAAS,SAAS,CAAC,QAAgB,EAAE,OAAe;QAClD,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAErC,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,cAAc,OAAO,OAAO,CAAC,CAAC;YACpD,YAAY,IAAI,OAAO,CAAC;QAC1B,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,eAAe,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IAED,kBAAkB;IAClB,SAAS,CAAC,cAAc,EAAE,aAAa,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC,CAAC;IACnE,SAAS,CAAC,YAAY,EAAE,aAAa,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC;IAE/D,eAAe;IACf,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;IAEzD,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAE1C,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YACrB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;YAE7C,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE;gBAAE,OAAO;YAEhD,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YAEtC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;gBACrB,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;oBAE1C,SAAS,CAAC,QAAQ,EAAE,aAAa,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;gBACzD,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;IAE3C,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,0BAA0B,YAAY,EAAE,CAAC,CAAC;IACxD,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IACxC,CAAC;AACH,CAAC;AAED,GAAG,EAAE,CAAC"} |
@@ -10,13 +10,13 @@ import fs from "fs"; | ||
| const OUTPUT_FILE = path.join(ROOT, "extractedText.json"); | ||
| let existingStrings = new Set(); | ||
| // ๐ฅ NEW: namespace-based storage | ||
| let existingStrings = {}; | ||
| if (fs.existsSync(OUTPUT_FILE)) { | ||
| existingStrings = new Set(JSON.parse(fs.readFileSync(OUTPUT_FILE, "utf-8"))); | ||
| existingStrings = JSON.parse(fs.readFileSync(OUTPUT_FILE, "utf-8")); | ||
| } | ||
| const newStrings = new Set(); | ||
| // ๐ฅ Normalize string (CRITICAL FIX) | ||
| const newStrings = {}; | ||
| // ๐ฅ Normalize | ||
| function normalize(text) { | ||
| return text | ||
| .trim(); | ||
| return text.trim(); | ||
| } | ||
| // ๐ฅ Relaxed validation (FIXED) | ||
| // ๐ฅ Validation | ||
| function isValidText(text) { | ||
@@ -37,5 +37,24 @@ if (!text || text.length < 2) | ||
| }); | ||
| let namespace = "common"; // ๐ฅ default | ||
| traverse(ast, { | ||
| // ๐ฅ STEP 1: detect namespace | ||
| CallExpression(path) { | ||
| const { callee, arguments: args } = path.node; | ||
| // detect useTranslation("namespace") | ||
| if (t.isIdentifier(callee) && callee.name === "useTranslation") { | ||
| const firstArg = args[0]; | ||
| if (t.isStringLiteral(firstArg)) { | ||
| namespace = firstArg.value; | ||
| } | ||
| } | ||
| }, | ||
| }); | ||
| // ensure namespace exists | ||
| if (!newStrings[namespace]) { | ||
| newStrings[namespace] = new Set(); | ||
| } | ||
| // ๐ฅ STEP 2: extract t() strings | ||
| traverse(ast, { | ||
| CallExpression(path) { | ||
| const { callee, arguments: args } = path.node; | ||
| if (!t.isIdentifier(callee) || callee.name !== "t") | ||
@@ -47,9 +66,8 @@ return; | ||
| let extractedValue = null; | ||
| // โ STRING LITERAL | ||
| // โ string literal | ||
| if (t.isStringLiteral(firstArg)) { | ||
| extractedValue = firstArg.value; | ||
| } | ||
| // โ TEMPLATE LITERAL | ||
| // โ template literal | ||
| else if (t.isTemplateLiteral(firstArg)) { | ||
| // โ BLOCK dynamic template usage (IMPORTANT) | ||
| if (firstArg.expressions.length > 0) { | ||
@@ -60,4 +78,3 @@ console.error(` | ||
| ๐ Line: ${path.node.loc?.start.line} | ||
| ๐ก Code: t(\`...\${}\`) | ||
| ๐ Fix: t("Text {{var}}", { var }) | ||
| ๐ Use {{var}} instead of \${var} | ||
| `); | ||
@@ -73,5 +90,4 @@ return; | ||
| const normalizedText = normalize(extractedValue); | ||
| if (isValidText(normalizedText) && | ||
| !existingStrings.has(normalizedText)) { | ||
| newStrings.add(normalizedText); | ||
| if (isValidText(normalizedText)) { | ||
| (newStrings[namespace] ??= new Set()).add(normalizedText); | ||
| } | ||
@@ -99,5 +115,20 @@ }, | ||
| scanDir(SRC_DIR); | ||
| const updated = [...existingStrings, ...newStrings]; | ||
| fs.writeFileSync(OUTPUT_FILE, JSON.stringify(updated, null, 2)); | ||
| console.log(`โ Added ${newStrings.size} new strings`); | ||
| // ๐ฅ MERGE with existing | ||
| const finalOutput = {}; | ||
| Object.keys(newStrings).forEach((ns) => { | ||
| const existing = new Set(existingStrings[ns] || []); | ||
| const combined = new Set([ | ||
| ...existing, | ||
| ...Array.from(newStrings[ns] ?? new Set()), | ||
| ]); | ||
| finalOutput[ns] = Array.from(combined); | ||
| }); | ||
| // keep old namespaces if not touched | ||
| Object.keys(existingStrings).forEach((ns) => { | ||
| if (!finalOutput[ns]) { | ||
| finalOutput[ns] = existingStrings[ns] ?? []; | ||
| } | ||
| }); | ||
| fs.writeFileSync(OUTPUT_FILE, JSON.stringify(finalOutput, null, 2)); | ||
| console.log("โ Extraction complete with namespaces"); | ||
| //# sourceMappingURL=extractText.js.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"extractText.js","sourceRoot":"","sources":["../../src/scripts/extractText.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"extractText.js","sourceRoot":"","sources":["../../src/scripts/extractText.ts"],"names":[],"mappings":"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"} |
@@ -189,15 +189,17 @@ import dotenv from "dotenv"; | ||
| }); | ||
| const texts = JSON.parse(fs.readFileSync(INPUT, "utf-8")); | ||
| const PUBLIC_DIR = path.join(ROOT, "public"); | ||
| const raw = JSON.parse(fs.readFileSync(INPUT, "utf-8")); | ||
| const namespaceMap = raw; | ||
| const texts = Object.values(namespaceMap).flat(); | ||
| const LOCALES_DIR = path.join(ROOT, "public", "locales"); | ||
| const existingLangMap = {}; | ||
| const allLangs = [sourceLanguage, ...supportedLangs]; | ||
| // โ Load existing files | ||
| for (const lang of allLangs) { | ||
| const filePath = path.join(PUBLIC_DIR, `translations_${lang}.json`); | ||
| if (fs.existsSync(filePath)) { | ||
| existingLangMap[lang] = JSON.parse(fs.readFileSync(filePath, "utf-8")); | ||
| existingLangMap[lang] = {}; | ||
| for (const namespace of Object.keys(namespaceMap)) { | ||
| const filePath = path.join(LOCALES_DIR, lang, `${namespace}.json`); | ||
| if (fs.existsSync(filePath)) { | ||
| const data = JSON.parse(fs.readFileSync(filePath, "utf-8")); | ||
| Object.assign(existingLangMap[lang], data); | ||
| } | ||
| } | ||
| else { | ||
| existingLangMap[lang] = {}; | ||
| } | ||
| } | ||
@@ -230,3 +232,9 @@ // โ Filter texts needing translation | ||
| const entry = res[key]; | ||
| if (typeof entry !== "object" || entry === null) { | ||
| log.warn(`โ ๏ธ Invalid format for key: ${key}`); | ||
| continue; | ||
| } | ||
| for (const lang of Object.keys(entry)) { | ||
| if (!allLangs.includes(lang)) | ||
| continue; | ||
| if (!existingLangMap[lang]) { | ||
@@ -246,9 +254,27 @@ existingLangMap[lang] = {}; | ||
| // โ Ensure public folder exists | ||
| if (!fs.existsSync(PUBLIC_DIR)) { | ||
| fs.mkdirSync(PUBLIC_DIR, { recursive: true }); | ||
| // โ Ensure locales root exists | ||
| if (!fs.existsSync(LOCALES_DIR)) { | ||
| fs.mkdirSync(LOCALES_DIR, { recursive: true }); | ||
| } | ||
| // โ Write language-wise files | ||
| // โ Write namespace-based files | ||
| for (const lang of allLangs) { | ||
| const filePath = path.join(PUBLIC_DIR, `translations_${lang}.json`); | ||
| fs.writeFileSync(filePath, JSON.stringify(existingLangMap[lang], null, 2)); | ||
| for (const namespace of Object.keys(namespaceMap)) { | ||
| const dir = path.join(LOCALES_DIR, lang); | ||
| const filePath = path.join(dir, `${namespace}.json`); | ||
| if (!fs.existsSync(dir)) { | ||
| fs.mkdirSync(dir, { recursive: true }); | ||
| } | ||
| let existingData = {}; | ||
| if (fs.existsSync(filePath)) { | ||
| existingData = JSON.parse(fs.readFileSync(filePath, "utf-8")); | ||
| } | ||
| const namespaceStrings = namespaceMap[namespace] ?? []; | ||
| const updated = { ...existingData }; | ||
| for (const text of namespaceStrings) { | ||
| if (existingLangMap[lang]?.[text]) { | ||
| updated[text] = existingLangMap[lang][text]; | ||
| } | ||
| } | ||
| fs.writeFileSync(filePath, JSON.stringify(updated, null, 2)); | ||
| } | ||
| } | ||
@@ -260,3 +286,4 @@ log.success("translations generated successfully!"); | ||
| console.log(` Total stored translations: ${Object.values(existingLangMap[sourceLanguage] || {}).length}`); | ||
| console.log(` Output: public/translations_[lang].json\n`); | ||
| // โ Updated log | ||
| console.log(` Output: public/locales/{lang}/{namespace}.json\n`); | ||
| const duration = ((Date.now() - startTime) / 1000).toFixed(2); | ||
@@ -263,0 +290,0 @@ console.log(`โฑ Completed in ${duration}s`); |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"translate.js","sourceRoot":"","sources":["../../src/scripts/translate.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa;AAE3E,MAAM,GAAG,GAAG;IACV,IAAI,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,GAAG,EAAE,CAAC;IAChD,OAAO,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC;IACjD,KAAK,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC;IAC/C,IAAI,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,GAAG,EAAE,CAAC;IAChD,IAAI,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,GAAG,EAAE,CAAC;CAClD,CAAC;AAEF,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;AAC3B,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,uBAAuB,CAAC,CAAC;AACnE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC;IACtC,OAAO,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;IACpE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AACD,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC,CAAC;AAC9E,MAAM,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GACjE,aAAa,CAAC;AAEhB,IAAI,CAAC,cAAc,EAAE,CAAC;IACpB,GAAG,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;IAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,IAAI,CAAC,cAAc,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;IACnD,GAAG,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;IAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,IAAI,CAAC,QAAQ,EAAE,CAAC;IACd,GAAG,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;IAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,IAAI,CAAC,MAAM,EAAE,CAAC;IACZ,GAAG,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;IACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,IAAI,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;IAC7C,GAAG,CAAC,KAAK,CAAC,qBAAqB,QAAQ,EAAE,CAAC,CAAC;IAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAEpC,IAAI,CAAC,OAAO,EAAE,CAAC;IACb,OAAO,CAAC,KAAK,CAAC,KAAK,QAAQ,CAAC,WAAW,EAAE,0BAA0B,CAAC,CAAC;IACrE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,KAAK,GAAG,IAAI,kBAAkB,CAAC,OAAO,CAAC,CAAC;AAE9C,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC;IACxB,MAAM,EAAE,OAAO;CAChB,CAAC,CAAC;AAEH,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,sBAAsB,CAAC,CAAC;AACtD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,mBAAmB,CAAC,CAAC;AAE9D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;IAC1B,GAAG,CAAC,KAAK,CAAC,uDAAuD,CAAC,CAAC;IACnE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,GAAG,GAAG,CAAC;AAEvB,SAAS,KAAK,CAAC,GAAa,EAAE,IAAY;IACxC,MAAM,GAAG,GAAG,EAAE,CAAC;IACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC;QAC1C,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IACnC,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,4CAA4C;AAC5C,SAAS,eAAe,CACtB,IAAY,EACZ,eAAuD,EACvD,cAAwB;IAExB,OAAO,cAAc,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QACpC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,UAAU,CAAC,IAAY;IAC9B,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,WAAW,CAClB,KAAe,EACf,eAAoB,EACpB,cAAwB;IAExB,MAAM,YAAY,GAAG,KAAK;SACvB,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACZ,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,EAAE,eAAe,EAAE,cAAc,CAAC,CAAC;QACvE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAEtC,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;QAElC,OAAO,IAAI,QAAQ;WACd,cAAc,OAAO,QAAQ;UAC9B,OAAO,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC;QACjE,CAAC;IACL,CAAC,CAAC;SACD,MAAM,CAAC,OAAO,CAAC,CAAC;IAEnB,OAAO;;;;;EAKP,OAAO,CAAC,CAAC,CAAC,mCAAmC,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;;;;;;;;;;IAmB1D,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;;;;EAI1B,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;CACtB,CAAC;AACF,CAAC;AAED,KAAK,UAAU,cAAc,CAC3B,KAAU,EACV,SAAmB,EACnB,QAAa,EACb,cAAwB;IAExB,MAAM,MAAM,GAAG,WAAW,CAAC,SAAS,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC;IAEhE,iBAAiB;IACjB,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,eAAe,CAAC;YACzC,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;YACvD,gBAAgB,EAAE;gBAChB,WAAW,EAAE,GAAG;gBAChB,IAAI,EAAE,GAAG;gBACT,IAAI,EAAE,EAAE;gBACR,eAAe,EAAE,IAAI;gBACrB,gBAAgB,EAAE,kBAAkB;aACrC;SACF,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC;QAEvC,IAAI,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC3B,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAE/C,IAAI,CAAC;YACP,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;YACrC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAClB,MAAM,GAAG,CAAC;QACZ,CAAC;IACC,CAAC;IAED,iBAAiB;IACjB,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1B,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;YACtD,KAAK,EAAE,aAAa;YACpB,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,uDAAuD;iBACjE;gBACD;oBACE,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE,MAAM;iBAChB;aACF;YACD,WAAW,EAAE,CAAC;SACf,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;QAEvC,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACpD,CAAC;QAED,IAAI,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;QAElC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;QAC/C,CAAC;QAED,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAE/C,IAAI,CAAC;YACP,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;YACrC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAClB,MAAM,GAAG,CAAC;QACZ,CAAC;IACC,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;AACtC,CAAC;AAED,KAAK,UAAU,GAAG;IAChB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,GAAG,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;IAE3C,GAAG,CAAC,IAAI,CAAC,aAAa,QAAQ,EAAE,CAAC,CAAC;IAClC,GAAG,CAAC,IAAI,CAAC,oBAAoB,cAAc,EAAE,CAAC,CAAC;IAC/C,GAAG,CAAC,IAAI,CAAC,qBAAqB,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAE3D,MAAM,KAAK,GAAG,KAAK,CAAC,kBAAkB,CAAC;QACrC,KAAK,EAAE,kBAAkB;KAC1B,CAAC,CAAC;IAEH,MAAM,KAAK,GAAa,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;IAEpE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAE7C,MAAM,eAAe,GAA2C,EAAE,CAAC;IAEnE,MAAM,QAAQ,GAAG,CAAC,cAAc,EAAE,GAAG,cAAc,CAAC,CAAC;IAErD,wBAAwB;IACxB,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,gBAAgB,IAAI,OAAO,CAAC,CAAC;QAEpE,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,eAAe,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;QACzE,CAAC;aAAM,CAAC;YACN,eAAe,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,qCAAqC;IACrC,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;QAClC,MAAM,SAAS,GAAG,eAAe,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAEvD,IAAI,CAAC,SAAS;YAAE,OAAO,IAAI,CAAC;QAE5B,MAAM,YAAY,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,IAAY,EAAE,EAAE;YAC1D,OAAO,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;QAEH,OAAO,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAE3C,iBAAiB;IACjB,SAAS,cAAc,CAAC,OAAe,EAAE,KAAa;QACpD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC;QACpD,MAAM,SAAS,GAAG,EAAE,CAAC;QACrB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC;QACvD,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,CAAC;QAEhE,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,qBAAqB,GAAG,KAAK,OAAO,MAAM,OAAO,IAAI,KAAK,GAAG,CAC9D,CAAC;IACJ,CAAC;IAED,qBAAqB;IACrB,KAAK,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;QAC1C,cAAc,CAAC,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAErC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,cAAc,CAC9B,KAAK,EACL,KAAK,EACL,eAAe,EACf,cAAc,CACf,CAAC;YAEF,KAAK,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;gBACtB,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;gBAEvB,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;oBACtC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;wBAC3B,eAAe,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;oBAC7B,CAAC;oBAED,eAAe,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC3C,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACnC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,IAAI,GAAG,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAE3B,gCAAgC;IAChC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,8BAA8B;IAC9B,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,gBAAgB,IAAI,OAAO,CAAC,CAAC;QAEpE,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7E,CAAC;IAED,GAAG,CAAC,OAAO,CAAC,sCAAsC,CAAC,CAAC;IAEpD,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAC7B,OAAO,CAAC,GAAG,CAAC,2BAA2B,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IACvD,OAAO,CAAC,GAAG,CAAC,sBAAsB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IACrD,OAAO,CAAC,GAAG,CACT,iCACE,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,MACvD,EAAE,CACH,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;IAE5D,MAAM,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC9D,OAAO,CAAC,GAAG,CAAC,kBAAkB,QAAQ,GAAG,CAAC,CAAC;AAC7C,CAAC;AAED,GAAG,EAAE,CAAC"} | ||
| {"version":3,"file":"translate.js","sourceRoot":"","sources":["../../src/scripts/translate.ts"],"names":[],"mappings":"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"} |
+2
-2
| { | ||
| "name": "localize-ai", | ||
| "version": "1.3.0", | ||
| "description": "AI-powered React localization with context-aware translations, multi-provider support, lazy loading, and per-locale splitting", | ||
| "version": "1.4.0", | ||
| "description": "AI-powered React localization with AST-based extraction, namespace-based loading, smart caching, and multi-provider support", | ||
| "main": "dist/index.js", | ||
@@ -6,0 +6,0 @@ "types": "dist/index.d.ts", |
+163
-85
@@ -1,5 +0,6 @@ | ||
| # localize-ai | ||
| # localize-ai | ||
| **AI-powered React localization with AST-based extraction, namespace-based loading, and smart caching โก** | ||
| **Plug & Play AI-powered localization for React apps with lazy loading & per-locale splitting** | ||
| ๐ No regex. No manual cleanup. Just accurate and scalable translations. | ||
@@ -12,3 +13,2 @@ > Context-aware AI localization with multi-provider support โก | ||
| --- | ||
@@ -19,19 +19,27 @@ | ||
| ### ๐ง Core | ||
| * ๐ AST-based extraction (no regex) | ||
| * ๐งฉ Supports template literals with variables | ||
| * ๐งน Removes unused (dead) translations automatically | ||
| * ๐ AI-powered translations (OpenAI, Gemini) | ||
| * โก Incremental translation (only new strings/languages) | ||
| - ๐ AST-based extraction (no regex) | ||
| - ๐งฉ Supports template literals with variables | ||
| - ๐งน Removes unused (dead) translations automatically | ||
| - ๐ AI-powered translations (OpenAI, Gemini) | ||
| - โก Incremental translation (only new strings/languages) | ||
| ### โก Performance | ||
| * โก Lazy loading (loads only required language) | ||
| * ๐ฆ Per-locale splitting (smaller bundles) | ||
| * ๐ Built-in caching (no redundant fetches) | ||
| - **Namespace-based splitting** | ||
| โ Each language is split into namespaces (common.json, dashboard.json, etc.) | ||
| - **Lazy loading** | ||
| โ Only loads required namespace instead of entire language | ||
| - **Caching** | ||
| โ Prevents repeated fetches per language + namespace | ||
| ### โ๏ธ Developer Experience | ||
| * ๐ง Zero-config runtime | ||
| * โ๏ธ React hooks + context | ||
| * ๐ง Context-aware translations | ||
| * ๐ธ Cost optimized (no re-translation) | ||
| - ๐ง Zero-config runtime | ||
| - โ๏ธ React hooks + context | ||
| - ๐ง Context-aware translations | ||
| - ๐ธ Cost optimized (no re-translation) | ||
| --- | ||
@@ -43,8 +51,8 @@ | ||
| * **Per-locale splitting** | ||
| โ Each language is stored separately (translations_en.json, translations_hi.json) | ||
| * **Lazy loading** | ||
| โ Only loads the active language instead of all translations | ||
| * **Caching** | ||
| โ Prevents repeated fetches and improves performance | ||
| - **Per-locale splitting** | ||
| โ Each language is stored separately (translations_en.json, translations_hi.json) | ||
| - **Lazy loading** | ||
| โ Only loads the active language instead of all translations | ||
| - **Caching** | ||
| โ Prevents repeated fetches and improves performance | ||
@@ -59,7 +67,8 @@ ๐ This ensures fast load times and minimal bundle size. | ||
| * Handles complex code patterns | ||
| * Supports template literals with variables | ||
| * Avoids false positives | ||
| - Handles complex code patterns | ||
| - Supports template literals with variables | ||
| - Avoids false positives | ||
| Example: | ||
| ``` | ||
@@ -76,2 +85,45 @@ t(`hello {{userName}}, your order {{id}} is ready`, { | ||
| ### ๐งฉ Namespace-based Loading | ||
| Localize-ai supports namespace-based translation splitting for large applications: | ||
| ``` | ||
| public/ | ||
| โโโ locales/ | ||
| โโโ en/ | ||
| โ โโโ common.json | ||
| โ โโโ dashboard.json | ||
| โ โโโ checkout.json | ||
| โ โโโ ... | ||
| โโโ fr/ | ||
| โ โโโ common.json | ||
| โ โโโ dashboard.json | ||
| โ โโโ ... | ||
| ``` | ||
| Why this matters: | ||
| - Loads only required translations | ||
| - Improves performance for large apps | ||
| - Reduces initial bundle size | ||
| ๐ No more loading the entire language file at once. | ||
| --- | ||
| ## ๐ Smart Caching | ||
| Localize-ai caches translations per: | ||
| - language | ||
| - namespace | ||
| This ensures: | ||
| - no duplicate network requests | ||
| - faster UI rendering | ||
| - better runtime performance | ||
| --- | ||
| ## ๐ฆ Installation | ||
@@ -94,5 +146,5 @@ | ||
| translationLanguages: ["hi", "fr"], | ||
| provider: "gemini", // or "openai" | ||
| provider: "gemini", // or "openai" | ||
| apikey: "VITE_GEMINI_API_KEY", | ||
| context: "E-commerce checkout UI for buying products" | ||
| context: "E-commerce checkout UI for buying products", | ||
| }; | ||
@@ -131,14 +183,17 @@ ``` | ||
| * scan your codebase | ||
| * extract t("text") | ||
| * generate translations | ||
| * create per-language translation files: | ||
| - scan your codebase | ||
| - extract t("text") | ||
| - generate translations | ||
| - create per-language translation files: | ||
| ``` | ||
| public/ | ||
| โโโ translations_en.json | ||
| โโโ translations_hi.json | ||
| โโโ translations_fr.json | ||
| โโโ ... | ||
| โโโ locales/ | ||
| โโโ en/ | ||
| โ โโโ common.json | ||
| โ โโโ [namespace].json | ||
| โ โโโ ... | ||
| โโโ fr/ | ||
| โ โโโ ... | ||
| localize.runtime.json | ||
@@ -156,3 +211,3 @@ ``` | ||
| <App /> | ||
| </LanguageContextProvider> | ||
| </LanguageContextProvider>; | ||
| ``` | ||
@@ -164,15 +219,18 @@ | ||
| ### Using namespaces | ||
| ```tsx | ||
| import { useTranslation } from "localize-ai"; | ||
| const { t } = useTranslation("dashboard"); | ||
| ``` | ||
| function App() { | ||
| const { t } = useTranslation(); | ||
| ๐ Loads only `dashboard.json` for the active language. | ||
| return ( | ||
| <p> | ||
| {t("Welcome back, {{name}}!", { name: userName })} | ||
| </p> | ||
| )} | ||
| #### If no namespace is provided: | ||
| ``` | ||
| const { t } = useTranslation(); | ||
| ``` | ||
| ๐ Uses common.json by default. | ||
| --- | ||
@@ -198,5 +256,5 @@ | ||
| * Detects strings no longer present in code | ||
| * Cleans up translation files | ||
| Keeps JSON lean and optimized | ||
| - Detects strings no longer present in code | ||
| - Cleans up translation files | ||
| - Keeps JSON lean and optimized | ||
@@ -210,8 +268,8 @@ ๐ Prevents bloated translation files over time. | ||
| ```text | ||
| Code โ Extract โ Clean โ AI Translate โ JSON โ React Context โ UI | ||
| Code โ AST Extract โ Namespace Split โ AI Translate โ JSON โ Lazy Load โ Cache โ UI | ||
| ``` | ||
| * Only new strings are translated | ||
| * Only missing languages are generated | ||
| * Existing translations are reused | ||
| - Only new strings are translated | ||
| - Only missing languages are generated | ||
| - Existing translations are reused | ||
@@ -224,6 +282,9 @@ --- | ||
| public/ | ||
| โโโ translations_en.json | ||
| โโโ translations_hi.json | ||
| โโโ translations_fr.json | ||
| โโโ ... | ||
| โโโ locales/ | ||
| โโโ en/ | ||
| โ โโโ common.json | ||
| โ โโโ [namespace].json | ||
| โ โโโ ... | ||
| โโโ fr/ | ||
| โ โโโ ... | ||
| ``` | ||
@@ -243,3 +304,5 @@ | ||
| { | ||
| "Get started": "เคถเฅเคฐเฅ เคเคฐเฅเค" | ||
| "common": { | ||
| "Get started": "เคถเฅเคฐเฅ เคเคฐเฅเค" | ||
| } | ||
| } | ||
@@ -255,2 +318,3 @@ ``` | ||
| npx localize-ai translate # extract + translate | ||
| npx localize-ai delete-sync # delete dead translations | ||
| ``` | ||
@@ -262,16 +326,22 @@ | ||
| | Feature | localize-ai | traditional i18n | | ||
| | ------------------- | ----------- | ---------------- | | ||
| | Auto extraction | โ | โ | | ||
| | AI translation | โ | โ | | ||
| | Incremental updates | โ | โ | | ||
| | Setup time | โก minutes | โณ hours | | ||
| | Feature | localize-ai | traditional i18n | | ||
| |----------------------------------|------------|------------------| | ||
| | Auto extraction | โ | โ | | ||
| | AST-based parsing (no regex) | โ | โ | | ||
| | AI translation | โ | โ | | ||
| | Incremental updates | โ | โ | | ||
| | Namespace-based loading | โ | โ ๏ธ manual | | ||
| | Lazy loading | โ | โ ๏ธ manual | | ||
| | Built-in caching | โ | โ | | ||
| | Dead translation cleanup | โ | โ | | ||
| | Context-aware translations | โ | โ | | ||
| | Setup time | โก minutes | โณ hours | | ||
| --- | ||
| --- | ||
| ## โ ๏ธ Notes | ||
| * Only static strings inside `t("...")` are extracted | ||
| * Ensure `public/` folder exists | ||
| * API key is required only for translation step | ||
| - Only static strings inside `t("...")` are extracted | ||
| - Ensure `public/` folder exists | ||
| - API key is required only for translation step | ||
@@ -283,28 +353,36 @@ --- | ||
| ### Core Improvements | ||
| * [x] AST-based extraction (no regex) | ||
| * [ ] Better error handling & retry logic for failed translations | ||
| * [ ] CLI UX improvements (spinners, better logs) | ||
| - [x] AST-based extraction (no regex) | ||
| - [x] Template literal support with variables | ||
| - [ ] Better error handling & retry logic for failed translations | ||
| - [ ] CLI UX improvements (spinners, better logs) | ||
| ### Performance & DX | ||
| * [x] Lazy loading translations | ||
| * [x] Per-locale splitting | ||
| * [x] Built-in caching | ||
| * [ ] CDN support for translation files | ||
| ### Performance & Scalability | ||
| - [x] Lazy loading translations | ||
| - [x] Namespace-based splitting | ||
| - [x] Per-locale structure | ||
| - [x] Smart caching (per language + namespace) | ||
| - [ ] CDN support for translation files | ||
| ### Features | ||
| * [x] Multi-provider support (OpenAI, Gemini) | ||
| * [ ] Fallback providers (auto-switch if one fails) | ||
| * [ ] Custom translation rules (skip/override specific keys) | ||
| * [ ] Namespace support (group translations) | ||
| - [x] Multi-provider support (OpenAI, Gemini) | ||
| - [ ] Fallback providers (auto-switch if one fails) | ||
| - [ ] Custom translation rules (skip/override specific keys) | ||
| - [x] Namespace configuration (custom naming & grouping) | ||
| ### Developer Experience | ||
| * [ ] VS Code extension (highlight untranslated strings) | ||
| * [ ] Debug mode (show missing translations in UI) | ||
| * [ ] CLI dry-run mode | ||
| - [ ] VS Code extension (highlight untranslated strings) | ||
| - [ ] Debug mode (show missing translations in UI) | ||
| - [ ] CLI dry-run mode | ||
| - [ ] Type-safe translations (TS support for keys) | ||
| ### Maintenance & Optimization | ||
| - [x] Dead translation cleanup | ||
| - [ ] Translation validation (detect missing/interpolated variables) | ||
| - [x] Sync check (detect outdated translations) | ||
| ### Future Ideas | ||
| * [ ] Support for frameworks beyond React (Next.js, Vue) | ||
| * [ ] Dashboard for managing translations | ||
| * [ ] Analytics (missing keys, usage tracking) | ||
| - [ ] Framework support beyond React (Next.js, Vue) | ||
| - [ ] Web dashboard for managing translations | ||
| - [ ] Analytics (missing keys, usage tracking) | ||
| - [ ] Collaboration support (teams & workflows) | ||
| --- | ||
@@ -311,0 +389,0 @@ |
Network access
Supply chain riskThis module accesses the network.
Found 1 instance in 1 package
Shell access
Supply chain riskThis module accesses the system shell. Accessing the system shell increases the risk of executing arbitrary code.
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 1 instance in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
Network access
Supply chain riskThis module accesses the network.
Found 1 instance in 1 package
Shell access
Supply chain riskThis module accesses the system shell. Accessing the system shell increases the risk of executing arbitrary code.
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 1 instance in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
73382
12.93%822
10.19%401
24.15%