21. 全球化和本地化
📝 模块更新日志
-
新特性
- 多语言支持
L.GetDefaultCulture()
获取本地配置默认语言 4.8.8.49 ⏱️2023.10.25 !858 - 多语言支持
L.GetString(name, culture)
获取指定区域翻译 4.8.8.41 ⏱️2023.08.04 044b0ed - 多语言支持
DateTime
时间格式化配置节点DateTimeFormatCulture
4.8.7.31 ⏱️2023.03.31 #I6RUOU - 多语言支持
.json
文件配置方式(推荐) 4.8.6 ⏱️2023.02.08 #I6DL71 #I5DXKP -
L.SetCurrentUICulture(culture)
和L.GetCurrentUICulture()
静态方法,可在运行时动态修改当前线程区域性 4.8.3.10 ⏱️2022.12.23 #I66JWA -
L.SetCulture(culture, immediately)
方法重载,可配置运行时修改多语言立即有效 4.8.3.10 ⏱️2022.12.23 #I66JWA
- 多语言支持
-
其他更改
- 多语言中间件
app.UseAppLocalization()
添加Action<options>
委托参数 4.8.7.30 ⏱️2023.03.31 #I6RUOU
- 多语言中间件
-
文档
- 多语言
.json
配置方式文档
- 多语言
21.1 全球化和本地化
全球化 是设计支持不同区域性的应用程序的过程。 全球化添加了对一组有关特定地理区域的已定义语言脚本的输入、显示和输出支持。
本地化 是将已经针对可本地化性进行处理的全球化应用调整为特定的区域性/区域设置的过程。
通俗来说,就是使应用或系统支持多语言切换。Furion
框架提供了完整支持多语言处理的服务。
21.2 注册服务
在使用多语言服务之前,必须先注册服务,如:
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews()
.AddAppLocalization(); // 注册多语言
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
// 配置多语言,必须在 路由注册之前
app.UseAppLocalization();
app.UseStaticFiles();
app.UseRouting();
// 其他中间件
}
特别注意
app.UseAppLocalization();
必须在 app.UseRouting();
之前注册。
21.3 如何使用
21.3.1 配置 LocalizationSettings
添加 LocalizationSettings
配置选项:
{
"LocalizationSettings": {
"SupportedCultures": ["zh-CN", "en-US"], // 配置支持的语言列表
"DefaultCulture": "zh-CN" // 配置默认语言,如果不配置,取 SupportedCultures 的第一项
}
}
21.3.2 创建 Resources
文件夹
接下来在 Web启动项目层
添加 Resources
文件夹,如图:(可配置放置任意层,见配置 AssemblyName
)
21.4 L
静态类
Furion
框架主要通过 L
静态类完成多语言转换,该静态类有以下属性和方法:
L.Text[文本]
:转换文本多语言L.Html[HTML代码, 格式化]
:转换Html
多语言L.TextOf<T>()[文本]
:转换文本多语言,使用该方式那么资源文件需使用完整类型限定名,Furion 4.8.6+ 支持L.HtmlOf<T>()[HTML代码, 格式化]
:转换Html
多语言,使用该方式那么资源文件需使用完整类型限定名,Furion 4.8.6+ 支持L.SetCulture(区域码)
:设置当前语言区域,默认在下一次请求有效,第二个参数设置true
立即有效L.GetSelectCulture()
:获取当前的语言区域L.GetCultures()
:获取系统支持的多语言列表L.SetCurrentUICulture(区域码)
:运行时设置当前线程语言区域,立即有效,Furion 4.8.3.10+
版本有效L.GetCurrentUICulture()
: 获取当前线程 UI 区域性,Furion 4.8.3.10+
版本有效L.GetString<T>(u => u.属性)
: 根据表达式获取翻译,Furion 4.8.3.10+
版本有效L.GetString(name, culture)
: 获取指定的区域翻译,Furion 4.8.8.41+
版本有效L.GetDefaultCulture()
: 获取本地配置默认语言,Furion 4.8.8.49+
版本有效
小提示
通过 L.SetCulture
实际上是往客户端写入区域 Cookie
数据,也就是只对下一次请求有效,如果希望运行时立即有效,可通过 L.SetCurrentUICulture
设置或一起设置即可。
也可以直接通过设置 L.SetCulture(区域码, true)
立即生效(包含当前请求(线程)和下一次请求)。
21.5 使用例子
通过上面的配置步骤之后,我们就可以通过 L
静态类在代码任何位置使用了,如:
21.5.1 在类中使用
// 文本多语言
var apiInterface = L.Text["API 接口"];
var sourceCode = L.Text["源码地址"];
var other = L.Text["其他{0}", "的"];
// HTML 标记多语言
var name = L.Html["<b>Hello</b><i> {0}</i>", name];
21.5.2 在视图中使用
@using Furion.Localization
<div style="text-align:center;margin-top:50px;">
<p>让 .NET 开发更简单,更通用,更流行。</p>
<p>
<a href="/api">@L.Text["API 接口"]</a> <a
href="https://gitee.com/dotnetchina/Furion"
target="_blank"
>@L.Text["源码地址"]</a
>
</p>
</div>