Skip to content

Commit b9c6a8b

Browse files
committed
feat: add manual setting lang lock keyu
Signed-off-by: Innei <i@innei.in>
1 parent 6b1009e commit b9c6a8b

File tree

3 files changed

+19
-14
lines changed

3 files changed

+19
-14
lines changed

src/renderer/src/constants/app.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,6 @@ export const ROUTE_FEED_IN_FOLDER = "folder-"
1212

1313
export const DAILY_CLAIM_AMOUNT = "20"
1414
export const INVITATION_PRICE = "100"
15+
16+
// NS key
17+
export const IS_MANUAL_CHANGE_LANGUAGE_KEY = getStorageNS("isManualChangeLanguage")

src/renderer/src/modules/settings/tabs/general.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import {
1919
SelectTrigger,
2020
SelectValue,
2121
} from "@renderer/components/ui/select"
22+
import { IS_MANUAL_CHANGE_LANGUAGE_KEY } from "@renderer/constants"
2223
import { fallbackLanguage } from "@renderer/i18n"
2324
import { initPostHog } from "@renderer/initialize/posthog"
2425
import { tipcClient } from "@renderer/lib/client"
@@ -213,6 +214,7 @@ export const LanguageSelector = () => {
213214
defaultValue={finalRenderLanguage}
214215
value={finalRenderLanguage}
215216
onValueChange={(value) => {
217+
localStorage.setItem(IS_MANUAL_CHANGE_LANGUAGE_KEY, "true")
216218
setGeneralSetting("language", value as string)
217219
i18n.changeLanguage(value as string)
218220
}}

src/renderer/src/providers/i18n-provider.tsx

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
1-
import {
2-
currentSupportedLanguages,
3-
dayjsLocaleImportMap,
4-
} from "@renderer/@types/constants"
1+
import { currentSupportedLanguages, dayjsLocaleImportMap } from "@renderer/@types/constants"
52
import { defaultResources } from "@renderer/@types/default-resource"
63
import { getGeneralSettings, setGeneralSetting } from "@renderer/atoms/settings/general"
4+
import { IS_MANUAL_CHANGE_LANGUAGE_KEY } from "@renderer/constants"
75
import { fallbackLanguage, i18nAtom, LocaleCache } from "@renderer/i18n"
86
import { EventBus } from "@renderer/lib/event-bus"
97
import { jotaiStore } from "@renderer/lib/jotai"
@@ -110,7 +108,19 @@ export const I18nProvider: FC<PropsWithChildren> = ({ children }) => {
110108

111109
const callOnce = useRef(false)
112110
const detectOnce = useRef(false)
111+
112+
useLayoutEffect(() => {
113+
const i18next = currentI18NInstance
114+
115+
i18next.on("languageChanged", langChangedHandler)
116+
117+
return () => {
118+
i18next.off("languageChanged")
119+
}
120+
}, [currentI18NInstance])
121+
113122
useLayoutEffect(() => {
123+
if (localStorage.getItem(IS_MANUAL_CHANGE_LANGUAGE_KEY)) return
114124
if (detectOnce.current) return
115125
const languageDetector = new LanguageDetector()
116126
const userLang = languageDetector.detect()
@@ -122,16 +132,6 @@ export const I18nProvider: FC<PropsWithChildren> = ({ children }) => {
122132
detectOnce.current = true
123133
}, [])
124134

125-
useLayoutEffect(() => {
126-
const i18next = currentI18NInstance
127-
128-
i18next.on("languageChanged", langChangedHandler)
129-
130-
return () => {
131-
i18next.off("languageChanged")
132-
}
133-
}, [currentI18NInstance])
134-
135135
useLayoutEffect(() => {
136136
if (callOnce.current) return
137137
const { language } = getGeneralSettings()

0 commit comments

Comments
 (0)