powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / интерфейс с поддержкой русского и французского языков ????
2 сообщений из 2, страница 1 из 1
интерфейс с поддержкой русского и французского языков ????
    #32507233
sfsf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Народ!! Такой вопрос. Как правильно сделать поддержку программы с несколькими языками. Так чтобы можено было выбрать язык и поменялся интерфейс программы.
...
Рейтинг: 0 / 0
интерфейс с поддержкой русского и французского языков ????
    #32508221
Lepsik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я сделал так : создал механизм генерации в xml файле узлов, с именами, соответствующими типу контрола и строкой имени обьекта, caption, hint.

в момент исполнения есть кнопка, генерирующая данное дерево.
Также создаются ветки с контролами для каждой динамической формы.

После того как дерево готово, делается его копия, с именем языка, все тексты можно перевести в любом xml редакторе

В главном меню когда юзер выбирает язык, запускается функция, пробегающая по всем контролам и заменяет captions and hints.


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
template <class T> bool ClassAssign(T component, const String attr_name, TXelm *node)
{
    if( component == NULL || attr_name.IsEmpty() || node == NULL )
        return false;
    try
    {
       TXelm *node_comp = node->FindName(attr_name, component->Name);
       if( node_comp == NULL )
          return false;
       component->Caption = node_comp->getAttr(ATTR_TAG_Caption);
       String hint = node_comp->getAttr(ATTR_TAG_Hint);
       if( hint.IsEmpty() ) hint = node_comp->getAttr(ATTR_TAG_Caption);
       component->Hint = hint;
    }catch(...){ return false;}
    return true;
};


На событие OnShow для каждой динамической формы вызывается фукнция что и для главной формы.
//---------------------------------------------------------------------------
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
void __fastcall TFHotNews::FormShow(TObject *Sender)
{
    ResetForm( this );
}
// ---------------------------------------------------------------------------
 
void ResetForm( TForm *form )
{
    if( NULL == form )
        return;
    if( lng )
    {
      TXelm *node = lng->Select0(NODE_TAG_Form)->FindName(NODE_TAG_Item, form->Name);
      if( node == NULL )
        return;
      form->Caption = node->getAttr(ATTR_TAG_Caption);

      InterControl( form, node );
    }
}


у меня это примерно так. разумеется надо проверять наличие языка в раскладке клавиатур

http://www.lepsik.com/soft/inter.gif
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / интерфейс с поддержкой русского и французского языков ????
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]