2014-10-01 41 views
3

我正在使用Phonegap Build爲iOS和Android開發應用程序。如何使用PhoneGap構建獲取設備語言環境或語言?

我想確定設備的區域設置(例如'en-US'),但我已經解決了當前的語言設置,甚至應用程序商店我的應用程序安裝了(這是一個很長天)。

按照全球化插件here的說明,我認爲我的一切都正確,但似乎沒有任何iPhone 6或三星Galaxy Nexus用於測試。

我config.xml中的相關部分看起來是這樣的:

<gap:plugin name="org.apache.cordova.globalization" /> 

我從插件獲取區域的功能如下:

var getPhoneGapLocaleName = function() { 
    var loc = 'unknown'; 

    if (navigator.globalization !== undefined) { 
     navigator.globalization.getLocaleName(
      function (locale) { 
       if (locale !== undefined) { 
         loc = locale.value; 
       } 
      }, 
      function() { 
       // nothing 
      } 
     ); 
    } 

    return loc; 
}; 

注:在兩個設備navigator.globalization .getLocaleName存在並顯示正確,對函數進行求值,類似於我期望的基於文檔的函數。

回答

2

這裏的問題是變量'loc'被聲明在成功或失敗回調的範圍之外,這當然發生在幾個短暫的時刻之後。

我解決了這個由從而改變功能:

var refreshPhoneGapLocaleName = function() { 
    if (navigator.globalization !== undefined) { 
     navigator.globalization.getLocaleName(
      function (locale) { 
       if (locale !== undefined) { 
        localStorage['pg.locale'] = locale.value; 
       } 
      }, 
      function() { 
       // nothing 
      } 
     ); 
    } 
}; 

現在,爲了在應用啓動時刷新值稱其爲onDeviceReady。

過了一會兒(不是立即)下面的函數可用於檢索的語言環境值:

var getLocale = function() { 
    return localStorage['pg.locale'](); 
}; 

約StackOverflow上最偉大的事情是如何經常幫助一個解決自己愚蠢的錯誤。 :)

0

試試這個代碼

當瀏覽器設置爲en_US區域設置,這應該顯示與文字語言彈出對話框:英語:

navigator.globalization.getPreferredLanguage(

function (language) {alert('language: ' + language.value + '\n');}, 
function() {alert('Error getting language\n');} 

);

完整的例子

<!DOCTYPE HTML> 
 
<html> 
 
    <head> 
 
    <title>getPreferredLanguage Example</title> 
 
    <script type="text/javascript" charset="utf-8" src="cordova.js"></script> 
 
    <script type="text/javascript" charset="utf-8"> 
 

 
    function checkLanguage() { 
 
     navigator.globalization.getPreferredLanguage(
 
     function (language) {alert('language: ' + language.value + '\n');}, 
 
     function() {alert('Error getting language\n');} 
 
    ); 
 
    } 
 
    </script> 
 
    </head> 
 
    <body> 
 
    <button onclick="checkLanguage()">Click for language</button> 
 
    </body> 
 
</html>

2

雖然以前的答案是返回所需的結果,並給予一個選項,以獲取當前的PhoneGap設置名稱,他們並沒有解釋爲什麼該主題起動機他功能不起作用,以及如何調整其功能以按照他預期的方式工作(即,不使用localStorage並且不在控制檯中顯示區域設置,而是實時地給出答案)

我發佈這個答案,因爲我正在尋找一個快速的函數來獲取設備的區域設置,這篇文章是我的第一個結果。雖然開幕帖子給了我所需要的一切,但我想以同樣的目的爲未來的訪問者回答這個問題。很抱歉張貼到這個老話題,但我希望我可以幫助別人與我的答案。

主題啓動器功能不起作用的原因如下:插件以異步方式返回區域設置。因此,loc = locale.value行僅在函數的return語句之後執行。爲了解決這個問題,我們可以編寫一個包裝函數來簡化插件輸出,如下所示。請記住,我們需要異步使用此函數,因爲插件結果也是異步的。

功能:

var getPhoneGapLocaleName = function (callback) { 
    var unknownLocation = 'unknown'; //Default value 
    if (navigator.globalization !== undefined) { 
     navigator.globalization.getLocaleName(
      function (locale) { 
       if (locale !== undefined) { 
        callback(locale.value); 
       } else { 
        callback(unknownLocation); 
       } 
      }, 
      function() { 
       callback(unknownLocation); 
      } 
     ); 
    } else { 
     callback(unknownLocation); 
    } 
}; 

使用功能是這樣的:

getPhoneGapLocaleName(function(loc){ console.log('The locale was set as follows: ' + loc); });