MSGFMT "تسلسل متعدد البياضات غير صالح" خطأ في نص بولندي

StackOverflow https://stackoverflow.com/questions/1083518

سؤال

استخدام إكمال C ++ I18N Gettext () "Hello World" مثال لقد غيرت المحلية من "es_MX" ل "pl_PL"والنص من" مرحبا، العالم! "إلى" إدخال غير صالح. أدخل سلسلة طويلة على الأقل 20 حرفا. ". تحتوي الترجمة البولندية على العديد من الأحرف التي تسبب أخطاء" تسلسل متعددة البياضات غير صالحة "من MSGFMT،" źźó ". تم نسخ النص المترجم من صفحة ويب.

أفترض UTF8 هو المشكلة. إذا كان الأمر كذلك، ما الذي يجب استخدامه بدلا من ذلك؟

cat >plt.cxx <<EOF
// plt.cxx
#include <libintl.h>
#include <locale.h>
#include <iostream>
int main (){
    setlocale(LC_ALL, "");
    bindtextdomain("plt", ".");
    textdomain( "plt");
    std::cout << gettext("Invalid input. Enter a string at least 20 characters long.") << std::endl;
}
EOF
g++ -o plt plt.cxx
xgettext --package-name plt --package-version 1.2 --default-domain plt --output plt.pot plt.cxx 
msginit --no-translator --locale pl_PL --output-file plt_polish.po --input plt.pot
sed --in-place plt_polish.po --expression='/#: /,$ s/""/"Nieprawidłowo wprowadzone dane. Wprowadź ciąg przynajmniej 20 znaków."/'
mkdir --parents ./pl_PL.utf8/LC_MESSAGES
msgfmt --check --verbose --output-file ./pl_PL.utf8/LC_MESSAGES/plt.mo plt_polish.po
LANGUAGE=pl_PL.utf8 ./plt
هل كانت مفيدة؟

المحلول

يحرر plt_polish.po وتغيير خط النوع المحتوى إلى "نوع المحتوى: نص / عادي؛ Charset = UTF-8 N" (تغيير المجمع من ASCII إلى UTF-8)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top