You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在静态方法中使用XLocalizer翻译验证提示信息

使用XLocalizer翻译扩展方法中的错误提示

核心实现思路

要完成错误提示的翻译,需在扩展方法中获取IXLocalizer服务实例,通过它处理消息本地化,同时兼顾属性自定义错误消息与默认提示的翻译逻辑。

修改后的完整代码

using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.AspNetCore.Mvc.ViewFeatures;
using System.Linq.Expressions;
using System.Reflection;
using XLocalizer;
using XLocalizer.ErrorMessages;

public static class HtmlHelperExtensions
{
    public static IHtmlContent InvalidTooltipFor<TModel, TResult>(this IHtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TResult>> expression)
    {
        var builder = new HtmlContentBuilder();
        var memberExpression = (MemberExpression)expression.Body;
        var property = typeof(TModel).GetProperty(memberExpression.Member.Name);
        
        if (property == null)
            return builder;

        // 从请求服务容器中获取XLocalizer实例
        var localizer = htmlHelper.ViewContext.HttpContext.RequestServices.GetService<IXLocalizer<SharedResource>>();
        // 若未使用自定义资源类,可改用全局XLocalizer:
        // var localizer = htmlHelper.ViewContext.HttpContext.RequestServices.GetService<IXLocalizer>();

        // 获取属性的显示名称(优先取DisplayAttribute配置的名称并翻译)
        var displayName = memberExpression.Member.Name;
        var displayAttr = property.GetCustomAttributes(typeof(DisplayAttribute), true).FirstOrDefault() as DisplayAttribute;
        if (displayAttr != null && !string.IsNullOrEmpty(displayAttr.Name))
        {
            displayName = localizer[displayAttr.Name];
        }

        // 处理RequiredAttribute的错误消息翻译
        var requiredAttr = property.GetCustomAttributes(typeof(RequiredAttribute), true).FirstOrDefault() as RequiredAttribute;
        if (requiredAttr != null)
        {
            string errorMessage;
            if (!string.IsNullOrEmpty(requiredAttr.ErrorMessage))
            {
                // 翻译自定义错误消息,传入显示名称作为占位符参数
                errorMessage = localizer[requiredAttr.ErrorMessage, displayName];
            }
            else
            {
                // 翻译默认必填提示,替换占位符为显示名称
                errorMessage = localizer[ErrorMessagesKeys.TheFieldIsRequired, displayName];
            }

            builder.AppendHtml($"<div class=\"invalid-tooltip\">{errorMessage}</div>");
        }

        return builder;
    }
}

关键细节说明

  • XLocalizer服务获取:通过htmlHelper.ViewContext.HttpContext.RequestServices访问服务容器,解析对应资源类的IXLocalizer实例,保证本地化上下文正确。
  • 显示名称优化:优先读取DisplayAttribute配置的友好名称并翻译,替代生硬的属性名,提升用户体验。
  • 错误消息翻译逻辑:
    • 若属性配置了自定义ErrorMessage,直接翻译该消息并传入显示名称填充占位符。
    • 若使用默认提示,调用XLocalizer内置的ErrorMessagesKeys.TheFieldIsRequired键,该键对应默认英文提示,会自动匹配你配置的中文翻译。
  • 资源文件配置:需在对应中文资源文件(如SharedResource.zh-CN.resx)中添加翻译条目,例如:
    <data name="TheFieldIsRequired" xml:space="preserve">
      <value>{0}字段为必填项。</value>
    </data>
    
    自定义错误消息也需在资源文件中添加对应的键值对。

内容的提问来源于stack exchange,提问作者jstuardo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 00:46:35