• Diese Seite verwendet Cookies. Indem du diese Website weiterhin nutzt, erklärst du dich mit der Verwendung von Cookies einverstanden. Erfahre mehr

Frage zu "g_locale_to_utf8"

J

juedan

Guest
Themenstarter #1
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
 
#3
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
 
J

juedan

Guest
Themenstarter #4
Hallo [tE]bachi

danke für die Antwort.
[tE]bachi hat gesagt.:
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
 
J

juedan

Guest
Themenstarter #6
Dann geht es.
Dies haben wir auf einer zweiten Maschine getestet. Übrigens funktioniert dann das Updating von FBSD nicht mehr...
 

razoredge

Well-Known Member
#8
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
 
J

juedan

Guest
Themenstarter #9
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
 

razoredge

Well-Known Member
#10
juedan hat gesagt.:
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
 
J

juedan

Guest
Themenstarter #11
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