EPR类企业管理系统

在我们现有系统基础上或全新开发,提供定制服务
为您的企业高效快速实施ERP,WMS,MES,CRM管理系统
全面管控物料仓库、销售业务、采购业务、仓库业务
生产过程、质量检验、组织架构、业务报表


定制
QQ:460-3528

开发
QQ群:3360-90194

源码
微信:136-3650-3721

如何:汉化(本地化)自定义字符串常量

本主题以确认消息为例,演示如何本地化自定义字符串。所述应用模型具有定位节点,其允许定位各种常数的。您可以使用此节点本地化应用程序中使用的所有自定义字符串。

例如,您在应用程序中实现的功能可以使用以下代码。

using System.Windows.Forms;
// ...
if (MessageBox.Show("Do you wish to cancel your changes?", "", MessageBoxButtons.YesNo) 
   == DialogResult.Yes) {
   // ...
}

在模型编辑器中添加本地化项目

要使上述确认消息的文本可本地化,可以将LocalizationItem子节点添加到Localization | 消息节点,并以所需的语言指定其Value属性。下图演示了在应用程序模型中要做的必要更改。

LocalizeCustomConstants_ModelEditor3

在这种情况下,您可以使用静态CaptionHelper.GetLocalizedText方法从新节点获取所需的消息文本。

using System.Windows.Forms;
using DevExpress.ExpressApp.Utils;
// ...
if (MessageBox.Show(CaptionHelper.GetLocalizedText("Messages", "DoYouWishToCancelChanges"), 
    "", MessageBoxButtons.YesNo) == DialogResult.Yes) {
    // ...
}

如果您决定必须本地化多个自定义字符串,则可以向Localization节点添加一个特殊的LocalizationGroup节点,并在其中指定字符串。按照我们的示例,将此节点称为Confirmations。下图演示了这些更改。

LocalizeCustomConstants_ModelEditor2

在这种情况下,请使用以下代码。

using System.Windows.Forms;
using DevExpress.ExpressApp.Utils;
// ...
if (MessageBox.Show(CaptionHelper.GetLocalizedText(
    @"Messages\Confirmations", "DoYouWishToCancelChanges"), 
        "", MessageBoxButtons.YesNo) == DialogResult.Yes) {
    // ...
}

所述LocalizationGroup节点可以具有多级结构。您可以通过将路径传递到CaptionHelper.GetLocalizedText方法来创建复杂的层次结构并访问所需的项目。不要将本地化节点本身包括在路径中。例如,访问本地化| 留言| 确认| 在DataChangingConfirmations组中,使用“ Messages \ Confirmations \ DataChangingConfirmations”路径。

从资源文件导出本地化项目

或者,您可以从资源文件添加本地化项目。假设您的XAF解决方案中具有以下MyResource.resx资源文件。

LocalizeCustomConstants_ResourceFile

要将值从此文件导出到应用程序模型,请实现资源本地化器(XafResourceLocalizer后代)。

using DevExpress.ExpressApp.Localization;
// ...
public class MyXafResourceLocalizer : XafResourceLocalizer {
    protected override IXafResourceManagerParameters GetXafResourceManagerParameters() {
        string[] localizationGroupPath = new string[] { "Messages", "Confirmations" };
        return new XafResourceManagerParameters(localizationGroupPath, 
            "MySolution.Module.MyResource", "", GetType().Assembly);
    }
}

此处,“ MySolution.Module.MyResource”是资源名称。此资源中的项目将添加到“本地化| 留言| 确认本地化组。通过将其类型添加到ModuleBase.ResourcesExportedToModel集合中,在模块中注册此Resource Localizer 。

public sealed partial class MySolutionModule : ModuleBase {
    public MySolutionModule() {
        // ...
        ResourcesExportedToModel.Add(typeof(MyXafResourceLocalizer));
    }
    // ...
}

或者,您可以在重写的ModuleBase.GetXafResourceLocalizerTypes方法中注册资源本地化器。

public sealed partial class ResourceLocalizerModule : ModuleBase {
    // ...
    public override ICollection<Type> GetXafResourceLocalizerTypes() {
        ICollection<Type> localizers = base.GetXafResourceLocalizerTypes();
        localizers.Add(typeof(MyXafResourceLocalizer));
        return localizers;
    }
}

在这种情况下,您将能够在“应用程序设计器”中添加或删除本地化器。

LocalizeCustomConstants_ResourcesExportedToModel

注意

当前模块中定义的本地化器类型不会显示在“模块设计器”的“导出到模型的资源”对话框中。此行为是设计使然,并且特定于Visual Studio设计时环境的工作,该环境无法获取模块本身的本地化器类型的列表,因为此信息不可序列化。

重建解决方案并调用模型编辑器。您将看到MyResource.resx资源中的项目已导出到应用程序模型。

LocalizeCustomConstants_ModelEditor

现在,您可以使用CaptionHelper.GetLocalizedText方法从代码中访问可本地化的值。

相关文章

转载保留此链接,注明出处