Merge branch 'develop' of https://github.com/cnjinhao/nana into icon_fix

This commit is contained in:
dankan1890 2016-11-04 00:03:25 +01:00
commit 6e754e94a8
3 changed files with 95 additions and 22 deletions

View File

@ -64,7 +64,7 @@ namespace nana
template<typename ...Args> template<typename ...Args>
void i18n(std::string msgid, Args&&... args) void i18n(std::string msgid, Args&&... args)
{ {
_m_caption(nana::internationalization().get(msgid, std::forward<Args>(args)...)); _m_caption(::nana::to_nstring(::nana::internationalization().get(msgid, std::forward<Args>(args)...)));
} }
void i18n(i18n_eval); void i18n(i18n_eval);

View File

@ -32,9 +32,8 @@ namespace nana
std::vector<std::string> arg_strs; std::vector<std::string> arg_strs;
_m_fetch_args(arg_strs, std::forward<Args>(args)...); _m_fetch_args(arg_strs, std::forward<Args>(args)...);
::std::string msgstr; auto msgstr = _m_get(std::move(msgid_utf8));
if (_m_get(msgid_utf8, msgstr)) _m_replace_args(msgstr, &arg_strs);
_m_replace_args(msgstr, &arg_strs);
return msgstr; return msgstr;
} }
@ -47,16 +46,24 @@ namespace nana
return get(msgid_utf8, std::forward<Args>(args)...); return get(msgid_utf8, std::forward<Args>(args)...);
} }
private: private:
bool _m_get(std::string& msgid, ::std::string& msgstr) const; std::string _m_get(std::string&& msgid) const;
void _m_replace_args(::std::string& str, std::vector<::std::string> * arg_strs) const; void _m_replace_args(::std::string& str, std::vector<::std::string> * arg_strs) const;
void _m_fetch_args(std::vector<std::string>&) const //Termination of _m_fetch_args void _m_fetch_args(std::vector<std::string>&) const; //Termination of _m_fetch_args
{}
void _m_fetch_args(std::vector<std::string>& v, const char* arg) const;
void _m_fetch_args(std::vector<std::string>& v, const std::string& arg) const;
void _m_fetch_args(std::vector<std::string>& v, std::string& arg) const;
void _m_fetch_args(std::vector<std::string>& v, std::string&& arg) const;
void _m_fetch_args(std::vector<std::string>& v, const wchar_t* arg) const;
void _m_fetch_args(std::vector<std::string>& v, const std::wstring& arg) const;
void _m_fetch_args(std::vector<std::string>& v, std::wstring& arg) const;
void _m_fetch_args(std::vector<std::string>& v, std::wstring&& arg) const;
template<typename Arg> template<typename Arg>
void _m_fetch_args(std::vector<std::string>& v, Arg&& arg) const void _m_fetch_args(std::vector<std::string>& v, Arg&& arg) const
{ {
std::wstringstream ss; std::stringstream ss;
ss << arg; ss << arg;
v.emplace_back(ss.str()); v.emplace_back(ss.str());
} }
@ -89,6 +96,34 @@ namespace nana
_m_fetch_args(v, std::forward<Args>(args)...); _m_fetch_args(v, std::forward<Args>(args)...);
} }
template<typename ...Args>
void _m_fetch_args(std::vector<std::string>& v, const wchar_t* arg, Args&&... args) const
{
v.emplace_back(to_utf8(arg));
_m_fetch_args(v, std::forward<Args>(args)...);
}
template<typename ...Args>
void _m_fetch_args(std::vector<std::string>& v, const std::wstring& arg, Args&&... args) const
{
v.emplace_back(to_utf8(arg));
_m_fetch_args(v, std::forward<Args>(args)...);
}
template<typename ...Args>
void _m_fetch_args(std::vector<std::string>& v, std::wstring& arg, Args&&... args) const
{
v.emplace_back(to_utf8(arg));
_m_fetch_args(v, std::forward<Args>(args)...);
}
template<typename ...Args>
void _m_fetch_args(std::vector<std::string>& v, std::wstring&& arg, Args&&... args) const
{
v.emplace_back(to_utf8(arg));
_m_fetch_args(v, std::forward<Args>(args)...);
}
template<typename Arg, typename ...Args> template<typename Arg, typename ...Args>
void _m_fetch_args(std::vector<std::string>& v, Arg&& arg, Args&&... args) const void _m_fetch_args(std::vector<std::string>& v, Arg&& arg, Args&&... args) const
{ {

View File

@ -306,9 +306,8 @@ namespace nana
std::string internationalization::get(std::string msgid) const std::string internationalization::get(std::string msgid) const
{ {
std::string str; std::string str = _m_get(std::move(msgid));
if(_m_get(msgid, str)) _m_replace_args(str, nullptr);
_m_replace_args(str, nullptr);
return str; return str;
} }
@ -318,18 +317,14 @@ namespace nana
ptr->table[msgid].swap(msgstr); ptr->table[msgid].swap(msgstr);
} }
bool internationalization::_m_get(std::string& msgid, std::string& msgstr) const std::string internationalization::_m_get(std::string&& msgid) const
{ {
auto & impl = internationalization_parts::get_data_ptr(); auto & impl = internationalization_parts::get_data_ptr();
auto i = impl->table.find(msgid); auto i = impl->table.find(msgid);
if (i != impl->table.end()) if (i != impl->table.end())
{ return i->second;
msgstr = i->second;
return true;
}
msgstr = nana::charset(std::move(msgid), nana::unicode::utf8); return std::move(msgid);
return false;
} }
void internationalization::_m_replace_args(std::string& str, std::vector<std::string> * arg_strs) const void internationalization::_m_replace_args(std::string& str, std::vector<std::string> * arg_strs) const
@ -368,6 +363,50 @@ namespace nana
offset += 4; offset += 4;
} }
} }
void internationalization::_m_fetch_args(std::vector<std::string>&) const
{}
void internationalization::_m_fetch_args(std::vector<std::string>& v, const char* arg) const
{
v.emplace_back(arg);
}
void internationalization::_m_fetch_args(std::vector<std::string>& v, const std::string& arg) const
{
v.emplace_back(arg);
}
void internationalization::_m_fetch_args(std::vector<std::string>& v, std::string& arg) const
{
v.emplace_back(arg);
}
void internationalization::_m_fetch_args(std::vector<std::string>& v, std::string&& arg) const
{
v.emplace_back(std::move(arg));
}
void internationalization::_m_fetch_args(std::vector<std::string>& v, const wchar_t* arg) const
{
v.emplace_back(to_utf8(arg));
}
void internationalization::_m_fetch_args(std::vector<std::string>& v, const std::wstring& arg) const
{
v.emplace_back(to_utf8(arg));
}
void internationalization::_m_fetch_args(std::vector<std::string>& v, std::wstring& arg) const
{
v.emplace_back(to_utf8(arg));
}
void internationalization::_m_fetch_args(std::vector<std::string>& v, std::wstring&& arg) const
{
v.emplace_back(to_utf8(arg));
}
//end class internationalization //end class internationalization
@ -462,10 +501,9 @@ namespace nana
arg_strs.emplace_back(arg->eval()); arg_strs.emplace_back(arg->eval());
internationalization i18n; internationalization i18n;
std::string msgid = msgid_; //msgid is required to be movable by i18n._m_get
std::string msgstr; std::string msgstr = i18n._m_get(std::string{msgid_});
if (i18n._m_get(msgid, msgstr)) i18n._m_replace_args(msgstr, &arg_strs);
i18n._m_replace_args(msgstr, &arg_strs);
return msgstr; return msgstr;
} }