锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
鏈榪戝湪瀛︿範Linux錛屼富瑕佽冭檻鍒拌法騫沖彴寮鍙戙傛垜涓鐩撮兘鍦ㄦ濊冨叧浜庝腑鏂囪緭鍏ョ殑闂錛屽湪win32涓嬭В鍐寵搗鏉ラ偅涔堥夯鐑︼紝闅鵑亾SDL鐨勪綔鑰呬細涓嶈В鍐沖悧鈹鈹濡傛灉鏄痓ug鐨勮瘽銆備簨瀹炶瘉鏄庯紝鍦↙inux騫沖彴涓嬶紝鎴戜滑鑷繁鎶奊B2312寰Unicode杞崲鐨勫伐浣滃氨澶氫綑浜嗐傚綋鍓峀inux鍐呴儴鐢ㄧ殑灝辨槸UTF-8錛堟垜鐨勭郴緇熸槸Debian 4.0錛夛紝SDL鐨凾TF鍑芥暟瀹屽叏鍙互姝e父宸ヤ綔銆備笉榪囷紝鍦↙inux涓嬮潰涔熶細鏈変簺闂錛岀幇鍦ㄥ彂鐜扮殑鏈夎繖浜涳紝澶у鏈夊彂鐜扮殑緇х畫甯垜琛ュ厖鍝堛?br>
1銆佸湪Linux涓嬶紝TTF_RenderUTF8_Blended 鏄彲浠ユ甯告覆鏌撶畝浣撲腑鏂囩殑銆備絾鏄笉鐭ラ亾涓轟粈涔堬紝Solid鐨勬覆鏌撲細鎶ラ敊錛屽叡浜紙鍔ㄦ侀摼鎺ワ級搴撶殑闂銆?br>2銆佸湪Linux涓嬶紝mid鏂囦歡鐢⊿DL_mixer鏄墦涓嶅紑鐨勩傝嚦灝戞垜鐨勬儏鍐墊槸榪欐牱錛屾垜瑁呬簡ALSA鐨勫0鍗¢┍鍔紝涓嶇煡閬撹繕闇瑕佸仛浜涗粈涔堟墠鑳芥斁midi銆?br>3銆佺洿鎺ヨ浜咥LSA鐨勯┍鍔ㄦ挱鏀維DL_mixer鏄湁鍣煶鐨勩傝В鍐蟲柟娉曪紝涔熸槸鎵撳紑Linux涓嬭蔣浠舵販闊?ESD)鐨勬柟娉曞涓嬶細
娣烽煶鍙互璁╀袱縐嶉煶涔愬悓鏃舵挱鏀撅紝棣栧厛闇瑕佸畨瑁卨ibesd-alsa0錛岀敤Synaptic鎴杝udo apt-get install絳夋柟寮忛兘鍙互榪涜瀹夎錛屽畠灝卞湪Ubuntu瀹樻柟杞歡搴撲腑銆傜劧鍚庯紝鐢╯udo gedit鎴栨偍鍠滄鐨勬枃鏈紪杈戝櫒鍒涘緩鏂囦歡
/etc/asound.conf
type hw
card 0
}
pcm.!default {
type plug
slave.pcm "dmixer"
}
pcm.dmixer {
type dmix
ipc_key 1025
slave {
pcm "hw:0,0"
period_time 0
period_size 1024
buffer_size 4096
periods 128
rate 44100
}
bindings {
0 0
1 1
}
}
spawn_options=-terminate -nobeeps -as 2 -d default
spawn_wait_ms=100
# default options are used in spawned and non-spawned mode
default_options=
]]>
4.1錛氫負浠涔坕conv涓嶈兘瀹屽叏姝g‘鐨勮漿鎹nicode錛?br>
鎴戜笉鏄厛鐭ワ紝鏁欑▼閲岄潰鏄暣鐞嗚繃鐨勬濊礬鍜岄昏緫欏哄簭錛屽湪鎴戠爺絀惰繖涓棶棰樼殑鏃跺欙紝澶寸華榪滆繙姣旀暀紼嬮噷闈貢寰楀銆傛垜瀹屽叏鏄粠Wesnoth鐨勬簮浠g爜鍘誨垎鏋愰棶棰樼殑錛屾墍浠ワ紝涓轟粈涔堜細鎵笂UTF-8鍜孎riBidi錛岄偅涔熸槸鍥犱負鍦ㄦ簮浠g爜涓壘鍒頒簡綰跨儲銆?br> iconv涓嶈兘瀹屽叏姝g‘鐨勮幏寰桿nicode錛屼篃灝辨槸鎴戜滑鍒氭墠閬囧埌鐨勭函姹夊瓧杞崲娌¢棶棰橈紝鑰屾湁鑻辨枃灝變笉琛屼簡銆傛垜騫朵笉娓呮榪欐槸win32涓嬬殑闂錛岃繕鏄湪Linux涓嬩篃榪欐牱錛屾垜涔熶笉娓呮鍏蜂綋鐨勭畻娉曞拰闂鐨勬牴鏈師鍥狅紝鎴戝彧鏄氳繃璇曢獙寰楀埌涓涓畻鏄〃闈㈠師鍥犵殑緇撹錛氭垜浠煡閬擄紝GB2312鍜孶nicode姹夊瓧閮戒嬌鐢?涓瓧鑺傦紙鍦║TF-8涓槸3涓瓧鑺傦級錛岃嫳鏂囧拰鏁板瓧絳夌敤1涓瓧鑺傘俰conv鍦ㄥ緱鍒頒袱涓瓧鑺傦紙unsigned char鍗充竴涓瓧鑺傚ぇ灝忥級浠g爜鐨勬椂鍊欏彲浠ユ紜殑灝咷B2312杞寲涓篣nicode錛堟垨鑰匲TF-8錛夛紝浣嗘槸鍙湁1涓瓧鑺傜殑鏃跺欏垯鍦ㄨ漿鍖朥nicode鐨勬椂鍊欑粓姝簡錛屽垢榪愮殑鏄紝濡傛灉鏄漿鍖栦負UTF-8鍒欏彲浠ユ紜殑榪涜錛屽茍涓斾篃杞寲涓?涓瓧鑺傜殑UTF-8錛堝彧闄愪簬鑻辨枃錛屾暟瀛楃瓑錛夈?br> 鎵浠ワ紝鎴戜滑鍙互鍏堥氳繃iconv灝嗗師鏉ョ殑GB2312杞寲涓篣TF-8鈥斺旀眽瀛楃敤3涓瓧鑺傦紙3涓崟浣嶇殑unsigned char錛夛紝鑻辨枃銆佹暟瀛楀拰鍩烘湰絎﹀彿鐢?涓瓧鑺傦紙1涓崟浣嶇殑unsigned char錛夈傜劧鍚庯紝鎴戜滑闇瑕佷竴涓嚱鏁幫紝灝嗚繖縐嶅艦寮忕殑UTF-8杞崲涓篠DL鎵闇瑕佺殑Uint16鐨刄nicode銆備粈涔堟牱鐨勫嚱鏁板彲浠ュ疄鐜拌繖縐嶈漿鎹㈠憿錛?br>
4.2錛氬叾瀹冪紪鐮佷笌Unicode涔嬮棿鐨勫弻鍚戣漿鎹紝GNU FriBidi
http://fribidi.freedesktop.org/wiki/
FriBidi鏄竴涓嚧鍔涗簬Unicode緙栫爜涓庡叾瀹冪紪鐮佺浉浜掕漿鎹㈢殑寮婧愰」鐩紝鍒扮洰鍓嶄負姝紝榪樻槸涓涓皻鏈畬鎴愮殑欏圭洰銆傛垜鍦ㄧ爺絀禬esnoth婧愪唬鐮佺殑鏃跺欑湅鍒拌繖鏍風殑鍑芥暟錛歠ribidi_utf8_to_unicode()錛屾墍浠ワ紝鎴戞兂鍦ㄨ繖涓嚱鏁頒腑鍙兘搴旇鍖呭惈UTF-8鍒癠nicode鐨勭畻娉曗斺斿笇鏈涗笉瑕佸お澶嶆潅銆傚湪FriBidi欏圭洰涓壘鍒拌繖涓嚱鏁幫紝瀹冨湪鏂囦歡fribidi_char_sets_utf8.c涓嬮潰錛?/p>
fribidi_utf8_to_unicode (char *s, int len, FriBidiChar *us)
/* warning: the length of input string may exceed the length of the output */
{
int length;
char *t = s;
length = 0;
while (s - t < len)
{
if (*(unsigned char *) s <= 0x7f) /* one byte */
{
*us++ = *s++; /* expand with 0s */
}
else if (*(unsigned char *) s <= 0xdf) /* 2 byte */
{
*us++ =
((*(unsigned char *) s & 0x1f) << 6) +
((*(unsigned char *) (s + 1)) & 0x3f);
s += 2;
}
else /* 3 byte */
{
*us++ =
((int) (*(unsigned char *) s & 0x0f) << 12) +
((*(unsigned char *) (s + 1) & 0x3f) << 6) +
(*(unsigned char *) (s + 2) & 0x3f);
s += 3;
}
length++;
}
*us = 0;
return (length);
}
{
int length;
unsigned char* t = utf8;
length = 0;
while (utf8 - t < len){
//one byte.ASCII as a, b, c, 1, 2, 3 ect
if ( *(unsigned char *) utf8 <= 0x7f ) {
//expand with 0s.
*unicode++ = *utf8++;
}
//2 byte.
else if ( *(unsigned char *) utf8 <= 0xdf ) {
*unicode++ = ((*(unsigned char *) utf8 & 0x1f) << 6) + ((*(unsigned char *) (utf8 + 1)) & 0x3f);
utf8 += 2;
}
//3 byte.Chinese may use 3 byte.
else {
*unicode++ = ((int) (*(unsigned char *) utf8 & 0x0f) << 12) +
((*(unsigned char *) (utf8 + 1) & 0x3f) << 6) +
(*(unsigned char *) (utf8 + 2) & 0x3f);
utf8 += 3;
}
length++;
}
*unicode = 0;
return (length);
}
4.3錛氬皢姹夊瓧錛岃嫳鏂囷紝鏁板瓧鍜岀鍙烽兘姝g‘鐨勮漿鎹負16浣嶇殑Unicode
鏈変簡iconv鍜屼笂闈㈣繖涓嚱鏁幫紝鎴戜滑緇堜簬鍙互灝咷B2312鐨勭紪鐮佹紜殑杞崲涓篣nicode浜嗐?br>
#ifndef GB2312_TO_UNICODE_H_
#define GB2312_TO_UNICODE_H_
#include <iostream>
#include <vector>
#include "GNU/iconv.h"
#include "SDL/SDL.h"
std::vector<Uint16> getUnicode(const std::string& str);
#endif
int myUTF8_to_UNICODE(Uint16* unicode, unsigned char* utf8, int len);
std::vector<Uint16> getUnicode(const std::string& str)
{
const int CHAR_SIZE = 256;
//GB2312 src
const unsigned char* src = (const unsigned char*)(str.c_str());
size_t src_len = strlen((char*)src);
//Unicode dst to get
unsigned char dst[CHAR_SIZE] = {0};
size_t dst_len = sizeof(dst);
//iconv arg
const unsigned char* in = src;
unsigned char* out = dst;
iconv_t cd;
//GB2312 to UTF-8
cd = iconv_open("UTF-8", "GB2312");
if ((iconv_t)-1 == cd){
exit (-1);
}
//conversion
iconv(cd, (const char**)&in, &src_len, (char**)&out, &dst_len);
//UTF-8 to Unicode
int utf8Len = strlen((char*)dst);
Uint16 unicodeData[CHAR_SIZE] = {0};
int unicodeLen = myUTF8_to_UNICODE(unicodeData, dst, utf8Len);
std::vector<Uint16> unicodeVectorArray;
for (int i = 0; i < unicodeLen; i++) {
unicodeVectorArray.push_back(unicodeData[i]);
}
iconv_close(cd);
return unicodeVectorArray;
}
]]>
3.1錛欸NU鐨刲ibiconv欏圭洰
http://www.gnu.org/software/libiconv/
鍐嶄竴嬈$殑錛屾劅璋紵澶х殑GNU銆傛垜浠渶瑕佺殑鏄疷nicode鐮侊紝鍦ㄧ▼搴忎腑杞崲錛屾垜浠渶瑕佺浉搴旂殑搴撱俵ibiconv鏀寔璁稿瀛楃闆嗭紝鍖呮嫭鎴戜滑灝嗙敤鍒扮殑GB2312錛孶TF-8鍜孶CS-2錛圲nicode錛夈傚叿浣撶殑錛屽湪欏圭洰涓婚〉涓婃湁璇︾粏鐨勮鏄庛傛垜浠渶瑕佹柊瀛︿範鐩存帴鐢ㄧ殑綾誨騫朵笉綣佸錛屽悓鏍風殑錛屽鏋滀綘娌′粈涔堝叴瓚h嚜宸辯紪璇戞簮浠g爜錛屽彲浠ョ洿鎺ョ敤鍦╳in32涓嬬紪璇戝ソ鐨勫ご鏂囦歡錛屽簱鍜屽姩鎬侀摼鎺ュ簱錛圖LL錛夈倃in32涓嬬殑欏圭洰涓婚〉鏄細
http://gettext.sourceforge.net/
鏈夎叮鐨勬槸錛屼綔鑰呮妸瀹冧綔涓轟簡鎴戜滑鍓嶉潰鎻愬埌鐨刧ettext鐨勪竴閮ㄥ垎銆傚湪涓嬭澆欏甸潰涓婏紝鎴戜滑鐩存帴閫夋嫨libiconv-win32錛屽悓鏍風殑錛屾垜鐩存帴緇欏嚭鎵闇瑕佺殑涓夐儴鍒嗘枃浠剁殑鐩稿叧淇℃伅錛?br>iconv.h錛氬ご鏂囦歡錛岃鍦–++浠g爜涓?include榪涙潵錛?br>iconv.lib錛氬簱鏂囦歡錛屽湪緙栬瘧鏃跺欎嬌鐢紱
iconv.dll錛氬姩鎬侀摼鎺ュ簱錛岃鏀懼埌exe鏂囦歡鑳芥壘鍒扮殑璺緞涓嬶紙閫氬父涓巈xe鍦ㄥ悓涓鏂囦歡澶逛笅闈級
涓嬮潰錛屾垜浠湅鐪媗ibiconv鐨勪嬌鐢ㄦ柟娉曘?br>
3.2錛歭ibiconv鐨勬紨紺虹▼搴?br>鎴戜滑榪樻槸杈瑰啓紼嬪簭杈瑰仛璇存槑錛?br>
#include <string>
#include <iomanip>
#include "GNU/iconv.h"
void showHex(int x);
{
//src string
const std::string str = "浣犲ソ";
//string size
const int STR_SIZE = 256;
//string to be changed
const unsigned char* src = (const unsigned char*)(str.c_str());
size_t src_len = strlen((char*)src);
//string after changed
unsigned char dst[STR_SIZE] = {0};
size_t dst_len = sizeof(dst);
//iconv's arg
const unsigned char* in = src;
unsigned char* out = dst;
std::cout << "src: " << src << std::endl;
iconv_t cd;
cd = iconv_open("UCS-2", "GB2312");
if ((iconv_t)-1 == cd){
return -1;
}
iconv(cd, (const char**)&in, &src_len, (char**)&out, &dst_len);
iconv_close(cd);
std::cout << "dst: ";
int unicode_len = strlen((char*)dst);
for (int i = 0; i < unicode_len; i++) {
showHex(dst[i]);
}
std::cout << std::endl;
return 0;
}
void showHex(int x)
{
using namespace std;
cout << hex;
cout << "0x" << setw(4) << setfill('0') << x << " ";
cout << dec;
}
3.3錛歩conv鐨勯棶棰樸?br>
鎴戜滑浼間箮宸茬粡瑙e喅闂浜嗐備絾鏄湁涓涓棶棰樻槸錛岃繖鏍瘋漿鎹㈢殑緙栫爜鏄?浣嶇殑錛屽嵆unsigned char錛岃孲DL闇瑕佺殑鏄?6浣嶇殑錛屽嵆Uint16錛涚浜屼釜闂鏄紝鎴戣浜嗭紝榪欐槸綰腑鏂囷紝浣犺瘯璇曞湪“浣?#8221;鍜?#8220;濂?#8221;涔嬮棿鍔犳鑻辮鏄粈涔堟晥鏋滐紵緇撹鏄紝杞崲涓嶈兘姝e父榪涜錛屽湪閬囧埌絎竴涓潪姹夊瓧鐨勬椂鍊欙紝灝辯粓姝簡銆?br> 闂榪樻槸娌¤В鍐籌紝鐮旂┒榪樺緱緇х畫銆?
]]>
鑷粠寮濮嬬爺絀禨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 <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;
}
1.3錛氫負婧愮▼搴忓埗浣減o鏂囦歡鍜宮o鏂囦歡
濡傛灉浣犲凡緇忓畨瑁呬簡瀹屾暣鐨勫畨瑁呭寘錛屾壘鍒扮浉鍏蟲枃浠跺す鐨刡in鐩綍錛岃繖閲屾湁寰堝宸ュ叿杞歡銆備綘鍙互閫氳繃cmd鐨勬柟寮忎竴姝ユ鐨勮漿鎹紝涔熷彲浠ワ紝鍋風偣鍎挎噿錛屽洜涓烘湁鏇村姞鐜版垚鐨勫伐鍏峰彲浠ョ敤銆備絾鏄紝絎竴姝ワ紝浠庢簮浠g爜鎻愬彇gettext()鐨勬枃鏈紝榪樺緱闈犲懡浠わ細xgettext銆傚氨璺熺敤g++鍛戒護涓鏍鳳紝鍋囪鎴戜滑鐨勬簮鏂囦歡鍚嶆槸main.cpp錛屾垜浠妸瀹冨厛杞崲鎴愪竴涓ā鏉挎枃浠禷.pot錛?br>
# 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 ""
http://www.poedit.net/
瀹夎榪愯鍚庯紝閫夋嫨“浠嶱OT鏂囦歡鏇存柊綾葷洰”錛岀劧鍚庢墦寮鎴戜滑鍒氭墠鐨刟.pot錛屼粈涔堥兘涓嶇敤淇敼錛堝綋鐒訛紝浣犱篃鍙互鎶婅嚜宸變俊鎭兘鍐欎笂鍘伙級錛岀‘淇?#8220;瀛楃闆?#8221;鏄疷TF-8灝卞彲浠ヤ簡銆傜劧鍚庯紝鍦ㄨ嫳璇笅闈篃涓婃浛鎹㈢殑鏂囧瓧鍚э紝淇濆瓨鐨勬椂鍊欙紝鐩稿簲鐨刴o鏂囦歡涔熷氨寤虹珛璧鋒潵浜嗐?br>
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>"
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>
#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
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>
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
]]>