1

我想将语言变量从我的 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;
}

解决方案 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 和 B在内存消耗方面产生了太多开销,而且它看起来不太合乎逻辑,因为语言数组是一个全局变量。不过我在使用时有点犹豫window.。不确定如何做到这一点是正确的方法。也许有更好的方法来做到这一点?我正在使用 jQuery

4

2 回答 2

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"
于 2013-02-24T14:15:24.837 回答
1

我要做的主要改变是使用字符串作为键而不是整数,因为这更有意义。这实际上只是选择一个好的变量名的一个特例:

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

  alert(strings.alertA);
于 2013-02-24T14:11:24.443 回答