「[[Open棟梁 wiki>https://opentouryo.osscons.jp]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。 -[[戻る>アプリケーション設計のポイント]] *目次 [#s1a14a59] #contents *概要 [#t2436305] リソース ファイルではなく、国際化(多言語化)辞書テーブルを用いてプログラムでコントロールの表示を国際化(多言語化)することもできる。 *詳細 [#m417ea77] **テーブル設計 [#g694e1c1] 国際化(多言語化)辞書テーブルを下記のように設計すると良い。 |ID|画面名|コントロール名|日本語|英語|中国語|・・・|h |1|xxx||あああ|aaa|亜亜亜|・・・| |2|xxx|yyyy|いいい|iii|威威威|・・・| |3|yyy||えええ|eee|獲獲獲|・・・| |4|yyy|zzzz|かかか|kkk|華華華|・・・| **テーブルのストレージ [#yf989f80] スタンドアロンのアプリケーションの場合は、DBとして以下の利用も考えられる。 ***[[SQL Server>https://techinfoofmicrosofttech.osscons.jp/index.php?SQL%20Server%20%E3%81%AE%E3%82%A8%E3%83%87%E3%82%A3%E3%82%B7%E3%83%A7%E3%83%B3#f7a75351]] [#naecfa85] ***XMLファイル [#j78df3cf] -XmlDocument~ 実装も定義も面倒。 -DataTable~ --DataTable.WriteXmlメソッドを使用して、XMLにデータを保存。 --DataTable.ReadXmlメソッドを使用して、DataTableをロード、 --DataTable.Selectメソッドを使えばDBレスでも実装可能である。 --DataTableからレコードを抽出するサンプル~ http://asp35.com/adoDataSet/Chapter2/ch2-09.aspx **国際化(多言語化)する方法 [#y135b8cb] 国際化(多言語化)辞書テーブルをしてコントロールのキャプションを国際化(多言語化)する方式を以下に示す。 ***Form上のコントロールを再帰処理する。 [#ce4d6cc8] ***Web Forms上のコントロールを再帰処理する。 [#ce4d6cc8] この実装は、”Open棟梁”の各レイヤの「[[ベースクラス2]]」(画面コード親クラス2)上に共通処理として実装できる(画面内のコントロールを再帰的に処理する)。 -処理概要 > +画面表示時に画面名をキーにして、国際化(多言語化)辞書テーブルの結果セットを取得する。 +Control.HasControlsメソッド & Controlsプロパティの再起処理により画面上のコントロールを取得する。 +コントロールのID(名前)を取得し、結果セットから対応する国際化(多言語化)辞書レコードを取得。 +上記の国際化(多言語化)辞書レコードから、必要に応じてコントロールのプロパティ(画面に出力する情報)を変更する。 -実装箇所~ 「[[ベースクラス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]]”メソッドなどに実装する。 -実装方法~ 以下は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 ***MVCとの親和性は低い [#n17d5e7e] MVCでは、[[Web Forms]]のように、Form上のControlを再帰処理できない。 MVCでは、Web Formsのように、Form上のコントロールを再帰処理できない。~ なので、「国際化(多言語化)辞書テーブル」方式が適合しない可能性。 -参考 --[[ASP.NET MVCの国際化対応>https://techinfoofmicrosofttech.osscons.jp/index.php?ASP.NET%20MVC%E3%81%AE%E5%9B%BD%E9%9A%9B%E5%8C%96%E5%AF%BE%E5%BF%9C]] IP:202.246.252.97 TIME:"2019-08-02 (金) 16:52:04" 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 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.87 Safari/537.36"