Next: , Previous: , Up: Preparing Translatable Strings   [Contents][Index]


4.3.6 No programmer-defined format string directives

The GNU C Library’s <printf.h> facility and the C++ standard library’s <format> header file make it possible for the programmer to define their own format string directives. However, such format directives cannot be used in translatable strings, for two reasons:

To avoid this situation, you need to move the formatting with the custom directive into a format string that does not get translated.

For example, assuming code that makes use of a %r directive:

fprintf (stream, _("The contents is: %r"), data);

you would rewrite it to:

char *tmp;
if (asprintf (&tmp, "%r", data) < 0)
  error (...);
fprintf (stream, _("The contents is: %s"), tmp);
free (tmp);

Similarly, in C++, assuming you have defined a custom formatter for the type of data, the code

cout << format (_("The contents is: {:#$#}"), data);

should be rewritten to:

string tmp = format ("{:#$#}", data);
cout << format (_("The contents is: {}"), tmp);