- 履歴一覧
- 現在との差分 を表示
- ソース を表示
- 履歴 を表示
- JavaScriptとCSSで言語切り替えする(その2) へ行く。
- 1 (2013-04-02 (火) 09:19:14)
- 2 (2013-04-02 (火) 09:36:40)
- 追加された行はこの色です。
- 削除された行はこの色です。
*関連 [#odb24f4b] -HTML -JavaScript/jQuery -CSS *概要 [#af28e4a4] JavaScriptとCSSで言語切り替えをする方法のメモです(後日きれいにまとめるかも)。 Webアプリケーションのフレームワークが多言語対応しているケースが多いと思いますが、ここではあえてJavaScriptとCSSだけで実現する方法を考えてみます。多言語対応した静的なページをWebサーバで、なんてときに。 [[その1>JavaScriptとCSSで言語切り替えする]]もどうぞ。 *方法 [#n3424d9b] -index.html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title>多言語対応テスト</title> <link rel="stylesheet" type="text/css" href="css/initialize.css">'); <link rel="stylesheet" type="text/css" href="css/initialize.css"> <noscript> <link rel="stylesheet" href="css/noscript.css"> </noscript> <script type="text/javascript" src="js/jquery.js"></script> <script type="text/javascript" src="js/multilingual.js"></script> <script type="text/javascript"> <!-- jQuery(function() { jQuery('#multilingual').multilingual(); }); // --> </script> </head> <body class="ja"> <div id="multilingual"></div> <div id="header"> <span class="multilingual en">English Header</span> <span class="multilingual ja">日本語ヘッダ</span> </div> <div id="content"> <span class="multilingual en">English Content</span> <span class="multilingual ja">日本語コンテント</span> </div> <div id="footer"> <span class="multilingual en">English Footer</span> <span class="multilingual ja">日本語フッタ</span> </div> </body> </html> -css/initialize.css @charset "UTF-8" body { display: none; } -css/noscript.css @charset "UTF-8"; body { display: block; } .multilingual.sub { display: none; } -js/multilingual.js (function() { var langs = [ {lang: 'ja', name: '日本語'}, {lang: 'en', name: 'English'} ]; var setLang = function(lang) { if (! lang) { lang = langs[0].lang; } jQuery.each(langs, function() { jQuery('body').removeClass(this.lang); }); jQuery('body').addClass(lang); var toHide = '.multilingual'; jQuery(toHide).hide(); jQuery(toHide).attr('disabled', 'disabled'); jQuery(toHide + ' *').attr('disabled', 'disabled'); var toShow = '.multilingual.' + lang; jQuery(toShow).show(); jQuery(toShow).removeAttr('disabled'); jQuery(toShow + ' *').removeAttr('disabled'); }; jQuery.fn.extend({ multilingual: function(callback) { var target = jQuery('<ul />').appendTo(this); jQuery.each(langs, function() { jQuery(target).append( jQuery('<li />').append( jQuery('<a />') .attr('rel', this.lang) .text(this.name) .click(function() { var lang = jQuery(this).attr('rel'); setLang(lang); if (callback) { callback(lang); } }) ) ); }); } }); jQuery(function() { setLang(langs[1].lang); jQuery('body').css('display', 'block'); }); })(); *解説 [#z72447c4] -日本語と英語を全部書いて全体を非表示(css/initialize.css) --JavaScript有効の場合言語を設定して全体を表示(js/multilingual.js) --JavaScript無効の場合全体を表示してサブ言語を非表示(css/noscript.css) ---linkをnoscriptでheadの中に書くためhtml5 **非表示言語分のパラメータが送れてしまう [#a1143b93] はい。disabled などしてあげないといけないと思います。 *参考 [#l4492db0] -http://terkel.jp/archives/2012/07/styles-for-noscript/