GNU gettext for Delphi, C++ Builder and Kylix 1.2 beta

Lars B. Dybdahl

Peter Thornqvist

Jacquez Garcia Vasquez

Sandro Wendt


Table of Contents
Preface
Introduction
How does GNU gettext work?
Creating po files
More gettext functions
Resourcestrings
Forms
Action
Localize your first application
New program versions, old translation files
Create a single language application with localized runtime library
Uses clauses
Solving ambiguities
Change words
Adding spaces
Using domains
Using trailing comments
Plural forms
Database applications
Preventing unwanted translations
DisplayLabel property explained
Setting displaylabel at runtime
Display label at design time
Multiple field name translations
Translation repositories
Project management
Introduction
Coordinating translations
The translator
Experienced programmers' topics
Determinism and responsibility
Text domain management
The better alternative to resourcestring
Debugging
Directives
Advanced topics
Migrating from the ITE to dxgettext
Introduction
The project
Planning
Tools I needed (and used)
Doing the conversion
Common ancestor forms are good!
Handling components dxgettext doesn't handle
Problems
Conclusion
Translation statistics
Multiple instances
Multithreading issues
API reference
procedure AddDomainForResourceString (domain:string);
procedure RemoveDomainForResourceString (domain:string);
function LoadResString(ResStringRec: PResStringRec): widestring;
function LoadResStringW(ResStringRec: PResStringRec): widestring;
function LoadResStringA(ResStringRec: PResStringRec): ansistring;
var ExecutableFilename:string;
procedure HookIntoResourceStrings (enabled:boolean=true; SupportPackages:boolean=false);
const DebugLogFilename='c:\dxgettext-log.txt';
TExecutable
TGetPluralForm
TGnuGettextInstance class
procedure UseLanguage(LanguageCode: string);
function _(msg:widestring):widestring;
function GetCurrentLanguage:string;
function gettext(msg:widestring):widestring;
function dgettext(Domain: string; MsgId: widestring): widestring;
function ngettext(const singular,plural:widestring;Number:longint):widestring;
function dngettext(Domain,singular,plural:widestring;Number:longint):widestring;
function getcurrenttextdomain:string;
procedure textdomain(Domain:string);
procedure bindtextdomain(Domain:string; Directory:string);
procedure bindtextdomainToFile (Domain,Filename:string);
procedure GetListOfLanguages (domain:string; list:TStrings);
function GetTranslationProperty (Propertyname:string):WideString;
function GetTranslatorNameAndEmail:widestring;
procedure SaveUntranslatedMsgids(filename: string);
procedure TranslateProperties(AnObject:TObject; textdomain:string='');
procedure TranslateComponent(AnObject: TComponent; TextDomain:string='');
function TP_CreateRetranslator:TExecutable;
procedure TP_Ignore(AnObject:TObject; const name:string);
procedure TP_GlobalIgnoreClass (IgnClass:TClass);
procedure TP_GlobalIgnoreClassProperty (IgnClass:TClass;propertyname:string);
procedure TP_GlobalHandleClass (HClass:TClass;Handler:TTranslator);
"Hello, World" source code
Sample.dpr
gginitializer.pas
SampleForm.pas
SampleForm.dfm
Dxgettext command-line tools reference
assemble
dfntopo
dxgettext
dxgreg
ixtopo
msgimport
msgmergePOT
msgmkignore
msgremove
msgshowheader
msgsplitTStrings
msgstripCR
GNU Command-line tools reference
msgattrib
msgcat
msgcmp
msgcomm
msgen
msgexec
msgfilter
msgfmt
msggrep
msghack
msginit
msgmerge
msgunfmt
msguniq
xgettext
GUI tools reference
PO files
MO files
Executables (DLL, EXE files)
File folders
Standards
ISO 639 language codes
ISO 3166 country codes
File formats
The format of GNU PO files
The format of GNU MO files
How to handle specific classes
VCL, important ones
VCL, not so important
Database (DB unit)
MIDAS/Datasnap
Database controls
Interbase Express (IBX)
Borland Database Engine (BDE)
ADO components
ActiveX stuff
Turbopower Orpheus
Turbopower Essentials
TMS Software TAdvStringGrid
Frequently Asked Questions
Index