Skip to content

Latest commit

 

History

History
108 lines (80 loc) · 4.73 KB

languages.md

File metadata and controls

108 lines (80 loc) · 4.73 KB
title Languages
description Choose a language, edit messages, and translate any Volmit plugin
published true
date 2026-10-13 14:42:49 UTC
tags languages, localization
editor markdown
dateCreated 2026-09-19 00:00:00 UTC

Volmit plugins share language controls for server defaults, personal choices, and message editing. This page describes the shared behavior. Each plugin's localization reference documents its file paths and exceptions.

Pick a language

Command Who What it does
/<plugin> language anyone Opens the clickable picker
/<plugin> language self <locale> player Sets your own language
/<plugin> language self reset player Follow the server default again
/<plugin> language server <locale> admin Changes the server default
/<plugin> language server edit [locale] admin Opens the in-game message editor
/volmit plugins languages [locale] admin Changes the server default for every enabled Volmit plugin at once

/volmit plugins languages keeps everyone's personal choice and offers only locales that every enabled plugin has in common.

Your personal choice affects only you. Console output and players who have not chosen use the server default. Choices are stored by UUID and survive restarts.

The server default is also a config key, so you can set it before first start. Most plugins call it language; Iris, ShapedPortals, GamemodeSwitcher, SkyPrime, and Static use general.language. Each plugin's own localization page names its file.

Permissions

Personal selection needs both the plugin's own node and the shared one:

Node Default Grants
<plugin>.language.self true Choosing your own language for that plugin
volmit.language.self true Shared requirement for any personal selection
volmit.language.admin op Changing a server default, and the message editor

Denying either personal node blocks the picker, direct selection, and self reset. Changing a server default accepts volmit.language.admin or that plugin's own administration permission.

Available languages

en_US  de_DE  es_ES  fi_FI  fr_FR  he_IL  it_IT  ja-JP  ko_KR
lt_LT  nl_NL  pl_PL  pt_PT  ru_RU  tr_TR  vi_VI  zh_CN  zh_TW

ja-JP uses a hyphen where every other id uses an underscore. That is the literal identifier, so write language = "ja-JP".

English is built in. Most plugins download another language when you first select it, then use the local plugins/<Plugin>/languages/<locale>.toml file offline. Existing files keep local edits. SkyPrime bundles all 18 catalogs and needs no language download.

When something is missing

Missing or invalid messages fall back to built-in English one key at a time, and the rest of the translation keeps working. A file that will not parse at all uses English until you fix it. A download that fails leaves your selection saved and shows English in the meantime.

Edit messages

Either edit plugins/<Plugin>/languages/<locale>.toml directly, or run /<plugin> language server edit for an in-game editor. Both apply on save without changing anyone's selected language, and the editor validates before it writes.

Files use grouped TOML sections, so [command.feedback] with saved = "..." is the key command.feedback.saved:

[command.feedback]
saved = "&aSaved &f{file}&a."

Keep every {placeholder} the English source uses. Order and repetition are free, but adding an unknown name or dropping a required one makes that one message fall back to English. Values a player supplies have their color codes stripped and are inserted as plain text, so a player name cannot smuggle formatting into a message.

Colors are &0–&f, decorations &k–&o, &r to reset, and &#RRGGBB for hex. Each generated file starts with comments explaining its prefix, formatting, and variables in that language.

The plugin name label

Most plugins put their displayed name in runtime.prefix and reference it from messages, help, and menus as {prefix}, so editing that one value renames it everywhere. Emptying runtime.prefix hides the name; the › separator lives in each message template, so remove {prefix} and its separator from a template to drop the label from that one message.

[runtime]
prefix = "<bold><gradient:#6f35c5:#35135f>ShapedPortals</gradient></bold>"

Wormholes is the exception: there {prefix} is the start of a portal import code, not a name label.

Translating

The translation sources live in each plugin's repository. To contribute a translation, edit its source file and submit the change. Editing only your server's copy does not update the shared catalog. See Contributing.