You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Minecraft Fabric 1.18.2开发:如何在LiteralText中嵌入TranslatableText

Minecraft Fabric 1.18.2 聊天栏多语言消息实现

完全支持翻译文本和动态内容混合使用,不需要硬编码整段固定内容。Minecraft的文本组件本身是可嵌套、可拼接的结构,不管是TranslatableText还是LiteralText都支持自由组合,不存在只能全用翻译文本或者全用硬编码文本的限制。

你之前手动把所有内容转字符串拼接成LiteralText的写法反而有问题:提前调用getString()会把原本的翻译文本组件转成普通字符串,既会丢失方块名的多语言适配能力(比如玩家客户端是其他语言时,方块名会固定成服务端当前语言的文本),也会丢失文本自带的悬停提示、样式等原生属性。

推荐实现方式

用TranslatableText自带的占位符参数能力嵌入动态内容,不需要手动拼接字符串:

  1. 首先在模组资源目录的语言文件中定义翻译键,比如assets/[你的模组ID]/lang/zh_cn.json中添加:
{
  "message.mymod.found_ore": "发现 %s 位于坐标 (%d, %d, %d)"
}

对应英文语言文件en_us.json中添加:

{
  "message.mymod.found_ore": "Found %s at (%d, %d, %d)"
}
  1. 修改消息发送逻辑,直接把动态内容作为参数传入TranslatableText:
private void outputValuableCoordinates(BlockPos blockPos, PlayerEntity player, Block blockBelow) {
    player.sendMessage(
        new TranslatableText(
                "message.mymod.found_ore",
                blockBelow.getName(), // 直接传入方块的文本组件,不需要转字符串
                blockPos.getX(),
                blockPos.getY(),
                blockPos.getZ()
        ),
        false
    );
}

自定义分段拼接方式

如果你需要给不同片段加单独样式、点击交互,也可以用append()方法自由拼接不同类型的文本组件,翻译文本、纯文本、带样式的特殊文本可以混着拼,聊天栏会按顺序正常渲染:

// 示例:给方块名加金色样式,坐标加灰色样式
player.sendMessage(
        new TranslatableText("message.mymod.found_prefix")
                .append(blockBelow.getName().formatted(Formatting.GOLD))
                .append(new TranslatableText("message.mymod.at_position"))
                .append(new LiteralText(String.format("(%d, %d, %d)",
                        blockPos.getX(),
                        blockPos.getY(),
                        blockPos.getZ()
                )).formatted(Formatting.GRAY)),
        false
);

内容的提问来源于stack exchange,提问作者BlueLP

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 23:39:25