HOME > ソフテックだより > 第211号(2014年6月4日発行) 技術レポート「Windowsアプリケーションの中国語化における7つの注意ポイント」

「ソフテックだより」では、ソフトウェア開発に関する情報や開発現場における社員の取り組みなどを定期的にお知らせしています。
さまざまなテーマを取り上げていますので、他のソフテックだよりも、ぜひご覧下さい。

ソフテックだより(発行日順)のページへ
ソフテックだより 技術レポート(技術分野別)のページへ
ソフテックだより 現場の声(シーン別)のページへ


ソフテックだより 第211号(2014年6月4日発行)
技術レポート

「Windowsアプリケーションの中国語化における7つの注意ポイント」

1. はじめに

私は、入社3年目になる中国出身の若手社員です。弊社が手掛けるソフトウェア開発では、多言語化されたソフトウェアの新規開発或いは既存ソフトウェアの多言語化対応が少なからずございます。私も最近、Windowsアプリケーションの中国語化開発を担当させていただいたので、今回は中国語化開発の注意ポイントについてご紹介させていただきます。

2. 中国語化について

ソフトウェアを中国語化するには、まずはターゲットとする市場とオペレーティングシステム(以下OS)を決めなければなりません。中国語には、簡体字(Simplified Chinese)と繁体字(Traditional Chinese)があります。前者は中国本土やシンガポールで利用されていて、後者は香港や台湾で利用されています。両者の文字コード体系(簡体字中国語は「GB2312」など、繁体字中国語は「Big5」など)が全く異なり、互換性は存在しませんので、ターゲットとする市場に従って事前に選定する必要があります。OSによって、ソフトウェアの画面表示が異なりますし、動きも変わる可能性があります。ターゲットとする市場におけるシェアを考慮したうえで、サポート対象とする中国版OSを決定しなければなりません。ちなみに、今年のWindows XPサポート終了とともに、中国のパソコンOS市場ではマイクロソフトのWindows 7が圧倒的なシェアを占めるようになるのではないかと考えられます。
ターゲットとするOSに応じて、次に考えなければならないのは、中国語化のアプローチです。中国語化のみならず、多言語化対応のアプローチは表1のようになります。(MSDNより(※1))

アプローチ Windows 95/
Windows 98/
Windows ME
Windows 2000/
Windows NT系(※2)
Unicode(※3) 固有機能使用 動作不可(※4) 動作可能
MBCS(※5)固有機能使用 動作可能 動作可能
シンボル_UNICODE/_MBCS使用 動作可能 動作可能
ラッパーライブラリ使用 動作可能 動作可能

表1. 多言語化対応のアプローチ

今回私が対応した既存Windowsアプリケーションの中国語化では、シンボル「_UNICODE」を使って対応しましたので、中国語化のUnicode対応における注意ポイントについて以下に説明します。

3. 中国語化における注意ポイント

ここでは既存のWindowsアプリケーションの中国語化における具体的な注意ポイントを7つご紹介させていただきます。どういったアプリケーションを中国語化するかによって大きく変わってくるところはありますが、なるべく応用の効く基本的なものを以下にリストアップしてみました。

3-1. 開発環境を変えるかどうかを見極めること

既存Windowsアプリケーションの中国語化を進める際に、古い開発環境を新しい開発環境に切り替えるどうかという判断を下さなければなりません。古い開発環境のままだと、サポート終了している場合もありますし、ランタイムにセキュリティ上の問題があったとしても修正されないなどの可能性が出てきます。そのような状態の環境で作ったアプリケーションを動作保障できるかどうかはターゲットとするOSにて十分に検証する必要があります。一方、新しい開発環境にアップグレードとすると、古い開発環境を切り替えることで生じる、コンポーネントのライセンス問題を別途考える必要がありますし、そのままではビルドが通らないことや、ビルドが通っても正しく動作しないなどのトラブルが予想されます。このため、色々な改修・動作検証が必要になってきます。
例えば、Windowsアプリケーションの開発環境であるVisual C++バージョンの履歴(一部)は表2で示すようになります。(MSDNより(※6)) 新しい開発環境を選定する際に、各バージョンがサポートする機能やOSに準拠する必要があります。

製品名 バージョン リリース 備考
Visual C++ 4.0 4.0 1996 Windows 95,Windows NT対応。
Visual C++ 5.0 5.0 1997  
Visual C++ 6.0 6.0 1998  
Visual C++.NET 2003 2003 Windows 95で動作するWin32バイナリを作成できる最後のバージョン。この製品までは既定の文字コード設定が「マルチバイト文字列を使用する」になっている。
Visual C++ 2005 2005 2005 Windows 98/Me/NT4で動作するWin32バイナリを作成できる最後のバージョン。この製品以降は既定で「Unicode文字列を使用する」に変更されている。
Visual C++ 2008 2008 2007 Windows 2000で動作するWin32バイナリを作成できる最後のバージョン。
Visual C++ 2010 2010 2010  
Visual C++ 2012 2012 2012  
Visual C++ 2013 2013 2013  

表2. Visual C++バージョンの履歴(一部)

3-2. プロジェクト設定を正しく指定すること

開発環境を決めたら、プロジェクトプロパティ設定にいくつか注意すべきことがあります。まずは、言語設定とプリプロセッサ設定です。多言語化されたWindowsアプリケーションでは、日本語や中国語など異なる言語設定のあるリソースを動的に読み込む機能を作り込まなければなりません。Windowsアプリケーションを言語ごとに切り替える仕組みとして、各言語のリソースをDLL化する方法が有効です。言語設定の注意点としては、前述の中国語文字コード体系を明確にし、簡体字中国語の「GB2312」に設定するか繁体字中国語の「Big5」に設定するかを間違わないことです。もし、コンパイルスイッチで言語ごとに読み込むリソースDLLファイルを切り替えたい場合は、プロジェクトプロパティのプリプロセッサ設定にて、図1で示すようなマクロ定義を忘れずに追加しましょう。

プロジェクトプロパティのプリプロセッサ設定です
図1. プロジェクトプロパティのプリプロセッサ設定

新しい開発環境でプロジェクトをアップグレードする場合は、すべてのプロジェクトプロパティ設定を継承はできないため、一部の設定は選定したターゲットOSでの運用状況に従って調整しなければなりません。例えば、ユーザーアカウント制御 (UAC:User Account Control(※7)) 設定は、Visual C++ 6.0などの旧バージョン開発環境では存在しません。ターゲットOS をWindows Vista以降のものとする場合、実際の運用環境にてユーザーアカウント制御を有効とするかどうかによって、Windowsアプリケーションの動きが変わるため、プロジェクトプロパティ設定を実際の運用状況をイメージしたうえで調整しなければなりません。具体的には、プロジェクトプロパティのマニフェスト設定(図2)にて管理特権を変更する必要があります。(変更方法はMSDN参照(※8))

プロジェクトプロパティのUAC設定です
図2. プロジェクトプロパティのUAC設定

3-3. 「Unicodeプログラミングの要約」に従うこと

Windowsアプリケーションの中国語化におけるUnicode対応では、Unicode用のMFC及びCランタイムサポートを活用するため、プログラミング段階では、表3で示すような作業が必要となります。(MSDNより(※9))
今回の中国語化対応のプログラミング段階において、一番苦労したのはNo.6の作業内容でした。該当作業では、対象となる関数が100以上と多く、Unicode文字列の文字数を渡すべきか、バイト数を渡すべきかの判断は関数を1つ1つ個別にチェックする必要があるので、対応漏れが比較的発生しやすいと感じました。それと、CString は TCHAR データ型に基づいていることを意識しなければなりません。シンボル「_UNICODE」が定義されている場合、TCHAR は、16 ビット文字エンコードの wchar_t 型となりますが、それ以外の場合、TCHAR は、通常の 8 ビット文字エンコードである char として定義されます。

No. 作業内容
1 ビルドする前にシンボル「_UNICODE」を定義する
2 エントリポイントを「wWinMainCRTStartup」に指定する
3 リテラル文字列を Unicode に移植するときは _T マクロを使用する
4 Unicode文字列を取り扱うため、ポータブルなランタイム関数を使用する
5 文字および文字へのポインターには、型「TCHAR」、「LPTSTR 」及び「LPCTSTR」を使用する
6 Unicode文字列を使用するときは、文字数とバイト数の長さが異なるので、注意して文字列の長さを関数に渡す
7 Unicode ファイルを開く際はfopen_s、_wfopen_sを使用する。
8 外部ファイル入出力などでは、簡体字中国語の文字コードGB2312で扱う想定の場合、MFC標準のCStdioFileクラスだと未サポートなのでCStdioFileExクラスを追加する

表3. Unicodeプログラミングの要約

3-4. コンポーネントの利用方法を事前に検討すること

ActiveXコントロール(図3)などのコンポーネント部品がアプリケーションに利用されている場合は、中国語化する前に、Unicodeバージョンが存在するかどうかを確認しなければなりません。Unicodeバージョンが存在しても、ActiveXコントロールのヘッダなどとして表示されるテキストを直接中国語に設定できない場合があるので、関連機能の実現性も事前に検討する必要があります。例えば、今回の中国語化では、アプリケーションにてサードパーティー製のActiveXグリッドコンポーネントを採用していましたが、日本語開発環境において、リソースエディタからヘッダなどの表示テキストに中国語を入力できませんでした。そのため、グリッドコンポーネントが初期化されるたびに、該当するグリッドに中国語の文字列をセットして対応しました。

ActiveXコントロールの例です
図3. ActiveXコントロールの例

3-5. リソースの設定が画面レイアウトに与える影響を把握すること

中国語化の一環として、リソースの設定が画面レイアウトに与える影響を注意しながら開発する必要があります。一部の注意ポイントを下記にピックアップしました。

Windows XP、Windows 7、Windows 8などのOSにおいて、ダイアログやボタンなどのリソースを同じ設定とすると、文字が表示し切れないなど、表示のイメージが大きく異なる場合があります。そのため、ターゲットとするOSに応じて、画面レイアウトを1つ1つ確認しながら調整する必要があります。
中国語フォントの設定が変わると、画面の見た目の感覚も大きく異なります。特別な指定がない場合、Windowsに標準でインストールされている中国語フォント「SimSun」と「SimHei」から選ぶのが無難ですが、スタイルがあまりにも違いますので、早期に決定する必要があります。個人的な感覚ですが、図4で示すように、同じサイズの場合、「SimSun」は「SimHei」より見やすい傾向があります。

中国語フォントの比較です
図4. 中国語フォント「SimSun」(左)と「SimHei」(右)の比較

3-6. 中国語訳文の整合性を十分チェックすること

アプリケーションのソースコード中に埋め込むメッセージなどのテキストを抽出し、翻訳を行います。と同時に、テキストの整合性を早い段階からチェックしておく必要があります。例えば、「スイッチ」や「SW」といった表現では、できる限りどちらかに統一した方がわかりやすいと思います。同じ文言が複数の箇所(メニューのアイテムや画面表示、設定ファイル、警告メッセージなど)に表示される場合、整合性を取らないと、ユーザーが戸惑うことになります。早い段階で整合性を取っておかないと、何度も修正された中国語訳文をソースコードに差し込むことになり、修正を繰り返すことでミスも発生しやすくなります。
ヘルプファイルやマニュアルなどドキュメンテーションの翻訳もまた、アプリケーションで使われている中国語訳文内容と整合性を取らなければなりません。また、Windowsアプリケーションでよく使われるヘルプファイルのフォーマットに関して、フォーマットは従来の「.hlp 」ファイルだと、Windows Vista 以降の OSで使用できないので、ヘルプファイルのフォーマットを「.pdf」ファイルなどに変更するか、ユーザーのOS環境に「WinHlp32.exe」(マイクロソフト社ホームページ(※10)参照)というプログラムをインストールするかなどの対応が必要です。

3-7. セットアッププログラム作成に必要な情報や試験環境を早期に準備すること

中国語化開発の最終段階では、中国語版のセットアッププログラムを作成することになります。セットアッププログラムを作ることで、OS へアプリケーションのインストール/アンインストールが自動的に行われます。Visual Studio 2005以降の統合開発環境であれば、日本語OSにおいても中国語化されたアプリケーションのセットアッププログラムを作成することができます。セットアッププログラムの作成には、中国語化されたアプリケーションの実行ファイル或いはプロジェクト、プロダクト名、製造元、バージョン情報などが不可欠です。これらの必要な情報の用意ができていれば、MSDN(※11)を参考にすることで簡単に作ることができます。セットアッププロジェクトは中国語化されたアプリケーションのプロジェクトと同じソリューションで作成してもよいし、新たなソリューションで新規作成することでも問題ないです。中国語化開発だけの話ではありませんが、作成時の注意ポイントとしてはActiveXコントロールのレジスタ登録漏れとショートカットのアイコン追加漏れがあります。また、ビルド時に、ソリューションのビルドではセットアップファイルはできないので、ソリューションエクスプローラーで右クリックメニューからビルドするか、ビルドメニューからセットアッププロジェクトをビルドする必要があります。
セットアッププログラムの作成が終わったら、次のステップは試験になります。中国語化されたアプリケーションの動作検証を確実に行うためには、ターゲットとする中国語OSがセットアップされたPC環境を早期に用意した方がよいと思います。中国語OSのPC実機が用意できない場合、VMwareなどの仮想環境にて試験を実施する方法もあります。

4. 終わりに

今回は、Windowsアプリケーションの中国語化における注意点を簡単にご紹介させていただきました。これから中国語化開発を始める方々のご参考になれば幸いと思います。

最後までお読みいただきありがとうございました。

(S.S.)

[参考]
※1
国際化のアプローチについて
http://msdn.microsoft.com/ja-jp/library/w0hkz1yx.aspx
※2
Windows NT系について
Windows NT系はマイクロソフトが開発したWindows NTのアーキテクチャに基づいて製作されたOSの総称である。Windows XP/Windows VISTA/Windows 7 /Windows 8などが主な代表。Windows XP が発売された2001年以降から 2014年現在に至るWindowsの主流系統となっており、MS-DOSを基に拡張・発展してきたWindows 9x系とは全く異なった構造である。(両者の違いは下記リンクに参考)
http://itpro.nikkeibp.co.jp/article/COLUMN/20080929/315586/
※3
Unicode(ユニコード)とは、符号化文字集合や文字符号化方式などを定めた、文字コードの業界規格である。文字集合(文字セット)が単一の大規模文字セットであることなどが特徴である。
http://msdn.microsoft.com/ja-jp/library/2dax2h36.aspx
※4
Windows 95、Windows 98、および Windows ME (Millennium Edition) では、Unicode 規格をサポートしていない。
http://msdn.microsoft.com/ja-jp/library/cwe8bzh0.aspx
※5
MBCS(マルチバイト文字セット)とは、日本語や中国語など、1 バイト文字では表現できない文字セットをサポートするニーズに対する古いアプローチである。
http://msdn.microsoft.com/ja-jp/library/5z097dxa.aspx
※6
Microsoft Visual C++ について
http://msdn.microsoft.com/ja-jp/vstudio/hh386302
※7
ユーザー アカウント制御について
http://msdn.microsoft.com/ja-jp/library/windows/desktop/aa511445.aspx
※8
ユーザー アカウント制御がアプリケーションに与える影響について
http://msdn.microsoft.com/ja-jp/library/bb384608.aspx
※9
Unicode プログラミングの要約について
http://msdn.microsoft.com/ja-jp/library/dybsewaf.aspx
※10
WinHlp32.exeについて
http://support.microsoft.com/kb/917607/ja
※11
セットアップ プログラムの作成について
http://code.msdn.microsoft.com/windowsdesktop/10-4ca748ce

関連ページへのリンク

関連するソフテックだより

ページTOPへ