在linux/unix平台上面做g11n的開發,大抵都會用到gettext庫/工具集(
ftp://ftp.gnu.org/gnu/gettext/ ) 和libiconv(
http://www.gnu.org/software/libiconv/) ,前者是用於實現resource bundle,而後者用於各種編碼轉化。
(注:這裡沒有考慮cross-platform)
1. 實現方法
a . 使用po檔案作為資源檔案 (建議編碼是utf-8)
一方面因為utf-8相容ansi,另外一方面考慮到g11n的程式大部分使用utf-8輸出,比如輸出到database,web ui, file等等。
b. 使用getext從resource file ( mo檔案)讀到相應的l10n resource檔案
注意這裡需要先setlocale來設定locale
#include
<
stdio.h
>
#include
<
locale.h
>
#include
<
libintl.h
>
#define
_(string) gettext (string)
intmain(
intargc,
char
**argv)
if(bindtextdomain(package, 「
/usr
/share
/locale」)
==null)
if(textdomain(package)
==null)
printf(「
%s/n」, _(「hello, world
!」));
return0;
} c.如果要輸出到控制台(console),因為不是console都支援unicode output,所以推薦的方法是首先是把utf-8轉化為本地編碼,然後使用printf輸出。不推薦使用wprintf進行輸出,一方面是因為wchar_t的大小隨編譯器不同,不好控制。另外一方面,很多wprintf的實現也都是先把wchar_t轉為本地編碼,然後輸出。轉化編碼使用libconv
d.如果要輸出到web pages,database,file,編碼推薦使用utf-8.
e.如果要輸出本地化的日期和時間,使用api: strftime
#include
<
stdio.h
>
#include
<
time.h
>
intmain(
intargc,
char
**argv)
if((ptm
=localtime(
&t))
==null)
strftime(buffer,
sizeof
(buffer), 「%x
%x」, ptm);
printf(「
%s/n」, buffer);
return0;
} f. 如果要輸出本地化的數字和貨幣,使用api: strfmon
#include
<
stdio.h
>
#include
<
monetary.h
>
intmain(
intargc,
char
**argv)
2.目錄結構
/product
/i18n
/zh_tw
your.mo
/ja_jp
your.mo
從Oracle官網了解G1
提取到以下關鍵字 young generation的總體記憶體大小是非常容易增加或者減少的。最關鍵的是young gc是stw的,並且是使用多執行緒來完成的堆使用的比例超過initiatingheapoccupancypercent,g1會開始marking階段。g1老年代收集的階段 xx useg...
G1 中的記憶體分割槽引用 RSet
在g1 物件時,會根據分割槽之間的引用關係快速定位到引用者 比如乙個老生代分割槽有乙個新生區的物件引用了,即 young.field old 則old物件對應的rset中會標記young所在分割槽的位置 找到分割槽後再尋找分區內引用old物件的young物件 管理引用通過add reference函...
垃圾收集器(五) G1收集器
初始標記,標記gc roots直接關聯的物件,新增tams標記 兩個指標 stw 併發標記,從gc roots沿著引用關係查詢,如果使用者執行緒同時修改了引用關係,新增satb標記 此時的新物件分配到tams標記之外的區域 併發。最終標記 處理satb標記,stw 篩選 按照 價值進行 對於乙個re...