を持っていない場合にのみ機能します。私は英語の文字列テーブルを追加する場合loadStringは、私は、私はプログラム的にアプリケーションの言語を変更、または少なくともコントロールパネルで指定した言語を使用することができるようにしたい英語の文字列テーブル
は、私はプログラム的にフランス語とドイツ語の文字列をロード切り替えることができ、フランス語、それのドイツのコピーを作成し、英語のものを削除します。 ドイツ語やフランス語を読み込もうとしたときに、英語のコピーを保持すると、英語の文字列がロードされます。
これはリソースローダのバグであり、Windowsの言語(Windowsエクスプローラメニューの言語など)と同じ言語の文字列テーブルが見つかった場合、リソースローダはSetThreadLocaleを無視すると考えています。
は私がコントロールパネルを変更しようとしました - >地域と言語のオプション] - > [フランス語の書式が、それは効果がありません。リソースエディタでは、言語を追加せずにフランス語の文字列テーブルが表示されますが、私のプログラムでは常に英語の文字列が読み込まれます。この変更をシステムアカウントにコピーしても効果はありません。ここで私はこれを試みたコードである:
#include "stdafx.h"
#include <iostream>
#include "windows.h" // this should go to stdafx.h
#include "resource.h" // this should not go to stdafx.h
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
// 1036 = french, 1031 = german
SetThreadLocale(MAKELCID(1036, SORT_DEFAULT));
const int maxSize = 100;
wchar_t c[maxSize];
LoadString(GetModuleHandle(NULL), IDS_STRING101, c, maxSize);
std::cout << c;
return 0;
}
Hereは、(方法2の後半の)半分の間違った、不完全な説明です。私は別のポルトガル語 - ポルトガル語とポルトガル語 - ブラジルの文字列テーブルを持っているので、そこに提案された2番目の回避策は、coutry中立文字列テーブルだけを使用することは役に立たない。
そこに提案された最初の回避策は動作しません。下記のコードでエラー1814が発生します。
HRSRC r = FindResource(
GetModuleHandle(NULL),
MAKEINTRESOURCE(IDS_STRING101),
RT_STRING);
DWORD e = GetLastError();
どうすればよいですか?この奇妙な "バグ"の説明はなんですか?
LATER EDIT:コントロールパネルの セットが何であるかを返します
- GetThreadLocale() - >地域と 言語のオプション] - > [フォーマットは:私がいることが分かったいくつかのより多くのテストの後
。
- リソースローダのバグは、私のプログラムがあまりにも米国英語リソースを持っている場合、これらのリソースは関係なく、形式に設定されているものを、ロードされないことを本質的です。米国英語のリソースがない場合は、フォーマットで設定された言語が使用されます。
- 私は(ニュートラル)フランス語とドイツ語(ニュートラル)文字列テーブルを持っている、と私はフランス語(フランス)に書式を設定した場合、ドイツ語の文字列がロードされます。英語(ニュートラル)文字列テーブルを追加すると、英語の文字列が読み込まれます。したがって、フォーマットに設定されているものについて中立文化のフォールバックは機能しません。
- 私はニュートラル文字列テーブルを追加する場合は、その一つは、私は別の英語(ニュートラル)または英語(米国)の文字列テーブルを持っている場合でも、使用されます。
現在選択されているユーザーロケールは何ですか?それはWindows Explorerのメニューの言語であり、変更できません。 スレッドロケールは、変更する前にチェックされていますか? リソースエディタでデフォルトのロケールを設定するにはどうすればよいですか? –
コントロールパネルの[地域]設定で選択したロケールです。 –
[形式]タブには関係ありません。 [詳細設定]タブです。 –