• 中文
  • 注册
  • 技术交流 技术交流 关注:3 内容:13

    OpenMod插件的本地化

  • 查看作者
  • 打赏作者
  • 当前位置: 未转变者中文社区 > 技术交流 > 正文
    • 技术交流
    • 搬运自OpenMod官网,经过翻译,可能有些不足,欢迎指正!原文链接

      本地化

      本地化允许用户自定义和翻译插件消息。

      这是通过translations.yaml文件和IStringLocalizer服务。

      plugins.csproj文件中的<RootNamespace>和<AssemblyName>属性必须相等,否则IStringLocalizer服务将无法工作。

      添加translations.yaml

      创建名为“translations.yaml”的新文件在项目的根目录中。

      之后,将以下内容添加到.csproj文件中:

      <ItemGroup>
       
      <EmbeddedResource Include="translations.yaml" />

      </ItemGroup>

      如果您使用其中一个模板创建插件项目translations.yaml文件将被设置。

      使用IStringLocalizer进行本地化

      假设要本地化以下命令:

      [Command("awesome")]
      public class AwesomeCommand : Command
      {
          public AwesomeCommand(IServiceProvider serviceProvider) : base(serviceProvider)
          {
       
          }
       
          public async Task OnExecuteAsync()
          {
              var amount = Context.Parameters.Get<int>(0);
              await PrintAsync($"{Actor.DisplayName} is {amount}x awesome!");
          }
      }

      调整命令以使用IStringLocalizer服务:

      [Command("awesome")]
      public class AwesomeCommand : Command
      {
          private readonly IStringLocalizer m_StringLocalizer;
       
          public AwesomeCommand(
              IStringLocalizer stringLocalizer, // 注入IStringLocalizer服务
              IServiceProvider serviceProvider) : base(serviceProvider)
          {
              m_StringLocalizer = stringLocalizer;
          }
       
          public async Task OnExecuteAsync()
          {
              var count = Context.Parameters.Get<int>(0);
              // 打印本地化消息。
              await PrintAsync(m_StringLocalizer["commands:awesome", new { Actor = Actor, Amount = amount }]);
          }
      }

      commands:awesome定义翻译的关键。IStringLocalizer服务使用键作为yaml文件中值的路径。可以使用任何有效路径作为键,例如messages:awesome,同样awesome

      new { Actor = Actor, Amount = amount }设置消息的参数。

      将翻译添加到translations.yaml

      commands: 
        awesome: "{Actor.DisplayName} is {Amount}x awesome!"

      注意我们如何通过调用Actor.DisplayName. IStringLocalizer使用SmartFormat.NET用于分析参数。有关详细信息,请访问SmartFormat.NET wiki

      请登录之后再进行评论

      登录
      极客之爱
      个人签名:收容失效服务器群组QQ群:1037114248
      关注2 粉丝1 喜欢2内容14
      上海
    • 做任务
    • 实时动态
    • 签到中心
      小黑屋
    • 到底部