#include "testoptions.h" // ... int main(int argc, char **argv) { x::locale locale(x::locale::base::environment()); x::messages msgcat(x::messages::create(locale, "testprog")); testoptions opts(msgcat); std::list<std::string> args(opts.parse(argc, argv, locale)->args);
The code generated by the
optgen.xsl
contains localizable strings.
A localized output from the default “--help” and
“--usage” options is produced by passing
a message catalog to the
option class constructor, and the
locale object as the third parameter
to parse
().
The code generated by the
optgen.xsl
marks localizable strings by
N_
and NN_
.
If using GNU gettext,
add “--keyword=N_ --keyword=NN_:1,2” to the
XGETTEXT_OPTIONS
setting in
po/Makevars
. The localizable strings are:
Long option names, the
longopt
element.
Option descriptions, the
descr
element.
Option argument descriptions, the
argdescr
element.
Non-option argument names, the
name
element in the
arg
.
gettextmsg
() with localizable strings<descr>Specify up to 3 files</descr>
This literal string is localizable, but here's a better way:
<descr> <format>Specify up to %1% files</format> <param>nfiles</param> </descr>
Instead of a literal string, the
descr
contains a
format
and one or more
param
s.
This example calls
gettextmsg
()
to format a localizable string.
format
specifies the localized string
passed as a first parameter to gettextmsg
(), with
any remaining param
elements giving the
additional parameters to gettextmsg
.
The contents of param
get inserted as is,
into the generated code. Here, nfiles
might be a member from the option parser object's
superclass.
<descr> <format> <singular>Specify up to %1% file</singular> <plural>Specify up to %1% files</plural> <value>nfiles</value> </format> <param>nfiles</param> </descr>
Instead of a literal string in the
format
,
this is an example of
GNU gettext's support
for discrete singular and plural forms of localizable strings.
format
's
singular
and
plural
strings specify the singular and plural forms
of a localizable string, selected by
value
.
Note that value
only selects the singular or
the plural form of the localized string.
Once selected, the localized string still has a parameter that
gets replaces by the
param
.