コンテンツにスキップ

翻訳と表示テキストのカスタマイズ

discord-mcbeには、さまざまな場面で表示されるメッセージが用意されています。表示する文言を変更したいときは、configファイルのtranslation_overridesを使って、コードを編集せずにカスタマイズできます。

変更したい内容に合わせて、config.jsonの次の設定を使います。

変えたいもの 設定
Botやコンソール全体の言語 language(利用可能な言語)
特定のメッセージだけ translation_overrides

特定のメッセージだけを変更したい場合は、以下のようにtranslation_overridesへ変更したい文言を追加してください:

{
"language": "ja",
"translation_overrides": {
"minecraft.message": "§b[チャット]§r <%0§r> %1§r",
"discord.join": "🎉 %0 さんが参加しました!",
"command.help.commands": "使えるコマンドはこちら:"
}
}
  • 設定全体は消さず、既存のconfig.jsonのtranslation_overridesの部分を編集してください。
  • キーは下の表にあるものだけです。キーの綴りが違う場合や、表にないキーを追加した場合は設定エラーになります。
  • %0などのプレースホルダーは、必要なものを残してください。プレイヤー名やメッセージなどの差し込み部分です。
  • 値全体を"$キー名"にすると、同じ言語の別の翻訳を参照できます(例: "command.help.silent.description": "$common.silent.description")。参照先がその言語にない場合はen-USを使います。参照先が存在しない場合や循環する場合はエラーになります。
  • Minecraft向けの文章では§aなどのカラーコードを使えます。Discord向けの文章ではDiscordのMarkdownとして解釈される記号に注意してください。
  • 変更後はdiscord-mcbeを再起動してください。
キー値継承元
minecraft.connect§9[discord-mcbe]§r §7%0 に接続しました§r
minecraft.message§9[Discord]§r <%0§r> %1§r
minecraft.message.withAttachments§9[Discord]§r <%0§r> §o§7(%1 個のファイル)§r
minecraft.reply§9[Discord]§r <%0§r> §7[返信: <%1> %2]§r %3§r
minecraft.reply.withAttachments§9[Discord]§r <%0§r> §7[返信: <%1§r§7> %2]§r §o§7(%3 個のファイル)§r
discord.ready接続サーバーを起動しました
discord.connectワールドに接続しました
discord.disconnectワールドから切断されました
discord.chat<%0> %1
discord.chat.multipleWorlds[%0] <%1> %2
discord.join%0がゲームに参加しました
discord.leave%0がゲームを退出しました
discord.panel.uptime稼働時間
command.error.catch❌ Interactionの処理中にエラーが発生しました
command.error.noworldsワールドに接続されていません
command.error.nopermissionこのコマンドを使用する権限がありません
command.ping.descriptionワールドとの接続状況を確認します
command.help.description利用できるコマンドを表示します
command.help.commandsコマンド一覧:
command.help.silent.description結果を自分のみに送信するかどうか
command.list.descriptionワールドに接続しているプレイヤー数を表示します
command.list.silent.description結果を自分のみに送信するかどうか
command.list.world.descriptionプレイヤー数を表示するワールドを指定
command.list.playersプレイヤー数
command.panel.descriptionステータスパネルの管理
command.panel.create.description新しいステータスパネルを作成します
command.panel.create.successステータスパネルをチャンネル %0 に作成しました
command.panel.show.descriptionステータスパネルを表示します
command.panel.show.notFoundステータスパネルが未設定です
command.command.descriptionワールドにコマンドを送信します
command.command.command.description実行するコマンド
command.command.raw.descriptionコマンドの返り値をJSON形式で表示します
command.command.silent.description結果を自分のみに送信するかどうか
command.command.world.descriptionコマンドを実行するワールドを指定
command.command.sendingコマンドを送信しています...
console.login%0 としてログインしました
console.socket.ready[Local] SocketBridgeサーバーはポート %0 で待機しています
console.socket.command[Local] Minecraftで次のコマンドを入力して接続してください:
console.script.ready[BDS] Bridgeサーバーはポート %0 で待機しています
console.update.available%0の新しいバージョン v%2 が利用可能です(現在: v%1)
console.connect[%0] ワールドに接続しました
console.disconnect[%0] ワールドから切断されました
console.join[%0] %1がゲームに参加しました
console.leave[%0] %1がゲームを退出しました
console.message[Discord | %0] <%1> %2
console.message.withAttachments[Discord | %0] <%1> (%2 個のファイル)
console.reply[Discord | %0] <%1> [返信: <%2> %3] %4
console.reply.withAttachments[Discord | %0] <%1> [返信: <%2> %3] (%4 個のファイル)
console.command[Discord | %0] <%1> %2
console.chat[%0] <%1> %2
common.silent.description結果を自分のみに送信するかどうか
common.duration%0時間 %1分 %2秒
common.noOnlineWorlds現在オンラインのワールドはありません。
common.worldNotFoundワールド %0 が見つかりませんでした
death.attack.anvil%0は落下してきた金床に押しつぶされた
death.attack.arrow%0は%1に射抜かれた
death.attack.arrow.item%0は%1の%2で射抜かれた
death.attack.bullet%0は%1に狙撃された
death.attack.cactus%0はサボテンが刺さって死んだ
death.attack.cactus.player%0は%1から逃げようとしてサボテンにぶつかった
death.attack.dehydration%0 が脱水症状で死亡
death.attack.drown%0は溺れ死んだ
death.attack.drown.player%0は%1から逃れようとして溺れ死んだ
death.attack.explosion%0は爆発に巻き込まれた
death.attack.explosion.by.bed%0 は[意図的なゲーム デザイン]に倒された
death.attack.explosion.player%0は%1に爆破された
death.attack.fall%0は地面に強く激突した
death.attack.fallingBlock%0は落下してきたブロックに押しつぶされた
death.attack.fireball%0は%1に火だるまにされた
death.attack.fireball.item%0は%1の%2で火だるまにされた
death.attack.fireworks%0は花火の爆発に巻き込まれた
death.attack.flyIntoWall%0は運動エネルギーを体験した
death.attack.generic%0は死んだ
death.attack.indirectMagic%0は%1の魔法で殺された
death.attack.indirectMagic.item%0は%1の%2で殺された
death.attack.inFire%0は炎に巻かれた
death.attack.inFire.player%0は%1と戦いながら火の中へ踏み入った
death.attack.inWall%0は壁の中で窒息した
death.attack.lava%0は溶岩遊泳を試みた
death.attack.lava.player%0は%1から逃れようと溶岩遊泳を試みた
death.attack.lightningBolt%0は雷に打たれた
death.attack.maceSmash.player%0は%1に粉砕された
death.attack.maceSmash.player.item%0 は %1 に %2 で粉砕された
death.attack.magic%0は魔法で殺された
death.attack.magma%0 は足元が溶岩だと気づいた
death.attack.magma.player%0 は %1 のせいで危険な領域を歩いた
death.attack.mob%0は%1に殺害された
death.attack.mob.item%0は%1の%2で殺害された
death.attack.onFire%0はこんがりと焼けた
death.attack.onFire.player%0は%1と戦いながらカリカリに焼けた
death.attack.outOfWorld%0は奈落の底へ落ちた
death.attack.player%0は%1に殺害された
death.attack.player.item%0は%1の%2で殺害された
death.attack.spit%0は%1に丸めてポイされた
death.attack.starve%0は飢え死にした
death.attack.sulfurCube.hot%0 は床だけでなく、すべてが溶岩だったため力尽きた
death.attack.sweetBerry%0はスイートベリーの棘が刺さって死んだ
death.attack.thorns%0は%1を傷つけようとして殺された
death.attack.thrown%0は%1によってぺしゃんこにされた
death.attack.thrown.item%0は%1の%2でぺしゃんこにされた
death.attack.trident%0は%1に刺殺された
death.attack.wither%0は干からびた
death.attack.freeze%0は凍え死んだ
death.attack.sonicBoom%0は衝撃波に消し飛ばされた
death.attack.sonicBoom.player%0は%1から逃れようとして衝撃波に消し飛ばされた
death.attack.stalactite%0は落ちてきた鍾乳石に串刺しにされた
death.attack.stalagmite%0は石筍に突き刺さった
death.fell.accident.generic%0は高い所から落ちた
death.fell.accident.ladder%0ははしごから落ちた
death.fell.accident.vines%0はツタから滑り落ちた
death.fell.accident.water%0 は水から落ちた
death.fell.assist%0は%1に落とされる運命だった
death.fell.assist.item%0は%1の%2で落とされる運命だった
death.fell.finish%0は高いところから落下し、%1によってとどめを刺された
death.fell.finish.item%0は高いところから落下し、%1の%2によってとどめを刺された
death.fell.killer%0は落ちる運命だった
entity.agent.nameエージェント
entity.area_effect_cloud.nameエリアエフェクトクラウド
entity.armadillo.nameアルマジロ
entity.armor_stand.name防具立て
entity.arrow.name矢
entity.bat.nameコウモリ
entity.bee.nameミツバチ
entity.blaze.nameブレイズ
entity.boat.nameボート
entity.bogged.nameボグド
entity.breeze.nameブリーズ
entity.breeze_wind_charge_projectile.nameウィンドチャージ
entity.cat.nameネコ
entity.cave_spider.name洞窟グモ
entity.chicken.nameニワトリ
entity.cow.nameウシ
entity.creaking.nameクリーキング
entity.creeper.nameクリーパー
entity.dolphin.nameイルカ
entity.goat.name山羊
entity.panda.nameパンダ
entity.donkey.nameロバ
entity.dragon_fireball.nameドラゴンの火の玉
entity.drowned.nameドラウンド
entity.egg.name卵
entity.elder_guardian.nameエルダーガーディアン
entity.ender_crystal.name果てのクリスタル
entity.ender_dragon.nameエンダードラゴン
entity.enderman.nameエンダーマン
entity.endermite.nameエンダーマイト
entity.ender_pearl.nameエンダーパール
entity.evocation_illager.nameエヴォーカー
entity.evocation_fang.nameエヴォーカーの牙
entity.eye_of_ender_signal.nameエンダーアイ
entity.falling_block.name落下中のブロック
entity.fireball.name火の玉
entity.fireworks_rocket.nameロケット花火
entity.fishing_hook.name釣り針
entity.fish.clownfish.nameクマノミ
entity.fox.nameキツネ
entity.cod.nameタラ
entity.pufferfish.nameフグ
entity.salmon.nameサケ
entity.tropicalfish.name熱帯魚
entity.axolotl.nameウーパールーパー
entity.ghast.nameガスト
entity.glow_squid.nameヒカリイカ
entity.piglin_brute.nameピグリンブルート
entity.guardian.nameガーディアン
entity.hoglin.nameホグリン
entity.horse.nameウマ
entity.husk.nameハスク
entity.ravager.nameラヴェジャー
entity.iron_golem.nameアイアンゴーレム
entity.item.nameアイテム
entity.leash_knot.nameリードの結び目
entity.lightning_bolt.name雷
entity.lingering_potion.name残留ポーション
entity.llama.nameラマ
entity.trader_llama.name商人のラマ
entity.llama_spit.nameラマの唾
entity.magma_cube.nameマグマキューブ
entity.minecart.nameトロッコ
entity.chest_minecart.nameチェスト付きトロッコ
entity.command_block_minecart.nameコマンドブロック付きトロッコ
entity.furnace_minecart.nameかまど付きトロッコ
entity.hopper_minecart.nameホッパー付きトロッコ
entity.tnt_minecart.nameTNT付きのトロッコ
entity.mule.nameラバ
entity.mooshroom.nameムーシュルーム
entity.moving_block.name動いているブロック
entity.npc.nameNPC
entity.ocelot.nameヤマネコ
entity.ominous_item_spawner.name不吉なアイテム スポナー
entity.painting.name絵画
entity.parrot.nameオウム
entity.phantom.nameファントム
entity.pig.nameブタ
entity.piglin.nameピグリン
entity.pillager.nameピリジャー
entity.player.nameプレイヤー
entity.polar_bear.nameシロクマ
entity.rabbit.nameウサギ
entity.sheep.nameヒツジ
entity.shulker.nameシュルカー
entity.shulker_bullet.nameシュルカーの弾
entity.silverfish.nameシルバーフィッシュ
entity.skeleton.nameスケルトン
entity.skeleton_horse.nameスケルトンホース
entity.stray.nameストレイ
entity.slime.nameスライム
entity.small_fireball.name小さな火の玉
entity.sniffer.nameスニッファー
entity.snowball.name雪玉
entity.snow_golem.nameスノウゴーレム
entity.spider.nameクモ
entity.splash_potion.nameポーション
entity.squid.nameイカ
entity.strider.nameストライダー
entity.tnt.nameTNT 火薬のブロック
entity.thrown_trident.nameトライデント
entity.tripod_camera.name三脚カメラ
entity.turtle.nameカメ
entity.unknown.name不明
entity.vex.nameヴェックス
entity.villager.name村人
entity.villager.armor防具鍛冶
entity.villager.butcher肉屋
entity.villager.cartographer製図家
entity.villager.cleric聖職者
entity.villager.farmer農民
entity.villager.fisherman釣り人
entity.villager.fletcher矢師
entity.villager.leather革細工師
entity.villager.librarian司書
entity.villager.shepherd羊飼い
entity.villager.tool道具鍛冶
entity.villager.weapon武器鍛冶
entity.villager.mason石工
entity.villager.unskilled未熟な村人
entity.villager_v2.name村人
entity.vindicator.nameヴィンディケーター
entity.wandering_trader.name行商人
entity.wind_charge_projectile.nameウィンドチャージ
entity.witch.nameウィッチ
entity.wither.nameウィザー
entity.wither_skeleton.nameウィザースケルトン
entity.wither_skull.nameウィザーの頭蓋骨
entity.wither_skull_dangerous.nameウィザーの頭蓋骨
entity.wolf.nameオオカミ
entity.xp_orb.name経験値オーブ
entity.xp_bottle.nameエンチャントの瓶
entity.zoglin.nameゾグリン
entity.zombie.nameゾンビ
entity.zombie_horse.nameゾンビホース
entity.zombie_pigman.nameゾンビピグリン
entity.zombie_villager.name村人ゾンビ
entity.zombie_villager_v2.name村人ゾンビ
entity.frog.nameカエル
entity.tadpole.nameオタマジャクシ
entity.warden.nameウォーデン
entity.allay.nameアレイ
entity.chest_boat.nameチェスト付きのボート
entity.camel.nameラクダ
entity.chest_raft.nameチェスト付きのイカダ
entity.happy_ghast.nameハッピーガスト
entity.copper_golem.name銅ゴーレム
entity.sulfur_cube.nameサルファーキューブ
entity.nautilus.nameオウムガイ
entity.zombie_nautilus.nameゾンビオウムガイ
entity.parched.nameパーチド
entity.camel_husk.nameラクダハスク

開発者・コントリビューター向け

Section titled “開発者・コントリビューター向け”

翻訳は「キー」と「値」の組み合わせです。コードは画面に表示する文章を直接書かず、たとえばdiscord.joinというキーを指定します。

層 場所 役割
通常の表示テキスト projects/server/src/assets/locales/<locale>.json Discord、コンソール、Minecraftチャット、コマンド説明など
Minecraft由来のテキスト <locale>.generated.json 死亡メッセージとエンティティ名。Mojangの言語ファイルから生成
実行時の言語 config.jsonのlanguage 利用可能なロケールを選択
利用者の上書き config.jsonのtranslation_overrides 選択中の言語の値を個別に置換

起動時には、選択した言語の通常ファイルと.generated.jsonを結合し、そのあとtranslation_overridesを適用します。選択した言語にキーがない場合は基準ロケール(en-US)へフォールバックし、それでもなければキーそのものを表示します。

translation_overridesは言語別の入れ子オブジェクトではなく、config.languageで選んだ実行時マップへ適用されます。Botの言語を切り替えると、同じ上書き値がその言語にも適用されます。言語ごとに異なる文面にしたい場合は、各JSONを変更してください。

config.translation_overridesで上書きできるのは、基準ロケール(en-US)に存在するキーです。言語ファイルにだけ存在するキーは上書き対象ではありません。表の継承元 (Inherited from)は、選択言語に値がなく基準ロケールから補われた場合だけ表示されます。

文章に値を埋め込む場合は%0、%1のようなプレースホルダーを使います。コードから渡された値が順番に置き換わります。 $キー名の参照でも、参照先のプレースホルダーがそのまま使われます。

キー: minecraft.message
値: §9[Discord]§r <%0§r> %1§r
結果: §9[Discord]§r <Steve> hello§r

通常の表示テキストを変更する

Section titled “通常の表示テキストを変更する”

Discord、コンソール、Minecraftチャットの枠やコマンド説明など、discord-mcbe独自の文章は次のファイルを編集します。

projects/server/src/assets/locales/<locale>.json

基準となるロケール(現在はen-US)のキーと引数を基準に、各ロケールで同じキーを持たせ、引数の数と%0から始まる番号を揃えてください。キーを追加・削除したら次を実行して、型と設定スキーマを更新します。

ターミナルウィンドウ
pnpm --filter @discord-mcbe/server generate-lang-types
pnpm --filter @discord-mcbe/server generate-schema

Minecraftの死亡メッセージとエンティティ名について

Section titled “Minecraftの死亡メッセージとエンティティ名について”

death.*とentity.*は、通常ファイルではなく次の生成ファイルに入ります。

projects/server/src/assets/locales/<locale>.generated.json

これらは extract-minecraft-lang スクリプトを用いて Mojang/bedrock-samples の言語ファイルから抽出しています。%1$sのようなMojang形式のプレースホルダーは、discord-mcbeでは%0形式に変換されます。 そのため、手動では書き換えないでください。

ターミナルウィンドウ
pnpm --filter @discord-mcbe/server extract-minecraft-lang
pnpm --filter @discord-mcbe/server generate-lang-types
pnpm --filter @discord-mcbe/server generate-schema

Mojang由来ではない独自メッセージを追加するなら、各ロケールの通常JSONへ追加してください。

  1. projects/server/src/assets/locales/<locale>.jsonへ翻訳を追加する。
  2. Minecraftから追加する言語の翻訳を抽出するため、projects/server/scripts/extract-minecraft-lang.tsの変数localesへ言語を追加する。
  3. projects/server/src/util/i18n.tsのtemplateMapへそれらのJSONをimportして登録する。
  4. generate-lang-typesとgenerate-schemaを実行する。
  5. 正しく表示されるか確認する。