Reactjs 因此,I18React中的下一个反应性翻译

Reactjs 因此,I18React中的下一个反应性翻译,reactjs,internationalization,translation,reactive,i18next,Reactjs,Internationalization,Translation,Reactive,I18next,我在尝试使用React上的i18next进行反应式翻译时遇到问题 以下是重要文件: i18n/index.js Flags.jsx import React, { Component } from 'react'; import { changeLanguage } from '../../../../i18n'; import './Flags.css'; export default class Flags extends Component { /** * Construc

我在尝试使用React上的i18next进行反应式翻译时遇到问题

以下是重要文件:

i18n/index.js

Flags.jsx

import React, { Component } from 'react';

import { changeLanguage } from '../../../../i18n';

import './Flags.css';

export default class Flags extends Component {
  /**
   * Constructor.
   * 
   * @param {any} props The components properties. 
   */
  constructor(props) {
    super(props);
    this.changeLang = this.changeLang.bind(this);
  }
  /**
   * Changes the app's current language.
   * 
   * @param {string} language The language code, i.e: 'en', 'es' or 'it'.
   */
  changeLang(language) {
    changeLanguage(language);
    alert('language change: ' + language);
  }

  /**
   * Renders this component.
   * 
   * @returns {string} The components JSX code.
   */
  render() {
    return (
      <li role="presentation">
        <div className="flags">
          <button onClick={ () => this.changeLang('en') }>
            <span className="flag-icon flag-icon-us"></span>
          </button>
          <button onClick={ () => this.changeLang('es') }>
            <span className="flag-icon flag-icon-es"></span>
          </button>
          <button onClick={ () => this.changeLang('it') }>
            <span className="flag-icon flag-icon-it"></span>
          </button>
        </div>
      </li>
    );
  }
}
import React,{Component}来自'React';
从'../../../../../i18n'导入{changeLanguage};
导入“/Flags.css”;
导出默认类标志扩展组件{
/**
*构造器。
* 
*@param{any}支持组件属性。
*/
建造师(道具){
超级(道具);
this.changeLang=this.changeLang.bind(this);
}
/**
*更改应用程序的当前语言。
* 
*@param{string}language语言代码,即:“en”、“es”或“it”。
*/
更改语言{
改变语言;
警报(“语言更改:”+语言);
}
/**
*渲染此组件。
* 
*@返回{string}组件JSX代码。
*/
render(){
返回(
  • this.changeLang('en')}> this.changeLang('es')}> this.changeLang('it')}>
  • ); } }

    我认为语言的变化是有效的,但不是以反应的方式进行的,因为当我点击一个标志时,这种变化并没有反映在UI中。我怎样才能做到这一点呢?

    组件不会显示更新的语言,因为它不会重新呈现

    正确的实现应该将新的道具传递给使用翻译的组件,但它们似乎不是

    (…要更新组件,您需要将语言作为道具传递或保持其状态,并且在更改语言时组件将重新加载)

    现在来看一下如何使用包装器组件 或供应商或类似机构 因为它不像示例中那样包装组件

    真的看看
    import React, { Component } from 'react';
    
    import { changeLanguage } from '../../../../i18n';
    
    import './Flags.css';
    
    export default class Flags extends Component {
      /**
       * Constructor.
       * 
       * @param {any} props The components properties. 
       */
      constructor(props) {
        super(props);
        this.changeLang = this.changeLang.bind(this);
      }
      /**
       * Changes the app's current language.
       * 
       * @param {string} language The language code, i.e: 'en', 'es' or 'it'.
       */
      changeLang(language) {
        changeLanguage(language);
        alert('language change: ' + language);
      }
    
      /**
       * Renders this component.
       * 
       * @returns {string} The components JSX code.
       */
      render() {
        return (
          <li role="presentation">
            <div className="flags">
              <button onClick={ () => this.changeLang('en') }>
                <span className="flag-icon flag-icon-us"></span>
              </button>
              <button onClick={ () => this.changeLang('es') }>
                <span className="flag-icon flag-icon-es"></span>
              </button>
              <button onClick={ () => this.changeLang('it') }>
                <span className="flag-icon flag-icon-it"></span>
              </button>
            </div>
          </li>
        );
      }
    }