Skip to main content
Skript supports multiple languages for error messages, command outputs, and system messages. You can use built-in translations or create custom language files for your server.

Available Languages

Skript includes the following languages out of the box:

English

english.lang

German

german.lang

French

french.lang

Spanish

spanish.lang

Polish

polish.lang

Russian

russian.lang

Korean

korean.lang

Japanese

japanese.lang

Simplified Chinese

simplifiedchinese.lang

Turkish

turkish.lang

Dutch

dutch.lang

Catalan

catalan.lang

Setting the Language

Change Skript’s language in config.sk:
language: english
language
string
default:"english"
Language name in lowercase without spaces. Examples: english, german, simplifiedchinese
Not all features are fully translated in every language. Untranslated parts default to English.

Language File Structure

Language files use Skript’s configuration syntax (not YAML):
# Default English language file

# Which version of Skript this language file was written for
version: @version@

# What null (nothing) should show up as in a string/text
none: <none>

# -- Skript --
skript:
	copyright: ~ created by & © Peter Güttinger aka Njol ~
	prefix: <gray>[<gold>Skript<gray>] <reset>
	quotes error: Invalid use of quotes ("). If you want to use quotes in "quoted text", double them: "".
Each entry defines a message key and its translated text.

Language File Locations

Skript loads language files from two locations (in priority order):
  1. External folder (higher priority): plugins/Skript/lang/
  2. Internal JAR (lower priority): lang/ folder inside Skript.jar
Custom files in plugins/Skript/lang/ override built-in translations. Both files are loaded, but external entries take precedence.
Exception: The default English file (english.lang) is always loaded from the JAR only.

Creating Custom Language Files

Step 1: Copy an Existing Language File

Extract a language file from the Skript JAR:
  1. Open Skript.jar as a ZIP archive
  2. Navigate to lang/
  3. Copy english.lang or another language
  4. Place it in plugins/Skript/lang/
Start with English or a language you understand to ensure accurate translations.

Step 2: Rename the File

Rename to match your target language:
english.lang → mylanguage.lang
Use lowercase, no spaces, and keep the .lang extension.

Step 3: Update the Version Number

Ensure the version matches your Skript version:
version: @version@
Mismatched versions may cause warnings. Keep language files updated with Skript updates.

Step 4: Translate Messages

Translate each message string:
skript:
	no scripts: No scripts were found, maybe you should write some ;)
	no errors: All scripts loaded without errors.

Step 5: Set Language in Config

Update config.sk to use your custom language:
language: mylanguage

Step 6: Reload Skript

/skript reload all
Your custom translations are now active.

Message Formatting

Arguments

Many messages include arguments using Java’s formatter syntax:
scripts loaded: Loaded %s script¦¦s¦ with a total of %s structure¦¦s¦ in %s
%s
string
String argument placeholder. Multiple %s appear in order.
%1$s, %2$s
string
Positional arguments. %1$s is the first, %2$s is the second, etc.
Example from english.lang:
error: <light red>Encountered <gold>%2$s <light red>error¦¦s¦ while reloading <gold>%1$s<light red>! <gray>(<gold>%3$sms<gray>)
This uses:
  • %1$s: Script name
  • %2$s: Number of errors
  • %3$s: Time in milliseconds
Full formatter syntax: Java Formatter Documentation

Plurals

Define singular and plural forms with ¦:
script¦¦s¦
This creates:
  • Singular: script
  • Plural: scripts
More complex plurals:
shel¦f¦ves   # shelf → shelves
word¦¦s¦ of power   # word of power → words of power

Gender (Articles)

Some languages use grammatical gender. English uses articles a/an:
word¦s @a
ocelot¦s @an
Other languages use actual genders (masculine, feminine, neuter). Check existing translations for examples.

Color Codes

Messages support Minecraft color codes:
prefix: <gray>[<gold>Skript<gray>] <reset>
error details: <light red>    %s<reset>\n
Available colors:
  • <gray>, <gold>, <red>, <green>, <blue>, <yellow>, <aqua>, <white>, <black>
  • <dark gray>, <dark red>, <dark green>, etc.
  • <reset>: Reset formatting
  • <bold>, <italic>, <underline>, <strikethrough>

Common Localization Sections

Skript Core Messages

skript:
	prefix: <gray>[<gold>Skript<gray>] <reset>
	no scripts: No scripts were found, maybe you should write some ;)
	no errors: All scripts loaded without errors.
	scripts loaded: Loaded %s script¦¦s¦ with a total of %s structure¦¦s¦ in %s
System messages, loading notifications, and general output.

Command Messages

commands:
	no permission message: You don't have the required permission to use this command
	cooldown message: You are using this command too often, please try again later
	executable by players: This command can only be used by players
	executable by console: This command can only be used by the console
	correct usage: Correct usage:
Default command error messages.

Runtime Errors

log:
	runtime:
		error: <light red>The script '<gray>%s<light red>' encountered an error while executing the '<gray>%s<light red>' %s<light red>:\n
		warning: <yellow>The script '<gray>%s<yellow>' encountered a warning while executing the '<gray>%s<yellow>' %s<yellow>:\n
Error and warning formats shown to players and console.

Updater Messages

updater:
	checking: Checking for the latest version of Skript...
	update available: A new version of Skript is available: <gold>%s<reset> (you're currently running <gold>%s<reset>)
	running latest version: You're currently running the latest stable version of Skript.
Update check notifications.

Partial Translations

You don’t need to translate everything. Create a partial language file that only overrides specific messages:
# Custom English overrides
version: @version@

skript:
	prefix: <blue>[<white>MyServer<blue>] <reset>

commands:
	no permission message: <red>Access denied! Contact an admin for help.
Untranslated messages fall back to the default language.

Translation Best Practices

Keep translations consistent in formality and style throughout the file.
Keep color codes, plural markers, and argument placeholders:
# Correct - preserves colors and arguments
error: <light red>Error: <gold>%s

# Wrong - removes formatting
error: Error: %s
Reload scripts and trigger various errors to see your translations in action.
Update the version field when upgrading Skript to match new message keys.
Add comments explaining custom translations:
# Custom message for our server's style guide
no scripts: <gold>Welcome! Create your first script in the scripts folder.

Contributing Translations

To contribute a new language or improve existing translations:
  1. Fork the Skript repository on GitHub
  2. Create/update a language file in src/main/resources/lang/
  3. Test your translations thoroughly
  4. Submit a pull request

Skript GitHub Repository

Contribute translations to the official Skript project

Troubleshooting

Common issues:
  • Incorrect filename: Use lowercase, no spaces, .lang extension
  • Wrong location: Place in plugins/Skript/lang/
  • Config mismatch: language: in config.sk must match filename (without .lang)
  • Syntax errors: Check for proper indentation (tabs or spaces, consistent)
Verify with:
/skript reload all
Check console for language loading messages.
This is normal if:
  • Translation is incomplete (missing keys)
  • New Skript version added untranslated keys
  • Feature hasn’t been translated yet
Solution: Add missing translations to your custom language file.
If special characters (é, ñ, ö, ü, 中文, etc.) show as ? or boxes:
  1. Save the file as UTF-8 encoding
  2. Ensure your console supports UTF-8
  3. On Windows, use a UTF-8 capable editor (VS Code, Notepad++, not Notepad)
From config.sk documentation:
# If you use special characters (§, äöü, éèàôç, ñ, etc.) 
# you have to encode the file in UTF-8.
If you see a version warning:
  1. Check Skript version: /skript info
  2. Update version: @version@ in your language file
  3. Review Skript changelog for new message keys
  4. Add translations for new keys
Version mismatches don’t break functionality but indicate outdated translations.

Language File Reference

Key sections in english.lang:
SectionPurposeExample Keys
skript:Core messagesprefix, no scripts, no errors
skript command:/skript command outputreload, enable, disable, info
log:Runtime loggingerror, warning, auto reload
commands:Command defaultsno permission message, cooldown message
updater:Update checkerchecking, update available
aliases:Alias systemempty string, invalid item type
time:Time parsing24 hours, 60 minutes
functions:Function errorsunknown function, invalid argument

Example: Custom Server Language

Create a branded language file for your server:
# MyServer Custom Language
version: @version@

none: <none>

skript:
	prefix: <blue>[<aqua>MyServer<blue>] <reset>
	no scripts: <gold>No scripts found. Visit <aqua>myserver.com/docs<gold> to get started!
	no errors: <green>All scripts loaded successfully!

commands:
	no permission message: <red>You don't have permission to do that. <gray>Need help? <aqua>/help
	cooldown message: <yellow>Slow down! Try again in a moment.
	updater:
	checking: <gray>Checking for Skript updates...
	update available: <gold>Skript update available! <aqua>%s <gray>(running <aqua>%s<gray>)
Activate in config.sk:
language: myserver

Configuration

Language and other config.sk settings

Skript GitHub

Source code and language files

Java Formatter Syntax

Argument formatting documentation

Best Practices

Tips for maintaining language files

Build docs developers (and LLMs) love