如何在运行时向嵌入式应用程序添加多种语言选择?

理查德

目前我在编译时选择语言,如下:

#define FRENCH_LANG   0
#define ZULU_LANG     0
#define ENGLISH_LANG  1


#if(FRENCH_LANG == 1)
const char PROMPT_HELLO[] = "Bonjour";
const char PROMPT_THANKS[] = "Merci";
#elif(ZULU_LANG == 1)
const char PROMPT_HELLO[] = "Sawubona";
const char PROMPT_THANKS[] = "Ngiyabonga";
#elif(ENGLISH_LANG == 1)
const char PROMPT_HELLO[] = "Hello";
const char PROMPT_THANKS[] = "Thanks";
#endif

int main(int argc, char *argv[]) {

    printf("%s\r\n", PROMPT_HELLO);
    printf("%s\r\n", PROMPT_THANKS);
    return 0;
} 

我想更改我的代码,以便编译所有语言,并且用户可以选择所需的语言。有没有一种聪明的方法来做到这一点,这样我就不必复制或复制我的 printf 了?

放松

作为Someprogrammer dude答案的变体,您可以使用结构和保持当前语言的全局指针。不需要枚举,通过删除一级间接访问更容易:

struct strings {
  const char *hello;
  const char *thanks;
};

const struct strings strings_english = {
  .hello = "Hello",
  .thanks = "Thanks",
};
const struct strings strings_zulu = {
  .hello = "Sawubona",
  .thanks = "Ngiyabonga",
};
const struct strings_french = {
  .hello = "Bonjour",
  .thanks = "Merci",
};

static const struct strings *current_strings = NULL;

void set_language(const char *code)
{
  if(strcmp(code, "en") == 0)
    current_strings = &strings_english;
  ...
}

int main(void)
{
  set_language("en");
  printf("%s\n", current_strings->hello);
  return 0;
}

当然这里有很多地方需要改进,但它可以是体面的。.hello =在初始值设定项中重复成员名称(等等)使验证更容易一些,如果/当您采取步骤构建工具来提取/更新文本时,也可能使生活更轻松。有时翻译不是由程序员完成的,这需要一种将文本输入和输出程序的方法。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何向 Django 项目添加多种语言?

在应用程序中将Unity作为嵌入式窗口运行时性能不佳

使用嵌入式运行时更新AIR应用程序吗?

在运行时更改应用程序语言

在iOS Swift中进行本地化。我如何在运行时更改应用程序语言

如何在Windows Phone 8.1运行时应用程序的xaml页面本身中添加多个AppBar / CommandBar?

如何在 spa 应用程序中处理多种语言的多种字体

是在运行时从磁盘还是从内存加载.NET程序集中的嵌入式资源?

如何在MVC应用程序中处理多种语言?

如何在C#Windows Forms应用程序中运行嵌入式.exe文件?

当我检查带有应用程序的嵌入式运行时时,应用程序无法正常工作

如何在应用程序仍在运行时刷新它(活动)?

如何在运行时获取Java应用程序的真实路径?

如何在运行时更新SpringBoot应用程序的配置而不重载整个ApplicationContext

应用程序如何在运行时解析为共享库的不同版本?

如何在运行时为独立应用程序提供可用的 jar?

如何在运行时设置非托管应用程序的首选CLR(<supportedRuntime>)?

如何在运行时使用应用程序主机和端口

如何在运行时更改应用程序环境?

如何在运行时中检测到应用程序使用了Swift

如何在运行时更改应用程序输出类型

如何在运行时获取Kony应用程序的名称

如何在运行时在Android应用程序中隐藏(或删除)操作栏

如何在运行时在 webpack 应用程序中要求任意本地脚本?

如何在运行时为 React 应用程序提供安装特定配置?

如何在运行时更改android应用程序的名称和图标?

如何在运行时使用Visual Studio调试Pygame应用程序

maven-cargo2-plugin如何识别我的Spring Boot应用程序已在运行嵌入式Tomcat?

如何在Ubuntu GNOME 16.04中添加多种语言?