@translation-cms/sync 1.1.77 → 1.1.78

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli-entry.js CHANGED
@@ -5,6 +5,7 @@ import { resolveConfig, findProjectRoot } from './resolve-config.js';
5
5
  import { scanProject } from './scanner.js';
6
6
  import { postToSync, pullTranslations, loadSyncCache, serializeNamespaces, computeDiff, formatPreviewRoutes, } from './sync.js';
7
7
  import { loadConfigFile } from './load-config.js';
8
+ import { scaffoldI18n } from './scaffold.js';
8
9
  /**
9
10
  * sync-translations CLI
10
11
  *
@@ -156,9 +157,12 @@ async function runInit(root) {
156
157
  const cmsUrl = await question('CMS URL (e.g. https://cms.example.com): ');
157
158
  const projectId = await question('Project ID: ');
158
159
  const apiKey = await question('API key: ');
159
- const outputDir = await question('Pull output directory [./public/dictionaries]: ');
160
+ const i18nDirInput = await question('i18n directory [./src/lib/i18n]: ');
160
161
  const pullTtlInput = await question('Pull TTL in seconds [300]: ');
162
+ const scaffoldInput = await question('Scaffold i18n files (settings, client, server, provider)? [Y/n]: ');
161
163
  rl.close();
164
+ const i18nDir = i18nDirInput.trim() || './src/lib/i18n';
165
+ const outputDir = `${i18nDir.replace(/\/$/, '')}/dictionaries`;
162
166
  const config = {};
163
167
  if (cmsUrl.trim())
164
168
  config['cmsUrl'] = cmsUrl.trim();
@@ -166,8 +170,7 @@ async function runInit(root) {
166
170
  config['projectId'] = projectId.trim();
167
171
  if (apiKey.trim())
168
172
  config['apiKey'] = apiKey.trim();
169
- if (outputDir.trim())
170
- config['outputDir'] = outputDir.trim();
173
+ config['outputDir'] = outputDir;
171
174
  if (pullTtlInput.trim()) {
172
175
  const ttlSec = parseInt(pullTtlInput.trim(), 10);
173
176
  if (!isNaN(ttlSec))
@@ -181,6 +184,27 @@ async function runInit(root) {
181
184
  console.log(' echo ".translationsrc.json" >> .gitignore');
182
185
  console.log('Or move the API key to CMS_SYNC_API_KEY in .env.local instead.');
183
186
  }
187
+ const doScaffold = scaffoldInput.trim().toLowerCase() !== 'n';
188
+ if (doScaffold) {
189
+ const absI18nDir = path.isAbsolute(i18nDir)
190
+ ? i18nDir
191
+ : path.resolve(root, i18nDir);
192
+ const { written, skipped } = scaffoldI18n({ i18nDir: absI18nDir });
193
+ if (written.length > 0) {
194
+ console.log('\nScaffolded i18n files:');
195
+ for (const f of written)
196
+ console.log(` + src/lib/i18n/${f}`);
197
+ }
198
+ if (skipped.length > 0) {
199
+ console.log('\nSkipped (already exist):');
200
+ for (const f of skipped)
201
+ console.log(` ~ src/lib/i18n/${f}`);
202
+ }
203
+ console.log('\nNext steps:');
204
+ console.log(' 1. Install peer deps: pnpm add i18next react-i18next i18next-resources-to-backend');
205
+ console.log(' 2. Pull translations: sync-translations pull');
206
+ console.log(' 3. Wrap your root layout with <TranslationProvider locale={locale}>');
207
+ }
184
208
  }
185
209
  // ---------------------------------------------------------------------------
186
210
  // main
@@ -1 +1 @@
1
- {"version":3,"file":"cli-entry.js","sourceRoot":"","sources":["../src/cli-entry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli-entry.js","sourceRoot":"","sources":["../src/cli-entry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export interface ScaffoldOptions {
2
+ /** Absolute path to the i18n directory, e.g. /project/src/lib/i18n */
3
+ i18nDir: string;
4
+ /** Whether to overwrite existing files */
5
+ overwrite?: boolean;
6
+ }
7
+ export interface ScaffoldResult {
8
+ written: string[];
9
+ skipped: string[];
10
+ }
11
+ export declare function scaffoldI18n(opts: ScaffoldOptions): ScaffoldResult;
12
+ //# sourceMappingURL=scaffold.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"AAqWA,MAAM,WAAW,eAAe;IAC5B,sEAAsE;IACtE,OAAO,EAAE,MAAM,CAAC;IAChB,0CAA0C;IAC1C,SAAS,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC3B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,eAAe,GAAG,cAAc,CA8BlE"}
@@ -0,0 +1,372 @@
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+ // ---------------------------------------------------------------------------
4
+ // File templates
5
+ // ---------------------------------------------------------------------------
6
+ const SETTINGS_TS = `import type { InitOptions } from 'i18next';
7
+
8
+ // These imports resolve after running: sync-translations pull
9
+ import en from './dictionaries/en.json';
10
+ import type nl from './dictionaries/nl.json';
11
+
12
+ export const fallbackLng = 'nl' as const;
13
+ export const languages = ['nl', 'en'] as const;
14
+ export const defaultNS = 'common' as const;
15
+ export const cookieName = 'i18next';
16
+
17
+ export type Locale = (typeof languages)[number];
18
+
19
+ export const allNamespaces = Object.keys(
20
+ en
21
+ ) as readonly (keyof typeof en)[];
22
+
23
+ export type Dicts = {
24
+ en: typeof en;
25
+ nl: typeof nl;
26
+ };
27
+
28
+ // Re-export for convenience
29
+ export type { AppNamespace, Namespace } from './types';
30
+
31
+ export function getOptions(
32
+ lng: string = fallbackLng,
33
+ ns: string | readonly string[] = allNamespaces
34
+ ): InitOptions {
35
+ return {
36
+ supportedLngs: [...languages],
37
+ fallbackLng: lng,
38
+ lng,
39
+ fallbackNS: defaultNS,
40
+ defaultNS,
41
+ ns,
42
+ resources: {},
43
+ partialBundledLanguages: true,
44
+ interpolation: {
45
+ escapeValue: false,
46
+ },
47
+ };
48
+ }
49
+ `;
50
+ const TYPES_TS = `import type { allNamespaces, Dicts, languages } from './settings';
51
+
52
+ export type Locale = (typeof languages)[number];
53
+ export type AppNamespace = (typeof allNamespaces)[number];
54
+ export type Namespace = AppNamespace | readonly AppNamespace[];
55
+
56
+ type PluralSuffix = '_zero' | '_one' | '_two' | '_few' | '_many' | '_other';
57
+
58
+ type StripPluralSuffix<K extends string> =
59
+ K extends \`\${infer Base}\${PluralSuffix}\` ? Base : K;
60
+
61
+ export type LeafPaths<T> = T extends {
62
+ [key: string]: string | number | boolean | null | object;
63
+ }
64
+ ? {
65
+ [K in keyof T & string]: T[K] extends
66
+ | string
67
+ | number
68
+ | boolean
69
+ | null
70
+ ? K | StripPluralSuffix<K>
71
+ : T[K] extends object
72
+ ? \`\${K}.\${LeafPaths<T[K]> & string}\`
73
+ : never;
74
+ }[keyof T & string]
75
+ : never;
76
+
77
+ export type I18nKey = {
78
+ [Lang in keyof Dicts]: {
79
+ [Ns in keyof Dicts[Lang]]: \`\${Ns & string}:\${LeafPaths<Dicts[Lang][Ns]> & string}\`;
80
+ }[keyof Dicts[Lang]];
81
+ }[keyof Dicts];
82
+
83
+ export type TranslationKey<
84
+ Ns extends AppNamespace | readonly AppNamespace[] | undefined = undefined,
85
+ > = Ns extends undefined
86
+ ? I18nKey
87
+ : Ns extends readonly (infer N extends AppNamespace)[]
88
+ ? \`\${N}:\${LeafPaths<Dicts['en'][N]> & string}\`
89
+ : Ns extends AppNamespace
90
+ ? \`\${Ns}:\${LeafPaths<Dicts['en'][Ns]> & string}\`
91
+ : never;
92
+
93
+ export type TranslationKeys<
94
+ Ns extends AppNamespace | readonly AppNamespace[] | undefined,
95
+ > = (key: TranslationKey<Ns>, options?: any) => string;
96
+ `;
97
+ const CLIENT_TS = `'use client';
98
+
99
+ import { useCallback } from 'react';
100
+ import {
101
+ initReactI18next,
102
+ Trans,
103
+ useTranslation as useTranslationOrg,
104
+ type UseTranslationOptions,
105
+ } from 'react-i18next';
106
+
107
+ export { Trans };
108
+
109
+ import i18next, { type i18n as I18nInstance, type TOptions } from 'i18next';
110
+
111
+ import en from './dictionaries/en.json';
112
+ import nl from './dictionaries/nl.json';
113
+
114
+ import {
115
+ getOptions,
116
+ type AppNamespace,
117
+ type Locale,
118
+ } from './settings';
119
+ import type { TranslationKeys } from './types';
120
+
121
+ const resources = { en, nl } as const;
122
+
123
+ type StringTOptions = Omit<TOptions, 'returnDetails' | 'returnObjects'>;
124
+
125
+ let i18nInstance: I18nInstance | null = null;
126
+
127
+ export async function initI18nClient(locale: Locale): Promise<I18nInstance> {
128
+ if (i18nInstance) {
129
+ if (i18nInstance.language !== locale) {
130
+ await i18nInstance.changeLanguage(locale);
131
+ }
132
+ return i18nInstance;
133
+ }
134
+
135
+ i18nInstance = i18next.createInstance();
136
+
137
+ await i18nInstance.use(initReactI18next).init({
138
+ ...getOptions(locale),
139
+ resources,
140
+ });
141
+
142
+ return i18nInstance;
143
+ }
144
+
145
+ export function useTranslation<
146
+ Ns extends AppNamespace | readonly AppNamespace[],
147
+ >(ns: Ns, hookOptions?: UseTranslationOptions<undefined>) {
148
+ const namespacesToLoad: AppNamespace[] = Array.isArray(ns)
149
+ ? [...ns]
150
+ : ns
151
+ ? [ns]
152
+ : [];
153
+
154
+ const result = useTranslationOrg(namespacesToLoad, hookOptions);
155
+ const { t: tOrg } = result;
156
+
157
+ const tBase = useCallback(
158
+ (key: string, tOptions?: StringTOptions): string => {
159
+ return tOrg(key, {
160
+ ...tOptions,
161
+ returnDetails: false,
162
+ returnObjects: false,
163
+ } as TOptions) as string;
164
+ },
165
+ [tOrg]
166
+ );
167
+
168
+ const t = tBase as TranslationKeys<Ns>;
169
+ const tDynamic = tBase;
170
+
171
+ return {
172
+ ...result,
173
+ t,
174
+ tDynamic,
175
+ };
176
+ }
177
+ `;
178
+ const SERVER_TS = `import { initReactI18next } from 'react-i18next/initReactI18next';
179
+ import { cookies, headers } from 'next/headers';
180
+ import { createInstance, type TOptions } from 'i18next';
181
+ import resourcesToBackend from 'i18next-resources-to-backend';
182
+
183
+ import {
184
+ cookieName,
185
+ fallbackLng,
186
+ getOptions,
187
+ languages,
188
+ type Locale,
189
+ } from './settings';
190
+ import type { AppNamespace, I18nKey, TranslationKeys } from './types';
191
+
192
+ type StringTOptions = Omit<TOptions, 'returnDetails' | 'returnObjects'>;
193
+
194
+ export async function initI18n(locale: string) {
195
+ const i18n = createInstance();
196
+
197
+ await i18n
198
+ .use(initReactI18next)
199
+ .use(
200
+ resourcesToBackend((language: string, namespace: string) =>
201
+ import(\`./dictionaries/\${language}.json\`).then(module => {
202
+ return (module.default as Record<string, unknown>)[namespace] ?? {};
203
+ })
204
+ )
205
+ )
206
+ .init(getOptions(locale, []));
207
+
208
+ return i18n;
209
+ }
210
+
211
+ export async function getTranslation<
212
+ Ns extends AppNamespace | readonly AppNamespace[],
213
+ >(ns: Ns, options: { keyPrefix?: string } = {}) {
214
+ const lng = await getLocale();
215
+ const i18n = await initI18n(lng);
216
+
217
+ const namespacesToLoad: readonly AppNamespace[] = ns
218
+ ? Array.isArray(ns)
219
+ ? ns
220
+ : [ns]
221
+ : [];
222
+
223
+ if (namespacesToLoad.length > 0) {
224
+ await i18n.loadNamespaces(namespacesToLoad);
225
+ }
226
+
227
+ const fixedT = i18n.getFixedT(lng, namespacesToLoad, options.keyPrefix);
228
+
229
+ const t = (key: I18nKey, tOptions?: StringTOptions): string => {
230
+ return fixedT(key, {
231
+ ...tOptions,
232
+ returnDetails: false,
233
+ returnObjects: false,
234
+ } as TOptions) as string;
235
+ };
236
+
237
+ return {
238
+ t: t as TranslationKeys<Ns>,
239
+ tDynamic: t,
240
+ i18n,
241
+ };
242
+ }
243
+
244
+ export async function getLocale(): Promise<Locale> {
245
+ const isSupportedLocale = (value: string): value is Locale =>
246
+ (languages as readonly string[]).includes(value);
247
+
248
+ try {
249
+ const cookieStore = await cookies();
250
+ const localeCookie = cookieStore.get(cookieName);
251
+ if (localeCookie?.value && isSupportedLocale(localeCookie.value)) {
252
+ return localeCookie.value;
253
+ }
254
+
255
+ const headersList = await headers();
256
+ const acceptLanguage = headersList.get('accept-language') ?? '';
257
+ const supported = new Set(
258
+ (languages as readonly string[]).map(l => l.toLowerCase())
259
+ );
260
+
261
+ const preferences = acceptLanguage
262
+ .split(',')
263
+ .map((part): { code: string; q: number } | null => {
264
+ const trimmed = part.trim();
265
+ if (!trimmed) return null;
266
+ const [tag = '', qPartRaw] = trimmed.split(';');
267
+ const qPart = qPartRaw?.trim();
268
+ const q = qPart?.startsWith('q=') ? Number(qPart.slice(2)) : 1;
269
+ const code = (tag.trim().split('-')[0] ?? '').toLowerCase();
270
+ if (!code || !Number.isFinite(q) || q <= 0 || q > 1) return null;
271
+ return { code, q };
272
+ })
273
+ .filter((x): x is { code: string; q: number } => x !== null)
274
+ .sort((a, b) => b.q - a.q);
275
+
276
+ const best = preferences.find(x => supported.has(x.code));
277
+ if (best) return best.code as Locale;
278
+ } catch {
279
+ // cookies()/headers() unavailable at build time
280
+ }
281
+
282
+ return fallbackLng;
283
+ }
284
+ `;
285
+ const PROVIDER_TSX = `'use client';
286
+
287
+ import { useEffect, useState } from 'react';
288
+ import { I18nextProvider } from 'react-i18next';
289
+ import type { i18n as I18nInstance } from 'i18next';
290
+
291
+ import { initI18nClient } from './client';
292
+ import { cookieName, type Locale } from './settings';
293
+
294
+ interface TranslationProviderProps {
295
+ children: React.ReactNode;
296
+ locale: Locale;
297
+ }
298
+
299
+ /**
300
+ * Root provider for i18n. Add to your root layout:
301
+ *
302
+ * \`\`\`tsx
303
+ * import { TranslationProvider } from '@/lib/i18n/provider';
304
+ * import { getLocale } from '@/lib/i18n/server';
305
+ *
306
+ * export default async function RootLayout({ children }) {
307
+ * const locale = await getLocale();
308
+ * return (
309
+ * <html lang={locale}>
310
+ * <body>
311
+ * <TranslationProvider locale={locale}>
312
+ * {children}
313
+ * </TranslationProvider>
314
+ * </body>
315
+ * </html>
316
+ * );
317
+ * }
318
+ * \`\`\`
319
+ */
320
+ export function TranslationProvider({ children, locale }: TranslationProviderProps) {
321
+ const [i18n, setI18n] = useState<I18nInstance | null>(null);
322
+
323
+ useEffect(() => {
324
+ initI18nClient(locale).then(setI18n);
325
+ }, [locale]);
326
+
327
+ useEffect(() => {
328
+ if (!i18n) return;
329
+ const handleLanguageChanged = (lng: string) => {
330
+ document.documentElement.lang = lng;
331
+ const expires = new Date();
332
+ expires.setFullYear(expires.getFullYear() + 1);
333
+ document.cookie = \`\${cookieName}=\${encodeURIComponent(lng)}; expires=\${expires.toUTCString()}; path=/; SameSite=Lax\`;
334
+ };
335
+ handleLanguageChanged(i18n.language);
336
+ i18n.on('languageChanged', handleLanguageChanged);
337
+ return () => { i18n.off('languageChanged', handleLanguageChanged); };
338
+ }, [i18n]);
339
+
340
+ if (!i18n) return null;
341
+
342
+ return <I18nextProvider i18n={i18n}>{children}</I18nextProvider>;
343
+ }
344
+ `;
345
+ const PLACEHOLDER_DICT = JSON.stringify({ common: {} }, null, 4);
346
+ export function scaffoldI18n(opts) {
347
+ const { i18nDir, overwrite = false } = opts;
348
+ const dictsDir = path.join(i18nDir, 'dictionaries');
349
+ fs.mkdirSync(dictsDir, { recursive: true });
350
+ const files = [
351
+ { rel: 'settings.ts', content: SETTINGS_TS },
352
+ { rel: 'types.ts', content: TYPES_TS },
353
+ { rel: 'client.ts', content: CLIENT_TS },
354
+ { rel: 'server.ts', content: SERVER_TS },
355
+ { rel: 'provider.tsx', content: PROVIDER_TSX },
356
+ { rel: 'dictionaries/en.json', content: PLACEHOLDER_DICT },
357
+ { rel: 'dictionaries/nl.json', content: PLACEHOLDER_DICT },
358
+ ];
359
+ const written = [];
360
+ const skipped = [];
361
+ for (const { rel, content } of files) {
362
+ const abs = path.join(i18nDir, rel);
363
+ if (fs.existsSync(abs) && !overwrite) {
364
+ skipped.push(rel);
365
+ continue;
366
+ }
367
+ fs.writeFileSync(abs, content, 'utf-8');
368
+ written.push(rel);
369
+ }
370
+ return { written, skipped };
371
+ }
372
+ //# sourceMappingURL=scaffold.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,8EAA8E;AAC9E,iBAAiB;AACjB,8EAA8E;AAE9E,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2CnB,CAAC;AAEF,MAAM,QAAQ,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8ChB,CAAC;AAEF,MAAM,SAAS,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgFjB,CAAC;AAEF,MAAM,SAAS,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0GjB,CAAC;AAEF,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2DpB,CAAC;AAEF,MAAM,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AAkBjE,MAAM,UAAU,YAAY,CAAC,IAAqB;IAC9C,MAAM,EAAE,OAAO,EAAE,SAAS,GAAG,KAAK,EAAE,GAAG,IAAI,CAAC;IAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IAEpD,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE5C,MAAM,KAAK,GAA4C;QACnD,EAAE,GAAG,EAAE,aAAa,EAAE,OAAO,EAAE,WAAW,EAAE;QAC5C,EAAE,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE;QACtC,EAAE,GAAG,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE;QACxC,EAAE,GAAG,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE;QACxC,EAAE,GAAG,EAAE,cAAc,EAAE,OAAO,EAAE,YAAY,EAAE;QAC9C,EAAE,GAAG,EAAE,sBAAsB,EAAE,OAAO,EAAE,gBAAgB,EAAE;QAC1D,EAAE,GAAG,EAAE,sBAAsB,EAAE,OAAO,EAAE,gBAAgB,EAAE;KAC7D,CAAC;IAEF,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,KAAK,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,KAAK,EAAE,CAAC;QACnC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACpC,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACnC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAClB,SAAS;QACb,CAAC;QACD,EAAE,CAAC,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QACxC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACtB,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AAChC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@translation-cms/sync",
3
- "version": "1.1.77",
3
+ "version": "1.1.78",
4
4
  "description": "Scan translation keys in your codebase and sync them to the Translations CMS",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",