我有一个英文文本,我想把它转换成法文。
我遵循的顺序如下:
我已将.mo文件复制到“/ usr / share / locale / fr / LC_MESSAGES”
这是我的main.c文件代码:
int main()
{
setlocale(LC_ALL,"");
bindtextdomain("main","/usr/share/locale");
textdomain("main");
printf( gettext("Hello world\n"));
return (0);
}
当我执行程序时,文本的法语版本不会在终端中打印。 这个问题可能是什么原因?
这是我的fr.po文件
# French translations for GNU main package.
# Copyright (C) 2010 THE GNU main'S COPYRIGHT HOLDER
# This file is distributed under the same license as the GNU main package.
#
msgid ""
msgstr ""
"Project-Id-Version: GNU main 0.1\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-12-29 10:14+0530\n"
"PO-Revision-Date: 2010-12-29 12:21+0530\n"
"Last-Translator: Lenin\n"
"Language-Team: French\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ASCII\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: main.c:29
#, c-format
msgid "Hello world\n"
msgstr "Bonjour tout le monde\n"
这是我从当前目录调用msgfmt:
msgfmt -c -v -o main.mo fr.po
答案 0 :(得分:3)
您无需触摸系统文件/目录。如果你正在发展,你不应该碰他们。
我尝试了以下代码:
#include <stdio.h>
#include <locale.h>
#include <libintl.h>
int main(int argc, char **argv)
{
setlocale(LC_ALL, "");
bindtextdomain("main", ".");
textdomain("main");
printf(gettext("Hello world\n"));
return (0);
}
这与您的代码非常相似,只是我在我的开发目录(当前版本)中测试本地化。
创建翻译模板
$ xgettext -o main.pot main.c
使用模板创建要翻译的文件:
$ msginit --no-translator -l es -o es.po -i main.pot
Created es.po.
$ msginit --no-translator -l fr -o fr.po -i main.pot
Created fr.po.
编辑和翻译文件。将 Project-Id-Version 设置为 main 并翻译行。在这种情况下,根据我的源代码第23行。
为翻译创建目标目录:
$ mkdir -p es/LC_MESSAGES
$ mkdir -p fr/LC_MESSAGES
编译并安装翻译:
$ msgfmt -o es/LC_MESSAGES/main.mo es.po
$ msgfmt -o fr/LC_MESSAGES/main.mo fr.po
编译程序:
$ make main
cc main.c -o main
运行程序:
$ LANGUAGE=C ./main
Hello world
$ LANGUAGE=es ./main
Hola mundo
$ LANGUAGE=fr ./main
Bonjour tout le monde
那就是。
您可能希望在翻译之前编译程序并修复错误。