免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: iakuf
打印 上一主题 下一主题

使用Perl Gtk2来写GUI图形用户界面 [复制链接]

论坛徽章:
1
辰龙
日期:2014-05-15 19:37:15
11 [报告]
发表于 2009-08-31 17:15 |只看该作者
Gtk2-Perl 11.本地化

perl 的本地化模块包括 Locale::Maketext 和 Locale::gettext。前者是完全用 perl 实现的本地化模块,而后者是使用 gettext 库的 perl 扩展。由于 Glade 使用的 c 库,所以如果程序使用 Glade 产生界面,只能用 Locale::gettext 进行界面本地化(当然,你如果把 Glade 文件放到 perl 文件中,动态使用 Maketext 产生 Glade 所需要的 xml 也是可以,不过代价比较高)。在 MSWin 上安装 Locale::gettext 模块还不算特别复杂,只要少量修改一下 Makefile.PL 文件就可以了。

这两个模块的使用方法,我在“perl 程序的本地化”和 “ 使用 gettext 进行程序的本地化”两篇文章中有比较详细的介绍。和一般的 Locale::gettext 模块使用是一样的,界面的本地化也可以分成提取产生po 文件,翻译和编译产生 mo 文件三个步骤。以前一章中的 Glade 测试文件为例,说明一下整个过程。

首先把 perl 源代码改造成使用 gettext 的形式:

use Gtk2 '-init';
use Glib qw(TRUE FALSE);
use Gtk2::GladeXML;
use POSIX qw(setlocale);
use Locale::gettext qw(bindtextdomain textdomain LC_ALL);

binmode STDOUT, "utf8";
setlocale(LC_ALL, "");
bindtextdomain('glade-demo', 'locale');
textdomain('glade-demo');
{
    my $ld = Locale::gettext->domain('glade-demo');
    sub gettext { $ld->get(@_) }
}

my $app = Gtk2::GladeXML->new('glade-demo.glade');
$app->signal_autoconnect_from_package('main');
my $win = $app->get_widget('window1');
$win->signal_connect('delete-event' => sub { Gtk2->main_quit });
$win->show();
Gtk2->main;

sub on_button1_clicked {
    print gettext("Goodbye, cruel world!\n");
    Gtk2->main_quit;
    return FALSE;
}

源程序

提取可翻译的字符串使用下面的命令:

xgettext glade-demo-l18n.pl
xgettext -j messages.po glade-demo.glade

翻译文件中的字符串,并注意修改 charset 成 utf8。建议把文件改名为 glade-demo.zh_CN.po,防止再次使用 xgettext 使文件被覆盖。

使用 msgfmt 产生 mo 文件:

mkdir -p locale/zh_CN/LC_MESSAGES
msgfmt -o locale/zh_CN/LC_MESSAGES/glade-demo.mo glade-demo.zh_CN.po

最后运行一下程序吧。

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 <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: glade-demo 0.01\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2007-08-02 10:21+0800\n"
"PO-Revision-Date: 2007-08-02 10:36+0800\n"
"Last-Translator: Ye Wenbin <wenbinye@gmail.com>\n"
"Language-Team: Chinese <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

#: glade-demo-l10n.pl:31
msgid "Goodbye, cruel world!\n"
msgstr "永别了!\n"

#: glade-demo.glade:18
msgid "Hello"
msgstr "你好"

源文件

论坛徽章:
1
未羊
日期:2014-09-08 22:47:27
12 [报告]
发表于 2009-09-01 11:10 |只看该作者
好贴,顶。

论坛徽章:
0
13 [报告]
发表于 2009-09-02 23:46 |只看该作者
强贴留名

论坛徽章:
0
14 [报告]
发表于 2009-09-03 10:57 |只看该作者
学习学习

论坛徽章:
0
15 [报告]
发表于 2009-09-03 16:25 |只看该作者
不错,楼主研究GUI还颇有心得啊 ~

论坛徽章:
0
16 [报告]
发表于 2009-09-03 17:14 |只看该作者
建议置顶

论坛徽章:
3
戌狗
日期:2014-09-10 17:07:162015年辞旧岁徽章
日期:2015-03-03 16:54:15wusuopu
日期:2016-06-17 17:43:45
17 [报告]
发表于 2009-09-03 20:46 |只看该作者
原帖由 iakuf 于 2009-8-31 17:08 发表
...,今天我们公司一个很强的写程序的人跑到我这边拿起perl的书看了看,很惊奇的问"Perl还能写网页?"...

对他很惊奇,啥不能写网页

论坛徽章:
0
18 [报告]
发表于 2009-09-06 12:29 |只看该作者
都说自已的东西强大,该相信谁?看来要一个一个试过去。最好是自已开发一套。。

论坛徽章:
0
19 [报告]
发表于 2009-09-08 11:47 |只看该作者

回复 #1 iakuf 的帖子

真的是太精采了...

论坛徽章:
0
20 [报告]
发表于 2009-09-08 12:02 |只看该作者
不错哦,perl开发GUI
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP