Skip to content

ShatteredSoftware/mini18n

Repository files navigation

mini18n

License GitHub Issues Discord Ko-Fi


A tiny (12kb) internationalization library.

General Usage

public class Example {
    public static void main(String[] args) {
        // Create a new MessageSet
        var messageSet = new MessageSet();

        // Add a message
        messageSet.addMessage(Locale.ENGLISH, "world_greeting", "Hello, world!");
        // And in another language
        messageSet.addMessage(Locale.forLanguageTag("es"), "world_greeting", "¡Hola Mundo!");

        messageSet.get("greeting", Locale.US); // "Hello, world!"

        // Add a message with a placeholder
        messageSet.addMessage(Locale.ENGLISH, "greeting", "Hello, %name%!");
        messageSet.addMessage(Locale.forLanguageTag("es"), "greeting", "¡Hola %name%!");

        // Get the message, replacing placeholders:
        System.out.println(messageSet.get(Locale.ENGLISH, "greeting", new LinkedHashMap<>() {{
            put("name", "Hunter");
        }})); // "Hello, Hunter!"

        // Get a message, pluralized:
        messageSet.addMessage(Locale.ENGLISH, "dollars.one", "You have %count% dollar.");
        messageSet.addMessage(Locale.ENGLISH, "dollars.other", "You have %count% dollars.");
        System.out.println(messageSet.get(Locale.ENGLISH, "dollars", new LinkedHashMap<>() {{
            put("count", 5);
        }})); // "You have 5 dollars."
        
        // Get a message, ordinal:
        messageSet.addMessage(Locale.ENGLISH, "pages.one", "%count%st page");
        messageSet.addMessage(Locale.ENGLISH, "pages.two", "%count%nd page");
        messageSet.addMessage(Locale.ENGLISH, "pages.few", "%count%rd page");
        messageSet.addMessage(Locale.ENGLISH, "pages.other", "%count%th page");
        System.out.println(messageSet.get(Locale.ENGLISH, "pages", new LinkedHashMap<>() {{
            put("count", 10);
            put("ordinal", true);
        }})); // "10th Page"
        
        // Get a message and combine it with another message:
        messageSet.addMessage(Locale.ENGLISH, "home", "Welcome to the home page! %message:greeting%");
        System.out.println(messageSet.get(Locale.ENGLISH, "home", new LinkedHashMap<>() {{
            put("name", "Hunter");
        }})); // "Welcome to the home page! Hello, Hunter!"
    }
}

Use it in a Minecraft Plugin

Gradle:

Add JitPack and the dependency:

repositories {
    maven {
        url = "https://jitpack.io"
        name = "JitPack"
    }
}

dependencies {
    implementation 'com.github.shatteredsoftware:mini18n:1.0.0'
}

General Usage:

import java.io.File;
import org.bukkit.plugin.java.JavaPlugin;
import software.shattered.mini18n.MessageSet;

public class MyPlugin extends JavaPlugin {
    private final MessageSet messageSet = new MessageSet();

    @Override
    public void onLoad() {
        loadMessages();
    }
    
    private void loadMessages() {
        // Save the default messages
        saveResource("en.yml", false);
        
        // Load the default messages
        var config = YamlConfiguration.loadConfiguration(new File(getDataFolder(), "en.yml"));
        config.getConfigurationSection("messages").getKeys(true).forEach(key -> {
            var message = config.getString("messages." + key);
            messageSet.addMessage(Locale.ENGLISH, key, message);
        });
    }
}

About

A tiny i18n library with unicode pluralization and event hooks.

Resources

License

Code of conduct

Stars

Watchers

Forks

Sponsor this project

Packages

No packages published

Languages