Opening automatic browser language recognition for the first time

Save user use language
Delete useless comments
This commit is contained in:
Jackxwb 2024-05-15 18:02:38 +08:00
parent 266c0f9190
commit cac4c8964a
2 changed files with 33 additions and 82 deletions

View File

@ -1151,19 +1151,16 @@ export default function ControlPanel({
},
};
// log menu Translate JSON
let lostTranslateItem = {}
//
function translateMenu(item) {
lostTranslateItem = {}
// let { t ,i18n} = useTranslation()
// let { t } = useTranslation()
// console.log("==> t ==>", t)
let translateResult = {};
let keys = Object.keys(item);
for (const key of keys) {
let key2 = t(`Menu.${key}.val`);
let val = item[key];
// console.log("", key, key2);
//
if (typeof val === "object"){
@ -1172,15 +1169,11 @@ export default function ControlPanel({
if(`Menu.${key}.val` === key2) {
//
// lostTranslateItem[key] = key;
logLostTranslate(`Menu.${key}.val`, key)
}else{
logLostTranslate(`Menu.${key}.val`, key2)
}
// if(key===key2)continue;
// item[key2] = item[key];
// delete item[key];
translateResult[key2] = val
}
return translateResult
@ -1191,16 +1184,18 @@ export default function ControlPanel({
let key2 = t(`${mainMenu}.son.${key}.val`);
let val = item[key];
//
let childrens = val.children;
if(childrens){
for (let i = 0; i <childrens.length; i++) {
childrens[i] = translateSubMenu(childrens[i], `${mainMenu}.son.${key}`, t)
if("Language" !== key){//
//
let childrens = val.children;
if(childrens){
for (let i = 0; i <childrens.length; i++) {
childrens[i] = translateSubMenu(childrens[i], `${mainMenu}.son.${key}`, t)
}
val.children = childrens
}
val.children = childrens
}
//
//
if(`${mainMenu}.son.${key}.val` === key2) {
logLostTranslate(`${mainMenu}.son.${key}.val`, key)
}else{
@ -1212,35 +1207,6 @@ export default function ControlPanel({
return translateResult
}
function logLostTranslate(path, key) {
// console.log("Path", path, key)
// const paths = path.split(/\./);
// let data = lostTranslateItem[paths[0]];
// switch (paths.length) {
// case 1:
// lostTranslateItem[paths[0]] = key;
// break;
// case 2:
// if(!lostTranslateItem[paths[0]]){lostTranslateItem[paths[0]]={};}
// if(!lostTranslateItem[paths[0]][paths[1]]){lostTranslateItem[paths[0]][paths[1]]=key;}
// break;
// case 3:
// if(!lostTranslateItem[paths[0]]){lostTranslateItem[paths[0]]={};}
// if(!lostTranslateItem[paths[0]][paths[1]]){lostTranslateItem[paths[0]][paths[1]]={};}
// if(!lostTranslateItem[paths[0]][paths[1]][paths[2]]){lostTranslateItem[paths[0]][paths[1]][paths[2]]=key;}
// break;
// case 4:
// if(!lostTranslateItem[paths[0]]){lostTranslateItem[paths[0]]={};}
// if(!lostTranslateItem[paths[0]][paths[1]]){lostTranslateItem[paths[0]][paths[1]]={};}
// if(!lostTranslateItem[paths[0]][paths[1]][paths[2]]){lostTranslateItem[paths[0]][paths[1]][paths[2]]={};}
// if(!lostTranslateItem[paths[0]][paths[1]][paths[2]][paths[3]]){lostTranslateItem[paths[0]][paths[1]][paths[2]][paths[3]]=key;}
// break;
// case 5:
// break;
// default:
// console.log("", path, paths)
// }
lostTranslateItem = setVal(lostTranslateItem, path, key);
}
function setVal(obj, path, val) {
@ -1271,8 +1237,7 @@ export default function ControlPanel({
}
menu = translateMenu(menu);
// console.log(">", menu)
// console.log("", lostTranslateItem)
// console.log("txt", JSON.stringify(lostTranslateItem))
// console.log("", lostTranslateItem) // Perhaps useful when modifying menu items in the future
useHotkeys("ctrl+i, meta+i", fileImport, { preventDefault: true });
useHotkeys("ctrl+z, meta+z", undo, { preventDefault: true });
@ -1479,7 +1444,6 @@ export default function ControlPanel({
menu[t("Menu.View.val")][t("Menu.View.son.Theme.val")].children[1][t("Menu.View.son.Theme.son.Dark.val")]();
} else {
menu[t("Menu.View.val")][t("Menu.View.son.Theme.val")].children[0][t("Menu.View.son.Theme.son.Light.val")]();
// menu["View"]["Theme"].children[0]["Light"]();
}
}
}}

View File

@ -1,20 +1,27 @@
import i18n from 'i18next';
import Backend from 'i18next-http-backend';
import LanguageDetector from 'i18next-browser-languagedetector';
import {initReactI18next, useTranslation} from 'react-i18next';
import {initReactI18next} from 'react-i18next';
const supportedLngs = ['en-US', 'zh-CN']
const translateItem = [
{name:"English",file:"en-US"}
,{name:"简体中文",file:"zh-CN"}
];
export const getTranslateItem = ()=> {
let result = []
let {i18n} = useTranslation();
// const useLanguage = localStorage.getItem("useLanguage");
for (const item of translateItem) {
let lngItem = {}
lngItem[item.name] = ()=>{
let name = item.name;
//if(item.file === useLanguage){
if(item.file === i18n.language){
name = "[✔]" + name
}
lngItem[name] = ()=>{
i18n.changeLanguage(item.file);
console.log("切换语言", item)
// console.log("切换语言", item)
localStorage.setItem("useLanguage", item.file)
}
result.push(lngItem)
}
@ -38,8 +45,8 @@ i18n
useSuspense: false
},
// 设置默认语言
lng: 'zh-CN',
fallbackLng: 'zh-CN',
// lng: 'en-US',
fallbackLng: 'en-US',
// 是否启用调试模式
debug: true,
//
@ -50,22 +57,7 @@ i18n
* @param lngs
* @param namespaces
*/
// loadPath: function (lngs: Array<string>, namespaces: Array<string>) {
// console.log(lngs, namespaces)
// return `http://localhost:8000/locales/${lngs[0]}.json`;
// },
//loadPath: '/locales/{{lng}}/{{ns}}.json',
loadPath: '/locales/{{lng}}.json',
/**
*
* @param data
*/
// parse: function (data) {
// console.log("i18n-parse", data)
// const obj = eval("(" + data + ")");
// return obj.resp;
// },
/**
*
*/
@ -82,22 +74,17 @@ i18n
interpolation: {
escapeValue: false, // not needed for react as it escapes by default
},
// resources: {
// "en-US": {
// translation: {
// File: "File文件"
// }
// },
// "zh-CN": {
// translation: {
// File: "文件"
// }
// }
// }
supportedLngs: supportedLngs
}, function (err, t) {
// i18n插件初始化完成或异常时的回调函数
console.log('国际化插件初始化完毕!', err, t)
//auto load last select Language
console.log(">>>", this, i18n)
if(!err && localStorage.getItem("useLanguage")){
// let {i18n} = useTranslation();
i18n.changeLanguage(localStorage.getItem("useLanguage"));
// i18n.language = localStorage.getItem("useLanguage")
console.log("auto load last select Language")
}
});
export default i18n;