Skip to content

本地化lang(语言文件)

这章主要是教会大家如何添加以及修改别的Mod的本地化文件(语言文件)

  • 文件路径

    lang文件主要存储于assets/${modid}/lang,不同的国家也有着不同的文件名称,具体请查看Wiki 或者文档内部链接 ,而各文件都以json作为后缀,例如en_us.json zh_cn.json zh_tw.json

    minecraft:sand minecraftmodid

  • 写法

    • lang主要由本地化键名和文本组成,例如
json
{
    "item.kubejs.test_item": "测试物品",
    "block.kubejs.test_block": "测试物品",
    "fluid.kubejs.test_fluid": "测试流体"
}

在写lang的时候最后一行千万不可以加逗号作为结尾,也不可以不写逗号就写下一行,更不可以写注释!

  • 而本地化键名(key)主要由type.modid.id组成 type指的是类型,例如: 流体是fluid 物品是item 方块是block
  • 而在写代码的时候也可以自己添加一串自定义的key,例如给石头添加Tooltip,举个简单的例子
js
ItemEvents.tooltip((event) => {
	event.add('minecraft:stone', [Text.translate("tip.mc.stone")])
})
json
{
    "tip.mc.stone": "我是一块石头"
}

同时在写lang的时候也可以给文本添加颜色或者使用转义字符

  • 修改 & 本地化

    • 在修改别的Mod的lang文件时需要先创建一个资源包,具体教程请看Wiki 随后在assets文件夹下创建一个和Modid相同的文件夹

    • 这种本地化资源包建议直接内置, 所以和前面说的一样, 需要一个Mod来进行资源包的内置加载Json Things

    • 你也可以复制ModFile.jar/assets下的文件夹名称,然后自己创建一个文件夹,随后和开头所说的一样,${modid}下再创建一个lang文件,随后把需要修改的lang文件解压进去便是

    • 如果是汉化Mod文本也一样,把原先的lang文件解压出来后改名为zh_cn.json(请严格确保不是zh_cn.json.txtzh_cn.txt.json)

    一切的Modid只能由小写字母,数字和下划线(a-z,0-9和_)组成

  • 快捷编写语言文件(仅限于你自己注册的新东西)

    • 在KubeJS 6中有一个ClientEvents.lang事件, 相对完整的格式是
js
ClientEvents.lang("zh_cn", (event) => {
	event.add("item.kubejs.test_item", "科比吉斯测试物品")
	event.add("block.kubejs.test_block", "科比吉斯测试方块")
	event.add("fluid.kubejs.test_fluid", "科比吉斯测试流体")
})
  • 不难看出ClientEvents.lang后的第一个参数为上面所提到的语言代码, 而下面的写法和Json的几乎一样
  • 或许有人会问 "誒那和Json有什么大的区别呢?"
  • 首先Json本质上不属于编程语言, 按理说是属于存储数据的东西, 自然也不存在各种奇怪的语法(不代表Json没有语法需求), 但是这是JavaScript, JavaScript可是有着循环功能的, 有编程基础的朋友可能已经明白我在说什么了,我也废话不多说, 直接上代码!
js
ClientEvents.lang("zh_cn", (event) => {
	const MODID = "kubejs"

	// 物品翻译
	let itemResourceLang = [
		["test_item_1", "科比吉斯测试物品1"],
		["test_item_2", "科比吉斯测试物品2"]
	]
	itemResourceLang.forEach(([key, text]) => {
		event.add(`item.${MODID}.${key}`, text)
	})

	// 方块翻译
	let blockResourceLang = [
		["test_block_1", "科比吉斯测试方块1"],
		["test_block_2", "科比吉斯测试方块2"]
	]
	blockResourceLang.forEach(([key, text]) => {
		event.add(`block.${MODID}.${key}`, text)
	})

	// 流体翻译
	let fluidResourceLang = [
		["test_fluid_1", "科比吉斯测试流体1"],
		["test_fluid_2", "科比吉斯测试流体2"]
	]
	fluidResourceLang.forEach(([key, text]) => {
		/*
		 * 由于流体在不同的地方显示的类型不同
		 * 因此需要为不同的环境配方单独的lang
		 * JEI显示的是fluid
		 * 大世界显示的block
		 * 而桶显示的是item,由于id后面带桶,因此需要加上_bucket和桶
		 */
		event.add(`fluid.${MODID}.${key}`, text)
		event.add(`block.${MODID}.${key}`, text)
		event.add(`item.${MODID}.${key}_bucket`, `${text}桶`)
	})
})

Contributors

Changelog