linux什么意思中文翻译,linux中文
<
}
这 里我们看到,同样的, 把 input 中我们输入的 string 扔给 string. 下面就用到了 QTextCodec 了.我们可以把
QTextCodec *codec=QTextCodec::codecForName("big5"); 写成两行,这样比较方便看:
代码:
QTextCodec *codec;
codec=QTextCodec::codecForName("big5");
第一行是通过 QTextCodec 建立 codec 第二行呢,告诉 QT 我们的 codec 是用 big5 编码的. (简体中文就要用 gb2312)
最 后,我们通过 codec->formUnicode(string) 把 Unicode 转换成我们需要用的 big5 码. ( QT
default 全部是用 Unicode,这也就是为什么开始的时侯,如果我们没有通过 QTextCodec 转码,看到的中文都是 ?? 了.因为
Unicode 的标准就是不认得的 code 一律用 ?? 来表示)最后我们定义一个 QCString chinese_string,
代码:
QCString chinese_string=codec->fromUnicode(string);
而 chinese_string就是已经被 codec 转码过的 big5 code 的了. codec->fromUnicode(string) 这里是做转码的动作.
现在重新 make 所 build 出来的 chinese 就已经具备了最基本的中文程序的要求了.现在在输入中文到程序中,您就可以在 X 终端模拟中看到中文了.
那么这个程序已经具备了中文处理能力,为什么还被叫做最基本的呢中文处理呢?因为我们的程序目前并不会判断 locale, 而自动设定相应的编码.现在我们把这个 chinese 的程序作成一个相对完整的中文程序.
QTextCodec 中还给我们提供了一个读取当然于言环境的 function 叫做 locale. QTextCodec::locale() 就会返回当前使用者的 locale. 现在让我们来看看一个相对完整的中文程序:
Tips: 这个程序中对 locale 名称的定义 是按照 RedHat 7.3 中对中文 locale 的定义为标准的,也就是说: 繁体中文 : zh_TW.Big5 简体中文 : zh_CN.GB2312
代码:
/* chinese.h */
#include
#include
#include
#include
#include
class Chinese: public QWidget
{
Q_OBJECT
public:
Chinese();
private:
QLabel *label;
QLineEdit *input;
QString locale;
private slots:
void display();
};
我们这里加入了一个新的 QString locale, 用来做 locale 的判断.
代码:
/* chinese.cpp */
#include "chinese.moc"
#include
#include
Chinese::Chinese()
{
resize(200,100);
QTranslator translator(this);
locale=QTextCodec::locale();
translator.load("chinese."+locale, ".");
qApp->installTranslator(&translator);
label=new QLabel(tr( "Input Line:"), this);
label->setGeometry(10,10,90,30);
input=new QLineEdit(this);
input->setGeometry(10, 40, 180, 30);
input->setFocus();
connect(input, SIGNAL(returnPressed()), this, SLOT(display()));
}
void Chinese::display()
{
QString string;
string=input->text();
QTextCodec *codec;
if (locale == "zh_TW.Big5")
codec=QTextCodec::codecForName("big5");
if (locale == "zh_CN.GB2312")
codec=QTextCodec::codecForName("gb2312");
QCString encoded_string=codec->fromUnicode(string);
cout<<
}
在 chinese.cpp 里面, Chinese::Chinese 我们加入 locale 的判断. 从而自动加载相应的 .qm 文件.
locale=QTextCodec::locale() 就把 QTextCodec 返回的值,也就是当前使用的 locale 传给了
locale. (locale 是一个 QString)然后我们用 translator.load("chinese."+locale,
"."); 实际上就是说 chinese.+当然 locale (zh_TW.Big5 或者 zh_CN.GB2312)也就是说,最后我们加载的
locale 是 chinese.zh_TW.Big5 或者是 chinese.zh_CN.GB2312. 这样只要对应不同的 locale
环境翻译不同的 .po 然后制作成基于 locale 名称的 qm, QT 就可以帮我们自动判断在哪个locale 要加载那个文件了.
(chinese.zh_TW.Big5.qm 或者 chinese.zh_CN.GB2312.qm)
Tips: QT 在载入 .qm 文件的时侯,如果该文件不存在.那么 就会用程序中的语言来显示.所以不需要为了程序是否 可以找到该 .qm 文件而担心.(不用去写 这方面的 error handle)
而 在 void Chinese::display() 中,我们也做一个自动的判断,用来判断使用者是在哪个中文环境中输入中文的. 如果是
zh_TW.Big5 我们就把转码设定为 big5, 如果是 GB2312 就设定为 gb2312. 而如果是其它的,就忽略不管了.
同时在修改一下我们的 Makefile
代码:
INCL= -I$(QTDIR)/include -I/usr/include/kde
CFLAGS= -pipe -O2 -fno-strength-reduce
LFLAGS= -L$(QTDIR)/lib -L$(KDEDIR)/lib -L/usr/X11R6/lib
LIBS= -lkdecore -lkdeui -lqt -lX11 -lXext -ldl
CC=g++
MOC=moc
chinese: chinese.moc chinese.o main.o
$(CC) $(LFLAGS) -o chinese chinese.o main.o $(LIBS)
chinese.moc: chinese.h
$(MOC) chinese.h -o chinese.moc
main.o: main.cpp
chinese.o: chinese.cpp
po:
findtr3 chinese.cpp > chinese.zh_TW.Big5.po
findtr3 chinese.cpp > chinese.zh_CN.GB2312.po
qm:
msg2qm2 chinese.zh_TW.Big5.po chinese.zh_TW.Big5.qm
msg2qm2 chinese.zh_CN.GB2312.po chinese.zh_CN.GB2312.qm
clean:
rm -f *.o
rm -f *.bak
rm -f *.moc
rm -f chinese
.SUFFIXES: .cpp .h
.cpp.o:
$(CC) -c $(CFLAGS) $(INCL) -o $@ $<
在 Makefile 中加入 po 和 qm. 这样我们用 make po 就会产生 chinese.zh_TW.Big5.po 和
chinese.zh_CN.GB2312.po 了.把这两个 po 翻译好以后.用 make qm 就会做出
chinese.zh_TW.Big5.qm 和 chinese.zh_CN.GB2312.qm 这两个 qm 文件.现在试试看.在简体或者繁体的
X 终端模拟环境下.我们的程序会自动的显示相应的翻译信息.也会自动接受相应 locale 下面的中文输入法了.
GTK+
在 Linux 下面,还有一个常用的 GUI 环境开发语言.就是GTK+ 了. 大家都知道, gnome 这套桌面环境就是由 GTK+ 开发出来的. 现在我们来看看 GTK+ 如何处理中文.
Tips: 这里我们以 GTK 1.x 为例. (因为 GTK 2.x 目前 还不算是非常的稳定)
Tips: 如果您希望在自己的计算机中编译本文中的范例, 您需要安装 gcc, gtk+, gtk+-devel, make , gettext, 这些套件.
首先我们先来用 GTK 写一个跟前面 QT 中的那个程序功能完全一样的程序.
代码:
/* chinese.c */
#include
#include
void display (GtkWidget *widget, GtkWidget * entry)
{
const gchar *entry_text;
entry_text=gtk_entry_get_text( GTK_ENTRY (entry));
printf ("%s\n", entry_text);
}
void destroy(GtkWidget *widget, gpointer *data)
{
gtk_main_quit();
}
int main(int argc, char *argv[])
{
GtkWidget *window;
GtkWidget *vbox;
GtkWidget *entry;
GtkWidget *label;
gtk_init(&argc, &argv);
window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_signal_connect(GTK_OBJECT(window), "destroy", GTK_SIGNAL_FUNC(destroy),NULL);
gtk_container_border_width(GTK_CONTAINER(window),10);
vbox = gtk_vbox_new (FALSE, 0);
gtk_container_add (GTK_CONTAINER (window), vbox);
gtk_widget_show(vbox);
label= gtk_label_new("Input Line");
gtk_box_pack_start(GTK_BOX (vbox), label, TRUE, TRUE, 0);
gtk_widget_show(label);
entry= gtk_entry_new();
gtk_signal_connect(GTK_OBJECT(entry), "activate",
GTK_SIGNAL_FUNC(display), entry);
gtk_box_pack_start(GTK_BOX (vbox), entry, TRUE, TRUE, 0);
gtk_widget_show(entry);
gtk_widget_show(window);
gtk_main();
return 0;
}
里 面的 void display() 就相当于前面 QT 中的 void Chinese::display()
是用来把我们输入的东西显示在您的 X 终端模拟上面的. 我们首先通过 gchar 来定义一个 entry_text, 然后用
gtk_entry_get_text(GTK_ENTRY())来把我们输入的东西抓出来,放到 entry_text 中去.再用 C 语言中的
printf 把它显示在我们的 X 终端模拟上面.
void destory() 告诉程序,如果收到程序结束的信号,(例如你按了窗口中的那个小 X )那么就代表程序结束. 退出 gtk 的 main loop.
我 们的 main 程序中. 定先义了 window, vbox, entry, label 这己个物件.这里面, window,
就是我们看到的主窗口. vbox 是 gtk+ 中一种用来排列对象的东西. entry 是给我们输入用的(QT 中的
QLineEdit)lable 是作为显示一个信息而用的. (QT 中的 QLabel)
gtk_init() 帮我们初始化 gtk.
window=gtk_window_new 就通过 gtk_window_new 把 window 定一为一个新的窗口.也就是我们的主窗口了.
GTK_WINDOW_TOPLEVEL 则告诉程序,我们的这个主窗口显示的时侯,是在最上面的. ( TOPLEVEL)
gtk_signal_connect(GTK_OBJECT(window), "destroy",
GTK_SIGNAL_FUNC(destroy),NULL); 这一行,首先我们连接一个 gtk 的信号, 对象是在 window 上面.
信号的内容为 destroy, 当收到这个信号以后,用 GTK_SIGNAL_FUNC() 去呼叫 destroy() 这个 function .
传给 function 的值为 NULL. 也就是说,当我们的主窗口 window 接收到遗个 destroy 的信号的时侯, 去呼叫
destroy() 结束 gtk 程序. 这里的 destroy 信号就是代表你关闭主窗口的意思. 在 gtk 中,当你关闭了一个窗口, gtk
就会帮你送出一个 destroy 的信号.
gtk_container_border_width(GTK_CONTAINER(window),10); 定义了我们的主窗口的 border(边缘)宽度为 10.
vbox = gtk_vbox_new (FALSE, 0); 定义了一个新的 gtk_vbox 出来.用来排列我们放在主窗口中的对象.
gtk_container_add (GTK_CONTAINER (window), vbox); 就把 vbox 通过 gtk_container_add 加入到我们的主窗口 window 中.
gtk_widget_show(vbox); 通过呼叫 gtk_widget_show 在主窗口中显示我们的 vbox
label= gtk_label_new("Input Line"); 通过 gtk_label_new 定义一个 label,而这个 label 显示的内容为 "Input Line"
gtk_box_pack_start(GTK_BOX (vbox), label, TRUE, TRUE, 0); 是通过 gtk_box_pack_start 把 label 放到我们前面生成的 vbox 中.
gtk_widget_show(label); 再次利用 gtk_widget_show, 这次是在 vbox 中显示我们新加入的 label.
entry = gtk_entry_new(); 用 gtk_entry_new 定义了一个 entry. 这里就是指产生一个可以接受文字输入的对象,就好像 QT 中的 LineEdit 一样.
gtk_signal_connect(GTK_OBJECT(entry), "activate",
GTK_SIGNAL_FUNC(display), entry); 这里,我们连接一个 gtk 信号,信号作用于
entry,也就是我们前面产生的那个文字输入对象.当我程序接收到 "activate" 这个信号的时侯,就去呼叫 display() 这个
function, 同时把 entry 传给 display(). 这里的 activate 信号,就是当我们按下键盘的 enter
键时所产生的. gtk 当适用者按下 enter 键的时侯,就会送初一个 activate 的信号.所以当我们输入一些文字以后,按下 enter
键,这些文字就会被送到 display() 去处理了.
gtk_box_pack_start(GTK_BOX (vbox), entry, TRUE, TRUE, 0); 再次用 gtk_box_pack_start 把对象 entry 加入到 vbox 中.
gtk_widget_show(entry); 显示 vbox 中的对象 entry
gtk_widget_show(window);
gtk_main();
最后我们显示我们的主窗口.并且进入 gtk 的 main loop.
Tips: 这里我们利用 gtk_widget_show() 先显示了 window 中的 vbox, label, entry,
最后才去显示主窗口 window 是因为这样的话,当主窗口 window 显示出来的时侯. vbox, label, entry 已经比
window 先显示好了.这样我们看到的 就是一个整体的 window. 有主窗口,有 label 和 entry. vbox, label,
entry 都是在主窗口显示以前就已经画好的了. 所以主窗口一出来,不用等待 label, entry 的出现. 如果先去显示 window,
再去显示 vbox, label, entry, 那么在比较慢的计算机上面(或者你的程序比较复杂的情况下)
你将会先看到一个空白的主窗口出现,然后再慢慢的画出 label 和 entry 来.
现在来看一下我们的 Makefile
代码:
INCL= -I/usr/lib/glib/include/ -I/usr/include/gtk-1.2/gdk/ -I/usr/include/gtk-1.2/ \
-I/usr/include/glib-1.2/
LIBS= -L/usr/X11R6/lib
LFLAGS= -lglib -lgdk -lgtk -lX11 -lXext -lm
CC=gcc
chinese: chinese.c
$(CC) $(INCL) -o chinese chinese.c $(LIBS) $(LFLAGS)
clean:
rm -f chinese
rm -f *.bak
.SUFFIXES: .c
.c.o:
$(CC) -c $(CFLAGS) $(INCL) -o $@ $<
写 好 Makefile 以后. make 一下,就可以编译出 GTK+ 版的 chinese 了.执行以后,
我们可以发现,在可以输入文字的地方,直接输入中文,就可以在 X 终端模拟中正确的显示出来中文. 所以我们需要的,就只有把接口中文化一下就好了.
中文化 gtk+ 程序的时侯,会比 QT 稍稍麻烦些.
代码:
#include
#include
#include
#include
#define PACKAGE "chinese"
#define LOCALEDIR "/home/goldencat/program/gtk/chinese/final"
#define _(STRING) gettext(STRING)
void display(GtkWidget *widget, GtkWidget * entry)
{
const gchar *entry_text;
entry_text=gtk_entry_get_text( GTK_ENTRY (entry));
printf ("%s\n", entry_text);
}
void destroy(GtkWidget *widget, gpointer *data)
{
gtk_main_quit();
}
int main(int argc, char *argv[])
{
GtkWidget *window;
GtkWidget *vbox;
GtkWidget *entry;
GtkWidget *label;
gtk_set_locale();
bindtextdomain (PACKAGE, LOCALEDIR);
textdomain (PACKAGE);
gtk_init(&argc, &argv);
window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_signal_connect(GTK_OBJECT(window), "destroy", GTK_SIGNAL_FUNC(destroy),NULL);
gtk_container_border_width(GTK_CONTAINER(window),10);
vbox = gtk_vbox_new (FALSE, 0);
gtk_container_add (GTK_CONTAINER (window), vbox);
gtk_widget_show(vbox);
label= gtk_label_new(_("Input Line"));
gtk_box_pack_start(GTK_BOX (vbox), label, TRUE, TRUE, 0);
gtk_widget_show(label);
entry= gtk_entry_new();
gtk_signal_connect(GTK_OBJECT(entry), "activate",
GTK_SIGNAL_FUNC(display), entry);
gtk_box_pack_start(GTK_BOX (vbox), entry, TRUE, TRUE, 0);
gtk_widget_show(entry);
gtk_widget_show(window);
gtk_main();
return 0;
}
首 先我们需要 locale.h 和 libintl.h 然后还要定义 PACKAGE, LOCALEDIR 这里的 PACKAGE
就是我们翻译后的 mo 文件的名称. 这里把它定义为 chinese 因为我们的程序就叫做 chinese, GTK+ 会在固定的地方寻找 mo
文件.在 RedHat 7.3 中,会在 /usr/share/locale/你的locale/LC_MESSAGES 下面寻找 mo 文件.
对于中文来说,也就是 /usr/share/locale/ 下面的 zh_TW zh_TW.Big5 zh_CN zh_CN.GB2312
这几个目录中的 LC_MESSAGES 下面.去寻找 mo 文件.
这里我们去定义 LOCALEDIR 就是告诉 gtk+ 我们希望 gtk+ 到哪里去寻找 mo 文件.
/home/goldencat/program/gtk/chinese/final 就是 chinese.c
的位置.也就是我们的当前工作目录.这样 gtk+ 就不会再去 /usr/share/locale/ 下面找相应语言环境中的
LC_MESSAGES 中寻找 mo 文件了. 而是在您 LOCALEDIR 中定义的位置.(配合 bindtextdomain 使用)
而 后面的 #define _(STRING) gettext(STRING) 只是说把 gettext(STRING)换成 _(STRING)
gettext 就好像前面 QT 中的那个 tr 一样.在产生 po 文件的时侯,就是根据 gettext
来决定哪些信息是需要翻译的.只不过每个需要翻译的信息都把 ("English String") 改成 (gettext("English
String")) 未免有些麻烦.所以 GTK+ 中,大家都把 gettext(STRING) 换成 _(STRING), 这样我们就只需要
(_("English String") 就可以了.
Tips: 如果您在您的计算机中编译这些东西,请记得把 #define LOCALEDIR "/home/goldencat/program/gtk/chinese/final" 改换成您自己的工作目录
在 gtk_init() 之前,我们需要告诉 gtk 我们有翻译的信息.所以要有下面三个动作:
gtk_set_locale();
bindtextdomain (PACKAGE, LOCALEDIR);
textdomain (PACKAGE);
get_set_locale() 告诉 gtk 去找我们现在用的 locale (QT 中的 TextCodec::locale())这样 gtk+ 就会自动判断出当前 locale 的环境,然后去相应的环境下面找 mo 文件.
bindtextdomain() 则是告诉 gtk 去哪里找 mo 文件. 这里我们要它去我们定义的 LOCALEDIR 下面找 PACKAGE (chinese)
textdomain() 就是载入翻译的信息啦.
最后就是把 label= gtk_label_new("Input Line"); 改成 label= gtk_label_new(_("Input Line")); 这样 xgettext 就可以找到需要翻译的信息了.
现在我们就算是完成了程序这边对中文化的支持了. gtk+ 需要用 xgettext 来产生 po 文件的.所以我们用:
xgettext -k_ chinese.c -o chinese.po
这里的 -k_ 就是说 keywork 是 _ ,也就是说 xgettext 会去找程序中的 _(STRING) 出来. 现在打开 chinese.po 看看:
代码:
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR , YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2002-06-23 17:44-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME \n"
"Language-Team: LANGUAGE \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
#: chinese.c:38
msgid "Input Line"
msgstr ""
跟翻译 QT 的 po 一样,我们真正需要动到的只有 charset 和 msgstr "
" 而已.当然,您也可以加入相应的翻译信息,
PO-Revision-Date: 翻译时间
"Last-Translator: 翻译人 翻译人_E-Mail地址
Language-Team: 翻译团队 翻译团队_E-Mail_地址
下面是翻译好的 po
代码:
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR , YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2002-06-23 17:44-0400\n"
"PO-Revision-Date: 2002-06-23 14:45-0400\n"
"Last-Translator: Goldencat &l;ruili@worldnet.att.net>\n"
"Language-Team: LANGUAGE &l;ruili@worldnet.att.net>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=Big5\n"
"Content-Transfer-Encoding: 8bit\n"
#: chinese.c:38
msgid "Input Line"
msgstr "中文输入"
存档以后.我们用:
msgfmt -o chinese.mo chinese.po
生成 mo 文件.
跟 QT 不同的是, GTK+ 不是通过判断 mo 名子来载入不同的的 mo 的. 在 GTK+ 下面.任何 locale (语言环境)的 mo
名子都叫做 chinese.mo 那么 GTK+ 是如何分辨不同的 locale 需要加载相对语言的 mo 呢? GTK+ 是通过把不同的
mo 放在不同的目录下,然后通过判断目录名称来找到相应的 mo 文件的. 所以存放 GTK+ mo 文件的目录名,需要跟相应的 locale
一致. GTK+ 就会在这个目录下的 LC_MESSAGES 中找到所需要的 mo 文件了. 所以我们首先需要在当前目录下做出相应的存放 mo
文件的目录.
$mkdir zh_TW
$mkdir zh_TW/LC_MESSAGES
$cp -r zh_TW zh_TW.Big5
$cp -r zh_TW zh_CN
$cp -r zh_TW zh_CN.GB2312
这样我们就有了中文所需要的四个最基本的目录了. 现在我们把 chinese.mo 放到相应的目录下面
$cp chinese.mo zh_TW/LC_MESSAGES
$cp chinese.mo zh_TW.Big5/LC_MESSAGES
然后在做一份 GB2312 的 mo 放在 zh_CN 和 zh_CN.GB2312
实 际上,在 RedHat7.3 中, export LANG=zh_TW.Big5
情况下(LC_MESSAGES=zh_TW.Big5)GTK+ 会在 zh_TW/LC_MESSAGES 下面寻找 mo 文件. 而
export LANG=zh_CN.GB2312 的情况下(LC_MESSAGES=zh_CN.GB2312)GTK+ 则是在
zh_CN.GB2312/ LC_MESSAGES 下面寻找 mo 文件.
现在试试在不同的 locale 运行一下 ./chinese 您会看到, 程序已经被中文化了.那个 Input Line 已经换成中文的 "中文输入" 了.
最后,我们再来改一下我们的 Makefile, 帮助我们产生 po, mo 并且放到相应的语言目录下.
代码:
INCL= -I/usr/lib/glib/include/ -I/usr/include/gtk-1.2/gdk/ -I/usr/include/gtk-1.2/ \
-I/usr/include/glib-1.2/
LIBS= -L/usr/X11R6/lib
LFLAGS= -lglib -lgdk -lgtk -lX11 -lXext -lm
CC=gcc
chinese: chinese.c
$(CC) $(INCL) -o chinese chinese.c $(LIBS) $(LFLAGS)
clean:
rm -f chinese
rm -f *.bak
po:
xgettext -k_ chinese.c -o chinese_big5.po
xgettext -k_ chinese.c -o chinese_gb2312.po
mo:
msgfmt -o chinese_big5.mo chinese_big5.po
msgfmt -o chinese_gb2312.mo chinese_gb2312.po
mo_install:
cp chinese_big5.mo zh_TW/LC_MESSAGES
cp chinese_big5.mo zh_TW.Big5/LC_MESSAGES
cp chinese_gb2312.mo zh_CN/LC_MESSAGES
cp chinese_gb2312.mo zh_CN.GB2312/LC_MESSAGES
.SUFFIXES: .c
.c.o:
$(CC) -c $(CFLAGS) $(INCL) -o $@ $<
C/C++
其是在 C/C++ 的一般程序中,也是可以中文化的. 在 C/C++ 程序中.中文化的步骤跟 GTK+ 己乎是一样的. 这里简单介绍一下:
代码:
/* chinese.c */
#include
main ()
{
printf(_("This is a test.\n"));
}
现在我们来中文化这只程序:
首先我们需要 libintl.h 和 locale.h 再就是
#define PACKAGE "chinese" #define _(STRING) gettext(STRING)
然后用 setlocale() 和 textdomain() 来完成中文化
代码:
#include
#include
#include
#define _(STRING) gettext(STRING)
#define PACKAGE "chinese"
main ()
{
setlocale(LC_MESSAGES, "");
textdomain(PACKAGE);
printf(_("This is English.\n"));
}
然后跟 GTK+ 中的制作 mo 的方法一样.用 xgettext 制作出 po 文件.
翻译好以后,用 msgfmt 制作成 mo 文件. 把这个 mo 文件
copy 到 /usr/locale/你的_locale/LC_MESSAGES下面.
textdoamin 会去那里找 mo 文件.现在再重新跑您的程序.
"This is English" 就变成您改的中文了.
linux什么意思中文翻译,linux中文相关推荐
- birt中文翻译_BIRT中文指南
From SixSun - Date:2006-4-27 BIRT 中文指南 BIRT - 简介 BIRT 是一个 Eclipse-based 开放源代码报表系统.它主要是用在基于 Java 与 J2 ...
- java中 toast的意思,toast什么意思中文翻译(中文解释toast含义及应用)
Cheers.Bottom up, toast都是干杯,但你知道吗?它们用法不一样.怎么在不同社交场合说出得体又道地的英文,让你更自在,更自信,又更受欢迎! 1.举杯祝贺/干杯 Cheers! / M ...
- Linux下优秀的翻译工具
概述 完美解决 Linux 环境下,屏幕取词定位不准确,有很多软件界面甚至无法取词的问题.并可以进行整段即时翻译,翻译结果优秀. 在 Windows 环境下,有很多可用的即时翻译翻译软件,屏幕取词功能 ...
- Linux内核配置选项的说明,Linux内核配置选项翻译
Linux内核配置选项翻译 Linux内核配置选项翻译2.6.19.1(转) 内容目录 1. Code maturity level options 2 2. General setup 常规安装选项 ...
- Objective-C 编程艺术 (Zen and the Art of the Objective-C Craftsmanship 中文翻译)
# 禅与 Objective-C 编程艺术 (Zen and the Art of the Objective-C Craftsmanship 中文翻译) - 原文 <https://githu ...
- linux 编译报错 not a directory,Linux常见英文报错中文翻译
Linux常见英文报错中文翻译(菜鸟必知) 1.command not found 命令没有找到 2.No such file or directory 没有这个文件或目录 3.Permission ...
- Linux常见英文报错中文翻译(菜鸟必知)
Linux常见英文报错中文翻译(菜鸟必知) 1.command not found 命令没有找到 2.No such file or directory 没有这个文件或目录 3.Permission ...
- linux运维常见英文报错中文翻译(菜鸟必知)
linux常见英文报错中文翻译(菜鸟必知) 1.command not found 命令没有找到 2.No such file or directory 没有这个文件或目录 3.Permissio ...
- 论文中文翻译——Double-Fetch情况如何演变为Double-Fetch漏洞:Linux内核中的双重获取研究
本论文相关内容 论文下载地址--Web Of Science 论文中文翻译--How Double-Fetch Situations turn into Double-Fetch Vulnerabil ...
最新文章
- HDU-4738-Caocao's Bridges(tarjan)
- 解决kubernetes中ingress-nginx配置问题
- 多线程一定比单线程快吗
- Android开发学习之路--Camera之初体验
- 判断一个字符串是否全部不相同
- java weblogic 配置_java----weblogic部署应用
- linux cifs windows 慢,windows上使用dockerIO特别慢有没有更优的解决方案?
- 绿盟科技鸿蒙系统,华为 X 绿盟科技,打造“云原生安全新生态”
- 个人pkm软件 pim软件_个人申请软件著作权需要走哪些流程
- python template languages_Python template.TemplateSyntaxError方法代碼示例
- 域用用户怎么允许共享_w7如何共享打印机 w7共享打印机步骤【详细介绍】
- Win11连不上网怎么办 win11连不上网的设置方法
- Sentaurus TCAD学习
- Python学习笔记——python基础 3. 字符串
- 手机Web开发框架集
- Python-玩转数据-Scrapy中Spiders
- stm32写字机器人资料 主控stm32f103c8t6 包含程序
- Excel打开时提示“因为文件格式或文件扩展名无效。请确定文件未损坏,并且文件扩展名与文件的格式匹配。”最快的解决办法
- 强大免费的在线格式转换工具,三步轻松完成。
- Unity Timeline运行时脚本控制Mute和UnMute(Mute/UnMute a timeline track via scripting)