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" 就变成您改的中文了.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值