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

Win10/11如何让EXE属性详情页按系统语言显示多语言版本资源

问题描述

在Windows系统中,右键点击EXE可执行文件打开「属性」-「详细信息」页看到的所有文本、数值信息,都存储在EXE的资源段中。
预期行为是单个EXE可以内置多语言版本的详情信息,Windows自动匹配用户系统的首选语言显示对应内容:比如同时内置英文、西班牙文详情时,英文系统用户看到英文内容,西班牙文系统用户看到西班牙文内容。
实际测试发现,「详细信息」页只会读取VarFileInfo块里Translations列表中第一个翻译条目对应的字符串,完全忽略用户配置的系统首选语言。

复现环境与步骤

测试环境为MSYS2 MINGW64,可通过以下代码复现问题:

1. 资源文件r.rc

#include <winnls.h>
#include <windows.h>

VS_VERSION_INFO VERSIONINFO

BEGIN
  BLOCK "StringFileInfo"
  BEGIN
    BLOCK "040904B0"  // 英语(美国),Unicode
    BEGIN
      VALUE "ProductName", "List of fruits"
    END
    BLOCK "040A04B0"  // 西班牙语(西班牙),Unicode
    BEGIN
      VALUE "ProductName", "Lista de Frutas"
    END
  END
  BLOCK "VarFileInfo"
  BEGIN
    VALUE "Translation",
      0x040A, 1200,  // 西班牙语(西班牙),Unicode
      0x0409, 1200   // 英语(美国),Unicode
  END
END

LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL

STRINGTABLE
BEGIN
  1, "Fresa"
END

LANGUAGE LANG_ENGLISH, SUBLANG_NEUTRAL

STRINGTABLE
BEGIN
  1, "Stawberry"
END

代码中额外定义的多语言字符串表用于对照验证:LoadStringW接口可以正常根据系统/线程UI语言加载对应语言的字符串,和「详细信息」页的异常表现形成明显对比。

2. 主程序文件main.c

#include <windows.h>
#include <stdio.h>

int main()
{
  // 取消对应行注释可手动指定线程UI语言测试
  // SetThreadUILanguage(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
  // SetThreadUILanguage(MAKELANGID(LANG_SPANISH, SUBLANG_SPANISH_MEXICAN));

  printf("GetThreadUILanguage: 0x%x\n", GetThreadUILanguage());

  WCHAR buffer[256];
  LoadStringW(NULL, 1, buffer, 256);
  printf("LoadString: %ls\n", buffer);
}

3. 编译命令

#!/usr/bin/bash
set -ue
windres r.rc r.o
gcc -Wall -Wextra main.c r.o -o test.exe

4. 复现结果

编译完成后,即使系统设置为英文环境、资源中已经提供了英文版本的ProductName,test.exe的「详细信息」页中产品名仍显示为西班牙文内容:
详情页产品名显示为西班牙文:Lista de frutas

诉求

需要找到可同时适配Windows 10、Windows 11的技术方案,在不把英文条目放在Translations列表首位的前提下,让英文环境用户看到英文版本的详情信息,无需兼容更旧版本的Windows系统。

已尝试无效操作:将两处语言标识中的0x0409(英语-美国)修改为0x0009(中性英语),没有产生任何效果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 14:48:21