2005-07-05
■ [Localize]リアル日本語化への道(第2回)改訂版
ご注意
作業手順及びツールなどが全面的に変更となったため、改訂しました。過去記事はこちら
→ http://p50.g.hatena.ne.jp/kzou/00000705
前回は日本語のResourceの元となる日本語版 PocketPC 2003SEのエミュレータからのROMイメージの取り出しを書きましたが、皆さん作業できました?
いままで見れなかった部分も見れてまさにInside Windows Mobileって感じですね(^^ゞ
今回は、前回抜き出したファイルを元に日本語のmuiファイルを作る方法を書いてみます。当然、前回と同様に自己責任であること最低限の努力はしてください。もちろん流れを読んで理解できなければ辞めたほうがいい作業だと思います。
リスクは必ず付き物ですので自己責任とか理解できない人、本体や周辺機器が壊れたら困るという人も絶対に行わないでください。
やり方及び実行もグレーゾーンなのか黒なのか白なのか解りませんことをまず自覚してください。
また、作成したファイルを自己管理のもと以外で配ったり(二次配布)するのはグレーとか黒以前に黒だと思われます。(多分、GameのROMとか音楽ファイルみたいな扱いなかなぁ~って認識レベルですけど)
しつこく書きますが全て自己責任でお願いいたします。
<<日本語のResourceを利用したmuiファイルの作り方>>
用意するもの
- Windows2000またはXP
- eMbedded Visual Tools 4.0 JA
- eMbedded Visual C++ 4.0 SP4(日本語版)
- Windows Mobile 2003 software for Pocket PC 日本語版 ソフトウェア開発キット(SDK)
- Emulator Images for Windows Mobile 2003 Second Edition-based Pocket PC Development
(Windows Mobile 2003 Second Edition Emulator Images for Pocket PC - JPN.msiを選択)- ResourceHacker
- 前回抜き出して展開した日本語版のROMファイル
- DumpStringTable.exe
(ホーミン氏作成 PC上で実行 eVCやResourceHackerで書き出せない終端処理をテキストで書き出すツール)- DumpDialogRC.exe
(ホーミン氏作成 PC上で実行 eVCでドラック&ドロップできないアドレスの桁数が多いDialogをRCファイルとして書き出すツール)
流れとしてはこんな感じ
空のDLLファイルを作成→元のDLLファイルから文字列を持ってくる→状態に合わせてビルドする→ビルドしたら名前を○○○.dll.0411.muiとしてレジストリで同一言語設定にしたPPCに送ってリセットしてみる。
下記の文章の説明文はホーミンさんから頂いた手順書を参考に加筆してあります。
(重ね重ねホーミンさんにはお世話になっております<(__)>)
※尚、MS部分のリソース編集は問題が発生することがあるので要注意
muiに必要なResourceを含む流用DLLファイルの作成
- 空DLLの作成
- eMbedded Visual C++ 4.0(以下eVC)を起動して「ファイル」→「新規作成」→「プロジェクト」のタブで「WCE Dynamic-Link Library」を選択しプロジェクト名は解りやすいようにこれから作るDLLファイルと同じ名前とかにしておく。
- 「空のWindows CE DLLプロジェクト」を選択してOK。
- 再びeVCの画面で「ファイル」→「新規作成」で現れる画面で「ファイル」タブは「リソーススクリプト」を選択、ファイル名はさっきと同じ名前でも可。
- 「プロジェクト」→「設定」で設定するときは「設定の対象」を「すべての構成」にして「リンク」タブの「カテゴリ」を「アウトプット」にして「エントリポイントシンボル」を空欄にする。 その後、「設定の対象」を各debugとReleaseごとにして「プロジェクトオプション」の最後に /NOENTRY を必ず追加します。
- DLLファイル作成時の注意点
- 作業A そのままビルドしてもOK(上にかいた /NOENTRY の記述は必ず必要)
- 作業B 追加オプションが必要(注1)
(注意1)evcの「プロジェクト」→「設定」の「リソース」タブの「プロジェクトオプション」の行末に/Nを入れる。- 作業C 作業Bに追加してさらに作業必要(注2)
(注意2)evcの「プロジェクト」→「設定」の「リソース」タブの「プロジェクトオプション」の行末に/Nを入れる。
さらにチェックしたdllやexeファイルのフォルダに"ファイル名.拡張子.txt"というファイルが書き出されているのを確認する。ビルドする前に再び処理をするまでこのファイルは保存して置いてください。
これは下で説明しますが文字列の終端処理が違うので途中から文字が表示されないことへの対策の為のファイルです。
- 日本語Resourceを流用するファイルを開く
- 日本語Resourceの流用
- 上の状態だと作成中のResourceウィンドウと今開いた流用元の日本語版エミュレータから抜いたResourceが表示されていると思います。
- 日本語Resourceの"String Table"、"Menubar"、"Dialog"などを各々開いた状態でShiftキーなどで選択して作成中の空のDLLファイルの○○.rcと書かれているところにCtrlキーを押しながら1項目ごとに("String Table"、"Menubar"、"Dialog"をやる場合は中の数字を等を選択した状態で3回)ドラッグ&ドロップでコピーします。
- コピーした後は"Menubar"や"Dialog"の変更を絶対にやらないでください。無用なコードがお節介のように書き込まれてしまうそうです。(変更する場合はビルドした後にResourceHackerで行いましょう)
- ビルドをする
- 上に書いた、作業Aと作業Bの場合は作業を確認してビルドをします。
- 上に書いた、作業Cの場合は"一旦開いているDLL作成のプロジェクトを閉じて(自動で保存されます)、プロジェクトの入ったフォルダの中にあるプロジェクト名.rcファイルをエディタなどで開きます。
先程、作業CでDumpStringTable.exeを使って書き出したテキストファイルを開き該当の番号を検索して文字列をコピーします。全ての箇所のコピー(修正)が終わったらエディタで保存して閉じてください。
その後はプロジェクトの入ったフォルダのワークスペースファイル(プロジェクト名.vcw)を開きますが、その後はビルドするまで一切触らないでください。
(要は¥0000っていう文字列終端処理がeVCでもResourceHackerでも見れないので弄れない為、エディタでの処理をした訳です。)
(参考まで)文字列リソースが単純にコピーできない理由
文字列リソースは「文字数」と「実際の文字列」が保存されています。これを裏ワザ的に利用して終端文字(\0)を途中に入れることが出来ます。eVCやResHackerで文字列編集して保存すると、「終端文字までの文字数」と「終端文字まで文字列」になるためおかしな事がおこります。
/Nオプションは文字列に終端文字がついた形で保存します。
DumpStringTable.exeはこういう文字列をチェックします。
Dialogなどをドラック&ドロップするとeVCが強制終了してしまう場合。
これはeVCのバグかもしれないということですが、Dialogなので使われているアドレス番号がある程度以上になると認識できずエラーでeVCが落ちてしまいます。その場合は、追加で下記の処理が必要です。(今のところoutres.dllで作業が必要です)
- DumpDialogRC.zipをこちらからDownloadしてPC上で解凍してDumpDialogRC.exeを用意しておく。
- DumpDialogRC.exeを起動して日本語Resourceを選択してあげると、"ファイル名.拡張子.dlg.txt"を書き出してくれます。
- 一旦開いているDLL作成のプロジェクトを閉じて(自動で保存されます)、プロジェクトの入ったフォルダの中にあるプロジェクト名.rcファイルをエディタなどで開きます。
今取り出したを"ファイル名.拡張子.dlg.txt"開き、全て選択してコピーし、ファイル名.rcに該当の場所にペーストします。- 該当の場所が解らなければ、ドラック&ドロップできる"Dialog"を試してみてそれからファイル名.rcをエディタで開いてその場所を見極めてください。
- 全ての箇所のコピー(修正)が終わったら再度、作業Cでの修正箇所に変わりがないか確認してエディタで保存して閉じてください。
プロジェクトの入ったフォルダのワークスペースファイル(プロジェクト名.vcw)を開いて"String Table"、"Menubar"、"Dialog"や一切触らずにビルドしてください。
- 準備がそろったらeVCの上の方にあるプルダウンメニューよりPOCKET PC 2003、Win32 (WCE ARMV4) Release、POCKET PC 2003 Deviceを選んで「ビルド」→「ビルド ○○.dll」を選んでビルドします。
- コンパイルが始まってビルドが終わるとActiveSyncが起動してPocketPCに送ろうとしますが、その画面が出たら「キャンセル」で送信を止めてください。
(「ツール」→「オプション」「ダウンロード」タブの「常にバイナリをターゲットにダウンロード」にしておくのチェックを外しておくとビルド時にデバイスへダウンロードされません。) - ビルドして出来たdllをリネーム
これで空のdllから"String Table"、"Menubar"、"Dialog"のみ日本語を流用したmuiファイルの作成方法の説明は終わりです。
次回は色々と問題のある導入方法へと続きます。(読む前に出来上がって嬉しくて導入すると私と同じ痛い目にあうかもです(^^ゞ)
(2005.7.10改訂 旧記事はこちら)
(2005.7.12修正)
- http://d.hatena.ne.jp/kzou/20050704
- はてなグループ - BenQ P50ユーザーズグループ - R...
- http://p50.g.hatena.ne.jp/kzou/00000705
- http://d.hatena.ne.jp/kzou/20050710
- はてなグループ - BenQ P50ユーザーズグループ - R...
- http://d.hatena.ne.jp/NARi/20050717
- http://p50.g.hatena.ne.jp/NARi/20050716
- はてなグループ - BenQ P50ユーザーズグループ - ...
- http://d.hatena.ne.jp/kzou/20050818
- http://d.hatena.ne.jp/kzou/20060316
- http://d.hatena.ne.jp/kzou/20060418
- http://d.hatena.ne.jp/souichiro_iida/20061107
SDKインスコ時にスクリプトチェックにかかる場合があるので、ノートンとかは切っておいたほうが良いです~ ご参考まで http://tk109.matrix.jp/blog/DownLoad/Doc/X50vJp.html
・「プロジェクト」→「設定」で設定するときは「設定の対象」を「すべての構成」にして設定すると設定漏れや間違いが防げます。
・「ツール」→「オプション」「ダウンロード」タブの「常にバイナリをターゲットにダウンロード」のチェックを外しておくとビルド時にデバイスへダウンロードされません。
・DumpDialogRC.exeではIDが番号でなく名前のダイアログは書き出し出来ないので、eVCでコピーする必要があります。
・MenuはeVCでもResHackerでも編集しても大丈夫です。当然下手にいじらない方がいいですけど。
(参考まで)文字列リソースが単純にコピーできない理由
文字列リソースは「文字数」と「実際の文字列」が保存されています。これを裏ワザ的に利用して終端文字(\0)を途中に入れることが出来ます。eVCやResHackerで文字列編集して保存すると、「終端文字までの文字数」と「終端文字まで文字列」になるためおかしな事がおこります。
/Nオプションは文字列に終端文字がついた形で保存します。
DumpStringTable.exeはこういう文字列をチェックします。