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:"));
적용
- QApplication::installTranslator로 QTranslator을 install한다.
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"));
}