日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

在Linux下开发多语言软件: Hello GetText!

發(fā)布時間:2025/3/15 linux 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在Linux下开发多语言软件: Hello GetText! 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
在Linux下開發(fā)多語言軟件: Hello GetText!

轉(zhuǎn)自:http://www.groad.net/bbs/read.php?tid-906.html

開發(fā)多語言軟件是一件非常困難的事,各個國家的字符集的編碼方式、貨幣符號、日期格式、數(shù)字格式、文字表現(xiàn)都各不相同,glibc提供了大量的函數(shù)處理這些事情,不再聱述了。這里要做的是,用一個簡單的實(shí)例說明一下GetText 的用法,GetText是一系列的工具和庫函數(shù),幫助程序員和翻譯人員開發(fā)多語言軟件的。
GetText 并不是一個神秘的東西,若非要在Win32下找一個東東與之對應(yīng)的話,我想應(yīng)該是資源文件(.res),它替你把字符串管理起來,在運(yùn)行時可以根據(jù)當(dāng)前的語言,自動加載對應(yīng)語言的字符串。
這里假設(shè)要開發(fā)一個叫做 foonly 的軟件包,它僅有一個源文件foonly.c,其功能是在屏幕上打印出”Hello, GetText!”。在沒有支持多語言時,foonly.c的內(nèi)容如下:

#include <stdio.h>int main(int argc, char* argv[]) {printf("Hello, GetText!\n");return 0; }

好了,下面開啟我們多語言軟件的開發(fā)之旅:
創(chuàng)建 pot 文件,pot 是 Portable Object Template的首字母縮寫,與 po 對應(yīng)的是 mo,mo 是Machine Object的首字母縮寫。前者意指原始的字符串文件,一般用于給翻譯人員去修改的,后者則是與機(jī)器相關(guān)的,一般是供程序讀取。可以手工創(chuàng)建 pot 文件,也可以通過 xgettext 從代碼中抽取字符串來產(chǎn)生。這里是用 xgettext來產(chǎn)生的:

xgettext -a foonly.c -o foonly.pot

運(yùn)行該命令后,我們發(fā)現(xiàn),在當(dāng)前目錄下,產(chǎn)生了一個名foonly.pot的文件,打開該文件,可以看到:

# 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: PACKAGE VERSION\n" "POT-Creation-Date: 2005-11-07 20:06+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" #: foonly.c:5 msgid "Hello, GetText!\n" msgstr ""

?根據(jù) pot 產(chǎn)生不同語言的 po 文件,這里我們先產(chǎn)生一個簡體中文的 po 文件:

export LANG=zh_CN.gb2312 msginit -l zh_CN.gb2312 -i foonly.pot

?運(yùn)行該命令后,我們發(fā)現(xiàn),在當(dāng)前目錄下,產(chǎn)生了一個名 zh_CN.po 的文件,打開該文件,可以看到:

# Chinese translations for PACKAGE package. # Copyright (C) 2005 THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # root <root@linux>, 2005. #msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "POT-Creation-Date: 2005-11-07 20:06+0800\n" "PO-Revision-Date: 2005-11-07 20:09+0800\n" "Last-Translator: root <root@linux>\n" "Language-Team: Chinese <zh-l10n@linux.org.tw>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=GB2312\n" "Content-Transfer-Encoding: 8bit\n"#: foonly.c:5msgid "Hello, GetText!\n" msgstr ""

?翻譯 zh_CN.po 里對應(yīng)的字符串為中文:

# Chinese translations for PACKAGE package. # Copyright (C) 2005 THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # root <root@linux>, 2005. #msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "POT-Creation-Date: 2005-11-07 20:06+0800\n" "PO-Revision-Date: 2005-11-07 20:09+0800\n" "Last-Translator: root <root@linux>\n" "Language-Team: Chinese <zh-l10n@linux.org.tw>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=GB2312\n" "Content-Transfer-Encoding: 8bit\n"#: foonly.c:5msgid "Hello, GetText!\n" msgstr "你好,GetText!\n"

?根據(jù) po 文件生成 mo 文件:

msgfmt zh_CN.po -o zh_CN.mo

?運(yùn)行該命令后,我們發(fā)現(xiàn),在當(dāng)前目錄下,產(chǎn)生了一個名zh_CN.mo的文件。它是二進(jìn)制的,不能用文本編輯器打開。
?安裝mo文件到系統(tǒng)中:

cp -f zh_CN.mo /usr/share/locale/zh_CN/LC_MESSAGES/foonly.mo

?修改程序:

#include <stdio.h> #include <locale.h> #include <libintl.h> #define _(String) gettext (String) #define LOCALEDIR "/usr/share/locale/" #define PACKAGE "foonly"int main(int argc, char* argv[]) {setlocale (LC_ALL, "");bindtextdomain (PACKAGE, LOCALEDIR);textdomain (PACKAGE);printf(_("Hello, GetText!\n"));return 0;}

?編譯并運(yùn)行:

gcc -g foonly.c -o foonly ./foonly

?可以看到屏幕上打印出:

你好, GetText!

?現(xiàn)在我們換成英文試一下:

export LANG=es_US ./foonly

?可以看到屏幕上打印出:

Hello, GetText!

?添加其它語言也很容易,不需要修改程序,只需要像對待中文一樣,生成一個 mo 文件,并安裝到系統(tǒng)中對應(yīng)的目錄即可。切換不同的語言僅僅是修改當(dāng)前的 locale就行了。

posted on 2011-11-09 21:25 林中鳥 閱讀(...) 評論(...) 編輯 收藏

轉(zhuǎn)載于:https://www.cnblogs.com/zechen11/archive/2011/11/09/2243653.html

總結(jié)

以上是生活随笔為你收集整理的在Linux下开发多语言软件: Hello GetText!的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 色欲无码人妻久久精品 | 木下凛凛子av一区二区三区 | 6080福利 | 中文字幕5566 | 久久资源在线 | 96国产精品 | 少妇又紧又爽视频 | 国产精品极品白嫩在线 | 国产精品水嫩水嫩 | 玖玖玖精品| 国产乱子伦精品无码码专区 | 久久午夜夜伦鲁鲁片无码免费 | 色人阁婷婷 | 18成人在线 | 日韩国产欧美在线视频 | 四虎免费影视 | 手机av网址 | 香蕉视频亚洲一级 | 五月天堂色 | 欧美va天堂 | a级片毛片 | 小伸进喷水网站 | 国内精品卡一卡二卡三 | 免费看的毛片 | 亚洲国产日韩av | 日本黄色网址大全 | 中文字幕亚洲专区 | 天堂精品久久 | 99精品在线观看 | 人妻少妇精品无码专区二区 | www.香蕉网| 亚洲啊啊啊啊啊 | 五月在线视频 | 国产欧美日韩精品区一区二污污污 | 国产精品xxx在线观看 | 国产a√| 激情综合一区二区三区 | 紧身裙女教师三上悠亚红杏 | 中文字幕一区久久 | 一本色道久久88综合无码 | 成片免费观看 | 91黄色影视 | 欧美xxxx8888| 日本三级韩国三级三级a级按摩 | 午夜影院男女 | 国产美女精品人人做人人爽 | 欧美日韩国产一区在线 | 神马影院一区二区 | 1024你懂的日韩 | a片在线免费观看 | 麻豆三级 | 久久黄色大片 | 在线黄色av网站 | 一级福利片 | 欧美黑丝少妇 | 激情影院内射美女 | 自拍在线视频 | 亚洲一区成人 | 又大又粗弄得我出好多水 | 日韩视频免费观看高清完整版 | 污污网站在线观看视频 | 国产污视频在线 | 国产精品美女久久 | 少妇精品一区二区 | 日韩欧美亚洲视频 | 亚洲老老头同性老头交j | 丁香六月激情综合 | 99久久黄色 | 网站在线播放 | 成人免费视频毛片 | 在线播放一区 | 无码人妻少妇色欲av一区二区 | 国产精品黄| 秋霞av鲁丝片一区二区 | 久久免费播放 | 一区二区在线 | 日日爽天天 | 日本高清无吗 | 亚洲精品视频免费观看 | 日韩美女网站 | 亚洲v在线 | 久久亚洲综合网 | 草草影院国产 | 国产18页| 极品美女销魂一区二区三区 | 中文精品无码中文字幕无码专区 | 免费网站www在线观看 | 久久精品无码一区二区三区 | 夜夜天天| 婷婷国产| 国产日韩大片 | 欧美午夜不卡 | 国产精品美女在线观看 | 久久草视频 | 老女人网站 | 91精品国产综合久久久久久久 | 国产51页 | 九九色精品 | 黄色91免费观看 |