マルチサイト環境で利用できる言語

多言語のウェブサイトは、多くの言語を持つことができる

グローバル企業では、sitecoreのプロジェクトで何十もの言語を使うことがあります。

ウェブサイトでは、プロジェクトごとに異なる言語セットを使用することが多い

マルチサイト環境のsitecoreに新しいサイトが追加されると、各サイトが独自の言語セットを使用する可能性が高くなります。各サイトが独自の言語セットを使用する可能性が高くなります。その理由としては、一部の国でしか提供されていない商品やサービスのサイトであることや、コンテンツがまだ公開できていないことなどが考えられます。

新しいドメインには設定変更が必要

サービスや製品のWebサイトは独自のドメインを持っていることが多いので、追加のサイト構成、IIS、DNSが必要です。事前に設定を準備して、sitecoreでいくつかの設定を行い、リリースが公開されたときに、新しい言語を許可する設定を公開することができます。

…または、私たちが行ったように、サイト構成をカスタマイズすることもできます。

サイト設定に新しい属性availableLanguagesを追加

サイトの言語が公開されるタイミングを正確にコントロールできるように、構成の調整を選択しました。このために、サイト構成に新しい属性availableLanguagesを追加しました。そのため、新しい言語が公開されたときに、sitecoreから何かを変更して公開する必要はありません。

もちろん、サイトコアはそのような属性を知りませんが、SiteContextを拡張するためのエクステンションメソッドを簡単に追加することができます。

<site name="swissproductsample" patch:before="site[@name='website']"
          hostName="swissproductsample"
          targetHostName="swissproductsample"
          language="en-GB"
          availableLanguages="de-CH,fr-CH"
          rootPath="/sitecore/content/swissproductsample"
          notFoundItem = "page-not-found"
          startItem="/website"
          urlLanguageEmbedding ="always"
          customCache ="true"
          inherits="website"/>

Site Context Decoratorのソースコード

ご覧のコードは、わかりやすくするために簡略化されています。何をしているかというと availableLanguages属性を読み込んで、言語オブジェクトのリストを返します。この方法で、利用可能なすべての言語を簡単に調べることができます。

例えば、1つのドメインで複数の言語のサイトを運営していて、robots.txtファイルを生成したい場合、利用可能なすべての言語を繰り返し処理して、それぞれのsitemap.xmlファイルにリンクを追加することができます。

また、最も一般的な使い方は、言語スイッチャーコンポーネントで、サイト構成で指定された言語のみを許可するようにすることです。

public static List<Language> AvailableLanguages(this SiteContext site)
{
    Assert.IsNotNull(site, "Site cannot be null");
    var result = new List<Language>();
    if (!site.Properties.AllKeys.Contains("availableLanguages"))
    {
        return result;
    }
 
    var availableLanguages = site.Properties["availableLanguages"];
    var languages = availableLanguages.Split(',');
    foreach (var languageName in languages)
    {
        Language language;
        if (Language.TryParse(languageName, out language))
        {
            result.Add(language);
        }
    }
    return result;
}

►►►サービスについて