[the "translation" patch series] Part 4: translating the LyX menu on the mac

* development/MacOSX/Makefile.am: when installing, create bogus 
	language directories to allow translation through Qt.

	* src/frontends/qt4/GuiApplication.cpp (MenuTranslator): new class, 
	redirects some Qt translation requests to gettext.
	(GuiApplication): install the MenuTranslator.



git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@19354 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Jean-Marc Lasgouttes 2007-08-07 21:23:40 +00:00
parent b708d5c53b
commit 951701394e
3 changed files with 56 additions and 2 deletions

View File

@ -1,5 +1,7 @@
include $(top_srcdir)/config/common.am include $(top_srcdir)/config/common.am
LINGUAS = $(srcdir)/../../po/LINGUAS
SUBDIRS = spotlight SUBDIRS = spotlight
bundledir = ${prefix}/Contents bundledir = ${prefix}/Contents
@ -9,3 +11,9 @@ dist_bin_SCRIPTS = lyxeditor
dist_pkgdata_DATA = COPYING LyXapp.icns LyX.icns lyxrc.dist dist_pkgdata_DATA = COPYING LyXapp.icns LyX.icns lyxrc.dist
install-data-hook:
LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" $(LINGUAS)`; \
for f in $$LINGUAS_ ; do \
$(MKDIR_P) $(pkgdatadir)/$$f.lproj ; \
done

View File

@ -31,6 +31,7 @@
#include "Color.h" #include "Color.h"
#include "debug.h" #include "debug.h"
#include "FuncRequest.h" #include "FuncRequest.h"
#include "gettext.h"
#include "LyX.h" #include "LyX.h"
#include "LyXFunc.h" #include "LyXFunc.h"
#include "LyXRC.h" #include "LyXRC.h"
@ -119,9 +120,9 @@ GuiApplication::GuiApplication(int & argc, char ** argv)
if (qt_trans_.load(language_name, if (qt_trans_.load(language_name,
QLibraryInfo::location(QLibraryInfo::TranslationsPath))) QLibraryInfo::location(QLibraryInfo::TranslationsPath)))
{ {
qApp->installTranslator(&qt_trans_); installTranslator(&qt_trans_);
// even if the language calls for RtL, don't do that // even if the language calls for RtL, don't do that
qApp->setLayoutDirection(Qt::LeftToRight); setLayoutDirection(Qt::LeftToRight);
LYXERR(Debug::GUI) LYXERR(Debug::GUI)
<< "Successfully installed Qt translations for locale " << "Successfully installed Qt translations for locale "
<< fromqstr(language_name) << std::endl; << fromqstr(language_name) << std::endl;
@ -130,6 +131,11 @@ GuiApplication::GuiApplication(int & argc, char ** argv)
<< "Could not find Qt translations for locale " << "Could not find Qt translations for locale "
<< fromqstr(language_name) << std::endl; << fromqstr(language_name) << std::endl;
#ifdef Q_WS_MACX
// This allows to translate the strings that appear in the LyX menu.
addMenuTranslator();
#endif
using namespace lyx::graphics; using namespace lyx::graphics;
Image::newImage = boost::bind(&QLImage::newImage); Image::newImage = boost::bind(&QLImage::newImage);
@ -343,6 +349,38 @@ bool GuiApplication::x11EventFilter(XEvent * xev)
#endif #endif
////////////////////////////////////////////////////////////////////////
// Mac specific stuff goes here...
class MenuTranslator : public QTranslator {
public:
virtual ~MenuTranslator() {};
virtual QString translate(const char * context,
const char * sourceText,
const char * comment = 0) const;
};
QString MenuTranslator::translate(const char * /*context*/,
const char * sourceText,
const char *) const
{
string const s = sourceText;
if (s == N_("About %1") || s == N_("Preferences")
|| s == N_("Reconfigure") || s == N_("Quit %1"))
return qt_(s);
else
return QString();
}
void GuiApplication::addMenuTranslator()
{
menu_trans_.reset(new MenuTranslator());
installTranslator(menu_trans_.get());
}
} // namespace frontend } // namespace frontend
} // namespace lyx } // namespace lyx

View File

@ -21,6 +21,8 @@
#include "frontends/Application.h" #include "frontends/Application.h"
#include <boost/scoped_ptr.hpp>
#include <QApplication> #include <QApplication>
#include <QTranslator> #include <QTranslator>
@ -32,6 +34,7 @@ class socket_callback;
namespace frontend { namespace frontend {
class GuiWorkArea; class GuiWorkArea;
class MenuTranslator;
/// The Qt main application class /// The Qt main application class
/** /**
@ -107,6 +110,11 @@ public:
bool x11EventFilter (XEvent * ev); bool x11EventFilter (XEvent * ev);
#endif #endif
/// A translator suitable for the entries in the LyX menu.
/// Only needed with Qt/Mac.
void addMenuTranslator();
///
boost::scoped_ptr<MenuTranslator> menu_trans_;
}; // GuiApplication }; // GuiApplication
extern GuiApplication * guiApp; extern GuiApplication * guiApp;