Здравствуйте, _niko_.
Спасибо, интересный подход, хотя и достаточно технический.
Но я тут, по прошествие времени, пришел к выводу, что выносить все строки в отдельные таблицы — это не совсем удачное решение, поскольку перевод очень сильно зависит от контекста, а потому, по логике, придется еще и как-то информацию о контексте сохранять. Посему, принял решение делать все непосредственно в коде, наподобие:
//////////////////////////////////////////////////////////////////
//// CRepresentationExpertsPool ////
//////////////////////////////////////////////////////////////////
class CRepresentationExpertsPool
{
public:
//.......................................................
enum class ELanguages{ru_lang,
eng_lang};
private:
static ELanguages s_lang;
public:
static ELanguages get_lang(void){ return s_lang;}
static ELanguages set_lang(const ELanguages lang){ s_lang = lang;}
//-------------------------
template<typename Res_T>
static Res_T switch_trsl(Res_T trsl_str)
{
return trsl_str;
}
//-------------------------
template<typename Res_T, typename...Pack>
static Res_T switch_trsl(const ELanguages lang, Res_T trsl_str, Pack... TailArg)
{
if(get_lang() == lang)return trsl_str;
return switch_trsl(TailArg...);
}
//-------------------------
//<....>
};
//////////////////////////////////////////////////////////////////
int main()
{
typedef CRepresentationExpertsPool RepPool_T;
RepPool_T::set_lang(RepPool_T::ELanguages::ru_lang);
std::wstring swButtonText =
RepPool_T::switch_trsl(RepPool_T::ELanguages::ru_lang, L"Отмена",
RepPool_T::ELanguages::eng_lang, L"Cancel",
L"??????");
//<...>
}