/** * ABook Viewer for WEB * 国際化(言語切替)対応共通処理 * * 言語リソースファイルは、指定する言語に合わせて以下のファイルを修正する * - 日本語: lang-ja.json * - 韓国語: lang-ko.json * - 英語 : lang-en.json * * Copyright (C) Agentec Co, Ltd. All rights reserved. */ //グローバルの名前空間用のオブジェクトを用意する var I18N = {}; /** * 定数:言語ファイル配置場所 */ I18N.avwsys_location = ""; I18N.avwsys_dir = ""; I18N.avwsys_storagekey = ""; I18N.avwsys_currLang = ""; /* 言語の初期化 */ $(function() { I18N.initi18n(); }); /** 言語リソース設定初期化 */ I18N.initi18n = function(){ I18N.avwsys_location = "/common/json/lang"; I18N.avwsys_dir = "/abvw"; I18N.avwsys_storagekey = "AVWUS_Lang"; I18N.avwsys_currLang = "AVW_CurrLang"; // ログイン画面/直接アクセス対策 var location = window.location.toString().toLowerCase(); if (location.indexOf(I18N.avwsys_dir) < 0) { // I18N.avwsys_dirディレクトリ配下ではない場合は、I18N.avwsys_dirディレクトリをつける I18N.avwsys_location = "." + I18N.avwsys_dir + I18N.avwsys_location; } else { // I18N.avwsys_dirディレクトリ配下の場合は、相対パスに変換 I18N.avwsys_location = "." + I18N.avwsys_location; } var lang = "en"; var storage = window.localStorage; if(storage) { var lang = storage.getItem(I18N.avwsys_storagekey); if(!lang) { lang = I18N.getNavigatorLanguage(); } } // 言語ファイルを初期化する I18N.loadLanguage(lang); }; /* ブラウザの言語設定を取得する */ I18N.getNavigatorLanguage = function() { var lang = (navigator.browserLanguage || navigator.language || navigator.userLanguage); /* 対応言語 */ var languages = ['ja','ko','en']; // 対応言語を増やす場合はここを変更する if(lang.match(/ja|ko|en/g)) { for(var i = 0; i < languages.length; i++) { var index = lang.indexOf(languages[i]); if(index >= 0) { lang = lang.substring(index, 2); break; } } } else { lang = 'en'; // 対応言語が無ければ英語をデフォルトとする } return lang; }; /* 言語リソースファイル読み込み */ I18N.loadLanguage = function(lang) { // 引数から言語ファイルを選択 var langfile = "lang-" + lang + ".json"; // 言語ファイルを読み込む $.ajax({ url: I18N.avwsys_location + "/" + langfile, async: false, dataType: 'json', cache: false, success: function(data) { // lang属性の書換え document.documentElement.lang = lang; // html の言語データを書換える var jsonLangData = data; I18N.replaceText(jsonLangData); // 言語設定、言語データをストレージにキャッシュしておく I18N.storeCurrentLanguage(lang, jsonLangData); }, error: function(xhr, txtStatus, errorThrown) { var error = 'Could not load a language file ' + langfile + '. please check it.'; error += '\n' + xhr.status + ' ' + txtStatus + ' ' + errorThrown + ' : ' + langfile; alert(error); } }); }; /* ページ内のテキストをすべて言語に合わせて置換する */ I18N.replaceText = function(jsonLangData) { var itemCount = $('.lang').length; if(itemCount > 0) { for(var i = 0; i < itemCount; i++) { var obj = $('.lang:eq(' + i + ')'); var langId = obj.attr('lang'); if(langId) { var langText = I18N.getLangText(jsonLangData, langId); var tn = obj.get()[0].localName; if(tn == 'input') { if(obj.attr('type') == 'button' || obj.attr('type') == 'submit') { obj.val(langText); } else { obj.text(langText); } } else { obj.text(langText); } } } } }; /* 現在設定されている言語でHTMLテキストを置き換える */ I18N.i18nReplaceText = function() { var storage = window.sessionStorage; if(storage) { var value = storage.getItem(I18N.avwsys_storagekey); if(value) { var json = JSON.parse(value); I18N.replaceText(json); } } }; /* キーから文字列を取得 */ I18N.i18nText = function(key) { var storage = window.sessionStorage; if(storage) { var value = storage.getItem(I18N.avwsys_storagekey); if(value) { var json = JSON.parse(value); return I18N.getLangText(json, key); } } return "undefined"; }; /* 言語データのキー値から文字列を取得 */ I18N.getLangText = function(jsonLangData, key) { if(jsonLangData) { var text = jsonLangData[key]; return text; } return "undefined."; }; /* 言語データの切り替え */ I18N.changeLanguage = function(lang) { // 言語の切替を行った場合のみ選択言語をストアする var storage = window.localStorage; if(storage) { storage.setItem(I18N.avwsys_storagekey, lang); } // 言語ファイルを読み込み、テキスト文字列を変換する I18N.loadLanguage(lang); }; /* 設定言語の保存 */ I18N.storeCurrentLanguage = function(lang, langData) { var ss = window.sessionStorage; if(ss) { // language data ss.setItem(I18N.avwsys_storagekey, JSON.stringify(langData)); // current language ss.setItem(I18N.avwsys_currLang, lang); } }; /* 設定言語の取得 */ I18N.getCurrentLanguage = function() { var lang; var storage = window.sessionStorage; if(storage) { lang = storage.getItem(I18N.avwsys_currLang); } if(!lang) { lang = I18N.getNavigatorLanguage(); } return lang; };