'QT'에 해당되는 글 1건

  1. 2011.09.09 Qt 런타임 다국어 지원

Qt 런타임 다국어 지원

카테고리 없음 2011. 9. 9. 11:49

번역작업

개요

    • 소스에서 번역할 문자열을 추출 (lupdate이용 *.ts파일 생성)
    • 생성된 ts파일을 번역(linguist util이용)
    • ts파일을 release(lrelease이용 *.qm파일 생성)

1단계:번역 문자열 추출

    • 프로젝트 파일(*.pro)에 아래와 같이 TRANSLATIONS 추가
      TRANSLATIONS    = lang/cs_cs.ts \
                        lang/da_da.ts \
                        lang/de_de.ts \
                        lang/de_ch.ts \
                        lang/en_gb.ts \
                        lang/en_us.ts

      • lupdate로 위 파일을 생성
        Qt Creator에서 Tools>External>Linguist>Update Translations(lupdate)

    2단계:번역작업

      • Qt Linguist로 위 ts파일(들)을 열어서 번역한다.

    3단계:릴리즈

      • lrelease로 qm파일을 생성
        Qt Creator에서 Tools>External>Linguist>Release Translations(lrelease)

    코딩작업

    코드 작성시 번역할 문자열은 아래와 같이 QObject::tr()로 만든다. (

    디자이너에서는 자동으로 정리된다.)

    QLabel *label = new QLabel(tr("Name:"));

     

    적용

    QTranslator translator;

    translator.load("lang/en_us");
    app.installTranslator(&translator);

     

    언어 전환(런타임)

      • 기존 translator을 제거(QApplication::removeTranslator)하고, 다시 install(위 적용 참조)한다.
        app.removeTranslator(&translator);
        translator.load("lang/ko_kr");
        app.installTranslator(&translator);
      • installTranslator하면, QEvent::LanguageChange이벤트가 발생한다. 이 이벤트로 번역문자열이 새로운 translator에 의해 적용되도록 한다.
        void MainWindow::changeEvent(QEvent* event)
        {
            if (event->type() == QEvent::LanguageChange)
            {
                // 디자이너에 의해 생성된 문자열
                ui.retranslateUi(this);
         
                // 코드에서 삽입한 문자열
                retranslate();
            }
            QMainWindow::changeEvent(event);
        }
         
        void MainWindow::retranslate()
        {
            languages->setTitle(tr("Language"));
        }
    :