C++ C++;预处理器#包括

C++ C++;预处理器#包括,c++,header,include,header-files,C++,Header,Include,Header Files,我正在尝试将我的程序转换成多种语言,一开始会询问用户是想要language1还是language2。用户输入存储在一个变量中,然后使用if语句获得用户选择的语言 像这样: std::cin >> language; if(language == ENGLISH) { // Do something } else if(language == SPANISH) { // Do something else } 接下来我做的

我正在尝试将我的程序转换成多种语言,一开始会询问用户是想要language1还是language2。用户输入存储在一个变量中,然后使用if语句获得用户选择的语言

像这样:

std::cin >> language;

if(language == ENGLISH)
     {
     // Do something
     }
else if(language == SPANISH)
     {
     // Do something else
     }
接下来我做的是,我存储了我想要翻译成两个头文件的每个函数,一个是英语,一个是西班牙语,两个头文件完全相同,除了每个输出都被翻译

现在我所做的是这样的

std::cin >> language;

if(language == ENGLISH)
     {
     #include "English.h"
     }
else if(language == SPANISH)
     {
     #include "Spanish.h"
     }
现在,
#include
是一个预处理器指令,所以它在主函数之前被“执行”,这是怎么回事

现在,#include是后处理器指令,因此它在主函数之前被“执行”

它是一个预处理器指令。它不是在运行时“执行”的;源代码在编译之前经过预处理

有办法吗

在编译和执行程序后,无法运行预处理器

更好的方法是不复制函数定义,而是在打印输出之前调用函数翻译消息。此转换函数应将参数字符串映射为已转换的字符串

现在,#include是后处理器指令,因此它在主函数之前被“执行”

它是一个预处理器指令。它不是在运行时“执行”的;源代码在编译之前经过预处理

有办法吗

在编译和执行程序后,无法运行预处理器


更好的方法是不复制函数定义,而是在打印输出之前调用函数翻译消息。此转换函数应将参数字符串映射为已转换的字符串。

related/dupe:如果i18n这么简单就好了。恐怕你想要的方法是不可能的。哦,上帝。包含文件中的文本在编译时插入。您应该实现一种数据驱动的方法,这意味着根据语言加载一个文件(xml、json等)并使用这些数据。为什么不读取LANG环境变量呢?您可以将所有特定于语言的内容放入一个结构或类中并传递给其他人。一些应用程序使用查找表获取翻译文本。related/dupe:如果i18n那么简单就好了。恐怕你想要的方法是不可能的。哦,上帝。包含文件中的文本在编译时插入。您应该实现一种数据驱动的方法,这意味着根据语言加载一个文件(xml、json等)并使用这些数据。为什么不读取LANG环境变量呢?您可以将所有特定于语言的内容放入一个结构或类中并传递给其他人。一些应用程序使用查找表获取翻译文本。