File indexing completed on 2025-02-09 04:28:39

0001 /*
0002   This file is part of the KTextTemplate library
0003 
0004   SPDX-FileCopyrightText: 2010 Stephen Kelly <steveire@gmail.com>
0005 
0006   SPDX-License-Identifier: LGPL-2.1-or-later
0007 
0008 */
0009 
0010 #ifndef KTEXTTEMPLATE_QTLOCALIZER_P_H
0011 #define KTEXTTEMPLATE_QTLOCALIZER_P_H
0012 
0013 #include "abstractlocalizer.h"
0014 
0015 class QTranslator;
0016 
0017 namespace KTextTemplate
0018 {
0019 
0020 class QtLocalizerPrivate;
0021 
0022 /// @headerfile qtlocalizer.h <KTextTemplate/QtLocalizer>
0023 
0024 /**
0025   @brief Provides internationalization based on QLocale and QTranslator.
0026 
0027   This class implements access to the %Qt Localization system. Localizable
0028   types such as strings, numbers, dates and times can be processed.
0029 
0030   @code
0031     auto t = m_engine->loadTemplate(someTemplate);
0032     auto c = getContext();
0033 
0034     // Render with the German locale
0035     c.setLocalizer(m_de_Localizer);
0036     auto deText = t->render(&c);
0037     de_display->setText(deText);
0038 
0039     // Render with the French locale
0040     c.setLocalizer(m_fr_Localizer);
0041     auto frText = t->render(&c);
0042     fr_display->setText(frText);
0043   @endcode
0044 
0045 */
0046 class KTEXTTEMPLATE_EXPORT QtLocalizer : public AbstractLocalizer
0047 {
0048 public:
0049     /**
0050       Constructs a new **%QtLocalizer** using the @p locale
0051     */
0052     QtLocalizer(const QLocale &locale = QLocale::system());
0053 
0054     /**
0055       Destructor
0056      */
0057     ~QtLocalizer() override;
0058 
0059     /**
0060       Set the path to look for translations of the application strings.
0061      */
0062     void setAppTranslatorPath(const QString &path);
0063 
0064     /**
0065       Set the prefix of translation files. For example, if the German translation
0066       file is called <tt>myapp_de_DE.qm</tt>, the prefix should be set to
0067       <tt>myapp_</tt>.
0068      */
0069     void setAppTranslatorPrefix(const QString &prefix);
0070 
0071     /**
0072       Install a @p translator to use for a particular @p localeName.
0073 
0074       @code
0075         auto deTranslator = new QTranslator(this);
0076         auto loaded = deTranslator->load("myapp_de_DE");
0077         if (!loaded)
0078           return;
0079 
0080         de_localizer->installTranslator(deTranslator, "de_DE");
0081       @endcode
0082      */
0083     void installTranslator(QTranslator *translator, const QString &localeName = QLocale::system().name());
0084 
0085     QString currentLocale() const override;
0086     void pushLocale(const QString &localeName) override;
0087     void popLocale() override;
0088     void loadCatalog(const QString &path, const QString &catalog) override;
0089     void unloadCatalog(const QString &catalog) override;
0090 
0091     QString localizeNumber(int number) const override;
0092     QString localizeNumber(qreal number) const override;
0093     QString localizeMonetaryValue(qreal value, const QString &currencyCode = {}) const override;
0094     QString localizeDate(const QDate &date, QLocale::FormatType formatType = QLocale::ShortFormat) const override;
0095     QString localizeTime(const QTime &time, QLocale::FormatType formatType = QLocale::ShortFormat) const override;
0096     QString localizeDateTime(const QDateTime &dateTime, QLocale::FormatType formatType = QLocale::ShortFormat) const override;
0097     QString localizeString(const QString &string, const QVariantList &arguments = {}) const override;
0098     QString localizeContextString(const QString &string, const QString &context, const QVariantList &arguments = {}) const override;
0099     QString
0100     localizePluralContextString(const QString &string, const QString &pluralForm, const QString &context, const QVariantList &arguments = {}) const override;
0101     QString localizePluralString(const QString &string, const QString &pluralForm, const QVariantList &arguments = {}) const override;
0102 
0103 private:
0104     Q_DECLARE_PRIVATE(QtLocalizer)
0105     Q_DISABLE_COPY(QtLocalizer)
0106     QtLocalizerPrivate *const d_ptr;
0107 };
0108 }
0109 
0110 #endif