0

データベースからコンテンツの一部を読み取るWebサイトがあります。このWebサイトは、英語とアラビア語の両方の言語で必要です。

必要なコンテンツは、両方の言語でデータベースに複製されます。データベースにEn_Name列とAr_Name列があるとします。

たとえば、アラビア語版のWebサイトの場合、リンクにはAr_Nameからのテキストが表示され、英語版ではEn_Nameからのテキストが表示されます。

私のWebサイトの静的コンテンツについては、(。resxファイル)を使用してASP.NETのデフォルトのローカリゼーションを使用することをお勧めします。しかし、私が知らないのは、Webサイトの動的セクションのローカリゼーションを行う方法です。

では、ユーザーの選択(ローカリゼーション)に基づいて、同じハイパーリンクをAr_Nameフィールドから一度読み取り、次にEn_Nameから読み取るにはどうすればよいですか?

4

1 に答える 1

0

これを達成する方法はたくさんあります。使用しているデータベーステクノロジについて言及していないので、私の例は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;
    }
}
于 2013-02-28T10:00:49.897 に答える