gpt4 book ai didi

c++ - 是否可以在编译时/运行时生成标记字符串的全局列表?

转载 作者:搜寻专家 更新时间:2023-10-31 02:00:56 27 4
gpt4 key购买 nike

所以,我正在努力将我的 C++ 应用程序翻译成多种语言。我目前使用的是这样的:

#define TR(x) (lookupTranslatedString( currentLocale(), x ))
wcout << TR(L"This phrase is in English") << endl;

翻译来自 CSV 文件,该文件将英文字符串映射到翻译后的字符串。

"This phrase is in English","Nasa Tagalog itong pagsabi"

这是简化的,但这是基本思想。

我的问题是关于生成需要翻译的英语短语列表。我只需要包含所有英文短语和空白翻译短语的 CSV。我希望可以在编译时或运行时生成此列表。在编译时我在想这样的事情:

#define TR(x) \
#warning x \
(lookupTranslatedString( currentLocale(), x ))

然后可能会解析编译日志或其他内容。这似乎不太奏效。

在运行时也很棒。我正在考虑只启动应用程序并有一个隐藏的命令来转储英文 CSV。我见过类似的方法用于使用全局变量向中央列表注册命令。它可能看起来像这样:

class TrString
{
public:
static std::set< std::wstring > sEnglishPhrases;
TrString( std::wstring english_phrase ) { sEnglishPhrases.insert( english_phrase ); }
};

#define TR(x) do {static TrString trstr(x);} while( false ); (lookupTranslatedString( currentLocale(), x ));

我知道上面的代码有两个问题。我怀疑它能否编译,但更重要的是,为了生成所有英语短语的列表,我需要在访问 sEnglishPhrases 之前访问每个代码路径。

看起来我最终会编写一个小型解析器来读取我所有的代码并查找 TR 字符串,这并不是那么困难。我只是希望多了解一点 C++,以及是否有更好的方法来做到这一点。

最佳答案

您可以构建一个快速脚本来解析文件并剥离您需要的内容。

awk '/TR\(L"[^"]*")/ {print}' plop.c

如果您需要稍微复杂一点的东西,那么 perl 是您的 friend 。

关于c++ - 是否可以在编译时/运行时生成标记字符串的全局列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1369292/

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