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.
*/
- size_t const pos1 = trans.find(from_ascii("[["));
- if (pos1 != docstring::npos) {
- size_t const pos2 = trans.find(from_ascii("]]"), pos1);
- if (pos2 != docstring::npos)
- trans.erase(pos1, pos2 - pos1 + 2);
+ static docstring const ctx_start = from_ascii("[[");
+ static docstring const ctx_end = from_ascii("]]");
+ 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;
}
}
// This version use the traditional gettext.
Messages::Messages(string const & l)
- : lang_(l), warned_(false)
+ : lang_(l)
{
// strip off any encoding suffix, i.e., assume 8-bit po files
size_t i = lang_.find(".");
// FIXME: gettext sometimes "forgets" the ucs4_codeset we set
// in init(), which leads to severe message corruption (#7371)
// We set it again here unconditionally. A real fix must be found!
- LASSERT(bind_textdomain_codeset(PACKAGE, ucs4_codeset), /**/);
+ LATTEST(bind_textdomain_codeset(PACKAGE, ucs4_codeset));
char const * m_c = m.c_str();
char const * trans_c = gettext(m_c);
pair<TranslationCache::iterator, bool> result =
cache_.insert(make_pair(m, trans));
- LASSERT(result.second, /**/);
+ LASSERT(result.second, return from_utf8(m));
return result.first->second;
}
} // namespace lyx
#endif
-
-#if 0
-
--#include <locale>
-
-namespace lyx {
-
-// This version of the Pimpl utilizes the message capability of
-// libstdc++ that is distributed with GNU G++.
-class Messages::Pimpl {
-public:
- typedef messages<char>::catalog catalog;
-
- Pimpl(string const & l)
- : lang_(l),
- loc_gl(lang_.c_str()),
- mssg_gl(use_facet<messages<char> >(loc_gl))
- {
- //LYXERR("Messages: language(" << l << ") in dir(" << dir << ")");
-
- string const locale_dir = package().locale_dir().toFilesystemEncoding();
- cat_gl = mssg_gl.open(PACKAGE, loc_gl, locale_dir.c_str());
-
- }
-
- ~Pimpl()
- {
- mssg_gl.close(cat_gl);
- }
-
- docstring const get(string const & msg) const
- {
- return mssg_gl.get(cat_gl, 0, 0, msg);
- }
-private:
- ///
- string lang_;
- ///
- locale loc_gl;
- ///
- messages<char> const & mssg_gl;
- ///
- catalog cat_gl;
-};
-
-} // namespace lyx
-
-#endif