【问题标题】:react js google translate not working反应js谷歌翻译不起作用
【发布时间】:2018-05-11 18:26:47
【问题描述】:

在 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'; 

我正在使用包含在 Adminlogin.js 文件中的这个组件,使用 &lt;GoogleTranslate /&gt;

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

感谢任何帮助。

【问题讨论】:

    标签: javascript reactjs google-translate


    【解决方案1】:

    语言栏的重复或重复是由于每次页面加载/呈现时都会调用document.body.appendChild(addScript)

    要解决此问题,请将插件初始化添加到您的 public &gt; index.html 文件中,如下所示:

    <script src="https://translate.google.com/translate_a/element.js?cb=googleTranslateElementInit" async></script>
      <script type="text/javascript">
        function googleTranslateElementInit() {
          new google.translate.TranslateElement(
            {
              pageLanguage: "en",
              layout: window.google.translate.TranslateElement.InlineLayout.VERTICAL,
            }, 
            'google_translate_element'
          );
        }
      </script>
    

    然后,将您的 GoogleTranslate 组件更改为

    import React, { Component } from 'react';
    
    class GoogleTranslate extends Component {
        render() {
            return (
                <div id="google_translate_element"></div>
              );
         }
    }
    
    export default GoogleTranslate;
    

    如果这对您有用,请投票。如果没有,请不要犹豫发表评论。干杯!

    【讨论】:

      【解决方案2】:

      在功能组件中试试这个效果很好

       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
      

      【讨论】:

        【解决方案3】:

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

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

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

        或 在类中使用箭头函数绑定

        googleTranslateElementInit = () => {
           ...
        }
        

        【讨论】:

          【解决方案4】:

          saikrishna chowdhary 解决方案对我有用

          【讨论】:

          • 这并不能真正回答问题。如果您有其他问题,可以点击 进行提问。要在此问题有新答案时收到通知,您可以follow this question。一旦你有足够的reputation,你也可以add a bounty 来引起对这个问题的更多关注。 - From Review
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-11-06
          • 1970-01-01
          • 1970-01-01
          • 2020-11-28
          相关资源
          最近更新 更多