1

JavaScript を使用してページ言語に応じていくつかの小さなテキストを管理する必要がある場合、この奇妙なケースがあります。html lang 属性に応じて、テンプレートの一部を置き換える必要があると想像してみてください。そこで、多次元データ オブジェクトを作成し、次の方法で回避することにしました。すべて正常に動作しますが、ベスト プラクティスではないように感じます。スイッチの使用を避けることができるかもしれません。

jsbin バージョン: http://jsbin.com/EvEciVa/2/

$(function(){

var lang = $('html').attr('lang'),
    text;

var obj = {
  'en' : {
    'title' : 'Title english',
    'url' : 'en.html'   
  },
  'fr' : {
    'title' : 'Title french',
    'url' : 'fr.html',   
  }               
};

switch(lang){               
  case'fr':
  text = [obj.fr.title,obj.fr.url];
  break;               
  default:
  text = [obj.en.title,obj.en.url];
}

  $('body').prepend('<a href="'+text[1]+'">'+text[0]+'</a>');

});

問題は: lang 属性値 (言語) がある限り、switch と重複ケースの使用を避けることができるかもしれません。代わりに、lang 値を変数として実装して、データ オブジェクトにアクセスすることができます[obj.lang.title,obj.lang.url];。私の場合。

ご意見いただければ幸いです。ありがとうございました。

4

5 に答える 5

4

ステートメントを避けるために、次のswitchようにデフォルト値を設定できます。

var lang = $('html').attr('lang') || 'en';

これは、これがデフォルトであり、セットenがある場合はオーバーライドされることを意味します。lang次に、ブラケット表記を使用して、次のようにオブジェクトにアクセスできます。

$('body').prepend('<a href="' + obj[lang].url + '">' + obj[lang].title + '</a>');
于 2013-08-28T14:08:58.653 に答える
1

括弧表記を使用する

text = [obj[lang].title,obj[lang].url];

配列を削除して、タイトル/URL を文字列に入れるだけです。

var data = obj[lang];
$('body').prepend('<a href="' + data.url + '">' + data.text + '</a>');
于 2013-08-28T14:08:15.113 に答える
0

ローカライズされたオブジェクトを別の変数に割り当て、そこから作業します。このように、すべてのローカリゼーション コードは、言語ロジックの処理に対処することなく同じオブジェクトを参照でき、必要に応じて後で外部ローカリゼーション ファイルに切り替えることができます。

$(function(){

  var lang = $('html').attr('lang') || 'en',
        text;


  var obj = {
    'en' : {
      'title' : 'Title english',
      'url' : 'en.html'   
    },
    'fr' : {
      'title' : 'Title french',
      'url' : 'fr.html',   
    }               
  };


  var translations = obj[lang];


  $('body').prepend('<a href="'+translations.url+'">'+translations.text+'</a>');

});

また、Rory が述べたように、デフォルト値を設定することは非常に良い考えです。

于 2013-08-28T14:09:10.727 に答える
-1

ステートメントを回避するにswitchは、属性付きの言語がオブジェクトで明らかであるかどうかを確認し、そうでない場合は英語を選択します。

var lang = $('html').attr('lang');
if (! (lang in obj))
    lang = "en";

// then:
'<a href="' + obj[lang].url + '">' + obj[lang].title + '</a>'

または、おそらく簡単に、短い方を使用してください

var localisation = obj[ $('html').attr('lang') ] || obj.en;

'<a href="' + localisation.url + '">' + localisation.title + '</a>'
于 2013-08-28T14:22:41.097 に答える