MSGFMT "تسلسل متعدد البياضات غير صالح" خطأ في نص بولندي
-
23-08-2019 - |
سؤال
استخدام إكمال 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)
لا تنتمي إلى StackOverflow