This commit breaks linking:
make[4]: Entering directory `/var/tmp/portage/lyx-devel/src'
CXXLD lyx
liblyxcore.a(Language.o): In function `lyx::Language::read(lyx::Lexer&)':
Language.cpp:(.text+0x55a): undefined reference to
`lyx::Messages::available() const'
collect2: ld returned 1 exit status
Configuration options used:
./configure CFLAGS="-pipe -march=core2 -O2" CXXFLAGS="-pipe -march=core2
-O2" LDFLAGS="-Wl,--as-needed -Wl,-O1" --disable-nls --without-hunspell
--without-enchant
On 12/03/2010 07:48 PM, [email protected] wrote:
Author: baum
Date: Fri Dec 3 18:48:06 2010
New Revision: 36687
URL: http://www.lyx.org/trac/changeset/36687
Log:
fix bug #6584
Modified:
lyx-devel/trunk/src/Language.cpp
lyx-devel/trunk/src/Language.h
lyx-devel/trunk/src/frontends/qt4/GuiPrefs.cpp
lyx-devel/trunk/src/support/Messages.cpp
lyx-devel/trunk/src/support/Messages.h
lyx-devel/trunk/src/support/filetools.cpp
lyx-devel/trunk/src/support/lstrings.cpp
lyx-devel/trunk/src/support/lstrings.h
Modified: lyx-devel/trunk/src/Language.cpp
==============================================================================
--- lyx-devel/trunk/src/Language.cpp Fri Dec 3 18:42:16 2010 (r36686)
+++ lyx-devel/trunk/src/Language.cpp Fri Dec 3 18:48:06 2010 (r36687)
@@ -22,6 +22,7 @@
#include "support/debug.h"
#include "support/FileName.h"
#include "support/lstrings.h"
+#include "support/Messages.h"
using namespace std;
using namespace lyx::support;
@@ -165,6 +166,10 @@
encoding_ = encodings.fromLyXName("iso8859-1");
LYXERR0("Unknown encoding "<< encodingStr_);
}
+ // cache translation status. Calling getMessages() directly in
+ // PrefLanguage::PrefLanguage() did only work if the gui language
+ // was set to auto (otherwise all languages would be marked as
available).
+ translated_ = getMessages(code()).available();
return true;
}
Modified: lyx-devel/trunk/src/Language.h
==============================================================================
--- lyx-devel/trunk/src/Language.h Fri Dec 3 18:42:16 2010 (r36686)
+++ lyx-devel/trunk/src/Language.h Fri Dec 3 18:48:06 2010 (r36687)
@@ -30,7 +30,7 @@
class Language {
public:
///
- Language() : rightToLeft_(false) {}
+ Language() : rightToLeft_(false), translated_(false) {}
/// LyX language name
std::string const& lang() const { return lang_; }
/// Babel language name
@@ -43,6 +43,8 @@
std::string const& display() const { return display_; }
/// is this a RTL language?
bool rightToLeft() const { return rightToLeft_; }
+ /// Is an (at least partial) translation of this language available?
+ bool translated() const { return translated_; }
/// default encoding
Encoding const * encoding() const { return encoding_; }
///
@@ -98,6 +100,8 @@
bool internal_enc_;
///
bool as_babel_options_;
+ ///
+ bool translated_;
};
Modified: lyx-devel/trunk/src/frontends/qt4/GuiPrefs.cpp
==============================================================================
--- lyx-devel/trunk/src/frontends/qt4/GuiPrefs.cpp Fri Dec 3 18:42:16
2010 (r36686)
+++ lyx-devel/trunk/src/frontends/qt4/GuiPrefs.cpp Fri Dec 3 18:48:06
2010 (r36687)
@@ -2180,12 +2180,20 @@
defaultDecimalPointLE->setInputMask("X; ");
defaultDecimalPointLE->setMaxLength(1);
- // FIXME: This is wrong, we need filter this list based on the available
- // translation.
+ set<string> added;
uiLanguageCO->blockSignals(true);
uiLanguageCO->addItem(qt_("Default"), toqstr("auto"));
for (int i = 0; i != language_model->rowCount(); ++i) {
QModelIndex index = language_model->index(i, 0);
+ // Filter the list based on the available translation and add
+ // each language code only once
+ string const name =
fromqstr(index.data(Qt::UserRole).toString());
+ Language const * lang = languages.getLanguage(name);
+ // never remove the currently selected language
+ if (lang&& name != form->rc().gui_language&& name !=
lyxrc.gui_language)
+ if (!lang->translated() || added.find(lang->code()) !=
added.end())
+ continue;
+ added.insert(lang->code());
uiLanguageCO->addItem(index.data(Qt::DisplayRole).toString(),
index.data(Qt::UserRole).toString());
}
Modified: lyx-devel/trunk/src/support/Messages.cpp
==============================================================================
--- lyx-devel/trunk/src/support/Messages.cpp Fri Dec 3 18:42:16 2010
(r36686)
+++ lyx-devel/trunk/src/support/Messages.cpp Fri Dec 3 18:48:06 2010
(r36687)
@@ -14,6 +14,7 @@
#include "support/debug.h"
#include "support/docstring.h"
#include "support/environment.h"
+#include "support/lstrings.h"
#include "support/Package.h"
#include "support/unicode.h"
@@ -121,6 +122,14 @@
}
+bool Messages::available() const
+{
+ string const test = languageTestString();
+ string const trans = to_utf8(get(test));
+ return !trans.empty()&& trans != test;
+}
+
+
docstring const Messages::get(string const& m) const
{
if (m.empty())
Modified: lyx-devel/trunk/src/support/Messages.h
==============================================================================
--- lyx-devel/trunk/src/support/Messages.h Fri Dec 3 18:42:16 2010
(r36686)
+++ lyx-devel/trunk/src/support/Messages.h Fri Dec 3 18:48:06 2010
(r36687)
@@ -26,6 +26,8 @@
Messages(std::string const& l = std::string());
///
docstring const get(std::string const& msg) const;
+ /// Is an (at least partial) translation of this language available?
+ bool available() const;
///
static void init();
///
Modified: lyx-devel/trunk/src/support/filetools.cpp
==============================================================================
--- lyx-devel/trunk/src/support/filetools.cpp Fri Dec 3 18:42:16 2010
(r36686)
+++ lyx-devel/trunk/src/support/filetools.cpp Fri Dec 3 18:48:06 2010
(r36687)
@@ -268,7 +268,7 @@
each po file is able to tell us its name. (JMarc)
*/
- string lang = to_ascii(_("[[Replace with the code of your language]]"));
+ string lang = to_ascii(_(languageTestString()));
string const language = getEnv("LANGUAGE");
if (!lang.empty()&& !language.empty())
lang = language;
Modified: lyx-devel/trunk/src/support/lstrings.cpp
==============================================================================
--- lyx-devel/trunk/src/support/lstrings.cpp Fri Dec 3 18:42:16 2010
(r36686)
+++ lyx-devel/trunk/src/support/lstrings.cpp Fri Dec 3 18:48:06 2010
(r36687)
@@ -15,6 +15,7 @@
#include "support/lstrings.h"
#include "support/convert.h"
+#include "support/gettext.h"
#include "support/qstring_helpers.h"
#include "support/textutils.h"
@@ -1283,6 +1284,12 @@
}
+string const languageTestString()
+{
+ return N_("[[Replace with the code of your language]]");
+}
+
+
template<>
docstring bformat(docstring const& fmt, int arg1)
{
Modified: lyx-devel/trunk/src/support/lstrings.h
==============================================================================
--- lyx-devel/trunk/src/support/lstrings.h Fri Dec 3 18:42:16 2010
(r36686)
+++ lyx-devel/trunk/src/support/lstrings.h Fri Dec 3 18:48:06 2010
(r36687)
@@ -283,6 +283,9 @@
/// found, else -1. The last item in \p str must be "".
int findToken(char const * const str[], std::string const& search_token);
+/// A test string that is supposed to be translated into the gettext code
+std::string const languageTestString();
+
template<class Arg1>
docstring bformat(docstring const& fmt, Arg1);