浣滆咃細榫欓
鑷粠寮濮嬬爺絀禨DL鐨勬枃鏈樉紺猴紝鎴戝氨涓鐩村湪鎬濊冨湪SDL涓樉紺轟腑鏂囩殑闂銆傛垜浠煡閬?a title=闊﹁涔嬫垬 >闊﹁涔嬫垬錛?a title="Battle for Wesnoth" >Battle for Wesnoth錛変嬌鐢⊿DL寮鍙戠殑錛屽茍涓旀敮鎸佸璇█銆傛墍浠ワ紝鎴戜竴鐩寸浉淇esnoth鐨勬簮浠g爜閲岄潰涓瀹氭湁鎴戞墍闇瑕佺殑絳旀銆傜綉緇滀笂鏄旱璇寸悍綰晩錛屾湁浜涗漢騫茶剢璇達紝SDL涓嶆敮鎸佷腑鏂囷紱鏈変簺浜哄湪鍥伴毦闈㈠墠鍥炲埌浜哅FC鐨勬鎶便傝岋紝鏃㈢劧鎴戠殑鐩爣鏄法騫沖彴錛屽茍涓旀垜涔熺浉淇′竴瀹氳兘鎵懼埌絳旀錛屾墍浠ワ紝鎴戝潥鎸佸鎵俱傜粓浜庯紝瀹岀編瑙e喅浜嗗湪SDL涓樉紺轟腑鏂囷紝鐢氳嚦澶氳璦鐨勯棶棰樸備互涓嬬殑鍑犺妭錛屾垜灝嗗叏闈紝璇︾粏鐨勮鏄庤繖浜涙柟娉曘?br>
1.1錛歱o錛宮o涓巊ettext
綰跨儲浠嶹esnoth鐨勫彂甯冩父鎴忎笌婧愪唬鐮佷腑寮濮嬶紝鎴戜滑鐭ラ亾錛屽湪Wesnoth娓告垙涓紝鏈変釜鍚嶄負po鐨勬枃浠跺す錛屽鍥借璦緲昏瘧閮芥斁鍦ㄤ簡榪欎釜鏂囦歡澶逛笅闈€傛父鎴忕▼搴忎腑澶氫負*.mo鏂囦歡錛屾簮浠g爜涓涓?.po鏂囦歡銆傞氳繃鎼滅儲錛宲o涓巑o鐨勮儗鏅誕鍑烘按闈⑩斺斿畠浠潵鑷狦NU欏圭洰gettext銆?br> gettext欏圭洰鏄笓闂ㄤ負澶氳璦璁捐鐨勩傛垜浠笉闇瑕佷慨鏀規簮浠g爜鍜岀▼搴忕殑鎯呭喌涓嬶紝鍙互璁╃▼搴忔敮鎸佸鍥借璦銆傜▼搴忓皢鏍規嵁緋葷粺鎵鍦ㄧ殑鍥藉鍜屽尯鍩熼夋嫨鐩稿簲鐨勮璦錛屽綋鐒訛紝涔熷彲浠ュ湪鎵ц榪囩▼涓鐜╁鑷敱鐨勯夋嫨銆傛棦鐒舵槸寮鏀炬簮浠g爜鐨勶紝鑷劧涔熷緢瀹規槗鐨勮縐繪鍒皐in32涓嬨倃in32涓嬬殑榪欎釜欏圭洰涓婚〉濡備笅錛?br>http://gnuwin32.sourceforge.net/packages/gettext.htm
涓轟簡鏂逛究鐨勪嬌鐢紝鎴戣繕鏄緩璁綘涓嬭澆瀹屾暣鐨勫畨瑁呭寘錛圕omplete package錛夈傜劧鍚庯紝浣犲彲浠ョ湅鑻辨枃璇存槑錛屼篃鍙互鍑潃鐩磋鍘昏瘯楠岋紝鎵懼埌鍝簺搴撳拰鍝簺DLL鏂囦歡鏄紪璇戝拰榪愯鏃跺繀欏葷殑鈥斺斿綋鐒訛紝鎴戜篃鍙互鐩存帴鍛婅瘔浣犵瓟妗堛?br> 璁劇疆緙栬瘧鐜鐨勯棶棰樺氨涓嶅啀澶氳浜嗭紝涓嶆竻妤氱殑璇風湅鍓嶉潰鐨勭珷鑺傘傚弽姝i兘涓夐儴鍒嗭細*.h鏂囦歡錛?.lib鏂囦歡鍜?.dll鏂囦歡錛屾斁鍒扮浉搴旂殑鏂囦歡澶逛笅闈㈠茍鍦ㄧ紪璇戞椂鍊欐寚鏄庡氨鍙互浜嗐?br> 鎴戜滑涓嬮潰灝嗙敤鍒扮殑鏂囦歡鏈夛細
libintl.h錛氳鍦ㄥ啓婧愪唬鐮佺殑鏃跺?include榪涙潵錛?br>libintl.lib錛氳繖鏄紪璇戞椂鍊欓渶瑕佺殑搴撴枃浠訛紱
libintl3.dll鍜宭ibiconv2.dll錛氳繖鏄▼搴忚繍琛屾椂鍊欓渶瑕佺殑鏂囦歡錛屾斁鍒?.exe鏂囦歡鍙互鎵懼埌鐨勫湴鏂廣?br>
1.2錛氭紨紺虹▼搴忎互鍙婅鏄?/p>
#include <iostream>
#include <string>
#include <clocale>
#include "GNU/libintl.h"
int main(int argc, char* argv[])
{
setlocale(LC_ALL, "");
bindtextdomain("myText", "E:/My Documents/Visual Studio 2008/po");
textdomain("myText");
std::string test = gettext("Hello, World!");
std::cout << test << std::endl;
return 0;
}
鎴戜滑鍏堣#include榪涙潵鐨?lt;clocale>錛屾垜鐢?#8220;<>”琛ㄧず瀹冩槸鏍囧噯C++鐨勪竴閮ㄥ垎銆傚畠鍖呭惈浜嗗嚱鏁皊etlocale()銆傝繖涓嚱鏁板湪榪欓噷鐨勪袱涓弬鏁扳斺斿父閲廘C_ALL涓庣┖瀛楃涓?"鐨勬剰鎬濇槸錛屽湪榪欎釜紼嬪簭涓殑鎵鏈夎璦涓庡尯鍩燂紝閮借緗負緋葷粺榛樿鐨勮璦涓庡尯鍩熴?br> libintl.h鏄垜浠垰鎵嶅姞鍏ョ殑GNU鐨勪竴閮ㄥ垎錛岃繖鎰忓懗鐫鍦↙inux緋葷粺涓嬶紝榪欎釜澶存枃浠舵槸緋葷粺鏈韓鑷甫鐨勩傚畠鍖呭惈浜嗗悗闈笁涓嚱鏁幫細bindtextdomain()灝嗕竴涓枃浠跺す鐩綍緇戝畾鍒頒竴涓煙鍚嶄笂錛岃繖涓煙鍚嶄篃鏄皢鏉?.mo鏂囦歡鐨勬枃浠跺悕錛泃extdomain()琛ㄦ槑鎴戜滑灝嗕嬌鐢ㄧ殑鍩熷悕錛沢ettext()涓殑瀛楃涓插皢鏄澶氳璦緲昏瘧鏇挎崲鐨勯儴鍒嗐?br> 灝嗚繖涓▼搴忕紪璇戯紝鍦ㄦ病鏈夊璇█鍖呯殑鏃跺欙紝紼嬪簭涔熻兘姝e父鐨勮繍琛岋紝鏄劇ず“Hello, World!”銆?br>
1.3錛氫負婧愮▼搴忓埗浣減o鏂囦歡鍜宮o鏂囦歡
濡傛灉浣犲凡緇忓畨瑁呬簡瀹屾暣鐨勫畨瑁呭寘錛屾壘鍒扮浉鍏蟲枃浠跺す鐨刡in鐩綍錛岃繖閲屾湁寰堝宸ュ叿杞歡銆備綘鍙互閫氳繃cmd鐨勬柟寮忎竴姝ユ鐨勮漿鎹紝涔熷彲浠ワ紝鍋風偣鍎挎噿錛屽洜涓烘湁鏇村姞鐜版垚鐨勫伐鍏峰彲浠ョ敤銆備絾鏄紝絎竴姝ワ紝浠庢簮浠g爜鎻愬彇gettext()鐨勬枃鏈紝榪樺緱闈犲懡浠わ細xgettext銆傚氨璺熺敤g++鍛戒護涓鏍鳳紝鍋囪鎴戜滑鐨勬簮鏂囦歡鍚嶆槸main.cpp錛屾垜浠妸瀹冨厛杞崲鎴愪竴涓ā鏉挎枃浠禷.pot錛?br>
xgettext -o a.pot main.cpp
浣犲彲浠ョ敤vim涔嬬被鐨勬枃鏈紪杈戝櫒鐪嬬湅*.pot鏂囦歡鐨勫唴瀹癸紝浣犱細鍙戠幇錛屼竴浜涜鏄庯紝浠ュ強鎻愬彇鏂囨湰鐨勮緇嗕俊鎭綰綍浜嗕笅鏉ャ?br>
# 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"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2008-03-30 00:24+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"
#: main.cpp:11
msgid "Hello, World!"
msgstr ""
涓嬮潰錛屾垜浠嬌鐢ㄤ竴涓畝鍗曠殑灝忓伐鍏穚oedit銆傚張涓涓法騫沖彴鐨勮蔣浠訛紝涓婚〉鍦細
http://www.poedit.net/
瀹夎榪愯鍚庯紝閫夋嫨“浠嶱OT鏂囦歡鏇存柊綾葷洰”錛岀劧鍚庢墦寮鎴戜滑鍒氭墠鐨刟.pot錛屼粈涔堥兘涓嶇敤淇敼錛堝綋鐒訛紝浣犱篃鍙互鎶婅嚜宸變俊鎭兘鍐欎笂鍘伙級錛岀‘淇?#8220;瀛楃闆?#8221;鏄疷TF-8灝卞彲浠ヤ簡銆傜劧鍚庯紝鍦ㄨ嫳璇笅闈篃涓婃浛鎹㈢殑鏂囧瓧鍚э紝淇濆瓨鐨勬椂鍊欙紝鐩稿簲鐨刴o鏂囦歡涔熷氨寤虹珛璧鋒潵浜嗐?br>
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2008-03-30 00:24+0800\n"
"PO-Revision-Date: 2008-03-30 00:25+0800\n"
"Last-Translator: lf426 <zbln426@163.com>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: main.cpp:11
msgid "Hello, World!"
msgstr "嫻滆尙鍩嶉惃鍕瑯閻e矉绱濋幋鎴炴降嫻滃棴绱?/span>"
榪欐槸po鏂囦歡銆傛庝箞鏄貢鐮侊紵閭f槸鍥犱負windows涓嶆槸鐢║TF-8淇濆瓨鐨勬枃鏈枃浠訛紙榛樿涓鑸槸GB2312錛夈傜敤poedit鎵撳紑鏃跺欐槸姝g‘鏄劇ず鐨勩傛垜鐨勬枃鏈唴瀹規槸錛?#8220;浜茬埍鐨勪笘鐣岋紝鎴戞潵浜嗭紒”銆?br>濡傛灉浣犵敤鐨勬槸vim錛屽彲浠ラ氳繃璁劇疆鐜鍙橀噺瑙e喅鏄劇ず涔辯爜鐨勯棶棰橈紝鍦╛vimrc鏂囦歡涓坊鍔犺繖涓鍙ワ細
set fileencodings=gb2312,ucs-bom,utf-8,chinese
1.4錛氳緗甿o鏂囦歡鐨勭洰褰?br>
涓嬮潰鐨勫伐浣滃彲鑳藉氨鏈変簺鏁欐潯浜嗐傝繕璁板緱鎴戜滑緇戝畾鍩熷悕鐨勮礬寰勫惂錛屾垜鐢ㄧ殑鏄?br>E:\My Documents\Visual Studio 2008\po
錛堣娉ㄦ剰鍦–++紼嬪簭閲岄潰鎶婃枩鏉犲弽榪囨潵錛侊級
*.mo鏂囦歡騫朵笉鏄洿鎺ユ斁鍒拌繖涓礬寰勪笅錛岃屾槸榪欎釜璺緞涓嬬殑./LL/LC_MESSAGES鎴栬?/LL_CC/LC_MESSAGES銆傚叾涓璍L琛ㄧず璇錛孋C琛ㄧず鍥藉鎴栧尯鍩熴傚叿浣撶殑璇峰弬鑰僕esnoth銆傚氨鎴戜滑鐨勪腑鏂囨潵璇達紝榪欎釜渚嬪瓙鏀緈o鏂囦歡鐨勮礬寰勬槸錛?br>E:\My Documents\Visual Studio 2008\po\zh_CN\LC_MESSAGES
鐜板湪榪愯紼嬪簭灝卞彲浠ョ湅鍒版枃鏈凡緇忚鏇挎崲浜嗐傚鏋滄垜浠垹闄o鏂囦歡鎴栦慨鏀筸o鏂囦歡鍚嶏紙涓庣粦瀹氬煙鍚嶄笉涓鑷達級錛岀▼搴忎細緇х畫鏄劇ず鍘熸潵鐨勮嫳鏂囥傚鏋滄垜浠敼鍙樼郴緇熺幆澧冿紝鍙涓嶆槸涓浗涓枃錛岀▼搴忛兘榪樻槸鏄劇ず鑻辨枃銆傚鏋滄垜浠鏇存柊鏇挎崲鍐呭錛岀洿鎺ョ敤poedit鏇存柊po鍜宮o鏂囦歡灝卞彲浠ヤ簡銆?br>
1.5錛氭瀯寤篠tringData綾?br>
鎴戜滑甯屾湜瀛楃涓茬殑鏁版嵁鍗曠嫭鐨勪繚瀛樺湪涓涓枃浠墮噷錛岃繖鏍鋒棦鏂逛究琚玤ettext鎻愬彇錛屼篃鏂逛究淇敼銆傝屼笖錛屽湪紼嬪簭閲岄潰錛屾垜浠敖閲忔妸gettext娑夊強鍒扮殑涓浜涚壒孌婄殑璁劇疆闅愯棌浜嗐傛墍浠ワ紝鎴戜滑鏋勫緩StringDada綾伙紝鍦ㄧ▼搴忎腑闇瑕佺敤鍒扮殑鍦版柟錛岀洿鎺ヨ皟鐢ㄥ畠鐨勫璞″氨鍙互浜嗐?br>
//FileName: string_data.h
#ifndef STRING_DATA_H
#define STRING_DATA_H
#include <clocale>
#include <string>
#include <vector>
#include "GNU/libintl.h"
class StringData
{
private:
std::vector<std::string> data;
public:
StringData();
std::string operator [](const unsigned int& n) const;
};
#endif
鎴戦噸杞戒簡[]錛岃繖鏍峰湪璋冪敤鏁版嵁鐨勬椂鍊欐洿鍔犵洿瑙傘傛垜浠皢鏁版嵁閮藉啓鍦⊿tringData鐨勬瀯閫犲嚱鏁頒腑錛屽皢鏉ettext涔熷彧闇瑕佹彁鍙朣tringData鐨勫疄鐜版枃浠跺氨鍙互浜嗐?br>
#include "string_data.h"
StringData::StringData()
{
setlocale(LC_ALL, "");
bindtextdomain("StringData", "./po");
textdomain("StringData");
//0
data.push_back(gettext("Up was pressed."));
//1
data.push_back(gettext("Down was pressed."));
//2
data.push_back(gettext("Left was pressed."));
//3
data.push_back(gettext("Right was pressed."));
//4
data.push_back(gettext("Other key was pressed."));
}
std::string StringData::operator [](const unsigned int& n) const
{
if ( n >= data.size() )
return 0;
return data[n];
}
1.6錛氬仛涓猤ettext鐨勬壒澶勭悊
濡傛灉浣犳寜鐓ф垜鍏ㄩ潰浠嬬粛鐨勶紝瀹夎浜哖oedit錛屼篃瀹夎浜咷nuWin32錛岄偅涔堬紝鎴戜滑鍋氫釜鎵瑰鐞嗘枃浠惰浠巗tring_data.cpp鍒癝tringData.mo鐨勮漿鎹㈡洿鍔犵畝鍗曞惂銆傦紙濡傛灉瀹夎璺緞涓嶄竴鏍瘋鍋氱浉搴旂殑淇敼錛夈?/p>
@set path=C:\Program Files\GnuWin32\bin;%PATH%;
xgettext --force-po -o string_data.pot string_data.cpp
msginit -l zh_CN -o StringData.po -i string_data.pot
@set path=C:\Program Files\Poedit\bin;%PATH%;
poedit StringData.po
del string_data.pot
del StringData.po
Poedit鎵撳紑StringData.po鐨勬椂鍊欎細鎶ラ敊錛岄偅鏄洜涓烘枃浠舵寚鏄庣殑緙栫爜涓嶅彲鐢紝璇峰湪“瀛楃闆?#8221;涓夋嫨UTF-8錛屽彟澶栵紝鍦?#8220;宸ョ▼鍚嶇О浠ュ強鐗堟湰”涓啓鐐逛俊鎭紝涓嶈浣跨敤榛樿鍊煎氨鍙互浜嗐傜劧鍚庣炕璇戝茍淇濆瓨錛孲tringData.mo鏂囦歡灝辯敓鎴愪簡銆?

]]>