ASP.NET Core实现多语言本地化Web应用程序
2024-09-05
183 0构建全球可访问的网站和应用程序需要对内容进行适当的本地化,以吸引来自不同文化和地区的用户。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 具有使应用不受语言、地区或文化约束的工具。
您可能感兴趣: