diff --git a/src/Umbraco.Core/Models/PublishedContent/IPublishedContent.cs b/src/Umbraco.Core/Models/PublishedContent/IPublishedContent.cs
index d38c8eb721..95b943d751 100644
--- a/src/Umbraco.Core/Models/PublishedContent/IPublishedContent.cs
+++ b/src/Umbraco.Core/Models/PublishedContent/IPublishedContent.cs
@@ -29,11 +29,9 @@ namespace Umbraco.Core.Models.PublishedContent
///
/// Gets the name of the content item.
///
- ///
- /// The value of this property is contextual. When the content type is multi-lingual,
- /// this is the name for the 'current' culture. Otherwise, it is the invariant name.
- ///
- string Name { get; }
+ /// The specific culture to filter for. If null is used the current culture is used. (Default is null)
+ /// The name of the content.
+ string Name(string culture = null);
///
/// Gets the url segment of the content item.
diff --git a/src/Umbraco.Core/Models/PublishedContent/PublishedContentWrapped.cs b/src/Umbraco.Core/Models/PublishedContent/PublishedContentWrapped.cs
index 7f3f38f629..753f75c3cb 100644
--- a/src/Umbraco.Core/Models/PublishedContent/PublishedContentWrapped.cs
+++ b/src/Umbraco.Core/Models/PublishedContent/PublishedContentWrapped.cs
@@ -58,7 +58,7 @@ namespace Umbraco.Core.Models.PublishedContent
public virtual int Id => _content.Id;
///
- public virtual string Name => _content.Name;
+ public virtual string Name(string culture = null) => _content.Name(culture);
///
public virtual string UrlSegment => _content.UrlSegment;
diff --git a/src/Umbraco.Core/Models/PublishedContent/PublishedCultureInfos.cs b/src/Umbraco.Core/Models/PublishedContent/PublishedCultureInfos.cs
index 749b37a41a..9c5977e8a6 100644
--- a/src/Umbraco.Core/Models/PublishedContent/PublishedCultureInfos.cs
+++ b/src/Umbraco.Core/Models/PublishedContent/PublishedCultureInfos.cs
@@ -30,7 +30,7 @@ namespace Umbraco.Core.Models.PublishedContent
///
/// Gets the name of the item.
///
- public string Name { get; }
+ internal string Name { get; }
///
/// Gets the url segment of the item.
diff --git a/src/Umbraco.Tests/Cache/PublishedCache/PublishedMediaCacheTests.cs b/src/Umbraco.Tests/Cache/PublishedCache/PublishedMediaCacheTests.cs
index 08eeb8ef4d..8dd5cf3890 100644
--- a/src/Umbraco.Tests/Cache/PublishedCache/PublishedMediaCacheTests.cs
+++ b/src/Umbraco.Tests/Cache/PublishedCache/PublishedMediaCacheTests.cs
@@ -108,7 +108,7 @@ namespace Umbraco.Tests.Cache.PublishedCache
Assert.AreEqual(mRoot.ContentType.Alias, publishedMedia.ContentType.Alias);
Assert.AreEqual(mRoot.ContentType.Id, publishedMedia.ContentType.Id);
Assert.AreEqual(mRoot.Level, publishedMedia.Level);
- Assert.AreEqual(mRoot.Name, publishedMedia.Name);
+ Assert.AreEqual(mRoot.Name, publishedMedia.Name());
Assert.AreEqual(mRoot.Path, publishedMedia.Path);
Assert.AreEqual(mRoot.SortOrder, publishedMedia.SortOrder);
Assert.IsNull(publishedMedia.Parent);
diff --git a/src/Umbraco.Tests/LegacyXmlPublishedCache/DictionaryPublishedContent.cs b/src/Umbraco.Tests/LegacyXmlPublishedCache/DictionaryPublishedContent.cs
index e472de85dd..c6c16a2466 100644
--- a/src/Umbraco.Tests/LegacyXmlPublishedCache/DictionaryPublishedContent.cs
+++ b/src/Umbraco.Tests/LegacyXmlPublishedCache/DictionaryPublishedContent.cs
@@ -156,7 +156,7 @@ namespace Umbraco.Tests.LegacyXmlPublishedCache
public override int SortOrder => _sortOrder;
- public override string Name => _name;
+ public override string Name(string culture = null) => _name;
public override PublishedCultureInfo GetCulture(string culture = null) => null;
diff --git a/src/Umbraco.Tests/LegacyXmlPublishedCache/XmlPublishedContent.cs b/src/Umbraco.Tests/LegacyXmlPublishedCache/XmlPublishedContent.cs
index 43c47ec569..c547512ba8 100644
--- a/src/Umbraco.Tests/LegacyXmlPublishedCache/XmlPublishedContent.cs
+++ b/src/Umbraco.Tests/LegacyXmlPublishedCache/XmlPublishedContent.cs
@@ -138,13 +138,10 @@ namespace Umbraco.Tests.LegacyXmlPublishedCache
}
}
- public override string Name
+ public override string Name(string culture = null)
{
- get
- {
- EnsureNodeInitialized();
- return _name;
- }
+ EnsureNodeInitialized();
+ return _name;
}
public override PublishedCultureInfo GetCulture(string culture = null) => null;
diff --git a/src/Umbraco.Tests/Published/NestedContentTests.cs b/src/Umbraco.Tests/Published/NestedContentTests.cs
index 09c63dcf06..35288c1f75 100644
--- a/src/Umbraco.Tests/Published/NestedContentTests.cs
+++ b/src/Umbraco.Tests/Published/NestedContentTests.cs
@@ -284,7 +284,7 @@ namespace Umbraco.Tests.Published
public override int Id { get; }
public override int? TemplateId { get; }
public override int SortOrder { get; }
- public override string Name { get; }
+ public override string Name(string culture = null) => default;
public override PublishedCultureInfo GetCulture(string culture = ".") => throw new NotSupportedException();
public override IReadOnlyDictionary Cultures => throw new NotSupportedException();
public override string UrlSegment { get; }
diff --git a/src/Umbraco.Tests/PublishedContent/NuCacheTests.cs b/src/Umbraco.Tests/PublishedContent/NuCacheTests.cs
index ad2b0220bb..89c2458f18 100644
--- a/src/Umbraco.Tests/PublishedContent/NuCacheTests.cs
+++ b/src/Umbraco.Tests/PublishedContent/NuCacheTests.cs
@@ -202,35 +202,33 @@ namespace Umbraco.Tests.PublishedContent
var publishedContent = snapshot.Content.GetById(1);
Assert.IsNotNull(publishedContent);
- Assert.AreEqual("It Works1!", publishedContent.Name);
Assert.AreEqual("val1", publishedContent.Value("prop"));
Assert.AreEqual("val-fr1", publishedContent.Value("prop", "fr-FR"));
Assert.AreEqual("val-uk1", publishedContent.Value("prop", "en-UK"));
- Assert.AreEqual("name-fr1", publishedContent.GetCulture("fr-FR").Name);
- Assert.AreEqual("name-uk1", publishedContent.GetCulture("en-UK").Name);
+ Assert.IsNull(publishedContent.Name()); // no invariant name for varying content
+ Assert.AreEqual("name-fr1", publishedContent.Name("fr-FR"));
+ Assert.AreEqual("name-uk1", publishedContent.Name("en-UK"));
var draftContent = snapshot.Content.GetById(true, 1);
- Assert.AreEqual("It Works2!", draftContent.Name);
Assert.AreEqual("val2", draftContent.Value("prop"));
Assert.AreEqual("val-fr2", draftContent.Value("prop", "fr-FR"));
Assert.AreEqual("val-uk2", draftContent.Value("prop", "en-UK"));
- Assert.AreEqual("name-fr2", draftContent.GetCulture("fr-FR").Name);
- Assert.AreEqual("name-uk2", draftContent.GetCulture("en-UK").Name);
+ Assert.IsNull(draftContent.Name()); // no invariant name for varying content
+ Assert.AreEqual("name-fr2", draftContent.Name("fr-FR"));
+ Assert.AreEqual("name-uk2", draftContent.Name("en-UK"));
// now french is default
_variationAccesor.VariationContext = new VariationContext("fr-FR");
Assert.AreEqual("val-fr1", publishedContent.Value("prop"));
- Assert.AreEqual("name-fr1", publishedContent.GetCulture().Name);
- Assert.AreEqual("name-fr1", publishedContent.Name);
+ Assert.AreEqual("name-fr1", publishedContent.Name());
Assert.AreEqual(new DateTime(2018, 01, 01, 01, 00, 00), publishedContent.GetCulture().Date);
// now uk is default
_variationAccesor.VariationContext = new VariationContext("en-UK");
Assert.AreEqual("val-uk1", publishedContent.Value("prop"));
- Assert.AreEqual("name-uk1", publishedContent.GetCulture().Name);
- Assert.AreEqual("name-uk1", publishedContent.Name);
+ Assert.AreEqual("name-uk1", publishedContent.Name());
Assert.AreEqual(new DateTime(2018, 01, 02, 01, 00, 00), publishedContent.GetCulture().Date);
// invariant needs to be retrieved explicitly, when it's not default
@@ -251,7 +249,7 @@ namespace Umbraco.Tests.PublishedContent
Assert.AreEqual(ContentVariation.Nothing, againContent.ContentType.GetPropertyType("prop").Variations);
// now, "no culture" means "invariant"
- Assert.AreEqual("It Works1!", againContent.Name);
+ Assert.IsNull(againContent.Name()); // no invariant name for varying content
Assert.AreEqual("val1", againContent.Value("prop"));
}
diff --git a/src/Umbraco.Tests/PublishedContent/PublishedContentDataTableTests.cs b/src/Umbraco.Tests/PublishedContent/PublishedContentDataTableTests.cs
index 74b9619845..220909e237 100644
--- a/src/Umbraco.Tests/PublishedContent/PublishedContentDataTableTests.cs
+++ b/src/Umbraco.Tests/PublishedContent/PublishedContentDataTableTests.cs
@@ -140,7 +140,6 @@ namespace Umbraco.Tests.PublishedContent
UpdateDate = DateTime.Now,
Path = "-1,3",
UrlSegment = "home-page",
- Name = "Page" + Guid.NewGuid().ToString(),
Version = Guid.NewGuid(),
WriterId = 1,
WriterName = "Shannon",
@@ -148,6 +147,7 @@ namespace Umbraco.Tests.PublishedContent
Level = 1,
Children = new List()
};
+ d.SetName("Page" + Guid.NewGuid());
d.Properties = new Collection(new List
{
new RawValueProperty(factory.CreatePropertyType("property1", 1), d, "value" + indexVals),
@@ -183,6 +183,8 @@ namespace Umbraco.Tests.PublishedContent
// l8tr...
private class TestPublishedContent : IPublishedContent
{
+ private readonly Dictionary _names = new Dictionary();
+
public string Url { get; set; }
public string GetUrl(string culture = null) => throw new NotSupportedException();
@@ -203,7 +205,8 @@ namespace Umbraco.Tests.PublishedContent
public Guid Key { get; set; }
public int? TemplateId { get; set; }
public int SortOrder { get; set; }
- public string Name { get; set; }
+ public string Name(string culture = null) => _names.TryGetValue(culture ?? "", out var name) ? name : null;
+ public void SetName(string name, string culture = null) => _names[culture ?? ""] = name;
public PublishedCultureInfo GetCulture(string culture = null) => throw new NotSupportedException();
public IReadOnlyDictionary Cultures => throw new NotSupportedException();
public string UrlSegment { get; set; }
diff --git a/src/Umbraco.Tests/PublishedContent/PublishedContentLanguageVariantTests.cs b/src/Umbraco.Tests/PublishedContent/PublishedContentLanguageVariantTests.cs
index 5c28b98de7..9cec962a38 100644
--- a/src/Umbraco.Tests/PublishedContent/PublishedContentLanguageVariantTests.cs
+++ b/src/Umbraco.Tests/PublishedContent/PublishedContentLanguageVariantTests.cs
@@ -122,7 +122,6 @@ namespace Umbraco.Tests.PublishedContent
{
Id = 1,
SortOrder = 0,
- Name = "Content 1",
UrlSegment = "content-1",
Path = "/1",
Level = 1,
@@ -134,12 +133,12 @@ namespace Umbraco.Tests.PublishedContent
prop1, prop2, noprop
}
};
+ item1.SetName("Content 1");
var item2 = new SolidPublishedContent(contentType1)
{
Id = 2,
SortOrder = 0,
- Name = "Content 2",
UrlSegment = "content-2",
Path = "/1/2",
Level = 2,
@@ -151,6 +150,7 @@ namespace Umbraco.Tests.PublishedContent
prop3
}
};
+ item2.SetName("Content 2");
var prop4 = new SolidPublishedPropertyWithLanguageVariants
{
@@ -164,7 +164,6 @@ namespace Umbraco.Tests.PublishedContent
{
Id = 3,
SortOrder = 0,
- Name = "Content 3",
UrlSegment = "content-3",
Path = "/1/2/3",
Level = 3,
@@ -176,6 +175,7 @@ namespace Umbraco.Tests.PublishedContent
prop4
}
};
+ item3.SetName("Content 3");
item1.Children = new List { item2 };
item2.Parent = item1;
diff --git a/src/Umbraco.Tests/PublishedContent/PublishedContentMoreTests.cs b/src/Umbraco.Tests/PublishedContent/PublishedContentMoreTests.cs
index 48ad4aa464..ffe88f5d13 100644
--- a/src/Umbraco.Tests/PublishedContent/PublishedContentMoreTests.cs
+++ b/src/Umbraco.Tests/PublishedContent/PublishedContentMoreTests.cs
@@ -25,11 +25,10 @@ namespace Umbraco.Tests.PublishedContent
var contentType2 = factory.CreateContentType(2, "ContentType2", Enumerable.Empty(), CreatePropertyTypes);
var contentType2Sub = factory.CreateContentType(3, "ContentType2Sub", Enumerable.Empty(), CreatePropertyTypes);
- cache.Add(new SolidPublishedContent(contentType1)
+ var content = new SolidPublishedContent(contentType1)
{
Id = 1,
SortOrder = 0,
- Name = "Content 1",
UrlSegment = "content-1",
Path = "/1",
Level = 1,
@@ -37,22 +36,23 @@ namespace Umbraco.Tests.PublishedContent
ParentId = -1,
ChildIds = new int[] { },
Properties = new Collection
+ {
+ new SolidPublishedProperty
{
- new SolidPublishedProperty
- {
- Alias = "prop1",
- SolidHasValue = true,
- SolidValue = 1234,
- SolidSourceValue = "1234"
- }
+ Alias = "prop1",
+ SolidHasValue = true,
+ SolidValue = 1234,
+ SolidSourceValue = "1234"
}
- });
+ }
+ };
+ content.SetName("Content 1");
+ cache.Add(content);
- cache.Add(new SolidPublishedContent(contentType2)
+ content = new SolidPublishedContent(contentType2)
{
Id = 2,
SortOrder = 1,
- Name = "Content 2",
UrlSegment = "content-2",
Path = "/2",
Level = 1,
@@ -60,22 +60,23 @@ namespace Umbraco.Tests.PublishedContent
ParentId = -1,
ChildIds = new int[] { },
Properties = new Collection
+ {
+ new SolidPublishedProperty
{
- new SolidPublishedProperty
- {
- Alias = "prop1",
- SolidHasValue = true,
- SolidValue = 1234,
- SolidSourceValue = "1234"
- }
+ Alias = "prop1",
+ SolidHasValue = true,
+ SolidValue = 1234,
+ SolidSourceValue = "1234"
}
- });
+ }
+ };
+ content.SetName("Content 2");
+ cache.Add(content);
- cache.Add(new SolidPublishedContent(contentType2Sub)
+ content = new SolidPublishedContent(contentType2Sub)
{
Id = 3,
SortOrder = 2,
- Name = "Content 2Sub",
UrlSegment = "content-2sub",
Path = "/3",
Level = 1,
@@ -92,14 +93,16 @@ namespace Umbraco.Tests.PublishedContent
SolidSourceValue = "1234"
}
}
- });
+ };
+ content.SetName("Content 2Sub");
+ cache.Add(content);
}
[Test]
public void First()
{
var content = Current.UmbracoContext.ContentCache.GetAtRoot().First();
- Assert.AreEqual("Content 1", content.Name);
+ Assert.AreEqual("Content 1", content.Name());
}
[Test]
@@ -111,17 +114,17 @@ namespace Umbraco.Tests.PublishedContent
.ToIndexedArray();
var item = items[0];
- Assert.AreEqual("Content 1", item.Content.Name);
+ Assert.AreEqual("Content 1", item.Content.Name());
Assert.IsTrue(item.IsFirst());
Assert.IsFalse(item.IsLast());
item = items[1];
- Assert.AreEqual("Content 2", item.Content.Name);
+ Assert.AreEqual("Content 2", item.Content.Name());
Assert.IsFalse(item.IsFirst());
Assert.IsFalse(item.IsLast());
item = items[2];
- Assert.AreEqual("Content 2Sub", item.Content.Name);
+ Assert.AreEqual("Content 2Sub", item.Content.Name());
Assert.IsFalse(item.IsFirst());
Assert.IsTrue(item.IsLast());
}
@@ -154,7 +157,7 @@ namespace Umbraco.Tests.PublishedContent
var content = Current.UmbracoContext.ContentCache.GetAtRoot()
.OfType()
.First(x => x.Prop1 == 1234);
- Assert.AreEqual("Content 2", content.Name);
+ Assert.AreEqual("Content 2", content.Name());
Assert.AreEqual(1234, content.Prop1);
}
diff --git a/src/Umbraco.Tests/PublishedContent/PublishedMediaTests.cs b/src/Umbraco.Tests/PublishedContent/PublishedMediaTests.cs
index f801d02c5b..b789eb0ef8 100644
--- a/src/Umbraco.Tests/PublishedContent/PublishedMediaTests.cs
+++ b/src/Umbraco.Tests/PublishedContent/PublishedMediaTests.cs
@@ -495,7 +495,7 @@ namespace Umbraco.Tests.PublishedContent
Assert.AreEqual(nodeId, converted.Id);
Assert.AreEqual(3, converted.Level);
Assert.AreEqual(1, converted.SortOrder);
- Assert.AreEqual("Sam's Umbraco Image", converted.Name);
+ Assert.AreEqual("Sam's Umbraco Image", converted.Name());
Assert.AreEqual("-1,1111,2222,2112", converted.Path);
}
diff --git a/src/Umbraco.Tests/PublishedContent/PublishedRouterTests.cs b/src/Umbraco.Tests/PublishedContent/PublishedRouterTests.cs
index d8dbabb569..19944a2cd4 100644
--- a/src/Umbraco.Tests/PublishedContent/PublishedRouterTests.cs
+++ b/src/Umbraco.Tests/PublishedContent/PublishedRouterTests.cs
@@ -58,7 +58,7 @@ namespace Umbraco.Tests.PublishedContent
{
var pc = new Mock();
pc.Setup(content => content.Id).Returns(1);
- pc.Setup(content => content.Name).Returns("test");
+ pc.Setup(content => content.Name(It.IsAny())).Returns("test");
pc.Setup(content => content.WriterName).Returns("admin");
pc.Setup(content => content.CreatorName).Returns("admin");
pc.Setup(content => content.CreateDate).Returns(DateTime.Now);
diff --git a/src/Umbraco.Tests/PublishedContent/SolidPublishedSnapshot.cs b/src/Umbraco.Tests/PublishedContent/SolidPublishedSnapshot.cs
index f7d016f725..a25faea07a 100644
--- a/src/Umbraco.Tests/PublishedContent/SolidPublishedSnapshot.cs
+++ b/src/Umbraco.Tests/PublishedContent/SolidPublishedSnapshot.cs
@@ -153,8 +153,10 @@ namespace Umbraco.Tests.PublishedContent
}
}
- class SolidPublishedContent : IPublishedContent
+ internal class SolidPublishedContent : IPublishedContent
{
+ private readonly Dictionary _names = new Dictionary();
+
#region Constructor
public SolidPublishedContent(IPublishedContentType contentType)
@@ -177,7 +179,8 @@ namespace Umbraco.Tests.PublishedContent
public Guid Key { get; set; }
public int? TemplateId { get; set; }
public int SortOrder { get; set; }
- public string Name { get; set; }
+ public string Name(string culture = null) => _names.TryGetValue(culture ?? "", out var name) ? name : null;
+ public void SetName(string name, string culture = null) => _names[culture ?? ""] = name;
public PublishedCultureInfo GetCulture(string culture = null) => throw new NotSupportedException();
public IReadOnlyDictionary Cultures => throw new NotSupportedException();
public string UrlSegment { get; set; }
diff --git a/src/Umbraco.Tests/Runtimes/StandaloneTests.cs b/src/Umbraco.Tests/Runtimes/StandaloneTests.cs
index 0f99b6b884..e07ae576e6 100644
--- a/src/Umbraco.Tests/Runtimes/StandaloneTests.cs
+++ b/src/Umbraco.Tests/Runtimes/StandaloneTests.cs
@@ -190,7 +190,7 @@ namespace Umbraco.Tests.Runtimes
// but a draft document
pcontent = umbracoContext.ContentCache.GetById(true, content.Id);
Assert.IsNotNull(pcontent);
- Assert.AreEqual("test", pcontent.Name);
+ Assert.AreEqual("test", pcontent.Name());
Assert.IsTrue(pcontent.IsDraft());
// no published url
@@ -204,7 +204,7 @@ namespace Umbraco.Tests.Runtimes
// assert that snapshot has been updated and there is now a published document
pcontent = umbracoContext.ContentCache.GetById(content.Id);
Assert.IsNotNull(pcontent);
- Assert.AreEqual("test", pcontent.Name);
+ Assert.AreEqual("test", pcontent.Name());
Assert.IsFalse(pcontent.IsDraft());
// but the url is the published one - no draft url
@@ -213,7 +213,7 @@ namespace Umbraco.Tests.Runtimes
// and also an updated draft document
pcontent = umbracoContext.ContentCache.GetById(true, content.Id);
Assert.IsNotNull(pcontent);
- Assert.AreEqual("testx", pcontent.Name);
+ Assert.AreEqual("testx", pcontent.Name());
Assert.IsTrue(pcontent.IsDraft());
// and the published document has a url
diff --git a/src/Umbraco.Tests/Scoping/ScopedNuCacheTests.cs b/src/Umbraco.Tests/Scoping/ScopedNuCacheTests.cs
index 1dcc928141..f0efffc2cc 100644
--- a/src/Umbraco.Tests/Scoping/ScopedNuCacheTests.cs
+++ b/src/Umbraco.Tests/Scoping/ScopedNuCacheTests.cs
@@ -152,7 +152,7 @@ namespace Umbraco.Tests.Scoping
// during events, due to LiveSnapshot, we see the changes
Assert.IsNotNull(e);
- Assert.AreEqual("changed", e.Name);
+ Assert.AreEqual("changed", e.Name());
};
using (var scope = ScopeProvider.CreateScope())
@@ -164,7 +164,7 @@ namespace Umbraco.Tests.Scoping
// been created
var x = umbracoContext.ContentCache.GetById(item.Id);
Assert.IsNotNull(x);
- Assert.AreEqual("name", x.Name);
+ Assert.AreEqual("name", x.Name());
ContentService.Published += OnPublishedAssert;
@@ -186,7 +186,7 @@ namespace Umbraco.Tests.Scoping
// else changes have been rolled back
x = umbracoContext.ContentCache.GetById(item.Id);
Assert.IsNotNull(x);
- Assert.AreEqual(complete ? "changed" : "name", x.Name);
+ Assert.AreEqual(complete ? "changed" : "name", x.Name());
}
}
}
diff --git a/src/Umbraco.Tests/TestHelpers/Stubs/TestPublishedContent.cs b/src/Umbraco.Tests/TestHelpers/Stubs/TestPublishedContent.cs
index 206660b904..81319a619c 100644
--- a/src/Umbraco.Tests/TestHelpers/Stubs/TestPublishedContent.cs
+++ b/src/Umbraco.Tests/TestHelpers/Stubs/TestPublishedContent.cs
@@ -7,6 +7,8 @@ namespace Umbraco.Tests.TestHelpers.Stubs
{
internal class TestPublishedContent : PublishedElement, IPublishedContent
{
+ private readonly Dictionary _names = new Dictionary();
+
public TestPublishedContent(IPublishedContentType contentType, int id, Guid key, Dictionary values, bool previewing, Dictionary cultures = null)
: base(contentType, key, values, previewing)
{
@@ -17,7 +19,8 @@ namespace Umbraco.Tests.TestHelpers.Stubs
public int Id { get; }
public int? TemplateId { get; set; }
public int SortOrder { get; set; }
- public string Name { get; set; }
+ public string Name(string culture = null) => _names.TryGetValue(culture ?? "", out var name) ? name : null;
+ public void SetName(string name, string culture = null) => _names[culture ?? ""] = name;
public IVariationContextAccessor VariationContextAccessor { get; set; }
public PublishedCultureInfo GetCulture(string culture = null)
{
diff --git a/src/Umbraco.Web/Editors/TemplateQueryController.cs b/src/Umbraco.Web/Editors/TemplateQueryController.cs
index ed737e7749..b252f51fae 100644
--- a/src/Umbraco.Web/Editors/TemplateQueryController.cs
+++ b/src/Umbraco.Web/Editors/TemplateQueryController.cs
@@ -71,7 +71,7 @@ namespace Umbraco.Web.Editors
QueryExpression = queryExpression.ToString(),
ResultCount = results.Count,
ExecutionTime = timer.ElapsedMilliseconds,
- SampleResults = results.Take(20).Select(x => new TemplateQueryResult { Icon = "icon-file", Name = x.Name })
+ SampleResults = results.Take(20).Select(x => new TemplateQueryResult { Icon = "icon-file", Name = x.Name() })
};
}
@@ -186,12 +186,12 @@ namespace Umbraco.Web.Editors
: contents.OrderByDescending(x => x.UpdateDate);
case "name":
return sortExpression.Direction == "ascending"
- ? contents.OrderBy(x => x.Name)
- : contents.OrderByDescending(x => x.Name);
+ ? contents.OrderBy(x => x.Name())
+ : contents.OrderByDescending(x => x.Name());
default:
return sortExpression.Direction == "ascending"
- ? contents.OrderBy(x => x.Name)
- : contents.OrderByDescending(x => x.Name);
+ ? contents.OrderBy(x => x.Name())
+ : contents.OrderByDescending(x => x.Name());
}
}
diff --git a/src/Umbraco.Web/Macros/PublishedContentHashtableConverter.cs b/src/Umbraco.Web/Macros/PublishedContentHashtableConverter.cs
index 978bbbcecb..f516aca080 100644
--- a/src/Umbraco.Web/Macros/PublishedContentHashtableConverter.cs
+++ b/src/Umbraco.Web/Macros/PublishedContentHashtableConverter.cs
@@ -35,7 +35,7 @@ namespace Umbraco.Web.Macros
throw new ArgumentException("Document request has no node.", nameof(frequest));
PopulatePageData(frequest.PublishedContent.Id,
- frequest.PublishedContent.Name, frequest.PublishedContent.ContentType.Id, frequest.PublishedContent.ContentType.Alias,
+ frequest.PublishedContent.Name(), frequest.PublishedContent.ContentType.Id, frequest.PublishedContent.ContentType.Alias,
frequest.PublishedContent.WriterName, frequest.PublishedContent.CreatorName, frequest.PublishedContent.CreateDate, frequest.PublishedContent.UpdateDate,
frequest.PublishedContent.Path, frequest.PublishedContent.Parent?.Id ?? -1);
@@ -57,7 +57,7 @@ namespace Umbraco.Web.Macros
if (doc == null) throw new ArgumentNullException(nameof(doc));
PopulatePageData(doc.Id,
- doc.Name, doc.ContentType.Id, doc.ContentType.Alias,
+ doc.Name(), doc.ContentType.Id, doc.ContentType.Alias,
doc.WriterName, doc.CreatorName, doc.CreateDate, doc.UpdateDate,
doc.Path, doc.Parent?.Id ?? -1);
@@ -228,7 +228,7 @@ namespace Umbraco.Web.Macros
public int SortOrder => _inner.SortOrder;
- public string Name => _inner.Name;
+ public string Name(string culture = null) => _inner.GetCultureName(culture);
public PublishedCultureInfo GetCulture(string culture = null)
{
diff --git a/src/Umbraco.Web/Models/PublishedContentBase.cs b/src/Umbraco.Web/Models/PublishedContentBase.cs
index d62b8c6665..04b5a64d07 100644
--- a/src/Umbraco.Web/Models/PublishedContentBase.cs
+++ b/src/Umbraco.Web/Models/PublishedContentBase.cs
@@ -41,7 +41,7 @@ namespace Umbraco.Web.Models
public abstract int Id { get; }
///
- public abstract string Name { get; }
+ public abstract string Name(string culture = null);
///
public abstract string UrlSegment { get; }
diff --git a/src/Umbraco.Web/PublishedCache/NuCache/Navigable/NavigableContent.cs b/src/Umbraco.Web/PublishedCache/NuCache/Navigable/NavigableContent.cs
index 51badc8b9a..bd6ad97d32 100644
--- a/src/Umbraco.Web/PublishedCache/NuCache/Navigable/NavigableContent.cs
+++ b/src/Umbraco.Web/PublishedCache/NuCache/Navigable/NavigableContent.cs
@@ -18,7 +18,7 @@ namespace Umbraco.Web.PublishedCache.NuCache.Navigable
var i = 0;
_builtInValues = new []
{
- XmlString(i++, _content.Name),
+ XmlString(i++, _content.Name()),
XmlString(i++, _content.ParentId),
XmlString(i++, _content.CreateDate),
XmlString(i++, _content.UpdateDate),
diff --git a/src/Umbraco.Web/PublishedCache/NuCache/PublishedContent.cs b/src/Umbraco.Web/PublishedCache/NuCache/PublishedContent.cs
index 5712d55973..f208061c18 100644
--- a/src/Umbraco.Web/PublishedCache/NuCache/PublishedContent.cs
+++ b/src/Umbraco.Web/PublishedCache/NuCache/PublishedContent.cs
@@ -185,19 +185,18 @@ namespace Umbraco.Web.PublishedCache.NuCache
public override int Id => _contentNode.Id;
///
- public override string Name
+ public override string Name(string culture = null)
{
- get
- {
- if (!ContentType.VariesByCulture())
- return ContentData.Name;
+ // handle context culture
+ if (culture == null)
+ culture = VariationContextAccessor?.VariationContext?.Culture ?? "";
- var culture = VariationContextAccessor?.VariationContext?.Culture ?? "";
- if (culture == "")
- return ContentData.Name;
+ // invariant culture
+ if (culture == "")
+ return ContentType.VariesByCulture() ? null : ContentData.Name;
- return Cultures.TryGetValue(culture, out var cultureInfos) ? cultureInfos.Name : null;
- }
+ // explicit culture
+ return Cultures.TryGetValue(culture, out var cultureInfos) ? cultureInfos.Name : null;
}
///
diff --git a/src/Umbraco.Web/PublishedCache/PublishedMember.cs b/src/Umbraco.Web/PublishedCache/PublishedMember.cs
index d954411f5e..d87d75059e 100644
--- a/src/Umbraco.Web/PublishedCache/PublishedMember.cs
+++ b/src/Umbraco.Web/PublishedCache/PublishedMember.cs
@@ -136,7 +136,11 @@ namespace Umbraco.Web.PublishedCache
public override int SortOrder => 0;
- public override string Name => _member.Name;
+ public override string Name(string culture = null)
+ {
+ // member name does not vary, ignore culture
+ return _member.Name;
+ }
public override PublishedCultureInfo GetCulture(string culture = null) => throw new NotSupportedException();
diff --git a/src/Umbraco.Web/PublishedContentExtensions.cs b/src/Umbraco.Web/PublishedContentExtensions.cs
index 54afb7abbd..29f32c1316 100644
--- a/src/Umbraco.Web/PublishedContentExtensions.cs
+++ b/src/Umbraco.Web/PublishedContentExtensions.cs
@@ -1077,7 +1077,7 @@ namespace Umbraco.Web
var standardVals = new Dictionary
{
{ "Id", n.Id },
- { "NodeName", n.Name },
+ { "NodeName", n.Name() },
{ "NodeTypeAlias", n.ContentType.Alias },
{ "CreateDate", n.CreateDate },
{ "UpdateDate", n.UpdateDate },
diff --git a/src/Umbraco.Web/Routing/UrlProviderExtensions.cs b/src/Umbraco.Web/Routing/UrlProviderExtensions.cs
index 2a840828b6..0a4f033bd2 100644
--- a/src/Umbraco.Web/Routing/UrlProviderExtensions.cs
+++ b/src/Umbraco.Web/Routing/UrlProviderExtensions.cs
@@ -187,7 +187,7 @@ namespace Umbraco.Web.Routing
var l = new List();
while (o != null)
{
- l.Add(o.Name);
+ l.Add(o.Name());
o = o.Parent;
}
l.Reverse();