ASP.NET Core MVC单套多语言.resx文件本地化实现求助
实现ASP.NET Core MVC全站单套.resx文件本地化
1. 创建全局资源文件
在项目根目录新建Resources文件夹,创建统一命名的资源文件:
- 默认语言资源:
SharedResources.resx(例如作为中文默认资源) - 其他语言资源:
SharedResources.en-US.resx、SharedResources.ja-JP.resx等,命名规则为[统一前缀].[语言代码].resx,前缀保持一致(这里用SharedResources作为全局资源标识)。
2. 配置本地化服务
修改Program.cs,替换原有的控制器/视图本地化配置,改为全局资源模式:
// 添加本地化服务,指定资源文件存放路径 builder.Services.AddLocalization(options => options.ResourcesPath = "Resources"); builder.Services.AddControllersWithViews() // 启用视图本地化(若不需要按视图后缀匹配资源可忽略,但保留不影响全局资源使用) .AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix) // 配置数据注解验证提示使用全局资源 .AddDataAnnotationsLocalization(options => { options.DataAnnotationLocalizerProvider = (type, factory) => factory.Create(typeof(SharedResources)); }); // 定义项目支持的语言列表 var supportedCultures = new[] { new CultureInfo("zh-CN"), new CultureInfo("en-US"), // 按需添加更多语言 }; // 配置请求本地化规则 app.UseRequestLocalization(new RequestLocalizationOptions { DefaultRequestCulture = new RequestCulture("zh-CN"), SupportedCultures = supportedCultures, SupportedUICultures = supportedCultures });
3. 在视图中使用全局资源
无需为每个视图单独创建resx,直接注入全局字符串本地化器即可:
@inject IStringLocalizer<SharedResources> Localizer <div class="page-content"> <h1>@Localizer["SiteMainTitle"]</h1> <p>@Localizer["WelcomeMessage"]</p> <button type="submit">@Localizer["SubmitBtnText"]</button> </div>
4. 在控制器中使用全局资源
通过构造函数注入全局本地化器,直接调用资源键获取对应语言文本:
using Microsoft.Extensions.Localization; public class HomeController : Controller { private readonly IStringLocalizer<SharedResources> _localizer; public HomeController(IStringLocalizer<SharedResources> localizer) { _localizer = localizer; } public IActionResult Index() { ViewData["PageTitle"] = _localizer["HomePageTitle"]; return View(); } }
5. 数据注解本地化支持
模型验证的提示文本会自动读取全局资源,只需在resx中添加对应键值对:
public class UserFormModel { [Required(ErrorMessage = "FieldRequired")] [Display(Name = "UserNameLabel")] public string UserName { get; set; } }
在SharedResources.resx中配置:
- 键:
FieldRequired,值:此字段为必填项 - 键:
UserNameLabel,值:用户名
核心优势
- 全站仅维护一套多语言资源文件,新增语言只需添加对应后缀的resx文件
- 控制器、视图、数据注解共享同一资源池,避免重复维护
- 资源键统一管理,减少命名冲突和维护成本
内容的提问来源于stack exchange,提问作者Flaubert TAGU
相关产品推荐
相关产品推荐

