これが、この問題を修正するための私のアプローチでした。私は基本的に、Ron が提案したレジストリ キーを読み取り、文化をインストールされた言語文化に強制しました。私は Office 2007 と Office 2010 しかサポートしていません。オフィスのバージョンごとに CU と LM のレジストリ エントリを確認する必要があり、正しいレジストリ パスを示す内部変数が 1 つもありません。解決策は次のとおりです。
int languageCode = 1033; //Default to english
const string keyEntry = "UILanguage";
if (IsOutlook2010)
{
const string reg = @"Software\Microsoft\Office\14.0\Common\LanguageResources";
try
{
RegistryKey k = Registry.CurrentUser.OpenSubKey(reg);
if (k != null && k.GetValue(keyEntry) != null) languageCode = (int)k.GetValue(keyEntry);
} catch { }
try
{
RegistryKey k = Registry.LocalMachine.OpenSubKey(reg);
if (k != null && k.GetValue(keyEntry) != null) languageCode = (int)k.GetValue(keyEntry);
} catch { }
}
else
{
const string reg = @"Software\Microsoft\Office\12.0\Common\LanguageResources";
try
{
RegistryKey k = Registry.CurrentUser.OpenSubKey(reg);
if (k != null && k.GetValue(keyEntry) != null) languageCode = (int)k.GetValue(keyEntry);
} catch { }
try
{
RegistryKey k = Registry.LocalMachine.OpenSubKey(reg);
if (k != null && k.GetValue(keyEntry) != null) languageCode = (int)k.GetValue(keyEntry);
} catch { }
}
Resource1.Culture = new CultureInfo(languageCode);
Resource1 は私のリソース ディクショナリであり、カルチャ パラメーターを使用すると、すべての文字列が強制的にそのカルチャでオーバーライドされます。