Windows Embedded
 

Windows XP Embedded Language Support の概要




マイクロソフト コーポレーション
適用: Microsoft Windows XP Embedded
この技術記事では、ローカライゼーションに関連する重要なコンセプトを紹介し、ランタイム イメージに必要な言語サポート インフラを追加する方法について、主な概要を説明しています。また、この記事にはインフラの拡張および MUI のサポートの追加に関する手順も含まれています。

Windows XP Professional のように、Unicode ベースのオペレーティング システムのコアと Windows XP Embedded の Win32 API では、英語以外のアプリケーションを英語版のオペレーティング システムで実行できます。ただし、よりシームレスなユーザー体験を提供するため、オペレーティング システムをローカライズして英語以外のアプリケーションを実行するには、ランタイム イメージに言語サポートを追加する方法を理解する必要があります。

Windows XP Embedded では Windows XP Professional がサポートするすべてのフォント、コード ページおよびキーボード レイアウトのほかに、特定の言語に対するサポート インフラを追加する言語サポート コンポーネントを提供しています。また、MUI (Multilingual User Interface) のサポートを追加できます。MUI はシステムに必要な言語が追加されている場合、ユーザーの選択したユーザー インターフェイス (UI) を設定できます。 この記事は、Target Designer、Target Analyzer および Component Designer を含む Windows XP Embedded ツール セットに関する知識のあるユーザーを対象としています。

Windows XP Embedded の詳細については、MSDN ライブラリの Windows XP Embedded ドキュメントを参照してください。
次のコンセプトは Windows XP Professional と そのコンポーネント化されたバージョンにおける各国語のサポートを理解する上で重要です。
ロケールはユーザーの言語と準言語に関連したプリファレンス情報です。たとえば、言語がフランス語の場合、カナダ、フランス、スイスで話されているフランス語が準言語になります。ロケール情報には次が含まれます。

  • 通貨文字
  • 日付、時間および数字のフォーマット情報
  • ローカライズされた曜日と月
  • 国名の標準略称
  • 文字コード情報
その他のロケールの情報については、NLSAPI (National Language Support API) の仕様を参照してください。

Windows XP システムではデフォルトのシステム ロケールのほかに、各ユーザーに 1 つのロケールを設定できます。いずれも Control Panel で変更できます。アプリケーションでは Win32 API を使用して、スレッドごとにロケールを指定できます。


図 1. Control Panel の Regional and Language Options
文字コードは英数字、句読点および記号のグループを表す数値またはコード ポイントのセットで、コード ページとも呼ばれています。シングル バイトの文字コードは 8 ビットで 256 文字をエンコードします。Windows では、すべてのコード ページの最初の 128 文字が標準 ASCII の文字セットで構成されています。128 から 255 のコード ポイントは追加の文字を表し、文字コードで表す文字によって異なります(文字セットの一覧表については、マイクロソフトプレスが発行する 『Developing International Software for Windows 95 and Windows NT』 を参照してください。アジアの言語に使用される Windows のダブル バイトの文字コードは、各文字を 8 から 16 ビットでエンコードします。コンピュータでは文字コードでエンコードされた情報を交換し、フォントを使用して画面に表示されます。


図 2. コード ページ 1256(アラビア語の文字コード)

Windows XP Professional は OEM (Original Equipment Manufacturer) の文字セット(MS-DOS 用に開発)、ANSI 文字セット (Windows 3.1 で採用) および Unicode をサポートしています。Unicode は現在多くのコンピュータで使用されている文字のほとんどに対応する 16 ビットの文字セットです (Unicode の詳細については、ユニコード コンソーシアム発行の 『Unicode Standard』 または www.unicode.org を参照してください)。Windows XP ではユニコードを基本文字セットとして使用しています。そのため、Windows リソース (.res) ファイルを含め、システム内部で処理されるすべての文字列が Unicode です。Windows XP では ANSI 文字セットもサポートしています。文字列をパラメータとして扱う API には ANSI を表す 「A」 とワイド文字 (Unicode) を表す 「W」 の 2 つのエントリ ポイントがあります。。

Windows XP では Unicode とのデータ交換のために、Macintosh、EBCDIC および ISO などのコード ページをサポートしています。また、そのサポートには Unicode ベースのデータをネットワーク、特にインターネットで送信するために広く使用されている UTF-7 および UTF-8 標準の変換テーブルも含まれています。
Windows XP の 国別言語サポート(NLS : National Language Support)は アプリケーションが NLSAPI を使用してアクセスするシステム テーブルのセットで構成されています。NLSAPI では次のタイプの情報を取得します。

  • ロケール情報(日付、時間、数値、通貨フォーマット、ローカライズされた国名、言語または日付と曜日など)。
  • 文字マッピング テーブル(地域の文字コード(ANSI または OEM)を Unicode に、または Unicode を地域の文字コードにマップする文字マッピング テーブルなど)。
  • キーボード レイアウト情報(Windows のキーボードではソフトウェア中心のレイアウトが使用されているため、1 つのキーボード ハードウェアで異なる言語の文字を生成できるなど)。
  • 文字入力情報(文字、数字、スペース、句読点などの Unicode のコード ポイントの種類、大文字小文字の区別、または特定のロケールに対応する大文字や小文字など)。
  • ソート情報(アクセント付きの文字に対するロケールごとに異なるソート条件の適用、複数のソート アルゴリズムのサポートなど)。
  • フォント情報(文字コードまたは Unicode をサポートするフォントについてシステムに保存された情報など。API はフォントと言語をマップするために使用されます)。
Windows XP では、Control Panel を使用して任意のロケールに対応する NLS をインストールできます(図 1 参照)。Windows XP Embedded でサポートする言語とロケールは、ランタイム構成に適切なコンポーネントを追加することによって有効になります。
ローカライズ可能なリソースとは、ある言語から別の言語に変換するソフトウェア プログラムの情報のことです。言語によって変化するアルゴリズムもありますが(スペルやハイフンなど)、ローカライズ可能なリソースは通常 UI エレメントを指しています。たとえば、メニュー、ダイアログ ボックス、ヘルプ テキスト、アイコン、ビットマップなどが含まれます。Windows では、このようなリソースの多くが Windows リソース ファイルに格納されています。テキスト形式の Windows リソース ファイルには拡張子として「.rc」が使用されます。拡張子「.res」の付いたリソース ファイルは、アプリケーションの実行ファイルに直接コンパイルされます。Windows XP Professional では、すべての言語が同じバイナリの実行ファイルを共有できます。新しい言語をサポートするために変更するのは、ローカライズ可能なリソースだけです。これは Windows XP Embedded も同じです。
次に紹介する顧客のシナリオでは、Windows XP Embedded の言語サポートを業務および技術的な側面から説明します。
フランスにある高度なセットトップ ボックスのメーカーが、中国で新規の販売チャネルを開拓したとします。また、ロシアでも市場参入のための調査をしたとします。
製品であるセットトップ ボックスは Windows XP Embedded の英語版を使用して製造されました。フランスの市場に参入するためには、フランス語の言語コンポーネントとフランス語の MUI パックを構成に追加するだけです。ロシアでの販売については、ロシアの言語コンポーネントと言語パックでこの手順を繰り返して、ターゲット デバイスのランタイム イメージを構成します。簡単な作業で、中国とロシアの市場に向けたセットトップ ボックスが用意できます。

シナリオの説明

ゼロから構築しなくても、Windows XP Embedded に適切な言語サポート インフラを追加するだけで、デバイスのオペレーティング システムを容易にローカライズできます。Target Designer の Regional and Language Options コンポーネントで次のオプションを設定できます。

  • UI の言語
  • 日付や通貨など、言語と国に固有の標準およびフォーマット
  • 入力言語
  • Unicode 以外(レガシー)のアプリケーションの言語
  • デフォルトのユーザー アカウントの地理的配置に関する設定(デバイスの位置の指定が必要なアプリケーション)
前述のセットトップ ボックスの OEM のシナリオのように、適切な設定を選択することによって、デバイスのフランス語のランタイム イメージを中国語またはロシア語に容易に変更できます。Windows XP Embedded の言語コンポーネントの追加方法については、「組み込みデザインにおける言語サポートの実装」のセクションを参照してください。
世界中の国際空港に設置するインターネット キオスクを取り扱う OEM のユーザー シナリオは次のとおりです。
欧州連合では 6 か国語に対応可能な翻訳者が、Windows XP Embedded ベースのインターネット キオスクにログオンしています。その翻訳者は会議の議事録を英語、フランス語、ドイツ語、オランダ語、ギリシア語に翻訳して、1 つの文書にまとめる必要があります。まず、フランス語のメモが書かれた文書を開いて編集とスペル チェックを行います。次に、タスクバーをクリックして入力言語を英語に変更し、フランス語のテキストを英語に翻訳します。キーボードはフランス語の配列です。ドイツ語に翻訳するため、タスクバーをクリックして入力言語としてドイツ語を選択します。キーボードはまたフランス語の配列のままです。ギリシア語に翻訳するため、入力言語としてギリシア語を選択します。このとき、キーボードはギリシア語の配列になり、文書にはギリシア語のフォントが表示されます。この作業が終わると、カーソルを文書の開始部分に移動して、文書全体をスペル チェックします。英語で 2 か所、ギリシア語で 1 か所スペルの誤りがありました。翻訳者は飛行機に乗る前に、この文書を添付した電子メールを送信して校正に回します。

シナリオの説明

国が異なるとキーボードの配列も異なります。たとえば、米国のキーボード配列と比べると、フランス語のキーボード配列の方が文字数が多く(アクセント記号付きの文字など)、他の文字の配列も異なっています(フランス語のキーボードでは「z」と「w」は米国のキーボードの逆に位置しています)。複数の言語を理解できるなら、それぞれの言語で入力もできますが、一般的にはすべての言語を同じキーボード配列で入力することが好まれます。ただし、異なる文字を使用する言語(ロシア語やギリシア語など)はキーボードの配列を変更する必要があります。

OEM デバイスのランタイム構成に特定の言語コンポーネントが含まれている場合、Windows XP Embedded ではキーボード配列の情報が表に保存されます。この表は、ユーザーがキーボード ハードウェアの特定のキーを押したときに生成される文字を決定するために使用されます。文字はソフトウェアで生成されるため、Windows XP Embedded ではユーザーやアプリケーションごとにアクティブにするキーボード配列を管理できます。ユーザーは Control Panel を開いて、入力ロケール(言語とキーボード配列の組み合わせ)を作成します。たとえば、このシナリオのユーザーであれば、インターネット キオスクの設定で英語の入力に対してフランス語のキーボード配列を指定します。このシナリオでは、図 3 で示すように、入力ロケールごとに異なるキーボード配列を割り当てることもできます。


図 3. 入力ロケールの追加とキーボード レイアウトの割り当て
タスクバーのインジケータ(図 4 参照)またはキーボード ショートカットを使用すると、これらの入力ロケールを切り替えることができます。入力ロケールを変更すると、Windows では WM_INPUTLANGCHANGEREQUEST メッセージが実行中のアプリケーションに送信されます。アプリケーションがこのメッセージを受け入れると、Windows ではアプリケーションに新規の入力ロケールのロケール ID を伝える別のメッセージが作成されます。アプリケーションではこの ID を使用してテキストに言語プロパティのタグが追加され、スペル チェックや文章校正に使用されます。要求された言語を表示する適切なフォントがシステムにない場合などは、アプリケーションはこの要求を拒否することがあります。


図 4. 入力言語のタスクバー インジケータ

Windows XP Embedded はロケールとキーボード レイアウトの組み合わせをユーザー プロファイルの一部として格納します。同じ言語に対して異なるユーザーが異なるキーボード配列を割り当てることができます。各ユーザーのセッションではスレッドによって入力ロケールが管理されます。そのため、同時に実行している 2 つのアプリケーションで異なる入力ロケールを使用できます。さらに、アプリケーションでユーザーの入力ロケールを変更できます。たとえば、このシナリオの翻訳者が英語のテキストからギリシア語のテキストにカーソルを移動すると、アプリケーションではギリシア語の入力ロケールがアクティブになります。入力言語を変更するための適切な言語サポートの追加方法については、「組み込みデザインにおける言語サポートの実装」のセクションを参照してください。
国際的な調査会社の社員が図書室の固定機能のキオスクを使用してオンライン カタログを閲覧しています。前の利用者が使用したチェコ語の調査アプリケーションが起動しています。この社員はチェコ語が話せません。アプリケーションの隅にある小さな地球の形をしたアイコンを右クリックすると、言語の一覧が表示されました。この社員はスペイン語を選択しました。アプリケーションの UI が更新されて、スペイン語に変更されます。このアプリケーションでの作業が終了したら、アプリケーションを閉じます。次の利用者がこのアプリケーションを起動したときに、UI はスペイン語で表示されます。

シナリオの説明

アプリケーションに MUI(Multilingual User Interface)を実装する方法は複数あります。アプリケーションの UI 言語はシステム ロケール、ユーザー ロケール、または手動で選択したデフォルトをベースに設定できます。このシナリオで使用したシステムでは、アプリケーションは選択された最新の UI 言語のロケール ID に関する情報が保存されます。次回起動したときに、アプリケーションはこの言語 ID で SetThreadLocale をコールして、プログラム ファイルから UI エレメントを取得する API で適切な言語のエレメントを取得します。

OEM では NLSAPI (National Language Support API) を使用して、Windows XP Embedded ベースのデバイスの MUI をサポートするアプリケーションを作成できます。それによって、ユーザーはメニューやアプリケーションがサポートするキーボード ショートカットを使用して、アプリケーションの UI 言語を変更できます。この方法は ATM機のように、常時同じアプリケーションを実行している 1 台のデバイスを複数のユーザーが使用する場合に効果的です。

また、ユーザーが Control Panel の地域の設定でユーザー ロケールを変更することによってもアプリケーションの UI 言語を変更することができます。アプリケーションに適切な言語リソースが格納され、ユーザー ロケールに基づいてリソースが取得されると、新規のユーザー ロケールの言語に自動的に更新されます。このメカニズムは、セッションの異なる複数ユーザーがマシンとアプリケーションを共有している場合に効果的です。各ユーザーのログオン時に、そのユーザー ロケールによってアプリケーションの UI 言語が設定されます。そのため OEM では複数言語のリソースを格納した 1 つのアプリケーションのコピーをインストールするだけで、言語ごとにコピーした膨大な量のアプリケーションをインストールする必要はなくなります。Windows XP Embedded では、OEM が顧客に最適な言語を設定するため、構成に必要な言語サポート コンポーネントの数量は制限されます。次のセクションでは、Windows XP Embedded おける MUI の実装方法について説明します。
このセクションでは、組み込みデザインにおける言語サポートの実装手順について説明します。
英語以外の言語で作成された文書、標準、フォーマットおよびアプリケーションを処理するランタイム イメージを構築するには、言語サポート インフラを追加する必要があります。Target Designer ではシンプルな手順でこの作業を行えます。

Target Designer では、まず、日本語サポート コンポーネントなどの言語サポート コンポーネントを構成に追加します。次に、Target Designer の構成ペインの一覧から、言語に適用するフォントやコード ページ、キーボードを選択します。

最後に、ランタイム イメージに使用するフォント、コード ページおよびキーボード配列のチェック ボックスをオンにします。各チェック ボックスではコンポーネントの依存関係を指定します。ただし、これらのチェック ボックスでは指定したアイテムが現在の構成に含まれているかどうかは表示されません。そのため、Target Designer の構成ペインのチェック ボックスをオフにしても、他のコンポーネントと依存関係がある場合、そのアイテムは構成に含まれている可能性があります。

Windows XP Embedded の言語サポート インフラは拡張できます。ユーザーは言語サポート モジュールをコンポーネントのデータベースに追加し、構成に適用することによって、独自のフォント、コード ページまたはキーボード配列を追加できます。
Windows XP Embedded では、ランタイム イメージの UI を変更するための MUI をサポートしています。ランタイム イメージで英語以外の言語による UI を使用するために必要なのは、選択した言語に対応した言語パックだけです。
ランタイム イメージを変更する基本的な手順は次のとおりです。

  • Component Database Manager を使用して、対応する言語パックに格納された Lang.sld ファイルをコンポーネント データベースにインポートします。たとえば、日本語サポートには、Langjpn.sld をインポートします。
  • Target Designer で必要なコンポーネントをすべて含む構成を作成します。
  • 構成に適切な言語サポート コンポーネントを追加します。たとえば、日本語には Japanese Language Support コンポーネントを追加します。言語サポート コンポーネントはすべて Target Designer のコンポーネント ブラウザの [Software/System/International/Infrastructure] ノードにあります。
  • Target Designer で、使用する言語サポート コンポーネントのメイン ノードで [Settings] を選択します。[Include multilanguage user interface resources] チェック ボックスをオンにします。このチェック ボックスを選択すると、使用する言語で UI を表示するのに必要な UI リソースが追加されます。
  • Target Designer のコンポーネント ブラウザの [Software/System/International] ノードで [Regional and Language Options] コンポーネントを追加します。
  • Target Designer の [Regional and Language Options] コンポーネントのメイン ノードで [Settings] を選択します。選択した言語についてすべての設定を行います。[Standards and formats] および [Default input language] フィールドには異なる言語を選択できますが、[Language for non-Unicode programs] フィールドには選択した言語を設定する必要があります。
  • 依存性を確認してからランタイム イメージを構築します。
  • ランタイム イメージを起動したら、Windows XP Embedded のすべてのアプリケーションとシステム モジュールで選択した言語が使用されていることを確認します。
この記事では、Windows XP Embedded の言語サポートに関する重要なコンセプトとローカライズされたデバイスに必要なインフラと MUI のサポートを追加する方法の概要を紹介しました。Windows XP Embedded を使用すると、OEM のデバイスや顧客に最適な言語でローカライズを容易に行えます。Windows XP Embedded の言語サポートでは言語を変更するたびにゼロからランタイム イメージを構築する必要がないため、OEM デバイスでのオペレーティング システムのローカライズ作業が軽減されます。また、ターゲットとする市場に適した言語で構成された多言語環境を顧客に提供できます。OEM 製品にMUI のサポートと適切な言語パックを追加することによって、ランタイム イメージのサイズを最小限に抑えるだけでなく、デバイスとユーザーのニーズに合わせてカスタマイズされた多言語の UI を提供できます。
言語サポートの詳細については、MSDN ライブラリの Windows XP Embedded のドキュメントを参照してください。