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";

ソリューションAとBはメモリ消費の点でオーバーヘッドが多すぎると考えているため、ソリューションCが最適だと思います。言語配列はグローバル変数であるため、論理的には見えません。しかし、私は使用するのを少しためらっています。これを行う方法が正しいかどうかはわかりません。多分これを行うためのより良い方法がありますか?私はjQueryを使用していますwindow.

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 に答える