Frage zu "g_locale_to_utf8"

J

juedan

Guest
Hallo Programmierer,

kann mir jemand bitte dieses Phänomen erklären?

Ich habe benutze o.g. Funktion, um Problemen mit landes-spezifischen Sonderzeichen aus dem Weg zu gehen. Unter Gnome 2.6 mit glib Version 2.2 und gtk Version 2.2 funktioniert es super.
Bei glib Version 2.4 und gtk Version 2.4 nicht mehr. Siehe die folgenden Punkte:
  1. Code:
    #define TREE_NODE_DATEI _("pers[u]ö[/u]nlicher Ordner")
    
    g_print("text = %s\n", g_locale_to_utf8(TREE_NODE_DATEI, strlen(TREE_NODE_DATEI), &in, &out, NULL));

  2. Code:
    g_print("text = %s\n", g_locale_to_utf8(_("pers[u]ö[/u]nlicher Ordner"), strlen(_("pers[u]ö[/u]nlicher Ordner")), &in, &out, NULL));

Preisfrage: Was wird bei Fall 1 ausgegeben und was bei Fall2?
Ihr werdet nicht drauf kommen!
Fall1 ergibt
Code:
text = (null)

und Fall2
Code:
test = pers[u]ö[/u]nlicher Ordner
:apaul:

Jetzt kommt die Krönung:
Code:
#define TREE_NODE_DATEI _("pers[u]oe[/u]nlicher Ordner")

g_print("text = %s\n", g_locale_to_utf8(TREE_NODE_DATEI, strlen(TREE_NODE_DATEI), &in, &out, NULL));
Wie lautet da das Ergebnis? Richtig
Code:
text = persoenlicher Ordner
:eek:
Ich habe dieses Ergebnis unserem Chef-Programmierer gezeigt, der konnte es nicht glauben.
Meine Frage was ist falsch? Ein bug in der glib 2.4.? Das wäre äußerst ungut, weil auf dieser library ein großes Projekt aufbaut...

Vielen Dank für die Antworten

Jürgen
 
Der Präprozessor ersetzt alle im Code enthaltenen 'TREE_NODE_DATEI'en mit '_("persoenlicher Ordner")'... oder?
Vielleicht ist der Präprozessor noch nicht 'locale' fähig...

Was hast du denn für ein Compiler?

greets

[tE]bachi
 
Hallo [tE]bachi

danke für die Antwort.
[tE]bachi schrieb:
Der Präprozessor ersetzt alle im Code enthaltenen 'TREE_NODE_DATEI'en mit '_("persoenlicher Ordner")'... oder?
Vielleicht ist der Präprozessor noch nicht 'locale' fähig...

Was hast du denn für ein Compiler?

greets

[tE]bachi

Du hast recht. Es werden alle TREE_NODE_DATEI mit _("...") ersetzt.

Welchen Compiler setze ich ein? Hier die Antwort:
Unter FreeBSD 4.10 - da funktioniert es super - habe ich gcc 2.95.3.
Unter FreeBSD 5.3 - da funktioniert es wie im Anfangs-Thread beschrieben - ist gcc 3.2.1 installiert.

Viele Grüße

Jürgen
 
Versuch mal unter FBSD 5.3, über die Port Collection, den gcc 2.95.3 zu installieren und danach das ganze nochmals zu machen...
 
Dann geht es.
Dies haben wir auf einer zweiten Maschine getestet. Übrigens funktioniert dann das Updating von FBSD nicht mehr...
 
Dies haben wir auf einer zweiten Maschine getestet.
alle libraries gleich, nur der compiler anders? dann ist es das... versuch mal mit google, ob es das wirklich sein soll.

Übrigens funktioniert dann das Updating von FBSD nicht mehr...
ist bei mir auch nicht mehr gegangen...
habe gestern meine fbsd-box neu gestaget. wollte unbedingt auf gnome 2.10 updaten.
 
Statische Strings (bei #define und const) sollten mit N_() gehandelt werden (gettext_noop Makro), dann sollte es auch ohne Probleme klappen (so die locale-Unterstuetzung sauber funktioniert, wie oben erwaehnt).

In Deinem Fall also:
Code:
#define TREE_NODE_DATEI N_("persoenlicher Ordner")
Du solltest auch die GError Variable mal inspizieren, die Du derzeit mit NULL uebergibst. Oft gibt das nuetzliche Hinweise.

Siehe auch zusaetzlich:
http://developer.gnome.org/doc/API/2.0/glib/glib-I18N.html
http://www.gnu.org/software/gettext/gettext.html

gruss
 
Hallo,

das wird jetzt wohl ein Zwiegespräch :D

Daß, was Du geschrieben hast, gilt aber nur für diesen Fall (lt. Warkus, u.a.):
Code:
#define TEST N_("Test-Text")
const gchar textausgabe[] = TEST;
und nicht hierfür
Code:
g_print(TEST);
außer
Code:
g_print(textausgabe);

Viele Grüße

Jürgen
 
juedan schrieb:
Hallo,

das wird jetzt wohl ein Zwiegespräch :D

Daß, was Du geschrieben hast, gilt aber nur für diesen Fall (lt. Warkus, u.a.):
[...]
Ich habe gelernt, in Bezug auf die autotools Handbuecher nicht fuer das Mass der Dinge zu nehmen, da man das dort eh' vergessen kann (bei jeder neuen Version ist was anderes an den autotools kaputt ;-). Da ich mit Warkus nichts anfangen kann, bitte ich um einen Link o.ae. .

Ich bezog mich nur auf den Hinweis des gettext-Manuals, in welchem es eben so erklaert wird.

gruss
 
Moin,

Da ich mit Warkus nichts anfangen kann, bitte ich um einen Link o.ae. .
Herr Warkus ist der Autor des Buchs "Gnome 2.0, Das Entwickler-Handbuch", erschienen beim Galileo-Computing-Verlag, ¤39,90. Das dumme an solchen Bücher ist immer, man merkt erst nach einigen Monaten, ob sie Geld wert sind oder nicht. In diesem Fall nicht!

Ostergrüße

Jürgen
 
Zurück
Oben