diff --git a/src/Umbraco.Core/Extensions/PublishedElementExtensions.cs b/src/Umbraco.Core/Extensions/PublishedElementExtensions.cs
index c85178c85c..440962cd76 100644
--- a/src/Umbraco.Core/Extensions/PublishedElementExtensions.cs
+++ b/src/Umbraco.Core/Extensions/PublishedElementExtensions.cs
@@ -134,6 +134,27 @@ public static class PublishedElementExtensions
#endregion
+ #region CheckVariation
+ ///
+ /// Method to check if VariationContext culture differs from culture parameter, if so it will update the VariationContext for the PublishedValueFallback.
+ ///
+ /// The requested PublishedValueFallback.
+ /// The requested culture.
+ /// The requested segment.
+ ///
+ private static void EventuallyUpdateVariationContext(IPublishedValueFallback publishedValueFallback, string? culture, string? segment)
+ {
+ IVariationContextAccessor? variationContextAccessor = publishedValueFallback.VariationContextAccessor;
+
+ //If there is a difference in requested culture and the culture that is set in the VariationContext, it will pick wrong localized content.
+ //This happens for example using links to localized content in a RichText Editor.
+ if (!string.IsNullOrEmpty(culture) && variationContextAccessor?.VariationContext?.Culture != culture)
+ {
+ variationContextAccessor!.VariationContext = new VariationContext(culture, segment);
+ }
+ }
+ #endregion
+
#region Value
///
@@ -174,6 +195,8 @@ public static class PublishedElementExtensions
{
IPublishedProperty? property = content.GetProperty(alias);
+ EventuallyUpdateVariationContext(publishedValueFallback, culture, segment);
+
// if we have a property, and it has a value, return that value
if (property != null && property.HasValue(culture, segment))
{
diff --git a/src/Umbraco.Core/Models/PublishedContent/IPublishedValueFallback.cs b/src/Umbraco.Core/Models/PublishedContent/IPublishedValueFallback.cs
index 729f7dd6bc..111d747ec1 100644
--- a/src/Umbraco.Core/Models/PublishedContent/IPublishedValueFallback.cs
+++ b/src/Umbraco.Core/Models/PublishedContent/IPublishedValueFallback.cs
@@ -5,6 +5,11 @@ namespace Umbraco.Cms.Core.Models.PublishedContent;
///
public interface IPublishedValueFallback
{
+ ///
+ /// VariationContextAccessor that is not required to be implemented, therefore throws NotImplementedException as default.
+ ///
+ IVariationContextAccessor VariationContextAccessor { get { throw new NotImplementedException(); } set { throw new NotImplementedException(); } }
+
///
/// Tries to get a fallback value for a property.
///
diff --git a/src/Umbraco.Core/Models/PublishedContent/PublishedValueFallback.cs b/src/Umbraco.Core/Models/PublishedContent/PublishedValueFallback.cs
index 0e43a2617f..1d4c512f78 100644
--- a/src/Umbraco.Core/Models/PublishedContent/PublishedValueFallback.cs
+++ b/src/Umbraco.Core/Models/PublishedContent/PublishedValueFallback.cs
@@ -20,6 +20,8 @@ public class PublishedValueFallback : IPublishedValueFallback
_variationContextAccessor = variationContextAccessor;
}
+ public IVariationContextAccessor VariationContextAccessor { get { return _variationContextAccessor; } }
+
///
public bool TryGetValue(IPublishedProperty property, string? culture, string? segment, Fallback fallback, object? defaultValue, out object? value) =>
TryGetValue