When placeholders are used, the context can indicate what will be substituted for the placeholder (e.g. "%1$s[[date]], %1$s[[time]]). ---
Any objections to this patch ? I think it will be helpful for the translators. Vincent README.localization | 5 +++-- src/support/Messages.cpp | 27 +++++++++++++++++---------- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/README.localization b/README.localization index 52280f9..2f77eec 100644 --- a/README.localization +++ b/README.localization @@ -71,8 +71,9 @@ appear in your translations! Please take them exactly as they are or you may experience crashes when running LyX. [[Context]] is used to distinguish otherwise identical strings, which could -have different translations depending on the Context. [[Context]] appears only -in msgid string and should not be repeated in the translated version. +have different translations depending on the Context. It can also be used to +indicate what is substituted for a placeholder. [[Context]] appears only in +msgid string and should not be repeated in the translated version. {} refer to counters and must not be translated. An example would be: msgid "Algorithm \\arabic{theorem}" diff --git a/src/support/Messages.cpp b/src/support/Messages.cpp index 1f56f4d..0ce9d55 100644 --- a/src/support/Messages.cpp +++ b/src/support/Messages.cpp @@ -105,19 +105,26 @@ void cleanTranslation(docstring & trans) Some english words have different translations, depending on context. In these cases the original string is augmented by context information (e.g. "To:[[as in 'From page x to page - y']]" and "To:[[as in 'From format x to format y']]". This - means that we need to filter out everything in double square - brackets at the end of the string, otherwise the user sees - bogus messages. If we are unable to honour the request we - just return what we got in. + y']]" and "To:[[as in 'From format x to format y']]". Also, + when placeholders are used, the context can indicate what will + be substituted for the placeholder (e.g. "%1$s[[date]], %1$s + [[time]]). This means that we need to filter out everything + in double square brackets at the end of the string, otherwise + the user sees bogus messages. If we are unable to honour the + request we just return what we got in. */ static docstring const ctx_start = from_ascii("[["); static docstring const ctx_end = from_ascii("]]"); - size_t const pos1 = trans.find(ctx_start); - if (pos1 != docstring::npos) { - size_t const pos2 = trans.find(ctx_end, pos1); - if (pos2 != docstring::npos) - trans.erase(pos1, pos2 - pos1 + 2); + while (true) { + size_t const pos1 = trans.find(ctx_start); + if (pos1 != docstring::npos) { + size_t const pos2 = trans.find(ctx_end, pos1); + if (pos2 != docstring::npos) { + trans.erase(pos1, pos2 - pos1 + 2); + continue; + } + } + break; } } -- 1.8.0.msysgit.0