【问题标题】:How to trace the C++ GNU xgettex execution?如何跟踪 C++ GNU xgettex 执行?
【发布时间】:2016-07-27 08:05:20
【问题描述】:

您好,我正在用 c++ 编写 i18n 的示例代码。我引用了以下link

输出以英文显示文本。这里有什么问题?

 #include "start.hpp"
 #include <iostream>
 #include <locale.h>
 #include "/opt/local/share/gettext/gettext.h"
 using namespace std;

int main(int argc, char *argv[]){

char* cwd = getenv("PWD");
std::cout << "getenv(PWD): " << (cwd?cwd:"NULL") << std::endl;
char* l = getenv("LANG");
std::cout << "getenv(LANG): " << (l?l:"NULL") << std::endl;
char* s = setlocale(LC_ALL, "");
std::cout << "setlocale(): " << (s?s:"NULL") << std::endl;
std::cout << "bindtextdomain(): " << bindtextdomain("hello", cwd) <<         std::endl;
std::cout << "textdomain(): " << textdomain( "hello") << std::endl;
std::cout << gettext("hello, world!") << std::endl;

return 0;

}

$> g++ -o start start.cpp

$> xgettext -d start -o start.pot start.cpp

$> msginit --no-translator -l es_MX -o start_es.po -i start.pot

已创建 start_es.po。

我使用 poedit.app 打开了 start_es.po 文件并翻译了文本并保存了

$> mkdir -p es/LC_MESSAGES

$> msgfmt -c -v -o ./es/LC_MESSAGES/start.mo start_es.po

1 条已翻译的消息。

$>导出 LANG=es_MX

$> ./开始

【问题讨论】:

    标签: c++ internationalization gettext


    【解决方案1】:

    绑定域时代码中存在错误。我将其更改如下

    std::cout << "setlocale(): " << (s ? s : "NULL") << std::endl;
    std::cout << "bindtextdomain(): " << bindtextdomain(“start", cwd)<< std::endl;
    std::cout << "textdomain(): " << textdomain( “start") << std::endl;
    

    以下跟踪帮助我找到了答案。

     dhcp-140:Debug UserName $ sudo dtruss -f -t open ./start
    getenv(PWD): /Users/UserName/WorkPlace/lang/DerivedData/lang/Build/Products/Debug
    getenv(LANG): NULL
    setlocale(): NULL
    bindtextdomain(): 
    
    /Users/UserName/WorkPlace/lang/DerivedData/lang/Build/Products/Debug
    textdomain(): hello
    hello, world!
        PID/THRD  SYSCALL(args)          = return
     7213/0x16cd1:  open(".\0", 0x0, 0x1)        = 3 0
     7213/0x16cd1:  open("/usr/lib/dtrace/libdtrace_dyld.dylib\0", 0x0, 0x0)     = 3 0
     7213/0x16cd1:  open("/opt/local/lib/libintl.8.dylib\0", 0x0, 0x0)       = 3 0
     7213/0x16cd1:  open("/opt/local/lib/libiconv.2.dylib\0", 0x0, 0x0)      = 3 0
     7213/0x16cd1:  open("/dev/dtracehelper\0", 0x2, 0x7FFF540FDA20)         = 3 0
     7213/0x16cd1:  open("/Users/UserName/WorkPlace/lang/DerivedData/lang/Build/Products/Debug/./start\0", 0x0, 0x1FF)       = 3 0
     7213/0x16cd1:  open("/Users/UserName/WorkPlace/lang/DerivedData/lang/Build/Products/Debug/en/LC_MESSAGES/hello.mo\0", 0x0, 0x8)         = -1 Err#2
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-21
      • 1970-01-01
      • 2014-11-18
      • 1970-01-01
      • 2012-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多