ASP.NET Core 中的本地化实施:实现全球受众覆盖

作者:微信公众号:【架构师老卢】
3-18 16:12
35

概述:构建全球可访问的网站和应用程序需要对内容进行适当的本地化,以吸引来自不同文化和地区的用户。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);   
}

EF Core 还可以配置为根据请求的区域性本地化数据库内容。

测试本地化

将应用配置为本地化后,测试的重要方面包括:

  • 请求区域性解析程序检测不同请求的预期区域性
  • 视图为每个受支持的区域性正确呈现内容
  • 日期、数字和货币的格式按区域性正确
  • 提取到资源文件中的字符串和消息显示正确
  • 模型验证消息根据区域性进行本地化
  • 切换区域性的路由、Cookie 和查询参数正常工作

自动化测试有助于验证本地化在整个应用中的有效性。

本地化最佳实践

要进行有效的本地化,需要注意以下几点:

  • 支持具有适当 CSS 和标记的 RTL 语言
  • 避免连接已翻译的字符串。使用带有参数的占位符。
  • 对元素使用非区域性标识符和名称,例如 datetime-local
  • 规划布局以适应不同语言的可变字符串长度
  • 使用 EF Core 全局变量在数据库中启用内容本地化
  • 实施分层本地化提供程序以自定义区域性源
  • 遵循建议的资源文件命名约定
  • 利用 locstudio 等工具管理翻译
  • 使用 CI/CD 管道自动为每个区域性生成资源文件

结论

本地化对于面向全球用户的全球应用程序至关重要。ASP.NET Core 提供了全面的文化惯例和广泛的本地化框架。涵盖的关键概念包括通过路由、Cookie 等检测区域性、呈现本地化的视图和字符串以及本地化的模型验证。内置帮助程序可设置日期、数字和货币的格式。从一开始就规划本地化并使用最佳实践,从而产生全球就绪的应用程序。ASP.NET Core 具有使应用不受语言、地区或文化约束的工具。

相关留言评论
昵称:
邮箱:
阅读排行