Linux下的本地化与国际化 gettext

合集下载

glibc简介

glibc简介

glibcglibc 是gnu发布的libc库,也即c运行库。

glibc是linux系统中最底层的api(应用程序开发接口),几乎其它任何的运行库都会依赖于glibc。

glibc除了封装linux操作系统所提供的系统服务外,它本身也提供了许多其它一些必要功能服务的实现,主要的如下:(1)string,字符串处理(2)signal,信号处理(3)dlfcn,管理共享库的动态加载(4)direct,文件目录操作(5)elf,共享库的动态加载器,也即interpreter(6)iconv,不同字符集的编码转换(7)inet,socket接口的实现(8)intl,国际化,也即gettext的实现(9)io(10)linuxthreads(11)locale,本地化(12)login,虚拟终端设备的管理,及系统的安全访问(13)malloc,动态内存的分配与管理(14)nis(15)stdlib,其它基本功能GLIBC 的内容由于glibc 囊括了几乎所有的 UNIX 通行的标准,可以想见其内容包罗万有。

而就像其他的 UNIX 系统一样,其内含的档案群分散于系统的树状目录结构中,像一个支架一般撑起整个作业系统。

以 glibc-2.2 为例,这些档案群主要包括:1.分享函式库群:这是glibc 的主体,分布 /lib 与/usr/lib 中,包括libc 标准 C 函式库、libm 数学函式库、libcrypt 加密与编码函式库、libdb 资料库函式库、libpthread 行程多执行绪函式库、libnss 网路服务函式库 .... 等等。

这些都是可分享函式库,档名都以 .so 做结尾。

其中,/lib/ld*.so 是程式与函式库连结的工具。

有的用于程式编译时将程式与函式库内的函式物件连结,在只支援静态连结的系统中,此连结方式就是直接将所需的物件自函式库中抽出?砼c程式的可执行档相连,而在支援可分享函式库的系统中,在程式编译时期的连结只是在执行档中纪录了那些函式物件是存在那个函式库档案中,等该程式开始执行时,则由另一个负责动态连结的ld*.so 将所需的函式库连结好?K执行。

linux命令中apt-get命令详解

linux命令中apt-get命令详解

Linux中apt-get命令的详解apt-get是一条linux命令,适用于deb包管理式的操作系统,主要用于自动从互联网的软件仓库中搜索、安装、升级、卸载软件或操作系统。

是debian,ubuntu发行版的包管理工具,与红帽中的yum工具非常类似。

apt-get命令一般需要root权限执行,所以一般跟着sudo命令。

附apt-get, dkpg 常用命令:安装软件命令: apt-get install softname1 softname2 softname3……卸载软件命令: apt-get remove softname1 softname2 softname3……卸载并清除配置命令: apt-get remove --purge softname1删除包及其依赖的软件包:apt-get autoremove packagename删除包及其依赖的软件包+配置文件,比上面的要删除的彻底一点:apt-get autoremove --purge packagname更新软件信息数据库命令: apt-get update进行系统升级命令: apt-get upgrade搜索软件包命令: apt-cache search softname1 softname2 softname3……apt会把已装或已卸的软件都备份在硬盘上,所以假如需要空间的话,能够让这个命令来删除您已卸载掉的软件的备份: apt-get autoclean这个命令会把安装的软件的备份也删除,但是这样不会影响软件的使用: apt-get clean打印软件包列表中任何软件包的名称: apt-cache pkgnamesDeb软件包相关安装与卸载安装deb软件包命令: dpkg -i xxx.deb删除软件包命令: dpkg -r xxx.deb连同配置文件一起删除命令: dpkg -r --purge xxx.deb查看软件包信息命令: dpkg -info xxx.deb查看文件拷贝详情命令: dpkg -L xxx.deb查看系统中已安装软件包信息命令: dpkg -l重新配置软件包命令: dpkg-reconfigure xxx安装deb软件包命令: dpkg -i xxx.deb。

2024年傅老师GTK简易教程

2024年傅老师GTK简易教程
傅老師GTK簡易教程
2024/2/29
1
目录
• GTK基础概念 • GTK环境搭建 • GTK界面设计 • GTK图形绘制 • GTK数据存储与处理 • GTK高级特性
2024/2/29
2
01
GTK基础概念
2024/2/29
3
GTK定义及作用
2024/2/29
GTK(GIMP Toolkit)是一个 开源的、跨平台的、用于创建
06
在macOS系统中,可以使用Homebrew等包管理器安装 GTK+开发环境。
8
第一个GTK程序
• 创建一个C语言源文件,例如hello.c,并 输入以下代码
2024/2/29
9
第一个GTK程序
```c
include <gtk/gtk.h>
2024/2/29
int main(int argc, char *argv[]) {
10
第一个GTK程序
GtkWidget *window;
gtk_init(&argc, &argv);
2024/2/29
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
11
第一个GTK程序
• gtk_widget_show(window);
2024/2/29
支持本地化资源文件,如翻译后的字符串、图 片等,方便开发者进行本地化开发。
2024/2/29
双向文本支持
支持双向文本排版,满足阿拉伯语、希伯来语等从右到左书写语言的需求。
34
THANKS
感谢观看
2024/2/29
35

linux汉化步骤和原理

linux汉化步骤和原理
msgmerge -U zh_CN.po example.pot
这样将会把原来的 zh_CN.po 另存为 zh_CN.po~ 并更新 zh_CN.po 为新的内容,zh_CN.po~ 作为备 份文件可以直接删除。
intltool 工具集
intltool 工具集实际上是一组脚本,用以实现一些常规的翻译文件维护,其中部分命令除了支持 PO 文件 外还支持 XML。一共五个命令,对于翻译者来说比较常用的是 intltool-update。这组工具多数需要在 完整的源代码树中的 po/ 子目录下运行。要了解更多关于 intltool 工具的信息,请阅读它的 man 手册。 这里只介绍 intltool-update,用于更新 POT 文件并将 PO 文件与之合并。
gettext 代码实现: /* We use the settings in the following order: 1. The value of the environment variable 'LANGUAGE'. This is a GNU extension. Its value can be a colon-separated list of locale names. 2. The value of the environment variable 'LC_ALL', 'LC_xxx', or 'LANG'. More precisely, the first among these that is set to a non-empty value. This is how POSIX specifies it. The value is a single locale name. 3. A system-dependent preference list of languages. Its value can be a colon-separated list of locale names. 4. A system-dependent default locale name. This way: - System-dependent settings can be overridden by environment variables. - If the system provides both a list of languages and a default locale, the former is used. */

24软件本地化(精)

24软件本地化(精)


工厂方法返回一个格式化器对象,可以用它的format方 法对日期进行格式化:
– Date now=new Date(); – String s=fmt. format(now);
12
中关村国际软件人才教育联盟
日期与时间 3-3

可以使用DateFormat类的parse方法来分析用 户键入的日期。下面代码分析用户在文本框中 键入的值:
7
中关村国际软件人才教育联盟
数字与货币 2-1

数字与货币的格式化与locale是息息相关的。你可使用下 面的步骤,对特定locale的数字进行格式化:
– 首先获得一个特定的locale对象 – 使用一个工厂方法获得一个格式化器对象 – 用格式化器对象对数字进行格式化

工厂方法是“格式化ห้องสมุดไป่ตู้”java.text.NumberFormat类 的静态方法,带有一个Locale类型的参数。工厂方法共 有3个:
13
中关村国际软件人才教育联盟
日期本地化示例

程序代码详见DateFormatTest.java, 程序输出结果如下:
14
中关村国际软件人才教育联盟
字符集 4-1
Java语言本身是完全支持Unicode编码的语言 Unicode字符集是对世界上所有的语言进行了 统一编码的字符集。 Unicode标准完全符合国 际标准ISO/IEC10646:2003,信息技术- -统一多字节编码字符集(UCS) UCS--Universal Mutiple-Octet Coded Character Set 或者: UCS-- Universal Character Set 目前,locale与字符集之间并没有什么联系

基于GNU Gettext的程序信息国际化

基于GNU Gettext的程序信息国际化
维普资讯
第3 第3 卷 期
2008年 9月
陕 西 工 业 职 业 技 术 学 院 学 报
J u n l f h a x oye h i n tt t o r a an i ltc ncI si e oS P u
V_ o 1.3No .3 S p .2 0 0 8 e
r e I tr a in l a i n o o t r n o ma in Ba e n GNU te t nl n e n to a i t fS fwa eI f r t s d o z o o Ge tx
Qu n Xio o g,LUDai a ahn l n
如: pi f “ eO ol!) 把 r t (H l r ”标识为 pi fgt x n l wl d r t e et n( t
到的 P 文 件 和 MO 文 件 。文 件 后 缀 . O 是 O P
“ot lO j t的意思 。P P r b b c” ae e O文件是单纯的文本文
G NU etx 的设 计宗 旨是 尽 可 能 的使 国际 化 gt t e
P O文 件跟 使用 的人 工 读 取 和 编辑 的 。 O
MO文件 ( ci b c) Ma n O j t 的意思则是供 程序读取 he e 的机 器码 二进 制格 式 的文 件 。可 跨平 台 的 P 文件 O 在使用时要转变为相应的真正机器可 以处理的 MO 文件。
分析 了每一 实现 步骤 中的关键 问题。可指导 用户开发 出具有 多国语言信息 的国际化程序 。
关键词 : 息 ; 信 国际化 ; N et t G U g t x e 中图分类号 : 3 1 TP 1 文献标识码 : A 文章编号 :42—2 o ( ) 0 1 3 99 0 8 3 一0 4 —0

JavaSpring项目国际化(i18n)详细方法与实例

JavaSpring项⽬国际化(i18n)详细⽅法与实例Spring国际化概述国际化基本规则国际化信息”也称为“本地化信息”,⼀般需要两个条件才可以确定⼀个特定类型的本地化信息,它们分别是“语⾔类型”和“国家/地区的类型”。

如中⽂本地化信息既有中国⼤陆地区的中⽂,⼜有中国台湾、中国⾹港地区的中⽂,还有新加坡地区的中⽂。

Java通过java.util.Locale类表⽰⼀个本地化对象,它允许通过语⾔参数和国家/地区参数创建⼀个确定的本地化对象。

语⾔简称简体中⽂(中国)zh_CN繁体中⽂(中国台湾)zh_TW繁体中⽂(中国⾹港)zh_HK英语(中国⾹港)en_HK英语(美国)en_US英语(英国)en_GB英语(全球)en_WW英语(加拿⼤)en_CA英语(澳⼤利亚)en_AU英语(爱尔兰)en_IE英语(芬兰)en_FI芬兰语(芬兰)fi_FI英语(丹麦)en_DK丹麦语(丹麦)da_DK英语(以⾊列)en_IL希伯来语(以⾊列)he_IL英语(南⾮)en_ZA英语(印度)en_IN英语(挪威)en_NO英语(新加坡)en_SG英语(新西兰)en_NZ英语(印度尼西亚)en_ID英语(菲律宾)en_PH英语(泰国)en_TH英语(马来西亚)en_MY英语(阿拉伯)en_XA韩⽂(韩国)ko_KR⽇语(⽇本)ja_JP荷兰语(荷兰)nl_NL荷兰语(⽐利时)nl_BE葡萄⽛语(葡萄⽛)pt_PT葡萄⽛语(巴西)pt_BR法语(法国)fr_FR法语(卢森堡)fr_LU法语(瑞⼠)fr_CH法语(⽐利时)fr_BE法语(加拿⼤)fr_CA西班⽛语(拉丁美洲)es_LA西班⽛语(西班⽛)es_ES西班⽛语(阿根廷)es_AR西班⽛语(美国)es_US西班⽛语(墨西哥)es_MX西班⽛语(哥伦⽐亚)es_CO西班⽛语(波多黎各)es_PR德语(德国)de_DE德语(奥地利)de_AT德语(奥地利)de_AT语⾔简称德语(瑞⼠)de_CH俄语(俄罗斯)ru_RU意⼤利语(意⼤利)it_IT希腊语(希腊)el_GR挪威语(挪威)no_NO匈⽛利语(匈⽛利)hu_HU⼟⽿其语(⼟⽿其)tr_TR捷克语(捷克共和国)cs_CZ斯洛⽂尼亚语sl_SL波兰语(波兰)pl_PL瑞典语(瑞典)sv_SE西班⽛语(智利)es_CL语⾔类型判断1)基于浏览器语⾔根据Request Headers中的Accept-language来判断。

乌邦图 使用

不管你是一个新手还是精通Ubuntu和Windows的大牛,让Windows访问Ubuntu文件的最好的方式都是使用Samba。

通过许多第三方工具可以很轻松的安装和管理。

对于想要了解怎么从Windows快速访问Ubuntu文件的新用户或者新手来说,这篇短文将会告诉你该怎么做。

我们的目标是要帮助新用户。

我们尽量将这篇教程写得通俗易懂,以便让新手看懂而不会遇到太大的困难。

在这里我们不会太注重了解Samba是什么或者怎么将它配置加入域这类细节。

我们要做的就是告诉你怎么在Ubuntu中安装和设置Samba,让Windows可以访问Ubuntu的文件。

如果你想要更多的了解Samba,我建议你Google一下,或者查询下Wikipedia。

首先在Ubuntu下打开你的终端,然后运行如下命令安装Samba和其他相关的工具。

sudo apt-get install samba cifs-utils上面这条命令将会安装Samba和其他相关的工具。

在旧版的Ubuntu中,你可能需要使用smbfs替代cifs-utils。

如果上面命令能够使用就更好了。

然后,使用gedit(或者其他工具)打开Samba主配置文件,然后进行如下更改。

可以使用如下命令打开主配置文件:sudo gedit /etc/samba/smb.conf文件打开后,查找如下行并取消其注释(删掉行首的“;”)。

它应该是这样的:security = user然后,向下滚动文件,找到下面这行,同时取消行首注释。

[homes]这将会允许用户访问访问home目录中的文件夹及文件。

比如说,如果你取消注释了[homes],用户可以通过键入服务器名加用户名的方式访问home目录。

\\192.168.0.2\username然后,运行如下命令向Samba数据库添加你的账户信息。

这样可以允许你使用Samba访问共享文件。

sudo smbpasswd -a usernmame用你自己的用户名替代上述的username。

QT基础——QT是什么

QT基础——QT是什么先说结论:QT是⼀套c++ api库和⼀些⼯具软件的集合,使⽤qt可以开发跨平台的桌⾯程序和移动端程序。

从类库⾓度看,qt与duilib没什么差别,但是qt背后有强⼤的官⽅⽀持,这极⼤的便利了开发,⽽duilib相对来看就显得很贫瘠。

不过反过来看,duilib⾜够轻量⽽qt则显得很臃肿。

类库⼯具qt扩展了c++的语法,但是qt提供了⼯具把qt扩展语法的c++代码⽂件⽣成标准c++代码。

同样qt还提供了qml语⾔,这个语⾔的代码⽂件也通过⼀些⼯具最终⽣成了标准c++代码这部分知识点后边再讲。

以下摘⾃别⼈的博客————————————————————————————————————————————————————————————————————————⼀级题⽬:Qt Designer — 所见即所得的界⾯设计⼯具,可以⽤拖拽的⽅式将控件排布在界⾯上,⽀持layout,⽀持signal/slot编辑。

⽣成的⽂件保存为ui格式, ui是xml格式的普通⽂本⽂件,默认编码为utf8,所以界⾯上还可以直接写中⽂(但是不推荐这么做哦,还是应该⽤标准的Qt国际化的⽅法来翻译界⾯。

).Qt Assistant — 类似MSDN的⽂档查看⼯具,⽀持html的⼦集(图⽚、超链、⽂本着⾊),⽀持⽬录结构、关键字索引和全⽂搜索,可以很⽅便的查找Qt的API帮助⽂档,所以是编程必备、使⽤率最⾼的⼯具。

qmake – ⽤于⽣成Makefile(编译的规则和命令⾏)的命令⾏⼯具。

它是Qt跨平台编译系统的基础。

它的主要特点是可以读取Qt本⾝的配置,为程序⽣成与库⼀致的Makefile。

Qt Linguist — 被称为Qt语⾔家的Linguist是⽤于界⾯国际化的重要⼯具,但其实它并不能帮你翻译,它的主要任务只是读取翻译⽂件、为翻译⼈员提供友好的翻译界⾯。

听起来这个功能好像不太够,没错! Linguist必须要和其他⼯具⼀起⽤才能完成Qt国际化。

Outline for Linux(高编教程)

文件编号 日期

Outline For Linux 作 者: 吴万港 完成日期: 2013-5-11 签 收 人: 签收日期: Outline for Senior Linux Programmer(初稿)

2/50 修 订 页 编号 修订内容简述 修订日期 修订后版本号 修订人 审核人 批准人 1 创建 2013-5-11 V1.0.0 吴万港 2 加入第二讲 2011-7-19 V1.0.1 吴万港 Outline for Senior Linux Programmer(初稿)

3/50 目录 1 第一讲 I/O编程 文件编程 .................................................................................................... 4 1.1 概述 .............................................................................................................................. 4 1.2 Glibc简介 ..................................................................................................................... 4 1.2.1 Glibc的功能实现 .................................................................................................. 4 1.2.2 Glibc的内容 .......................................................................................................... 4 1.2.3 Glibc规格 .............................................................................................................. 5 1.3 标准I/O库 ................................................................................................................... 6 1.3.1 引言 ...................................................................................................................... 6 1.3.2 流和FILE对象 ...................................................................................................... 6 1.3.3 标准输入、输出、标准出错 .............................................................................. 6 1.3.4 缓冲 ...................................................................................................................... 7 2 第二讲 多线程 ........................................................................................................................ 7 2.1 线程概念 ...................................................................................................................... 7 2.2 进程和线程的区别 ...................................................................................................... 8 2.3 线程标识 ...................................................................................................................... 9 2.4 创建线程 ...................................................................................................................... 9 2.5 线程终止 .................................................................................................................... 10 2.6 线程同步 .................................................................................................................... 12 2.6.1 互斥量 ................................................................................................................ 13 2.6.2 死锁 .................................................................................................................... 14 2.6.3 读写锁 ................................................................................................................ 15 2.6.4 条件变量 ............................................................................................................ 16 2.7 线程控制 .................................................................................................................... 18 2.7.1 线程属性 ............................................................................................................ 18 2.7.1.1 pthread_attr_t结构 ................................................................................. 18 2.7.1.2 分离状态 .................................................................................................. 19 2.7.1.3 线程的继承性 .......................................................................................... 20 2.7.1.4 线程的作用域 .......................................................................................... 22 2.7.1.5 线程堆栈的地址 ...................................................................................... 22 2.7.1.6 线程堆栈的大小 ...................................................................................... 23 2.7.1.7 警戒缓冲区 .............................................................................................. 23 2.7.1.8 总结 .......................................................................................................... 24 2.7.2 线程同步属性 .................................................................................................... 24 2.7.2.1 互斥量属性 .............................................................................................. 24 3 附录A .................................................................................................................................... 24 3.1 打印线程ID ................................................................................................................ 35 3.2 获取线程退出状态 .................................................................................................... 36 3.3 使用互斥量保护数据结构 ........................................................................................ 39 3.4 死锁问题 .................................................................................................................... 41 3.5 创建分离状态的线程 ................................................................................................ 43

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Linux下的本地化与国际化 – 2. gettext
GNU gettext 是一套GNU下的国际化工具,几乎支持所有Linux下的计算机语言。在
gettext的帮助下,可以轻松完成程序的国际化。
一、相关文件

.pot
po 的模版,可由xgettext生成

.po
翻译的源,可由msginit + .pot生成

.gmo
编译后的po,可由 msgfmt + .po 生成

.mo
同上,只是gmo通常指的是未安装的mo,可由 install + .gmo 生成

二、相关工具
xgettext
从源代码中提取需要翻译的字串,生成pot文件

msginit
替换pot中的Entry信息,如译者,文件编码等

msgmerge
合并现有的.po文件

msgfmt
把.po文件生成.gmo或.mo文件

三、相关函数
bindtextdomain(const char *domain, const char *dirname)
通过domain与dirname绑定mo文件的域

textdomain (const char *domainname)
指定gettext所用的域

gettext(const char *msgid):
由locale与textdomain指定的domain得到翻译后的字串

ngettext(const char *msgid1, const char *msgid2, unsigned long int n):
通过n返回单数的msgid1 或 复数的msgid2

dgettext(const char *domain, const char *msgid)
指定domain的gettext

dngettext(const char *domain, const char *msgid, unsigned long int n);
指定domain的ngettext

dcgettext(const char *domain, const char *msgid, int category):
指定domain与category的gettext
dcngettext(const char *domain, const char *msgid1, const char *msgid2, unsigned
long int n, int category):
指定domain与category的ngettext

gettext的dirname, locale domain, category, 在磁盘上的结构为
dirname/locale/category/domain.mo

/usr/share/locale/zh_CN/LC_MESSAGES/gettext_demo.mo
默认的category为LC_MESSAGES
四、实例

1. 新建文件 gettext_demo.c
view plaincopy to clipboardprint?
#include
1. #include
2. #include
3.
4. #define _(string) gettext(string)
5.
6. const char *DOMAIN = "gettext_demo";
7. const char *DIRNAME = "languages";
8.
9. int main(int argc, char **argv) {
10.
11. /× 设置locale与系统一致 */
12. setlocale(LC_ALL, "");
13.
14. /× 添加域 gettext_test 在目录 po */
15. bindtextdomain(DOMAIN, DIRNAME);
16.
17. /× 设定默认域为 gettext_test */
18. textdomain(DOMAIN);
19.
20. /× gettext(Hello World) */
21. puts(_("Hello"));
22. return 0;
23. }
2. 制作zh_CN.UTF-8的语言包

gettext_demo$ ls
gettext_demo.c
gettext_demo$ mkdir po
gettext_demo$ cd po

由xgettext生成pot
gettext_demo/po$ xgettext -k_ ——package-name gettext_demo
——package-version 0.1 ../×.c -o gettext_demo.pot
gettext_demo/po$ ls
gettext_demo.pot

由gettext_demo.pot生成zh_CN.po
gettext_demo/po$ msginit #因为我的系统locale为zh_CN.UTF-8,因此
msginit自动生成针对zh_CN.UTF-8的po
gettext_demo/po$ ls
gettext_demo.pot zh_CN.po

修改po文件
#: ../gettext_demo.c:22
msgid "Hello"
msgstr ""

#: ../gettext_demo.c:22
msgid "Hello"
msgstr "你好"

由zh_CN.po生成zh_CN.mo
gettext_demo/po$ msgfmt zh_CN.po -o zh_CN.mo
gettext_demo/po$ ls
gettext_demo.pot zh_CN.mo zh_CN.po

复制zh_CN.mo到../languages/zh_CN/LC_MESSAGES/gettext_demo.mo
gettext_demo/po$ mkdir -p ../languages/zh_CN/LC_MESSAGES
gettext_demo/po$ cp
zh_CN.mo ../languages/zh_CN/LC_MESSAGES/gettext_demo.mo

编译并测试
gettext_demo$ gcc gettext_demo.c -o gettext_demo
gettext_demo$ ls
gettext_demo gettext_demo.c languages po
gettext_demo$ ./gettext_demo
你好

测试英文环境
gettext_demo$ LC_ALL=en_US ./gettext_demo
Hello
如果尝试 LC_ALL=zh_CN.GBK ./gettext_demo 在UTF-8环下显示"乱码",因为显
示的是GBK编码,gettext转换到相应的编码了。
当系统发生变化时,添加了新的语句,为此通过工具msgmerge进行和并
修改 gettext_demo.c
/× gettext(Hello World) */
puts(_("Hello"));

/× gettext(Hello World) */
puts(_("Hello"));
puts(_("World"));

gettext_demo/po$ xgettext -k_ ——package-name gettext_demo
——package-version 0.1 ../×.c -o gettext_demo.pot
gettext_demo/po$ msgmerge zh_CN.po gettext_demo.pot -o zh_CN.po
. 完成。

修改文件 zh_CN.po
#: ../gettext_demo.c:23
msgid "World"
msgstr "世界"

得新生成并复制zh_CN.mo
到../languages/zh_CN/LC_MESSAGES/gettext_demo.mo
测试
gettext_demo$ ./gettext_demo
你好
世界

五、相关链接
GNU gettext 官方文档

相关文档
最新文档