@znz blog

ZnZ の memo のようなもの

jQuery Mobile 1.3.2 の日本語化

| Comments

jQuery Mobile の l10n についてちゃんと調べたのでまとめておきます。 今回は日本語化だけですが、 翻訳対象は網羅できていると思います。

ちゃんと他の言語にも対応させるためには mobileinit の中で設定する文字列を別途 i18n 用の仕組みを用意して 翻訳し分けることになると思います。

mobileinit

まず最初に注意すべき点として Configuring Defaults | jQuery Mobile API Documentation にも書いてありますが、 mobileinit のイベントハンドラは jquery.mobile.js の読み込み前に設定しておく必要があります。 ($on を使うので jquery.js よりは後にします。)

これを知らないと設定が反映されなくて悩むことになります。

rails 3.1 以降との組み合わせなら、例えば app/assets/javascripts/mobile.js に以下のように書いておいて、 app/assets/javascripts/mobile/jqm_ja.js などにローカライズ用の mobileinit を書くということになります。

1
2
3
4
//= require jquery
//= require jquery_ujs
//= require_tree ./mobile
//= require jquery.mobile

例えば以下のような感じになります。

app/assets/javascripts/mobile/jqm_ja.js.coffee
1
2
3
4
5
6
7
8
9
10
11
12
13
$(document).on "mobileinit", ->
  #$.mobile.loadingMessageTextVisible = true
  #$.mobile.loadingMessage = "読み込み中..."
  $.mobile.loader.prototype.options.text = "読み込み中です..."
  $.mobile.loader.prototype.options.textVisible = false
  $.mobile.pageLoadErrorMessage = "読み込みに失敗しました。"
  $.mobile.page.prototype.options.backBtnText = "戻る"
  $.mobile.listview.prototype.options.filterPlaceholder = "検索..."
  $.mobile.table.prototype.options.columnBtnText = "列の増減..."
  $.mobile.dialog.prototype.options.closeBtnText =
    $.mobile.selectmenu.prototype.options.closeText = "閉じる"
  $.mobile.collapsible.prototype.options.expandCueText = "クリックで開く"
  $.mobile.collapsible.prototype.options.collapseCueText = "クリックで閉じる"

Error Loading Page

読み込みエラーの時のメッセージは $.mobile.pageLoadErrorMessage で設定できます。

いろいろな理由で表示されることが多いので、 真っ先に変更したくなるメッセージだと思います。

見た目は $.mobile.pageLoadErrorMessageTheme で変更できます。

loading

1.3.2 でしか確認していませんが、 jQuery Mobile 1.2 からは Loader Widget に変わっていて、 $.mobile.loader.prototype.options.text で設定するようになっています。 ドキュメントによると、 メッセージの変更やテーマの変更以外にも 独自の HTML を表示するなど いろいろとカスタマイズ出来るようです。

$.mobile.loader.prototype.options.textVisible で有効にした時だけ表示されるようなので、 不要なら無視しても良いかもしれません。

deprecated になっていますが、互換性のため、 $.mobile.loadingMessage$.mobile.loadingMessageTextVisible もまだ使えるようです。 ( $.mobile.loader.prototype.options.text$.mobile.loader.prototype.options.textVisible より優先されるようです。)

pageloadfailed

ローカライズとはちょっと離れて、 読み込みエラーのときに別処理をする方法を書いておきます。

devise の timeoutable を使っていると 普通の画面遷移をしようとしたときに 401 Unauthorized になることがあります。 そのときに読み込みエラーメッセージだけ出されても困るので、 pageloadfailed で認証画面に飛ぶためのリダイレクト処理を入れてみました。

event.preventDefault() を呼んでいないので、 data.deferredresolve()reject() も呼ばず、 リダイレクト前のページの処理はデフォルトのままにしています。

app/assets/javascripts/mobile/pageloadfailed.js.coffee
1
2
3
$(document).on "pageloadfailed", (event, data) ->
  if data.xhr.status == 401
    window.location.href = data.absUrl

Back

data-role="page" の要素に data-add-back-btn="true" を追加したときに Header Widget に出てくる戻るボタンのテキストです。

$.mobile.page.prototype.options.backBtnText で設定できます。

Filter items…

ここからはページ全体ではなく Widget ごとの翻訳の話になります。

まず Listview Widgetdata-filter="true" の時に出てくる検索入力欄の placeholder のテキストです。

まとめてデフォルトを変更するには 今までのものと同様に mobileinit$.mobile.listview.prototype.options.filterPlaceholder に設定します。

個別に変更するには listview に data-filter-placeholder 属性を設定します。

この後のものも同様に全体のデフォルト設定を mobileinit で設定したり、 属性で個別に設定したりできます。

Columns…

Column-Toggle Table Widget の列を増減させるポップアップを表示させるボタンのテキストです。

mobileinit$.mobile.table.prototype.options.columnBtnText を設定するか、 data-column-btn-text 属性で設定します。

Close

Dialog Widget の閉じるボタンのテキストは mobileinit$.mobile.dialog.prototype.options.closeBtnText を設定するか、 data-close-btn-text 属性で設定します。

ダイアログの閉じるボタンはデフォルトではアイコンのみでテキストは表示されないのですが、 スクリーンリーダーで読み上げられるので、 アクセシビリティ的には重要と jQuery Mobile のドキュメントには書いてありました。

ドキュメントには書いてありませんが、 jQuery Mobile 1.3.2 のソースをみると Selectmenu Widget の Multiple selects の閉じるボタンのテキストとして $.mobile.selectmenu.prototype.options.closeText も設定しておくと良さそうです。

clear text

検索入力はデフォルトで、 その他のテキスト入力では data-clear-btn=true の時に、 何かテキストを入力すると右に出てくるクリアボタンのオプションとして、 data-clear-btn-text があります。

これもデフォルトでは表示されず、スクリーンリーダーなどのアクセシビリティ用です。

$.mobile.textinput.prototype.options.clearBtnText でまとめて設定すれば良いと思います。

$.mobile.textinput.prototype.options.clearSearchButtonText という設定も残っていますが、 deprecating for 1.3... とコメントに書いてあるので、 1.3 以降なら clearBtnText だけ設定しておけば良いと思います。

click to expand contents, click to collapse contents

最後に Collapsible Widget の翻訳です。

これもデフォルトでは表示されず、スクリーンリーダーなどのアクセシビリティ用です。

デフォルトが " click to expand contents" の方が $.mobile.collapsible.prototype.options.expandCueTextdata-expand-cue-text で変更できて、 デフォルトが " click to collapse contents" の方が $.mobile.collapsible.prototype.options.collapseCueTextdata-collapse-cue-text で変更できます。

Comments