NT Committee2 石坂忠広 MVP for Visual Developer C# http://www.isisaka.com/ NT-Committee2会員 PASS-Jスタッフ Microsoft MVP for Visual Developer C# なぜ国際化なのか 従来の国際化(日本語化) World Ready ローカライズ 文化・カルチャ? 企業の多国籍化 オフショア 日本語がネイティブでない環境での開発 コア部分開発とUI部分の分業 国内市場の行き詰まり 日本以外のマーケットを開拓する すべてが日本語化されるべきと期待される今 の特権的地位はいつまで続くだろうか いずれかの言語でアプリケーションを開発す る たいていは英語で開発する。 それを各国語に翻訳する。 リソースDLLは分かれているか? バイナリリソースエディタでテキストを置き換える ソースコード内のテキスト文字の翻訳 sed s/hoge/ほげ/でうまくいくのか バイナリリソースエディタ そもそもオリジナルの作成者が国際化を前提に、 リソースを外部DLL化してくれていないといけな い。 確かにテキストの置き換えは簡単にできる。 エリアからはみ出す文字、余りすぎるテキスト ボックス。文字が途中でとぎれるボタン。 エディタでリサイズ・チェック、リサイズ・ チェック ああ「能」の字が化けてる。orz ソースの変更 ああここも直ってない。。 一千も二千もあるソースリソースからテキストを見 つけ出さなくちゃいけない。 エラーメッセージが英語だよ。 そ、それは、英語ランタイムが出すメッセージだか ら直せないんだよ。。。 やっぱり「能」の字が化けるよ。orz バックスペースしたら、漢字が半分無くなったよ。 日本語ランタイムと英語ランタイムの違いが あり、日本語を正常に扱うには日本語の開発 環境でビルドが必要。 でも、どことは言わないけど日本語ランタイ ムには英語にないバグがっ そもそも開発元が日本語環境でのビルドを許 してくれない。(ソースを渡してくれない) まだこの状態で苦しんでおられる方が多いと 思います。 根本的解決策は、なんとしてもソースコード を入手すること、翻訳後のソースは向こうで 管理させることです。 もしくは、根本的に作り替えるこ と! 言語を問わずシングルバイナリを目指して開 発すること Windowsのもつ国際化対応機能を柔軟に使用 し、それらの支援を受けながらアプリケー ションの仕様決定、開発を行う。 開発を二つに分ける Core CodeのGlobalization化 リソースDLLによるLocalize Unicodeに完全対応したアプリケーションを記述す る コード内で数値、金銭、日付等のフォーマッティン グを直接行わない テキスト入力の言語、入力方法の違いを考慮する 特定のフォントに依存させない テキスト中の複数言語混在に対応させる(m17n) MUIに対応させる UIのローカリゼーション容易性への配慮 右から始まる言語への配慮(UIのミラーリング) UNICODE自体の説明は省きます。 以下の点はまず注意してください Windowsのバージョンによって、対応している UNICODEのバージョンが違います。 その他、Java, VB, VC++(CRT)のそれぞれのバージョ ンが持つランタイムでも対応しているUNICODEの バージョンが違います これで何がまずいか? 使える文字と使えない文字が出て きます 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 SQL Server(7.0以降) UCS2 + サロゲートペアに対応 一応UNICODE 3.0以降の文字もnchar, nvarchar フィールドには格納できる。 ただ、いろいろ問題が。。 詳しくはPASSJアフタースクールへ(宣伝) Officeは?Exchangeは? ??? アプリケーションをUNICODE対応とするには ネイティブコード あんまり詳しくやりません(終わらなくなる) #define UNICODE Visual StudioではWizardの中でチェックをする/しない 文字列 LPTSTRマクロを使う(UNICODEがDefineされていれば 自動的にLPWSTRに変えてくれる) 文字列定数の前には大文字のLをつける LPTSTR str = L”僕の名前は石坂忠広です。”; MFCが使えるならCStringクラスを使う COMはVT_BSTRで これらは相互変換のマクロ、クラスメソッドがある .NET Frameworkでの開発 .NET FxはUNICODEに完全に対応 内部では文字列はUTF-16でエンコードされる。 char型は2バイト ただし、テキスト入出力とXMLのデフォルトエン コーディングはUTF-8なので注意。 基本的にIEが使用できる文字コード(ShiftJIS/EUC.jp)にはファイル入出力の時点で変換する ことが出来る。同様にコードページを指定したエ ンコード、デコードも可能。 WEB Page 基本的にはW3Cの標準通り。 現状はUTF-8を推奨 Java 内部はUTF-8 コマンドプロンプト 基本的にUNICODEには対応していない ただし、表示できる範囲ではUNICODEとの相互 変換が自動的に実行される Locale(ロケール) 本来は英語の意味通り地域(ローカル)を表す。 かつてC言語標準化の中で、ローカル変数の 「ローカル」と紛らわしいとされ、訳語が「ロ ケール」に統一されたと聞いています Windowsでは特定の国や地域の言語と文化上の慣 例を反映させた Windows 設定のコレクションの 意味です。 System Locale UNICODE以外での言語環境を特定します。 DOS, OS/2, Win16でのCode Pageに該当します。 いわゆるANSI APIが使用された場合、この設定に より実際の言語・文字コード(CP)が特定されます。 User Locale User毎に設定するLocale。 設定は小林さんスライド参照。 名前と違い実際には非ログオンのサービスアカウ ントにも影響 Thread Locale 実行単位毎に持つLocale。何もしなければUser Locale を継承する。 つまりUser Localeと違うロケールをスレッド毎に持 つことも可能 Input Locale 文字入力のLocale。 言語ツールバーで設定する。 インプットメソッドの切り替え User Locale以降のLocale操作、状態の取得、機 能の使用にはNLS APIを使用する。 WindowsおよびWindows上に実装されたアプ リケーションで複数地域・複数言語に対応す るためのAPIセット NLS APIが持っている機能 現在のLocale設定の取得 動的なThread Localeの変更 数値、日付等のフォーマット ロケールに合わせた並び替えの支援 Input Method系のAPI NLSの各設定(書式とか)はLCIDで管理されている NLS APIに何か仕事をさせたい場合にはLCIDでロ ケールを指定して、仕事をさる。 LCIDはロケール毎に一意に32ビットの整数値で番号 を持つ。 Windows Vista以降で追加されたAPIではLocale Name(Exp. Ja-Jp)で指定できる場合がある。 Locale Name: mshelp://MS.MSDNQTR.v80.ja/MS.MSDN.v80/MS.WIN32CO M.v10.en/intl/nls_Locale_Name.htm LCID自体は16ビットのLanguage IDと4ビットのSort IDからなる。 mshelp://MS.MSDNQTR.v80.ja/MS.MSDN.v80/MS.WINCE.v50.en/wceinter national5/html/wce50conSpecifyingLocaleswithNLS.htm Language IDは言語とその文字集合を表す数値 mshelp://MS.MSDNQTR.v80.ja/MS.MSDN.v80/MS.WIN32COM.v10.en/msa gent/pacontrol_4w2y.htm Sort IDは照合順序(Collation)を表す数値 Language ID Reserve Sort ID Sub Language Primary Language 12bit 4bit 6bit 10bit Locale ID .net FxではCultureInfoクラスでLCIDを管理す る。 カルチャの名前、書記体系、使用される暦、 日付の書式設定と文字列の並べ替え方法など、 特定のカルチャに関する情報を提供する。 全ロケールの取得とカレントロケールの取得 日付の書式 通常どちらかの書式を使用する Long Format(長い形式) 英語(US):Saturday , October 27, 2007 日本語:2007年10月27日 Short Format(短い形式) 英語(US):10/27/07 日本語:07/10/27 日本の年号への対応、ヘブライ歴等の西暦以外 への変換 テキストフォーマッティングの書式で日付書 式文字の”d”(Short Format)や”D”(Long Format)等を使用する。 逆に”YYYY/mm/dd hh:mm”のような固定書式 にしてはいけない。 このように記述してしまったコードはもはや Globalization対応とは言えない http://msdn2.microsoft.com/jajp/library/az4se3k1(VS.80).aspx 日付のフォーマッティング 12時間か24時間か 時刻の書式文字で区別 hまたはhh:12時間計、HまたはHH:24時間計 時分秒の区切りに文字を使うのか タイムゾーンと現在時刻 NLSのロケールで現在時刻を求めないので注意 TimeZone設定でUTCから現地時間の算出を行う そのときには夏時間の設定がそのタイムゾーンに あればそれを考慮して現地時間を算出する Vistaでは世界地図が無くなって寂しい 時刻書式の詳細は書式文字列を使って行う カスタムの書式 http://msdn2.microsoft.com/jajp/library/8kb3ddd4(VS.80).aspx TimeZone TimeZoneに関する操作はSystem.TimeZoneクラ スを使用します。 http://msdn2.microsoft.com/jajp/library/system.timezone.aspx 時刻書式とTimeZoneの処理 金銭の単位 日本:\ アメリカ:$ マイナス値の表示方法 小数点 日本・アメリカ:「.」 欧州:「,」 桁区切り 日本・アメリカ:「,」 欧州:「.」 テキストフォーマッティングの書式で金銭書 式文字の”c/C”や十進数書式”D”等を使用する。 日付の場合と同様固定書式にしてはいけない。 このように記述してしまったコードはもはや Globalization対応とは言えない 標準の数値書式指定文字列 http://msdn2.microsoft.com/jajp/library/dwhawy9k(VS.80).aspx ロケール毎に文字列の並び替えに使用するため の文字毎の重み付けと何と何を同じ文字として 扱うかという設定がある。 これをSQL Serverでは参照順序(Collation)と呼 ぶ ロケール毎に複数の参照順序を持つ場合がある 現在のWindows Vistaの場合Ja-JPの場合XJIS(デフォ ルト)と部首・画数の二種類がコントロールパネルか ら選択可能 日本語関連 CompareInfo と、部首画数での並べ替え @河端善博 ブログ / SQL Server / PASSJ http://blogs.sqlpassj.org/yoshihirokawabata/archive/2007/ 07/27/23864.aspx .net FxのString.Compare()メソッドやArrayク ラスのSortメソッド等ではスレッドのカル チャが持つソート順序を使用して処理を行う 並び替えの設定によっては単純なコード順並 び替えや比較ではないので注意する ロケールの管理、各種機能はNLS APIにより 提供される Locale, CultureはLCIDで管理される 日時、金銭、数字のフォーマットは自分で コードに細かく記述せず、NLSに任せる テキスト比較はソート順序の設定が使用され、 その設定が目的通りに設定され英無いと予想 外の結果になる Input Language Complex Script Font Text Service Framework(TSF) Windows XP以降Input Method Manager(IMM/AIMM)がText Service Framework(TSF)に拡張されていく中で、ただの アジア言語(日本語)入力機能から、複数言語入力 の切り替え、キーボードマップの動的な変更、音 声入力、手書き入力等への拡張がなされた。 .net FxではInputMethodクラスで制御を行う 複数言語を同一データ内で同時に入力、表示、 保存させること UniscribeといわれるUnicode Script Processor(USP10.DLL)がComplex Scriptの実行 エンジンになっている Applicationは直接 Uniscribeを呼び出すこと も出来るし、GDIを通し Aplication LPK.DLLにパーシングさ せることで間接的に使用 LPK.DLL することも出来る User/GDI Uniscribe Standard Edit Control Complex Scriptに関して標準的に対応されている。 実装例: メモ帳(Notepad.exe) Rich Edit Control Text Object Model(TOM)のインターフェイス Uよりリッチな多言語環境、マルチフォント環境の提供 実装例: ワードパッド アプリケーション開発においては、これらのコント ロールを使用するのが現実的 .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/ 最終的に文字を表示できるかどうかはFontで決まる。 Globalizationに対応したFontを使用する UIにはシステムフォントを使う Windows XP / 2003 / VistaはTahomeを標準に はねのないゴシックのLattain-1、ヘブライ語用フォント フォントリンクもしくはFallbackでそのほかの言語用フォント がリンクされており、体裁はともかくとにかく表示はしてくれ る Arial Unicodeの問題 Unicode 2.0「の」文字はすべて表示可能 それゆえに表示できない文字がある Fallback Uniscribeが現状フォントで表示できない文字列がある と判断した場合に、その文字が表示可能なFontを割り 当てる。 GDI+のテキストレンダリングエンジンが使用する そのときにどのフォントを割り当てるか重み付けがあ るらしく、どうもそれがVistaで変更されようだ。 かつて漢字が表示できない場合にはMSPゴシックが選択 されたが、VistaではMingLiuが選択される確率が高いよ うに思える。MingLiuはセリフフォントなので、見た目 が変わりすぎるので困るのだ Font Linking システムフォントが文字列を表示できなかった場 合にどのフォントで代用するかを指定した設定 レジストリの HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontLink\SystemLinkにその設 定がある Font LinkはGDIのレンダリング、GDI+でFall Back がうまくいかなかったときに使用される アプリケーションのMUI MUIの戦略 言語毎の実行ファイル。各言語リソースは、コー ドと一緒に一つのバイナリに 一つの言語ニュートラルな実行ファイルと複数言 語のリソースを含んだ1つのリソースDLL 一つの言語ニュートラルな実行ファイルと格言午 後とのリソースDLL 今のWindowsそのものを含む一般的なMUIの戦略 作成手順 何かの言語で実行ファイルとリソースをビルドす る。(この時の言語がデフォルトリソースとなる) 追加リソースのDLLを作成する。 実行時のリソースの選択順序 まずデフォルトリソースで起動される。 現在システムのMUIで設定されているロケールと 同じリソースDLLがあればそれをロードする。 システムのMUI設定にかかわらずUIのロケールを User Localeにあわせて変更するにはカレントス レッドのCurrentUICultureプロパティをコンポー ネントの初期化前に変更する。 @IT .NET Tips Windowsフォームを多言語対 応にするには? http://www.atmarkit.co.jp/fdotnet/dotnettips/314win multilang/winmultilang.html 一番簡単で、有用なチュートリアル 作業が増えるだけで、これ以上でも以下でもない WinFormでのMUIアプリケーションの作成 UIをUser Localeにあわせて変更する。 ローカライズ対象となるリソースの分離 文字列だけでなく、図、ビットマップ、ダイアログ ボックスも必要に応じてCoreのバイナリから分離する。 .net Fxにおける詳細 MSDN:リソースのパッケージ化と配置 http://msdn2.microsoft.com/jajp/library/sb6a8618(VS.80).aspx MSDN:固有カルチャのリソースの検索と使用 http://msdn2.microsoft.com/jajp/library/s9ckwb4b(VS.80).aspx MSDN: Windows フォーム リソースのローカライズ http://msdn2.microsoft.com/jajp/library/yys3e2fd(VS.80).aspx アラビア語のような右から書き始める言語に 合わせ、諸々のUIを右から書き始めるように する。 ツリービュー、グリッドコントロールの開始位置 が右など 標準コントロールや.net FxのWinFormのコント ロールでは、各コントロールの右から書き始めを 示すプロパティをセットする。 .NET Fx ではRightToLeftプロパティが一般的 http://msdn2.microsoft.com/ja-jp/library/aa350685(VS.80).aspx NLSで対応できない文化的な違いをどうするのか 日本人は感覚的に理解できない 毎時処理等では、夏時間の開始時と終了時に は1日の時間が24時間ではないので注意が必 要(特別な処理がたいていに場合には必要) 可能な限り時刻をキーとしたデータ管理では、 時刻データとしてはUTCを使用する。 時差があってもデータの比較を行いやすくする 夏時間の影響を排除する 国や地域によって、住所のルールが違う 特に日本は住所から位置の推定が全く出来な い。600番地の隣が865番地なんて欧米では ほぼあり得ない 基本は可変長テキストで保存 特定の位置情報が必要であれば、ジオメトリ のデータを使用する。(経度緯度情報など) 米と欧・日での用紙サイズの違い 米国はLetter, Legalが標準的な用紙サイズ 欧・日その他多くの地域はISO(JIS)のA4, A3等の用紙 サイズ 特定の用紙を前提とした印字処理をしない プリンタの問題 欧米:ビジネス用途ならHP-PLかPost Script何れか 日本:メーカー毎のページ記述言語。。 WindowsのAPI経由ではあまり大きな問題にならない が、プリンタドライバ、それの英語版があるか無いか はかなり問題が起こるポイント 正直なところ世の中のプリンタメーカはHPだけでい いです 正直NLS APIで面倒見てくれないかと思う EUが妥協して、イギリスはメートル法とヤー ド・ポンド制を併用してよくなった(Fack) アプリケーションで何とかするしかない 基本はSI単位(SI条約)を使用する 国内では非SI単位の使用は原則システム提供側 が計量法違反 商慣習上必要な場合、法適用外あるいはお目こ ぼしされる 真珠の匁(もんめ) 印刷でのヤード・ポンド制使用 パッケージやアプリケーション内で人物写真 を使う場合何か注意がいるのか? 多分日本人(多分韓国人、中国人も)には感覚的 に理解できない 多くの国で、人種、性差に対しての配慮が必要 子供の取り扱いもかなり微妙 基本的に女性の写真を使うのはNG イスラム的正しさが必要 ほかのアラブ諸国ではここまで厳しくない 会議を表す図か写真をアプリケーションで使 いたい場合 あきらめてこれらの図の ように人物を入れないか、 人としかわからない図に する NLSのCultureはあくまでもビジネスの世界か ら見た地域文化やルールのわずかな一側面に 対応するだけ UIを翻訳すればLocalizeなんだろうか? Localizeとは結局その地域の文化にアプリ ケーションを対応させること Excelのふりがな 基本は英語版OS, 英語版Visual Studio 今でも原則はen-US版アプリケーションを作成し、そ れを別言語にする 多言語化ターゲットの試験環境 仮装化環境で用意するのが便利 パフォーマンス試験が基本言語環境以外でも必要か設 計時に見積もる MSDN サブスクリプションサービスの購入が必 須 Vistaは本当にシングルバイナリで、多言語開発 環境として英語版以外でもそれが可能なのか? バージョン管理システムのスケール、柔軟性につい て考慮が必要 インターネット環境ではVSSは使い物にならない 国際イントラネットがある場合には何とかなることもある TFSは多国籍間の開発に耐えられるか? 国をまたがる開発環境での調査、試験は未実施 Subversion推奨 TatoiseSVNがある Visual Studioのアドインもあるけど使っていません ディレクトリ構造にはVS管理のリソース以外のドキュメン ト等についても多言語であることを留意して標準化を コメント 開発チームが複数にまたがる場合、コメントに日 本語やその他のローカル言語を許容するのか決め る必要がある 訳語の統一 少なくともプロジェクト内ではExcelでもいいから 訳語のデータベースを作って訳語の統一を図る マイクロソフトの取り組みが参考に 前者および翻訳プロバイダまで含めた訳語データ ベースの作成による訳語の管理 欧米人には漢字は絵にしか見えない。(文字 として認識することにまず訓練がいる) 欧州人開発者における国際化とは ISO-8859(Latin-1)の中で各国語とそれ用の キーボードに対応することであり、DBCS環 境への対応ではない とにかく最初は理解されることは期待できな いので、粘り強く交渉 Developing International Software, Second Edition 著者 Dr. International ISBN 0-7356-1583-7 CJKV日中韓越情報処理 著者 Ken Lunde ISBN 4-87311-108-0 文字コード超研究 著者 深沢千尋 ISBN 978-4899770510 JIS X 0213:2004 / Unicode 実装ガイド http://download.microsoft.com/download/e/3/c/e3c 1a451-1882-49fe-86a8e25680f6c46c/JIS_Unicode_guide.pdf Microsoft SQL Server 2005 のインターナ ショナル機能 http://www.microsoft.com/japan/msdn/sqlserver/sq l2005/bb330962.aspx 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 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 Creative Commons AttributionNoncommercial-Share Alike 2.1 Japan http://creativecommons.org/licenses/by-ncsa/2.1/jp/
© Copyright 2024 ExpyDoc