Pro vývoj webů s vícejazyčným obsahem je nutné často řešit přebírání obsahu z jiného jazyka pro případ, že neexistuje obsah pro danou jazykovou verzi. Sitecore umožňuje převzít obsah z jiné jazykové verze, a to jak na úrovni itemu, tak na úrovni jednotlivých polí. Tato funkce se nazývá Language Fallback. Sitecore obsahuje Language Fallback od verze 8.1.

Zapnutí funkce Language Fallback

Ve výchozím stavu je z výkonnostních důvodů Language Fallback zcela vypnutý. Pro povolení Language Fallback je potřeba vytvořit patch pro změnu atributů enableItemLanguageFallback a enableFieldLanguageFallback pro site shell (Content Editor) a website. Patch je nutné aplikovat na soubor Sitecore.LanguageFallback.config.

<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/" xmlns:set="http://www.sitecore.net/xmlconfig/set/">
	<sitecore>
		<sites>
			<site name="shell" set:enableItemLanguageFallback="true" set:enableFieldLanguageFallback="true" />
			<site name="website" set:enableItemLanguageFallback="true" set:enableFieldLanguageFallback="true" />
		</sites>
	</sitecore>
</configuration>

Pro použití verzovaného fallbacku pro fieldy je nutné ještě povolit v nastavení parametr LanguageFieldFallback.AllowVaryFallbackSettingsPerLanguage.

<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/" xmlns:set="http://www.sitecore.net/xmlconfig/set/">
	<sitecore>
		<settings>
			<setting name="LanguageFieldFallback.AllowVaryFallbackSettingsPerLanguage" value="false" />
		</settings>
	</sitecore>
</configuration>

Jazyková hierarchie

language fallback hierarchyPro správnou funkci Language Fallback je třeba definovat hierarchii podle které budou jazykové verze zpracovávány v případě, že bude aplikován Language Fallback. V /sitecore/system/Languages je třeba na itemu jazyka vybrat v poli Fallback Language jazyk, ze kterého bude obsah přebírán, pokud neexistuje v daném jazyce. Jeden jazyk může mít právě jeden Fallback Language. Vícenásobného fallbacku lze dosáhnout definicí dalšího Fallback Language v nadřízeném jazyce, ze kterého je již fallbackováno. Typicky nejvyšší v hierarchii bude anglický jazyk globálního webu, níže v hierarchii bude anglický jazyk pro Velkou Británii odkazující se na globání anglický jazyk a dále může ještě existovat jazyk pro Irsko, který má jako fallback nastaven jazyk pro Velkou Británii. Pokud nebude existovat jazyková verze obsahu pro Irsko, pak se přebere obsah z jazykové verze Velké Británie a pokud by ani ten neexistoval, použije se verze obsahu z globálního anglického jazyka.

Druhy Language Fallback

Language Fallback je možné použít pro celý item nebo jen pro vybraná pole. Pole mohou navíc být fallbackována jen ve vybraných jazykových verzích.

Item Language Fallback

Language Fallback na úrovni itemu znamená, že v případě, kdy jazyková verze itemu neexistuje pak bude načtena existující jazyková verze z nadřízeného jazyka dle definované hierarchie. Item Language fallback se zapíná pro každou šablonu zvlášť ve __Standard Values pomocí pole Enable Item Fallback v sekci Advanced. Toto nastavení je sdílené, takže se zapne pro všechny jazykové verze najednou. Obdobně lze Item Language Fallback zapnout přímo na konkrétním itemu.

Výběr jazyka na fallbackovaném itemu potom zobrazuje u všech jazyků, které mají fallback definovaný, jako by pro ně existovala jedna jazyková verze. Po otevření jazykové verze, jež neexistuje, je zobrazeno varování oznamující, že verze pro daný jazyk neexistuje a zobrazuje se verze jiného jazyka.LanguageFallback_version

Field Level Fallback

Language Fallback na úrovni jednotlivých fieldů zajišťuje převzetí obsahu pole, které není vyplněno, když jazyková verze existuje. V takovém případě se použije obsah z nadřízené jazykové verze. Field Fallback se zapíná na poli šablony pomocí Enable field level fallback příp. Enable versioned field level fallback. Kde první nastavení je sdílené pro všechny jazykové verze, takže pro pole bez hodnoty bude vždy použit fallback.

LanguageFieldFallback_help

Versioned field level fallback

Pomocí druhého pole je možné použit Language Fallback pro pole jen u jazykových verzích, kde je ve __Standard values tato volba zaškrtnuta. Nicméně tato volba má negativní vliv na výkon, proto je potřeba funkci povolit v konfiguraci. Poté je možné definovat fallback např. jen na jednom poli ve __Standard Values v jazykové mutaci pro Irsko a u verze pro Velkou Británii nechat fallback vypnutý.LanguageFallback_versioned

Tipy

  • Je možné použít oba druhy souběžně na jedné šabloně, ale není to doporučeno.
  • Fallback funguje pouze na pole jež nemají definovanou žádnou hodnotu. Pokud jsme hodnotu vložili a poté ji jen vymazali, pak má pole hodnotu prázdného řetězce a fallback se neprovede. Je potřeba provést reset pole na hodnoty ze __Standard Values pomocí Volby Reset Fields na záložce Versions v Ribbonu.
  • Item lze načíst s uplatněním fallbacku z kódu, aniž by byl povolený pro celou website pomocí přepínačů LanguageFallbackItemSwitcher případně LanguageFallbackFieldSwitcher. To se hodí v případě, kdy máte jen jednu specifickou oblast, kde fallback chcete uplatňovat, ale pro zbytek webu z důvodu výkonu nechcete Language Fallback zapínat.
  • Dictionary itemy mají fallback ve výchozím stavu zapnutý.

Odkazy

Dokumentace Language Fallback