gpt4 book ai didi

c++ - FindResourceEx 和后备语言

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:19:18 25 4
gpt4 key购买 nike

我将一个资源的所有翻译都放在一个可执行文件中。有效地:

STRINGTABLE
LANGUAGE LANG_ENGLISH, LANG_ENGLISH_US
BEGIN
IDSTR_HELLO "Hello"
END

STRINGTABLE
LANGUAGE LANG_SPANISH, LANG_SPANISH_PANAMA
BEGIN
IDSTR_HELLO "Hola"
END

// ... more languages ...

我正在尝试使用 FindResourceEx 找到(最)合适的一个给了一个 LANGID。 LANGID 由语言和子语言组成。例如,我可能拥有巴拿马使用的西类牙语 (LANGUAGE_SPANISH, SUBLANG_SPANISH_PANAMA) 和墨西哥使用的西类牙语 (LANGUAGE_SPANISH, SUBLANG_SPANISH_MEXICAN) 的资源。当所需的 langid 与其中一个资源完全匹配时,一切都很好。

如果我使用 FindResourceEx 尝试查找第三种西类牙语的资源,比如 (LANG_SPANISH, SUBLANG_SPANISH_COSTA_RICA),查找将失败,因为我没有专门针对哥斯达黎加的资源.在这种情况下,我想“回退”到主要语言的任何风格。

我读到一些建议将子语言设置为 SUBLANG_NEUTRAL 应该匹配具有相同主要语言的任何资源:

HRSRC handle = FindResourceEx(NULL, RT_STRING, MAKEINTRESOURCE(IDSTR_HELLO), langid);
if (handle == NULL) {
fallback_langid = MAKELANGID(PRIMARYLANGID(langid), SUBLANG_NEUTRAL);
handle = FindResourceEx(NULL, RT_STRING, MAKEINTRESOURCE(IDSTR_HELLO), fallback_langid);
}

不幸的是,这不起作用。也不会将子语言设置为 SUBLANG_DEFAULT。 (似乎中性和默认子语言只有在主要语言也是中性或默认时才有意义。)

我有哪些选择?有没有办法枚举资源并自己比较 LANGID 中的主要语言?我一直在查看各种类似 EnumResource 的函数,但其​​中大多数似乎都特定于使用 MUI。我有意不使用 MUI,出于各种原因,包括将所有翻译都放在一个二进制文件中的要求。

最佳答案

如果您不能使用 EnumResourceLanguages,我会感到很惊讶没有 MUI 文件。当然,如果一切都失败了,也许您可​​以为每种主要语言创建一个包含默认子语言的表。或者您的表可以为每个主要/子语言对设置一个默认值。您可以将此表存储在您的代码或自定义资源中。

关于c++ - FindResourceEx 和后备语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28867224/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com