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

Reply via email to