C 带字符串数组的多语言GUI设置

C 带字符串数组的多语言GUI设置,c,embedded,C,Embedded,我正在开发Keil uv4 IDE,其ARM Cortex-M3位于裸机C应用程序中。我有一个图形用户界面,我创建的是目前在英语,但我想给用户的能力之间的其他语言,就像你可以在手机上 我创建了一个包含所有使用的单词的结构,称为string\u table\t struct string_table_t { char *word1; char *word2; char *word3; }; 我的想法是为不同的语言建立纯文本文件,并在每种语言中包含使用的单词列表。然后,我将

我正在开发Keil uv4 IDE,其ARM Cortex-M3位于裸机C应用程序中。我有一个图形用户界面,我创建的是目前在英语,但我想给用户的能力之间的其他语言,就像你可以在手机上

我创建了一个包含所有使用的单词的结构,称为string\u table\t

struct string_table_t
{
    char *word1;
    char *word2;
    char *word3;
};
我的想法是为不同的语言建立纯文本文件,并在每种语言中包含使用的单词列表。然后,我将执行一个加载函数,将字符串表的指针与实际单词链接起来

现在,我的初始菜单是通过这样定义静态创建的。它基于Altium软件平台

// Test structure
struct string_table_t string_table = {"Main Menu","test1","test2"};

form_t mainmenu_form =
{
    .obj.x = 0,
    .obj.y = 0,
    .obj.width = 240,
    .obj.height = 320,
    .obj.draw = form_draw,
    .obj.handler = mainmenu_form_handler,
    .obj.parent = NULL,
    .obj.agui_index = 0,
    .obj.visible = __TRUE,
    .obj.enabled = __TRUE,
    .caption.x = 0,
    .caption.y = 0,
    .caption.text = "Main Menu",
    .caption.font = &helveticaneueltstdltext18_2BPP,
    .caption.color = RGB(230,230,230),
    .caption_line_color = RGB(241,101,33),
    .caption.fontstyle = FS_NONE,
    .caption.align = ALIGN_CENTRE,
    .captionbarcolor = RGB(88,89,91),
    .children = mainmenu_children,
    .n_children = 4,
    .relief = RELIEF_NONE,
    .color = RGB(65,64,66),
};
我要做的是将caption.text的“主菜单”替换为string_table.word1。因此,如果加载不同的语言集,菜单将自动指向正确的字符数组。执行此操作当前会导致错误表达式必须具有常量值

现在,我可以通过在菜单组件中保留文本null并添加:

Link_pointer_to_menu() {
    mainmenu_form.caption.text = string_table.Main_menu_text;
}

这将编译和工作,但我不希望有100左右的这些语句。有没有更好的方法可以做到这一点?

我建议这样做:

enum MyWords
{
    msgHello,
    msgOpen,
    msgClose,
    msgMainMenu,
    num_Messages,
};

char *string_table_t[num_Messages];
您应该编写加载语言文件并在此数组中分配指针的代码。之后,在代码中:

.caption.text = string_table_t[msgMainMenu];

其思想是为每个字符串指定一个符号名,该名称是字符串表中的偏移量。之后,使用此偏移量作为表的索引。

.caption.text=string\u table\t[msgMainMenu]必须在函数中完成,尽管当我声明菜单的其余参数时,它不能静态完成。一旦在运行时使用指针初始化结构,在特定于语言的初始化之前,就不能从中拾取指针的值。啊,我知道我别无选择,只能创建一个函数,遍历每个菜单位置,并将其caption.text指定给表中正确的偏移量。