【问题标题】:set CultureInfo based on MsoLanguageID in vb.net在 vb.net 中根据 MsoLanguageID 设置 CultureInfo
【发布时间】:2020-06-30 21:31:33
【问题描述】:

在我的 Microsoft Word 加载项中,我注意到System.Globalization.CultureInfo.CurrentCulture(或CurrentUICulture)会给我当前的系统语言,它不一定反映 Word 界面语言。我发现可以通过这种方式使用Application.LanguageSettings.LanguageID 检索它:

Dim Application As Word.Application = Globals.{MyAddIn}.Application
Dim lang As Office.MsoLanguageID = Application.LanguageSettings.LanguageID(Office.MsoAppLanguageID.msoLanguageIDUI)

(将 {MyAddIn} 更改为实际的加载项命名空间)。

这将给出 MsoLanguageID 枚举 (https://docs.microsoft.com/en-us/office/vba/api/office.msolanguageid)。有没有什么方法可以基于MsoLanguageID 设置CurrentUICulture 而无需手动设置,比如Select Case 有一百左右的情况(与MsoLanguageID 枚举中的值一样多?)

【问题讨论】:

  • 与此相关,有一个 CultureInfo ctor 接受 LCID 参数。

标签: vb.net ms-word localization internationalization ms-office


【解决方案1】:

是的,可以自动应用 UI 本地化。您可以将本地化字符串存储在加载项的资源中,并根据所选的 Office UI 语言即时应用它们。

public void AddinStartup()
{    
    if (this.OfficeApp != null)
        SwitchLanguage(GetLanguageID(this.OfficeApp));
}
 
private int GetLanguageID(dynamic app)
{
    Office.LanguageSettings languageSettings = app.LanguageSettings;
    if (languageSettings != null)
        try
        {
            return languageSettings.LanguageID[Office.MsoAppLanguageID.msoLanguageIDUI];
        }
        finally 
        {
            Marshal.ReleaseComObject(languageSettings); 
        }
    return 0;
}
 
private void SwitchLanguage(int officeLanguageID)
{
    Thread.CurrentThread.CurrentCulture =
        new System.Globalization.CultureInfo(officeLanguageID);
    Thread.CurrentThread.CurrentUICulture =
        new System.Globalization.CultureInfo(officeLanguageID);
 
    ComponentResourceManager resources =
        new ComponentResourceManager(typeof(AddinModule));
    resources.ApplyResources(this.MyRibbonTab, "MyRibbonTab");
    resources.ApplyResources(this.MyRibbonGroup, "MyRibbonGroup");
    resources.ApplyResources(this.MyRibbonButton, "MyRibbonButton");
    resources.ApplyResources(this, "$this");
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多