私は、ASP.NET Webforms(.NET 4.5、C#)アプリケーションで複数の言語を処理しようとしています。.NETクラスの多言語プロパティを自動処理する
基本的に、SQL Server 2012データベースのエンティティの一部は、Name
またはDescription
のようなプロパティ(ドイツ語、フランス語、イタリア語)があります。
これらは列Name_De
(ドイツ語)、Name_Fr
(フランス語)、Name_It
(イタリア語)として保存されています。
データベースから.NETオブジェクトを作成すると、もちろん、私のエンティティクラスにも3つのプロパティがあります。しかし、例えばグリッドで画面に表示するには、何らかの形で「魔法のように」常に「正しい」言語を表示できるといいでしょう。これは、Thread.Current.CurrentUICulture.TwoLetterISOLanguageName
(ブラウザの言語設定に応じて、de
,fr
またはit
を返します)に基づいている必要があります。
私は何とかして、別のファイルに
public partial class Module
{
[Multilingual]
public string Name { get; set; }
}
を
public partial class Module
{
public string ModuleCode { get; set; }
public string Name_De { get; set; }
public string Name_Fr { get; set; }
public string Name_It { get; set; }
... // other properties
}
部分拡張子: - 既存のSQL Serverデータベースから生成
ベース「モジュールの」エンティティ:私はこのような何かを行うことができるようになる.NET属性
基本的な考え方は次のとおりです。Module.Name
プロパティにアクセスでき、現在の設定CurrentUICulture
に応じて、Name_De
,Name_Fr
またはName_It
のいずれかの値が取得されます.wh ja Name
プロパティのゲッターにアクセスします。
C#でこれを行うことはできますか?私は多くのカスタム属性の実装を見てきましたが、これまで何もしていないようでした...
ありがとう - 確かに私はこれを行うことができます - しかし、いくつかのクラスでこれを行うと、各クラスのプロパティの最大3つのグループはあまりにも退屈なようです。そして、はい - 私はその属性でリフレクションを使用することを考えていました。 'Name'プロパティにアタッチされているので、' Name_De'プロパティなどを探して「正しい」値を返します。しかし、私は 'Attribute'の適切な基底クラスが見つからないので、そのプロパティのゲッタが呼び出されたときに何らかの通知を受けることができます.... –
実際には、これらは2つの別々のファイルですが、どちらも' public C#コンパイラはこれらをまとめて1つのエンティティにまとめます。 –
これは確かに面倒です。カスタムアトリビュートはプロパティの上部にあるメタデータなので、 'Object.Name'を実行することができず、そのカスタムアトリビュートコードを呼び出すことができます。オートマトンなしでこれを行う別の方法を試してみよう –