根据使用中的Office语言包而不是Windows当前语言对Office加载项进行本地化

Rez*_*a S 5 c# outlook localization ms-office office-addins

我正在尝试本地化我的Office加载项,我已经阅读了许多有关如何执行此操作的文档和教程,但是他们都教过如何基于当前Windows语言(不一定是哪种Office语言界面)进行本地化。包正在使用中。

因此,我最终遇到了这样的情况,我的Windows语言是法语,我没有任何办公语言界面包,因此Office中的所有菜单都是英语,除了我的外接程序是法语。看起来有些奇怪,所以我想知道是否有一种方法可以根据当前使用的办公语言界面包进行本地化。

Rez*_*a S 2

这是我解决这个问题的方法。我基本上阅读了罗恩建议的注册表项,并将文化强制纳入已安装的语言文化中。我只支持 Office 2007 和 Office 2010。 很糟糕的是,我们必须查看每个 Office 版本的 CU 和 LM 注册表项,并且没有单个内部变量将我们指向正确的注册表路径。解决方法如下:

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);
Run Code Online (Sandbox Code Playgroud)

Resource1 是我的资源字典,并且文化参数在使用时强制使用该文化覆盖所有字符串。