基于正在使用的Office语言包而不是Windows'当前的语言
本文关键字:语言 Windows 于正 Office | 更新日期: 2023-09-27 18:13:37
我正在尝试本地化我的office外接程序,我已经阅读了很多文档和教程,但是他们都教如何基于当前的Windows语言进行本地化,而不一定是使用的office语言界面包。
所以我的Windows语言是法语,我没有任何办公语言界面包,因此我在office中的所有菜单都是英语的,除了我的插件是法语的。它看起来有点奇怪,所以我想知道是否有一种方法可以基于当前使用的办公语言界面包进行本地化。
我发现Thread.CurrentThread.CurrentCulture
的值对应于我的系统文化,Thread.CurrentThread.CurrentUICulture
的值对应于Office UI。
所以我只是在加载项启动时将一个分配给另一个。似乎有效。
Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;
这是我解决这个问题的方法。我基本上阅读了Ron建议的注册表项,并将文化强制到已安装的语言文化中。我只支持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);
Resource1是我的资源字典,并且culture参数强制使用该区域性覆盖所有字符串。
有基于Office用户界面语言加载资源的MSDN页面. 这里给出的代码样本适合我。它使用来自Application对象的languagessettings来确定Office UI的当前语言。到目前为止,我已经在Word 2010和Outlook 2010上对它进行了测试,我很确定它也可以在Office 2010的其他产品上运行。我对Office 2007没什么好说的,但我会试一试,因为它比查询注册表要容易得多。
关于如何使用这种方法的一些细节问题,我刚刚从一些有用的SO用户那里得到了答案。
读一点http://technet.microsoft.com/en-us/library/cc179091%28office.12%29.aspx
您可以阅读"HKCU'Software'Microsoft'Office'12.0'Common'LanguageResources' language "注册表项来确定UI是哪种语言。