2014-12-10 4 views
1

에 대한 번역을 사용 중입니다. QAction 개체에서 만든 메뉴가있는 시스템 트레이 응용 프로그램의 번역과 관련하여 문제가 있습니다. QAction 개체는 주 응용 프로그램 상태 (잘못된 로그인 자격 증명 ... 등)에 따라 다른 텍스트 만 표시하므로이 텍스트는 응용 프로그램 수명주기 동안 변경됩니다. 문제는 주어진 시간 (사용자가 GUI에서 언어를 변경할 때)에 텍스트에 대해 동적 번역을 사용하는 방법입니다. 언어 변경을위한 송수신 메커니즘이 갖추어져 있고 새 변환기의로드가 sys tray 응용 프로그램에서 만들어집니다. GUI는 GUI 응용 프로그램에서 만들어지고 번역 이벤트를 기반으로 잡아서 동적으로 수행됩니다.시스템 트레이 및 QAction (QT)

ENSURE(connect(this, SIGNAL(changeLangInTray()), &m_tray, SLOT(_ChangeLanguage()))); 

그리고 _ChangeLanguage 방법은 객체를의에 대한 트레이에서 번역을 수행해야합니다 여기

void Application::_SetLanguage(QString language) 
{ 
    QTranslator *qtTranslator = new QTranslator(); 

    if (qtTranslator->load("qt_" + language, m_sExecutableDir + "/lang")) { 
     if (m_qtTranslator) { 
      removeTranslator(m_qtTranslator); 
      delete m_qtTranslator; 
     } 
     m_qtTranslator = qtTranslator; 
     installTranslator(qtTranslator); 
    } 

    QTranslator *trayTranslator = new QTranslator(); 
    if (trayTranslator->load("ff_" + language, m_sExecutableDir + "/lang")) { 

     if (m_appTranslator) { 
      removeTranslator(m_appTranslator); 
      delete m_appTranslator; 
//   _restartApp(); 
     } 

     m_appTranslator = trayTranslator; 
     installTranslator(trayTranslator); 
    } 
    emit changeLangInTray(); 
} 

가 신호에 대한 코드입니다 :

은 번역자의 로딩 코드 :

QMenu    m_trayMenu; 
QSystemTrayIcon  m_trayIcon; 
QAction* m_pOpenGuiAction; 
................. 

어떤 도움을 주셔서 감사합니다.

당신은에 의해 응용 프로그램 개체에 번역기를 설치할 수 있습니다

답변

0

:처럼 뭔가. 대화 상자가 QTCreator (디자이너),이 메소드는,이 자동으로 UI _ *. H 파일에 추가됩니다 통해 생성 된 경우

void _ChangeLanguage() { 
    m_pOpenGuiAction->setText(Helper::getTextOpenGui(trayStatus)); 
    ...... 
} 

ui->retranslateUi(this)에만 가능합니다.

0

: 당신이 QCoreApplication::translate를 사용할 수있는 시스템 트레이 메뉴

ui->retranslateUi(this); 

:

또한 retranslateUi
qApp->installTranslator(qtTranslator); 

당신이 번역기를 설치 한 후 호출해야 각 행동을 번역하십시오. 나는 언어 변경이 트리거 될 때 응용 프로그램 상태에 따라 각 텍스트를 대체하여이 문제를 수정했습니다

m_pOpenGuiAction->setText(QApplication::translate("TrayClass", "Text to translate", 0, QApplication::UnicodeUTF8)); 
+0

이것은 GUI 부분에 사용 된 것이지만 시스템 트레이 응용 프로그램에 대해서는 이와 같은 것이 없습니다. 여기에는 retranslateUi 메소드를 찾을 수있는 UI가 없습니다. + 트레이 응용 프로그램이 QWidget에서 상속받지 않습니다. 각 QAction이 새로운로드 된 사전을 강제로 사용할 수 있습니까? – Bogdan

+0

@Bogdan 'QCoreApplication :: translate'를 사용하여 액션의 번역 텍스트를 반환하고 텍스트를 설정할 수 있습니다. 답변을 업데이트했습니다. – Nejat

+0

그들은 그것을 사용하고 있지만 새 번역기를로드 한 후에는 응용 프로그램을 시작할 때까지 언어가 변경되지 않습니다. (보통의 qtTranslator를로드합니다) 'status_str = QCoreApplication :: translate ("TrayMenu", "Account : 로그인하지 않았습니다");' – Bogdan