82 lines
2.7 KiB
TypeScript
82 lines
2.7 KiB
TypeScript
import { initReactI18next } from "react-i18next";
|
|
import dayjs from "dayjs";
|
|
import i18n from "i18next";
|
|
import LanguageDetector from "i18next-browser-languagedetector";
|
|
import Backend, { HttpBackendOptions } from "i18next-http-backend";
|
|
|
|
import pkg from "../package.json";
|
|
import auth from "../public/locales/en/auth.json";
|
|
import chat from "../public/locales/en/chat.json";
|
|
import common from "../public/locales/en/common.json";
|
|
import fav from "../public/locales/en/fav.json";
|
|
import file from "../public/locales/en/file.json";
|
|
import member from "../public/locales/en/member.json";
|
|
import setting from "../public/locales/en/setting.json";
|
|
import welcome from "../public/locales/en/welcome.json";
|
|
import widget from "../public/locales/en/widget.json";
|
|
|
|
// don't want to use this?
|
|
// have a look at the Quick start guide
|
|
// for passing in lng and translations on init
|
|
|
|
export const defaultNS = "common";
|
|
export const resources = {
|
|
en: {
|
|
common,
|
|
chat,
|
|
auth,
|
|
fav,
|
|
member,
|
|
welcome,
|
|
setting,
|
|
file,
|
|
widget
|
|
}
|
|
} as const;
|
|
i18n.on("languageChanged", (lng) => {
|
|
// 匹配dayjs的多语言关键字
|
|
dayjs.locale(lng === "zh" ? "zh-cn" : lng === "jp" ? "ja" : lng);
|
|
});
|
|
i18n
|
|
// load translation using http -> see /public/locales (i.e. https://github.com/i18next/react-i18next/tree/master/example/react/public/locales)
|
|
// learn more: https://github.com/i18next/i18next-http-backend
|
|
// want your translations to be loaded from a professional CDN? => https://github.com/locize/react-tutorial#step-2---use-the-locize-cdn
|
|
.use(Backend)
|
|
// detect user language
|
|
// learn more: https://github.com/i18next/i18next-browser-languageDetector
|
|
.use(LanguageDetector)
|
|
// pass the i18n instance to react-i18next.
|
|
.use(initReactI18next)
|
|
// init i18next
|
|
// for all options read: https://www.i18next.com/overview/configuration-options
|
|
.init<HttpBackendOptions>({
|
|
ns: ["common", "chat", "member", "setting", "fav", "file", "welcome", "auth", "widget"],
|
|
defaultNS,
|
|
load: "languageOnly",
|
|
// lng: "jp",
|
|
fallbackLng: "en",
|
|
fallbackNS: "common",
|
|
debug: false,
|
|
detection: {
|
|
order: ["localStorage", "navigator"]
|
|
},
|
|
interpolation: {
|
|
escapeValue: false // not needed for react as it escapes by default
|
|
},
|
|
returnNull: false,
|
|
// for backend middleware
|
|
backend: {
|
|
loadPath: (() => {
|
|
// 在 Shadow DOM 模式下,使用 widget.js 所在的 origin 来加载翻译文件
|
|
const widgetOrigin = (window as any).__VOCECHAT_WIDGET_ORIGIN__;
|
|
if (widgetOrigin) {
|
|
return `${widgetOrigin}/locales/{{lng}}/{{ns}}.json`;
|
|
}
|
|
return '/locales/{{lng}}/{{ns}}.json';
|
|
})(),
|
|
queryStringParams: { v: pkg.version }
|
|
}
|
|
});
|
|
|
|
export default i18n;
|