Google Translate

2018-12-18  本文已影响23人  爱折腾的傻小子
<a id='google-translate-button' style="position:absolute;top:0;right: 0;color: black;text-decoration:underline;">Translate</a>
    <script type="application/javascript">
        function googleTranslateElementInit() {
            new google.translate.TranslateElement(
                {
                    pageLanguage: '{{ google_translate.to }}',
                    // layout: google.translate.TranslateElement.InlineLayout.HORIZONTAL
                    layout: google.translate.TranslateElement.FloatPosition.TOP_LEFT
                },
                'google_translate_element'
            );
        }

        function triggerHtmlEvent(element, eventName) {
            var event;
            if (document.createEvent) {
                event = document.createEvent('HTMLEvents');
                event.initEvent(eventName, true, true);
                element.dispatchEvent(event);
            } else {
                event = document.createEventObject();
                event.eventType = eventName;
                element.fireEvent('on' + event.eventType, event);
            }
        }
    </script>
    <script src="//translate.google.cn/translate_a/element.js?cb=googleTranslateElementInit"></script>
    <script type="application/javascript">
        $(function () {
            function floatGoogleTranslate() {
                // 未曾翻译过
                if( sessionStorage.getItem('_google_') !== 'yes' && sessionStorage.getItem('_google_') !== 'no-translate' ){
                    var google_index = layer.open({
                        type : 0,
                        title: false,
                        icon: 3,
                        content : "Do you need translation?",
                        btn: ['translate','no translate'],
                        anim: 1,
                        offset: "rt",
                        closeBtn: 0,
                        shadeClose: true,
                        yes: function () {
                            layer.close(google_index);
                            sessionStorage.setItem('_google_','yes');
                            jQuery('.goog-te-combo').val('{{ google_translate.from }}');
                            window.location = window.location.href.replace(/\#googtrans(.){1,}/g,"")+'#googtrans({{ google_translate.to }}|{{ google_translate.from }})';
                            location.reload();
                            return false;
                        },
                        btn2: function () {
                            layer.close(google_index);
                            sessionStorage.setItem('_google_','no-translate');
                            return false;
                        }
                    });
                }
            }
            floatGoogleTranslate();

            // 创建浮出层
            $(document).on('click','#google-translate-button',function (event) {
                // 弹出翻译提示口
                var google_index_t = layer.open({
                    type : 0,
                    title: false,
                    icon: 3,
                    content : "Do you need translation?",
                    btn: ['translate','no translate'],
                    anim: 1,
                    offset: "rt",
                    closeBtn: 0,
                    shadeClose: true,
                    yes: function () {
                        layer.close(google_index_t);
                        sessionStorage.setItem('_google_','yes');
                        jQuery('.goog-te-combo').val('{{ google_translate.from }}');
                        window.location = window.location.href.replace(/\#googtrans(.){1,}/g,"")+'#googtrans({{ google_translate.to }}|{{ google_translate.from }})';
                        location.reload();
                        return false;
                    },
                    btn2: function () {
                        layer.close(google_index_t);
                        if( sessionStorage.getItem('_google_') === 'yes' ){
                            jQuery('.goog-te-combo').val('{{ google_translate.to }}');
                            window.location = window.location.href.replace(/\#googtrans(.){1,}/g,"")+'#googtrans({{ google_translate.from }}|{{ google_translate.to }})';
                            location.reload();
                        }
                        sessionStorage.setItem('_google_','no-translate');
                        return false;
                    }
                });
            });
        });
    </script>
<?php
class ControllerEventGoogleTranslate extends Controller {

    /**
     * 判断浏览器语言类型
     * 1. 返回值存在 需要提示翻译成返回值类型语言
     * 2. 返回值为空 当前页面不需要翻译
     */
    public function index()
    {
        // server language
        $to = $this->registry->get('config')->get('language_directory');
        $localLang = strtolower($to);
        if( preg_match('#^([a-z]{1,})-[a-z]{1,}$#i',$localLang,$matches) ){
            $localLang = $matches[1];
        }

        // web language
        $httpLang  = $this->registry->get('request')->server{"HTTP_ACCEPT_LANGUAGE"};

        // 整理浏览器语言
        $str = preg_replace(['~q=0\.(\d){1}(,){0,1}~i','~,~i','~;$~i'],['',';',''],$httpLang);

        // 判断当前php语言是否在浏览器里
        if( !preg_match("#".preg_quote($localLang)."#i",$str) ){
            $t_array = explode(';',$str);
            $temp = array_shift($t_array);
            if( !preg_match("#zh-[a-zA-Z]{1,}#i",$str) ){
                $httpLangArray = explode('-',$temp);
                return [
                    'from'=>$httpLangArray[0],
                    'to'=>$localLang
                ];
            }else if( $temp == 'zh' ){
                $temp = 'zh-CN';
            }

            return [
                'from'=>$temp,
                'to'=>$localLang
            ];
        }

        return '';
    }
}
上一篇下一篇

猜你喜欢

热点阅读