【发布时间】:2015-07-02 22:30:21
【问题描述】:
我正在开发一个 VSTO 插件,并希望根据办公产品的语言版本对其进行本地化。理论上是这样的:
int lcid = Application.LanguageSettings.get_LanguageID(Office.MsoAppLanguageID.msoLanguageIDUI);
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(lcid);
为此,我当然需要初始化Application。所以我可以执行此代码的最早点是在 Startup 事件处理程序中。然而此时,CreateRibbonExtensibilityObject() 已经被调用,所以至少我的自定义功能区选项卡的标题将以 Windows 语言显示,这可能会有所不同。
在功能区类中,我有一个 onLoad 事件的处理程序,我在其中存储了一个 IRibbonUI 的实例以供以后使用。我可以把这个实例交给插件类,让它在上面调用IRibbonUI.Invalidate()。但这似乎有点奇怪 - 创建一个功能区只是为了在几微秒后使其无效。所以我想知道 - 并在这里询问 - 是否有更优雅的方式来根据办公产品的语言版本本地化 vsto 插件的功能区。
(我见过this similar question,但那里提供的方法by this answer 对我来说看起来更糟。)
【问题讨论】:
-
re:更糟糕的方法:你的意思是,当然是注册表查找,对吧?建议使用 CurrentUICulture 的答案对我来说很有意义。
-
@Ishmaeel 当然。另一个答案比我的问题更新。我刚刚编辑了那部分以使其清楚。我的第一次尝试(见问题)以及新答案和此处接受的答案都设置了 CurrentUICulture。它们的不同之处在于从哪里获取。
标签: .net localization vsto