搬运自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。
游戏交流区
攻略区
问答区
Mod发布区
Mod地图发布区
Mod技术区
汉化区
角色扮演交流区
技术交流
开服教程区
服务器宣传区
游戏更新公告区
MiaBot框架
圆心云开服面板
话题中心
社区公告
认证申请
工具/软件区
RGB颜色对照表
签到中心
幸运抽奖
排行榜
友情链接
小黑屋
周边商城


