「[[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#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