文字項目の処理

ABAP での翻訳可能テキストの使用

Objectives

After completing this lesson, you will be able to:
  • ABAP 開発の翻訳プロセスについて説明してください。
  • テキストエレメントを使用して、開発を翻訳可能にします。

ABAP 開発の翻訳

一部の ABAP 開発オブジェクトには、アプリケーションのユーザインタフェース (UI) に表示できるテキストが含まれています。たとえば、ABAP RESTful アプリケーションプログラミングモデルでは、以下のテキストが UI に表示されます。

  • データ定義およびメタデータ拡張におけるアノテーションのラベルおよびヘッダ
  • データエレメントのラベル
  • メッセージクラスからのメッセージ

これらのテキストは、アプリをさまざまなログオン言語で開始するエンドユーザごとに異なる必要があります。

注記

ABAP Development Tools では、エディタビューの下の Properties タブに開発オブジェクトのマスタ言語が表示されます。

もちろん、開発者がさまざまな言語でテキストを提供できるとは期待できません。ABAP 開発でさまざまな言語がどのように処理されるかについては、このビデオを視聴してください。

テキストプールおよびテキストエレメント

前述のとおり、データエレメント、データ定義、メタデータ拡張、メッセージクラスなどの言語依存テキストは、デフォルトで翻訳可能です。しかし、ABAP ソースコード内のテキストについてはどうでしょうか。これらもデフォルトで翻訳可能ですか。

答えは "いいえ" です。リテラルは翻訳できません。リテラルの内容は、ユーザのログオン言語に関係なく、常に同じです。

リテラルに言語依存テキストが含まれており、このテキストが UI に到達した場合は、ある時点でリテラルをテキストシンボルに置き換える必要があります。

テキストシンボル

テキストシンボル (テキストエレメントとも呼ばれます) は、グローバル ABAP クラスのテキストプールに保存されます。

テキストシンボルは 3 文字の ID で識別され、この ID はテキストプール内で一意である必要があります。テキストシンボルの ID は、数字、文字、またはその両方の組合せで構成されます。テキストシンボル ID では、大文字と小文字が区別されません。テキストプールエディタでは、常に大文字で表示されます。

この例では、テキストプールにテキストシンボル 001 とテキストシンボル HAU が含まれています。

注記

テキスト ID とメッセージ ID を混同しないでください。メッセージクラスのメッセージには、数字のみが許可されます。

すべてのテキストシンボルは、ABAP クラスのマスタ言語でテキストを定義します。テキスト長の技術的な制限は 255 文字です。この技術的な制限に加えて、テキストシンボルごとに意味的な最大長を定義する必要があります。最大長は、実際の長さと技術的な制限の間である必要があります。

この例では、テキストシンボル HAU の実際の長さは 12 で、最大長は 30 です。

注意

最大長は、トランスレータのハード制限を定義します。翻訳済テキストエレメントで不可解な略語を必要としないように、実際の長さよりも大幅に長くする必要があります。

ABAP でテキストシンボルにアクセスするには、以下の 2 つの方法があります。

  • スタンドアロン (テキストあり、ハイフンとテキスト ID が続く)
  • テキストリテラル (テキストリテラルの直後の括弧のペア内の ID) に添付されます。

2 番目のバリアントでは、フォールバックのタイプとしてテキストリテラルが使用されます。現在ロードされているテキストプールにテキストシンボルが存在する場合は、リテラルではなくテキストシンボルのコンテンツが使用されます。存在しない場合は、リテラルが使用されます。

注記

混乱を避けるため、テキストシンボルのテキストとリテラルのテキストは常に一致する必要があります。ATC の "拡張プログラムチェック (SLIN)" には、文字列のチェックが含まれています。このチェックでは、リテラルとテキストシンボルが異なる場合に警告が発行されます。

テキストシンボルの翻訳後、ABAP ランタイムではユーザのログオン言語に適合するテキストが使用されます。

テキストシンボルに対するクイックフィックスの使用方法

テキストプールはマニュアルで編集できますが、ABAP エディタでクイックフィックスを使用してテキストシンボルを登録および更新する方がはるかに簡単です。テキストシンボルに対するクイックフィックスの使用方法については、このデモを視聴してください。

テキストシンボルの登録および使用

コンソール出力が翻訳可能ではないことに気付きました。この演習問題では、文字列テンプレートのリテラルテキストをテキストプールのテキストシンボルに置き換えます。

テンプレート:

  • /LRN/CL_S4D401_TCS_TIMESTAMP (グローバルクラス)

ソリューション:

  • /LRN/CL_S4D401_TCS_TEXT_POOL (グローバルクラス)

タスク 1: テンプレートのコピー (オプション)

テンプレートクラス /LRN/CL_S4D401_TCS_TIMESTAMP をコピーします。前の演習問題を完了した場合は、このタスクをスキップし、クラス ZCL_##_SOLUTION の編集を続行することができます。

ステップ

  1. クラス /LRN/CL_S4D401_TCS_TIMESTAMP を独自のパッケージのクラスにコピーします (推奨名: ZCL_##_SOLUTION、## はグループ番号)。

    1. Project Explorer で、クラス /LRN/CL_S4D401_TCS_TIMESTAMP を右クリックしてコンテキストメニューを開きます。

    2. コンテキストメニューから Duplicate.... を選択します。

    3. Package 項目にパッケージの名称を入力します。Name 項目に、ZCL_##_SOLUTION (## はグループ番号) と入力します。

    4. Next を選択します。

    5. 移送依頼を確認し、Finish を選択します。

  2. コピーを有効化します。

    1. Ctrl + F3 を押してクラスを有効化します。

タスク 2: 出力の翻訳を有効化

グローバルクラスのマスタ言語を使用してログオンしていることを確認します。次に、ローカルクラス LCL_CARRIER のメソッド GET_OUTPUT の実装を調整します。文字列テンプレートのリテラルテキストをテキストプールの翻訳可能テキストに置き換えます。

ステップ

  1. ABAP クラスのマスタ言語を表示し、同じ言語でログオンしていることを確認します。

    1. グローバルクラス ZCL_##_SOLUTION のソースコードを開きます。

    2. エディタの下のタブから、Properties タブを選択します。

    3. マスタ言語プロパティを書き留めます。これは EN に設定する必要があります。

    4. Project Explorer で、ABAP Cloud プロジェクトの説明を分析します。システム ID、ログオンクライアント、およびユーザ ID の後に、ログオン言語が表示されます。

    5. ログオン言語が ABAP クラスのマスタ言語と一致しない場合は、適切なログオン言語で新しいプロジェクトを登録します。

  2. ローカルクラス LCL_CARRIER のメソッド GET_OUTPUT の実装にナビゲートします。

    1. たとえば、エディタで Local Types タブを開き、METHOD get_output を検索することができます。

    2. または、左側の Outline ビューで ZCL_##_SOLUTIONLCL_CARRIER を展開し、GET_OUTPUT を選択することもできます。

  3. 最初の APPEND 命令で文字列テンプレートを調整します。テキストリテラルを埋め込みテキストリテラルに置き換えます。

    ヒント

    埋め込み式の中括弧には、内に少なくとも 1 つのスペースが必要であることに注意してください。
    1. コードを以下のように調整します。

      ABAP
      1
      APPEND |{ 'Carrier Name:' } { me->name }| TO r_result.
  4. 埋込テキストリテラルをテキストシンボルにリンクします (テキストシンボルの推奨 ID: 001)。

    ヒント

    ID の括弧内、または ID の閉じ引用符と開括弧の間には空白を使用できないことに注意してください。
    1. コードを以下のように調整します。

      ABAP
      1
      APPEND |{ 'Carrier Name:'(001) } { me->name }| TO r_result.
  5. これを他の文字列テンプレートのテキストリテラル (テキストシンボル 002003004 の提案 ID) に対して繰り返します。

    1. コードを以下のように調整します。

      ABAP
      1234
      APPEND |{ 'Carrier Name:'(001) } { me->name }| TO r_result. APPEND |{ 'Passenger Flights:'(002) } { lines( passenger_flights ) }| TO r_result. APPEND |{ 'Average free seats:'(003) } { get_average_free_seats( ) }| TO r_result. APPEND |{ 'Cargo Flights:'(004) } { lines( cargo_flights ) }| TO r_result.
  6. クイックフィックスを使用して、テキストプールの最初のテキストを最大長 20 で作成します。

    1. (001) にカーソルを合わせ、Ctrl + 1 を押します。

    2. テキストプールでテキスト 001 登録を選択します

    3. スライダを使用して最大長20 に設定し、終了を選択します。

  7. 前のステップを繰り返し、同じ最大長を毎回使用して、テキストプールに他のテキストを登録します。

    1. 前と同じ方法でこのステップを実行します。

  8. テキストプールを分析して有効化します。

    1. Ctrl キーを押しながら、任意のテキスト ID を選択してテキストプールにナビゲートします。

    2. テキストプールは以下のようになります。

      Code Snippet
      1234567891011
      @MaxLength:20 001=Carrier Name: @MaxLength:20 002=Passenger Flights: @MaxLength:20 003=Average free seats: @MaxLength:20 004=Cargo Flights:
    3. テキストプールで Ctrl + F3 を押します。

  9. グローバルクラスをコンソールアプリとして有効化してテストします。

    注記

    差異に気付くべきではありません。テキストの翻訳が可能になったことが改善されました。ただし、これは、システム管理者が翻訳プロジェクトを実際に登録した場合にのみ効果があります。これは、このコースの範囲外です。
    1. メソッド GET_OUTPUT の実装に戻ります。

    2. Ctrl + F3 を押します。

    3. F9 を押します。