Upgrade to Pro — share decks privately, control downloads, hide ads and more …

開発から見たWindowsの国際化機能

 開発から見たWindowsの国際化機能

古い資料ですが、Windowsの国際化対応機能はあまり変わっていないことも事実なので、まぁ参考になれば。

Avatar for Tadahiro  Ishisaka

Tadahiro Ishisaka

May 05, 2023
Tweet

More Decks by Tadahiro Ishisaka

Other Decks in Technology

Transcript

  1.  企業の多国籍化  オフショア  日本語がネイティブでない環境での開発  コア部分開発とUI部分の分業  国内市場の行き詰まり

     日本以外のマーケットを開拓する  すべてが日本語化されるべきと期待される今 の特権的地位はいつまで続くだろうか
  2.  いずれかの言語でアプリケーションを開発す る  たいていは英語で開発する。  それを各国語に翻訳する。  リソースDLLは分かれているか? 

    バイナリリソースエディタでテキストを置き換える  ソースコード内のテキスト文字の翻訳  sed s/hoge/ほげ/でうまくいくのか
  3.  ソースの変更  ああここも直ってない。。  一千も二千もあるソースリソースからテキストを見 つけ出さなくちゃいけない。  エラーメッセージが英語だよ。 

    そ、それは、英語ランタイムが出すメッセージだか ら直せないんだよ。。。  やっぱり「能」の字が化けるよ。orz  バックスペースしたら、漢字が半分無くなったよ。
  4.  Unicodeに完全対応したアプリケーションを記述す る  コード内で数値、金銭、日付等のフォーマッティン グを直接行わない  テキスト入力の言語、入力方法の違いを考慮する  特定のフォントに依存させない

     テキスト中の複数言語混在に対応させる(m17n)  MUIに対応させる  UIのローカリゼーション容易性への配慮  右から始まる言語への配慮(UIのミラーリング)
  5.  UNICODE自体の説明は省きます。  以下の点はまず注意してください  Windowsのバージョンによって、対応している UNICODEのバージョンが違います。  その他、Java, VB,

    VC++(CRT)のそれぞれのバージョ ンが持つランタイムでも対応しているUNICODEの バージョンが違います  これで何がまずいか?  使える文字と使えない文字が出て きます
  6.  Windows 2000  UNICODEに完全対応した最初のバージョン  UNICODE 2.0  UCS-2エンコード

     Windows XP / 2003  UNICODE 3.0  UTF-16LE以下同様  .NET Framework  UNICODE 3.2  いわゆるJIS2004の文字を含む  Windows Vista / 2008  UNICODE 5.0
  7.  SQL Server(7.0以降)  UCS2 + サロゲートペアに対応  一応UNICODE 3.0以降の文字もnchar,

    nvarchar フィールドには格納できる。  ただ、いろいろ問題が。。  詳しくはPASSJアフタースクールへ(宣伝)  Officeは?Exchangeは? ???
  8.  アプリケーションをUNICODE対応とするには  ネイティブコード  あんまり詳しくやりません(終わらなくなる)  #define UNICODE 

    Visual StudioではWizardの中でチェックをする/しない  文字列  LPTSTRマクロを使う(UNICODEがDefineされていれば 自動的にLPWSTRに変えてくれる)  文字列定数の前には大文字のLをつける  LPTSTR str = L”僕の名前は石坂忠広です。”;  MFCが使えるならCStringクラスを使う  COMはVT_BSTRで  これらは相互変換のマクロ、クラスメソッドがある
  9.  .NET Frameworkでの開発  .NET FxはUNICODEに完全に対応  内部では文字列はUTF-16でエンコードされる。  char型は2バイト

     ただし、テキスト入出力とXMLのデフォルトエン コーディングはUTF-8なので注意。  基本的にIEが使用できる文字コード(Shift- JIS/EUC.jp)にはファイル入出力の時点で変換する ことが出来る。同様にコードページを指定したエ ンコード、デコードも可能。
  10.  WEB Page  基本的にはW3Cの標準通り。  現状はUTF-8を推奨  Java 

    内部はUTF-8  コマンドプロンプト  基本的にUNICODEには対応していない  ただし、表示できる範囲ではUNICODEとの相互 変換が自動的に実行される
  11.  System Locale  UNICODE以外での言語環境を特定します。  DOS, OS/2, Win16でのCode Pageに該当します。

     いわゆるANSI APIが使用された場合、この設定に より実際の言語・文字コード(CP)が特定されます。  User Locale  User毎に設定するLocale。  設定は小林さんスライド参照。  名前と違い実際には非ログオンのサービスアカウ ントにも影響
  12.  Thread Locale  実行単位毎に持つLocale。何もしなければUser Locale を継承する。  つまりUser Localeと違うロケールをスレッド毎に持

    つことも可能  Input Locale  文字入力のLocale。  言語ツールバーで設定する。  インプットメソッドの切り替え  User Locale以降のLocale操作、状態の取得、機 能の使用にはNLS APIを使用する。
  13.  WindowsおよびWindows上に実装されたアプ リケーションで複数地域・複数言語に対応す るためのAPIセット  NLS APIが持っている機能  現在のLocale設定の取得 

    動的なThread Localeの変更  数値、日付等のフォーマット  ロケールに合わせた並び替えの支援  Input Method系のAPI
  14.  NLSの各設定(書式とか)はLCIDで管理されている  NLS APIに何か仕事をさせたい場合にはLCIDでロ ケールを指定して、仕事をさる。  LCIDはロケール毎に一意に32ビットの整数値で番号 を持つ。 

    Windows Vista以降で追加されたAPIではLocale Name(Exp. Ja-Jp)で指定できる場合がある。  Locale Name: ms- help://MS.MSDNQTR.v80.ja/MS.MSDN.v80/MS.WIN32CO M.v10.en/intl/nls_Locale_Name.htm
  15.  LCID自体は16ビットのLanguage IDと4ビットのSort IDからなる。  ms- help://MS.MSDNQTR.v80.ja/MS.MSDN.v80/MS.WINCE.v50.en/wceinter national5/html/wce50conSpecifyingLocaleswithNLS.htm  Language

    IDは言語とその文字集合を表す数値  ms- help://MS.MSDNQTR.v80.ja/MS.MSDN.v80/MS.WIN32COM.v10.en/msa gent/pacontrol_4w2y.htm  Sort IDは照合順序(Collation)を表す数値 Primary Language Sub Language Sort ID Reserve Language ID Locale ID 12bit 4bit 6bit 10bit
  16.  日付の書式  通常どちらかの書式を使用する  Long Format(長い形式)  英語(US):Saturday ,

    October 27, 2007  日本語:2007年10月27日  Short Format(短い形式)  英語(US):10/27/07  日本語:07/10/27  日本の年号への対応、ヘブライ歴等の西暦以外 への変換
  17.  テキストフォーマッティングの書式で日付書 式文字の”d”(Short Format)や”D”(Long Format)等を使用する。  逆に”YYYY/mm/dd hh:mm”のような固定書式 にしてはいけない。 

    このように記述してしまったコードはもはや Globalization対応とは言えない  http://msdn2.microsoft.com/ja- jp/library/az4se3k1(VS.80).aspx
  18.  12時間か24時間か  時刻の書式文字で区別  hまたはhh:12時間計、HまたはHH:24時間計  時分秒の区切りに文字を使うのか  タイムゾーンと現在時刻

     NLSのロケールで現在時刻を求めないので注意  TimeZone設定でUTCから現地時間の算出を行う  そのときには夏時間の設定がそのタイムゾーンに あればそれを考慮して現地時間を算出する
  19.  金銭の単位  日本:¥  アメリカ:$  マイナス値の表示方法  小数点

     日本・アメリカ:「.」  欧州:「,」  桁区切り  日本・アメリカ:「,」  欧州:「.」
  20.  ロケール毎に文字列の並び替えに使用するため の文字毎の重み付けと何と何を同じ文字として 扱うかという設定がある。  これをSQL Serverでは参照順序(Collation)と呼 ぶ  ロケール毎に複数の参照順序を持つ場合がある

     現在のWindows Vistaの場合Ja-JPの場合XJIS(デフォ ルト)と部首・画数の二種類がコントロールパネルか ら選択可能  日本語関連 CompareInfo と、部首画数での並べ替え @河端善博 ブログ / SQL Server / PASSJ  http://blogs.sqlpassj.org/yoshihirokawabata/archive/2007/ 07/27/23864.aspx
  21.  Text Service Framework(TSF)  Windows XP以降Input Method Manager(IMM/AIMM)がText Service

    Framework(TSF)に拡張されていく中で、ただの アジア言語(日本語)入力機能から、複数言語入力 の切り替え、キーボードマップの動的な変更、音 声入力、手書き入力等への拡張がなされた。  .net FxではInputMethodクラスで制御を行う
  22.  複数言語を同一データ内で同時に入力、表示、 保存させること  UniscribeといわれるUnicode Script Processor(USP10.DLL)がComplex Scriptの実行 エンジンになっている 

    Applicationは直接 Uniscribeを呼び出すこと も出来るし、GDIを通し LPK.DLLにパーシングさ せることで間接的に使用 することも出来る Aplication LPK.DLL Uniscribe User/GDI
  23.  Standard Edit Control  Complex Scriptに関して標準的に対応されている。  実装例: 

    メモ帳(Notepad.exe)  Rich Edit Control  Text Object Model(TOM)のインターフェイス  Uよりリッチな多言語環境、マルチフォント環境の提供  実装例:  ワードパッド  アプリケーション開発においては、これらのコント ロールを使用するのが現実的
  24.  .net Framework  .NET Fx 2.0以降ではGDI+のComplex Script対応機能 を使用し、Windows Formのすべてのコントロールで

    同レベルのサポートを実現している  Application.SetUseCompatibleTextRenderingDefault メソッドをプロセスでFormを最初に作るときに呼び 出すことで、個別コントロールでの設定をなくすこと が出来る  Complex Scriptに関するMSDN Magazineの記事  http://msdn.microsoft.com/msdnmag/issues/06/03/Text Rendering/
  25.  最終的に文字を表示できるかどうかはFontで決まる。  Globalizationに対応したFontを使用する  UIにはシステムフォントを使う  Windows XP /

    2003 / VistaはTahomeを標準に  はねのないゴシックのLattain-1、ヘブライ語用フォント  フォントリンクもしくはFallbackでそのほかの言語用フォント がリンクされており、体裁はともかくとにかく表示はしてくれ る  Arial Unicodeの問題  Unicode 2.0「の」文字はすべて表示可能  それゆえに表示できない文字がある
  26.  Fallback  Uniscribeが現状フォントで表示できない文字列がある と判断した場合に、その文字が表示可能なFontを割り 当てる。  GDI+のテキストレンダリングエンジンが使用する  そのときにどのフォントを割り当てるか重み付けがあ

    るらしく、どうもそれがVistaで変更されようだ。  かつて漢字が表示できない場合にはMSPゴシックが選択 されたが、VistaではMingLiuが選択される確率が高いよ うに思える。MingLiuはセリフフォントなので、見た目 が変わりすぎるので困るのだ
  27.  作成手順  何かの言語で実行ファイルとリソースをビルドす る。(この時の言語がデフォルトリソースとなる)  追加リソースのDLLを作成する。  実行時のリソースの選択順序 

    まずデフォルトリソースで起動される。  現在システムのMUIで設定されているロケールと 同じリソースDLLがあればそれをロードする。  システムのMUI設定にかかわらずUIのロケールを User Localeにあわせて変更するにはカレントス レッドのCurrentUICultureプロパティをコンポー ネントの初期化前に変更する。
  28.  @IT .NET Tips Windowsフォームを多言語対 応にするには?  http://www.atmarkit.co.jp/fdotnet/dotnettips/314win multilang/winmultilang.html 

    一番簡単で、有用なチュートリアル  作業が増えるだけで、これ以上でも以下でもない
  29.  ローカライズ対象となるリソースの分離  文字列だけでなく、図、ビットマップ、ダイアログ ボックスも必要に応じてCoreのバイナリから分離する。  .net Fxにおける詳細  MSDN:リソースのパッケージ化と配置

     http://msdn2.microsoft.com/ja- jp/library/sb6a8618(VS.80).aspx  MSDN:固有カルチャのリソースの検索と使用  http://msdn2.microsoft.com/ja- jp/library/s9ckwb4b(VS.80).aspx  MSDN: Windows フォーム リソースのローカライズ  http://msdn2.microsoft.com/ja- jp/library/yys3e2fd(VS.80).aspx
  30.  米と欧・日での用紙サイズの違い  米国はLetter, Legalが標準的な用紙サイズ  欧・日その他多くの地域はISO(JIS)のA4, A3等の用紙 サイズ 

    特定の用紙を前提とした印字処理をしない  プリンタの問題  欧米:ビジネス用途ならHP-PLかPost Script何れか  日本:メーカー毎のページ記述言語。。  WindowsのAPI経由ではあまり大きな問題にならない が、プリンタドライバ、それの英語版があるか無いか はかなり問題が起こるポイント  正直なところ世の中のプリンタメーカはHPだけでい いです
  31.  正直NLS APIで面倒見てくれないかと思う  EUが妥協して、イギリスはメートル法とヤー ド・ポンド制を併用してよくなった(Fack)  アプリケーションで何とかするしかない  基本はSI単位(SI条約)を使用する

     国内では非SI単位の使用は原則システム提供側 が計量法違反  商慣習上必要な場合、法適用外あるいはお目こ ぼしされる  真珠の匁(もんめ)  印刷でのヤード・ポンド制使用
  32.  基本は英語版OS, 英語版Visual Studio  今でも原則はen-US版アプリケーションを作成し、そ れを別言語にする  多言語化ターゲットの試験環境 

    仮装化環境で用意するのが便利  パフォーマンス試験が基本言語環境以外でも必要か設 計時に見積もる  MSDN サブスクリプションサービスの購入が必 須  Vistaは本当にシングルバイナリで、多言語開発 環境として英語版以外でもそれが可能なのか?
  33.  バージョン管理システムのスケール、柔軟性につい て考慮が必要  インターネット環境ではVSSは使い物にならない  国際イントラネットがある場合には何とかなることもある  TFSは多国籍間の開発に耐えられるか? 

    国をまたがる開発環境での調査、試験は未実施  Subversion推奨  TatoiseSVNがある  Visual Studioのアドインもあるけど使っていません  ディレクトリ構造にはVS管理のリソース以外のドキュメン ト等についても多言語であることを留意して標準化を
  34.  コメント  開発チームが複数にまたがる場合、コメントに日 本語やその他のローカル言語を許容するのか決め る必要がある  訳語の統一  少なくともプロジェクト内ではExcelでもいいから

    訳語のデータベースを作って訳語の統一を図る  マイクロソフトの取り組みが参考に  前者および翻訳プロバイダまで含めた訳語データ ベースの作成による訳語の管理
  35.  Developing International Software, Second Edition  著者 Dr. International

     ISBN 0-7356-1583-7  CJKV日中韓越情報処理  著者 Ken Lunde  ISBN 4-87311-108-0
  36.  JIS X 0213:2004 / Unicode 実装ガイド  http://download.microsoft.com/download/e/3/c/e3c 1a451-1882-49fe-86a8-

    e25680f6c46c/JIS_Unicode_guide.pdf  Microsoft SQL Server 2005 のインターナ ショナル機能  http://www.microsoft.com/japan/msdn/sqlserver/sq l2005/bb330962.aspx
  37.  Microsoft Global Development and Computing Portal  http://www.microsoft.com/globaldev/default.mspx 

    Sorting It All Out (Michael Kaplan's)  http://blogs.msdn.com/michkap/default.aspx
  38.  Windows XP Professional の多言語機能  http://www.microsoft.com/japan/technet/prodtechn ol/winxppro/plan/multilingual.mspx  NyaruruさんによるTFS解説

     http://d.hatena.ne.jp/NyaRuRu/20070308/p1  http://d.hatena.ne.jp/NyaRuRu/20070309/p1  http://d.hatena.ne.jp/NyaRuRu/20070310/p1