mirror of
https://github.com/znc/znc.git
synced 2026-08-07 01:13:25 +02:00
Add another layer of indirection for translation
To make supporting old modules easier Ref #1354
This commit is contained in:
+6
-12
@@ -353,9 +353,7 @@ class CModCommand {
|
||||
CModCommand(const CString& sCmd, CModule* pMod, ModCmdFunc func,
|
||||
const CString& sArgs, const CString& sDesc);
|
||||
CModCommand(const CString& sCmd, CmdFunc func, const CString& sArgs,
|
||||
const CString& sDesc);
|
||||
CModCommand(const CString& sCmd, CmdFunc func, const CString& sArgs,
|
||||
const CDelayedTranslation& dDesc);
|
||||
const COptionalTranslation& Desc);
|
||||
|
||||
/** Copy constructor, needed so that this can be saved in a std::map.
|
||||
* @param other Object to copy from.
|
||||
@@ -381,7 +379,7 @@ class CModCommand {
|
||||
const CString& GetCommand() const { return m_sCmd; }
|
||||
CmdFunc GetFunction() const { return m_pFunc; }
|
||||
const CString& GetArgs() const { return m_sArgs; }
|
||||
CString GetDescription() const;
|
||||
CString GetDescription() const { return m_Desc.Resolve(); }
|
||||
|
||||
void Call(const CString& sLine) const { m_pFunc(sLine); }
|
||||
|
||||
@@ -389,9 +387,7 @@ class CModCommand {
|
||||
CString m_sCmd;
|
||||
CmdFunc m_pFunc;
|
||||
CString m_sArgs;
|
||||
CString m_sDesc;
|
||||
CDelayedTranslation m_dDesc;
|
||||
bool m_bTranslating;
|
||||
COptionalTranslation m_Desc;
|
||||
};
|
||||
|
||||
/** The base class for your own ZNC modules.
|
||||
@@ -1149,15 +1145,13 @@ class CModule {
|
||||
/// @return True if the command was successfully added.
|
||||
bool AddCommand(const CModCommand& Command);
|
||||
/// @return True if the command was successfully added.
|
||||
/// @deprecated Use the variant with COptionalTranslation.
|
||||
bool AddCommand(const CString& sCmd, CModCommand::ModCmdFunc func,
|
||||
const CString& sArgs = "", const CString& sDesc = "");
|
||||
/// @param dDesc Either a string "", or the result of t_d()
|
||||
/// @return True if the command was successfully added.
|
||||
bool AddCommand(const CString& sCmd, const CString& sArgs,
|
||||
const CString& sDesc,
|
||||
std::function<void(const CString& sLine)> func);
|
||||
/// @return True if the command was successfully added.
|
||||
bool AddCommand(const CString& sCmd, const CString& sArgs,
|
||||
const CDelayedTranslation& dDesc,
|
||||
const COptionalTranslation& dDesc,
|
||||
std::function<void(const CString& sLine)> func);
|
||||
/// @return True if the command was successfully removed.
|
||||
bool RemCommand(const CString& sCmd);
|
||||
|
||||
@@ -56,7 +56,7 @@ struct CTranslationDomainRefHolder {
|
||||
~CTranslationDomainRefHolder();
|
||||
|
||||
private:
|
||||
CString m_sDomain;
|
||||
const CString m_sDomain;
|
||||
};
|
||||
|
||||
// This is inspired by boost::locale::message, but without boost
|
||||
@@ -74,6 +74,24 @@ class CDelayedTranslation {
|
||||
CString m_sEnglish;
|
||||
};
|
||||
|
||||
class COptionalTranslation {
|
||||
public:
|
||||
COptionalTranslation(const CString& sText)
|
||||
: m_bTranslating(false), m_sText(sText) {}
|
||||
COptionalTranslation(const char* s) : COptionalTranslation(CString(s)) {}
|
||||
COptionalTranslation(const CDelayedTranslation& dTranslation)
|
||||
: m_bTranslating(true), m_dTranslation(dTranslation) {}
|
||||
CString Resolve() const {
|
||||
return m_bTranslating ? m_dTranslation.Resolve() : m_sText;
|
||||
}
|
||||
|
||||
private:
|
||||
bool m_bTranslating;
|
||||
// TODO switch to std::variant<CString, CDelayedTranslation> after C++17
|
||||
CString m_sText;
|
||||
CDelayedTranslation m_dTranslation;
|
||||
};
|
||||
|
||||
// Used by everything except modules.
|
||||
// CModule defines its own version of these functions.
|
||||
class CCoreTranslationMixin {
|
||||
|
||||
@@ -83,21 +83,13 @@ class CWebSubPage {
|
||||
public:
|
||||
CWebSubPage(const CString& sName, const CString& sTitle = "",
|
||||
unsigned int uFlags = 0)
|
||||
: m_uFlags(uFlags), m_sName(sName), m_sTitle(sTitle), m_vParams() {}
|
||||
: m_uFlags(uFlags), m_sName(sName), m_Title(sTitle), m_vParams() {}
|
||||
|
||||
CWebSubPage(const CString& sName, const CString& sTitle,
|
||||
CWebSubPage(const CString& sName, const COptionalTranslation& Title,
|
||||
const VPair& vParams, unsigned int uFlags = 0)
|
||||
: m_uFlags(uFlags),
|
||||
m_sName(sName),
|
||||
m_sTitle(sTitle),
|
||||
m_vParams(vParams) {}
|
||||
|
||||
CWebSubPage(const CString& sName, const CDelayedTranslation& dTitle,
|
||||
const VPair& vParams, unsigned int uFlags = 0)
|
||||
: m_uFlags(uFlags),
|
||||
m_sName(sName),
|
||||
m_dTitle(dTitle),
|
||||
m_bTranslating(true),
|
||||
m_Title(Title),
|
||||
m_vParams(vParams) {}
|
||||
|
||||
virtual ~CWebSubPage() {}
|
||||
@@ -105,13 +97,8 @@ class CWebSubPage {
|
||||
enum { F_ADMIN = 1 };
|
||||
|
||||
void SetName(const CString& s) { m_sName = s; }
|
||||
void SetTitle(const CString& s) {
|
||||
m_sTitle = s;
|
||||
m_bTranslating = false;
|
||||
}
|
||||
void SetTitle(const CDelayedTranslation& d) {
|
||||
m_dTitle = d;
|
||||
m_bTranslating = true;
|
||||
void SetTitle(const COptionalTranslation& s) {
|
||||
m_Title = s;
|
||||
}
|
||||
void AddParam(const CString& sName, const CString& sValue) {
|
||||
m_vParams.push_back(make_pair(sName, sValue));
|
||||
@@ -120,15 +107,13 @@ class CWebSubPage {
|
||||
bool RequiresAdmin() const { return m_uFlags & F_ADMIN; }
|
||||
|
||||
const CString& GetName() const { return m_sName; }
|
||||
CString GetTitle() const;
|
||||
CString GetTitle() const { return m_Title.Resolve(); }
|
||||
const VPair& GetParams() const { return m_vParams; }
|
||||
|
||||
private:
|
||||
unsigned int m_uFlags;
|
||||
CString m_sName;
|
||||
CString m_sTitle;
|
||||
CDelayedTranslation m_dTitle;
|
||||
bool m_bTranslating = false;
|
||||
COptionalTranslation m_Title;
|
||||
VPair m_vParams;
|
||||
};
|
||||
|
||||
|
||||
+6
-30
@@ -518,16 +518,9 @@ bool CModule::AddCommand(const CString& sCmd, CModCommand::ModCmdFunc func,
|
||||
}
|
||||
|
||||
bool CModule::AddCommand(const CString& sCmd, const CString& sArgs,
|
||||
const CString& sDesc,
|
||||
const COptionalTranslation& Desc,
|
||||
std::function<void(const CString& sLine)> func) {
|
||||
CModCommand cmd(sCmd, std::move(func), sArgs, sDesc);
|
||||
return AddCommand(std::move(cmd));
|
||||
}
|
||||
|
||||
bool CModule::AddCommand(const CString& sCmd, const CString& sArgs,
|
||||
const CDelayedTranslation& dDesc,
|
||||
std::function<void(const CString& sLine)> func) {
|
||||
CModCommand cmd(sCmd, std::move(func), sArgs, dDesc);
|
||||
CModCommand cmd(sCmd, std::move(func), sArgs, Desc);
|
||||
return AddCommand(std::move(cmd));
|
||||
}
|
||||
|
||||
@@ -1965,31 +1958,18 @@ ModHandle CModules::OpenModule(const CString& sModule, const CString& sModPath,
|
||||
}
|
||||
|
||||
CModCommand::CModCommand()
|
||||
: m_sCmd(), m_pFunc(nullptr), m_sArgs(), m_sDesc(), m_bTranslating(false) {}
|
||||
: m_sCmd(), m_pFunc(nullptr), m_sArgs(), m_Desc("") {}
|
||||
|
||||
CModCommand::CModCommand(const CString& sCmd, CModule* pMod, ModCmdFunc func,
|
||||
const CString& sArgs, const CString& sDesc)
|
||||
: m_sCmd(sCmd),
|
||||
m_pFunc([pMod, func](const CString& sLine) { (pMod->*func)(sLine); }),
|
||||
m_sArgs(sArgs),
|
||||
m_sDesc(sDesc),
|
||||
m_bTranslating(false) {}
|
||||
m_Desc(sDesc) {}
|
||||
|
||||
CModCommand::CModCommand(const CString& sCmd, CmdFunc func,
|
||||
const CString& sArgs, const CString& sDesc)
|
||||
: m_sCmd(sCmd),
|
||||
m_pFunc(std::move(func)),
|
||||
m_sArgs(sArgs),
|
||||
m_sDesc(sDesc),
|
||||
m_bTranslating(false) {}
|
||||
|
||||
CModCommand::CModCommand(const CString& sCmd, CmdFunc func,
|
||||
const CString& sArgs, const CDelayedTranslation& dDesc)
|
||||
: m_sCmd(sCmd),
|
||||
m_pFunc(std::move(func)),
|
||||
m_sArgs(sArgs),
|
||||
m_dDesc(dDesc),
|
||||
m_bTranslating(true) {}
|
||||
const CString& sArgs, const COptionalTranslation& Desc)
|
||||
: m_sCmd(sCmd), m_pFunc(std::move(func)), m_sArgs(sArgs), m_Desc(Desc) {}
|
||||
|
||||
void CModCommand::InitHelp(CTable& Table) {
|
||||
Table.AddColumn("Command");
|
||||
@@ -2002,10 +1982,6 @@ void CModCommand::AddHelp(CTable& Table) const {
|
||||
Table.SetCell("Description", GetDescription());
|
||||
}
|
||||
|
||||
CString CModCommand::GetDescription() const {
|
||||
return m_bTranslating ? m_dDesc.Resolve() : m_sDesc;
|
||||
}
|
||||
|
||||
CString CModule::t_s(const CString& sEnglish, const CString& sContext) const {
|
||||
return CTranslation::Get().Singular("znc-" + GetModName(), sContext,
|
||||
sEnglish);
|
||||
|
||||
@@ -1019,7 +1019,3 @@ CString CWebSock::GetSkinName() {
|
||||
|
||||
return CZNC::Get().GetSkinName();
|
||||
}
|
||||
|
||||
CString CWebSubPage::GetTitle() const {
|
||||
return m_bTranslating ? m_dTitle.Resolve() : m_sTitle;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user