バージョン 6.3.3
 —  Unicode およびコードページのサポート  —

双方向言語サポート

このドキュメントでは、Windows、UNIX、および OpenVMS プラットフォームでの Natural による双方向言語のサポート方法について説明します。

アラビア語やヘブライ語などの一部の言語は右から左(RTL)に記述されますが、英語やドイツ語などの大部分の言語は左から右(LTR)に記述されます。 左から右と右から左の両方が含まれるテキストは、双方向テキストと呼ばれます。

Natural は、双方向言語を基本的にサポートします。 Windows では、このサポートは、Natural デフォルトコードページと Windows システムコードページの両方が双方向コードページとして定義されている場合に有効です。 Natural で特定のコードページが定義されていない場合は、双方向の Windows システムコードページが定義されていれば十分です。 UNIX および OpenVMS では、双方向言語のサポートは、Natural デフォルトコードページが双方向コードページである場合に有効です。

Natural プログラムの出力は、端末コマンド %V およびセッションパラメータ PM を使用して制御できます。

端末コマンド %V は、画面方向を定義します。 画面方向が右から左の場合、現在のウィンドウのレイアウトはミラーリングされます。つまり、すべてのウィンドウコンポーネントまたはフィールドの基点は右上隅になります。 画面方向は、%VON を使用して右から左に変更され、%VOFF を使用して左から右に戻されます。

プロファイルパラメータ PM は、デフォルトの画面方向を定義します。 PM が "R"(リセット)に設定されている場合、デフォルトの画面方向は左から右です。 PM が "I"(逆)に設定されている場合、デフォルトの画面方向は右から左です。

セッションパラメータ PM では、フィールドの方向が反対になります。 "フィールドの方向を反対にした場合" の結果は、PM パラメータが使用されるステートメントおよびプラットフォームによって異なります。 PM パラメータが MOVE ステートメントで使用された場合、フィールドの内容は単純に反対になります。つまり、最初の文字が最後の文字になるなどです。結果はフィールドの文字に依存しません。 末尾の空白が削除されてから、フィールドは反対にされます。

例えば、次のようなプログラムがあります。

DEFINE DATA LOCAL
1  TEST1  (A10)
1  TEST2  (A10)
END-DEFINE
TEST1 := 'program'

MOVE TEST1 (PM=I) TO TEST2
INPUT TEST1 (AD=O) TEST2 (AD=O)

END

次の出力を生成します。

TEST1 program    TEST2 margorp

"margorp" は "program" が反対になったものです。

PM パラメータが INPUTDISPLAY などの IO ステートメントに対して使用される場合、その結果はより複雑です。 この場合、フィールド方向は画面方向に基づきます。

Windows では、"フィールド方向を反対にすること" は、フィールドの文字が単純に反対になることを意味しません。 Windows の複雑な双方向アルゴリズムが適用されます。詳細については、Microsoft Windows のドキュメントを参照してください。 一方、UNIX および OpenVMS では、フィールドの文字は再ソートされません。単純に反対になるだけです。

次の例では、変数 TEST に割り当てられた文字は、次の順序で入力されています。

Test variable

次に、Windows のプログラム例を示します。 プログラムエディタで入力するときに、定数の文字はすでに再ソートされています。

DEFINE DATA LOCAL
1  TEST  (A20)
END-DEFINE
TEST := 'abc 123 graphics/uni-testvariable-reversed.png'

SET CONTROL 'voff'

INPUT TEST (AD=O)  /
      TEST (AD=O PM=I) 

SET CONTROL 'von'

INPUT TEST (AD=O)  /
      TEST (AD=O PM=I) 
END

このプログラムでは、Windows 上に次の 2 つの画面が生成されます。

TEST abc 123 graphics/uni-testvariable-reversed.png 
TEST          123 graphics/uni-testvariable-reversed.png  abc

および

                                                                        123 graphics/uni-testvariable-reversed.png  abc TEST
                                                               abc 123 graphics/uni-testvariable-reversed.png           TEST

次に、UNIX および OpenVMS のプログラム例を示します。 文字が同じ順序で入力された場合、文字は単純にキーイング順に表示されるため、プログラムは次のように表示されます。

DEFINE DATA LOCAL
1  TEST  (A20)
END-DEFINE
TEST := 'abc graphics/uni-testvariable.png 123'
 
SET CONTROL 'voff'
 
INPUT TEST (AD=O)  /
      TEST (AD=O PM=I) 
 
SET CONTROL 'von'
 
INPUT TEST (AD=O)  /
      TEST (AD=O PM=I) 
END

このプログラムでは、UNIX および OpenVMS 上に次の 2 つの画面が生成されます。

TEST abc graphics/uni-testvariable.png 123 
TEST          321 graphics/uni-testvariable-reversed.png  cba

および

                                                                        321 graphics/uni-testvariable-reversed.png  cba TSET
                                                               abc graphics/uni-testvariable.png 123           TSET

マップエディタには、[マップの反転]コマンドがあり、双方向フィールドを持つマップを簡単に処理できます。 このコマンドによって、現在のマップの表示方向が変更されます。 フィールドの位置は変わらず、表示のみが変更されます。 Windows では、このコマンドは現在のマップにのみ影響します。 UNIX および OpenVMS では、以降のすべてのマップが反対に表示されるように、フラグが設定されます。次の[Reverse Map]コマンドによって、元の状況が復元されます。

Windows では、ダイアログの出力を同様に制御できます。ダイアログ自体とほとんどのダイアログコントロールの両方に RTL 属性があります。 ダイアログの RTL 属性をオンにすると、ダイアログの画面方向は右から左になります。 他のコントロールの RTL 属性をオンにすると、これらのコントロールの方向は右から左になります。

プロファイルパラメータ PM によって、新しいダイアログの RTL 属性のデフォルト設定が定義されます。 PM が "R"(リセット)に設定されている場合、RTL 属性はデフォルトでオンになりません。 PM が "I"(逆)に設定されている場合、RTL 属性はデフォルトでオンになります。 ダイアログの新しく作成されるコントロールの RTL 属性のデフォルト設定は、ダイアログの RTL 属性の設定から派生します。

ダイアログにすでにコントロールがあるときにダイアログの RTL 属性が変更された場合は、コントロールの RTL 属性も変更するかどうかを確認するダイアログが表示されます。

Windows で双方向言語を使用している場合は、"GUI" が推奨される出力方法です。 出力方法 "GUI" を使用すると、出力されるページに、画面上に表示されるウィンドウと同じレイアウトが表示されます。 フィールド文字のソートは同一です。 出力方法 "TTY" を使用すると、ほとんどの場合、出力されるレイアウトは画面ウィンドウのレイアウトとは異なります。これは、フィールド文字が論理順に出力されるためです。 方向が右から左へのフィールドの場合、すべての文字が単純に反対になります。つまり、最初の文字が最後の文字になるなどです。

Top of page