GNU Gettext采用的是字典方式,按照词汇对应。而且,各个细节都非常贴心。安装后,在工程目录文件夹上点右键即可生成字典模板,然后在某个特定语言文件上右键合并,即可智能合并刚生成的模板,字典文件采用通用的PO格式,可以采用通用编辑器编辑(推荐Poedit,很好用)。另外,最贴心的地方就是,对于混杂在代码中的字符串,只要使用一个函数_()将字符串扩起来,再重新生成字典模板即可将其加入翻译字典;对于一些动态生成的按钮、对话框标题等,只要将其加入resourcestring即可。当然,缺点也是有的:1、没有图形化方式编辑,需要自行添加代码(其实没几行)2、对中文化支持不好,需要自行添加代码解决(设置一下全局默认字体大小即可) 3、一词多义的情况不好处理(加空格或者放到新的domain里)
1、在gnugettext.pas文件中找到TGnuGettextInstance.WhenNewLanguage函数,并改写为
procedure TGnuGettextInstance.WhenNewLanguage(const LanguageID: string);
var
s:string;
font:TStrings;
i,code:Integer;
begin
// This is meant to be empty.
...{Read font info from po file, by Zero File}
// reset charset first
DefFontData.Charset:=DEFAULT_CHARSET;
//read properties
s := GetTranslationProperty('Default-Font');
if s = '' then Exit;
font:=TStringList.Create;
font.Delimiter:=';';
font.DelimitedText:= s;
for i:=0 to font.Count-1 do
begin
s:=LowerCase(font.Names); if 'name' = s then
DefFontData.Name:=font.ValueFromIndex else if 'size' = s then
DefFontData.Height:= -MulDiv(StrToInt(font.ValueFromIndex),
GetDeviceCaps(GetDC(0), LOGPIXELSY), 72)
else if 'charset' = s then begin
if IdentToCharset(font.ValueFromIndex,code) then
DefFontData.Charset:= code;
end;
end;
end;