#define #include

(deleted)

#include und #define sind Anweisungen für den Preprozessor und werden nur beim Kompilieren ausgeführt.
Du kannst das also nicht von einer "Tasterabfrage" abhängig machen (die wird ja erst zur Laufzeit gemacht).

(deleted)

Die Marlin.ino arbeitet doch auch so ähnlich oder nicht?

Sicher nicht.
Wenn du während des setup umschalten willst, müssen doch beide Text im Flash sein.
Also müsstest du beide Texte irgendwie gleichzeitig in den Sketch bekommen.

Wenn du allerdings per #define und #ifdef während des Kompilieren umschaltest, musst du natürlich zur Sprachumschaltung neu Übersetzen und Hochladen.

Marlin, die 3D-Drucker Firmware, hab ich mir jetzt nicht angeschaut.

(deleted)

Schreibe doch beide Wortlisten in ein Array z.B.

// Die Worte in beiden Sprachen die 5 ist die Maximallänge+1
const char *worte[][5] = {"Ja","NEIN","TEST", "YES", "NO", "TEST"};
// offset für die Sprachwahl = Anzahl der Worte / 2  (hier 3)
const byte offset = 3;
#define DE 0
#define EN 1

// wortNummer nummer des Wortes in der 1. Sprache, Sprache 0 (Default) oder 1
const char *holeWort(const byte wortNummer, const byte sprache = 0) {
  return worte[0][wortNummer + sprache * offset];
}

void setup() {
  Serial.begin(115200);
  Serial.println("Start");
  Serial.println(holeWort(0,DE));
  Serial.println(holeWort(0,EN));
  
}

void loop() {
  
}

Dann kannst Du jeweils die Sprache auswählen.

Gruß Tommy

(deleted)

Wenn du RAM sparen willst, verwende PROGMEM. Dann brauchst du nur ein Array das Platz für den längsten String hat. Und man kopiert nur jeweils den aktuellen String aus dem Flash ins RAM.

Aber nutze ich dadurch nicht viel mehr Speicherkapazität?

Willst du Worte ausgeben?
Dann musst du sie irgendwo speichern!

Gibt es dazu irgendeine Alternative?
Nein!

Dann dreht es sich nur noch darum WO die Daten/Worte zu speichern sind.
Es bieten sich an:
Flash
EEPROM

Alles andere wäre extern.
z.B. das EEPROM auf der RTC
SD Karte
und viele weitere, welche sich über I2C oder SPI ansprechen lassen.

(deleted)