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);

Reply via email to