5

Office アドインをローカライズしようとしています。これを行う方法について多くのドキュメントとチュートリアルを読みましたが、それらはすべて、現在の Windows 言語に基づいてローカライズする方法を教えています。パック使用中です。

そのため、Windows の言語がフランス語であり、Office 言語のインターフェイス パックがないため、フランス語のアドインを除いて、Office のすべてのメニューが英語になっています。ちょっと奇妙に見えるので、現在使用されている Office 言語インターフェイス パックに基づいてローカライズする方法があるかどうか疑問に思っていました。

4

4 に答える 4

4

Thread.CurrentThread.CurrentCultureの値がシステム カルチャにThread.CurrentThread.CurrentUICulture対応し、 の値が Office UIに対応していることがわかりました。

そのため、アドインの起動時に一方を他方に割り当てただけです。うまくいくようです。

Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;
于 2012-08-01T16:51:24.773 に答える
2

Officeユーザーインターフェイス言語に基づくリソースの読み込み に関するMSDNページがあります。そこに与えられたコードサンプルは私のために働きます。ApplicationオブジェクトのLanguageSettingsを使用して、OfficeUIの現在の言語を判別します。これまでにWord2010とOutlook2010でテストしてきましたが、他のOffice2010製品でも動作すると確信しています。Office 2007については何も言えませんが、レジストリにクエリを実行するよりもはるかに簡単なので、試してみます。

このアプローチを採用する方法に関する詳細な質問については、ここで役立つSOユーザーから回答を得ました。

于 2011-12-16T09:38:09.617 に答える
2

これが、この問題を修正するための私のアプローチでした。私は基本的に、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 は私のリソース ディクショナリであり、カルチャ パラメーターを使用すると、すべての文字列が強制的にそのカルチャでオーバーライドされます。

于 2011-11-08T22:29:28.363 に答える
1

http://technet.microsoft.com/en-us/library/cc179091%28office.12%29.aspxを少し読んでください

「HKCU\Software \ Microsoft \ Office \ 12.0 \ Common \ LanguageResources \ UILanguage」レジストリキーを読み取って、UIがどの言語であるかを判断できます。

于 2011-11-04T18:07:53.373 に答える