Minecraft基岩版支援多國語系,主要透過資源包控制,例如物品可按照玩家遊戲的語言,來顯示在地化的中文或英文名稱;書本、告示牌亦可透過Rawtext製作雙語版。
如果某個Add-On只有英文,透過新增中文.lang檔案就能翻譯Add-On,又不更動整體檔案結構。
本文討論.lang檔案和Rawtext的用法。
1. .lang檔案的用法#
請先下載 原版資源包
.lang檔案可於texts
資料夾找到,裡面的就是遊戲介面的翻譯文本,如果覺得基岩版的中文翻譯很怪,亦可自行校正,例如巴哈
修正奇怪翻譯的資源包。
1.1. .lang檔案基本語法#
等號左方是原始的字串鍵值,右方是翻譯後呈現的結果:
原版資源包/texts/zh_TW.lang
的內容
createWorldScreen.action.editLocal=創造無限! #
createWorldScreen.action.local=創造世界! #
createWorldScreen.action.realms=創造世界! #
createWorldScreen.action.realmsReset=重設 Realm #
「##」開頭的行視為註解。此外原版資源包為保持多語系文字工整,會在字串後面按一個TAB鍵,再加上一個「#」。
原版資源包/texts/zh_TW.lang
的內容
## Note, trailing spaces will NOT be trimmed. If you want room between the end of the string and the start of a
## comment on the same line, use TABs.
accessibility.disableTTS=文字轉換語音已停用 #
accessibility.enableTTS=文字轉換語音已啟用 #
%s
是特殊的變數,代表動態的名稱,例如以下記分板指令的文本翻譯:
原版資源包/texts/zh_TW.lang
commands.scoreboard.teams.list.count=顯示計分板上 %1$d 個隊伍: ###1: Number of Teams
commands.scoreboard.teams.list.empty=記分板上沒有註冊的隊伍 ###
commands.scoreboard.teams.list.entry=- %1$s:「%2$s」有 %3$d 個玩家 ###1: Team Name ##2: Team Display Name ##3: Number of Players
commands.scoreboard.teams.list.player.count=顯示隊伍 %2$s 中 %1$d 個玩家: ###1: Number of Players ##2 Team Name
1.2. Add-On的.lang檔案#
Add-On的.lang檔案還可以翻譯以下內容,按照不同語言顯示對應的文本:
- 物品名稱
- 方塊名稱
- 按鈕文字
- GUI文字
- 行為包/資源包的名稱&說明
範例:在Add-On資源包/texts/
,新增二個副檔名為.lang的檔案,美式英文就是en_US.lang
,繁體中文就是zh_TW.lang
。
├─texts
│ en_US.lang
│ zh_TW.lang
輸入以下內容(#開頭的是註解):
Add-On資源包/texts/en_US.lang
pack.name=Kancolle RP
pack.description=v1.1.0. §lCreator:§r§b§nTwitter@Ivon852. §r§lLicense & credits:§rVoices, music in this Add-on are owned by C2Praparat.
item.spawn_egg.entity.kancolle:akashi.name=Spawn Akashi
entity.kancolle:akashi.name=Akashi
action.interact.akashi.start_repairing=Start repairing
Add-On資源包/texts/zh_TW.lang
##資源包名稱
pack.name=艦隊收藏Add-On資源包
pack.description=v1.1.0. §l作者:§r §b§nTwitter@Ivon852。§r§l版權訊息:§r本Addon內的音聲及音樂為C2機關所持有。
##生怪蛋物品
item.spawn_egg.entity.kancolle:akashi.name=生成 明石
##實體名稱
entity.kancolle:akashi.name=明石
##互動按鈕
action.interact.akashi.start_repairing=開始維修
texts目錄還可以新增languages.json
的檔案,記載這個Add-On所加入的語言:
[
"en_US",
"zh_TW"
]
一般來說,若Add-On裡面沒有玩家目前遊戲的語言,預設都會顯示英文,再不然就是顯示像item.spawn之類的原始字串。
行為包也可以放置.lang檔案,但僅用於翻譯行為包的名稱。
但是,有些Add-On的文本是寫死的 (hard-coded),沒有使用.lang的語法,那就得到行為包裡面看每個檔案的字串了。
1.3. 如何在Add-On檔案使用.lang的語法#
例如資源包manifest.json
的header{}
需改寫成以下樣式,讓name的屬性讀取pack.name
的字串自動翻譯文字:
"header": {
"name": "pack.name",
"description": "pack.description",
"uuid": "e3ce74be-9b4d-4cd3-a948-bea0af40ec81",
"min_engine_version": [
1,
16,
0
],
"version": [
1,
2,
0
]
}
如果某實體的行為包檔案有互動按鈕組件,修改按鈕的interact_text
字串成.lang的語法。
"minecraft:interact": {
"interactions": [
{
"on_interact": {
"filters": {},
"target": "self",
"event": "bf109g6:shoot"
},
"use_item": true,
"cooldown": 1,
"interact_text": "action.interact.bf109g6.fire"
}
]
}
方塊或物品顯示翻譯名稱:
"minecraft:display_name": {
"value": "item.newitem:supersword.name"
}
GUI標題的翻譯:
"minecraft:crafting_table": {
"custom_description": "container.newblock.info",
"grid_size": 3,
"crafting_tags": [
"info"
]
}
2. Rawtext的用法#
Rawtext(原始文字格式)主要用於指令、書本、告示牌,這樣就可以製作多語系的內容。
翻譯文本主要還是寫在.lang檔案裡面,但是語法上比較統一。
2.1. Rawtext基本語法#
{"rawtext":[{"translate":"字串鍵值"}]}
當遊戲中出現{"rawtetext"}
的文本,遊戲會自動從資源包中搜尋字串,並顯示相對應的翻譯文本。
如果使用"with",可指定帶入特定變數,例如這個原本只會顯示「已將(執行者的名字)設為管理員」:
/tellraw @a { "rawtext" : [ { "translate" : "commands.op.success"} ] }
但是若加入"with",原本顯示執行者欄位的變數,便會代換成「已將Steve設為管理員」。
/tellraw @a { "rawtext" : [ { "translate" : "commands.op.success", "with" : [ "Steve" ] } ] }
With甚至可以做到「換行」,見2.3. 多語種書本一節。
2.2. 多語種告示牌#
資源包/texts/zh_TW.lang
sign.my_customtext=星爆...氣流斬!
裝上資源包,並在世界的告示牌輸入:
{"rawtext":[{"translate":"sign.my_customtext"}]}
2.3. 多語種書本#
示範製作一本二頁的雙語書。
資源包/texts/zh_TW.lang
##第一頁,二行,用「%1」換行
book.mystory.page1=凡具有生命者,都不斷的在超越自己。%1%1而人類,你們又做了什麼?
##第二頁,二行,用「%1」換行
book.mystory.page2=成為你自己!你現在所做、所想、所追求的一切,都不是你自己。%1%1每個年輕的心靈日日夜夜都聽見這個呼喚,並且為之戰慄。
裝上資源包,在書本第一頁輸入:
{"rawtext":[{"translate":"book.mystory.page1","with":["n"]}]}
在書本第二頁輸入:
{"rawtext":[{"translate":"book.mystory.page2","with":["n"]}]}
2.4. 多語種指令訊息#
可用於/tellraw
、/titleraw
等指令。
資源包/texts/zh_TW.lang
message.custom.msg1=第一賣冰,第二做醫生。
遊戲中使用該指令:
/tellraw @a {"rawtext":[{"translate":"message.custom.msg1","with":["n"]}]}
呈現結果: