Support setting the browserWindow's language (fix #175) (PR #1173 )

This commit is contained in:
Adam Weeden 2021-04-30 23:16:57 -04:00 committed by GitHub
parent 7dc189ef3f
commit 895c11a53e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 36 additions and 4 deletions

View File

@ -31,6 +31,7 @@ if (require('electron-squirrel-startup')) {
const appArgs = JSON.parse(fs.readFileSync(APP_ARGS_FILE_PATH, 'utf8'));
log.debug('appArgs', appArgs);
// Do this relatively early so that we can start storing appData with the app
if (appArgs.portable) {
log.debug(
@ -124,9 +125,20 @@ if (appArgs.basicAuthPassword) {
);
}
const isRunningMacos = isOSX();
if (appArgs.lang) {
const langParts = (appArgs.lang as string).split(',');
// Convert locales to languages, because for some reason locales don't work. Stupid Chromium
const langPartsParsed = Array.from(
// Convert to set to dedupe in case something like "en-GB,en-US" was passed
new Set(langParts.map((l) => l.split('-')[0])),
);
const langFlag = langPartsParsed.join(',');
log.debug('Setting --lang flag to', langFlag);
app.commandLine.appendSwitch('--lang', langFlag);
}
let currentBadgeCount = 0;
const setDockBadge = isRunningMacos
const setDockBadge = isOSX()
? (count: number, bounce = false) => {
app.dock.setBadge(count.toString());
if (bounce && count > currentBadgeCount) app.dock.bounce();

View File

@ -39,6 +39,7 @@
- [[show-menu-bar]](#show-menu-bar)
- [[fast-quit]](#fast-quit)
- [[user-agent]](#user-agent)
- [[lang]](#lang)
- [[honest]](#honest)
- [[ignore-certificate]](#ignore-certificate)
- [[disable-gpu]](#disable-gpu)
@ -405,6 +406,14 @@ Specifies if the menu bar should be shown.
Set the user agent to run the created app with.
#### [lang]
```
--lang <value>
```
Set the language or locale to render the web site as (e.g., "fr", "en-US", "es", etc.)
#### [honest]
```

View File

@ -58,6 +58,7 @@ function pickElectronAppArgs(options: AppOptions): any {
internalUrls: options.nativefier.internalUrls,
isUpgrade: options.packager.upgrade,
junk: options.packager.junk,
lang: options.nativefier.lang,
maximize: options.nativefier.maximize,
maxHeight: options.nativefier.maxHeight,
maxWidth: options.nativefier.maxWidth,

View File

@ -173,6 +173,10 @@ if (require.main === module) {
'(macOS only) quit app on window close; defaults to false',
)
.option('-u, --user-agent <value>', 'set the app user agent string')
.option(
'--lang <value>',
'set the language or locale to render the web site as (e.g., "fr", "en-US", "es", etc.)',
)
.option(
'--honest',
'prevent the normal changing of the user agent string to appear as a regular Chrome browser',

View File

@ -74,6 +74,9 @@ async function checkApp(appRoot: string, inputOptions: any): Promise<void> {
inputOptions.platform,
),
);
// Test lang
expect(nativefierConfig.lang).toBe(inputOptions.lang);
}
describe('Nativefier', () => {
@ -88,6 +91,7 @@ describe('Nativefier', () => {
out: tempDirectory,
overwrite: true,
platform,
lang: 'en-US',
};
const appPath = await buildNativefierApp(options);
await checkApp(appPath, options);

View File

@ -16,6 +16,7 @@ export interface AppOptions {
backgroundColor: string;
basicAuthPassword: string;
basicAuthUsername: string;
blockExternalUrls: boolean;
bookmarksMenu: string;
bounce: boolean;
browserwindowOptions: any;
@ -40,7 +41,7 @@ export interface AppOptions {
inject: string[];
insecure: boolean;
internalUrls: string;
blockExternalUrls: boolean;
lang?: string;
maximize: boolean;
nativefierVersion: string;
processEnvs: string;

View File

@ -58,6 +58,7 @@ export async function getOptions(rawOptions: any): Promise<AppOptions> {
backgroundColor: rawOptions.backgroundColor || null,
basicAuthPassword: rawOptions.basicAuthPassword || null,
basicAuthUsername: rawOptions.basicAuthUsername || null,
blockExternalUrls: rawOptions.blockExternalUrls || false,
bookmarksMenu: rawOptions.bookmarksMenu || null,
bounce: rawOptions.bounce || false,
browserwindowOptions: rawOptions.browserwindowOptions,
@ -82,7 +83,7 @@ export async function getOptions(rawOptions: any): Promise<AppOptions> {
inject: rawOptions.inject || [],
insecure: rawOptions.insecure || false,
internalUrls: rawOptions.internalUrls || null,
blockExternalUrls: rawOptions.blockExternalUrls || false,
lang: rawOptions.lang || undefined,
maximize: rawOptions.maximize || false,
nativefierVersion: packageJson.version,
processEnvs: rawOptions.processEnvs,