Opera ウィジェットでのローカライズについて

Opera ウィジェットでのローカライズについてですが
Opera ウィジェットではないです。
Opera ウィジェットの方ではなにもしてくれません。
なので自前で行うしかないです。

どうやって自前で行うかというと
jsファイルを言語ごとに分けておいて
表示したい言語によってそれを切り分けます。
対象となるエレメントを取得して削除しちゃいます。
そして読込みたいエレメントを追加します。

こんな風にsetLocalizedを呼んで言語ファイルを変更して
getStringを呼んでローカライズメッセージを取得します。
下記のような形で。

 this.LANG_NAME     = localizedStrings;
 this.LANG_NAME_JS  = this.LANG_NAME + “.js”;
 this.ROOT_LOCATION = location.toString().substring(0, location.toString().lastIndexOf(“/”)) + “/”;

 /**
  * ローカライズの設定。
  *
  * @param <string> lang 言語名
  */
 function setLocalized(lang) {
  if (lang == null) {
   throw new Error(“lang is null”);
  }
  if (this.gadget.isAIR()) {
   return;
  }

  var jsObjList = document.getElementsByTagName(“script”);
  for (var cnt = 0; cnt < jsObjList.length; cnt++) {
   var jsSrc = jsObjList[cnt].src;
   if (jsSrc.lastIndexOf(this.LANG_NAME_JS) < 0) {
    continue;
   }

   var jsSrc = null;
   if (lang == “ja”) {
    jsSrc = this.LANG_NAME_JS;
   } else {
    jsSrc = lang + “/” + this.LANG_NAME_JS;
   }

   if (
    jsObjList[cnt].src == jsSrc
    || jsObjList[cnt].src == this.ROOT_LOCATION + jsSrc
   ) {
    break;
   }

   // 今のjsを削除
   var headObj = jsObjList[cnt].parentNode;
   headObj.removeChild(jsObjList[cnt]);

   // 新しいjsを追加
   var jsObj = document.createElement(“script”);
   jsObj.src    = jsSrc;
   jsObj.onload = initSettingData;
   headObj.appendChild(jsObj);
   break;
  } // for (var cnt = 0; cnt < jsObjList.length; cnt++)
 }

 /**
  * ローカライズされた文字列の取得。
  *
  * @param  <string> キー
  * @return <string> ローカライズされた文字列
  */
 function getString(key) {
  if (key == null) {
   throw new Error(“key is null”);
  }

  var ret = null;
  try {
   ret = localizedStrings[key];

  } catch(ex) {
  }

  if (ret == null || ret === undefined) {
   ret = key;
  }

  return ret;
 }

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください