A player's language
Each player picks the language Keystone speaks to them, and a server writes its translation in the editor.
On this page 4 parts
The jar ships English only. Another language is a file, config/keystone/lang/<code>.properties, that names itself with language.name= — and Keystone then asks every player once (a line to click) which language it should speak to them. /language changes it later.
What each player sees
#The choice is kept per player. Until somebody has chosen, their game's language is used where the server offers it, and language.default where it does not. A line a translation lacks reads in English. language.offered narrows which languages players may choose — ["cs"] makes a server Czech only, and nobody is asked; keystone.language.ask-on-join turns the question at joining off.
An owner's own text in more than one language
#Anything an owner writes in a setting that a player reads — announcements, the kick, ban, full and maintenance screens, the tab list — may carry a part per language: [en]The server is full. [cs]Server je plný. Each player reads their part, then the server's language.default, then English. Text with no marker reads as it always did.
Translating in the editor
#The Languages screen lists every language the server has, how much of it is translated and which are offered. An opened language has every line beside the English, a filter for what is still untranslated, colours drawn the way the game draws them, and a placeholder the English does not have marked (saving refuses it). A new language starts from a code and a name; the .properties file can be exported and imported. Saving writes the file and players read it at once.
Only the owner writes translations: a link from /keystone panel given to an operator or the console. A moderator who reaches the panel through a group gets a link without languages.write.
A player's words never look like the server's
#Colour codes and language parts are read only in text the owner wrote: settings, language files, rank prefixes. Everything else — a name, a ban reason, a Discord message, a ticket, an assistant's answer — is printed exactly as written: no colour, no line break, no [xx]. Nothing in text can make a clickable component; only code builds those.
Did this page help?
Opens the feedback panel with this page attached. It lands in the same queue as everything else.