Skip to content

Commit a477f5b

Browse files
authored
DataLocalizedString.ToString() should return the Value (#19056)
1 parent b27f465 commit a477f5b

7 files changed

Lines changed: 87 additions & 7 deletions

File tree

src/OrchardCore.Modules/OrchardCore.Contents/Views/Items/ContentTypesAdminNode.Fields.TreeSummary.cshtml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
var selectedDisplayNames = allContentTypes
1414
.Where(x => isSelected(x, selectedContentTypes))
15-
.Select(x => D[x.DisplayName, "Content Types"].Value)
15+
.Select(x => D[x.DisplayName, "Content Types"])
1616
.ToList();
1717

1818
bool isSelected(ContentTypeDefinition ctd, ContentTypeEntry[] selectedList)

src/OrchardCore.Modules/OrchardCore.Flows/Views/BagPart.Edit.cshtml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@
7171
data-flowmetadata="false"
7272
data-parent-content-type="@parentContentType"
7373
data-part-name="@partName"
74-
href="javascript:;">@T["Add {0}", D[type.DisplayName, "Content Types"].Value]</a>
74+
href="javascript:;">@T["Add {0}", D[type.DisplayName, "Content Types"]]</a>
7575
}
7676
else if (totalItems > 1)
7777
{

src/OrchardCore.Modules/OrchardCore.Lists/Views/ListPartNavigationAdmin.cshtml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
@if (await AuthorizationService.AuthorizeAsync(User, CommonPermissions.EditContent, Model.Container))
3232
{
3333
<a class="btn btn-primary me-1" asp-action="Edit" asp-controller="Admin" asp-route-contentItemId="@Model.Container.ContentItemId" asp-route-area="OrchardCore.Contents">
34-
@T["Edit {0}", D[Model.ContainerContentTypeDefinition?.DisplayName, "Content Types"].Value]
34+
@T["Edit {0}", D[Model.ContainerContentTypeDefinition?.DisplayName, "Content Types"]]
3535
</a>
3636
}
3737

@@ -40,7 +40,7 @@
4040
var contentTypeDefinition = authorizedContentTypeDefinitions.FirstOrDefault();
4141

4242
<a class="btn btn-secondary" asp-action="Create" asp-controller="Admin" asp-route-id="@contentTypeDefinition.Name" asp-route-area="OrchardCore.Contents" asp-route-ListPart.ContainerId="@Model.Container.ContentItemId" asp-route-ListPart.ContainerContentType="@Model.ContainerContentTypeDefinition?.Name" asp-route-ListPart.ContentType="@contentTypeDefinition.Name" asp-route-ListPart.EnableOrdering="@Model.EnableOrdering" asp-route-returnUrl="@FullRequestPath">
43-
@T["Create {0}", D[contentTypeDefinition.DisplayName, "Content Types"].Value]
43+
@T["Create {0}", D[contentTypeDefinition.DisplayName, "Content Types"]]
4444
</a>
4545
}
4646
else if (authorizedContentTypeDefinitions.Count > 1)

src/OrchardCore.Modules/OrchardCore.Menu/Views/MenuPart.Edit.cshtml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@
6666
var menuItem = await ContentManager.NewAsync(type.Name);
6767
var thumbnail = await ContentItemDisplayManager.BuildDisplayAsync(menuItem, updater, "Thumbnail");
6868
thumbnail.Properties["MenuItemType"] = type.Name;
69-
thumbnail.Properties["MenuItemTypeDisplayName"] = D[type.DisplayName, "Content Types"].Value;
69+
thumbnail.Properties["MenuItemTypeDisplayName"] = D[type.DisplayName, "Content Types"];
7070
thumbnail.Properties["MenuContentItemId"] = Model.MenuPart.ContentItem.ContentItemId;
7171
<div class="col">
7272
@await DisplayAsync(thumbnail)

src/OrchardCore.Modules/OrchardCore.Taxonomies/Views/TaxonomyPart.Edit.cshtml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@
4646
asp-route-id="@Model.TaxonomyPart.TermContentType"
4747
asp-route-taxonomyContentItemId="@Model.TaxonomyPart.ContentItem.ContentItemId"
4848
asp-route-area="OrchardCore.Taxonomies">
49-
@T["Add {0}", D[termContentType.DisplayName, "Content Types"].Value]
49+
@T["Add {0}", D[termContentType.DisplayName, "Content Types"]]
5050
</a>
5151
}
5252
}

src/OrchardCore/OrchardCore.Abstractions/Localization/Data/DataLocalizedString.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,5 +31,6 @@ public DataLocalizedString(string context, string name, string value, bool resou
3131

3232
public bool ResourceNotFound { get; }
3333

34-
public override string ToString() => $"{Context}.{Name}";
34+
/// <inheritdoc/>
35+
public override string ToString() => Value;
3536
}
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
namespace OrchardCore.Localization.Data.Tests;
2+
3+
public class DataLocalizedStringTests
4+
{
5+
[Fact]
6+
public void DataLocalizedString_ReturnsValue_WithStringDataType()
7+
{
8+
// Arrange
9+
var dataLocalizedString = new DataLocalizedString("Content Types", "Blog", "Translated Blog");
10+
11+
// Act
12+
string value = dataLocalizedString;
13+
14+
// Assert
15+
Assert.Equal("Translated Blog", value);
16+
}
17+
18+
[Fact]
19+
public void DataLocalizedString_ReturnsValue_WithVarDataType()
20+
{
21+
// Arrange
22+
var dataLocalizedString = new DataLocalizedString("Content Types", "Blog", "Translated Blog");
23+
24+
// Act
25+
var value = dataLocalizedString;
26+
27+
// Assert
28+
Assert.Equal("Translated Blog", value);
29+
}
30+
31+
[Fact]
32+
public void DataLocalizedString_ReturnsValue_WithToString()
33+
{
34+
// Arrange
35+
var dataLocalizedString = new DataLocalizedString("Content Types", "Blog", "Translated Blog");
36+
37+
// Act
38+
var value = dataLocalizedString.ToString();
39+
40+
// Assert
41+
Assert.Equal("Translated Blog", value);
42+
}
43+
44+
[Fact]
45+
public void DataLocalizedString_ReturnsValue_WithLocalizer()
46+
{
47+
// Arrange
48+
var context = "context";
49+
var culture = "it";
50+
var dataLocalizedString = new DataLocalizedString("Content Types", "Blog", "Blog");
51+
var dataTranslationProviderMock = new Mock<IDataTranslationProvider>();
52+
53+
dataTranslationProviderMock
54+
.Setup(tp => tp.LoadTranslations(It.Is<string>(c => c == culture), It.IsAny<CultureDictionary>()))
55+
.Callback<string, CultureDictionary>((c, d) => d.MergeTranslations(new CultureDictionaryRecord[]
56+
{
57+
new CultureDictionaryRecord("Create {0}", context, [ "Creare {0}" ]),
58+
}));
59+
60+
var memoryCache = new ServiceCollection()
61+
.AddMemoryCache()
62+
.BuildServiceProvider()
63+
.GetService<IMemoryCache>();
64+
65+
var localizer = new DataLocalizer(
66+
new DataResourceManager(dataTranslationProviderMock.Object, memoryCache),
67+
fallBackToParentCulture: true,
68+
Mock.Of<ILogger>());
69+
70+
CultureInfo.CurrentUICulture = new CultureInfo(culture);
71+
72+
// Act
73+
var translation = localizer["Create {0}", context, dataLocalizedString];
74+
75+
// Assert
76+
Assert.NotEqual("Creare Content Types.Blog", translation);
77+
Assert.Equal("Creare Blog", translation);
78+
}
79+
}

0 commit comments

Comments
 (0)