Sie müssen sicherstellen, dass das Gebietsschema Sie setzen gültig ist - Wenn Sie keine gültige Locale in setlocale
gesetzt haben, dann wird glibc nehme an, Sie in der C
oder POSIX
locale ausgeführt und die Werte ignorieren, die angegeben wurden in der bindtextdomain
und einfach die nicht lokalisierten Werte zurückgeben. Dies scheint ein etwas undokumentiertes Verhalten von gettext zu sein.
Sie möchten wahrscheinlich das Gebietsschema auf pt_PT.UTF-8
anstelle von einfach pt_PT
setzen.
in meinem Fall, als ich versuchte, bekam ich:
char *from_setlocale = setlocale(LC_ALL, "pt_PT");
char *checked_setlocale = setlocale(LC_ALL, NULL);
std::cout << (from_setlocale ? from_setlocale : "NULL") << std::endl << (checked_setlocale ? checked_setlocale : "NULL") << std::endl;
aber das ist, weil ich nicht installiert ist die portugiesischen locale hat. Wenn ich ein Gebietsschema festgelegt, die ich installiert haben (en_IE.UTF-8
) dann bekomme ich einige nützliche Ausgabe:
char *from_setlocale = setlocale(LC_ALL, "en_IE.UTF-8");
char *checked_setlocale = setlocale(LC_ALL, NULL);
std::cout << (from_setlocale ? from_setlocale : "NULL") << std::endl << (checked_setlocale ? checked_setlocale : "NULL") << std::endl;
Und außerdem habe ich einen lokalisierten Wert aus der Nachrichtendatei erhalten, die ich erzeugt hatte.
Willkommen bei StackOverflow! Stellen Sie sicher, dass alle Informationen enthalten sind, so dass der Inhalt Ihrer 'messages.mo' Datei * gemeint ist (die wegen des Beispiels auf" Hello World! "Reduziert werden sollte) *. Es könnte auch hilfreich sein, wenn Sie nachsehen, wie die Ergebnisse der Aufrufe aussehen ... Ich stelle fest, dass 'bindtextdomain' einen Zeiger auf ein' char * 'für ein Verzeichnis oder NULL - zum Beispiel - zurückgeben kann 'errno' wenn es ein Problem gibt. – HostileFork