Lang语言

.lang是Mojang对不同语言文字存放的文件的后缀名
lang文件都放在资源包根目录/texts文件夹内,因此在lang是资源包部分

作用

如 定义某个物品的显示文字,可以在该物品行为文件的组件中的minecraft:display_name组件直接设置。但是,如果你要让这些文字更好的方便管理且支持多语言那么就可以用到lang文件。

使用

在texts文件夹的目录下,可以看到下列文件

  • bg_BG.lang
  • cs_CZ.lang
  • da_DK.lang
  • de_DE.lang
  • el_GR.lang
  • en_GB.lang
  • en_US.lang
  • en_ES.lang
  • es_MX.lang
  • fi_FI.lang
  • fr_CA.lang
  • fr_FR.lang
  • hu_HU.lang
  • id_ID.lang
  • it_IT.lang
  • ja_JP.lang
  • ko_KR.lang
  • nb_NO.lang
  • nl_NL.lang
  • pl_PL.lang
  • pt_PT.lang
  • ru_RU.lang
  • sk_SK.lang
  • sv_SE.lang
  • tr_TR.lang
  • uk_UA.lang
  • zh_CN.lang
  • zh_TW.lang
  • language_names.json
  • languages.json

默认有29种不同语言,你无需知道所有文件对应着什么语言,只需了解下面几个常用的:
zh_CN 中文(简体)
zh_TW 中文(繁体)
en_US 英语(美式) English(US)
en_GB 英语(英式) English(UK)

自定义语言

刚才说到“默认有”,也就是说,这些语言可以自定义?
是的,这就要看到texts文件夹中的两个json文件了
languages.json

[
"en_US"
"en_GB",
"de_DE",
"es_ES",
"es_MX",
"fr_FR",
"fr_CA",
"it_IT",
"ja_JP",
"ko_KR",
"pt_BR",
"pt_PT",
"ru_RU",
"zh_CN"
"zh_TW",
"nl_NL",
"bg_BG",
"cs_CZ",
"da_DK",
"el_GR",
"fi_FI",
"hu_HU",
"id_ID",
"nb_NO",
"pl_PL",
"sk_SK",
"sv_SE",
"tr_TR",
"uk_UA"
]

该文件是一个数组,定义了都有哪些语言,也可以继续增加。
language_names.json

[
  [ "en_US", "English (US)" ],
  [ "en_GB", "English (UK)" ],
  [ "de_DE", "Deutsch (Deutschland)" ],
  [ "es_ES", "Español (España)" ],
  [ "es_MX", "Español (México)" ],
  [ "fr_FR", "Français (France)" ],
  [ "fr_CA", "Français (Canada)" ],
  [ "it_IT", "Italiano (Italia)" ],
  [ "ja_JP", "日本語 (日本)" ],
  [ "ko_KR", "한국어 (대한민국)" ],
  [ "pt_BR", "Português (Brasil)" ],
  [ "pt_PT", "Português (Portugal)" ],
  [ "ru_RU", "Русский (Россия)"],
  [ "zh_CN", "简体中文" ],
  [ "zh_TW", "繁體中文" ],
  [ "nl_NL", "Nederlands (Nederland)" ],
  [ "bg_BG", "Български (BG)" ],
  [ "cs_CZ", "Čeština (Česká republika)" ],
  [ "da_DK", "Dansk (DA)" ],
  [ "el_GR", "Ελληνικά (Ελλάδα)" ],
  [ "fi_FI", "Suomi (Suomi)" ],
  [ "hu_HU", "Magyar (HU)" ],
  [ "id_ID", "Bahasa Indonesia (Indonesia)" ],
  [ "nb_NO", "Norsk bokmål (Norge)" ],
  [ "pl_PL", "Polski (PL)" ],
  [ "sk_SK", "Slovensky (SK)" ],
  [ "sv_SE", "Svenska (Sverige)" ],
  [ "tr_TR", "Türkçe (Türkiye)" ],
  [ "uk_UA", "Українська (Україна)" ]
]

该文件定义游戏中“语言设置”界面中"不同语言选项"所显示的文字,而这些文字则不是在lang文件中所定义的了。
(这句话可能有点绕)

编写

打开lang文件,可以清除的发现格式非常简单
下面是一个标准的语言串
xxx.xxxx.name=xxxx
等号前面部分为需要定义文字的位置,其中第一段是该位置的类型(包括物品item、方块tile、实体entity、UI等)
等号前面第二段为该位置在该类型中的标识符,对于物品、方块、实体而言就是命名空间:ID。
第三段则是统一的.name
等号后面的是文字内容

注释

在lang文件中,只要在前面加上一个#井号即代表注释
示例:

item.byh:a.name=物品A
# 给byh:a物品命名为“物品A”
 tile.byh:b.name=方块B
# 给byh:b方块命名为“物品B”
entity.byh:c.name=方块C
# 给byh:c实体命名为“实体C

除此之外,也可以不按照标准格式的语言串写,只要满足“xxx.name=xxx”的格式即可
对于这一些,你可以再在地图中配合使用/tellraw与/titleraw指令让其显示装载的资源包中的lang文件内的文字内容,以达到多语言地图的效果。
以上两指令0具体使用方法,已超出本文章范围,请参考MinecraftWiki

你知道吗

json中直接定义文字与lang文件定义相比,json中直接定义是有一个优点的
那就是json中可以使用\n、\u、\t、\、\b等这些常用的转义字符“\”,而lang文件则不行