トップページ  Index  Search  Changes  Login

ReactOSまとめWiki - 日本語対応 Diff

  • Added parts are displayed like this.
  • Deleted parts are displayed like this.

注意:古い情報が含まれています

ReactOSの日本語対応に向けてやるべきだと思われること

{{toc}}

!DBCSとUNICODEの変換部の開発

0.2.2 より Unicode の正しいハンドリングによって (UTF-16BE でコンパイルされている場合) 日本語等を表示出来るようになった。ロケール処理はまだ。

日本語表示されている様子
*{{a('http://reactos-j.sourceforge.jp/w/index.php?plugin=attach&refer=ScreenShot%2F0.2.2&openfile=abiword_j.png','0.2.2上のAbiWord'}} (リンク切れ)
*[[0.2.3CVS上のテストソフト|http://reactos-j.sourceforge.jp/w/index.php?Prompt]] (リンク切れ)

!!part3 スレ 884より

ソースをgrepしてみた。
直し方は不明だが
lib/kernel32/misc/nls.c の IntMultiByteToWideCharCP で
/* Different handling for DBCS code pages. */
の直後に
/* UNIMPLEMENTED */
となっている部分を実装してやれば動くのではとおもわれる。

!!part4 スレ 251, 252

日本語化調査その2
漏れができるのは調査のみ
コードかける&コンパイルできる人誰か手伝ってくれ

w32api/include/ddk/ntnls.h 内で定義された
CPTABLEINFO 構造体にANSI<->UNICODE変換の
情報が入っているっぽい

以下は lib/kernel32/misc/nls.c の情報
・IntMultiByteToWideCharCPはANSI->UNICODE変換
・IntWideCharToMultiByteCPはUNICODE->ANSI変換
・IntIsLeadByteは2バイト文字の先頭であるか判定するもの
 日本語の場合はたぶん 0x81-0x9f,0xe0-0xfc のとき true になるべき

IntMultiByteToWideCharCP について
・CodePageTable は変換中の CPTABLEINFO を表す?

IntIsLeadByteについて
・2バイト文字の判定には CodePageTable.LeadByte が使える?
・CodePageTable.LeadByte の要素数は 12 バイトしかない
  -> データ形式は?
・IntIsLeadByte 内の LeadByte[i] == Ch はバグ?
 12バイトでは日本語のコードをカバーできないため
  LeadByteは何らかの圧縮表現をとっているはず

上の情報の追加
・UTF-8は実装済みっぽい
・初期化時に2バイト文字用の情報がCPTABLEINFO構造体へ
  正しく読み込まれているかは不明

!!フォント切り替えについて
0.2.3CVS の時点での情報

Windowsでは、アプリ側が使用しているコードページに従って利用フォントを切り替えるため、
英語環境でもきちんと日本語表示されるはずなんですが、ROSではまだ駄目のようです。
Unicode自体はサポートしているはずなので、CreateFont()のfdwCharSet(この場合
SHIFTJIS_CHARSET)の値を見てのページ切り替えが実装されていないのでは、と思いました。

!!参考:UTF-16BE でのコンパイル方法
308 :思兼◆l3iwkTImVo :03/07/09 19:35
遅くなったけどunicodeの実験結果

 gccに-std=c99オプションをつけて,\uを有効にしてコンパイル

wchar_t str[] = L"\u3042\u3044";//"あい"のunicode
wprintf( str );
MessageBoxW( NULL , str , str , MB_OK );

 wprintfは実行しても何も表示されず。L"hoge"とかなら表示できたので
ASCII文字しか表示できないのかもしれない。
 MessageBoxWは成功。ちゃんと「あい」と表示されてる。

 ただし,g++では,windows.hをincludeすることで一緒にincludeされる
rpcndr.hがコンパイルできなくて使えない。

 ということで,現状でも\uを使うことで,unicodeを埋め込んだプログラムを
g++で使うことは可能。選択範囲の文字列を\u形式に変換する機能を持つ
エディタを使えば,簡単にunicodeのwxWindowsアプリを作れる。

 gccが,L""文字列の中のマルチバイト文字列をunicodeに変換してくれる
ようになればもっと楽なんだけどな。せめてUTF-8だけでもいいから対応
して欲しい。


!IME(Input Method Editor)の開発
[[ime]](調査予定)

!106日本語キーボードへの対応
*[[106配列用キーボードドライバ|http://www.asahi-net.or.jp/~ym3y-oksm/nt/react/react03.htm]]
*[[本家Wiki:create a keyboard layout]]
**[[SVNのキーボードのソース|http://svn.reactos.com/viewcvs/trunk/reactos/lib/keyboard/]] (新しいリンク先どこ?)

!日本語フォントの導入
フォントをCDイメージに含めるには、%%\bootdata\packages\reactos.dff%% \media\fonts\fonts.rbuild を適当に修正。
たとえば39行目からに以下を追加する。

<installfile installbase="media/fonts">ipag-mona.ttf</installfile>
<installfile installbase="media/fonts">ipagp-mona.ttf</installfile>
<installfile installbase="media/fonts">ipagui-mona.ttf</installfile>
<installfile installbase="media/fonts">ipam-mona.ttf</installfile>
<installfile installbase="media/fonts">ipamp-mona.ttf</installfile>

※reactos.dffを編集しても追加されなかった。

フォントが選択できるアプリ (エディタ、ワープロソフトなど) から使うには、フォントディレクトリ (\ReactOS\MEDIA\FONTS) にフォントを入れればよい。

'''下記のレジストリの追加/変更を行うと、次回より ReactOS が起動途中でフリーズしてしまうようです。'''

フォント名 ("MS UI Gothic"など) が埋め込まれているダイアログで日本語を表示させるには、フォントを入れた上で下記のレジストリの部分に代替情報を書き込めばいい?

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes]

\bootdata\hivesft.inf にフォント関連のレジストリ情報があるっぽい。以下のような感じで指定する。

HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","MS UI Gothic",0x00000000,"IPAMonaUIGothic"
HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes","Bitstream Vera Sans",0x00000000,"IPAMonaUIGothic"

以下もフォント情報を含んでいるので、書き換えるべきかも。
*\subsys\win32k\objects\stockobj.c
*\subsys\csrss\win32csr\guiconsole.c
*\subsys\win32k\ntuser\misc.c

ただし、日本語を含んだフォント名を指定することはおそらくできない。少なくとも hivesft.inf 内で日本語を含んだフォント名を指定しても認識されない (shift_jis) か、インストール時にエラーがでてしまう (UTF-16BE/LE, UTF-8)。

それから、.ttc ファイルを用いてもその中からフォントを探すこともできないらしい。少なくとも Osaka, MS UI Gochic はだめだった。

!!日本語フォントのリスト

無料のフォントのリストです。

*[[IPAモナー|http://www.geocities.jp/ipa_mona/index.html]]
*[[M+|http://mplus-fonts.sourceforge.jp/]]
*[[Shinonome|http://openlab.jp/efont/shinonome/]]
*[[さざなみ|http://wiki.fdiary.net/font/]]|http://wiki.fdiary.net/font/?sazanami]]
*[[FS|http://x-tt.sourceforge.jp/fs_fonts/]]*[[FS|http://x-tt.sourceforge.jp/fs_fonts/]] (リンク切れ)
*[[VL|http://dicey.org/vlgothic/]]
*[[IPA|http://www.grass-japan.org/FOSS4G/readme-grass-i18n-ipafonts.eucjp.htm]]*[[IPA|http://ossipedia.ipa.go.jp/ipafont/]]
*[[JISX0213|http://www12.ocn.ne.jp/~imamura/jisx0213.html]]
*[[あくあ|http://aquablue.milkcafe.to/]]|http://aquablue.milkcafe.to/]] (リンク切れ)
*[[みかちゃん|http://mikachan-font.com/]]

!リソースの翻訳

*[[翻訳入門]]
*[[したらばでわいわいかきこで作業中...|http://jbbs.livedoor.jp/bbs/read.cgi/computer/24532/1127129361/l20]]←なくなっていました。(2008/01/06)?|http://yy27.60.kg/test/read.cgi/reactos/1127129362/l50]]

!セットアップ情報の変更
'''日本語ロケールはSVNの[[r26894|http://svn.reactos.ru/svn/reactos?view=rev&revision=26894]]で追加されました。'''{{br}}

boot\bootdata\hivedef.inf 中の25行目を修正。

HKCU,"Control Panel\International","Locale",0x00000000,"0409"

HKCU,"Control Panel\International","Locale",0x00000000,"0411"

boot\bootdata\hivesys.inf 中の以下を修正。これは修正しなくても日本語が表示されるようです。
HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","Default",0x00000000,"0411"
HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","InstallLanguage",0x00000000,"0411"