Skip to content

国际化8.3.0

要使用内置的国际化功能,在接口项目中创建类似于下面的目录结构:

Resources/
├─ MyModuleLocalizer.cs
├─ Resources.MyModuleLocalizer.en.json

然后在启动项目 ConfigCenter/appconfig.json 中增加下面的配置:

json
{
  "AppConfig": {
    //语言配置
    "Lang": {
      //默认 true 启用, 为 false 不使用内置国际化
      "Enable": true,
      //默认语言
      "DefaultLang": "zh",
      //语言列表
      "Langs": [ "zh", "en" ],
      //语言请求解析列表,设置[]可强制使用默认语言
      "RequestCultureProviders": [] //["QueryString","Cookie","AcceptLanguageHeader"]
    }
  }
}

设置语言翻译文件

新建 Resources.MyModuleLocalizer.en.json 英文翻译文件

推荐用中文作为语言索引键

json
{
  "中文键": "English description"
}

动态字符串参数配置,索引从0开始设置

json
{
  "{0}中文键": "{0}English description"
}

设置语言资源类

新建共享语言资源类 MyModuleLocalizer.cs

cs
using Microsoft.Extensions.Localization;
using ZhonTai.Admin.Core.Attributes;
using ZhonTai.Admin.Resources;

namespace MyCompanyName.MyProjectName.Resources;

/// <summary>
/// Admin国际化
/// </summary>
[InjectSingleton]
public class MyModuleLocalizer: ModuleLocalizer
{
  public AdminLocalizer(IStringLocalizer<MyModuleLocalizer> localizer) : base(localizer)
  {
  }
}

使用语言资源类

cs
[Order(20)]
[DynamicApi(Area = AppConsts.AreaName)]
public class ModuleService : BaseService, IDynamicApi
{
  private readonly MyModuleLocalizer _myModuleLocalizer;

  public ModuleService(MyModuleLocalizer myModuleLocalizer)
  {
    _myModuleLocalizer = myModuleLocalizer;
  }

  /// <summary>
  /// 修改
  /// </summary>
  /// <param name="input"></param>
  /// <returns></returns>
  public async Task UpdateAsync(ModuleUpdateInput input)
  {
      if (!(input?.Id > 0))
      {
          throw ResultOutput.Exception(_myModuleLocalizer["{0}中文键", "动态字符串参数"]);
      }

      ...
  }
}