Implement the use of [[Context]] for placeholders

When placeholders are used, the context can indicate what will be
substituted for the placeholder (e.g. "%1$s[[date]], %1$s[[time]]).
This commit is contained in:
Vincent van Ravesteijn 2013-05-13 12:46:33 +02:00
parent b79c88034e
commit fec57fe959
2 changed files with 22 additions and 12 deletions

View File

@ -71,8 +71,9 @@ appear in your translations! Please take them exactly as they are or you may
experience crashes when running LyX. experience crashes when running LyX.
[[Context]] is used to distinguish otherwise identical strings, which could [[Context]] is used to distinguish otherwise identical strings, which could
have different translations depending on the Context. [[Context]] appears only have different translations depending on the Context. It can also be used to
in msgid string and should not be repeated in the translated version. 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: {} refer to counters and must not be translated. An example would be:
msgid "Algorithm \\arabic{theorem}" msgid "Algorithm \\arabic{theorem}"

View File

@ -34,17 +34,26 @@ void cleanTranslation(docstring & trans)
Some english words have different translations, depending on Some english words have different translations, depending on
context. In these cases the original string is augmented by context. In these cases the original string is augmented by
context information (e.g. "To:[[as in 'From page x to page context information (e.g. "To:[[as in 'From page x to page
y']]" and "To:[[as in 'From format x to format y']]". This y']]" and "To:[[as in 'From format x to format y']]". Also,
means that we need to filter out everything in double square when placeholders are used, the context can indicate what will
brackets at the end of the string, otherwise the user sees be substituted for the placeholder (e.g. "%1$s[[date]], %1$s
bogus messages. If we are unable to honour the request we [[time]]). This means that we need to filter out everything
just return what we got in. 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.
*/ */
size_t const pos1 = trans.find(from_ascii("[[")); static docstring const ctx_start = from_ascii("[[");
if (pos1 != docstring::npos) { static docstring const ctx_end = from_ascii("]]");
size_t const pos2 = trans.find(from_ascii("]]"), pos1); while (true) {
if (pos2 != docstring::npos) size_t const pos1 = trans.find(ctx_start);
trans.erase(pos1, pos2 - pos1 + 2); 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;
} }
} }