多国語アプリケーション — プログラミング言語 Ring 1.14 取扱説明書

Skip to content

# 多国語アプリケーション

多国語 Ring アプリケーションの実装方法は多種多様です！

String2Constant ツールの用法です。

## String2Constant の用法

Ring 1.8 より String2Constant アプリケーションがあります。

このツールは ring/tools/string2constant フォルダにあります。

このツールは文字列リテラルではなく、定数を用いたソースコードへ変換します。

これにより、定数を様々な言語を翻訳して言語ごとにソースコードのファイルへ格納できます。

Arabic.ring, English.ring, Japanese.ring など言語ごとに特殊なファイルを扱うことができます。

このツールの採用事例としては、アラビア語へ翻訳したフォームデザイナーがあります。

## フォームデザイナーの翻訳

フォームデザイナーのアプリケーションは ring/applications/formdesigner フォルダにあります。

翻訳用のファイルは ring/applications/formdesinger/translation フォルダにあります。

三種類のファイルがあります。

- Arabic.ring

- English.ring

- Japanese.ring

定数定義の考えかたを理解するには前述のファイルを確認します。

これは Japanese.ring ファイルからの引用です。

    T_LANGUAGE = "english"
    T_LAYOUTDIRECTION = 0                   # 左から右へ

    T_FORMDESIGNER_FORMDESIGNER     = "フォームデザイナー"
    T_FORMDESIGNER_FORMTITLE                = "Form1"

    T_FORMDESIGNER_FILE                     = "ファイル(&F)"
    T_FORMDESIGNER_NEW                              = "新規作成(&N)"
    T_FORMDESIGNER_OPEN                     = "開く(&O)"
    T_FORMDESIGNER_SAVE                     = "保存(&S)"
    T_FORMDESIGNER_SAVEAS                   = "名前を付けて保存(&A)"
    T_FORMDESIGNER_CLOSE                    = "閉じる(&C)"

フォームデザイナーのソースコードのファイルでは、文字列リテラル型ではなく定数を使用しています。

これは formdesigner/mainwindow/formdesignerview.ring ファイルからの引用です。

    # メインウィンドウの作成と MDI 領域の使用
            win = new qMainwindow() {
                    setWindowTitle(T_FORMDESIGNER_FORMDESIGNER) # "Form Designer"
                    setcentralWidget(this.oArea)
                    setLayoutDirection(T_LAYOUTDIRECTION)
            }

- コメントで文字列リテラルを記述すると、コードの可読性向上になります。

- setLayoutDirection() メソッドで、ウィンドウの方向を左から右へ設定できます。

- 使用する翻訳ファイルをLoad 命令で指定します。

## フォームの翻訳

フォームデザイナーでフォームを作成した後に View クラスが生成されます。

View クラスの修正は行わずに Controller クラスから翻訳を追加します。

例えば、このようなフォームファイルがあります : ring/formdesigner/selobjects/selobjects.rform

このコードを使って Controller クラスから翻訳を追加します。

そして、定数は Arabic.ring, English.ring と Japanese.ring で定義します。

    class selobjectsController from windowsControllerParent

            oView = new selobjectsView  {
                    ListObjects.setselectionmode(QAbstractItemView_MultiSelection)
                    win.setwindowmodality(2)
                    # 翻訳
                            win.setWindowTitle(T_FORMDESIGNER_SELOBJECTS_TITLE)
                            win.setLayoutDirection(T_LAYOUTDIRECTION)
                            labelobjects.setText(T_FORMDESIGNER_SELOBJECTS_OBJECTS)
                            btnSelect.setText(T_FORMDESIGNER_SELOBJECTS_SELECT)
                            btnClose.setText(T_FORMDESIGNER_SELOBJECTS_CLOSE)
            }