Skip to content

Commit ce1d7ee

Browse files
committed
feat: add navigator language detector
1 parent fab38b2 commit ce1d7ee

File tree

2 files changed

+18
-10
lines changed

2 files changed

+18
-10
lines changed

client/shared/i18n/index.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import {
99
initReactI18next,
1010
} from 'react-i18next';
1111
import { crc32 } from 'crc';
12-
import { languageDetector } from './language';
12+
import { defaultLanguage, languageDetector } from './language';
1313
import { useState, useEffect } from 'react';
1414
import HttpApi from 'i18next-http-backend'; // https://github.com/i18next/i18next-http-backend
1515

@@ -23,13 +23,13 @@ i18next
2323
.use(HttpApi)
2424
.use(initReactI18next)
2525
.init({
26-
fallbackLng: 'zh-CN',
26+
fallbackLng: defaultLanguage,
2727
load: 'currentOnly',
2828
backend: {
2929
loadPath: '/locales/{{lng}}/{{ns}}.json',
3030
allowMultiLoading: false,
3131
addPath: (...args: any[]) => {
32-
console.log('缺少翻译:', ...args);
32+
console.log('Lost translate:', ...args);
3333
},
3434
},
3535
react: {

client/shared/i18n/language.ts

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,25 @@ import { AllowedLanguage, setLanguage as setI18NLanguage } from './index';
55
import { getStorage, useStorage } from '../manager/storage';
66
import { LANGUAGE_KEY } from '../utils/consts';
77

8-
const defaultLanguage = 'zh-CN';
8+
export const defaultLanguage = 'en-US';
9+
10+
function getNavigatorLanguage(): AllowedLanguage {
11+
if (!navigator.language) {
12+
return defaultLanguage;
13+
}
14+
15+
return navigator.language.startsWith('zh') ? 'zh-CN' : 'en-US';
16+
}
917

1018
/**
11-
* 获取当前语言
19+
* Get current language
1220
*/
1321
async function getLanguage(): Promise<string> {
14-
return await getStorage().get(LANGUAGE_KEY, defaultLanguage);
22+
return await getStorage().get(LANGUAGE_KEY, getNavigatorLanguage());
1523
}
1624

1725
/**
18-
* 当前语言管理hook
26+
* Current language management hook
1927
*/
2028
export function useLanguage() {
2129
const [language, { save }] = useStorage<AllowedLanguage>(
@@ -49,15 +57,15 @@ export function useLanguage() {
4957
}
5058

5159
/**
52-
* 存储语言
53-
* @param lang 语言代码
60+
* Storage language
61+
* @param lang Language Code
5462
*/
5563
export async function saveLanguage(lang: string) {
5664
await getStorage().save(LANGUAGE_KEY, lang);
5765
}
5866

5967
/**
60-
* i18n语言检测中间件
68+
* i18n language detection middleware
6169
*/
6270
export const languageDetector: LanguageDetectorAsyncModule = {
6371
type: 'languageDetector',

0 commit comments

Comments
 (0)