sanastasia
Goto Top

C Programm- Sprachumschaltung

Hallo,
ich möchte ein programm schreiben welches einen Text in Abhängigkeit von der gesetzen locale ausgibt.
also wenn ich export LANG=en_US setze, soll der Text in englisch ausgegeben werden.
Kennt sich hier jamand vielleicht damit aus?
Es hat schon einmal bei mir geklappt aber ich kann mir nicht erklären warum es nicht mehr funktioniert.

Grüße,
Sanastasia

Content-ID: 374230

Url: https://administrator.de/contentid/374230

Ausgedruckt am: 25.11.2024 um 15:11 Uhr

Pedant
Pedant 17.05.2018 um 20:16:33 Uhr
Goto Top
Hallo Sanastasia,

Zitat von @Sanastasia:
...Abhängigkeit von der gesetzen locale...
also wenn ich export LANG=en_US setze...

Ist LANG eine Variable im Programm oder ein Parameter der übergeben wird oder etwas das Du aus dem OS ausliest?

In den ersten beiden Fällen verstehe ich das Problem nicht.
If "LANG"=="en_US" print "Hello World"
If "LANG"=="de_DE" print "Hallo Welt"

locale (Cultures) schreibt man eigentlich mit Binde- und nicht mit Unterstrich, also en-US und nicht en_US.

Wenn Du es in Abhängigkeit vom System machst, dann solltest Du die Anzeigesprache auslesen und nicht die Installationssprache.
Für welches Betriebssystem schreibst Du das Programm und ist es tatsächlich C oder C# oder C++?

Gruß Frank
Sanastasia
Sanastasia 17.05.2018 aktualisiert um 20:31:12 Uhr
Goto Top
Hab es sehr ungenau beschrieben, ich weiß.
Das ist der Quellcode:
#include <stdio.h>
#include <string.h>
#include <libintl.h>
#include <locale.h>

int main()
{
setlocale (LC_ALL, "");  
textomain("test");  
bindtextdomain ("test","home/Computer/Übung");  

printf(gettext("Dieser Text soll übersetzt werden."))  

return 0;
}

Ist ein Linux Betriebssystem (Suse).
Im Endeffekt soll das Programm ein anderes Programm übersetzen später einmal, also es soll schon durch die po Datei übersetzt werden.
Pedant
Pedant 17.05.2018 um 20:40:14 Uhr
Goto Top
Hallo Sanastasia,

bei Linux und C kann ich Dir leider nicht mit konkretem Wissen oder Code helfen.

Zitat von @Sanastasia:
Hab es sehr ungenau beschrieben, ich weiß.
...und möchtest es auch so belassen?

Etwas Code ist schon mal hilfreich und reicht eventuell auch jemandem, der sich damit auskennt.
Ich frage mich bloß: Wo setzt Du export LANG=en_US?

Gruß Frank
rubberman
rubberman 17.05.2018 aktualisiert um 20:41:19 Uhr
Goto Top
Du kannst sicher in Abhängigkeit von der locale Einstellung unterschiedliche Texte ausgeben, aber dass ein Text automatisch übersetzt wird, ist mir neu (auch wenn ich nichts mit Linux am Hut habe ...).

ungetestet
#include <stdio.h>
#include <string.h>
#include <locale.h>


int main (void)
{
  char buffer[BUFSIZ] = {0};
  strcpy(buffer, setlocale(LC_ALL, ""));  

  if (strncasecmp(buffer ,"de_DE", 5u) == 0)  
    puts("Deutsch");  
  else if (strncasecmp(buffer ,"en_US", 5u) == 0)  
    puts("English");  
  else
    puts("unbekannt")  

  return 0;
}

Steffen
Sanastasia
Sanastasia 17.05.2018 aktualisiert um 23:10:31 Uhr
Goto Top
Also hatte es jetzt einmal hinbekommen wieder aber habe da noch nicht zu 100% verstanden mit dem textdomain und bindtextdomain woran es augenscheinlich lag.
Grobe Erklärung für alle:
1.Quelldatei erstellen wie oben
2. Kompilieren mit GCC
3. Pot Datei erstellen mit xgettext
4.po Datei erstellen mit msginit
5. Bei msgstr in der Po Datei die Übersetzung rein schreiben
6. Mit msgfmt aus der Po Datei eine Mo Datei erstellen.
7. Mit Export LANG=de_DE oder en_US die Umgebungsvariable in der Bash anpassen
8. Ausgeben und hoffentlich freuen das es geklappt hat
Also so hat es ja jetzt wieder bei mir geklappt nur geht es irgendwie nicht in anderen Ordnern als dem jetzigen.
Und für mehr Text gibt es dann Po Edit oder so.
Sanastasia
Sanastasia 18.05.2018 um 15:55:27 Uhr
Goto Top
Also kann jetzt das Problem noch genauer beschreiben:
mein Programm ging nur weil mo files in dem anderen ordner gespeichert waren, auf die das Programm mit bindtextdomain zugreift.
Jetzt verstehe ich einfach nicht wo und wie ich die mo files speichern soll, bisher habe ich immer erst zum schluss mo files erstellt.

Viele Grüße,
Sanastasia