反应js谷歌翻译无法正常工作

时间:2018-05-11 18:26:47

标签: javascript reactjs google-translate

在React JS中试图实现谷歌翻译,并在我的脚本文件中包含翻译组件。

Googletranslate.js

import React, { Component } from 'react';

class GoogleTranslate extends Component {
    googleTranslateElementInit () {
        //alert("test2")
        /* eslint-disable no-new */
        new window.google.translate.TranslateElement({pageLanguage: 'pt', layout: window.google.translate.TranslateElement.FloatPosition.TOP_LEFT}, 'google_translate_element')
     }

    componentDidMount() {
        // alert("test")

        var addScript = document.createElement('script');
        addScript.setAttribute('src', '//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit');        
        document.body.appendChild(addScript);  
        window.googleTranslateElementInit = this.googleTranslateElementInit;
    }

    render() {
        return (
            // <script type='text/javascript' src='//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit' />
            <div id="google_translate_element"></div>
          );
     }
}

export default GoogleTranslate;

Adminlogin.js

import GoogleTranslate from '../Applicant/GoogleTranslate'; 

我使用<GoogleTranslate />在Adminlogin.js文件中使用此组件。

并在我的文件中包含该组件,当我登录该站点并在注销后,当我导航到主页时,有两种语言栏。

https://i.stack.imgur.com/xLupf.png

感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

因为在this.googleTranslateElementInit上下文中找不到正确的答案。

您可以在构造函数中绑定函数:

constructor(props) {
    super(props);
    this.googleTranslateElementInit = this.googleTranslateElementInit.bind(this);
}

或 在类中使用箭头功能绑定

googleTranslateElementInit = () => {
   ...
}

希望它会对您有所帮助:)

答案 1 :(得分:0)

在功能组件中尝试一下效果很好

 const SamplePage = () => {

 const googleTranslateElementInit = () => {
   new window.google.translate.TranslateElement({ pageLanguage: 'en', layout: window.google.translate.TranslateElement.FloatPosition.TOP_LEFT }, 'google_translate_element')
  }
  
  useEffect(() => {
    var addScript = document.createElement('script');
    addScript.setAttribute('src', '//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit');
    document.body.appendChild(addScript);
    window.googleTranslateElementInit = googleTranslateElementInit;
  }, [])

  return (
    <div>
      <h2 className="title gx-mb-4"><IntlMessages id="sidebar.samplePage"/></h2>
      <div id="google_translate_element"></div>
      <div className="gx-d-flex justify-content-center">
        <h4>Start building your app. Happy Coding!</h4>
      </div>

    </div>
  );
};

export default SamplePage