「[[Open棟梁 wiki>https://opentouryo.osscons.jp]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。

-[[戻る>アプリケーション設計のポイント]]

*目次 [#s1a14a59]
#contents

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

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

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

*テーブルのストレージ [#yf989f80]
スタンドアロンのアプリケーションの場合は、DBとして以下の利用も考えられる。

**SQL Compact 、SQL Server Express(共に無償)、 [#naecfa85]
-極小SQL Server Compactでデータベース・アプリをお手軽作成 - @IT~
http://www.atmarkit.co.jp/fdotnet/joyofprogram/20080701devssce/devssce_01.html
-Windows デスクトップ用 Microsoft SQL Server Compact 3.5 Service Pack 2~
http://www.microsoft.com/downloads/ja-jp/details.aspx?FamilyID=e497988a-c93a-404c-b161-3a0b323dce24
-ダウンロード詳細 Microsoft® SQL Server® 2008 R2 SP1 - Express Edition~
http://www.microsoft.com/downloads/ja-jp/details.aspx?familyid=ff38db3d-b0fb-4dad-bcd4-e9a4c509b017

**XMLファイル [#j78df3cf]
***XmlDocument [#g06e00a4]
実装も定義も面倒。

***DataTable [#radaeba8]
-DataTable.WriteXmlメソッドを使用して、XMLにデータを保存。
-DataTable.ReadXmlメソッドを使用して、DataTableをロード、
-DataTable.Selectメソッドを使えばDBレスでも実装可能である。

-DataTableからレコードを抽出するサンプル~
http://asp35.com/adoDataSet/Chapter2/ch2-09.aspx

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

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

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

***実装箇所 [#ub1e7ca3]
「[[ベースクラス2]]」(画面コード親クラス2)上の”[[private void CMN_FormInit(string eventName)>https://github.com/OpenTouryoProject/OpenTouryo/blob/develop/root/programs/CS/Frameworks/Infrastructure/Business/Presentation/MyBaseController.cs#L229]]”メソッドなどに実装する。
「[[ベースクラス2]]」(画面コード親クラス2)上の”[[private void CMN_FormInit(string eventName)>https://github.com/OpenTouryoProject/OpenTouryo/blob/develop/root/programs/CS/Frameworks/Infrastructure/Business/Presentation/MyBaseController.cs#L208]]”メソッドなどに実装する。

***実装方法 [#i7642502]
以下は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する場合は、以下を参照。

-方法: as 演算子と is 演算子を使用して安全にキャストする (C# プログラミング ガイド)~
https://msdn.microsoft.com/ja-jp/library/cc488006.aspx

**カスタム・コントロールで対応する [#k136b56b]
ASP.NETのWeb(System.Web.UI)コントロールのRendre系メソッドをカスタマイズする。

-@IT:.NET TIPS [ASP.NET]国際化対応サイトをプログラムレスで実現するには? - C# VB.NET Webフォーム~
http://www.atmarkit.co.jp/fdotnet/dotnettips/195aspmultilang2/aspmultilang2.html

-.NETコントロールのカスタマイズ方法 - マイクロソフト系技術情報 Wiki~
http://techinfoofmicrosofttech.osscons.jp/index.php?.NET%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%AB%E3%81%AE%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%9E%E3%82%A4%E3%82%BA%E6%96%B9%E6%B3%95

IP:1.73.93.253 TIME:"2018-07-30 (月) 16:42:27" REFERER:"https://opentouryo.osscons.jp/index.php?cmd=edit&page=%E5%9B%BD%E9%9A%9B%E5%8C%96%EF%BC%88%E5%A4%9A%E8%A8%80%E8%AA%9E%E5%8C%96%EF%BC%89%E8%BE%9E%E6%9B%B8%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB" USER_AGENT:"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36"

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS