diff --git a/gcc/ABOUT-GCC-NLS b/gcc/ABOUT-GCC-NLS index e90a67144e3..9424de42e15 100644 --- a/gcc/ABOUT-GCC-NLS +++ b/gcc/ABOUT-GCC-NLS @@ -23,6 +23,22 @@ For example, GCC source code should not contain calls like `error ("unterminated comment")' instead, as it is the `error' function's responsibility to translate the message before the user sees it. +In general, use no markup for strings that are the immediate format string +argument of a diagnostic function. Use G_("str") for strings that will be +used as the format string for a diagnostic but are e.g. assigned to a +variable first. Use N_("str") for strings that are not diagnostic format +strings, but will still be translated later. Use _("str") for strings that +will not be translated elsewhere. It's important not to use _("str") in +the initializer of a statically allocated variable; use one of the others +instead and make sure that uses of that variable translate the string, +whether directly with _(msg) or by passing it to a diagnostic or other +function that performs the translation. + +Avoid using %s to compose a diagnostic message from multiple translatable +strings; instead, write out the full diagnostic message for each variant. +Only use %s for message components that do not need translation, such as +keywords. + By convention, any function parameter in the GCC sources whose name ends in `msgid' is expected to be a message requiring translation. If the parameter name ends with `gmsgid', it is assumed to be a GCC