1. #1
    U-Labs Legende

    Registriert seit
    17.09.2012
    Beiträge
    1.859
    Thanked 380 Times in 254 Posts

    Standard Suche Hilfe c++ (Arduino)

    Hoffentlich kann mir einer kurz helfen.

    Ich habe ein Arduino Sketch in dem ich gerne eine Sprachdatei einbinden möchte


    Original ist das ganze Deutsch ich würde nun gerne eine Variable Auswahl haben zwischen verschiedenen Sprachen

    Die Definitionen liegen schon in eine extra .H Datei

    #define MSG_Start "Starte Programm"
    #define MSG_Edit "Einstellungen"
    #define MSG_Last "Letztes Programm"
    #define MSG_load "Lade Programm"
    #define MSG_BACK "Zur\365ck"


    Jemand ne Idee wie ich nun z.b. die Englische Sprache laden könnte?

  2. #2
    U-Labs Legende

    Registriert seit
    17.09.2012
    Beiträge
    1.859
    Thanked 380 Times in 254 Posts

    Standard AW: Suche Hilfe c++ (Arduino)

    Push

  3. #3
    U-Labs Routinier
    Avatar von Nuebel
    Registriert seit
    23.11.2013
    Beiträge
    438
    Thanked 351 Times in 228 Posts

    Standard AW: Suche Hilfe c++ (Arduino)

    Habe keinen Compiler zur Hand. Wenn es sich nur um wenige Strings handelt, die in verschiedenen Sprachen geladen werden soll, würde ich sowas mit dem Präprozessor (token concatenation) machen. Etwa so:

    #define GET_MSG(which, lang) MSG_##which_##lang

    #define MSG_Start_DE "Starte Programm"
    #define MSG_Edit_DE "Einstellungen"
    #define MSG_Last_DE "Letztes Programm"
    #define MSG_load_DE "Lade Programm"
    #define MSG_BACK_DE "Zur\365ck"

    #define MSG_Start_EN "Start program"
    #define MSG_Edit_EN "Settings"
    #define MSG_Last_EN "Previous program"
    #define MSG_load_EN "Load program"
    #define MSG_BACK_EN "Back"


    Das Makro kannst du im Programm dann so nutzen:

    GET_MSG(Start, DE) // "Starte Programm"
    GET_MSG(Edit, EN) // "Settings"


    Kannst dir dann irgendwo lang definieren, damit du nicht immer DE, EN etc schreiben musst.

    #define LANG DE
    ...
    GET_MSG(load, LANG) // "Lade Programm"
    Geändert von Nuebel (13.03.2019 um 20:55 Uhr)

  4. The Following User Says Thank You to Nuebel For This Useful Post:

    Chrissy (13.03.2019)

  5. #4
    U-Labs Elite

    Registriert seit
    28.10.2011
    Beiträge
    567
    Thanked 247 Times in 156 Posts

    Standard AW: Suche Hilfe c++ (Arduino)

    Warum so kompliziert?

    Gerade für C++ kannst du ganz gut gettext verwenden.
    https://de.wikipedia.org/wiki/GNU_gettext
    https://stackoverflow.com/questions/...-world-example


    Wenn man nach "i18n c++" googelt, findest du ebenso gute resourcen.
    https://en.wikipedia.org/wiki/C_localization_functions

    Das Stichwort, was du suchst ist einfach "I18N" bzw. "Localization", google hilft.

  6. The Following User Says Thank You to Bubble Gum For This Useful Post:

    Chrissy (13.03.2019)

  7. #5
    U-Labs Routinier
    Avatar von Nuebel
    Registriert seit
    23.11.2013
    Beiträge
    438
    Thanked 351 Times in 228 Posts

    Standard AW: Suche Hilfe c++ (Arduino)

    GNU Tools für ein kleines Mikrocontroller Projektchen wäre mir zu overkill.

  8. The Following User Says Thank You to Nuebel For This Useful Post:

    Chrissy (13.03.2019)

  9. #6
    U-Labs Legende

    Registriert seit
    17.09.2012
    Beiträge
    1.859
    Thanked 380 Times in 254 Posts

    Standard AW: Suche Hilfe c++ (Arduino)

    Danke erstmal für den Input

    Ja lesen hilft sehr (wenn man weiß was man suchen muss)
    Ist aber mein erstes mal in arduino und c++ .

    Werde es am Wochenende ausprobieren.

    Wollte eigentlich ne Sprachdatei (de.h / en.h)
    Via if/else einbinden das wollte aber nicht wirklich klappen.

    Aber der Vorschlag oben klingt doch auch ganz gut.

  10. #7
    U-Labs Plus-Mitglied

    Registriert seit
    06.11.2011
    Beiträge
    418
    Thanked 686 Times in 246 Posts

    Standard AW: Suche Hilfe c++ (Arduino)

    Zitat Zitat von Bubble Gum Beitrag anzeigen
    Das Stichwort, was du suchst ist einfach "I18N" bzw. "Localization", google hilft.
    Ist ein bisschen verwirrend. Zur Aufklärung: i18n steht für internationalization und l10n für localization. Wenn auch oft zusammen angewendet, sind es zwei unterschiedliche Dinge. Mehr dazu z. B. hier: https://en.wikipedia.org/wiki/Intern...d_localization

  11. The Following User Says Thank You to Flav For This Useful Post:

    Bubble Gum (14.03.2019)

  12. #8
    U-Labs Elite

    Registriert seit
    28.10.2011
    Beiträge
    567
    Thanked 247 Times in 156 Posts

    Standard AW: Suche Hilfe c++ (Arduino)

    Danke für die Korrektur!

    Ja, aber dennoch findet man hier unter beiden Stichwörtern diverse Lösungsansätze.

  13. #9
    U-Labs Routinier
    Avatar von Nuebel
    Registriert seit
    23.11.2013
    Beiträge
    438
    Thanked 351 Times in 228 Posts

    Standard AW: Suche Hilfe c++ (Arduino)

    Zitat Zitat von Chrissy Beitrag anzeigen
    Wollte eigentlich ne Sprachdatei (de.h / en.h)
    Via if/else einbinden das wollte aber nicht wirklich klappen.
    Der Präprozessor wird nur einmal vor dem Kompilieren angeworfen. Während der Laufzeit da was zu machen funktioniert nicht.
    Wenn du die Sprachstrings unbedingt in einzelne Headerdateien packen willst, dann musst du in jedem Fall jede einzelne Sprachdatei inkludieren. Musst außerdem aufpassen, dass sich da nichts gegenseitig überschreibt.

  14. The Following User Says Thank You to Nuebel For This Useful Post:

    Chrissy (16.03.2019)

  15. #10
    U-Labs Legende

    Registriert seit
    17.09.2012
    Beiträge
    1.859
    Thanked 380 Times in 254 Posts

    Standard AW: Suche Hilfe c++ (Arduino)

    Zitat Zitat von Nuebel Beitrag anzeigen
    Der Präprozessor wird nur einmal vor dem Kompilieren angeworfen. Während der Laufzeit da was zu machen funktioniert nicht.
    Wenn du die Sprachstrings unbedingt in einzelne Headerdateien packen willst, dann musst du in jedem Fall jede einzelne Sprachdatei inkludieren. Musst außerdem aufpassen, dass sich da nichts gegenseitig überschreibt.

    danke hab deine Lösung ausprobiert und Funktioniert soweit ganz gut. Nun hab ich Nurnoch das Problem mit der unterschiedlichen Wörterlänge im Menü. Back ist halt kürzer wie Zurück *Grrrrrrrrrr*

    Ohhh ich muss wohl noch viel lernen *lach* Da Gibts sicher ne Elegantere Version


    (ja i know alter code ohne deine Lösung von oben)


    if (menu == 21) { /////////////////////////////////////////////////////// 2.1 Run Last Program
    val1 = EEPROM.read(100);
    val2 = EEPROM.read(101);
    val3 = EEPROM.read(102);
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print(MSG_LastP);
    lcd.setCursor(1, 1);
    lcd.print("("MSG_Info")");
    lcd.setCursor(1, 2);
    lcd.print("(");
    lcd.print(val1);
    lcd.print(" / ");
    lcd.print(val2);
    lcd.print(" / ");
    lcd.print(val3);
    lcd.print(")");
    lcd.setCursor(0, 3);
    lcd.print(MSG_Start" "MSG_BACK);
    cursor = 2;
    while (digitalRead(buttonOK) == LOW) {
    delay(10);
    }
    while (digitalRead(buttonOK) == HIGH) {
    while (cursor == 2 && digitalRead(buttonOK) == HIGH) {
    lcd.setCursor(14, 3);
    lcd.print(" ");
    delay(100);
    lcd.setCursor(14, 3);
    lcd.print(MSG_BACK);
    delay(200);
    if (digitalRead(buttonUP) == LOW) {
    cursor = 1;
    }
    }
    while (cursor == 1 && digitalRead(buttonOK) == HIGH) {
    lcd.setCursor(0, 3);
    lcd.print(" ");
    delay(100);
    lcd.setCursor(0, 3);
    lcd.print(MSG_Start);
    delay(200);
    if (digitalRead(buttonDOWN) == LOW) {
    cursor = 2;
    }
    }
    }
    if (cursor == 2) {
    menu = 1;
    }
    if (cursor == 1) {
    menu = 0;
    }
    }

    Geändert von Chrissy (16.03.2019 um 13:10 Uhr)

Ähnliche Themen

  1. [Suche] Hilfe für MyBB.
    Von Dr. Bastardo im Forum Webmaster
    Antworten: 3
    Letzter Beitrag: 24.05.2018, 19:50
  2. Suche Hilfe Cityvillebot
    Von steReo im Forum Internet und Technik
    Antworten: 4
    Letzter Beitrag: 08.04.2012, 23:50
  3. [Suche] Hilfe
    Von Newcomer im Forum Minecraft
    Antworten: 3
    Letzter Beitrag: 06.01.2012, 04:04
Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191