#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
params.
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.