使用基于Office语言包而不是Windows当前语言本地化Office加载项

时间:2011-11-04 17:48:04

标签: c# localization outlook ms-office office-addins

我正在尝试本地化我的办公室插件,我已阅读了许多关于如何执行此操作的文档和教程,但他们都教授如何根据当前的Windows语言本地化它,不一定是什么办公室语言界面包正在使用中。

所以我最终遇到的情况是我的Windows语言是法语,我没有任何办公语言界面包,因此Office中的所有菜单都是英文的,除了我的法语加载项。它看起来很奇怪,所以我想知道是否有一种基于当前使用的办公语言界面包进行本地化的方法。

4 个答案:

答案 0 :(得分:4)

我发现Thread.CurrentThread.CurrentCulture的值与我的系统文化相对应,Thread.CurrentThread.CurrentUICulture的值对应于Office用户界面。

所以我只是在加载项启动时将一个分配给另一个。似乎工作。

Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;

答案 1 :(得分:2)

这是我解决此问题的方法。我基本上阅读了Ron建议的注册表项,并强迫文化进入已安装的语言文化。我只支持Office 2007和Office 2010.我们必须查看办公室每个版本的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);

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

答案 2 :(得分:2)

Loading Resources Based on Office User Interface Language 上有一个MSDN页面。给出的代码示例对我有用。它使用Application对象中的LanguageSettings来确定Office UI的当前语言。到目前为止,我已经使用Word 2010和Outlook 2010对其进行了测试,我很确定它也可以与其他Office 2010产品一起运行。我不能在Office 2007上说什么,但我会尝试一下,因为它比查询注册表容易得多。

有关如何使用此方法的一些详细问题I've just got an answer here由一些有用的SO用户提供。

答案 3 :(得分:1)

读到http://technet.microsoft.com/en-us/library/cc179091%28office.12%29.aspx

您可以阅读“HKCU \ Software \ Microsoft \ Office \ 12.0 \ Common \ LanguageResources \ UILanguage”注册表项,以确定用户界面的语言。