読み書きプログラミング

日常のプログラミングで気づいたことを綴っています

ウェブアプリでローカリゼーション

Dashboardウィジェットをまねて以下のようにしました。

1. localizedStringsを定義したja.jsなどを用意

var localizedStrings = {};
localizedStrings['Example'] = '例';
localizedStrings['Hello!'] = 'こんにちは!';

2. html内でブラウザの言語に応じて上記jsを読み込む。
以下の例ではapp.html?lang=jaというようにURLでも指定可能にしました。

<!DOCTYPE html>
<html>
<head>
<title>Example</title>
</head>
<body>
<h1 id="hello">Hello!</h1>
    <script type="text/javascript">
<!--
var match, lang;
lang = navigator.language.replace(/-.*$/, '');
if (match = window.location.search.match(/lang=([\w-]+)/)) lang = match[1];
document.write('<script src="http://maps.google.com/maps/api/js?sensor=true&language=' + lang + '"></script>');
switch (lang) {
    case 'ja':
        document.write('<script src="localize/' + lang + '.js"></script>');
        break;        
}
-->
    </script>
    <script src="app.js">
</body>
</html>

3. app.js(app.coffee)内でローカライズ

getLocalizedString = (key) ->
    if localizedStrings? then localizedStrings[key] ? key else key

localize = ->
    idWordPairs =
        'hello' : 'Hello!'
    document.title = getLocalizedString 'Maps'
    for key, value of idWordPairs
        document.getElementById(key).innerText = getLocalizedString value

localize()

HTMLとidWordPairsの両方に同じ英単語が並ぶのがちょっと不満です。