어플리케이션 개발시 유니코드및 다국어 지원을 기본으로 하는 것이 바람직한 개발 방향이다.
Qt는 다국어 개발에 대한 좋은 솔루션을 제공하고있는데 여기서 다국어 사용 및 개발방법을 설명하고자 한다.
Linguist툴은 QML에서 qsTr(), C++소스코드의 tr()을 사용한 문자열을 가져와 XML구조의 ts파일을 만든다.
예를 들어 QML의 문자열이 사용되는 곳에 아래 코드와 같이 사용될 것이다.
Window { visible: true width: 640 height: 480 title: qsTr("Hello World") }
언어별 ts파일이 생성되어야 하는데 프로젝트파일(.pro)에 정의해주어야한다.
.pro파일을 열고 아래처럼 언어별 정의를 해주는데 이름에 규칙이나 제한은 없지만 여기선 "_" 다음에 ISO 3166-1 alpha-2 국가부호로 해줬다.
TRANSLATIONS += lang_ko.ts
이제 ts파일을 생성하기위해 QtCreator에서 Tools - External - Linguist - Update Translations (lupdate)를 실행한다.
프로젝트가 위치한 곳에 ts파일이 생성된다.
Linguist 실행하고 생성된 ts파일을 열면 컨텍스트, 문자열, 원본 코드를 볼 수 있다.
편집 - 번역파일설정을 선택해서 해당되는 언어, 국가를 설정한다.
원본 텍스트에 해당하는 문자열을 입력하고 ctrl + 엔터를 누르거나 아이콘을 클릭해서 번역을 수행한다.
번역을 완료하고 저장후에 파일 - 배포 클릭하면 ts파일이 위치한 곳에 qm파일이 생성된다.
... QGuiApplication app(argc, argv); QTranslator translator; translator.load("lang_ko.qm"); app.installTranslator(&translator); QQmlApplicationEngine engine; engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); if (engine.rootObjects().isEmpty()) return -1; return app.exec(); ...
아래의 코드는 QML에서 3D Studio 컴포넌트의 텍스트 요소의 속성(문자열)을 바꾸도록한 예제이다.
... function setLanguageMenu() { menuLight.setAttribute("textstring", qsTr("Light")) menuDrive.setAttribute("textstring", qsTr("Drive")) menuRotate.setAttribute("textstring", qsTr("Rotate")) } Studio3D{ anchors.fill: parent Presentation { id: cluster source: "qrc:/presentation/3d_example.uia" Element{ id: menuLight elementPath: "Scene.MenuLayer.Menu.Light" } Element{ id: menuDrive elementPath: "Scene.MenuLayer.Menu.Drive" } Element{ id: menuRotate elementPath: "Scene.MenuLayer.Menu.Rotate" } Component.onCompleted: { if(langKor) setLanguageMenu() } } } ...
이제 프로젝트를 빌드하고 어플리케이션이 실행되면 번역된 문자열이 출력된다.
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
공지 | Qt프로그래밍(QtQuick) Beginner를 위한 글 읽는 순서 | 운영자 | 2019.01.05 | 86963 |
10 | 초보자를 위한 첫번째 프로젝트 - QML로 만드는 Hello World | makersweb | 2018.03.16 | 14688 |
» | 다국어 지원 어플리케이션 개발 | makersweb | 2018.01.27 | 3072 |
8 | Qt 어플리에이션 전역에 폰트 설정 | makersweb | 2018.01.24 | 5769 |
7 | 임의의 메모리 영역(QImage)에 QPainter를 이용하여 그리기 | makersweb | 2017.12.19 | 3566 |
6 | 타임스탬프( timestamp) 유닉스 시간 | makersweb | 2017.10.19 | 1697 |
5 | Qt Logging Rule, Qt 프레임워크 로그 출력 | makersweb | 2017.01.13 | 3818 |
4 | 멀티 스레드환경, 스레드에 안전한 이벤트처리 | makersweb | 2016.10.27 | 5209 |
3 | Qt 프로그래밍의 시작 | makersweb | 2015.10.25 | 14514 |
2 | Qt의 스레드간 시그널 슬롯의 커넥션타입 [1] | makersweb | 2015.10.24 | 10375 |
1 | Qt의 시그널 슬롯 시스템 | makersweb | 2015.10.20 | 23932 |