2013-02-24 125 views
1

我想從我的html庫中分離出語言變量,但我不確定這是什麼最佳方法。解析js html庫中的字符串(語言字符串)

目前我有這樣的事情;

function putAlertA() { 
    alert('This is alert a'); 
} 

function putAlertB() { 
    alert('This is alert b'); 
} 

function setAlerts() { 
    putAlertA(); 
    putAlertB(); 
} 

現在我想琴絃從功能上分離:

溶液A

function putAlertA() { 
    var strings = getLanguageVars(); 
    alert(strings[0]); 
} 

function putAlertB() { 
    var strings = getLanguageVars(); 
    alert(strings[1]); 
} 

function setAlerts() { 
    putAlertA(); 
    putAlertB(); 
} 

function getLanguageVars() { 
    var strings = new Array(); 
    strings[0] = "This is alert a"; 
    strings[1] = "This is alert b"; 
    return strings; 
} 

溶液B

function putAlertA(strings) { 
    alert(strings[0]); 
} 

function putAlertB(strings) { 
    alert(strings[1]); 
} 

function setAlerts() { 
    var strings = getLanguageVars(); 
    putAlertA(strings); 
    putAlertB(strings); 
} 

function getLanguageVars() { 
    var strings = new Array(); 
    strings[0] = "This is alert a"; 
    strings[1] = "This is alert b"; 
    return strings; 
} 

搜索解決方案N c個

function putAlertA() { 
    var strings = window.strings; 
    alert(strings[0]); 
} 

function putAlertB() { 
    var strings = window.strings; 
    alert(strings[1]); 
} 

function setAlerts() { 
    putAlertA(); 
    putAlertB(); 
} 

window.strings = new Array(); 
strings[0] = "This is alert a"; 
strings[1] = "This is alert b"; 

我覺得C液將是最好的,因爲我覺得液A &乙在內存消耗方面產生的開銷太大,它看起來不合乎邏輯的,因爲語言數組是一個全球變種。然而,我在使用window.時有點猶豫。不知道這是如何做到這一點的正確方法。也許有更好的方法如何做到這一點?我正在使用jQuery

+0

一些評論:1)不要使用'新的Array()'; 2)使用命名的字符串表(鍵對象具有一些含義)數組索引會變得混亂; 3)搜索,這個問題之前已經被問過很多次了。 – Chad 2013-02-24 14:10:41

+0

這是用於本地化嗎? – 2013-02-24 14:10:53

+0

@Chad 1)我習慣用php和java來做新的Array(),JavaScript有區別嗎?它甚至在W3schools上被推薦... 2)事情是,我得到了很多語言變量,這將使它更有可能是我不小心選擇了一個已經存在的變量......而且我在選擇新名稱方面也不是很好哈哈哈3)你能給我一個鏈接?我搜索了它,但找不到它。也許是因爲我不確定選擇哪個關鍵字。 – bicycle 2013-02-24 14:18:48

回答

2

我更傾向於將靜態對象,例如:

l10n = { 
    strings: [ 
     'alert_a': 'this is alert a', 
     'alert_b': 'this is alert b' 
    ], 
    translate: function(key) { 
     return this.strings[key]; 
    } 
} 

要撥打:

alert(l10n.translate('alert_a'); 

好有關這種方法的一個事情是,通過引入參數化的本地化字符串可以更容易地進行擴展,例如:

"Hello :name:" 

要撥打:

l10n.translate('key', { 
    name: 'world' 
}) 
// "Hello world" 
+0

這就像一個get/set!我喜歡那一個!我認爲這也限制了內存方面的開銷,因爲你只打電話給你需要的東西 – bicycle 2013-02-24 14:20:51

+0

+1。我喜歡這種方法;尤其是因爲你可以擴展到文化敏感的日期和數字格式。 – 2013-02-24 14:24:20

+0

@傑克我不會用它來用不同的語言。其他語言只是在不同的領域。當我在一個域上更新腳本時,我不想在另一個域上逐一編輯js文件。 – bicycle 2013-02-24 14:26:15

1

我要做的主要改變是使用字符串作爲鍵而不是整數,因爲這更有意義。這的確是選擇一個好的變量名只是一個特殊情況:

window.strings = { 
     alertA: 'This is alert A', 
     alertB: 'This is alert B' 
    }; 

    alert(strings.alertA);