我在自定义“是”和“否”默认按钮的本地化文本以确认 asp.net core 项目中 devexpress 中的 treeList 和 DataGrid 中的删除时遇到问题。有什么解决方案可以激活这些按钮对话框上的本地化吗?
我希望找到一种解决方案来解决多个 razor 页面的此问题,而无需修改包含 devexpress 组件的每个 razor 页面。
例子:
@using DevExtreme.AspNet.Mvc;
@using Microsoft.Extensions.Localization
@using MainApp.Localization
@using MainApp.Web.Pages.AuthFiles
@using System.Globalization;
@using System.Threading;
@inject IStringLocalizer<MainAppResource> L
@{
}
<link href="~/css_dx/devextreme/dx.common.css" rel="stylesheet" />
<abp-script-bundle name="DocSysDevExpressScriptBundle" />
<abp-style-bundle name="DocSysDevExpressStyleBundle" />
@{
var moduleName = Model.moduleName;
var previewRelatedDocuments = Model.previewRelatedDocuments;
var approveBool = Model.approveBool;
String langName = Thread.CurrentThread.CurrentCulture.Name;
var rtlBool = false;
if (langName.Equals("ar"))
{
rtlBool = true;
}
else
{
rtlBool = false;
}
}
<abp-style-bundle>
<abp-style src="/client-proxies/DocsysCss.css" />
</abp-style-bundle>
@(
Html.DevExtreme().DataGrid<MainApp.Topics.TopicDto>()
.ID("gridContainer").DataSource(new JS("topicsGrid_dataSource"))
.OnSaving("onSaving")
.RtlEnabled(rtlBool)
.Selection(s => s.Mode(SelectionMode.Multiple))
.OnSelectionChanged("selection_changed")
.Columns(columns =>
{
columns.AddFor(m => m.topic_Control_Code).Caption(@L["TopicControlCode"].Value);
if (moduleName == "Libsys"){
columns.AddFor(m => m.topic_Name_Ar).Caption(@L["TopicNameAr"].Value);
columns.AddFor(m => m.topic_Name_En).Caption(@L["TopicNameEn"].Value);
columns.AddFor(m => m.topicTypeLibsys).Lookup(x => x.DataSource(topicTypeEntities)
.ValueExpr("id")
.DisplayExpr("text"))
.Caption(@L["AuthorType"].Value);
}
else
{
if (rtlBool)
{
columns.AddFor(m => m.topic_Name_Ar).Caption(@L["TopicName"].Value);
columns.AddFor(m => m.topic_Name_En).Caption(@L["TopicName"].Value).Visible(false);
}
else
{
columns.AddFor(m => m.topic_Name_En).Caption(@L["TopicName"].Value);
columns.AddFor(m => m.topic_Name_Ar).Caption(@L["TopicName"].Value).Visible(false);
}
columns.AddFor(m => m.docsCount).Caption(@L["DocsCount"].Value)
.AllowEditing(false);
}
columns.AddFor(m => m.synonyms).Caption(@L["Synonym"].Value).Visible(false);
columns.AddFor(m => m.isApproved).Caption(@L["IsApproved"].Value).Visible(false);
columns.Add().Type(GridCommandColumnType.Buttons)
.Buttons(b =>
{
b.Add()
.Hint(@L["RelatedDocumentsReview"].Value)
.Icon("docfile") // You can choose any appropriate icon
.OnClick("onRelatedDocumentsClick")
.Visible(new JS("hasRelatedDocuments"));
b.Add().Name(GridColumnButtonName.Edit).Visible(Model.editBool);
b.Add().Name(GridColumnButtonName.Delete).Visible(Model.deletetBool);
});
})
.ColumnChooser(cc => cc.Enabled(false))
.Editing(editing =>
{
editing.Mode(GridEditMode.Popup);
editing.AllowUpdating(Model.editBool);
editing.AllowAdding(Model.addBool);
editing.UseIcons(true);
editing.AllowDeleting(Model.deletetBool);
editing.Texts(t =>
{
t.ConfirmDeleteMessage(@L["DeleteMsg"].Value);
t.ConfirmDeleteTitle(@L["Delete"].Value);
t.DeleteRow(@L["Delete"].Value);
t.SaveRowChanges(@L["Save"].Value);
t.CancelRowChanges(@L["Cancel"].Value);
t.AddRow(@L["Add"].Value);
t.EditRow(@L["Edit"].Value);
});
editing.Popup(p => p
.Title(@L["Topics"].Value)
.CloseOnOutsideClick(true)
.ShowTitle(true)
.Width(645)
.Height(455)
.ResizeEnabled(true)
.OnInitialized("onShowing")
);
当我们想要将本地化应用到 js 组件中时,当我们确实像您对我们自己管理的变量所做的那样,例如
t.AddRow(@L["Add"].Value);
。对于其他元素,例如确认对话框中的“是”和“否”按钮,如果组件没有提供用户自定义内容的选项,我们只能尝试检查是否有内置的本地化功能。
这就是我在 DevExtreme DataGrid 中发现的,它为我们提供了本地化的支持。这是支持的语言消息(使用Dictionaries)
如果我们想对所有页面应用本地化,我们可以在_layout.cshtml中设置脚本和
DevExpress.localization.locale("de");
。这是样本。