2017-07-06 19 views
1

我的翻譯文件看起來像這樣:如何在JavaScript/angularJS中獲取i18n文件中的數組長度?

{ 
    "RANDOM": [ 
     { 
     "ITEM": "basdf" 
     }, 
     { 
     "ITEM": "casdf" 
     }, 
     { 
     "ITEM": "dasdf" 
     }, 
     { 
     "ITEM": "easdf" 
     } 
    ] 

} 

我想隨機顯示的項目之一:

getQuestion() { 
    const sizeOfRandomItems = 4; 
    const randomNumber = Math.floor(Math.random() * sizeOfRandomItems); 
    return this.$filter('i18n')('RANDOM.' + randomNumber + '.ITEM'); 
} 

但每當我想在我的翻譯文件中添加一個新的項目,我想還必須手動更新sizeOfRandomItems。有沒有辦法在翻譯文件中獲得RANDOM數組的大小?

我alread嘗試:

const arraySize = this.$filter('i18n')('RANDOM'); 
console.log(arraySize.length); 

但首先,我得到一個警告:

i18n-translate.js:205 Missing key: 

返回6(這是charachters在持有該陣列的關鍵數字RANDOM

+0

如果你有一個包含你的結構的變量,那麼你可以只是'myVariable.RANDOM.length' – James

+0

@James起初我以爲它也是那麼簡單,但事實並非如此。 – thadeuszlay

回答

-1

如果你願意使用一些庫,你可以使用Jquery加載json。 將其解析爲數組並獲取數組長度。如果你有很多關鍵字,這些解決方案將會很繁重,所以我建議你將結果保存在某個變量中。

var length; 
 
function getQuestion() { 
 
    const sizeOfRandomItems = 4; 
 
    const randomNumber = Math.floor(Math.random() * (length ? length : getJsonLength())); 
 
    return this.$filter('i18n')('RANDOM.' + randomNumber + '.ITEM'); 
 
} 
 

 
function getJsonLength() { 
 
    $.getJSON("i18n.json", function(json) { 
 
    var array = JSON.parse(json) 
 
    length = array.length; 
 
    }); 
 
}

-1

最簡單的可能是你的翻譯文件給出當前數組的長度有一個額外的項目 - 所以你可以先閱讀翻譯從這些信息並使用它。

getQuestion() { 
    const sizeOfRandomItems = parseINT(this.$filter('i18n')('RANDOM.LENGTH'), 10); 
    const randomNumber = Math.floor(Math.random() * sizeOfRandomItems); 
    return this.$filter('i18n')('RANDOM.' + randomNumber + '.ITEM'); 
} 

簡單的是,如果你可以加載來自例如像翻譯文件的對象。可能在i18next(https://www.i18next.com/objects-and-arrays.html) - 不知道這是否可能在你使用的i18n庫中。

+0

這種方式至少你不必觸摸代碼... – jamuhl

相關問題