> const struct MENU MENU = {
> menustring_ && lang,
> ...
> };
>
> Könnte das funktionieren?
Nein.
C ist eine compilierte Sprache und keine interpretierte.
Variablennamen müssen zur Compilezeit feststehen und sind
nach dem Compiliervorgang nur noch Schall und Rauch.
Du könntest zb so was machen.
Du sammelst alle Texte für eine Sprache in einem
Array. Und zwar als Pointer auf die eigentlichen
Texte (die im Flash liegen).
1 | char Hilfe_DE[] PROGMEM = "Hilfe";
|
2 | char Exit_DE[] PROGMEM = "Beenden";
|
3 |
|
4 | char Hilfe_EN[] PROGMEM = "Help";
|
5 | char Exit_EN[] PROGMEM = "Exit";
|
6 |
|
7 | const char* Texte_DE[] = { // Deutsch
|
8 | Hilfe_DE, // 1. Text: Hilfe
|
9 | Exit_DE // 2. Text: Benden
|
10 | };
|
11 |
|
12 | const char* Texte_EN[] = { // Englisch
|
13 | Help_EN, // 1. Text: Hilfe
|
14 | Exit_EN // 2. Text: Beenden
|
15 | };
|
16 |
|
17 | const char ** activeMenu;
|
Abhängig von der eingestellten Sprache, gilt jetzt entweder die
Tabelle Texte_DE oder die Tabelle Texte_EN. Gekennzeichnet dadurch,
dass activeMenu einen Pointer auf die jeweils gültige Tabelle enthält.
1 | const char* GetText( unsigned char TextNr )
|
2 | {
|
3 | return (*activeMenu)[TextNr];
|
4 | }
|
5 |
|
6 | void ToGerman()
|
7 | {
|
8 | activeMenu = Texte_DE;
|
9 | }
|
10 |
|
11 | void ToEnglish()
|
12 | {
|
13 | activeMenu = Texte_EN;
|
14 | }
|
Die einzelnen Texte werden dann nur noch durch jeweils eine Nummer
identifiziert. Dein Menüeintrag enthält also keinen Pointer
auf den String, sondern eine Textnummer
1 | struct MenuEntry {
|
2 | unsigned char TextNr;
|
3 | ...
|
4 | }
|
5 |
|
6 | struct Menu {
|
7 | unsigned char NrEntries;
|
8 | struct MenuEntry[] Entries;
|
9 | }
|
und beim Ausgeben des Menüs, wird dann über die Funktion GetText
für jede Textnummer der korrekte Text, abhängig von der Sprach-
einstellung besorgt
1 | void DrawMenu( struct Menu* TheMenu )
|
2 | {
|
3 | unsigned char i;
|
4 | const char* pText;
|
5 |
|
6 | for( i = 0; i < TheMenu->NrEntries; ++i ) {
|
7 | pText = GetText( TheMenu->Entries[i] );
|
8 |
|
9 | // ausgeben des Textes, Achtung: pText zeigt ins Flash
|
10 | ...
|
11 | }
|
12 | }
|
Disclaimer: ungetesteter Code. Der Code soll nur eine Idee
aufzeigen