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

目次

概要

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

詳細

テーブル設計

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

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

テーブルのストレージ

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

SQL Server

XMLファイル

  • XmlDocument?
    実装も定義も面倒。
  • DataTable?
    • DataTable?.WriteXml?メソッドを使用して、XMLにデータを保存。
    • DataTable?.ReadXml?メソッドを使用して、DataTable?をロード、
    • DataTable?.Selectメソッドを使えばDBレスでも実装可能である。

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

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

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

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

  • 処理概要
    1. 画面表示時に画面名をキーにして、国際化(多言語化)辞書テーブルの結果セットを取得する。
    2. Control.HasControls?メソッド & Controlsプロパティの再起処理により画面上のコントロールを取得する。
    3. コントロールのID(名前)を取得し、結果セットから対応する国際化(多言語化)辞書レコードを取得。
    4. 上記の国際化(多言語化)辞書レコードから、必要に応じてコントロールのプロパティ(画面に出力する情報)を変更する。
  • 実装方法
    以下は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系メソッドをカスタマイズする。

MVCとの親和性は低い

MVCでは、Web Formsのように、Form上のコントロールを再帰処理できない。
なので、「国際化(多言語化)辞書テーブル」方式が適合しない可能性。


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019-08-02 (金) 16:52:04 (126d)