2 single: 多国語アプリケーション; はじめに
8 多国語 Ring アプリケーションを実現する方法は色々あります!
10 String2Constant ツールの用法を学びます。
13 pair: 多国語アプリケーション; String2Constant の用法
16 ======================
18 Ring 1.8 より String2Constant アプリケーションがあります。
20 このツールは ring/samples/tools/string2constant フォルダにあります。
22 このツールは文字列リテラルではなく、定数を用いたソースコードへ変換します。
24 これにより、定数を様々な言語を翻訳して言語ごとにソースコードのファイルへ格納できます。
26 Arabic.ring, English.ring, Japanese.ring など言語ごとに特殊なファイルを扱うことができます。
28 このツールの採用事例としては、アラビア語へ翻訳したフォームデザイナーがあります。
30 .. image:: string2constant.png
34 pair: 多国語アプリケーション; フォームデザイナーの翻訳
37 ========================
39 フォームデザイナーのアプリケーションは ring/applications/formdesigner フォルダにあります。
41 翻訳用のファイルは ring/applications/formdesinger/translation フォルダにあります。
49 定数定義の考えかたを理解するには前述のファイルを確認します。
51 これは Japanese.ring ファイルからの引用です。
55 T_LANGUAGE = "english"
56 T_LAYOUTDIRECTION = 0 # 左から右へ
58 T_FORMDESIGNER_FORMDESIGNER = "フォームデザイナー"
59 T_FORMDESIGNER_FORMTITLE = "Form1"
61 T_FORMDESIGNER_FILE = "ファイル(&F)"
62 T_FORMDESIGNER_NEW = "新規作成(&N)"
63 T_FORMDESIGNER_OPEN = "開く(&O)"
64 T_FORMDESIGNER_SAVE = "保存(&S)"
65 T_FORMDESIGNER_SAVEAS = "名前を付けて保存(&A)"
66 T_FORMDESIGNER_CLOSE = "閉じる(&C)"
68 フォームデザイナーのソースコードのファイルでは、文字列リテラル型ではなく定数を使用しています。
70 これは formdesigner/mainwindow/formdesignerview.ring ファイルからの引用です。
74 # メインウィンドウの作成と MDI 領域の使用
75 win = new qMainwindow() {
76 setWindowTitle(T_FORMDESIGNER_FORMDESIGNER) # "Form Designer"
77 setcentralWidget(this.oArea)
78 setLayoutDirection(T_LAYOUTDIRECTION)
81 * コメントで文字列リテラルを記述すると、コードの可読性向上になります。
83 * setLayoutDirection() メソッドで、ウィンドウの方向を左から右へ設定できます。
85 * 使用する翻訳ファイルをLoad 命令で指定します。
88 pair: 多国語アプリケーション; フォームの翻訳
93 フォームデザイナーでフォームを作成した後に View クラスが生成されます。
95 View クラスの修正は行わずに Controller クラスから翻訳を追加します。
97 例えば、このようなフォームファイルがあります : ring/formdesigner/selobjects/selobjects.rform
99 .. image:: formtranslation1.png
103 このコードを使って Controller クラスから翻訳を追加します。
105 そして、定数は Arabic.ring, English.ring と Japanese.ring で定義します。
109 class selobjectsController from windowsControllerParent
111 oView = new selobjectsView {
112 ListObjects.setselectionmode(QAbstractItemView_MultiSelection)
113 win.setwindowmodality(2)
115 win.setWindowTitle(T_FORMDESIGNER_SELOBJECTS_TITLE)
116 win.setLayoutDirection(T_LAYOUTDIRECTION)
117 labelobjects.setText(T_FORMDESIGNER_SELOBJECTS_OBJECTS)
118 btnSelect.setText(T_FORMDESIGNER_SELOBJECTS_SELECT)
119 btnClose.setText(T_FORMDESIGNER_SELOBJECTS_CLOSE)