Open棟梁 wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。

目次

概要

リソース ファイルではなく、国際化(多言語化)辞書テーブルを用いてプログラムでコントロールの表示を国際化(多言語化)することもできる。

設計

国際化(多言語化)辞書テーブルを下記のように設計すると良い。

ID画面名コントロール名日本語英語中国語・・・
1xxxあああaaa亜亜亜・・・
2xxxyyyyいいいiii威威威・・・
3yyyえええeee獲獲獲・・・
4yyyzzzzかかかkkk華華華・・・

テーブルのストレージ

スタンドアロンのアプリケーションの場合は、DBとして以下の利用も考えられる。

SQL Compact 、SQL Server Express(共に無償)、

XMLファイル

XmlDocument?

実装も定義も面倒。

DataTable?

国際化(多言語化)する方法

国際化(多言語化)辞書テーブルをしてコントロールのキャプションを国際化(多言語化)する方式を以下に示す。

Form上のコントロールを再帰処理する。

この実装は、”Open棟梁”の各レイヤの「ベースクラス2」(画面コード親クラス2)上に共通処理として実装できる(画面内のコントロールを再帰的に処理する)。

処理概要

  1. 画面表示時に画面名をキーにして、国際化(多言語化)辞書テーブルの結果セットを取得する。
  2. Control.HasControls?メソッド & Controlsプロパティの再起処理により画面上のコントロールを取得する。
  3. コントロールのID(名前)を取得し、結果セットから対応する国際化(多言語化)辞書レコードを取得。
  4. 上記の国際化(多言語化)辞書レコードから、必要に応じてコントロールのプロパティ(画面に出力する情報)を変更する。

実装箇所

ベースクラス2」(画面コード親クラス2)上の”private void CMN_FormInit(string eventName)”メソッドなどに実装する。

実装方法

以下はForm上のcontrolを再起処理する例。

private void Form1_Load(object sender, EventArgs e)
{
  RecursiveProcessing(this);
}

private void RecursiveProcessing(Control ctrl)
{
  System.Diagnostics.Debug.WriteLine(ctrl.Name);

  if (ctrl.HasChildren)
  {
    foreach (Control child in ctrl.Controls)
    {
      RecursiveProcessing(child);
    }
  }
}

ここでキャプション(Textプロパティ)の値を設定する。
ControlをLabelコントロール等にDownCast?する場合は、以下を参照。

カスタム・コントロールで対応する

ASP.NETのWeb(System.Web.UI)コントロールのRendre系メソッドをカスタマイズする。


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS