/*! \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 . */ #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