基于文本语言的决策

Text language based decision making

我目前正在使用 C 编程语言在 PIC32 平台上使用 MPLAB X (IDE) 进行开发。

我有一个主要项目即将完成,其中包括在 TFT 屏幕上显示图形和文本。 我们为多种语言开发系统,包括 "right to left" 和 "left to right" 编写的语言。 所以一些符号也会改变它们的位置,文本也会改变它们在屏幕上的对齐方式。

到目前为止,我看到我的前任开发人员以这样的方式实现代码:每个显示的屏幕或屏幕上显示的每个对象都针对所选语言进行测试,然后采取相应的操作。

例如:

/**Some actions shared by all the languages**/
.
.
/* language specific actions: */
if(language == lang1){
  .
  .
  /* Performs some actions */ 
  /* e.g: */ 
  displayText(txt, LEFT_ALIGNED);
  .
  .
} else if(language == lang2){
  .
  .
  /**SAME** actions with only minor changes depending on the language selected. */
  /* e.g: */ 
  displayText(txt, RIGHT_ALIGNED);
  .
  .
} else if.... (and so on)

如您所见,这似乎是一个开销,而且这种方式的代码有很多多余的代码重复,尤其是当几乎每个 function/source 文件中都重复这种结构时。

我正在考虑一种方法来开发更多的 "polymorphic" 结构,不需要那么多 "if else" 语句。

我试图在互联网上搜索一些实施基于文本的决策制定的示例,但找不到我需要的,主要是因为我发现很难描述我的问题。

我希望这不是一个模糊的问题, 但是对于实施这种情况是否有任何结构性共识?

非常感谢, Tsoof A.

我会选择 language/action 结构数组,然后在数组中搜索相关语言,并执行相关操作:

typedef struct {
  char *lang;
  void (*action)();
} action_t;

action_t actions[] = {{"en", func1}, {"de", func2}, ...};
...
for(int i = 0; i < sizeof(actions)/sizeof(actions[0]); i++)
  if(!strcmp(actions[i].lang, language)) {
    actions[i].action();
    break;
  }