これまた基本のキですがゆえにあまり語られないと思うので改めて記事にしてみます。
IBM i 多言語化パッケージングの基本構造
・言語依存部分とプログラム部分を分離しパッケージ
RSTLICPGMコマンドで,プログラム部分と言語依存部分を個別に導入可能
RSTOBJ(*ALL | *PGM | *LNG)
LNG(*PRIMARY | 29xx)
言語依存部分のオブジェクト例
- *CMD コマンドプロンプトの表示
- *MSGF MSGIDに対応したメッセージの言語部分
- *PNLGRP Helpなどで表示される画面
- *MENU メニュー項目
- IFSのカタログファイル(.拡張子 .cat) 等
IBM i の言語部分、プログラム部分の識別について
いろいろな確認方法があります、例えば、
DSPSFWRSC OUTPUT(*PRINT)
を実行して生成されるスプールを見ると分かりやすいかもしれません。(下図)
上記で
・一番左列 2行目、3行目に 5770-SS1 BASE の行があります。これらの機能タイプ(または機能)欄をみると、
2行目はCODE, 3行目は*LNG と記載されています。
・またこの2つのライブラリーはQSYSとなっています。
以上を分かりやすく書き直すと、**「2行目 5770-SS1 OSベースのプログラム部分、3行目 5770-SS1 OSの日本語(2930)現依存部分」という事になります。
二次言語を導入しているシステムの例
次の図は二次言語として英語2924を追加導入済のシステムです。すると、5770-SS1 *BASE の行が3つあることが分かります。(これ以外のライセンスプログラムも全部3行ずつあります。)
*3行目は機能タイプ LNG で、ライブラリーが QSYS29294 とあることから英語2924の言語依存部分だという事が分かります。

このようにIBM i OSはシステム提供のソフトウェア(OSベース部分、OSオプション、コンパイラーその他追加のライセンスプログラム)はプログラム部分と言語依存部分が完全に分離していて、表示(処理)に必要な言語を複数導入して、ジョブの環境を切り替えることでマルチ言語対応を実現しています。
たとえばユニコートUTF-8でDb2にデータを格納する、ですとか、EBCDICでDb2にデータを格納する、というのとは別な階層での機能です。ここで示した多言語の組合せと、データベースに保管されるデータタイプや言語タイプは相互に参照しあって、実際のユーザーが使用する言語環境で文字化けが無いように自動的に変換される仕組みが備わっています。
※とはいっても、たとえば中国語でしか存在しない文字を日本語や英語環境で表示すると当然文字化けは起こります。
IBM i 内での言語依存オブジェクトの選択方法
ライブラリーリストに従い言語依存オブジェクトを探索
一次言語に対応した言語オブジェクトはQSYSに存在
一次言語に対応した言語オブジェクトはQSYS29nnに存在
QSYSはデフォルトでSYSLIBLに追加されており、ジョブで必ず参照される
特殊処理をしなければ,一次言語が使用される
SYSLIBLでQSYSより上(先)に二次言語のQSYS29nnを追加するとライブラリーリストに従い二次言語が使用される
二次言語利用の設定方法
方法①:システム値 QSYSLIBLに指定
システム全体に影響
方法②:サブシステム記述のSYSLIBLに指定
特定のサブシステムに影響
方法③:CHGSYSLIBLコマンドで指定
特定のジョブに影響
CHGSYSLIBLコマンドの権限は*PUBLIC *EXCLUDE(IBM i 7.6では強化されているかも?要確認)
一次言語・二次言語のよくある誤解
・二次言語を入れないと,その言語が利用できない
・一次言語・二次言語は,システム提供の画面やメッセージの言語を決定するだけ。ユーザー作成画面やユーザーデータには,影響を与えない.
・ただし,ユーザーが利用する言語と互換性のある一次言語・二次言語の導入が望ましい.
例) 中国語を利用中のユーザーに,日本語のシステムメッセージが送られるべきではない.ただし,英語言語が利用できれば中国語言語が導入されなくても,対応は可能である.
・一次言語を2930にしないとCCSID1399が利用できない
CCSIDはジョブやオブジェクト単位に指定可能で一次言語には依存しません
・一次言語を2930にしないとACSのホストコードページP939/1399の画面で半角カタカナの文字化けを直せない
システム提供メッセージのバケには,2930を二次言語として設定
ユーザー画面の場合,両方を用意し,OSの言語機能のように切り替える
ジョブにCHRIDCTL(*JOBCCSID)を設定する方法もあるが,DBCSパネルに正常に対応しない場合があり,非推奨
多言語対応におけるDBCSサポートの歴史
OS/400 V4まではSBCS一次言語とDBCS一次言語でOSコードレベルで差異がある
この結果、例えばSBCSとDBCSの言語コードでは以下のような差異がありました。
SBCS一次言語ではCRTDEVDSPコマンドでタイプ5555(DBCS用)を作成できない
SBCS一次言語では各種のOSコマンドでIGCパラメーター(DBCS用)が無い
SBCSとDBCS間で一次言語の変更ができない
OS/400 V5R1でSBCS言語とDBCS言語とでOSコードレベルの共通化がなされた
OS/400 V5R3 で正式に全てのOS/400言語コードがDBCS対応となった
この結果、すべての言語コードでQIGCが 1 になった
SBCSとDBCS間で一次言語の変更が可能となった
