Skip to content

Commit 870f202

Browse files
committed
feat(compiler): load only client translations when in client mode
1 parent 0058ac2 commit 870f202

4 files changed

Lines changed: 26 additions & 5 deletions

File tree

demo/next/next.config.mjs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,4 @@ export default compiler.next(
1313
replexicaConfig,
1414
nextConfig,
1515
);
16+

demo/next/src/app/layout.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ export default async function RootLayout({
1717
children: React.ReactNode;
1818
}>) {
1919
const locale = await loadLocaleFromCookie();
20-
const localeData = await import(`@replexica/translations/${locale}.json`).then((m) => m.default);
20+
const localeData = await import(`@replexica/translations/${locale}.client.json`).then((m) => m.default);
2121
return (
2222
<ReplexicaIntlProvider data={localeData}>
2323
<html lang={locale}>

packages/compiler/src/index.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,8 @@ const unplugin = createUnplugin<ReplexicaConfig>((options) => ({
2929

3030
const outputProcessor = ReplexicaOutputProcessor.create(relativeFilePath, options);
3131
outputProcessor.saveData(compiler.data);
32-
outputProcessor.saveSourceLocaleData(compiler.data);
32+
outputProcessor.saveFullSourceLocaleData(compiler.data);
33+
outputProcessor.saveClientSourceLocaleData(compiler.data);
3334

3435
if (options.debug) {
3536
outputProcessor.saveAst(compiler.ast);

packages/compiler/src/output.ts

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,16 +30,35 @@ export class ReplexicaOutputProcessor {
3030
this._saveObject(filePath, newData);
3131
}
3232

33+
public saveFullSourceLocaleData(data: ReplexicaCompilerData) {
34+
const fileName = `${this.options.sourceLocale}.json`;
35+
this._saveSourceLocaleData(data, fileName);
36+
}
37+
38+
public saveClientSourceLocaleData(data: ReplexicaCompilerData) {
39+
const fileName = `${this.options.sourceLocale}.client.json`;
40+
this._saveSourceLocaleData(
41+
data,
42+
fileName,
43+
(fileData) => fileData.context.isClient,
44+
);
45+
}
3346

34-
public saveSourceLocaleData(data: ReplexicaCompilerData) {
47+
private _saveSourceLocaleData(
48+
data: ReplexicaCompilerData,
49+
fileName: string,
50+
fileDataPredicate: (fileData: ReplexicaCompilerData['']) => boolean = () => true,
51+
) {
3552
const existingData: ReplexicaLocaleData =
36-
this._loadObject<ReplexicaLocaleData>(path.join(this._outDir, `${this.options.sourceLocale}.json`)) ||
53+
this._loadObject<ReplexicaLocaleData>(path.join(this._outDir, fileName)) ||
3754
this._createEmptyLocaleData();
3855

3956
const newLocaleData: ReplexicaLocaleData = {
4057
...existingData,
4158
};
4259
for (const [fileId, fileData] of Object.entries(data)) {
60+
if (!fileDataPredicate(fileData)) { continue; }
61+
4362
newLocaleData[fileId] = {};
4463
for (const [scopeId, scopeData] of Object.entries(fileData.data)) {
4564
for (const [chunkId, value] of Object.entries(scopeData.data)) {
@@ -56,7 +75,7 @@ export class ReplexicaOutputProcessor {
5675
delete newLocaleData[fileId];
5776
}
5877
}
59-
const filePath = path.join(this._outDir, `${this.options.sourceLocale}.json`);
78+
const filePath = path.join(this._outDir, fileName);
6079
this._saveObject(filePath, newLocaleData);
6180
}
6281

0 commit comments

Comments
 (0)