Re[7]: Простой способ статической языковой интернациализации
От: _hum_ Беларусь  
Дата: 28.10.16 11:18
Оценка: -3
Здравствуйте, _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"??????");
      //<...>
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.