いつもお世話になっております。
OSのロケールに依存する文字列をロードするには、
複数ストリングテーブルを設定することになると思います。
しかし、英語版(Win2000/VB6.0)でコンパイルされた実行形式を、
コンパイル時とは異なるロケールに設定し、
(コントロールパネルの"地域のオプション":
英語版:Your Locale / 日本語版:現在のユーザー設定)
実行させた場合、現在設定されているロケールに対応するテーブルからロードされていません。
<ストリングテーブル>
・ 英語(U.S) <- 新規作成時にデフォルトで作成されているテーブル
・ ドイツ語(ドイツ) <- 追加
<コンパイル時環境>
Win2000英語版
・ 現在のユーザー設定 英語(U.S)
・ システムの言語設定 西ヨーロッパと米国(既定値)
<実行時環境>
・ 現在のユーザー設定 ドイツ語(ドイツ)
・ システムの言語設定 西ヨーロッパと米国(既定値)
<結果>
現在のユーザー設定にはかかわらず、常に英語(U.S)のテーブルからロードされる。
それならば、と思い、
その実行形式を日本語版OS(Win2000)で同様に動作させた場合には、
現在のユーザー設定と同一のストリングテーブルからロードされます。
なぜでしょうか。英語版の環境でどの設定が足りないのでしょうか。
それともAPIで何か特別な設定等を行わなければならないのでしょうか。
どうぞ宜しくお願いいたします。
No.2
- 回答日時:
>>それともAPIで何か特別な設定等を行わなければならないのでしょうか
>必要ないと思いますよ^^
調べていくうちに・・・前言撤回!!大変失礼しました!!
コントロールパネルの地域設定に反映させたテーブルから情報を読むのですね?
最初日本語OS環境で、日本語テーブルから読み取れないだけだと思っていたのですが、あなたの返答の仕方でスキルが高いのがよくわかり、こんなつまらないボケをかます人ではない事がはっきりとわかりました。
>VB自体がGetUserDefaultLCID()APIなどにより現在のロケール情報をもとに実行されているか否かなのでしょうか?
たぶんそうだと思います。さらにデバッグモードではリソースのデフォルト言語設定値を無視してロードしているように思えます。
ご存知の通り、リソースファイルはバイナリファイルです。
リソースファイルのストリングテーブル構造として、、、
最初の32Byteにメインヘッダがあり、リソースファイル内部IDが16個に対し、32Byteの詳細ヘッダを持っています。
ヘッダ(32BYTE)
詳細ヘッダ(32BYTE)
ストリングテーブル文字長と文字データ
ストリングテーブル文字長と文字データ
・・・
詳細ヘッダ(32BYTE)
ストリングテーブル文字長と文字データ
ストリングテーブル文字長と文字データ
・・・
っていうような感じです。
その詳細ヘッダ中の23/24Byteにロケール情報が入っています。
これらを確認するためには、バイナリエディタで見る方法がありますが、内容部分が文字長により可変するので、どの部分がヘッダ部かがわかりづらいので、VCで開きリソーススクリプト(別名で保存<<拡張子がrc>>)として保存し、テキストエディタで開くことにより、詳細なリソースファイルの設定が可能となります。
スクリプトファイルをテキストエディタで見てください。
んで、
http://www02.so-net.ne.jp/~okuda/tech/findlang.h …参考URLにリンクを張ってます)
ここのURLにあるように、メイン言語、サブ言語に関係するようです。
普通にリソースファイルにストリングを追加すると、作成地域の言語がデフォルトになる事が推測されます。
そちらで抱えている現プロジェクトのリソーススクリプトは
LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT
という部分がありませんか?
私にはUS版OSが無いので同じ環境での実験できませんが、日本語版OSでリソースファイルを作成して、英語のストリングテーブルだけを作成すると、私の環境では以下のような部分まで作成されてしまいます。
----------------------ここから-----------------------
/////////////////////////////////////////////////////////////////////////////
// 日本語 resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_JPN)
#ifdef _WIN32
LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT
#pragma code_page(932)
#endif //_WIN32
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
1 TEXTINCLUDE DISCARDABLE
BEGIN
"resource.h\0"
END
2 TEXTINCLUDE DISCARDABLE
BEGIN
"#include ""afxres.h""\r\n"
"\0"
END
3 TEXTINCLUDE DISCARDABLE
BEGIN
"\r\n"
"\0"
END
#endif // APSTUDIO_INVOKED
#endif // 日本語 resources
/////////////////////////////////////////////////////////////////////////////
----------------------ここまで-----------------------
英語版で作成しても、同様な部分ができていると思います。
この部分が悪さをしていると思うので、まるまる削除してしまいましょう。
そのあと、スクリプトをVCで開き、リソースファイルにして保存してください。
あとは起動時にSetThreadLocaleでIDを指定してあげたら、そのIDに対応した文字列テーブルを読み込むと思います。
(余談)
追っていくうちに、こんな情報発見
※IPDKに関する情報
http://www.microsoft.com/japan/msdn/vbasic/Downl …
(抜粋)
International Package and Deployment Kit (以下、IPDK) は、どの言語版の
Visual Basic を使用しても、ローカライズ版のアプリケーションを作成および
配布することを可能にするためのリソースとツールの集合です。IPDK には、対
象言語版の再配布可能ファイル一式、ディストリビューション ウィザード用の
対象言語版ファイル一式、および作成したアプリケーションを別の言語用に自動
的にパッケージ化し直したり、Visual Basic でコンパイルされた .exe、.dll、
および .ocx ファイルのロケール ID (LCID) を変更したりするためのツールが
含まれています。
※IPDKツール
http://homepage2.nifty.com/nihon-nouen/programmi …
参考URL:http://www02.so-net.ne.jp/~okuda/tech/findlang.h …
No.1
- 回答日時:
私にとってはタイムリーな話題です。
現在、二ヶ国で開発をしております。
同じIDをふって、二ヶ国語(JPN/US)を同時に、それぞれのストリングテーブルに登録しております。
英語版OS環境が無いので、実際に調査したわけではありませんが、こちらで登録したストリングテーブルに対して、US側からの苦情が出ていませんので、問題なく使えているものだと思っております。
もう一度わかりやすく書いてもらえませんか?
1.現在のストリングテーブルのテーブル数(データ数ではないですよ)
2.それぞれのテーブルの言語種類(その中に日本語テーブルは存在するのかどうかが特に知りたい)
3.コンパイル環境
4.実行OS環境
それとVCが入っているかどうかも知りたいです。
言語設定が正しいかどうかを調査しやすくなります。
>それともAPIで何か特別な設定等を行わなければならないのでしょうか
必要ないと思いますよ^^
この回答への補足
変身が遅くなりまして申し訳ございません。
早速ですが、ご質問の内容は下記のとおりです。
>1.現在のストリングテーブルのテーブル数
>(データ数ではないですよ)
テーブル数は5です。
1. 英語
2. フランス語
3. ドイツ語
4. イタリア語
5. スペイン語
>2.それぞれのテーブルの言語種類
>(その中に日本語テーブルは存在するのかどうかが特に知りたい)
日本語は未登録です。
日本語(DBCS)が登録されているとどうなるのでしょうか?
1. U.S.
2. フランス
3. ドイツ
4. イタリア
5. トラディショナルソート
>3.コンパイル環境
Win2000英語版 ServicePack??
VB6.0英語版 ServicePack5.0
>4.実行OS環境
Win2000英語版 ServicePack??
>それとVCが入っているかどうかも知りたいです。
>言語設定が正しいかどうかを調査しやすくなります。
コンパイル環境にはVC++6.0ServicePack5.0が
インストールされています。どのように使うのでしょうか?
気になる点があります。(全て英語版)
"現在ユーザー設定"を変更しVBのデバッグモード(ステップイン F8)で動作
させた場合には、期待している結果が得られます。(対応するテーブルから
ロードされているの意)しかしコンパイルされた実行形式ですとNGとなりま
す。
この違いは、VB自体がGetUserDefaultLCID()APIなどにより現在のロケー
ル情報をもとに実行されているか否かなのでしょうか?
(デバッグモードではロケールを反映?、実行形式では反映せず?)
上記の理由からSetThreadLocale()APIをコールしてみました。
結果はOKとなってしまいました。
結局のところ、複数のストリングテーブルを設定した場合は、アプリケー
ション内でロケールを設定(OS全体に影響する"現在のユーザー設定"で
はなくそのアプリケーションが使用するロケールの意)しなければならない
のでしょうか?
* 英語版で作成した2つのストリングテーブル(JPN/English(U.S))を持つ実
行形式を、日本語版Win2000で実行した場合には、上記のようなAPIをコールしなくても期待するテーブルからロードするようです。(その逆も同様です) おそらく、"システムの言語設定"が異なる場合はOKとなるようです。
どうぞ宜しくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Safari(サファリ) 米国サイトへ行きたいのに、勝手に日本語ページへ飛ばされる 1 2022/10/16 07:52
- ファンタジー・SF ディズニープラス 1 2022/07/02 18:05
- Excel(エクセル) Excelヘルプの原文を表示する最速の方法(手順)には? 1 2023/08/11 11:30
- 教えて!goo 「教えて!goo」の機能として、 任意に語句を設定することにより、質問や回答の表示制限ができる機能が 7 2022/09/04 07:20
- YouTube YouTube Music と YouTube の言語設定 1 2023/06/30 17:18
- Mac OS iMacでコマンドラインと辞書を連携させる方法 2 2023/07/15 17:59
- 哲学 物語における「魔法」は「実現可能性」というくびきがなく、作者がそれ故に恣意的に設定を決めることができ 2 2022/08/20 17:04
- その他(法律) 技術・人文知識・国際業務の在留資格で副業をやる 2 2023/07/13 10:40
- HTML・CSS 欧文フォントの表示がおかしい ホームページを作成しています。 英語と日本語を違うフォントを設定してい 2 2022/12/16 19:00
- その他(IT・Webサービス) Chatgpt使い方 3 2023/05/10 22:08
このQ&Aを見た人はこんなQ&Aも見ています
-
10代と話して驚いたこと
先日10代の知り合いと話した際、フロッピーディスクの実物を見たことがない、と言われて驚きました。今後もこういうことが増えてくるのかと思うと不思議な気持ちです。
-
大人になっても苦手な食べ物、ありますか?
大人になっても、我慢してもどうしても食べれないほど苦手なものってありますよね。 あなたにとっての今でもどうしても苦手なものはなんですか?
-
「これはヤバかったな」という遅刻エピソード
寝坊だったり、不測の事態だったり、いずれにしても遅刻の思い出はいつ思い出しても冷や汗をかいてしまいますよね。
-
プリン+醤油=ウニみたいな組み合わせメニューを教えて!
プリンと醤油を一緒に食べると「ウニ」の味がする! というような意外な組み合わせから、新しい味になる食べ物って色々ありますよね。 あなたがこれまでに試した「組み合わせメニュー」を教えてください。
-
14歳の自分に衝撃の事実を告げてください
タイムマシンで14歳の自分のところに現れた未来のあなた。 衝撃的な事実を告げて自分に驚かせるとしたら何を告げますか?
-
ロケールに対応するストリングテーブルの参照について
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ACCESSとエクセルのリン...
-
C#でaccdbファイルのテーブルの...
-
データを削除しても表領域の使...
-
datapumpの実行方法について
-
create table時のINITIALとMAXE...
-
ストアドで別スキーマのテーブ...
-
sqlplusで実行したSQLの結果を...
-
テーブルのSTORAGE句のサイズ設定
-
USER_SEGMENTの参照について
-
INDEXの無効化
-
SQLのto_char関数の未定義エラー
-
データ削除の方法
-
テーブルからのselectにおいて...
-
ORA-00959: 表領域'****'は...
-
Viewにインデックスは張れ...
-
DELETE文でFROM句を省略した場合
-
表領域の使用率がもうすぐ100%
-
Data Pump で大量データインポ...
-
postgreSQLのint型は桁数指定が...
-
Access レコードを追加できませ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C#でaccdbファイルのテーブルの...
-
エクセルからアクセスにインポ...
-
ACCESS テーブルに2行目から取...
-
アクセスマクロで、csv データ...
-
他ファイルのテーブルの情報を...
-
(ACCESS)複数mdbからのデータ...
-
テーブルのリンク(ACCESS)
-
データ読込時のタイムアウト
-
アクセス初心者に注意点を教え...
-
Access2019でフォームから入力...
-
jspのプログラムについて
-
csvをSQLiteに取り込むと文字化...
-
ACCESSとエクセルのリン...
-
VBでCSVデータをMDB
-
MDBファイル→ORACLEテーブル
-
リソースファイルとロケールに...
-
ACCESS 2003では、テーブルのリ...
-
AccessからExcelファイルのデー...
-
Accessでボタンを押したらエク...
-
VBAでADOの質問です。かなり困...
おすすめ情報