多言語対応するには

解決


教えてください  2007-03-06 01:09:50  No: 98202

携帯電話での言語切替のように、画面上から
変更する言語に切り替える処理を実行したいです。

たとえば、
□英語
□日本語
□韓国語
□中国語
・・・・

で韓国語を選択されてOKボタンを押下すると
メイン画面の文言はすべて韓国語で表示されると
いった感じにしたいのです。

ご存知の方教えてください。


教えてください  2007-03-06 01:14:31  No: 98203

書き忘れましたが、VB6、SP6です。


ささき  2007-03-06 02:31:20  No: 98204

多環境でなければそう難しいことはないのでは?

画面の初期表示や、言語を選択する場所から一つ関数を呼び出し、
メイン画面の文言の表示を変更すればよいだけなので・・・。

文言の表示も、配列などで設定しておけばIndexを使いまわせますよね?
もちろんフォントなどはあらかじめ入れておく必要がありそうですが


教えてください  2007-03-06 04:01:29  No: 98205

回答ありがとうございます。
試しに、韓国語用のresファイルを持っていたので
それを使ってボタンにresファイルから取得した
文字列を表示してみたら???となっていました。

私のPCに、韓国語フォントが入っていないという意味でしょうか?

フォントが入っている入っていないを判断するAPI等ありましたら
教えてください。


魔界の仮面弁士  2007-03-06 07:24:27  No: 98206

多言語対応が目的なら、VB.NET を使った方が楽ですよ。

IPDK にしても、Service Pack 6 対応版は提供されなかったようですし。
http://www.microsoft.com/japan/msdn/vbasic/downloads/ipdk.aspx

> 変更する言語に切り替える処理を実行したいです。
基本的には、VB6 の MSDN ライブラリに付属している SAMPLES\VB98\Atm\ATM.VBP プロジェクトのように
実装することになると思います。ただし、それで対応できる範囲は、ある程度限定されてきますので、
最終的には、『やりたい内容の範囲次第』といったところです。

特に、OS も VB6 も日本語という環境で多言語対応させるといった場合には、多くの場合、
文字列リソースだけ差し替えれば済むといった単純な作業だけでは終わらなかったりします。

多言語の表示のためには、それに対応したフォントを用意する必要がありますし、
そのためには、.Font.Name だけではなく、.Font.Charset にも気を配れねばなりません。
あるいは、ロケール StrConv の第 3 引数も影響を受ける可能性があるでしょう。
回教暦を使う地域なら、Calendar を vbCalGreg から vbCalHijri するなどの対応が
求められるかも知れません。桁区切り記号(日本ではカンマ)や小数点(日本ではピリオド)も、
日本とは異なる記号を利用している国は少なくありません。

> 私のPCに、韓国語フォントが入っていないという意味でしょうか?
韓国語の表示のために、なんというフォントを設定したのか……という以前の問題として、
実行環境によっては、一部の文字がサポートされないという点に注意が必要です。
最近の実行環境であれば、OS やファイルシステム自体は Unicode に対応しているのですが、
肝心の VB6 側の Unicode サポートが、完全なものでは無いからです。

たとえば、中国の「ニイハオ」や韓国の「アンニョンハセヨ」などの文字列を
  nihao = ChrW(&H4F60) & ChrW(&H597D)
  annyonghaseyo = ChrW(&HC548) & ChrW(&HB155) & ChrW(&HD558) & ChrW(&HC138) & ChrW(&HC694)
日本語環境下で利用するだけでも、多くの作業が必要です。

単純なテキストファイル処理ひとつとっても、Open ステートメントで指定可能なパスや、
Print # ステートメントで出力する文字列などは、いずれも ANSI ベース(日本語では Shift_JIS)で
動作するようになっているため、そのままでは利用できないはずです。

結果として、ファイル処理を API に頼るか、もしくは、ADODB.Stream や FileSystemObject による
入出力に切り替えるなどといった、コードの修正が必要とされる可能性があるでしょう。

また、標準の MsgBox なども使えませんので、VBScript の MsgBox で代用するとか、
MessageBoxW API に切り替えるといった作業が必要とされます。

フォームやコントロールにしても、いわゆる標準コントロール(TextBox, Label等)は、
残念ながら Unicode には対応していません。
Active コントロールであれば、ごく一部(DataGrid や WebBrowser)が Unicode 対応を
うたっているのですが、ほとんどのもの(ListView、TreeView、MSFlexGrid 等々)は 非対応なので、
多くの場合、何らかの Unicode 対応コントロールを別途用意せねばならないでしょう。

http://www.grapecity.com/japan/spread/
http://www.cyberactivex.com/product008.htm


ちび  2007-03-09 04:42:51  No: 98207

返事が遅くなってすいません。
VB.NETでやってみようと思います。
また質問させていただくかと思いますがよろしくお願いいたします。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加