You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按指定LANGID获取多语言环境下的属性列名称?

获取指定语言的属性列标题文本

核心解决方案

利用Windows的IPropertyDescription2扩展接口,它提供的GetDisplayNameEx方法可直接指定LANGID获取对应语言的属性列标题,无需修改系统或线程区域设置。

实现步骤

  1. 获取基础属性描述接口:
    • 针对属性规范名称(如System.ItemNameDisplay),调用PSGetPropertyDescriptionByName获取IPropertyDescription接口。
    • 针对PROPERTYKEY(如PKEY_FileName),调用PSGetPropertyDescriptionFromPropertyKey获取IPropertyDescription接口。
  2. 转换为扩展接口:将IPropertyDescription查询转换为IPropertyDescription2接口(Windows Vista及以上系统支持)。
  3. 获取指定语言标题:调用IPropertyDescription2::GetDisplayNameEx,传入目标LANGID即可得到对应语言的标题文本。

代码示例(C++)

通过属性规范名称获取指定语言标题

#include <propsys.h>
#include <propkey.h>
#pragma comment(lib, "propsys.lib")

HRESULT GetPropertyDisplayNameForLang(LPCWSTR pszPropCanonicalName, LANGID langid, PWSTR* ppszDisplayName)
{
    if (!pszPropCanonicalName || !ppszDisplayName)
        return E_INVALIDARG;

    *ppszDisplayName = nullptr;
    IPropertyDescription* pPropDesc = nullptr;
    HRESULT hr = PSGetPropertyDescriptionByName(pszPropCanonicalName, IID_PPV_ARGS(&pPropDesc));
    
    if (SUCCEEDED(hr))
    {
        IPropertyDescription2* pPropDesc2 = nullptr;
        hr = pPropDesc->QueryInterface(IID_PPV_ARGS(&pPropDesc2));
        
        if (SUCCEEDED(hr))
        {
            hr = pPropDesc2->GetDisplayNameEx(langid, ppszDisplayName);
            pPropDesc2->Release();
        }
        pPropDesc->Release();
    }
    return hr;
}

通过PROPERTYKEY获取指定语言标题

HRESULT GetPropertyDisplayNameForPKEY(const PROPERTYKEY& pk, LANGID langid, PWSTR* ppszDisplayName)
{
    if (!ppszDisplayName)
        return E_INVALIDARG;

    *ppszDisplayName = nullptr;
    IPropertyDescription* pPropDesc = nullptr;
    HRESULT hr = PSGetPropertyDescriptionFromPropertyKey(pk, IID_PPV_ARGS(&pPropDesc));
    
    if (SUCCEEDED(hr))
    {
        IPropertyDescription2* pPropDesc2 = nullptr;
        hr = pPropDesc->QueryInterface(IID_PPV_ARGS(&pPropDesc2));
        
        if (SUCCEEDED(hr))
        {
            hr = pPropDesc2->GetDisplayNameEx(langid, ppszDisplayName);
            pPropDesc2->Release();
        }
        pPropDesc->Release();
    }
    return hr;
}

使用说明

  • 常用LANGID:英语(美国)为0x0409,西班牙语(西班牙)为0x0C0A。
  • 若系统未安装目标语言的属性资源,方法会返回系统默认语言的标题作为降级备选。
  • 程序需链接propsys.lib,且运行环境为Windows Vista及以上系统。

内容的提问来源于stack exchange,提问作者davecupper

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 07:03:19