ZNC
Versions: latest readthedocs-test
Translation.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2004-2017 ZNC, see the NOTICE file for details.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #ifndef ZNC_TRANSLATION_H
18 #define ZNC_TRANSLATION_H
19 
20 #include <znc/ZNCString.h>
21 #include <unordered_map>
22 
23 // All instances of modules share single message map using this class stored in
24 // CZNC.
25 class CTranslation {
26  public:
27  static CTranslation& Get();
28  CString Singular(const CString& sDomain, const CString& sContext,
29  const CString& sEnglish);
30  CString Plural(const CString& sDomain, const CString& sContext,
31  const CString& sEnglish, const CString& sEnglishes,
32  int iNum);
33 
34  void PushLanguage(const CString& sLanguage);
35  void PopLanguage();
36 
37  void NewReference(const CString& sDomain);
38  void DelReference(const CString& sDomain);
39 
40  private:
41  const std::locale& LoadTranslation(const CString& sDomain);
42  std::unordered_map<CString /* domain */,
43  std::unordered_map<CString /* language */, std::locale>>
44  m_Translations;
45  VCString m_sLanguageStack;
46  std::unordered_map<CString /* domain */, int> m_miReferences;
47 };
48 
50  explicit CLanguageScope(const CString& sLanguage);
51  ~CLanguageScope();
52 };
53 
55  explicit CTranslationDomainRefHolder(const CString& sDomain);
57 
58  private:
59  const CString m_sDomain;
60 };
61 
62 // This is inspired by boost::locale::message, but without boost
64  public:
65  CDelayedTranslation() = default;
66  CDelayedTranslation(const CString& sDomain, const CString& sContext,
67  const CString& sEnglish)
68  : m_sDomain(sDomain), m_sContext(sContext), m_sEnglish(sEnglish) {}
69  CString Resolve() const;
70 
71  private:
72  CString m_sDomain;
73  CString m_sContext;
74  CString m_sEnglish;
75 };
76 
78  public:
80  : m_bTranslating(false), m_sText(sText) {}
83  : m_bTranslating(true), m_dTranslation(dTranslation) {}
84  CString Resolve() const {
85  return m_bTranslating ? m_dTranslation.Resolve() : m_sText;
86  }
87 
88  private:
89  bool m_bTranslating;
90  // TODO switch to std::variant<CString, CDelayedTranslation> after C++17
91  CString m_sText;
92  CDelayedTranslation m_dTranslation;
93 };
94 
95 // Used by everything except modules.
96 // CModule defines its own version of these functions.
98  protected:
99  static CString t_s(const CString& sEnglish, const CString& sContext = "");
100  static CInlineFormatMessage t_f(const CString& sEnglish,
101  const CString& sContext = "");
102  static CInlineFormatMessage t_p(const CString& sEnglish,
103  const CString& sEnglishes, int iNum,
104  const CString& sContext = "");
105  static CDelayedTranslation t_d(const CString& sEnglish,
106  const CString& sContext = "");
107 };
108 
109 #endif
COptionalTranslation(const CString &sText)
Definition: Translation.h:79
COptionalTranslation(const CDelayedTranslation &dTranslation)
Definition: Translation.h:82
void PushLanguage(const CString &sLanguage)
Definition: Translation.h:77
CString Resolve() const
Definition: Translation.h:84
void NewReference(const CString &sDomain)
Definition: Translation.h:63
Definition: Translation.h:54
std::vector< CString > VCString
Definition: ZNCString.h:38
String class that is used inside ZNC.
Definition: ZNCString.h:68
void PopLanguage()
void DelReference(const CString &sDomain)
CString Plural(const CString &sDomain, const CString &sContext, const CString &sEnglish, const CString &sEnglishes, int iNum)
Definition: Translation.h:49
static CTranslation & Get()
CDelayedTranslation(const CString &sDomain, const CString &sContext, const CString &sEnglish)
Definition: Translation.h:66
Definition: Translation.h:25
CString Singular(const CString &sDomain, const CString &sContext, const CString &sEnglish)
Definition: ZNCString.h:673
COptionalTranslation(const char *s)
Definition: Translation.h:81
Definition: Translation.h:97