diff --git a/packages/core-browser/__tests__/external-preference.test.ts b/packages/core-browser/__tests__/external-preference.test.ts index b51f2ce07e..2f257177f7 100644 --- a/packages/core-browser/__tests__/external-preference.test.ts +++ b/packages/core-browser/__tests__/external-preference.test.ts @@ -82,12 +82,12 @@ describe('external preference tests', () => { getExternalPreferenceProvider('general.language')?.set(unique_languageId, PreferenceScope.Default); expect(getPreferenceLanguageId()).toBe(unique_languageId); - // 传入默认配置的情况下,如果可以通过 `getExternalPreference` 获取配置值,优先采用获取到的配置值 + // 传入默认配置的情况下,如果可以通过 `getExternalPreference` 获取配置值,优先级为: Folder > Workspace > User > 传入值 > Default, expect( getPreferenceLanguageId({ 'general.language': LOCALE_TYPES.EN_US, } as IPreferences), - ).toBe(unique_languageId); + ).toBe(LOCALE_TYPES.EN_US); // 采用 getExternalPreference 中的值兜底 expect( diff --git a/packages/core-browser/src/preferences/early-preferences.ts b/packages/core-browser/src/preferences/early-preferences.ts index adc2a7262d..170a5a9434 100644 --- a/packages/core-browser/src/preferences/early-preferences.ts +++ b/packages/core-browser/src/preferences/early-preferences.ts @@ -48,9 +48,14 @@ export function getPreferenceIconThemeId(): string { export function getPreferenceLanguageId(defaultPreferences?: IPreferences): string { // 默认从配置项中获取语言选项,其次从默认配置项中获取 `general.language`, 默认为 `en-US` const langFromDefaultPreferences = defaultPreferences && defaultPreferences[GeneralSettingsId.Language]; - return ( - getExternalPreference(GeneralSettingsId.Language).value || langFromDefaultPreferences || getLanguageId() - ); + const langExternalPreference = getExternalPreference(GeneralSettingsId.Language); + + // 用户自定义语言设置优先于默认设置 + if (langExternalPreference.value && langExternalPreference.scope > PreferenceScope.Default) { + return langExternalPreference.value; + } + + return langFromDefaultPreferences || langExternalPreference.value || getLanguageId(); } // 默认使用 localStorage