检测用户的首选语言和Google自动翻译

时间:2013-02-11 23:40:24

标签: javascript internationalization google-translate

我在我的网站上使用此脚本进行翻译

<div id="google_translate_element" align="center"></div>  
<script type="text/javascript">
    function googleTranslateElementInit() {
        new google.translate.TranslateElement({
        pageLanguage: 'auto',
        autoDisplay: false,
        layout: google.translate.TranslateElement.InlineLayout.SIMPLE
        }, 'google_translate_element');
    }
</script>
<script src="//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit"></script>

工作得很好:) 但有没有办法检测用户IP并在用户进入我的网站时自动翻译?

2 个答案:

答案 0 :(得分:3)

虽然您可以使用基于IP的位置检测(请参阅this answer),但它既不可靠,也不会让您更加了解用户的首选语言(例如,出国旅行的用户等)。

拥有大量国际流量的网站使用各种参数来决定应以何种语言呈现内容。其中一些参数:

  • Accept-Language HTTP标头,详细讨论here
  • 属性window.navigator.languagewindow.navigator.userLanguage(对于IE)
  • 的值
  • 根据CLDR检查基于IP的位置检测数据,为您提供该地区的通用语言。

MediaWiki扩展程序UniversalLanguageSelector使用这些因素以及存储的用户首选项来为每个用户提供常用语言列表。请参阅getFrequentLanguageList()

W3C也有一些recommendations

答案 1 :(得分:1)

此脚本仅针对英语未设置为主要或唯一语言的人显示翻译下拉框,在英语用户查看页面时隐藏 - 使用英语页面编码谷歌代码中的en

它仅使用该语言的前2个字符,以避免检查en-US,如en-tten等 - 它们都以pageLanguage开头。

这可以很容易地适用于检测navigator.languages并将其与用户的首选语言进行比较。 <div id="google_translate_element"></div> <script type="text/javascript"> var userLang = navigator.language || navigator.userLanguage || navigator.languages; if (userLang.substr(0,2) != "en"){ function googleTranslateElementInit() { new google.translate.TranslateElement({pageLanguage: 'en', layout: google.translate.TranslateElement.FloatPosition.TOP_LEFT}, 'google_translate_element'); } } else { document.getElementById("google_translate_element").style.display="none"; } </script> <script type="text/javascript" src="//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit"></script> 的使用很重要,因为这用于较新的浏览器版本,请参阅many variants of English

        With CTE AS(
    SELECT Pull_Date, Well_Name, Event_Num, Part1 Part, Part1_PN PartPN, Part1_SN PartSN FROM test
    UNION ALL
        SELECT Pull_Date, Well_Name, Event_Num, Part2, Part2_PN, Part2_SN from test
    UNION ALL
        SELECT Pull_Date, Well_Name, Event_Num, Part3, Part3_PN, Part3_SN from test
UNION ALL
        SELECT Pull_Date, Well_Name, Event_Num, Part4, Part4_PN, Part4_SN from test
UNION ALL
        SELECT Pull_Date, Well_Name, Event_Num, Part5, Part5_PN, Part5_SN from test
UNION ALL
        SELECT Pull_Date, Well_Name, Event_Num, Part6, Part6_PN, Part6_SN from test
    )

    Select Pull_Date, Well_Name,
        MIN(CASE WHEN Part='BODH' THEN 'BODH' ELSE NULL END) [BODH],
        MIN(CASE WHEN Part='BODH' THEN PartPN Else NULL END) BODH_PN,
        MIN(CASE WHEN Part='BODH' THEN PartSN ELSE NULL END) BODH_SN,
        MIN(CASE WHEN Part='Cable' THEN 'Cable' ELSE NULL END) [Cable],
        MIN(CASE WHEN Part= 'Cable' THEN PartPN Else NULL END) Cable_PN,
        MIN(CASE WHEN Part= 'Cable' THEN PartSN ELSE NULL END) Cable_SN,
        MIN(CASE WHEN Part= 'Pump' THEN 'Pump' ELSE Null END) [Pump],
        MIN(CASE WHEN Part= 'Pump' THEN PartPN ELSE NULL END) Pump_PN,
        MIN(CASE WHEN Part= 'Pump' THEN PartSN ELSE NULL END) Pump_SN,
        MIN(CASE WHEN Part= 'MLE' THEN 'MLE' ELSE NULL END) [MLE],
        MIN(CASE WHEN Part= 'MLE' THEN PartPN ELSE NULL END) MLE_PN,
        MIN(CASE WHEN Part= 'MLE' THEN PartSN ELSE NULL END) MLE_SN,
        MIN(CASE WHEN Part= 'AGH' THEN 'AGH' ELSE NULL END) [AGH],
        MIN(CASE WHEN Part= 'AGH' THEN PartPN ELSE NULL END) AGH_PN,
        MIN(CASE WHEN Part= 'AGH' THEN PartSN ELSE NULL END) AGH_SN,
        MIN(CASE WHEN Part= 'Sensor' THEN 'Sensor' ELSE NULL END) [Sensor],
        MIN(CASE WHEN Part='Sensor' THEN PartPN ELSE NULL END) Sensor_PN,
        MIN(CASE WHEN Part='Sensor' THEN PartSN ELSE NULL END) Sensor_SN,
        MIN(CASE WHEN Part='Intake' THEN 'Intake' ELSE NULL END) [Intake],
        MIN(CASE WHEN Part='Intake' THEN PartPN ELSE NULL END) Intake_PN,
        MIN(CASE WHEN Part='Intake' THEN PartSN ELSE NULL END) Intake_SN
    FROM CTE
    GROUP BY Pull_Date, Well_Name