Lang¶
The lang module manages localisation files, custom messages, and per-player language overrides.
Setup¶
Manual setup:
LanguageManager languageManager = new LanguageManager(platform, configManager);
languageManager.init("en");
languageManager.setFallbackLanguage("en");
languageManager.addMagicUtilsMessages();
Messages.register("myplugin", languageManager);
logger.setLanguageManager(languageManager);
Bootstrap helpers perform the same wiring automatically when language support is enabled.
File Layout And Formats¶
Language files live under lang/{lang}.{ext} inside the platform config
directory.
- YAML is supported when
magicutils-config-yamlis installed. - JSON / JSONC work out of the box.
- TOML works when
magicutils-config-tomlis installed.
Messages.register(scope, manager) keeps each plugin or mod isolated. Use
Messages.setLanguageManager(...) only when you need the legacy global
fallback.
Resolving Messages¶
MessagesView messages = Messages.view("myplugin");
Component title = messages.get("myplugin.welcome");
messages.send(playerAudience, "myplugin.goodbye");
String raw = messages.getRaw("myplugin.balance", "amount", "42");
Component rich = messages.get("myplugin.balance", Map.of("amount", "42"));
Messages uses MiniMessage for rich output and supports {placeholder}-style
replacements.
Per-Player Languages¶
languageManager.setPlayerLanguage(playerUuid, "uk");
String msg = languageManager.getMessageForAudience(audience, "myplugin.welcome");
setPlayerLanguage(...) accepts UUIDs, Audience, or player objects that
expose getUniqueId().
Custom Messages¶
Custom messages are persisted under the messages section of the active
language file.
Async And Smart Loading¶
Language loading touches disk. Use the async or smart helpers on blocking-sensitive threads:
languageManager.loadLanguageAsync("en");
languageManager.setLanguageAsync("en");
languageManager.reloadAsync();
languageManager.loadLanguageSmart("en");
languageManager.setLanguageSmart("en");
languageManager.reloadSmart();
Fallbacks And Missing Keys¶
When the current language is missing a key, MagicUtils falls back to the configured fallback language before logging a missing-message warning.