Skip to content

Commit a102d3c

Browse files
Create Data Localization editor (OrchardCMS#18761)
* Create Data Localization editor * Fix build * Fix broken unit test * Fix the testing bug * Update views with Content Type display name localization * Update all field displays and add sub context handling * Fix test * Group permissions * Remove the breadcrumb * Animate progress bar * Fix culture spacing * Translations -> Dynamic Transaltions * Original -> Key * Refactor view models * Fix the build * Use colon as context separator * Remove unnecessary usings * Refactoring * Fix * Fix the test --------- Co-authored-by: Hisham Bin Ateya <hishamco_2007@yahoo.com>
1 parent c7d9c7a commit a102d3c

File tree

124 files changed

+2541
-162
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

124 files changed

+2541
-162
lines changed

mkdocs.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -265,6 +265,7 @@ nav:
265265
- HTTPS: reference/modules/Https/README.md
266266
- Key Vault (Azure): reference/modules/KeyVault.Azure/README.md
267267
- Localization: reference/modules/Localize/README.md
268+
- Data Localization: reference/modules/DataLocalization/README.md
268269
- Logging Serilog: reference/modules/Logging.Serilog/README.md
269270
- Mini Profiler: reference/modules/MiniProfiler/README.md
270271
- Modules: reference/modules/Modules/README.md

src/OrchardCore.Modules/OrchardCore.ContentFields/Views/BooleanField-Switch.Edit.cshtml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
11
@model OrchardCore.ContentFields.ViewModels.EditBooleanFieldViewModel
22
@using OrchardCore.Mvc.Utilities
3+
@using OrchardCore.Localization.Data
4+
@inject IDataLocalizer D
35
@{
46
var settings = Model.PartFieldDefinition.GetSettings<BooleanFieldSettings>();
7+
string localizedFieldName = D[Model.PartFieldDefinition.DisplayName(), $"Content Fields;{Model.PartFieldDefinition.PartDefinition.Name}"];
58
}
69

710
<div class="@Orchard.GetFieldWrapperClasses(Model.PartFieldDefinition)" id="@Html.IdFor(x => x.Value)_FieldWrapper">
811
<div class="@Orchard.GetEndClasses(true)">
912
<div class="form-check form-switch">
1013
<input asp-for="Value" type="checkbox" class="form-check-input content-preview-select" checked="@Model.Value" />
11-
<label asp-for="Value" class="form-check-label">@(string.IsNullOrEmpty(settings.Label) ? Model.PartFieldDefinition.DisplayName() : settings.Label)</label>
14+
<label asp-for="Value" class="form-check-label">@(string.IsNullOrEmpty(settings.Label) ? localizedFieldName : settings.Label)</label>
1215
@if (!string.IsNullOrEmpty(settings.Hint))
1316
{
1417
<span class="hint dashed">@settings.Hint</span>

src/OrchardCore.Modules/OrchardCore.ContentFields/Views/BooleanField.Edit.cshtml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,18 @@
11
@model OrchardCore.ContentFields.ViewModels.EditBooleanFieldViewModel
22
@using OrchardCore.Mvc.Utilities
3-
3+
@using OrchardCore.Localization.Data
4+
@inject IDataLocalizer D
45
@{
56
var settings = Model.PartFieldDefinition.GetSettings<BooleanFieldSettings>();
7+
string localizedFieldName = D[Model.PartFieldDefinition.DisplayName(), $"Content Fields;{Model.PartFieldDefinition.PartDefinition.Name}"];
68
}
79

810
<div class="@Orchard.GetFieldWrapperClasses(Model.PartFieldDefinition)" id="@Html.IdFor(x => x.Value)_FieldWrapper">
911
<div class="@Orchard.GetEndClasses(true)">
1012
<div class="form-check">
1113
<input asp-for="Value" type="checkbox" class="form-check-input content-preview-select" checked="@Model.Value" />
1214
<label class="form-check-label" asp-for="Value">
13-
@(string.IsNullOrEmpty(settings.Label) ? Model.PartFieldDefinition.DisplayName() : settings.Label)
15+
@(string.IsNullOrEmpty(settings.Label) ? localizedFieldName : settings.Label)
1416
@if (!string.IsNullOrEmpty(settings.Hint))
1517
{
1618
<span class="hint dashed">@settings.Hint</span>

src/OrchardCore.Modules/OrchardCore.ContentFields/Views/ContentPickerField.Edit.cshtml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
@using System.Text.Json
33
@using System.Text.Json.Nodes
44
@using OrchardCore.Mvc.Utilities
5+
@using OrchardCore.Localization.Data
6+
@inject IDataLocalizer D
57
@{
68
var settings = Model.PartFieldDefinition.GetSettings<ContentPickerFieldSettings>();
79
var selectedItems = JConvert.SerializeObject(Model.SelectedItems, JOptions.CamelCase);
@@ -12,13 +14,14 @@
1214
var searchUrl = Url.RouteUrl(new { area = "OrchardCore.ContentFields", controller = "ContentPickerAdmin", action = "SearchContentItems", part = partName, field = fieldName });
1315
var vueElementId = $"ContentPicker_{partName}_{fieldName}_{Guid.NewGuid().ToString("n")}";
1416
var multiple = settings.Multiple.ToString().ToLowerInvariant();
17+
string localizedFieldName = D[Model.PartFieldDefinition.DisplayName(), $"Content Fields;{Model.PartFieldDefinition.PartDefinition.Name}"];
1518
}
1619

1720
<script asp-name="vue-multiselect-wrapper" at="Foot"></script>
1821
<style asp-name="vue-multiselect" version="2" at="Foot"></style>
1922

2023
<div class="@Orchard.GetFieldWrapperClasses(Model.PartFieldDefinition)" id="@Html.IdFor(x => x.ContentItemIds)_FieldWrapper">
21-
<label asp-for="ContentItemIds" class="@Orchard.GetLabelClasses(inputRequired: settings.Required)">@Model.PartFieldDefinition.DisplayName()</label>
24+
<label asp-for="ContentItemIds" class="@Orchard.GetLabelClasses(inputRequired: settings.Required)">@localizedFieldName</label>
2225
<div class="@Orchard.GetEndClasses()">
2326
<div id="@vueElementId" class="vue-multiselect" data-part="@partName" data-field="@fieldName" data-editor-type="ContentPicker" data-selected-items="@selectedItems" data-edit-url="@editUrl" data-view-url="@viewUrl" data-search-url="@searchUrl" data-multiple="@multiple">
2427

src/OrchardCore.Modules/OrchardCore.ContentFields/Views/ContentPickerField.cshtml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,19 @@
22
@using OrchardCore.ContentManagement
33
@using OrchardCore.Mvc.Utilities
44
@using OrchardCore.ContentManagement.Metadata.Models
5+
@using OrchardCore.Localization.Data
56

67
@inject OrchardCore.ContentManagement.IContentManager ContentManager
8+
@inject IDataLocalizer D
79

810
@{
911
var name = (Model.PartFieldDefinition.PartDefinition.Name + "-" + Model.PartFieldDefinition.Name).HtmlClassify();
1012
var contentItems = await ContentManager.GetAsync(Model.ContentItemIds);
13+
string localizedFieldName = D[Model.PartFieldDefinition.DisplayName(), $"Content Fields;{Model.PartFieldDefinition.PartDefinition.Name}"];
1114
}
1215

1316
<div class="field field-type-contentpickerfield field-name-@name">
14-
<span class="name">@Model.PartFieldDefinition.DisplayName()</span>
17+
<span class="name">@localizedFieldName</span>
1518
@if (contentItems.Any())
1619
{
1720
foreach (var contentItem in contentItems)

src/OrchardCore.Modules/OrchardCore.ContentFields/Views/DateField-Localized.Edit.cshtml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
@model OrchardCore.ContentFields.ViewModels.EditDateFieldViewModel
2-
2+
@using OrchardCore.Localization.Data
3+
@inject IDataLocalizer D
34
@{
45
var settings = Model.PartFieldDefinition.GetSettings<DateFieldSettings>();
56
var language = Orchard.CultureName().Split('-')[0];
67
var datepickerId = Html.IdFor(m => m.Value);
8+
string localizedFieldName = D[Model.PartFieldDefinition.DisplayName(), $"Content Fields;{Model.PartFieldDefinition.PartDefinition.Name}"];
79
}
810

911
<div class="@Orchard.GetWrapperClasses()">
10-
<label asp-for="Value" class="@Orchard.GetLabelClasses(inputRequired: settings.Required)">@Model.PartFieldDefinition.DisplayName()</label>
12+
<label asp-for="Value" class="@Orchard.GetLabelClasses(inputRequired: settings.Required)">@localizedFieldName</label>
1113
<div class="@Orchard.GetEndClasses()">
1214
<div class="@Orchard.GetLimitedWidthWrapperClasses()">
1315
<div class="@Orchard.GetLimitedWidthClasses()">

src/OrchardCore.Modules/OrchardCore.ContentFields/Views/DateField.Edit.cshtml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
@model OrchardCore.ContentFields.ViewModels.EditDateFieldViewModel
22
@using OrchardCore.Mvc.Utilities
3+
@using OrchardCore.Localization.Data
4+
@inject IDataLocalizer D
35
@{
46
var settings = Model.PartFieldDefinition.GetSettings<DateFieldSettings>();
7+
string localizedFieldName = D[Model.PartFieldDefinition.DisplayName(), $"Content Fields;{Model.PartFieldDefinition.PartDefinition.Name}"];
58
}
69

710
<script asp-name="jQuery-ui-i18n" at="Foot"></script>
811
<div class="@Orchard.GetFieldWrapperClasses(Model.PartFieldDefinition)" id="@Html.IdFor(x => x.Value)_FieldWrapper">
9-
<label asp-for="Value" class="@Orchard.GetLabelClasses(inputRequired: settings.Required)">@Model.PartFieldDefinition.DisplayName()</label>
12+
<label asp-for="Value" class="@Orchard.GetLabelClasses(inputRequired: settings.Required)">@localizedFieldName</label>
1013
<div class="@Orchard.GetEndClasses()">
1114
<div class="@Orchard.GetLimitedWidthWrapperClasses()">
1215
<div class="@Orchard.GetLimitedWidthClasses()">

src/OrchardCore.Modules/OrchardCore.ContentFields/Views/DateTimeField.Edit.cshtml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
@model OrchardCore.ContentFields.ViewModels.EditDateTimeFieldViewModel
22
@using OrchardCore.Mvc.Utilities
3+
@using OrchardCore.Localization.Data
4+
@inject IDataLocalizer D
35
@{
46
var settings = Model.PartFieldDefinition.GetSettings<DateTimeFieldSettings>();
7+
string localizedFieldName = D[Model.PartFieldDefinition.DisplayName(), $"Content Fields;{Model.PartFieldDefinition.PartDefinition.Name}"];
58
}
69
<script asp-name="jQuery-ui-i18n" at="Foot"></script>
710
<div class="@Orchard.GetFieldWrapperClasses(Model.PartFieldDefinition)" id="@Html.IdFor(x => x.LocalDateTime)_FieldWrapper">
8-
<label asp-for="LocalDateTime" class="@Orchard.GetLabelClasses(inputRequired: settings.Required)">@Model.PartFieldDefinition.DisplayName()</label>
11+
<label asp-for="LocalDateTime" class="@Orchard.GetLabelClasses(inputRequired: settings.Required)">@localizedFieldName</label>
912
<div class="@Orchard.GetEndClasses()">
1013
<div class="@Orchard.GetLimitedWidthWrapperClasses()">
1114
<div class="@Orchard.GetLimitedWidthClasses()">

src/OrchardCore.Modules/OrchardCore.ContentFields/Views/HtmlField-Monaco.Edit.cshtml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
@model OrchardCore.ContentFields.ViewModels.EditHtmlFieldViewModel
22
@using OrchardCore.Mvc.Utilities
3+
@using OrchardCore.Localization.Data
4+
@inject IDataLocalizer D
35
@{
46
var settings = Model.PartFieldDefinition.GetSettings<HtmlFieldSettings>();
57
var monacoSettings = Model.PartFieldDefinition.GetSettings<HtmlFieldMonacoEditorSettings>();
68
var culture = await Orchard.GetContentCultureAsync(Model.Field.ContentItem);
9+
string localizedFieldName = D[Model.PartFieldDefinition.DisplayName(), $"Content Fields;{Model.PartFieldDefinition.PartDefinition.Name}"];
710
}
811

912
<div class="@Orchard.GetFieldWrapperClasses(Model.PartFieldDefinition)" id="@Html.IdFor(x => x.Html)_FieldWrapper">
10-
<label asp-for="Html" class="@Orchard.GetLabelClasses()">@Model.PartFieldDefinition.DisplayName()</label>
13+
<label asp-for="Html" class="@Orchard.GetLabelClasses()">@localizedFieldName</label>
1114
<div class="@Orchard.GetEndClasses()">
1215
@await DisplayAsync(await New.ShortcodeModal())
1316
<div id="@Html.IdFor(x => x.Html)_editor" asp-for="Text" style="min-height: 400px;" class="form-control" dir="@culture.GetLanguageDirection()"></div>

src/OrchardCore.Modules/OrchardCore.ContentFields/Views/HtmlField-Multiline.Edit.cshtml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
@model OrchardCore.ContentFields.ViewModels.EditHtmlFieldViewModel
22
@using OrchardCore.Mvc.Utilities
3+
@using OrchardCore.Localization.Data
4+
@inject IDataLocalizer D
35
@{
46
var settings = Model.PartFieldDefinition.GetSettings<HtmlFieldSettings>();
57
var culture = await Orchard.GetContentCultureAsync(Model.Field.ContentItem);
8+
string localizedFieldName = D[Model.PartFieldDefinition.DisplayName(), $"Content Fields;{Model.PartFieldDefinition.PartDefinition.Name}"];
69
}
710

811
<div class="@Orchard.GetFieldWrapperClasses(Model.PartFieldDefinition)" id="@Html.IdFor(x => x.Html)_FieldWrapper">
9-
<label asp-for="Html" class="@Orchard.GetLabelClasses()">@Model.PartFieldDefinition.DisplayName()</label>
12+
<label asp-for="Html" class="@Orchard.GetLabelClasses()">@localizedFieldName</label>
1013
<div class="@Orchard.GetEndClasses()">
1114
@await DisplayAsync(await New.ShortcodeModal())
1215
<textarea asp-for="Html" rows="5" class="form-control content-preview-text shortcode-modal-input" dir="@culture.GetLanguageDirection()"></textarea>

0 commit comments

Comments
 (0)