これを達成する方法はたくさんあります。使用しているデータベーステクノロジについて言及していないので、私の例はEntityFrameworkを使用しています。これを自分の状況に合わせてカスタマイズする必要があるかもしれません。
LinqToSqlまたは他のORMでも同様のことが可能かもしれません。他のものを完全に使用している場合、重要なのは、変換を行う一貫性のあるもの(したがってインターフェイス)を渡す中央クラスを持つことです。
たとえば、Entity Frameworkを使用している場合、これら2つのフィールドを持つデータベース内のすべてのテーブルに、これらのフィールドを公開するインターフェイスを追加します。次に、そのインターフェイスを持つエンティティを取得し、現在のローカリゼーションをチェックして正しいバージョンのテキストを返すメソッドを持つヘルパークラスがあります。
public interface IBilingualEntity
{
// Defines a consistent interface that indicates which language version
// each thing is in.
string Ar_Name { get; }
string En_Name { get; }
}
public partial MyEntity : IBilingualEntity
{
// This is a class generate by Entity Framework. But it could
// be anything really if you are using some other framework.
//
// Nothing to do here as the other side of the partial
// should already implement the interface with the code
// generated from Entity Framework. If not, implement the
// interface and return the correct language version in
// the property.
}
// This is the helper that works out which language version to use.
public class BilingualHelper
{
public string GetName(IBilingualEntity entity)
{
// NOTE: You may have to strip away the region part of the name
// but off the top of my head I can't remember the format.
// If you are using something else to store the culture you'll
// have to reference that instead.
var cultureName = Thread.CurrentThread.CurrentUICulture.Name;
if (cultureName == "ar")
return entity.Ar_Name;
return entity.En_Name;
}
}