Это лучшая практика, чтобы попытаться определить, является ли СМИ должны быть версированным раньше времени. Если вы знаете, средства массовой информации будет необходимо версионируются на основе языка, вы должны убедиться, что обновлять в вашем web.config следующий атрибут:
<!--By default, Media items are not versionable and the below setting is set to false in the web.config.
If you upload an image in one language, it will persist across all language versions.
If you change this to true, then versioning will apply and you would have to set the media item into all language versions,
or enable fallback, but if enforce version presence is turned on and media template guids are included in EnforceVersionPresenceTemplates,
then you'll have to make sure all language versions at least exist-->
<setting name="Media.UploadAsVersionableByDefault">
<patch:attribute name="value">true</patch:attribute>
</setting>
Частичный модуль Язык Запасной Alex Shyba будет успешно работать с этим. Я бы рекомендовал не применять присутствие версии на любых медиа-шаблонах (не хочу, чтобы администраторы должны были создавать пустые языковые версии).Затем они могут создавать английские версии, а затем создавать только языковую версию, когда им необходимо переопределить ее.
Вам понадобится, в случае использования частичного возврата языка, чтобы убедиться, что флажки enable fallback отмечены на полях шаблона носителя.
Я также рекомендую обновить медиа-провайдер, чтобы он вставлял язык в URL-адрес носителя, так что кеширование не вступает в игру. EG: если вы создаете PDF с именем Directions.pdf и загружаете его по адресу www.site.com/media/Directions.pdf, при переключении между языками он очень хорошо может кэшировать его. Таким образом, вы хотите обновить медиа-провайдер, чтобы закодировать URL-адрес мультимедиа с помощью языка контекста.
Вы можете посмотреть демо здесь: https://github.com/Verndale-Corp/Sitecore-Fallback-FullDemo
public class CustomMediaProvider : MediaProvider
{
public override string GetMediaUrl(MediaItem item, MediaUrlOptions options)
{
Assert.ArgumentNotNull((object)item, "item");
Assert.ArgumentNotNull((object)options, "options");
string result = base.GetMediaUrl(item, options);
// Added by Verndale, check if language should be embedded
UrlOptions urlOptions = UrlOptions.DefaultOptions;
urlOptions = LanguageHelper.CheckOverrideLanguageEmbedding(urlOptions);
if (urlOptions.LanguageEmbedding == LanguageEmbedding.Always && options.UseItemPath)
{
result = "/" + Sitecore.Context.Language.Name.ToLowerInvariant() + Sitecore.StringUtil.EnsurePrefix('/', result);
}
return result;
}
public static UrlOptions CheckOverrideLanguageEmbedding(UrlOptions urlOptions)
{
var thisSite = Sitecore.Context.Site;
if (urlOptions.Site != null)
thisSite = urlOptions.Site;
if (!String.IsNullOrEmpty(thisSite.SiteInfo.Properties["languageEmbedding"]))
{
if (thisSite.SiteInfo.Properties["languageEmbedding"].ToLower() == "never")
urlOptions.LanguageEmbedding = LanguageEmbedding.Never;
else if (thisSite.SiteInfo.Properties["languageEmbedding"].ToLower() == "always")
urlOptions.LanguageEmbedding = LanguageEmbedding.Always;
else if (thisSite.SiteInfo.Properties["languageEmbedding"].ToLower() == "asneeded")
urlOptions.LanguageEmbedding = LanguageEmbedding.AsNeeded;
}
return urlOptions;
}
}
Спасибо Ричард, я буду тестировать его и вернусь к вам .. – user166013
Запасной код для медиа-библиотеки работает отлично. Спасибо Richard :) – user166013
Привет, Ричард, на моей локальной машине, когда я запускал код, я не получал никаких ошибок при открытии PDF-файла (на моей локальной машине обычно для элементов медиабиблиотеки необходимые изображения не отображаются, поэтому предполагается, что резервное копирование работая), но когда код был развернут на стадии, я начал получать 404 страницы не найден. при проверке как на английском, так и на немецком языке есть один и тот же URL-адрес PDF, но PDF открывается на английском языке не на немецком языке. вы уверены, что резервные работы для элементов медиабиблиотеки? – user166013