More Related Content Similar to GNU gettext簡介 - 以C語言為範例 Similar to GNU gettext簡介 - 以C語言為範例 (20) GNU gettext簡介 - 以C語言為範例6. 流程
● 修改程式碼
○ 告訴系統使用環境變數的語言相關設定
○ 告訴系統要吃那個目錄下面的哪個語文訊息相關檔案
■ 目錄:/aa/bb/cc/LC_MESSAGES
■ 檔案:my_prog.mo
○ 使用gettext API描述程式訊息
● 使用工具產生portable object tempate檔案
(pot)
9. 範例 (印出訊息,支援中文和英文)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>
#include <libintl.h>
#define MAX_CHAR (32)
int main(int argc, char **argv)
{
char dest[MAX_CHAR];
char transport[MAX_CHAR];
gettext和設定語系
用到的header file
11. 編譯
$ gcc -Wall -Werror -g -DPACKAGE="
test_gettext" -DLOCALEDIR="
/home/user/gettext/po" test_gettext.c -o
test_gettext
使用者自行設定語言檔
目錄和檔案。正式使用
可放在/usr/share/locale
下面對應的語系目錄。
12. po 目錄 tree view
$ tree po/
po/
└── zh_TW
└── LC_MESSAGES
└── test_gettext.mo
14. 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.
15. pot內容節錄
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSIONn"
"Report-Msgid-Bugs-To: n"
"POT-Creation-Date: 2014-06-04 12:36+0800n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONEn"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>n"
"Language-Team: LANGUAGE <LL@li.org>n"
"Language: n"
"MIME-Version: 1.0n"
"Content-Type: text/plain; charset=CHARSETn"
"Content-Transfer-Encoding: 8bitn"
24. 同場加映, fuzzy
#, fuzzy
msgid "Taipei"
msgstr "台北"
● 產生mo後執行結果
$ LC_ALL=zh_TW.utf8 ./test_gettext
我搭乘公車到Taipei。 , fuzzy是gettext工具語法,表
示該翻譯尚未定案,所以執行
時不會使用該翻譯。
26. 參考資料
● Wikipedia: gettext
○ http://en.wikipedia.org/wiki/Gettext
● gettext手冊
○ http://www.gnu.org/software/gettext/manual/gettext.
html
● C語言中使用gettext
○ http://wen00072-blog.logdown.com/posts/202230-
study-on-gettext