Copy missing locale paks on build
This commit is contained in:
parent
891e72a260
commit
65e107fba5
2 changed files with 77 additions and 1 deletions
|
@ -1,11 +1,13 @@
|
|||
// Copyright 2021 Signal Messenger, LLC
|
||||
// Copyright 2021-2022 Signal Messenger, LLC
|
||||
// SPDX-License-Identifier: AGPL-3.0-only
|
||||
|
||||
import type { AfterPackContext } from 'electron-builder';
|
||||
import { afterPack as fuseElectron } from './fuse-electron';
|
||||
import { afterPack as mergeASARs } from './merge-macos-asars';
|
||||
import { afterPack as copyPacks } from './copy-language-packs';
|
||||
|
||||
export async function afterPack(context: AfterPackContext): Promise<void> {
|
||||
await mergeASARs(context);
|
||||
await fuseElectron(context);
|
||||
await copyPacks(context);
|
||||
}
|
||||
|
|
74
ts/scripts/copy-language-packs.ts
Normal file
74
ts/scripts/copy-language-packs.ts
Normal file
|
@ -0,0 +1,74 @@
|
|||
// Copyright 2022 Signal Messenger, LLC
|
||||
// SPDX-License-Identifier: AGPL-3.0-only
|
||||
|
||||
import fse from 'fs-extra';
|
||||
import path from 'path';
|
||||
import type { AfterPackContext } from 'electron-builder';
|
||||
|
||||
export async function afterPack({
|
||||
appOutDir,
|
||||
packager,
|
||||
electronPlatformName,
|
||||
}: AfterPackContext): Promise<void> {
|
||||
let defaultLocale: string;
|
||||
let ourLocales = await fse.readdir(
|
||||
path.join(__dirname, '..', '..', '_locales')
|
||||
);
|
||||
|
||||
let localesPath: string;
|
||||
if (electronPlatformName === 'darwin') {
|
||||
const { productFilename } = packager.appInfo;
|
||||
|
||||
// en.lproj/locale.pak
|
||||
// zh_CN.lproj/locale.pak
|
||||
defaultLocale = 'en.lproj';
|
||||
ourLocales = ourLocales.map(locale => `${locale}.lproj`);
|
||||
|
||||
localesPath = path.join(
|
||||
appOutDir,
|
||||
`${productFilename}.app`,
|
||||
'Contents',
|
||||
'Frameworks',
|
||||
'Electron Framework.framework',
|
||||
'Resources'
|
||||
);
|
||||
} else if (
|
||||
electronPlatformName === 'linux' ||
|
||||
electronPlatformName === 'win32'
|
||||
) {
|
||||
// Shared between windows and linux
|
||||
defaultLocale = 'en-US.pak';
|
||||
ourLocales = ourLocales.map(locale => {
|
||||
if (locale === 'en') {
|
||||
return defaultLocale;
|
||||
}
|
||||
|
||||
return `${locale.replace(/_/g, '-')}.pak`;
|
||||
});
|
||||
|
||||
localesPath = path.join(appOutDir, 'locales');
|
||||
} else {
|
||||
console.error(
|
||||
`Unsupported platform: ${electronPlatformName}, not copying pak files`
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
const electronLocales = new Set(await fse.readdir(localesPath));
|
||||
const promises = new Array<Promise<void>>();
|
||||
for (const locale of ourLocales) {
|
||||
if (electronLocales.has(locale)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
console.log(`Copying ${defaultLocale} to ${locale}`);
|
||||
promises.push(
|
||||
fse.copy(
|
||||
path.join(localesPath, defaultLocale),
|
||||
path.join(localesPath, locale)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
await Promise.all(promises);
|
||||
}
|
Loading…
Reference in a new issue