www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Implemetieren von verschiedenen Sprachversionen


Autor: David 1 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Ich wollte mal nach euren Erfahrung bei der Implementierung von 
verschiedenen Sprachversion fragen.

Ich stehe vor der Aufgabe verschiedene Sprachversionen für ein HMI mit 
der Software ausliefern zu wollen.

Meine erste Lösung sieht zZ so aus:
lang.h:
#ifdef LANG_EN
  #include "LANG_EN.h"
 #elif LANG_DE
  #include "LANG_DE.h"
 #elif LANG_XX
  #include "LANG_XX.h"
#else
  #include "LANG_EN.h"
#endif

In der entsprechenden Headerdatei sind dann einzelne Begriffe definiert
zbsp:
#define   LANG_ERROR  "Fehler"
#define   LANG_STORAGE  "Speicher"

Für mich wirkt diese Lösung aber nicht optimal, denn schon bei der 
Konkatenation zweier Wörter wird das ganze unleserlich.

Hat jemand vielleicht eine andere Möglichkeit oder Idee hervorgebracht?

mfg und danke

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich würde einfach jeden Textstring im (s)printf Format ablegen dan must 
du nix zusammenbauen und sogar die ggf. andere Formatierung in anderen 
Sprachen kann berücksichtigt werden. Oder halt ein passendes 
Paket/Bibliothek verwenden, ist aber auch immer etwas Aufwand sich da 
einzuarbeiten.

Autor: David 1 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Was wären denn Beispiele für solche Packete und Bibliotheken?

mfg und danke

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
http://www.google.de/#q=c+i18n such dir was aus...

Autor: NurEinGast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Erzähle uns doch noch ein bischen was über die Randbedingungen.

 Forum: Mikrocontroller und Elektronik  - deutet darauf hin, dass Du das 
mit nem Microcontroller machst ? Richtig ? Hast Du da ein 
Speicherproblem, oder könntest Du auch alle Sprachversionen gleichzeitig 
vorhalten ?

Wenn Du es mit der "#ifdef" Methode machst, dann bekommst Du ja für jede 
Sprache eine eigenes Bin-File. Also keine dynamische Umschaltung der 
Sprache möglich. Passt das zur Anforderung ?

Gruss

Autor: David 1 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Randbedingungen:
Die Sprachversionen sollen für HMI und RS232-Kommunikation implementiert 
werden.
Da ich schon an den Grenzen des Speicherplatzes gelange, will ich das 
System nicht mehrsprachig auslegen, sondern für jede Sprache ein 
Extraprogramm.

Ich weiß jetzt das i18n für Internationalization steht.

Hat jemand schon Erfahrungen im Mikrocontrollerbereich mit I18N 
Packeten/Bibliotheken gemacht und kann ein spezielle/s empfehlen?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich denke die erste Frage, die du dir stellen solltest ist: Welche 
Zeichensätze sind unbedingt notwendig? Komme ich prinzipiell mit ASCII 
durch oder muss ich auf Unicode gehen.

Wenn ASCII ausreicht (ev. mit ein paar Sonderzeichen für den 
osteuropäischen Raum, Stichwort 'Hatschek') dann vereinfacht sich 
einiges.

Da du sowieso schon, wie du sagst, in Speichernöte kommst, würde ich an 
deiner Stelle da keinen großen Aufwand treiben. Ev. noch ein System, mit 
dem man Argumente bei einem sprintf in der Reihenfolge umdrehen kann, 
und ansonsten genau den #ifdef Ansatz, den du schon in Erwägung gezogen 
hast. Keine Strings konkatenieren. Gut überlegen, welche Strings 
tatsächlich zusammengezogen werden können (Es kann sein, dass man zb im 
Deutschen an 2 Stellen denselben Begrif benutzt, die aber im Englischen 
verschieden übersetzen würde). Lieber konservativ arbeiten, als dass die 
Einheimischen über einen lachen :-)

Autor: ... ... (docean) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hier:
http://old.wowace.com/wiki/WelcomeHome_-_Your_firs...

Wird einen finde echt nette Variante beschrieben...

Weiß aber nicht ob sowas auch in C geht.

Zur Funktionsweise:

Im Quellcode steht einfach (im C Stil)
text1=L("Hello World");

wenn EN gewählt steht Hello World im String wenn DE gewählt steht Hallo 
Welt im String (wenn es denn passend hinterlegt ist)

Großer Vorteil ist die gute Lesbarkeit des Quellcodes.

Autor: Mark Brandis (markbrandis)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
David 1 schrieb:
> Hat jemand schon Erfahrungen im Mikrocontrollerbereich mit I18N
> Packeten/Bibliotheken gemacht und kann ein spezielle/s empfehlen?

Wenn der Speicher sowieso schon knapp wie Sau ;-) ist, wieso sollte dann 
die Installation einer zusätzlichen Softwarebibliothek Hilfe bringen? 
:-)

Eventuell ist aber nur der Speicher im RAM wirklich knapp, und im Flash 
geht vielleicht doch noch was? Ich persönlich mag sowas hier:

#include <stdio.h>

int main()
{
  unsigned int language;
  const char* text[3] = { "Dies ist der deutsche Text", \
        "This is the English text", \
        "Ceci est le texte français" };

  language = 0; /* deutsch */
  printf("%s\n", text[language]);
  
  language = 1; /* englisch */
  printf("%s\n", text[language]);

  language = 2; /* französisch */
  printf("%s\n", text[language]);

  return 0;
}


Man muss nur eine Variable verändern und kann den Text in den 
verschiedensten Sprachen ausgeben, und vor allem kann man dies auch zur 
Laufzeit ändern. Dabei muss man natürlich darauf achten, dass Texte 
unterschiedlicher Länge keine Probleme bei der Bildschirmdarstellung 
machen - versteht sich.

Oder eben der Vorschlag von Läubi zusammen mit den #ifdefs, die dann für 
jede Sprache ein unterschiedliches Binary ergeben.

Autor: David 1 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die vielen gute Hinweise.
Ich werden meinen Ansatz beibehalten aber auf die Kontenaktionen 
verzichten.

Ein paar Bibliotheken für die i18n würde ich aber schon mal gerne sehen, 
allein interessehalber um zu schauen wie dort vorgegangen wird.

Autor: P. S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe alles mit const-Strings gemacht, ein Headerfile in dem diese 
extern deklariert werden und dann fuer jede Sprache ein C-File, und ein 
Wrapper-c-file, das aehnlich wie du mit den ifdefs entscheidet, welches 
C-File inkludiert wird.

Autor: David 1 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Im Zusatz zu dem Kommentar von docean habe ich noch folgendes gefunden:
http://www.gnu.org/prep/standards/standards.html#I...

Das angewandte Verfahren ist dort ähnlich und sicher für umschaltbare 
Versionen während der Laufzeit hilfreich.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.