fix(electron): respect locale for spellchecker (#8844)
may fix #8837. fix AF-1712 MacOS automatically do spellcheck based on given text. This only works for Win/Linux. 
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
import { app, nativeTheme, shell } from 'electron';
|
import { app, nativeTheme, shell } from 'electron';
|
||||||
import { getLinkPreview } from 'link-preview-js';
|
import { getLinkPreview } from 'link-preview-js';
|
||||||
|
|
||||||
|
import { isMacOS } from '../../shared/utils';
|
||||||
import { persistentConfig } from '../config-storage/persist';
|
import { persistentConfig } from '../config-storage/persist';
|
||||||
import { logger } from '../logger';
|
import { logger } from '../logger';
|
||||||
import type { WorkbenchViewMeta } from '../shared-state-schema';
|
import type { WorkbenchViewMeta } from '../shared-state-schema';
|
||||||
@@ -220,4 +221,15 @@ export const uiHandlers = {
|
|||||||
app.relaunch();
|
app.relaunch();
|
||||||
app.quit();
|
app.quit();
|
||||||
},
|
},
|
||||||
|
onLanguageChange: async (e, language: string) => {
|
||||||
|
// only works for win/linux
|
||||||
|
// see https://www.electronjs.org/docs/latest/tutorial/spellchecker#how-to-set-the-languages-the-spellchecker-uses
|
||||||
|
if (isMacOS()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (e.sender.session.availableSpellCheckerLanguages.includes(language)) {
|
||||||
|
e.sender.session.setSpellCheckerLanguages([language, 'en-US']);
|
||||||
|
}
|
||||||
|
},
|
||||||
} satisfies NamespaceHandlers;
|
} satisfies NamespaceHandlers;
|
||||||
|
|||||||
@@ -4,6 +4,8 @@ import {
|
|||||||
GlobalStateService,
|
GlobalStateService,
|
||||||
} from '@toeverything/infra';
|
} from '@toeverything/infra';
|
||||||
|
|
||||||
|
import { DesktopApiService } from '../desktop-api';
|
||||||
|
import { I18n } from '../i18n';
|
||||||
import { UserDBService } from '../userspace';
|
import { UserDBService } from '../userspace';
|
||||||
import { EditorSetting } from './entities/editor-setting';
|
import { EditorSetting } from './entities/editor-setting';
|
||||||
import { CurrentUserDBEditorSettingProvider } from './impls/user-db';
|
import { CurrentUserDBEditorSettingProvider } from './impls/user-db';
|
||||||
@@ -25,5 +27,9 @@ export function configureEditorSettingModule(framework: Framework) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function configureSpellCheckSettingModule(framework: Framework) {
|
export function configureSpellCheckSettingModule(framework: Framework) {
|
||||||
framework.service(SpellCheckSettingService, [GlobalStateService]);
|
framework.service(SpellCheckSettingService, [
|
||||||
|
GlobalStateService,
|
||||||
|
I18n,
|
||||||
|
DesktopApiService,
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,14 +2,31 @@ import type {
|
|||||||
SpellCheckStateKey,
|
SpellCheckStateKey,
|
||||||
SpellCheckStateSchema,
|
SpellCheckStateSchema,
|
||||||
} from '@affine/electron/main/shared-state-schema';
|
} from '@affine/electron/main/shared-state-schema';
|
||||||
|
import type { Language } from '@affine/i18n';
|
||||||
import type { GlobalStateService } from '@toeverything/infra';
|
import type { GlobalStateService } from '@toeverything/infra';
|
||||||
import { LiveData, Service } from '@toeverything/infra';
|
import { LiveData, Service } from '@toeverything/infra';
|
||||||
|
|
||||||
|
import type { DesktopApiService } from '../../desktop-api';
|
||||||
|
import type { I18n } from '../../i18n';
|
||||||
|
|
||||||
const SPELL_CHECK_SETTING_KEY: SpellCheckStateKey = 'spellCheckState';
|
const SPELL_CHECK_SETTING_KEY: SpellCheckStateKey = 'spellCheckState';
|
||||||
|
|
||||||
export class SpellCheckSettingService extends Service {
|
export class SpellCheckSettingService extends Service {
|
||||||
constructor(private readonly globalStateService: GlobalStateService) {
|
constructor(
|
||||||
|
private readonly globalStateService: GlobalStateService,
|
||||||
|
private readonly i18n: I18n,
|
||||||
|
private readonly desktopApiService: DesktopApiService
|
||||||
|
) {
|
||||||
super();
|
super();
|
||||||
|
|
||||||
|
// this will be called even during initialization
|
||||||
|
this.i18n.i18next.on('languageChanged', (language: Language) => {
|
||||||
|
this.desktopApiService.handler.ui
|
||||||
|
.onLanguageChange(language)
|
||||||
|
.catch(err => {
|
||||||
|
console.error(err);
|
||||||
|
});
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
enabled$ = LiveData.from(
|
enabled$ = LiveData.from(
|
||||||
|
|||||||
Reference in New Issue
Block a user