* runtime - loading and translating * design-time - works with *.ts file (pip_tr utility) * compile-time - CMake macro for compile *.ts
99 lines
3.0 KiB
C++
99 lines
3.0 KiB
C++
/*! \file pitranslator.h
|
||
* \ingroup Application
|
||
* \~\brief
|
||
* \~english Translation support
|
||
* \~russian Поддержка перевода
|
||
*/
|
||
/*
|
||
PIP - Platform Independent Primitives
|
||
Translation support
|
||
Ivan Pelipenko peri4ko@yandex.ru
|
||
|
||
This program is free software: you can redistribute it and/or modify
|
||
it under the terms of the GNU Lesser General Public License as published by
|
||
the Free Software Foundation, either version 3 of the License, or
|
||
(at your option) any later version.
|
||
|
||
This program is distributed in the hope that it will be useful,
|
||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
GNU Lesser General Public License for more details.
|
||
|
||
You should have received a copy of the GNU Lesser General Public License
|
||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||
*/
|
||
|
||
#ifndef pitranslator_H
|
||
#define pitranslator_H
|
||
|
||
#include "pistring.h"
|
||
|
||
|
||
#define piTr PITranslator::tr
|
||
#define piTrNoOp PITranslator::trNoOp
|
||
|
||
//! \ingroup Application
|
||
//! \~\brief
|
||
//! \~english Translation support
|
||
//! \~russian Поддержка перевода
|
||
class PIP_EXPORT PITranslator {
|
||
public:
|
||
static PIString tr(const PIString & in, const PIString & context = {});
|
||
static PIString tr(const char * in, const PIString & context = {}) { return tr(PIString::fromUTF8(in), context); }
|
||
static PIString trNoOp(const PIString & in, const PIString & context = {}) { return in; }
|
||
static PIString trNoOp(const char * in, const PIString & context = {}) { return trNoOp(PIString::fromUTF8(in), context); }
|
||
|
||
static void clear();
|
||
static void loadLang(const PIString & short_lang, PIString dir = {});
|
||
static void loadConfig(const PIString & content);
|
||
static bool load(const PIByteArray & content);
|
||
static bool loadFile(const PIString & path);
|
||
|
||
private:
|
||
PITranslator();
|
||
~PITranslator();
|
||
NO_COPY_CLASS(PITranslator)
|
||
PRIVATE_DECLARATION(PIP_EXPORT)
|
||
|
||
static PITranslator * instance();
|
||
};
|
||
|
||
|
||
class PIStringContextTr {
|
||
public:
|
||
PIStringContextTr(PIString && s): _s(s) {}
|
||
operator PIString() const { return PITranslator::tr(_s); }
|
||
PIString operator()(const PIString & ctx = {}) const { return PITranslator::tr(_s, ctx); }
|
||
|
||
private:
|
||
PIString _s;
|
||
};
|
||
|
||
|
||
class PIStringContextTrNoOp {
|
||
public:
|
||
PIStringContextTrNoOp(PIString && s): _s(s) {}
|
||
operator PIString() const { return _s; }
|
||
PIString operator()(const PIString & ctx = {}) const { return _s; }
|
||
|
||
private:
|
||
PIString _s;
|
||
};
|
||
|
||
|
||
//! \~\brief
|
||
//! \~english Translate string with \a PITranslator::tr()
|
||
//! \~russian Перевести строку с помощью \a PITranslator::tr()
|
||
inline PIStringContextTr operator""_tr(const char * v, size_t sz) {
|
||
return PIStringContextTr(PIString::fromUTF8(v, sz));
|
||
}
|
||
|
||
//! \~\brief
|
||
//! \~english Translate string with \a PITranslator::tr()
|
||
//! \~russian Перевести строку с помощью \a PITranslator::tr()
|
||
inline PIStringContextTrNoOp operator""_trNoOp(const char * v, size_t sz) {
|
||
return PIStringContextTrNoOp(PIString::fromUTF8(v, sz));
|
||
}
|
||
|
||
#endif
|