代码之家  ›  专栏  ›  技术社区  ›  CW Holeman II

波兰语文本上的msgfmt“无效多字节序列”错误

  •  6
  • CW Holeman II  · 技术社区  · 17 年前

    使用 Complete C++ i18n gettext() “hello world” example 我将区域设置从“ 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
    
    1 回复  |  直到 9 年前
        1
  •  11
  •   Douglas Leeder    17 年前

    编辑 plt_polish.po 并将内容类型行更改为“内容类型:text/plain;字符集=UTF-8\n”(将字符集从ASCII更改为UTF-8)