はじめに
第1章 Qtとは
第2章 Qtでの多言語化の概要
第3章 翻訳ファイルのプロジェクトファイルへの追加と使用方法
第4章 Qt Linguistの使い方
第5章 コード内の文字列の多言語化
第6章 動的な言語表示の切り替え
第7章 翻訳ファイルの自動生成と翻訳対象文字列リテラルの自動補完機能
本書を手に取っていただき、ありがとうございます。
趣味で作成したアプリケーションや、企業などで販売するアプリケーションをできるだけ多くの人に使ってもらいたいと考えた場合に、アプリケーションの多言語化に対応することが必要になってくると思います。
本書では、クロスプラットフォームフレームワークであるQtを使用した多言語化に関する内容をまとめた一冊になっています。Qtの強みである、
・さまざまな言語を使用できる、ユニコードのサポート。
・ユーザーインターフェース画面の翻訳が簡単にできるTool。
・コード内の文字列を多言語化できる簡単な仕組み。
を中心に解説しています。
本書が皆さんの開発の助けとなり、皆さんが作成するアプリケーションを世の中の多くの人に使用してもらう手助けになればと思っています。
またQtを知らない方も、本書を読んでQtに興味を持って頂ければ幸いです。
本書のサンプルソースコードは、次のURLから取得することが可能です。
https://github.com/KazuoASANO/make_multilanguage_application_with_qt
1.本書は著者が独自に調査した結果を著述したものです。
2.できるかぎり内容に万全を期して作成しましたが、ご不審な点や誤り・記載漏れなどお気づきの点がありましたら、Twitterにて、ハッシュタグ#qtjpをつけてつぶやいてもらうと、ひょっとしたら著者が見る場合があります。しかしながらモノグサな著者の為、回答をすることは無いかもしれません。
3.本書に記載されたURLやソフトウェアの内容は、将来予告なく変更される場合があります。
本書に記載する内容は筆者の所属する組織の公式見解ではありません。また、本書は可能な限り正確を期すように努めていますが、筆者がその内容を保証するものではありません。そのため、本書の記載内容に基づいた読者の行為、及び読者が被った損害について筆者はなんら責任を負うものではありません。
本書に記載されている会社名、製品名などは、一般に各社の登録商標または商標、商品名です。会社名、製品名については、本文中ではc、R、?マークなどは表示していません。
本書籍は、技術系同人誌即売会「技術書典」で頒布されたものを底本としています。
本章では、まず Qtについて知り、 QtのGUI作成で使用されるC++と親和性の高いQt Widgetsと、アニメーション動作が簡単に作成できるScriptベースのQt Quickの概要について紹介します。
多言語対応の前準備である、GUIアプリケーションの開発手法を理解していきましょう。
Qt (キュート)とは、クロスプラットフォームのアプリケーションフレームワークであり、GUI (グラフィカルユーザーインターフェイス)と、さまざまな機能を含んだライブラリを有するC++開発フレームワークです。また、IDE (総合開発環境)としてQt Creatorが用意されており、効率よく開発できる環境が用意されています。
継続的な機能Up/バグ修正が、積極的におこなわれているのも特徴で、約半年に1回のリリース周期で新しいバージョンが更新されています。現在のバージョンは、Qt 5.12.6がリリースされています1。
Qt 5.12の場合、LTS (長期サポート版)(Long Time Support)となっており、3年のサポートが適用されています。今使用するなら、Qt5.12.6LTSがお勧めとなっています。
C++で書かれているフレームワークであるものの、Ruby、Python、Perlなどから使用できるようにしたさまざまな言語バインディングのAPIがオープンソース等により提供されており、最近では、オフィシャルサポートとして、Pythonのバインディングである Qt for Python がリリースされています。
Qtを使用したGUIを作成する場合、Qt WidgetsとQt Quickというふたつの開発手法があります。次にふたつの開発手法の違いを説明します(表1.1)。
GUI開発手法 | UI作成Tool | 記述言語 | 拡張子 |
Qt Widgets | Qt Designer | XML(ただし UI作成Toolが自動生成) | .ui |
Qt Quick | Qt Quick Designer | QML | .qml |
昔からあるQtの開発手法であり、古典的なデスクトップスタイルを中心としたUI要素のセットが提供されているモジュールです。2
C++とQt for Pythonの両方に非常に親和性が強く、Qt Creatorの機能であるQt DesignerでGUIが容易に作成できることが特徴となっています。
QML (Qt Meta-Object Language)言語という、UIを記述するためのプログラミング言語を使ってGUIを作成するモジュールです。QML言語はCSSに似たシンタックスを持ち、宣言的なJSON風の構文でUIを記述することができます。またロジックの記述には JavaScriptを使うこともできます。
Androidで使用されているマテリアルデザインのような、ビジュアルGUIを作成するUI要素のセットが提供されており、ユーザー動作に対してアニメーション化されたUIオブジェクトを簡単に作成することができます。3
どちらのモジュールについても、Qt Creatorの機能であるデザインモードでGUIを作成することができます。また、Qt Widgetの作成ツールであるQt Designerについては、Pythonのパッケージ管理システムであるpip (Pip Installs Packages)を使用してPySide2 (Qt for Pythonのパッケージ名)をインストールすることにより、 "designer" という名称でインストールされます。
Qtの特徴的な多言語化の仕組みを紹介し、コードベースで確認しながら翻訳作業ができるQt Linguistを含めたTool群について説明していきます。
継続してソフト開発をおこなうアプリケーションの場合、使用するフレームワークによっては、ユーザー側であらかじめ多言語化の仕組みをソフトウェアの作りとして入れ込むことが多いと思います。
Qtの場合は、あらかじめフレームワーク内に多言語化をおこなう仕組みが含まれており、
・ユーザーインターフェースを作成するUI作成ツールであるDesigner。
・ソースコードに翻訳されたTextを返すマクロ。
を使用することにより、継続した開発においても単純な手順で多言語化をおこなうことが可能な仕組みとなっています。またQt LinguistというToolも提供しており、コードを書けないユーザーであっても翻訳ができるようになっています。
Qtにおけるアプリケーションの翻訳フローを次に示します(図2.1)。
これ以外にも、翻訳のために開発されたXMLベースのファイル形式XLIFFから、Qt用の翻訳ファイルに変換できるlconvertなどのツールが用意されています。
Qt Linguistについては、翻訳をおこなう作業が発生する為、自動化することはできませんが、
・ソースコードから翻訳対象のメッセージテキストを抽出。
・翻訳ファイルをコンパイル済みQt翻訳バイナリファイル(.qm)に変換。
に関しては、プロジェクトファイルにあらかじめ登録することにより自動化することが可能となっています。本章では、多言語化の作業で使用するさまざまなツールの説明をしていきます。