fix: default setup language to system locale (#500)
This commit is contained in:
committed by
GitHub
Unverified
parent
04aa94f907
commit
08960d700f
@@ -1,5 +1,10 @@
|
||||
import i18n from 'i18next';
|
||||
import { initReactI18next } from 'react-i18next';
|
||||
import {
|
||||
SUPPORTED_LANGUAGE_CODES,
|
||||
resolveSupportedLanguage,
|
||||
type LanguageCode,
|
||||
} from '../../shared/language';
|
||||
|
||||
// EN
|
||||
import enCommon from './locales/en/common.json';
|
||||
@@ -38,9 +43,7 @@ export const SUPPORTED_LANGUAGES = [
|
||||
{ code: 'en', label: 'English' },
|
||||
{ code: 'zh', label: '中文' },
|
||||
{ code: 'ja', label: '日本語' },
|
||||
] as const;
|
||||
|
||||
export type LanguageCode = (typeof SUPPORTED_LANGUAGES)[number]['code'];
|
||||
] as const satisfies ReadonlyArray<{ code: LanguageCode; label: string }>;
|
||||
|
||||
const resources = {
|
||||
en: {
|
||||
@@ -82,8 +85,9 @@ i18n
|
||||
.use(initReactI18next)
|
||||
.init({
|
||||
resources,
|
||||
lng: 'en', // will be overridden by settings store
|
||||
lng: resolveSupportedLanguage(typeof navigator !== 'undefined' ? navigator.language : undefined),
|
||||
fallbackLng: 'en',
|
||||
supportedLngs: [...SUPPORTED_LANGUAGE_CODES],
|
||||
defaultNS: 'common',
|
||||
ns: ['common', 'settings', 'dashboard', 'chat', 'channels', 'agents', 'skills', 'cron', 'setup'],
|
||||
interpolation: {
|
||||
|
||||
@@ -6,6 +6,7 @@ import { create } from 'zustand';
|
||||
import { persist } from 'zustand/middleware';
|
||||
import i18n from '@/i18n';
|
||||
import { hostApiFetch } from '@/lib/host-api';
|
||||
import { resolveSupportedLanguage } from '../../shared/language';
|
||||
|
||||
type Theme = 'light' | 'dark' | 'system';
|
||||
type UpdateChannel = 'stable' | 'beta' | 'dev';
|
||||
@@ -66,12 +67,7 @@ interface SettingsState {
|
||||
|
||||
const defaultSettings = {
|
||||
theme: 'system' as Theme,
|
||||
language: (() => {
|
||||
const lang = navigator.language.toLowerCase();
|
||||
if (lang.startsWith('zh')) return 'zh';
|
||||
if (lang.startsWith('ja')) return 'ja';
|
||||
return 'en';
|
||||
})(),
|
||||
language: resolveSupportedLanguage(typeof navigator !== 'undefined' ? navigator.language : undefined),
|
||||
startMinimized: false,
|
||||
launchAtStartup: false,
|
||||
telemetryEnabled: true,
|
||||
@@ -99,9 +95,16 @@ export const useSettingsStore = create<SettingsState>()(
|
||||
init: async () => {
|
||||
try {
|
||||
const settings = await hostApiFetch<Partial<typeof defaultSettings>>('/api/settings');
|
||||
set((state) => ({ ...state, ...settings }));
|
||||
if (settings.language) {
|
||||
i18n.changeLanguage(settings.language);
|
||||
const resolvedLanguage = settings.language
|
||||
? resolveSupportedLanguage(settings.language)
|
||||
: undefined;
|
||||
set((state) => ({
|
||||
...state,
|
||||
...settings,
|
||||
...(resolvedLanguage ? { language: resolvedLanguage } : {}),
|
||||
}));
|
||||
if (resolvedLanguage) {
|
||||
i18n.changeLanguage(resolvedLanguage);
|
||||
}
|
||||
} catch {
|
||||
// Keep renderer-persisted settings as a fallback when the main
|
||||
@@ -111,11 +114,12 @@ export const useSettingsStore = create<SettingsState>()(
|
||||
|
||||
setTheme: (theme) => set({ theme }),
|
||||
setLanguage: (language) => {
|
||||
i18n.changeLanguage(language);
|
||||
set({ language });
|
||||
const resolvedLanguage = resolveSupportedLanguage(language);
|
||||
i18n.changeLanguage(resolvedLanguage);
|
||||
set({ language: resolvedLanguage });
|
||||
void hostApiFetch('/api/settings/language', {
|
||||
method: 'PUT',
|
||||
body: JSON.stringify({ value: language }),
|
||||
body: JSON.stringify({ value: resolvedLanguage }),
|
||||
}).catch(() => { });
|
||||
},
|
||||
setStartMinimized: (startMinimized) => set({ startMinimized }),
|
||||
|
||||
Reference in New Issue
Block a user