Hi,
ich habe nen 32bit ARM µC und entwickle ein mehrsprachiges Menü.
Die Sprache soll zur Laufzeit wechselbar sein.
Mein Ansatz:
1 | #define TEXT_MAXLEN 20
|
2 |
|
3 | typedef enum {
|
4 | LANG_EN, LANG_DE, LANG_COUNT
|
5 | } Language_t;
|
6 |
|
7 | typedef enum {
|
8 | TXT_BASE, TXT_SETTINGS, TXT_COUNT
|
9 | } Text_t;
|
10 |
|
11 | const char txt[LANG_COUNT][TXT_COUNT][TEXT_MAXLEN] = {
|
12 | // LANG_EN
|
13 | { "Base", "Settings", },
|
14 | //LANG_DE
|
15 | { "Basis", "Einstellungen", }
|
16 | };
|
Das dürfte der gängige Ansatz sein den die meisten verwenden. Allerdings
verschwende ich hier viel Flash-Speicherplatz wenn die Strings im
Schnitt deutlich kürzer als die maximale Länge sind.
Daher meine Idee:
1 | const char[] text = "Base\0Settings\0Basis\0Einstellungen";
|
2 | const char* txt[LANG_COUNT][TXT_COUNT] = ... // Pointer auf den Anfang der Strings
|
Da ich für diesen Ansatz jedoch zur Compiletime die Pointer brauche bin
ich mir relativ sicher, dass sich das nicht sauber umsetzen lässt.
Hat jemand eine Idee wie man sowas elegant hin bekommt oder geht das
einfach nicht?
PS: Ja ich weiß dass ich genug Speicher habe und nicht sparen muss bei
deim 32bit ARM, mich interessiert eher ob das generell geht.