言語パックの構成について
- 解析してツールを作られたxndcnさんのforumスレに書かれているので大体ことが足りる。
http://forums.getpebble.com/discussion/21716/something-about-language-pack-file
- 言語パックのpblファイルは、1つのメッセージファイルと種々のフォントを格納した18個のpfo(pebble font object?)ファイルから構成される。
- メッセージファイルはGNU gettextの.moファイルそのもので、.poファイルを編集したうえで変換を行うことで生成する。
- メッセージファイルはファイル名000とする。
最初は既存のpblファイルを分解して出てきた000ファイルをmsgunfmtコマンドで.poに変換すると、編集可能な.poファイルになる。- この為だけにgettextをインストールするのは不毛だと考えて、未翻訳のメッセージカタログ(言語設定ja_JP)を用意しました。ダウンロード(http://yahoo.jp/box/WnFy5J)
- POeditを使って.poファイルを編集保存すると、自動的に.moファイルができるので、それを000に改名する。
- 主な情報表示に使うフォントは以下の4サイズ8ウェイト。
- 14ドット(太、細)
- 18ドット(太、細)
- 24ドット(太、細)
- 28ドット(太、細)
- 上記8フォントはそれぞれ、14ドット細が001、14ドット太が002、18ドット細が003、18ドット太が004、24ドット細が005、24ドット太が006、28ドット細が007、28ドット太が008をファイル名とする。
- また標準的なwatchfaceの表示で、メッセージファイルの翻訳によっては必要となる文字がある場合は、それぞれのファイルにフォントを格納する。一番影響するのは「?月」という表示。これはファイル名016の中に格納する。(中国語、日本語など)ない場合はwatchfaceの「月」が空白になる。
- pfoファイルはPebbleSDKのfontgen.pyを使いpfoオプションを指定して生成する。
$ python fontgen.py pfo -h usage: fontgen.py pfo [-h] [--extended] [--tracking TRACKING] [--filter FILTER] [--list LIST] [--legacy] HEIGHT INPUT_TTF OUTPUT_PFO positional arguments: HEIGHT Height at which to render the font INPUT_TTF The ttf to process OUTPUT_PFO The pfo output file optional arguments: -h, --help show this help message and exit --extended Whether or not to store > 256 glyphs --tracking TRACKING Optional tracking adjustment of the font's horizontal advance --filter FILTER Regex to match the characters that should be included in the output --list LIST json list of characters to include --legacy use legacy rasterizer (non-mono) to preserve font dimensions
- 日本語など255文字以上のフォントを格納する場合は--extendedを付ける。
- 格納したい文字を制限する場合は必要な文字の文字コードをjsonファイルの配列にしたものを食わせてあげると、ttfファイル内の必要な文字だけをピックアップしてpfoファイルに格納する。文字コードはunicodeで2バイトで指定できる文字を、コードを10進数にしてjson形式で列記する。
- fontgen.pyは要求したドット数にビットマップフォントが埋め込まれている場合にはそちらを優先して格納するように見える。ベクターしかない場合はビットマップフォントに変換して格納する模様。
- コマンド例としてはこんな感じ。
fontgen.py pfo --extended --list charlist.json 14 sazanami-gothic.ttf shino14.pfo
-
- legacyオプションはビットマップフォントがない場合にギザギザを滑らかにするように階調をつけるらしいが、サイズは大きくなるものの、どこが階調表示なのか不明。カラーモデルにはこちらのほうがいいと思うのですが、私には効果の程はわかりません。(ビットマップを取り出しても階調があるようなデータになっていない。)
- 出来栄えをチェックするのはextract_codepoints.pyを使います。これに作ったpfoファイルを食わせると、そのpfoファイルが持つ文字数や文字のドット数、どういう文字が格納されているかの情報が得られ、またビットマップを一枚の画像に展開した物が出てきます。
- 14ドット、18ドット、24ドット、28ドットのpfoファイル計8つを作成し、それぞれ001〜008に改名する。
- 000から018まで19個のファイルが揃ったら、pbpack.pyを使ってpblファイルにまとめる。
export PEBBLE_SDK_PATH=/path/to/PebbleSDK-3.0/
などと追記して反映させます。Windowsの場合はシステムの環境変数に追加する方法で同様に対応可能です。cmdコマンドプロンプト上でsetコマンドを実行し、この環境変数が設定されているかを確認することができます。
-
- pbpack_tools.pyは以下のように使います。
$ python pbpack_tool.py pack -h usage: pbpack_tool.py pack [-h] PACK_FILE [PACK_FILE_LIST [PACK_FILE_LIST ...]] positional arguments: PACK_FILE file to write the pbpack to PACK_FILE_LIST a list of <pack_file_path>s
-
- コマンド例としてはこんな感じ。
python pbpack_tool.py pack testpack.pbl 000 001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018
- 以上のステップで言語パックが一応出来てきます。あとは転送して動作確認をします。
- だめな場合は再起動がかかります。サイズが大きい場合は特に転送に失敗しやすいので、ファクトリーリセットを行ってから転送する方が無難です。