AutoLang

A lightweight plugin that supports up to 100 languages, automatically translating chat messages into each player’s preferred language for seamless communication.

1,01k

AutoLang

AutoLang - Automatic Minecraft Chat Translation

AutoLang is a sophisticated Minecraft plugin designed to break down language barriers by providing real-time, bi-directional chat translation. Built with performance and flexibility in mind, it seamlessly integrates with your existing server setup while providing extensive customization options for server administrators.

Table of Contents

1. Core Features 2. Installation Guide 3. Configuration Reference 4. Language Support 5. Command Reference 6. Advanced Usage 7. Troubleshooting 8. Performance Tuning 9. API Integration 10. Frequently Asked Questions

Core Features

Intelligent Language Detection

AutoLang employs a sophisticated two-tier detection system: 1. Fallback Detection: Uses the Lingua library, a highly accurate language identification system that analyzes character patterns and statistical properties of text 2. Fallback Detection: Falls back to a lightweight heuristic-based detector if Lingua cannot be initialized or if performance is a concern

Translation Architecture

- Bidirectional Translation: All translation operations are performed asynchronously to prevent server lag - Bidirectional Translation: Implements an LRU (Least Recently Used) cache with configurable size and TTL to minimize redundant translations - Bidirectional Translation: Maintains message context for accurate bidirectional translations between any supported language pairs

Player Experience

- Context Preservation: Works with existing chat plugins and permission systems - Context Preservation: Detects and respects player client language settings (Paper servers only) - Context Preservation: Players can opt-out of translation or view original messages - Context Preservation: Maintains formatting, colors, and clickable elements in translated messages

Installation Guide

System Requirements

- Storage: Paper/Spigot 1.21.1 or higher (recommended for full feature support) - Storage: Java 21 or later - Storage: Minimum 4GB RAM (6GB+ recommended for larger servers) - Storage: 1GB free space (more if using local translation models)

Step-by-Step Installation

1. Download the latest AutoLang JAR from the Modrinth releases page 2. Place the JAR file in your server's `plugins/` directory 3. Start your server to generate the default configuration 4. Stop the server and edit `plugins/AutoLang/config.yml` to your preferences 5. Restart your server to apply changes

Initial Setup Recommendations

1. For New Servers: - Start with default settings - Test basic functionality with a few languages - Gradually enable additional features

2. For Existing Servers: - Test in a staging environment first - Consider starting with translation disabled (`autodetect.enabled: false`) - Gradually roll out to staff before enabling for all players

Configuration Reference

Core Settings

```yaml

Default server language (must be a configured language code)

default-language: "en"

Maximum concurrent translation threads

max-translation-threads: 4

Maximum time to wait for a translation (milliseconds)

translation-timeout-ms: 3000

Enable debug logging (verbose)

debug: false

Language Configuration

AutoLang provides flexible language management with support for automatic language discovery and manual overrides. The configuration is structured to be both powerful and easy to use.

```yaml languages:

Auto-fetch supported languages from LibreTranslate

When enabled, the plugin will query your LibreTranslate instance for available languages

auto-from-libretranslate: true

Whitelist specific language codes (case-insensitive)

Example: ["en", "es", "fr", "de", "ja"]

If empty, all languages from the source will be included

include: []

Blacklist specific language codes

Example: ["zh-tw", "pt-br"] (to exclude specific regional variants)

These languages will be excluded even if included above or in static

exclude: []

Static language definitions

These are used in three scenarios:

1. As fallback if auto-fetching fails

2. To add languages not provided by your LibreTranslate instance

3. To override properties of auto-fetched languages

static: - code: "en" name: "English" - code: "es" name: "Español"

Override display names for specific language codes

This only affects how languages are displayed to players

Format: {code: "display name"}

overrides: - code: "zh" name: "简体中文" # Simplified Chinese - code: "zh-tw" name: "繁體中文" # Traditional Chinese - code: "pt-br" name: "Português (Brasil)" # Brazilian Portuguese

Language detection settings

detection:

Minimum confidence threshold (0.0 to 1.0)

Lower values may increase false positives

Higher values may fail to detect some languages

confidence-threshold: 0.75

Number of messages to analyze before making a detection

More messages increase accuracy but delay detection

min-messages: 3

Maximum message length to analyze (characters)

Longer messages provide more context but use more resources

max-message-length: 1000

Client language integration (Paper servers only)

client-locale:

Enable/disable client language detection

enabled: true

Automatically set the detected language

auto-accept: true

Notify players when their language is auto-detected

notify-on-detect: true

Message format for language detection notification

Available placeholders: %player%, %lang%, %code%

detection-message: "&aYour chat language has been set to %lang%"

Formatting options for translated messages

formatting:

Format for translated messages

Available placeholders:

%player% - Original message sender

%message% - Translated message

%original% - Original message (if show-original is true)

%lang% - Target language name

%code% - Target language code

format: "&7[%lang%] &f%player%&7: &r%message%"

Show original message after translation

show-original: false

Format for original message when show-original is true

original-format: " &7(Original: %original%)"

Message cooldown settings

cooldown:

Global cooldown between messages (seconds)

global: 0.5

Per-player cooldown (seconds)

per-player: 2.0

Message to show when cooldown is active

Available placeholders: %time%

message: "&cPlease wait %time% seconds before sending another message."

Anti-spam settings

anti-spam:

Enable/disable anti-spam

enabled: true

Maximum similar messages allowed within time window

max-similar: 3

Time window for similar message detection (seconds)

time-window: 10

Message to show when anti-spam is triggered

message: "&cPlease avoid sending similar messages in quick succession."

Translation Engine Configuration

AutoLang supports multiple translation backends, each with its own configuration options. Choose the one that best fits your server's needs.

1. LibreTranslate (Recommended)

LibreTranslate is an open-source translation API that supports over 100 languages. It can be self-hosted or used against public instances.

```yaml libretranslate:

Enable/disable the LibreTranslate integration

enabled: true

Base URL of your LibreTranslate instance

Examples:

- Local: "http://127.0.0.1:5000"

- Public: "https://libretranslate.com"

base-url: "http://127.0.0.1:5000"

Required when connecting to non-localhost URLs

allow-remote: false

Disable SSL certificate validation (for self-signed certificates)

insecure-tls: false

API key if required by your LibreTranslate instance

api-key: ""

Request timeout in seconds

timeout: 30

Maximum retry attempts for failed requests

max-retries: 3

Delay between retry attempts in seconds

retry-delay: 2

Automatic Language Detection

auto-detect: true

Preferred language pairs for better quality

Format: "source-target"

preferred-pairs: - "en-es" - "es-en" - "fr-en" - "en-fr"

Managed LibreTranslate Server (Optional)

Auto-downloads and manages a local LibreTranslate instance

managed: enabled: false

Command to start LibreTranslate

Examples:

- "libretranslate" (if installed via pip)

- "python -m libretranslate"

- "docker run -p 5000:5000 libretranslate/libretranslate"

command: "libretranslate"

Port to run the server on

port: 5000

Host to bind to (use 0.0.0.0 for network access)

host: "127.0.0.1"

Limit loaded languages to reduce memory usage

Example: "en,es,fr,de,ru,zh,ja,ko"

load-only: ""

Automatically download language models on first run

download-models: true

Path to store models (default: ~/.local/share/libretranslate)

models-path: ""

Additional command-line arguments

Example: "--load-only en,es --threads 4"

extra-args: ""

Environment variables

env:

Example: "CUDA_VISIBLE_DEVICES=0"

Example: "PUID=1000"

Health check settings

health-check:

Enable health checks

enabled: true

Health check interval in seconds

interval: 30

Timeout for health check requests in seconds

timeout: 5

Number of consecutive failures before considering the service unhealthy

threshold: 3

Automatic restart settings

auto-restart:

Enable automatic restart on failure

enabled: true

Maximum restart attempts before giving up

max-attempts: 5

Delay between restart attempts in seconds

delay: 10

Maximum uptime in minutes (0 = no limit)

max-uptime: 0

Alternative Translation Backend

Uncomment and configure if not using LibreTranslate

#

local-model:

# Enable local model translation

enabled: false

#

# Path to your local translation command/script

# The command should accept text via STDIN and output translation to STDOUT

command: "/path/to/translator"

#

# Working directory for the command

working-directory: "/path/to/working/directory"

#

# Command-line arguments

# Use placeholders: {from} {to} for language codes

args: "--from {from} --to {to}"

#

# Environment variables

env:

MODEL_PATH: "/path/to/model"

DEVICE: "cuda" # or "cpu"

#

# Timeout in seconds

timeout: 30

#

# Maximum concurrent translations

max-concurrent: 2

#

# Input/output encoding (default: UTF-8)

encoding: "UTF-8"

#

# Error handling

error-handling:

# Maximum retry attempts

max-retries: 3

#

# Delay between retries in seconds

retry-delay: 2

#

# Fallback language when translation fails

fallback-language: "en"

#

External API (Example for Google Translate)

#

google-translate:

enabled: false

api-key: "your-api-key"

project-id: "your-project-id"

location: "global"

model: "projects/{project-id}/locations/{location}/models/general/nmt"

Detection Settings

```yaml detector:

"lingua" (more accurate) or "heuristic" (lighter)

type: "lingua"

Auto-detection settings

autodetect: enabled: true

Minimum messages before attempting detection

min-messages-before-detect: 3

Confidence threshold (0.0-1.0)

confidence-threshold: 0.80

Client language detection (requires Paper)

client-locale: enabled: true

Auto-set language on first join

auto-accept: true

Prompt on client language change

on-change: true ```

Storage

```yaml storage:

"sqlite" or "yaml"

type: "sqlite"

Only for SQLite

sqlite-file: "plugins/AutoLang/languages.db"

Cache settings

cache: enabled: true

Maximum cached translations

size: 500

Time-to-live in seconds (0 = no expiration)

ttl-seconds: 0 ```

Commands & Permissions

Commands

- `/lang` - Show current language - `/lang set <code>` - Set your language - `/lang list` - List available languages - `/lang reload` - Reload configuration - `/lang health` - Check LibreTranslate status

Permissions

- `autolang.use` - Allow using language commands (default: true) - `autolang.admin` - Allow admin commands like reload (default: op) - `autolang.bypass` - Bypass translation (see all messages in original language)

Language Support

AutoLang supports all languages available in your LibreTranslate instance (100+ languages by default). The plugin automatically fetches and caches the available languages on startup.

Common Language Codes

- `en` - English - `es` - Spanish - `fr` - French - `de` - German - `ru` - Russian - `zh` - Chinese (Simplified) - `ja` - Japanese - `ar` - Arabic - `pt` - Portuguese - `hi` - Hindi

Installation

1. Download the latest version from Modrinth 2. Place the JAR in your server's `plugins/` folder 3. Start your server to generate the config 4. Edit `plugins/AutoLang/config.yml` to your preferences 5. Run `/reload` or restart your server

🔧 Troubleshooting

LibreTranslate Connection Issues

- Ensure `allow-remote: true` if using a remote server - For HTTPS with self-signed certs, enable `insecure-tls: true` - Check server logs for connection errors

Language Detection

- Lingua detector requires at least 2 languages configured - More messages improve detection accuracy - Try the heuristic detector if Lingua causes performance issues

Performance

- Adjust `max-translation-threads` based on your server's CPU - Enable caching to reduce API calls - Consider a local LibreTranslate instance for better performance

Dependencies

- Optional: Java 21+ - Optional: Paper/Spigot 1.21.1+ (for full feature support) - Optional: LibreTranslate server (local or remote)

License

AutoLang is licensed under the MIT License.

Support

Found a bug or have a feature request? Open an issue on GitHub.

Metrics

AutoLang uses bStats for anonymous usage statistics. You can opt out in the `bStats/config.yml` file.

ADS