Home | All Classes | Main Classes | Annotated | Grouped Classes | Functions |
This example shows how to internationalize applications. Start it with
# i18n de
to get a german version and with
# i18n en
to get the english version.
Refer also to the internationalization documentation.
Header file:
/**************************************************************************** ** $Id: qt/mywidget.h 3.3.8 edited Jan 11 14:37 $ ** ** Copyright (C) 1992-2007 Trolltech ASA. All rights reserved. ** ** This file is part of an example program for TQt. This example ** program may be used, distributed and modified without limitation. ** *****************************************************************************/ #ifndef MYWIDGET_H #define MYWIDGET_H #include <tqmainwindow.h> #include <tqstring.h> class MyWidget : public TQMainWindow { TQ_OBJECT public: MyWidget( TQWidget* parent=0, const char* name = 0 ); signals: void closed(); protected: void closeEvent(TQCloseEvent*); private: static void initChoices(TQWidget* parent); }; #endif
Implementation:
/**************************************************************************** ** $Id: qt/mywidget.cpp 3.3.8 edited Jan 11 14:37 $ ** ** Copyright (C) 1992-2007 Trolltech ASA. All rights reserved. ** ** This file is part of an example program for TQt. This example ** program may be used, distributed and modified without limitation. ** *****************************************************************************/ #include <ntqbuttongroup.h> #include <tqradiobutton.h> #include <tqlabel.h> #include <ntqlistbox.h> #include <tqcombobox.h> #include <tqlabel.h> #include <ntqhbox.h> #include <ntqvbox.h> #include <ntqaccel.h> #include <tqpopupmenu.h> #include <tqmenubar.h> #include <tqstatusbar.h> #include <ntqapplication.h> #include "mywidget.h" MyWidget::MyWidget( TQWidget* parent, const char* name ) : TQMainWindow( parent, name ) { TQVBox* central = new TQVBox(this); central->setMargin( 5 ); central->setSpacing( 5 ); setCentralWidget(central); TQPopupMenu* file = new TQPopupMenu(this); file->insertItem( tr("E&xit"), tqApp, TQ_SLOT(quit()), TQAccel::stringToKey(tr("Ctrl+Q")) ); menuBar()->insertItem( tr("&File"), file ); setCaption( tr( "Internationalization Example" ) ); TQString l; statusBar()->message( tr("Language: English") ); ( void )new TQLabel( tr( "The Main Window" ), central ); TQButtonGroup* gbox = new TQButtonGroup( 1, TQGroupBox::Horizontal, tr( "View" ), central ); (void)new TQRadioButton( tr( "Perspective" ), gbox ); (void)new TQRadioButton( tr( "Isometric" ), gbox ); (void)new TQRadioButton( tr( "Oblique" ), gbox ); initChoices(central); } static const char* choices[] = { TQT_TRANSLATE_NOOP( "MyWidget", "First" ), TQT_TRANSLATE_NOOP( "MyWidget", "Second" ), TQT_TRANSLATE_NOOP( "MyWidget", "Third" ), 0 }; void MyWidget::initChoices(TQWidget* parent) { TQListBox* lb = new TQListBox( parent ); for ( int i = 0; choices[i]; i++ ) lb->insertItem( tr( choices[i] ) ); } void MyWidget::closeEvent(TQCloseEvent* e) { TQWidget::closeEvent(e); emit closed(); }
Main:
/**************************************************************************** ** $Id: qt/main.cpp 3.3.8 edited Jan 11 14:37 $ ** ** Copyright (C) 1992-2007 Trolltech ASA. All rights reserved. ** ** This file is part of an example program for TQt. This example ** program may be used, distributed and modified without limitation. ** *****************************************************************************/ #include <ntqapplication.h> #include <tqtranslator.h> #include <tqfileinfo.h> #include <ntqmessagebox.h> #include <tqcheckbox.h> #include <ntqvbox.h> #include <ntqlayout.h> #include <ntqbuttongroup.h> #include <tqpushbutton.h> #include <tqsignalmapper.h> #include <tqtextcodec.h> #include <stdlib.h> #if defined(Q_OS_UNIX) #include <unistd.h> #endif #include "mywidget.h" //#define USE_I18N_FONT class TQVDialog : public TQDialog { public: TQVDialog(TQWidget *parent=0, const char *name=0, bool modal=FALSE, WFlags f=0) : TQDialog(parent,name,modal,f) { TQVBoxLayout* vb = new TQVBoxLayout(this,8); vb->setAutoAdd(TRUE); hb = 0; sm = new TQSignalMapper(this); connect(sm,TQ_SIGNAL(mapped(int)),this,TQ_SLOT(done(int))); } void addButtons( const TQString& cancel=TQString::null, const TQString& ok=TQString::null, const TQString& mid1=TQString::null, const TQString& mid2=TQString::null, const TQString& mid3=TQString::null) { addButton(ok.isNull() ? TQObject::tr("OK") : ok, 1); if ( !mid1.isNull() ) addButton(mid1,2); if ( !mid2.isNull() ) addButton(mid2,3); if ( !mid3.isNull() ) addButton(mid3,4); addButton(cancel.isNull() ? TQObject::tr("Cancel") : cancel, 0); } void addButton( const TQString& text, int result ) { if ( !hb ) hb = new TQHBox(this); TQPushButton *c = new TQPushButton(text, hb); sm->setMapping(c,result); connect(c,TQ_SIGNAL(clicked()),sm,TQ_SLOT(map())); } private: TQSignalMapper *sm; TQHBox *hb; }; MyWidget* showLang(TQString lang) { static TQTranslator *translator = 0; tqApp->setPalette(TQPalette(TQColor(220-rand()%64,220-rand()%64,220-rand()%64))); lang = "mywidget_" + lang + ".qm"; TQFileInfo fi( lang ); if ( !fi.exists() ) { TQMessageBox::warning( 0, "File error", TQString("Cannot find translation for language: "+lang+ "\n(try eg. 'de', 'ko' or 'no')") ); return 0; } if ( translator ) { tqApp->removeTranslator( translator ); delete translator; } translator = new TQTranslator( 0 ); translator->load( lang, "." ); tqApp->installTranslator( translator ); MyWidget *m = new MyWidget; m->setCaption("TQt Example - i18n - " + m->caption() ); return m; } int main( int argc, char** argv ) { TQApplication app( argc, argv ); const char* qm[]= { "ar", "cs", "de", "el", "en", "eo", "fr", "it", "jp", "ko", "no", "ru", "zh", 0 }; #if defined(Q_OS_UNIX) srand( getpid() << 2 ); #endif TQString lang; if ( argc == 2 ) lang = argv[1]; if ( argc != 2 || lang == "all" ) { TQVDialog dlg(0,0,TRUE); TQCheckBox* qmb[sizeof(qm)/sizeof(qm[0])]; int r; if ( lang == "all" ) { r = 2; } else { TQButtonGroup *bg = new TQButtonGroup(4,TQt::Vertical,"Choose Locales",&dlg); TQString loc = TQTextCodec::locale(); for ( int i=0; qm[i]; i++ ) { qmb[i] = new TQCheckBox((const char*)qm[i],bg); qmb[i]->setChecked( loc == qm[i] ); } dlg.addButtons("Cancel","OK","All"); r = dlg.exec(); } if ( r ) { TQRect screen = tqApp->desktop()->availableGeometry(); bool tight = screen.width() < 1024; int x=screen.left()+5; int y=screen.top()+25; for ( int i=0; qm[i]; i++ ) { if ( r == 2 || qmb[i]->isChecked() ) { MyWidget* w = showLang((const char*)qm[i]); if( w == 0 ) exit( 0 ); TQObject::connect(w, TQ_SIGNAL(closed()), tqApp, TQ_SLOT(quit())); w->setGeometry(x,y,197,356); w->show(); if ( tight ) { x += 8; y += 8; } else { x += 205; if ( x > 1000 ) { x = 5; y += 384; } } } } } else { exit( 0 ); } } else { TQString lang = argv[1]; TQWidget* m = showLang(lang); app.setMainWidget( m ); m->setCaption("TQt Example - i18n"); m->show(); } #ifdef USE_I18N_FONT memorymanager->savePrerenderedFont(font.handle(),FALSE); #endif // While we run "all", kill them all return app.exec(); }
See also Examples.
Copyright © 2007 Trolltech | Trademarks | TQt 3.3.8
|