mirror of
https://bitbucket.org/smil3y/kdelibs.git
synced 2025-02-24 02:42:48 +00:00
kdecore: use the Katie translations format
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
This commit is contained in:
parent
a7fc6cd735
commit
881b47b8ea
9 changed files with 128 additions and 278 deletions
|
@ -107,14 +107,6 @@ if(X11_FOUND)
|
||||||
endif(NOT HAVE_XSYNC AND NOT HAVE_XSCREENSAVER)
|
endif(NOT HAVE_XSYNC AND NOT HAVE_XSCREENSAVER)
|
||||||
endif(X11_FOUND)
|
endif(X11_FOUND)
|
||||||
|
|
||||||
kde4_optional_find_package(Libintl)
|
|
||||||
set_package_properties(Libintl PROPERTIES
|
|
||||||
DESCRIPTION "Support for multiple languages"
|
|
||||||
URL "http://www.gnu.org/software/gettext"
|
|
||||||
TYPE RECOMMENDED
|
|
||||||
PURPOSE "Enables KDE to be available in many different languages"
|
|
||||||
)
|
|
||||||
|
|
||||||
kde4_optional_find_package(DBusMenuQt)
|
kde4_optional_find_package(DBusMenuQt)
|
||||||
set_package_properties(DBusMenuQt PROPERTIES
|
set_package_properties(DBusMenuQt PROPERTIES
|
||||||
DESCRIPTION "Support for notification area menus via the DBusMenu protocol"
|
DESCRIPTION "Support for notification area menus via the DBusMenu protocol"
|
||||||
|
|
|
@ -15,7 +15,6 @@ include(CMakePushCheckState)
|
||||||
# definitions like _GNU_SOURCE that are needed on each platform.
|
# definitions like _GNU_SOURCE that are needed on each platform.
|
||||||
set(CMAKE_REQUIRED_DEFINITIONS ${_KDE4_PLATFORM_DEFINITIONS})
|
set(CMAKE_REQUIRED_DEFINITIONS ${_KDE4_PLATFORM_DEFINITIONS})
|
||||||
|
|
||||||
kde4_bool_to_01(Libintl_FOUND HAVE_LIBINTL) # kdecore
|
|
||||||
kde4_bool_to_01(DBUSMENUQT_FOUND HAVE_DBUSMENUQT) # kdeui
|
kde4_bool_to_01(DBUSMENUQT_FOUND HAVE_DBUSMENUQT) # kdeui
|
||||||
kde4_bool_to_01(LibArchive_FOUND HAVE_LIBARCHIVE) # karchive
|
kde4_bool_to_01(LibArchive_FOUND HAVE_LIBARCHIVE) # karchive
|
||||||
kde4_bool_to_01(BZIP2_FOUND HAVE_BZIP2) # karchive
|
kde4_bool_to_01(BZIP2_FOUND HAVE_BZIP2) # karchive
|
||||||
|
|
|
@ -43,7 +43,6 @@ set(cmakeFiles
|
||||||
FindLibATASmart.cmake
|
FindLibATASmart.cmake
|
||||||
FindLibDeflate.cmake
|
FindLibDeflate.cmake
|
||||||
FindLibDRM.cmake
|
FindLibDRM.cmake
|
||||||
FindLibintl.cmake
|
|
||||||
FindLibKonq.cmake
|
FindLibKonq.cmake
|
||||||
FindLibLZMA.cmake
|
FindLibLZMA.cmake
|
||||||
FindLibMms.cmake
|
FindLibMms.cmake
|
||||||
|
|
|
@ -302,7 +302,7 @@ if(_kdeBootStrapping)
|
||||||
set(KDE4_DATA_INSTALL_DIR "${KDE4_SHARE_INSTALL_PREFIX}/apps" CACHE PATH "KDE data installation directory")
|
set(KDE4_DATA_INSTALL_DIR "${KDE4_SHARE_INSTALL_PREFIX}/apps" CACHE PATH "KDE data installation directory")
|
||||||
set(KDE4_ICON_INSTALL_DIR "${KDE4_SHARE_INSTALL_PREFIX}/icons" CACHE PATH "KDE icon installation directory")
|
set(KDE4_ICON_INSTALL_DIR "${KDE4_SHARE_INSTALL_PREFIX}/icons" CACHE PATH "KDE icon installation directory")
|
||||||
set(KDE4_KCFG_INSTALL_DIR "${KDE4_SHARE_INSTALL_PREFIX}/config.kcfg" CACHE PATH "KDE kcfg installation directory")
|
set(KDE4_KCFG_INSTALL_DIR "${KDE4_SHARE_INSTALL_PREFIX}/config.kcfg" CACHE PATH "KDE kcfg installation directory")
|
||||||
set(KDE4_LOCALE_INSTALL_DIR "${CMAKE_INSTALL_FULL_LOCALEDIR}" CACHE PATH "KDE locale installation directory")
|
set(KDE4_LOCALE_INSTALL_DIR "${KATIE_TRANSLATIONS_PATH}/kde4" CACHE PATH "KDE locale installation directory")
|
||||||
set(KDE4_SERVICES_INSTALL_DIR "${KDE4_SHARE_INSTALL_PREFIX}/kde4/services" CACHE PATH "KDE services installation directory")
|
set(KDE4_SERVICES_INSTALL_DIR "${KDE4_SHARE_INSTALL_PREFIX}/kde4/services" CACHE PATH "KDE services installation directory")
|
||||||
set(KDE4_SERVICETYPES_INSTALL_DIR "${KDE4_SHARE_INSTALL_PREFIX}/kde4/servicetypes" CACHE PATH "KDE service types installation directory")
|
set(KDE4_SERVICETYPES_INSTALL_DIR "${KDE4_SHARE_INSTALL_PREFIX}/kde4/servicetypes" CACHE PATH "KDE service types installation directory")
|
||||||
set(KDE4_SOUND_INSTALL_DIR "${KDE4_SHARE_INSTALL_PREFIX}/sounds" CACHE PATH "KDE sounds installation directory")
|
set(KDE4_SOUND_INSTALL_DIR "${KDE4_SHARE_INSTALL_PREFIX}/sounds" CACHE PATH "KDE sounds installation directory")
|
||||||
|
|
|
@ -1,45 +0,0 @@
|
||||||
# Try to find Libintl functionality, once done this will define:
|
|
||||||
#
|
|
||||||
# LIBINTL_FOUND - system has Libintl
|
|
||||||
# LIBINTL_INCLUDE_DIR - Libintl include directory
|
|
||||||
# LIBINTL_LIBRARIES - Libraries needed to use Libintl
|
|
||||||
#
|
|
||||||
# TODO: This will enable translations only if Gettext functionality is
|
|
||||||
# present in libc. Must have more robust system for release, where Gettext
|
|
||||||
# functionality can also reside in standalone Gettext library, or the one
|
|
||||||
# embedded within kdelibs (cf. gettext.m4 from Gettext source).
|
|
||||||
|
|
||||||
# Copyright (c) 2006, Chusslove Illich, <caslav.ilic@gmx.net>
|
|
||||||
# Copyright (c) 2007, Alexander Neundorf, <neundorf@kde.org>
|
|
||||||
#
|
|
||||||
# Redistribution and use is allowed according to the terms of the BSD license.
|
|
||||||
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
|
|
||||||
|
|
||||||
if(LIBINTL_INCLUDE_DIR AND LIBINTL_LIB_FOUND)
|
|
||||||
set(Libintl_FIND_QUIETLY TRUE)
|
|
||||||
endif(LIBINTL_INCLUDE_DIR AND LIBINTL_LIB_FOUND)
|
|
||||||
|
|
||||||
find_path(LIBINTL_INCLUDE_DIR libintl.h)
|
|
||||||
|
|
||||||
set(LIBINTL_LIB_FOUND FALSE)
|
|
||||||
|
|
||||||
if(LIBINTL_INCLUDE_DIR)
|
|
||||||
include(CheckFunctionExists)
|
|
||||||
check_function_exists(dgettext LIBINTL_LIBC_HAS_DGETTEXT)
|
|
||||||
|
|
||||||
if (LIBINTL_LIBC_HAS_DGETTEXT)
|
|
||||||
set(LIBINTL_LIBRARIES)
|
|
||||||
set(LIBINTL_LIB_FOUND TRUE)
|
|
||||||
else (LIBINTL_LIBC_HAS_DGETTEXT)
|
|
||||||
find_library(LIBINTL_LIBRARIES NAMES intl libintl )
|
|
||||||
if(LIBINTL_LIBRARIES)
|
|
||||||
set(LIBINTL_LIB_FOUND TRUE)
|
|
||||||
endif(LIBINTL_LIBRARIES)
|
|
||||||
endif (LIBINTL_LIBC_HAS_DGETTEXT)
|
|
||||||
|
|
||||||
endif(LIBINTL_INCLUDE_DIR)
|
|
||||||
|
|
||||||
include(FindPackageHandleStandardArgs)
|
|
||||||
find_package_handle_standard_args(Libintl DEFAULT_MSG LIBINTL_INCLUDE_DIR LIBINTL_LIB_FOUND)
|
|
||||||
|
|
||||||
mark_as_advanced(LIBINTL_INCLUDE_DIR LIBINTL_LIBRARIES LIBINTL_LIBC_HAS_DGETTEXT LIBINTL_LIB_FOUND)
|
|
|
@ -296,14 +296,37 @@ macro(KDE4_OPTIONAL_ADD_SUBDIRECTORY _dir)
|
||||||
endif()
|
endif()
|
||||||
endmacro(KDE4_OPTIONAL_ADD_SUBDIRECTORY)
|
endmacro(KDE4_OPTIONAL_ADD_SUBDIRECTORY)
|
||||||
|
|
||||||
# KDE4_OPTIONAL_FIND_PACKAGE(<name> ... )
|
# KDE4_OPTIONAL_FIND_PACKAGE(<PACKAGE> ...)
|
||||||
# This macro is a combination of OPTION() and FIND_PACKAGE(), it works like
|
# This macro is a combination of OPTION() and FIND_PACKAGE(), it works like
|
||||||
# FIND_PACKAGE(), but additionally it automatically creates an option
|
# FIND_PACKAGE(), but additionally it automatically creates an option
|
||||||
# WITH_<name>, which can be disabled via the cmake GUI or via
|
# WITH_<name>, which can be disabled via the cmake GUI or via
|
||||||
# -DWITH_<name>=OFF
|
# -DWITH_<name>=OFF
|
||||||
macro(KDE4_OPTIONAL_FIND_PACKAGE _name)
|
macro(KDE4_OPTIONAL_FIND_PACKAGE _PACKAGE)
|
||||||
option(WITH_${_name} "Search for ${_name} package" ON)
|
option(WITH_${_PACKAGE} "Search for ${_PACKAGE} package" ON)
|
||||||
if (WITH_${_name})
|
if (WITH_${_PACKAGE})
|
||||||
find_package(${_name} ${ARGN})
|
find_package(${_PACKAGE} ${ARGN})
|
||||||
endif ()
|
endif ()
|
||||||
endmacro(KDE4_OPTIONAL_FIND_PACKAGE)
|
endmacro(KDE4_OPTIONAL_FIND_PACKAGE)
|
||||||
|
|
||||||
|
# KDE4_OPTIONAL_FIND_PACKAGE(<LANGUAGE> FILE1.po ... FILEN.po)
|
||||||
|
# This macro is will create and install translation files
|
||||||
|
macro(KDE4_TRANSLATE _LANGUAGE)
|
||||||
|
foreach(_pofile ${ARGN})
|
||||||
|
get_filename_component(_abspofile "${_pofile}" ABSOLUTE)
|
||||||
|
get_filename_component(_poname "${_abspofile}" NAME_WE)
|
||||||
|
make_directory("${CMAKE_CURRENT_BINARY_DIR}")
|
||||||
|
set(trout "${CMAKE_CURRENT_BINARY_DIR}/${_poname}.tr")
|
||||||
|
string(REPLACE "@" "_" _language ${_LANGUAGE})
|
||||||
|
add_custom_target(
|
||||||
|
translations_${_language}_${_poname} ALL
|
||||||
|
COMMAND ${KATIE_TRC} "${_abspofile}" -o "${trout}"
|
||||||
|
COMMENT "Generating ${_poname}.tr"
|
||||||
|
)
|
||||||
|
set_source_files_properties("${trout}" PROPERTIES GENERATED TRUE)
|
||||||
|
install(
|
||||||
|
FILES "${trout}"
|
||||||
|
DESTINATION "${KDE4_LOCALE_INSTALL_DIR}/${_LANGUAGE}"
|
||||||
|
RENAME "${_poname}.tr"
|
||||||
|
)
|
||||||
|
endforeach()
|
||||||
|
endmacro(KDE4_TRANSLATE)
|
||||||
|
|
|
@ -38,9 +38,6 @@
|
||||||
/* Define to 1 if you have the XSync extension */
|
/* Define to 1 if you have the XSync extension */
|
||||||
#cmakedefine HAVE_XSYNC 1
|
#cmakedefine HAVE_XSYNC 1
|
||||||
|
|
||||||
/* Define to 1 if you have libintl */
|
|
||||||
#cmakedefine HAVE_LIBINTL 1
|
|
||||||
|
|
||||||
/* Define to 1 if you have DBusMenuQt */
|
/* Define to 1 if you have DBusMenuQt */
|
||||||
#cmakedefine HAVE_DBUSMENUQT 1
|
#cmakedefine HAVE_DBUSMENUQT 1
|
||||||
|
|
||||||
|
|
|
@ -35,12 +35,6 @@ set(kdecore_OPTIONAL_LIBS)
|
||||||
|
|
||||||
add_definitions(-DQT_NO_CAST_FROM_ASCII)
|
add_definitions(-DQT_NO_CAST_FROM_ASCII)
|
||||||
|
|
||||||
# compile Gettext support if available
|
|
||||||
if(LIBINTL_FOUND)
|
|
||||||
include_directories(${LIBINTL_INCLUDE_DIR})
|
|
||||||
set(kdecore_OPTIONAL_LIBS ${kdecore_OPTIONAL_LIBS} ${LIBINTL_LIBRARIES})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# compile Enchant if available
|
# compile Enchant if available
|
||||||
if(ENCHANT_FOUND)
|
if(ENCHANT_FOUND)
|
||||||
include_directories(
|
include_directories(
|
||||||
|
|
|
@ -19,135 +19,92 @@
|
||||||
|
|
||||||
#include "kcatalog_p.h"
|
#include "kcatalog_p.h"
|
||||||
#include "kstandarddirs.h"
|
#include "kstandarddirs.h"
|
||||||
|
|
||||||
#include <config.h>
|
|
||||||
|
|
||||||
#include <QtCore/QFile>
|
|
||||||
#include <QtCore/qmutex.h>
|
|
||||||
|
|
||||||
#include <kdebug.h>
|
#include <kdebug.h>
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <QFile>
|
||||||
#include <locale.h>
|
#include <QTranslator>
|
||||||
|
|
||||||
#ifdef HAVE_LIBINTL
|
static QByteArray translationData(const QByteArray &localeDir, const QByteArray &language, const QByteArray &name)
|
||||||
# include <libintl.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// = "LANGUAGE=" + 32 chars for language code + terminating zero
|
|
||||||
static const int langenvMaxlen = 42;
|
|
||||||
|
|
||||||
Q_GLOBAL_STATIC(QMutex, catalogLock)
|
|
||||||
|
|
||||||
class KMsgCtx
|
|
||||||
{
|
{
|
||||||
public:
|
QByteArray translationpath = localeDir;
|
||||||
KMsgCtx(const char* const msgctxt, const char* const msgid);
|
translationpath.append('/');
|
||||||
~KMsgCtx();
|
translationpath.append(language);
|
||||||
|
translationpath.append('/');
|
||||||
const char* const constData() const;
|
translationpath.append(name);
|
||||||
|
translationpath.append(".tr");
|
||||||
private:
|
QFile translationfile(QFile::decodeName(translationpath));
|
||||||
Q_DISABLE_COPY(KMsgCtx);
|
if (!translationfile.open(QFile::ReadOnly)) {
|
||||||
|
return QByteArray();
|
||||||
bool m_freedata;
|
|
||||||
char* m_data;
|
|
||||||
};
|
|
||||||
|
|
||||||
KMsgCtx::KMsgCtx(const char* const msgctxt, const char* const msgid)
|
|
||||||
: m_freedata(false),
|
|
||||||
m_data(nullptr)
|
|
||||||
{
|
|
||||||
const int msgidlen = qstrlen(msgid);
|
|
||||||
if (Q_UNLIKELY(msgidlen <= 0)) {
|
|
||||||
m_data = nullptr;
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
return translationfile.readAll();
|
||||||
const int msgctxtlen = qstrlen(msgctxt);
|
|
||||||
if (msgctxtlen <= 0) {
|
|
||||||
m_data = (char*)msgid;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// for reference:
|
|
||||||
// https://github.com/autotools-mirror/gettext/blob/master/gnulib-local/lib/gettext.h
|
|
||||||
const int totallen = (msgctxtlen + 1 + msgidlen + 1);
|
|
||||||
m_data = static_cast<char*>(::malloc(totallen * sizeof(char)));
|
|
||||||
::memcpy(m_data, msgctxt, msgctxtlen * sizeof(char));
|
|
||||||
m_data[msgctxtlen] = '\004';
|
|
||||||
::memcpy(m_data + msgctxtlen + 1, msgid, msgidlen * sizeof(char));
|
|
||||||
m_data[totallen - 1] = '\0';
|
|
||||||
m_freedata = true;
|
|
||||||
|
|
||||||
// qDebug() << Q_FUNC_INFO << m_data;
|
|
||||||
}
|
|
||||||
|
|
||||||
KMsgCtx::~KMsgCtx()
|
|
||||||
{
|
|
||||||
if (m_freedata) {
|
|
||||||
::free(m_data);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const char* const KMsgCtx::constData() const
|
|
||||||
{
|
|
||||||
return m_data;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class KCatalogPrivate
|
class KCatalogPrivate
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
KCatalogPrivate();
|
||||||
|
~KCatalogPrivate();
|
||||||
|
|
||||||
QByteArray language;
|
QByteArray language;
|
||||||
QByteArray name;
|
QByteArray name;
|
||||||
QByteArray localeDir;
|
QByteArray localeDir;
|
||||||
|
|
||||||
#ifdef HAVE_LIBINTL
|
#ifndef QT_NO_TRANSLATION
|
||||||
QByteArray systemLanguage;
|
QTranslator* translator;
|
||||||
|
|
||||||
void setupGettextEnv();
|
|
||||||
void resetSystemLanguage();
|
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
KCatalogPrivate::KCatalogPrivate()
|
||||||
|
: translator(nullptr)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
KCatalogPrivate::~KCatalogPrivate()
|
||||||
|
{
|
||||||
|
delete translator;
|
||||||
|
}
|
||||||
|
|
||||||
QDebug operator<<(QDebug debug, const KCatalog &c)
|
QDebug operator<<(QDebug debug, const KCatalog &c)
|
||||||
{
|
{
|
||||||
return debug << c.d->language << " " << c.d->name << " " << c.d->localeDir;
|
return debug << c.d->language << " " << c.d->name << " " << c.d->localeDir;
|
||||||
}
|
}
|
||||||
|
|
||||||
KCatalog::KCatalog(const QString &name, const QString &language)
|
KCatalog::KCatalog(const QString &name, const QString &language)
|
||||||
: d( new KCatalogPrivate() )
|
: d(new KCatalogPrivate())
|
||||||
{
|
{
|
||||||
setlocale(LC_ALL, "");
|
|
||||||
|
|
||||||
// Find locale directory for this catalog.
|
|
||||||
QString localeDir = catalogLocaleDir(name, language);
|
|
||||||
|
|
||||||
d->language = QFile::encodeName(language);
|
d->language = QFile::encodeName(language);
|
||||||
d->name = QFile::encodeName(name);
|
d->name = QFile::encodeName(name);
|
||||||
d->localeDir = QFile::encodeName(localeDir);
|
d->localeDir = QFile::encodeName(catalogLocaleDir(name, language));
|
||||||
|
|
||||||
#ifdef HAVE_LIBINTL
|
#ifndef QT_NO_TRANSLATION
|
||||||
// Point Gettext to current language, recording system value for recovery.
|
d->translator = new QTranslator();
|
||||||
d->systemLanguage = qgetenv("LANGUAGE");
|
d->translator->loadFromData(translationData(d->localeDir, d->language, d->name));
|
||||||
|
// kDebug() << << name << language << localeDir;
|
||||||
// Always get translations in UTF-8, regardless of user's environment.
|
|
||||||
bind_textdomain_codeset(d->name.constData(), "UTF-8");
|
|
||||||
|
|
||||||
//kDebug() << << name << language << localeDir;
|
|
||||||
bindtextdomain(d->name.constData(), d->localeDir.constData());
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
KCatalog::KCatalog(const KCatalog & rhs)
|
KCatalog::KCatalog(const KCatalog &rhs)
|
||||||
: d( new KCatalogPrivate(*rhs.d) )
|
: d(new KCatalogPrivate())
|
||||||
{
|
{
|
||||||
|
d->language = rhs.d->language;
|
||||||
|
d->name = rhs.d->name;
|
||||||
|
d->localeDir = rhs.d->localeDir;
|
||||||
|
|
||||||
|
#ifndef QT_NO_TRANSLATION
|
||||||
|
d->translator = new QTranslator();
|
||||||
|
d->translator->loadFromData(translationData(d->localeDir, d->language, d->name));
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
KCatalog & KCatalog::operator=(const KCatalog & rhs)
|
KCatalog & KCatalog::operator=(const KCatalog & rhs)
|
||||||
{
|
{
|
||||||
*d = *rhs.d;
|
d->language = rhs.d->language;
|
||||||
|
d->name = rhs.d->name;
|
||||||
|
d->localeDir = rhs.d->localeDir;
|
||||||
|
|
||||||
|
#ifndef QT_NO_TRANSLATION
|
||||||
|
d->translator->loadFromData(translationData(d->localeDir, d->language, d->name));
|
||||||
|
#endif
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -156,12 +113,11 @@ KCatalog::~KCatalog()
|
||||||
delete d;
|
delete d;
|
||||||
}
|
}
|
||||||
|
|
||||||
QString KCatalog::catalogLocaleDir( const QString &name,
|
QString KCatalog::catalogLocaleDir(const QString &name,
|
||||||
const QString &language )
|
const QString &language)
|
||||||
{
|
{
|
||||||
QString relpath = QString::fromLatin1( "%1/LC_MESSAGES/%2.mo" )
|
QString relpath = QString::fromLatin1("%1/%2.tr").arg(language).arg(name);
|
||||||
.arg( language ).arg( name );
|
return KGlobal::dirs()->findResourceDir("locale", relpath);
|
||||||
return KGlobal::dirs()->findResourceDir( "locale", relpath );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QString KCatalog::name() const
|
QString KCatalog::name() const
|
||||||
|
@ -179,37 +135,10 @@ QString KCatalog::localeDir() const
|
||||||
return QFile::decodeName(d->localeDir);
|
return QFile::decodeName(d->localeDir);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_LIBINTL
|
|
||||||
void KCatalogPrivate::setupGettextEnv()
|
|
||||||
{
|
|
||||||
if (language != systemLanguage) {
|
|
||||||
// it is enough to change the string set there.
|
|
||||||
char langenv[langenvMaxlen];
|
|
||||||
::memset(langenv, 0, langenvMaxlen * sizeof(char));
|
|
||||||
snprintf(langenv, langenvMaxlen, "LANGUAGE=%s", language.constData());
|
|
||||||
putenv(strdup(langenv));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void KCatalogPrivate::resetSystemLanguage ()
|
|
||||||
{
|
|
||||||
if (language != systemLanguage) {
|
|
||||||
char langenv[langenvMaxlen];
|
|
||||||
::memset(langenv, 0, langenvMaxlen * sizeof(char));
|
|
||||||
snprintf(langenv, langenvMaxlen, "LANGUAGE=%s", systemLanguage.constData());
|
|
||||||
putenv(strdup(langenv));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
QString KCatalog::translate(const char * msgid) const
|
QString KCatalog::translate(const char * msgid) const
|
||||||
{
|
{
|
||||||
#ifdef HAVE_LIBINTL
|
#ifndef QT_NO_TRANSLATION
|
||||||
QMutexLocker locker(catalogLock());
|
return d->translator->translate(nullptr, msgid);
|
||||||
d->setupGettextEnv();
|
|
||||||
const char *msgstr = dgettext(d->name, msgid);
|
|
||||||
d->resetSystemLanguage();
|
|
||||||
return QString::fromUtf8(msgstr);
|
|
||||||
#else
|
#else
|
||||||
return QString::fromUtf8(msgid);
|
return QString::fromUtf8(msgid);
|
||||||
#endif
|
#endif
|
||||||
|
@ -217,14 +146,8 @@ QString KCatalog::translate(const char * msgid) const
|
||||||
|
|
||||||
QString KCatalog::translate(const char * msgctxt, const char * msgid) const
|
QString KCatalog::translate(const char * msgctxt, const char * msgid) const
|
||||||
{
|
{
|
||||||
#ifdef HAVE_LIBINTL
|
#ifndef QT_NO_TRANSLATION
|
||||||
QMutexLocker locker(catalogLock());
|
return d->translator->translate(msgctxt, msgid);
|
||||||
d->setupGettextEnv();
|
|
||||||
const KMsgCtx msgwithctx(msgctxt, msgid);
|
|
||||||
const char *msgstr = dgettext(d->name, msgwithctx.constData());
|
|
||||||
const bool msgstrict = (msgstr != msgwithctx.constData());
|
|
||||||
d->resetSystemLanguage();
|
|
||||||
return msgstrict ? QString::fromUtf8(msgstr) : QString::fromUtf8(msgid);
|
|
||||||
#else
|
#else
|
||||||
Q_UNUSED(msgctxt);
|
Q_UNUSED(msgctxt);
|
||||||
return QString::fromUtf8(msgid);
|
return QString::fromUtf8(msgid);
|
||||||
|
@ -234,12 +157,8 @@ QString KCatalog::translate(const char * msgctxt, const char * msgid) const
|
||||||
QString KCatalog::translate(const char * msgid, const char * msgid_plural,
|
QString KCatalog::translate(const char * msgid, const char * msgid_plural,
|
||||||
unsigned long n) const
|
unsigned long n) const
|
||||||
{
|
{
|
||||||
#ifdef HAVE_LIBINTL
|
#ifndef QT_NO_TRANSLATION
|
||||||
QMutexLocker locker(catalogLock());
|
return (n == 1 ? d->translator->translate(nullptr, msgid) : d->translator->translate(nullptr, msgid_plural));
|
||||||
d->setupGettextEnv();
|
|
||||||
const char *msgstr = dngettext(d->name, msgid, msgid_plural, n);
|
|
||||||
d->resetSystemLanguage();
|
|
||||||
return QString::fromUtf8(msgstr);
|
|
||||||
#else
|
#else
|
||||||
return (n == 1 ? QString::fromUtf8(msgid) : QString::fromUtf8(msgid_plural));
|
return (n == 1 ? QString::fromUtf8(msgid) : QString::fromUtf8(msgid_plural));
|
||||||
#endif
|
#endif
|
||||||
|
@ -248,15 +167,8 @@ QString KCatalog::translate(const char * msgid, const char * msgid_plural,
|
||||||
QString KCatalog::translate(const char * msgctxt, const char * msgid,
|
QString KCatalog::translate(const char * msgctxt, const char * msgid,
|
||||||
const char * msgid_plural, unsigned long n) const
|
const char * msgid_plural, unsigned long n) const
|
||||||
{
|
{
|
||||||
#ifdef HAVE_LIBINTL
|
#ifndef QT_NO_TRANSLATION
|
||||||
QMutexLocker locker(catalogLock());
|
return (n == 1 ? d->translator->translate(msgctxt, msgid) : d->translator->translate(msgctxt, msgid_plural));
|
||||||
d->setupGettextEnv();
|
|
||||||
const KMsgCtx msgwithctx(msgctxt, msgid);
|
|
||||||
const char *msgstr = dngettext(d->name, msgwithctx.constData(), msgid_plural, n);
|
|
||||||
const bool msgstrict = (msgstr != msgwithctx.constData());
|
|
||||||
const bool msgstrict2 = (msgstr != msgid_plural);
|
|
||||||
d->resetSystemLanguage();
|
|
||||||
return msgstrict && msgstrict2 ? QString::fromUtf8(msgstr) : (n == 1 ? QString::fromUtf8(msgid) : QString::fromUtf8(msgid_plural));
|
|
||||||
#else
|
#else
|
||||||
Q_UNUSED(msgctxt);
|
Q_UNUSED(msgctxt);
|
||||||
return (n == 1 ? QString::fromUtf8(msgid) : QString::fromUtf8(msgid_plural));
|
return (n == 1 ? QString::fromUtf8(msgid) : QString::fromUtf8(msgid_plural));
|
||||||
|
@ -265,12 +177,8 @@ QString KCatalog::translate(const char * msgctxt, const char * msgid,
|
||||||
|
|
||||||
QString KCatalog::translateStrict(const char * msgid) const
|
QString KCatalog::translateStrict(const char * msgid) const
|
||||||
{
|
{
|
||||||
#ifdef HAVE_LIBINTL
|
#ifndef QT_NO_TRANSLATION
|
||||||
QMutexLocker locker(catalogLock());
|
return d->translator->translateStrict(nullptr, msgid);
|
||||||
d->setupGettextEnv();
|
|
||||||
const char *msgstr = dgettext(d->name, msgid);
|
|
||||||
d->resetSystemLanguage();
|
|
||||||
return msgstr != msgid ? QString::fromUtf8(msgstr) : QString();
|
|
||||||
#else
|
#else
|
||||||
Q_UNUSED(msgid);
|
Q_UNUSED(msgid);
|
||||||
return QString();
|
return QString();
|
||||||
|
@ -279,14 +187,8 @@ QString KCatalog::translateStrict(const char * msgid) const
|
||||||
|
|
||||||
QString KCatalog::translateStrict(const char * msgctxt, const char * msgid) const
|
QString KCatalog::translateStrict(const char * msgctxt, const char * msgid) const
|
||||||
{
|
{
|
||||||
#ifdef HAVE_LIBINTL
|
#ifndef QT_NO_TRANSLATION
|
||||||
QMutexLocker locker(catalogLock());
|
return d->translator->translateStrict(msgctxt, msgid);
|
||||||
d->setupGettextEnv();
|
|
||||||
const KMsgCtx msgwithctx(msgctxt, msgid);
|
|
||||||
const char *msgstr = dgettext(d->name, msgwithctx.constData());
|
|
||||||
const bool msgstrict = (msgstr != msgwithctx.constData());
|
|
||||||
d->resetSystemLanguage();
|
|
||||||
return msgstrict ? QString::fromUtf8(msgstr) : QString();
|
|
||||||
#else
|
#else
|
||||||
Q_UNUSED(msgctxt);
|
Q_UNUSED(msgctxt);
|
||||||
Q_UNUSED(msgid);
|
Q_UNUSED(msgid);
|
||||||
|
@ -297,12 +199,8 @@ QString KCatalog::translateStrict(const char * msgctxt, const char * msgid) cons
|
||||||
QString KCatalog::translateStrict(const char * msgid, const char * msgid_plural,
|
QString KCatalog::translateStrict(const char * msgid, const char * msgid_plural,
|
||||||
unsigned long n) const
|
unsigned long n) const
|
||||||
{
|
{
|
||||||
#ifdef HAVE_LIBINTL
|
#ifndef QT_NO_TRANSLATION
|
||||||
QMutexLocker locker(catalogLock());
|
return (n == 1 ? d->translator->translateStrict(nullptr, msgid) : d->translator->translateStrict(nullptr, msgid_plural));
|
||||||
d->setupGettextEnv();
|
|
||||||
const char *msgstr = dngettext(d->name, msgid, msgid_plural, n);
|
|
||||||
d->resetSystemLanguage();
|
|
||||||
return msgstr != msgid && msgstr != msgid_plural ? QString::fromUtf8(msgstr) : QString();
|
|
||||||
#else
|
#else
|
||||||
Q_UNUSED(msgid);
|
Q_UNUSED(msgid);
|
||||||
Q_UNUSED(msgid_plural);
|
Q_UNUSED(msgid_plural);
|
||||||
|
@ -314,15 +212,8 @@ QString KCatalog::translateStrict(const char * msgid, const char * msgid_plural,
|
||||||
QString KCatalog::translateStrict(const char * msgctxt, const char * msgid,
|
QString KCatalog::translateStrict(const char * msgctxt, const char * msgid,
|
||||||
const char * msgid_plural, unsigned long n) const
|
const char * msgid_plural, unsigned long n) const
|
||||||
{
|
{
|
||||||
#ifdef HAVE_LIBINTL
|
#ifndef QT_NO_TRANSLATION
|
||||||
QMutexLocker locker(catalogLock());
|
return (n == 1 ? d->translator->translateStrict(msgctxt, msgid) : d->translator->translateStrict(msgctxt, msgid_plural));
|
||||||
d->setupGettextEnv();
|
|
||||||
const KMsgCtx msgwithctx(msgctxt, msgid);
|
|
||||||
const char *msgstr = dngettext(d->name, msgwithctx.constData(), msgid_plural, n);
|
|
||||||
const bool msgstrict = (msgstr != msgwithctx.constData());
|
|
||||||
const bool msgstrict2 = (msgstr != msgid_plural);
|
|
||||||
d->resetSystemLanguage();
|
|
||||||
return msgstrict && msgstrict2 ? QString::fromUtf8(msgstr) : QString();
|
|
||||||
#else
|
#else
|
||||||
Q_UNUSED(msgctxt);
|
Q_UNUSED(msgctxt);
|
||||||
Q_UNUSED(msgid);
|
Q_UNUSED(msgid);
|
||||||
|
|
Loading…
Add table
Reference in a new issue