Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 一个简单的gettext示例在linux上不起作用_C_Gettext - Fatal编程技术网

C 一个简单的gettext示例在linux上不起作用

C 一个简单的gettext示例在linux上不起作用,c,gettext,C,Gettext,我是C语言的gettext新手,尝试从C开始 但我没有得到结果。这是我的工作结构和源代码。我在Linux上工作 gettext |- hello.c |- hello (executable) |- po |- hello.pot |- fr |- hello.po |- hello.mo |- fr |- LC_MESSAGES |- hello.mo 你好,c #包括 #包括 #包括 #包括 #定义(字符串)get

我是C语言的gettext新手,尝试从C开始

但我没有得到结果。这是我的工作结构和源代码。我在Linux上工作

gettext
 |- hello.c
 |- hello (executable)
 |- po
    |- hello.pot
    |- fr
       |- hello.po
       |- hello.mo
 |- fr
    |- LC_MESSAGES
        |- hello.mo
你好,c

#包括
#包括
#包括
#包括
#定义(字符串)gettext(字符串)
int main()
{
setlocale(LC_ALL,“”);
bindtextdomain(“你好”,getenv(“PWD”));
textdomain(“你好”);
printf(u(“Hello!\n”);
返回0;
}
po/hello.pot

# SOME DESCRIPTIVE TITLE.
# Copyright (C) 2020 hardboiled65
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: Hello 1.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-09-16 19:11+0900\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

#: hello.c:15
#, c-format
msgid "Hello!\n"
msgstr ""
它似乎没有搜索放置的目录.mo(在本例中为PWD)


我试一试有什么问题?甚至我将.mo文件放在
/usr/local/share/locale/fr/LC\u MESSAGES
中,并将locale更改为fr\u fr,但程序仍然打印“Hello!”

我发现了问题
LANG=fr_fr.UTF-8./hello
有效。但是我不知道为什么别名不起作用。区域设置标识符是特定于平台的,实际上甚至是特定于系统的,因为您有很多配置选项。您在GNU/Linux上使用glibc,对吗?
LANG=fr\u fr ls/exists/not
打印什么?您是否设置了环境变量
LC\u ALL
LANGUAGE
locale-a
的输出是什么?我发现了这个问题
LANG=fr_fr.UTF-8./hello
有效。但是我不知道为什么别名不起作用。区域设置标识符是特定于平台的,实际上甚至是特定于系统的,因为您有很多配置选项。您在GNU/Linux上使用glibc,对吗?
LANG=fr\u fr ls/exists/not
打印什么?您是否设置了环境变量
LC\u ALL
LANGUAGE
locale-a
的输出是什么?
# French translations for Hello package.
# Copyright (C) 2020 hardboiled65
# This file is distributed under the same license as the Hello package.
# hardboiled65 <hardboiled65@probook>, 2020.
#
msgid ""
msgstr ""
"Project-Id-Version: Hello 1.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-09-16 19:11+0900\n"
"PO-Revision-Date: 2020-09-16 19:14+0900\n"
"Last-Translator: hardboiled65 <hardboiled65@probook>\n"
"Language-Team: French <traduc@traduc.org>\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"

#: hello.c:15
#, c-format
msgid "Hello!\n"
msgstr "Bonjour!\n"
execve("./hello", ["./hello"], 0x7ffe98223800 /* 67 vars */) = 0
brk(NULL)                               = 0x55f5d6a8c000
arch_prctl(0x3001 /* ARCH_??? */, 0x7fff277f8300) = -1 EINVAL (Invalid argument)
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=239979, ...}) = 0
mmap(NULL, 239979, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f7a399d5000
close(3)                                = 0
openat(AT_FDCWD, "/usr/lib/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\220\202\2\0\0\0\0\0"..., 832) = 832
pread64(3, "\6\0\0\0\4\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0"..., 784, 64) = 784
pread64(3, "\4\0\0\0\20\0\0\0\5\0\0\0GNU\0\2\0\0\300\4\0\0\0\3\0\0\0\0\0\0\0", 32, 848) = 32
pread64(3, "\4\0\0\0\24\0\0\0\3\0\0\0GNU\0\364[g\253(\257\25\201\313\250\344q>\17\323\262"..., 68, 880) = 68
fstat(3, {st_mode=S_IFREG|0755, st_size=2159552, ...}) = 0
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f7a399d3000
pread64(3, "\6\0\0\0\4\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0"..., 784, 64) = 784
mmap(NULL, 1868448, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f7a3980a000
mmap(0x7f7a39830000, 1363968, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x26000) = 0x7f7a39830000
mmap(0x7f7a3997d000, 311296, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x173000) = 0x7f7a3997d000
mmap(0x7f7a399c9000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1be000) = 0x7f7a399c9000
mmap(0x7f7a399cf000, 12960, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f7a399cf000
close(3)                                = 0
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f7a39808000
arch_prctl(ARCH_SET_FS, 0x7f7a399d4540) = 0
mprotect(0x7f7a399c9000, 12288, PROT_READ) = 0
mprotect(0x55f5d5e4d000, 4096, PROT_READ) = 0
mprotect(0x7f7a39a3c000, 4096, PROT_READ) = 0
munmap(0x7f7a399d5000, 239979)          = 0
openat(AT_FDCWD, "/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=4383248, ...}) = 0
mmap(NULL, 4383248, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f7a393d9000
close(3)                                = 0
brk(NULL)                               = 0x55f5d6a8c000
brk(0x55f5d6aad000)                     = 0x55f5d6aad000
openat(AT_FDCWD, "/usr/share/locale/locale.alias", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=2998, ...}) = 0
read(3, "# Locale name alias data base.\n#"..., 4096) = 2998
read(3, "", 4096)                       = 0
close(3)                                = 0
openat(AT_FDCWD, "/usr/lib/locale/fr_FR/LC_IDENTIFICATION", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/locale/fr/LC_IDENTIFICATION", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
fstat(1, {st_mode=S_IFCHR|0600, st_rdev=makedev(0x88, 0xa), ...}) = 0
write(1, "Hello!\n", 7Hello!
)                 = 7
exit_group(0)                           = ?
+++ exited with 0 +++