mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-30 05:12:40 +00:00
remove properly [[context]] strings from translated messages
src/Messages.cpp: general cleanup. (cleanTranslation): remove [[context]] strings from a docstring. Use plain string manupulation instead of regular expressions. (get): use cleanTranslation also on strings that got translated. git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@21641 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
8b1cc5bfef
commit
70a25df0ee
101
src/Messages.cpp
101
src/Messages.cpp
@ -15,20 +15,51 @@
|
|||||||
|
|
||||||
#include "support/docstring.h"
|
#include "support/docstring.h"
|
||||||
#include "support/environment.h"
|
#include "support/environment.h"
|
||||||
#include "support/filetools.h"
|
|
||||||
#include "support/Package.h"
|
#include "support/Package.h"
|
||||||
#include "support/unicode.h"
|
#include "support/unicode.h"
|
||||||
|
|
||||||
#include <boost/current_function.hpp>
|
#include <boost/current_function.hpp>
|
||||||
#include <boost/regex.hpp>
|
|
||||||
|
|
||||||
#include <cerrno>
|
#include <cerrno>
|
||||||
|
|
||||||
|
using std::endl;
|
||||||
|
using std::map;
|
||||||
|
using std::string;
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
|
||||||
|
using lyx::docstring;
|
||||||
|
using lyx::from_ascii;
|
||||||
|
|
||||||
|
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.
|
||||||
|
*/
|
||||||
|
docstring::size_type const pos1 = trans.find(from_ascii("[["));
|
||||||
|
if (pos1 != docstring::npos) {
|
||||||
|
docstring::size_type const pos2
|
||||||
|
= trans.find(from_ascii("]]"), pos1);
|
||||||
|
if (pos2 != docstring::npos)
|
||||||
|
trans.erase(pos1, pos2 - pos1 + 2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#ifdef ENABLE_NLS
|
#ifdef ENABLE_NLS
|
||||||
|
|
||||||
#ifdef HAVE_LOCALE_H
|
# ifdef HAVE_LOCALE_H
|
||||||
# include <locale.h>
|
# include <locale.h>
|
||||||
#endif
|
# endif
|
||||||
|
|
||||||
# if HAVE_GETTEXT
|
# if HAVE_GETTEXT
|
||||||
# include <libintl.h> // use the header already in the system *EK*
|
# include <libintl.h> // use the header already in the system *EK*
|
||||||
@ -36,15 +67,8 @@
|
|||||||
# include "../intl/libintl.h"
|
# include "../intl/libintl.h"
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
using std::endl;
|
|
||||||
using std::make_pair;
|
|
||||||
using std::map;
|
|
||||||
using std::string;
|
|
||||||
|
|
||||||
namespace lyx {
|
namespace lyx {
|
||||||
|
|
||||||
static boost::regex const reg("^([^\\[]*)\\[\\[[^\\]]*\\]\\]$");
|
|
||||||
|
|
||||||
using support::package;
|
using support::package;
|
||||||
using support::getEnv;
|
using support::getEnv;
|
||||||
using support::setEnv;
|
using support::setEnv;
|
||||||
@ -115,35 +139,23 @@ docstring const Messages::get(string const & m) const
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
char const * tmp = m.c_str();
|
char const * m_c = m.c_str();
|
||||||
char const * msg = gettext(tmp);
|
char const * trans_c = gettext(m_c);
|
||||||
docstring translated;
|
docstring trans;
|
||||||
if (!msg || msg == tmp) {
|
if (!trans_c)
|
||||||
if (!msg)
|
lyxerr << "Undefined result from gettext" << endl;
|
||||||
lyxerr << "Undefined result from gettext" << endl;
|
else if (trans_c == m_c) {
|
||||||
//else
|
LYXERR(Debug::DEBUG, "Same as entered returned");
|
||||||
// lyxerr << "Same as entered returned" << endl;
|
trans = from_ascii(m);
|
||||||
// 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.
|
|
||||||
boost::smatch sub;
|
|
||||||
if (regex_match(m, sub, reg))
|
|
||||||
translated = from_ascii(sub.str(1));
|
|
||||||
else
|
|
||||||
translated = from_ascii(tmp);
|
|
||||||
} else {
|
} else {
|
||||||
LYXERR(Debug::DEBUG, "We got a translation");
|
LYXERR(Debug::DEBUG, "We got a translation");
|
||||||
// m is actually not a char const * but ucs4 data
|
// m is actually not a char const * but ucs4 data
|
||||||
translated = reinterpret_cast<char_type const *>(msg);
|
trans = reinterpret_cast<char_type const *>(trans_c);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cleanTranslation(trans);
|
||||||
|
|
||||||
|
// Reset environment variables as they were.
|
||||||
if (!lang_.empty()) {
|
if (!lang_.empty()) {
|
||||||
// Reset everything as it was.
|
// Reset everything as it was.
|
||||||
setEnv("LANGUAGE", oldLANGUAGE);
|
setEnv("LANGUAGE", oldLANGUAGE);
|
||||||
@ -154,7 +166,7 @@ docstring const Messages::get(string const & m) const
|
|||||||
}
|
}
|
||||||
|
|
||||||
std::pair<TranslationCache::iterator, bool> result =
|
std::pair<TranslationCache::iterator, bool> result =
|
||||||
cache_.insert(std::make_pair(m, translated));
|
cache_.insert(std::make_pair(m, trans));
|
||||||
|
|
||||||
BOOST_ASSERT(result.second);
|
BOOST_ASSERT(result.second);
|
||||||
|
|
||||||
@ -166,11 +178,6 @@ docstring const Messages::get(string const & m) const
|
|||||||
#else // ENABLE_NLS
|
#else // ENABLE_NLS
|
||||||
// This is the dummy variant.
|
// This is the dummy variant.
|
||||||
|
|
||||||
using std::endl;
|
|
||||||
using std::make_pair;
|
|
||||||
using std::map;
|
|
||||||
using std::string;
|
|
||||||
|
|
||||||
namespace lyx {
|
namespace lyx {
|
||||||
|
|
||||||
Messages::Messages(string const & l) {}
|
Messages::Messages(string const & l) {}
|
||||||
@ -182,13 +189,9 @@ void Messages::init()
|
|||||||
|
|
||||||
docstring const Messages::get(string const & m) const
|
docstring const Messages::get(string const & m) const
|
||||||
{
|
{
|
||||||
// See comment above
|
docstring trans = from_ascii(m);
|
||||||
boost::smatch sub;
|
cleanTranslation(trans);
|
||||||
static boost::regex const reg("^([^\\[]*)\\[\\[[^\\]]*\\]\\]$");
|
return trans;
|
||||||
if (regex_match(m, sub, reg))
|
|
||||||
return from_ascii(sub.str(1));
|
|
||||||
else
|
|
||||||
return from_ascii(m);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace lyx
|
} // namespace lyx
|
||||||
|
Loading…
Reference in New Issue
Block a user