• 注册
  • 技术交流 技术交流 关注:8 内容:20

    [OpenMod]插件的本地化

  • 查看作者
  • 打赏作者
  • 当前位置: 未转变者中文社区 > 技术交流 > 正文
    大版主
    Lv.15

    搬运自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

    Lv.1
    […] 避免像上面的例子那样对消息进行硬编码。相反,使用本地化,这样用户就可以定制和翻译消息。 […]
    回复

    请登录之后再进行评论

    登录
  • 发布内容
  • 任务中心
  • 实时动态
  • 偏好设置
  • 帖子间隔 侧栏位置: