2013-07-02 139 views
3

我正在使用mootools中的datepicker並試圖根據用戶位置使其具有本地化格式。MooTools日期選擇器默認格式

例如:

08/15/13 //American 
15.08.13 //English 

的文件說,它應該是默認format: (*string*, defaults to the default localized format)

發生變化,但是使用此代碼:

window.addEvent('domready', function(){ 
    new Picker.Date($$('input'), { 
     timePicker: true, 
     positionOffset: {x: 5, y: 0}, 
     pickerClass: 'datepicker_bootstrap', 
     useFadeInOut: !Browser.ie 
    }); 
}); 

它始終採用美國格式08/15/13(月第一)。

我改變我的時區設置在Windows 7 Date and Time

+3

日期選擇器(如果由arian編寫的)使用mootools-more中的'Locale'。嘗試'Locale.use()'並閱讀文檔http://mootools.net/docs/more/Locale/Locale –

+1

感謝您的指針......雖然我必須承認,我認爲默認意味着它會做到這一點盒子?沒有?我很高興雖然玩耍並嘗試使用'Locale.use()'並將其輸出爲'Picker'的字符串。 –

+0

仍然沒有找到一個可靠的解決方案 –

回答

1

我不認爲DatePicker的測試確實是「開箱即用」。我不確定是否有防水的方式來獲取用戶端位置或客戶端腳本中的語言代碼。

我只是想:

var language = window.navigator.userLanguage || window.navigator.language; 
console.log(language); 

,並在Firefox中得到了在Chrome "sv""en-GB",在同一臺機器。

我用PHP/HTTP請求頭獲得了大致相同的結果。想從服務器端獲取信息。 This問題點HTTP_ACCEPT_LANGUAGE的最佳途徑,但是:

$_SERVER["HTTP_ACCEPT_LANGUAGE"] // gives me: 
sv-SE,sv;q=0.8,en-US;q=0.6,en;q=0.4 //in chrome 
en-gb,en;q=0.5 //in firefox 

如果您在DatePicker.js看文件,你必須在第一線:

--- 
name: Locale.en-US.DatePicker 
description: English Language File for DatePicker 
authors: Arian Stolwijk 
requires: [More/Locale] 
provides: Locale.en-US.DatePicker 
... 

這給我一種感覺,它被設置去en-US。它會工作,如果你手動設置它。

我的建議是遵循Dimitar的建議,並使用Locale.use()手動設置它。如果在調用DatePicker之前添加例如Locale.use('sv-SE');,則將以yyyy-mm-dd格式獲取日期。

我做了一個腳本來讀取客戶端語言,試圖使其動態。它的工作原理,但沒有測試。這種分配比較MooTools的Locale.list()和瀏覽器/ JavaScript的答案我張貼以上語言:

var language = window.navigator.userLanguage || window.navigator.language; 
console.log(language); //gives the results I wrote above (sv/en-GB resp. Chrome/FF) 
var list = Locale.list().length; 
for (var i = 0; i < list; i++) { 
    if (Locale.list()[i] == language) { //check if it's a full match 
     Locale.use(language); 
    } else { 
// go for the first part of the "sv-SE" and find a match 
// this is a compromise, it gets the right language but might miss the right country 
     var langArray = language.split('-'); 
     var locArray = Locale.list()[i].split('-'); 
     for (var k = 0; k < list; k++) { 
      if (langArray[0] == locArray[0]) { 
       Locale.use(Locale.list()[i]); 
      } 
     } 
    } 
} 
console.log(Locale.getCurrent().name); // gives sv-SE/en-GB resp. Chrome/FF 
new Picker.Date($$('input'), { 
// etc... 

如果你認爲它是有用的,你可以微調它... Fiddle here

+0

我很感興趣的方法來找到可以在Locale.use()中使用的位置客戶端,所以我問[這個問題](http://stackoverflow.com/questions/17680413/get-visitors-language -country-code-with-javascript-client-side),以防萬一有一個現代的解決方案。 – Sergio