【问题标题】:Why is my translations not working with react-i18next?为什么我的翻译不适用于 react-i18next?
【发布时间】:2020-07-13 04:24:14
【问题描述】:

这是我的配置文件:

i18n.js:

import i18n from 'i18next';
import Backend from 'i18next-xhr-backend';
import detector from "i18next-browser-languagedetector";
import { initReactI18next } from 'react-i18next';

const fallbc = ['en'];
const langArr = ['en', 'de'];

i18n
    .use(detector)
    .use(Backend)
    .use(initReactI18next)
    .init({
        backend: {
            loadPath: '/register/locales/{{lng}}/{{ns}}.json'
        },
        fallck,
        debug: true,
        whitelist: langArr,
        interpolation: {
            escapeValue: false,
        },
        react: {
            wait: true,
        },
    });

export default i18n;

当我尝试这个时:

import i18n from '../i18n';

return (
         <div>
           <button onClick={() => i18n.changeLanguage('de')}>de</button>
           <button onClick={() => i18n.changeLanguage('en')}>en</button>
         </div>
       );

只呈现英语,德语不呈现。我究竟做错了什么?

我的配置有问题吗?我觉得我真的很接近解决这个问题了。

【问题讨论】:

    标签: javascript html node.js reactjs react-i18next


    【解决方案1】:

    i18n.Init 是一个延迟加载函数你必须等待callback 必须被调用。否则使用 SyncBackend。否则启动应用程序懒惰。

    示例:

    import i18next from 'i18next';
    import SyncBackend from 'i18next-sync-fs-backend';
    
    
    // working
    i18next
      .use(SyncBackend)
      .init({ initImmediate: false });
    
    i18next.t('key'); // -> will return value
    

    延迟启动:

    export default (callback) => {
    const instance = i18n
        .use(detector)
        .use(Backend)
        .use(initReactI18next)
        .init({
            backend: {
                loadPath: '/register/locales/{{lng}}/{{ns}}.json'
            },
            fallck,
            debug: true,
            whitelist: langArr,
            interpolation: {
                escapeValue: false,
            },
            react: {
                wait: true,
            },
        },() => callback(instance));
    };
    
    import i18nInit from '../i18n';
    
    i18nInit((i18n) =>{
    // lazy start here
    return (
             <div>
               <button onClick={() => i18n.changeLanguage('de')}>de</button>
               <button onClick={() => i18n.changeLanguage('en')}>en</button>
             </div>
           );
    
    })
    

    更多: https://www.i18next.com/overview/configuration-options

    【讨论】:

    • 谢谢。有没有更好的方法来利用我所拥有的?
    • 你可以使用react.i18next module.react.i18next.com/legacy-v9/step-by-step-guide
    • 为什么不推荐?那么我们如何使用i18next-xhr-backend 包呢?
    • 请查看文档了解更多信息。我只是指导了问题所在。
    • 好吧,再问一个问题,当您说“Else start app lazy”时。 - 请提供示例...
    猜你喜欢
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 2021-01-29
    • 2022-06-12
    • 2021-04-11
    • 2021-09-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多