|
@@ -1,5 +1,6 @@
|
|
|
import fallbackLangData from "./locales/en.json";
|
|
|
import percentages from "./locales/percentages.json";
|
|
|
+import { ENV } from "./constants";
|
|
|
|
|
|
const COMPLETION_THRESHOLD = 85;
|
|
|
|
|
@@ -55,6 +56,18 @@ export const languages: Language[] = allLanguages
|
|
|
COMPLETION_THRESHOLD,
|
|
|
);
|
|
|
|
|
|
+const TEST_LANG_CODE = "__test__";
|
|
|
+if (process.env.NODE_ENV === ENV.DEVELOPMENT) {
|
|
|
+ languages.unshift(
|
|
|
+ { code: TEST_LANG_CODE, label: "test language" },
|
|
|
+ {
|
|
|
+ code: `${TEST_LANG_CODE}.rtl`,
|
|
|
+ label: "\u{202a}test language (rtl)\u{202c}",
|
|
|
+ rtl: true,
|
|
|
+ },
|
|
|
+ );
|
|
|
+}
|
|
|
+
|
|
|
let currentLang: Language = defaultLang;
|
|
|
let currentLangData = {};
|
|
|
|
|
@@ -63,18 +76,13 @@ export const setLanguage = async (lang: Language) => {
|
|
|
document.documentElement.dir = currentLang.rtl ? "rtl" : "ltr";
|
|
|
document.documentElement.lang = currentLang.code;
|
|
|
|
|
|
- currentLangData = await import(
|
|
|
- /* webpackChunkName: "i18n-[request]" */ `./locales/${currentLang.code}.json`
|
|
|
- );
|
|
|
-};
|
|
|
-
|
|
|
-export const setLanguageFirstTime = async (lang: Language) => {
|
|
|
- currentLang = lang;
|
|
|
- document.documentElement.dir = currentLang.rtl ? "rtl" : "ltr";
|
|
|
-
|
|
|
- currentLangData = await import(
|
|
|
- /* webpackChunkName: "i18n-[request]" */ `./locales/${currentLang.code}.json`
|
|
|
- );
|
|
|
+ if (lang.code.startsWith(TEST_LANG_CODE)) {
|
|
|
+ currentLangData = {};
|
|
|
+ } else {
|
|
|
+ currentLangData = await import(
|
|
|
+ /* webpackChunkName: "i18n-[request]" */ `./locales/${currentLang.code}.json`
|
|
|
+ );
|
|
|
+ }
|
|
|
};
|
|
|
|
|
|
export const getLanguage = () => currentLang;
|
|
@@ -94,6 +102,13 @@ const findPartsForData = (data: any, parts: string[]) => {
|
|
|
};
|
|
|
|
|
|
export const t = (path: string, replacement?: { [key: string]: string }) => {
|
|
|
+ if (currentLang.code.startsWith(TEST_LANG_CODE)) {
|
|
|
+ const name = replacement
|
|
|
+ ? `${path}(${JSON.stringify(replacement).slice(1, -1)})`
|
|
|
+ : path;
|
|
|
+ return `\u{202a}[[${name}]]\u{202c}`;
|
|
|
+ }
|
|
|
+
|
|
|
const parts = path.split(".");
|
|
|
let translation =
|
|
|
findPartsForData(currentLangData, parts) ||
|