Language System
Complete guide to EssentialsC's multi-language support. Configure translations, allow players to switch languages in-game, and customize every message with MiniMessage formatting.
On This Page
How It Works
EssentialsC features a powerful multi-language system with 30 built-in languages. Players can either use their client's auto-detected language or manually set a preferred language that persists across sessions.
Auto-Detection
By default, the plugin automatically detects each player's client language and serves messages in that locale if available.
Persistent Storage
When players manually set a language, their preference is stored in memory and persists until they reset it or the server restarts.
Fallback System
If a message key is missing in the player's selected language, the system automatically falls back to the default language.
Default Language Configuration
The default language is set in plugins/EssentialsC/config.yml. This language serves as the fallback when a player's selected language is unavailable or when a specific message key is missing.
The server's default language code. This language is used for console messages, broadcast messages, and as a fallback when translations are missing. Must match a filename in the lang/ folder (without the .json extension).
# config.yml
default-language: en_US
# Change to German
default-language: de_DE
# Change to Spanish
default-language: es_ES
Player Commands
Players can switch languages in-game using the /language command (alias: /lang). This allows them to override the auto-detected language with their preferred choice.
Base command to view current language status and available options. Shows whether the player is using auto-detection or a custom language setting.
/language
# Shows: "Current language: en_US (auto)" or "Current language: de_DE (custom)"
Set a specific language for the player. The language code must match a file in the lang/ folder. The setting persists until reset.
/language set de_DE
/language set es_ES
/language set ja_JP
Reset language to auto-detection mode. The plugin will resume using the player's client locale to determine which language file to use.
/language reset
# Resets to auto-detected language based on client settings
Display all available languages installed on the server. Shows every .json file found in the plugins/EssentialsC/lang/ directory.
/language list
# Output: "Available languages: en_US, de_DE, es_ES, fr_FR..."
Display help information about all language commands and their usage.
Shortcut syntax - directly specify a language code to quickly switch without using the "set" subcommand. If the code is invalid, an error is shown.
/language de_DE
# Equivalent to: /language set de_DE
Language File Structure
Language files are stored as JSON in plugins/EssentialsC/lang/. Each file contains key-value pairs where the key is a message identifier and the value is the formatted message string using MiniMessage syntax.
Language files must follow the naming convention <locale>.json where locale is a standard language code (e.g., en_US, de_DE, es_ES). Files are automatically extracted from the plugin jar on first run.
plugins/EssentialsC/
├── config.yml
├── lang/
│ ├── en_US.json
│ ├── de_DE.json
│ ├── es_ES.json
│ ├── fr_FR.json
│ └── ... (30 total files)
Each language file is a flat JSON object with string keys and string values. Keys use dot notation for organization (e.g., command.usage.heal, heal.success). Values use MiniMessage formatting for colors and styles.
{
"prefix": "[EssC]",
"heal.success": " You have been fully healed!",
"heal.success.others": " Successfully healed ",
"error.no_permission": " You don't have permission to use this."
}
The prefix key is special - it defines the plugin prefix used across all messages. Other messages can reference it with <prefix> which will be automatically replaced. The error.missing_key key is used when a requested message key doesn't exist in the file.
{
"prefix": "[EssC]",
"error.missing_key": "Missing key: "
}
Placeholders
Messages support dynamic placeholders that are replaced at runtime with actual values. Placeholders are defined in angle brackets and populated by the plugin when sending messages.
Automatically replaced with the value of the prefix key from the language file. Use this at the start of messages to maintain consistent branding.
"heal.success": " You have been healed!"
// Output: [EssC] You have been healed!
Replaced with player usernames. Different keys are used depending on context: <player> for general references, <target> for the recipient of an action, <sender> for the initiator.
"heal.success.others": "Healed "
"tpa.sent": "Request sent to "
"msg.incoming": "[From ]"
Numeric values for economy-related messages. Automatically formatted with the configured currency settings.
"pay.sent": "Sent to "
"balance.self": "Your balance: "
"shop.purchase-success": "Bought for !"
Time-related values for cooldowns, warps, and timed actions. Displayed in the most appropriate unit (seconds, minutes, hours).
"tpa.warmup": "Teleporting in seconds..."
"warp.cooldown": "Wait
Names of specific game objects like kits, warps, homes, and worlds. Used when referencing these features in messages.
"kit.claim.success": "Claimed kit!"
"warp.success": "Teleported to !"
"home.set.success": "Home '' set!"
Used for error messages and system feedback. <key> shows missing message keys, <lang> and <language> display language codes.
"error.missing_key": "Missing key: "
"language.set.success": "Language set to !"
"language.error.not_found": "Language '' not found"
MiniMessage Formatting
EssentialsC uses MiniMessage for rich text formatting. This allows for modern Minecraft text features including gradients, hover events, click events, and more without using legacy color codes.
Use 6-digit hex codes for custom colors. Essential for maintaining brand consistency and creating visually appealing messages.
"prefix": "[EssC]"
"heal.success": "You have been healed!"
"error.no_permission": "No permission!"
Create smooth color transitions between two or more colors. Supports hex codes and named colors.
"welcome.message": "Welcome to the server!"
"rank.vip": "VIP Member"
Basic text decorations: <b> for bold, <i> for italic, <u> for underline, <st> for strikethrough.
"important": "Important: Read this!"
"info": "This text is italicized"
Make text clickable. Common actions include run_command, suggest_command, open_url, and copy_to_clipboard.
"tpa.received": "/tpaccept to accept"
Show additional text when hovering over a component. Useful for tooltips and extra information.
"kit.info": "Starter Kit"
Creating Custom Languages
You can create custom language files or modify existing ones to match your server's branding and tone.
1. Copy an existing language file (e.g., en_US.json)
2. Rename it to your locale code (e.g., custom.json)
3. Edit the message values while keeping the keys intact
4. Save to plugins/EssentialsC/lang/
5. Players can use /language set custom