【发布时间】:2014-12-10 10:14:54
【问题描述】:
我在翻译系统托盘应用程序时遇到问题,该应用程序具有从 QAction 对象创建的菜单。 QAction 对象仅根据主要应用程序状态显示不同的文本(错误的登录凭据......等等),因此该文本会在应用程序的生命周期中发生变化。 问题是如何在给定时间(当用户从 GUI 更改语言时)对文本使用动态翻译。语言更改的发送和接收机制已经到位,新翻译器的负载在系统托盘应用程序中完成。 (因为 GUI 是在 GUI 应用程序中制作并根据翻译事件捕获的,所以它是动态完成的。
这是翻译器的加载代码:
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();
}
这是信号的代码:
ENSURE(connect(this, SIGNAL(changeLangInTray()), &m_tray, SLOT(_ChangeLanguage())));
来自 Tray 的 _ChangeLanguage 方法应该为它的对象进行翻译:
QMenu m_trayMenu;
QSystemTrayIcon m_trayIcon;
QAction* m_pOpenGuiAction;
.................
欢迎任何帮助,谢谢!
【问题讨论】:
标签: c++ qt qt4 multilingual