ASP.NET Core实现多语言本地化Web应用程序
构建全球可访问的网站和应用程序需要对内容进行适当的本地化,以吸引来自不同文化和地区的用户。ASP.NET Core 提供强大的本地化支持,以用户首选的语言和格式呈现内容。在本综合指南中,我们将探索 ASP.NET Core 中的各种国际化和本地化功能,使您能够轻松地针对全球受众调整您的 Web 应用程序。本地化概念简介本地化是使产品或内容适应特定区域或文化的过程。这包括:将文本翻译成母语本地化日期、货币等元素,以符合当地惯例国际化代码以实现本地化关键概念:区域设置:表示特定的区域性、区域和语言首选项。例如,en-US 表示美国的英语。区域性:定义地理区域的书写系统、日历、数字格式等约定。可以指
构建全球可访问的网站和应用程序需要对内容进行适当的本地化,以吸引来自不同文化和地区的用户。ASP.NET Core 提供强大的本地化支持,以用户首选的语言和格式呈现内容。
在本综合指南中,我们将探索 ASP.NET Core 中的各种国际化和本地化功能,使您能够轻松地针对全球受众调整您的 Web 应用程序。
本地化概念简介
本地化是使产品或内容适应特定区域或文化的过程。这包括:
将文本翻译成母语 本地化日期、货币等元素,以符合当地惯例 国际化代码以实现本地化关键概念:
区域设置:表示特定的区域性、区域和语言首选项。例如,en-US 表示美国的英语。 区域性:定义地理区域的书写系统、日历、数字格式等约定。可以指定区域性名称 (en) 和国家/地区 (US)。 资源:特定于语言的字符串、图像等。内容与代码是分开的。 可定位性:应用程序适应其他语言和文化的难易程度。本地化使世界各地的用户更容易在其原生文化环境中访问应用程序。
ASP.NET Core 中的本地化
ASP.NET Core 提供用于本地化内容的服务和中间件。关键组件包括:
本地化中间件:确定请求区域性并提供字符串本地化。 数据注释: 用于本地化每个区域性的模型验证消息等操作。 查看本地化:根据 UI 区域性显示本地化的字符串、日期、数字等。 字符串本地化:翻译后的字符串是从资源文件加载的。 EF Core 支持: 使用全球化功能本地化数据库内容。这些为全球 ASP.NET Core Web 应用提供了端到端本地化系统。
配置区域性
第一步是通过将应用区域性添加到 ConfigureServices 方法来注册应用将支持的区域性:
var supportedCultures = new[]
{
new CultureInfo("en-US"),
new CultureInfo("fr-FR"),
new CultureInfo("es-MX")
};
services.Configure<RequestLocalizationOptions>(options =>
{
options.SupportedCultures = supportedCultures;
options.SupportedUICultures = supportedCultures;
});
这会列出您的应用可以本地化到的区域性,例如美国英语、法语法国、西班牙语、墨西哥等。
检测请求区域性
本地化中间件需要确定每个请求的区域性。这可以通过以下方式完成:
用户首选项:浏览器语言设置 UI 区域性参数:uiCulture 查询字符串参数 URL 路径:路由路径的区域性段,如 http://example.com/en-US Cookie:保存在 Cookie 中的语言首选项 自定义逻辑:中间件中用于设置区域性的任何自定义逻辑,例如:基于数据库中的用户偏好。我们在RequestLocalizationOptions 中配置:
options.ApplyCurrentCultureToResponseHeaders = true;
options.DefaultRequestCulture = new RequestCulture("en-US");
options.SupportedCultures = supportedCultures;
options.SupportedUICultures = supportedCultures;
options.RequestCultureProviders = new[]
{
new RouteDataRequestCultureProvider(),
new CookieRequestCultureProvider()
};
这提供了来自各种来源(如路由、cookie 等)的灵活文化检测。
本地化视图
视图本地化系统使用检测到的区域性来呈现特定于区域性的字符串、格式等。
我们可以通过添加名称后缀(如 About.cshtml、About.fr.cshtml、About.es.cshtml 等)来提供特定于区域性的 Razor 视图版本。中间件将自动将匹配的中间件用于请求区域性。
本地化字符串
资源文件包含每种语言的字符串翻译。它们被命名为资源。{culture}.resx 类似于 resources.en-US.resx。这些是根据区域性自动读取的。
在 Razor 视图中,我们注入 IStringLocalizer 服务以访问已翻译的字符串:
@inject IStringLocalizer<HomePage> L
<h1>@L["WelcomeMessage"]</h1>
资源文件为区域性提供已翻译的字符串。
本地化内容
内置帮助程序,如
DateTime.ToLocalizedString() 格式化日期、数字等,按照区域性约定:
@DateTime.Now.ToLocalizedString()
@10.5.ToLocalizedString(culture: null)
这样可以很容易地本地化视图,而无需更改代码。
本地化数据模型
ASP.NET 数据注释为模型验证错误消息提供属性。这些可以本地化,如下所示:
[Display(Name = "DateOfBirth", ResourceType = typeof(Resources.HomePage))]
[Required(ErrorMessageResourceName = "RequiredDate",
ErrorMessageResourceType = typeof(Resources.HomePage))]
public DateTime DOB { get; set; }
ResourceType 指向包含特定于区域性的字符串的类。
对于客户端验证,IStringLocalizer 脚本为 jQuery 非干扰式验证生成本地化消息。
本地化 API
ASP.NET Core 还为 Web API 提供请求本地化。Accept-Language 标头可用于确定区域性。
资源可以提供本地化的消息:
[HttpGet("about")]
public IActionResult About()
{
return Ok(SharedResource.AboutText);
}
测试本地化
将应用配置为本地化后,测试的重要方面包括:
请求区域性解析程序检测不同请求的预期区域性 视图为每个受支持的区域性正确呈现内容 日期、数字和货币的格式按区域性正确 提取到资源文件中的字符串和消息显示正确 模型验证消息根据区域性进行本地化 切换区域性的路由、Cookie 和查询参数正常工作自动化测试有助于验证本地化在整个应用中的有效性。
本地化最佳实践
要进行有效的本地化,需要注意以下几点:
支持具有适当 CSS 和标记的 RTL 语言 避免连接已翻译的字符串。使用带有参数的占位符。 对元素使用非区域性标识符和名称,例如 datetime-local 规划布局以适应不同语言的可变字符串长度 使用 EF Core 全局变量在数据库中启用内容本地化 实施分层本地化提供程序以自定义区域性源 遵循建议的资源文件命名约定 利用 locstudio 等工具管理翻译 使用 CI/CD 管道自动为每个区域性生成资源文件结论
本地化对于面向全球用户的全球应用程序至关重要。ASP.NET Core 提供了全面的文化惯例和广泛的本地化框架。涵盖的关键概念包括通过路由、Cookie 等检测区域性、呈现本地化的视图和字符串以及本地化的模型验证。内置帮助程序可设置日期、数字和货币的格式。从一开始就规划本地化并使用最佳实践,从而产生全球就绪的应用程序。ASP.NET Core 具有使应用不受语言、地区或文化约束的工具。
更新于:2个月前相关文章
- 使用SuperWebSocket实现Web消息推送
- 用SignalR和Layui搭建自己的web聊天网站
- .NET C# 使用Hook钩子实现全局监听键盘和鼠标
- BotSharp 基于 .NET 平台的开源 AI 聊天机器人框架
- .NET C#连接FTP实现文件上传下载
- ABP.Net Core使用教程(一)启动模版项目
- .NET C#中的Func、Predicate和Expression用法详解
- 5个高性能 .NET Core 图片处理库推荐
- 多语言网站数据库文章表设计
- ASP.NET如何将Views文件夹从项目分离
- .NET C# 读取编辑.AVIF图片文件
- .NET C# SkiaSharp读取.AVIF图片文件报错
- ASP.NET MVC最常用的设计模式代码示例
- .NET开源ORM FreeSql常见问题和解决方法
- 微软于发布了.NET 9 Release Candidate 2 提高整体质量
- 分享5个开源的.NET Excel读写操作库
- ASP.NET 中的 Session 丢失或无法保持状态
- .Net Core中Dapper的使用详解
- ASP.NET 使用Entity Framework (EF) 创建迁移修改SQLite数据库表结构
- 如何从.NET Framework迁移到.NET Core或.NET 6/7?