Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
GNU gettext簡介 - 以C語言為範例
Search
Wen_Liao
June 04, 2014
Technology
790
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
GNU gettext簡介 - 以C語言為範例
Wen_Liao
June 04, 2014
More Decks by Wen_Liao
See All by Wen_Liao
COSCUP-2020-Linux 軟體組裝工和他的工具們
wen_liao
2
1.5k
開放街圖 自助旅行的好幫手
wen_liao
0
1.3k
GNU AS簡介
wen_liao
0
1.2k
UPnP 1.0 簡介
wen_liao
0
1.2k
自由軟體和 Richard Stallman
wen_liao
0
2.4k
Hello world在那邊?背景說明 0
wen_liao
0
830
A successful Git branching model 導讀
wen_liao
0
750
GNU ld的linker script簡介
wen_liao
0
1.5k
Trace 程式碼之皮
wen_liao
0
980
Other Decks in Technology
See All in Technology
僕のハーネスを紹介します
watany
7
1.7k
契約で守るコンパウンドプロダクトのデザインシステム
yug1224
1
1.5k
"計画的無茶振り"を通してAIネイティブ世代の新人を育てる
subroh0508
1
110
freeeにおけるSoftware Factory
freee
PRO
0
540
「社外イベント=意識高い」の壁を壊せ!元々無関心だった僕らが部内で社外イベントを民主化して15人を連れ出すまで
say_no_w
0
150
これだけは抑えておきたい!後悔しない re:Invent の過ごし方 / AWS re:Invent 2026 prestudy
kinunori
2
430
「作れる」と「リリースできる」の間にあったもの── PdMを外して見えた、PdMがやるべき仕事/Buildable ≠ Shippable: What Removing the PM Taught Me About the PM’s Job
yappli_developers
0
310
データマネジメント × 法務で作りあげる、 freeeの新しいデータガバナンスへの軌跡
freee
PRO
2
480
ドメインエキスパートは いかにして AI を使って プロダクト開発をするか
tatsuyashiraishi
1
200
顧客価値を追いかけたら、プライシングにたどり着いた
sansantech
PRO
2
1.1k
DevelopersIO2026 -バックアップは“消されないこと”が9割-
yoshida0129
0
420
演劇と私とスクラム
chinmo
0
160
Featured
See All Featured
How Software Deployment tools have changed in the past 20 years
geshan
2
35k
The browser strikes back
jonoalderson
0
1.9k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.9k
Navigating Weather and Climate Data
rabernat
0
560
Fireside Chat
paigeccino
43
4.1k
Why You Should Never Use an ORM
jnunemaker
PRO
61
10k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
4
1.2k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.9k
The Cost Of JavaScript in 2023
addyosmani
55
10k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.9k
Color Theory Basics | Prateek | Gurzu
gurzu
1
500
A Tale of Four Properties
chriscoyier
163
24k
Transcript
GNU gettext簡介 以C語言為範例 Wen Liao
目標 簡介GNU gettext 以及其用法,以C語言為範例
Outline • 關於GNU gettext • 使用gettext處理多國語言訊息 • 參考資料 • Q
& A
關於gettext • 1990年代Sun推出的軟體,用於處理Unix下面 程式訊息的多國語言問題。 • 後來GNU協會也推出了GNU gettext
Outline • 關於GNU gettext • 使用gettext處理多國語言訊息 • 參考資料 • Q
& A
流程 • 修改程式碼 ◦ 告訴系統使用環境變數的語言相關設定 ◦ 告訴系統要吃那個目錄下面的哪個語文訊息相關檔案 ▪ 目錄:/aa/bb/cc/LC_MESSAGES ▪
檔案:my_prog.mo ◦ 使用gettext API描述程式訊息 • 使用工具產生portable object tempate檔案 (pot)
流程 • 透過pot檔案,使用工具產生需要語言版本訊 息portable object (po)檔如zh_TW.po, fr.po, ja.po • 開始翻譯
• 把翻譯好的po轉成平台可辨識的machine object (mo)檔案
http://en.wikipedia.org/wiki/File:Gettext.svg
範例 (印出訊息,支援中文和英文) #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
範例 (印出訊息,支援中文和英文) setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, LOCALEDIR); textdomain(PACKAGE); strncpy(dest, gettext("Taipei"), MAX_CHAR);
strncpy(transport, gettext("bus"), MAX_CHAR); printf(gettext("I will go to %s by %s.\n"), dest, transport); return 0; } 使用環境變數設定的 語言環境 指定要吃那個目錄 的哪個語言檔案c 載入語言檔案 gettext API
編譯 $ gcc -Wall -Werror -g -DPACKAGE=\" test_gettext\" -DLOCALEDIR=\" /home/user/gettext/po\"
test_gettext.c -o test_gettext 使用者自行設定語言檔 目錄和檔案。正式使用 可放在/usr/share/locale 下面對應的語系目錄。
po 目錄 tree view $ tree po/ po/ └── zh_TW
└── LC_MESSAGES └── test_gettext.mo
產生pot檔 xgettext -o test_gettext.pot --add-comments=- - k_ test_gettext.c
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.
pot內容節錄 msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-06-04 12:36+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <
[email protected]
>\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n"
pot內容節錄 #: test_gettext.c:40 msgid "Taipei" msgstr "" #: test_gettext.c:41 msgid
"bus" msgstr ""
pot內容節錄 #: test_gettext.c:44 #, c-format msgid "I will go to
%s by %s\n" msgstr ""
從pot檔產生中文po檔案 • msginit --locale=zh_TW --input=test_gettext. pot --no-translator
未翻譯前po系統和手動更新部份 “POT-Creation-Date: 2014-05-30 21:18+0800\n" "PO-Revision-Date: 2014-05-30 21:18+0800\n" "Language-Team: Chinese (traditional)
<zh-
[email protected]
>\n" "Language: zh_TW\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n"
更新中文po檔案 • 隨著程式持續開發會新增新的訊息,此時舊的 翻譯還在,所以需要比對新的pot檔並且合併 到原本翻譯的po檔內。 • msgmerge zh_TW.po test_gettext.pot
翻譯po檔 msgid "Taipei" msgstr "台北" msgid "bus" msgstr "公車" msgid
"I will go to %s by %s\n" msgstr "我搭乘%2$s到%1$s。\n" 名詞順序會隨語言不同 而改變,gettext可以在翻 譯時更改順序。
產生mo檔案 msgfmt zh_TW.po -o /home/user/gettext/po/zh_TW/LC_MESSAGES/ test_gettext.mo
驗收成果 $ LC_ALL=en_US.utf8 ./test_gettext I will go to Taipei by
bus $ LC_ALL=zh_TW.utf8 ./test_gettext 我搭乘公車到台北。 en_US.uft8等資料可以 由locale -a取得
同場加映, fuzzy #, fuzzy msgid "Taipei" msgstr "台北" • 產生mo後執行結果
$ LC_ALL=zh_TW.utf8 ./test_gettext 我搭乘公車到Taipei。 , fuzzy是gettext工具語法,表 示該翻譯尚未定案,所以執行 時不會使用該翻譯。
Outline • 關於GNU gettext • 使用gettext處理多國語言訊息 • 參考資料 • Q
& A
參考資料 • 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
Outline • 關於GNU gettext • 使用gettext處理多國語言訊息 • 參考資料 • Q
& A