reactjs - 我们如何使用 api 调用加载翻译而不是在静态 jsons 中定义它们?这如何在 React-i18next 中完成?

标签 reactjs i18next react-i18next

在 React 应用程序中使用国际化时,需要使用 api 调用按需加载语言翻译文件,而不是预先定义它们。如何通过使用 React-i18next 来实现这一点?

使用 React-i18next 尝试从静态预定义文件中选取的正常翻译。尝试使用 xhr-backend 但无法找到任何示例来实现按需加载翻译相关数据的要求。

最佳答案

import i18n from "i18next";
import LanguageDetector from "i18next-browser-languagedetector";
import backend from 'i18next-http-backend';
import axiosInstance from './helpers/Axios';

const loadResources=async(locale:string)=> {
    return await axiosInstance().get('/translate-data/get', { params: { lang: locale } })
      .then((response) => { return response.data })
      .catch((error) => { console.log(error); });
}

const backendOptions = {
  loadPath: '{{lng}}|{{ns}}', 
  request: (options:any, url:any, payload:any, callback:any) => {
    try {
      const [lng] = url.split('|');
      loadResources(lng).then((response) => {
        callback(null, {
          data: response,
          status: 200, 
        });
      });
    } catch (e) {
      console.error(e);
      callback(null, {
        status: 500,
      });
    }
  },
};

i18n
  .use(LanguageDetector)
  .use(backend)
  .init({
    backend: backendOptions,
    fallbackLng: "en",
    debug: false,
    load:"languageOnly",
    ns: ["translations"],
    defaultNS: "translations",
    keySeparator: false, 
    interpolation: {
      escapeValue: false, 
      formatSeparator: ","
    },
    react: {
      wait: true
    }
});

export default i18n;
来自后端选项的请求用于使用 Axios 调用后端 API。

关于reactjs - 我们如何使用 api 调用加载翻译而不是在静态 jsons 中定义它们?这如何在 React-i18next 中完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56748722/

相关文章:

javascript - 如何判断 Web 应用程序是否正在使用 ReactJs

javascript - i18next 翻译中的 HTML 标签

javascript - 错误: Module should export a function: i18next

javascript - Next-i18next serverSideTranslations 初始I18nStore 缺少的语言环境

typescript - 如何使用 TypeScript 键入检查 i18n 字典?

javascript - Firebase 实时数据库 - "Error: Client is offline"。 react /NextJS

javascript - React js - 如何设置下拉菜单的显示大小?

internationalization - i18next-browser-languageDetector 路径不工作

javascript - 单击来自子 <span> 的链接时 react 获取父 <li> 的类名

javascript - 如何禁用 i18next 控制台警告?