Add-On如何製作多國語言?.lang與Rawtext的用法

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{}需改寫成以下樣式 (參考: 基礎Add-On製作教學!行為包+資源包)

    "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的語法。(詳細參考: Add-On製作基本實體)

    "minecraft:interact": {
        "interactions": [
            {
                "on_interact": {
                    "filters": {},
                    "target": "self",
                    "event": "bf109g6:shoot"
                },
                "use_item": true,
                "cooldown": 1,
                "interact_text": "action.interact.bf109g6.fire"
            }
        ]
    }


    方塊或物品顯示翻譯名稱(參考: Add-On開發教學 #1 新增物品方塊)

    "minecraft:display_name": {
        "value": "item.newitem:supersword.name"
    }


    GUI標題的翻譯(參考:Add-On開發教學 #6 合成台方塊自訂UI)

    "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"]}]}


    呈現結果 (滑鼠點一下即會重新顯示rawtext的語法):


    2.4. 多語種指令訊息

    可用於/tellraw、/titleraw等指令。

    資源包/texts/zh_TW.lang
    message.custom.msg1=第一賣冰,第二做醫生。


    遊戲中使用該指令:
    /tellraw @a {"rawtext":[{"translate":"message.custom.msg1","with":["\n"]}]}

    呈現結果:


    參考資料

    Text Localization. https://wiki.bedrock.dev/concepts/text-localization.html .Minecraft Bedrock Wiki.

    留言

    此網誌的熱門文章

    Minecraft基岩版多人連線教學: 方法一覽

    【詳細解說】什麼是Minecraft基岩版,跟Java版有什麼差?

    Minecraft基岩版安裝模組(Add-On)&資源包&光影教學