Mit diesem Konzept stelle ich euch, der Community, die aktuelle Lösung (Plugin Technisch bereits umgesetzt) für die Mehrsprachigkeit vor.
//edit: Erklärung hinzugefügt
Was bedeutet Mehrsprachikeit?
Alle Nachrichten, die vom Server zum Client gehen, werden in der Sprache des Clients Übersetzt. (Textnachrichten anderer User ausgenommen)
Dabei ist die Übersetzung von "Server" in "Mensch" (Deutsch, Englisch, etc.) gemeint.
Innerhalb der Comunity können Vereinbarungen, bezüglich der Chatformatierung, getroffen werden.
Nebeneffekt
So können z.B. Englischsprachige User, die auf dem Server spielen wollen, dies Barrierefrei tun.
Angefangen von der einfachen "Spieler betrat das Spiel", welches bei Englisch sprachigen Usern zu "Player joind the Game" übersetzt wird.
Die Befehlsausgaben werden übersetzt: /list "Es sind aktuell X Spieler Online" -> "There are currently X players online"
Organisation
Dafür wird es im Bürgerforum ein neues Unterforum "Übersetzungen/Translations" geben.
Aktuell befinde ich mich mit crowdin.com im Kontakt, damit die Übersetzungen dort übersichtlich zur Verfügung stehen.
Die alternative "Lösung" wäre Excel/Google spreadsheets -> Sehr unübersichtlich...
[nolexicon]
[/nolexicon]
Handbuch v0.8
[tab='Übersetzungen']
[subtab='Minecraft (Test Server)']
//Umstellung von Google Docs Tabelle auf Crowdin, wenn Crowdin die entsprechenden Änderungen vornehmen kann.
Die Texte werden, je nach bedarf, im JSON oder Plaintext gespeichert.
Für die JSON Texte zu Empfehlen: https://www.minecraftjson.com/
Variablen
Variablen innerhalb der Übersetzungen werden wie folgt angegeben: <`identifier.code`>
Diese Platzhalter werden, wenn die Information vorhanden ist, durch die entsprechenden Texte ersetzt.
Die Platzhalter sind in den Subtabs zu finden.
[subtab='Player']Die Spielerbezogenen Variablen
| Code | Beschreibung |
| player.uuid | Die UUID des Spielers |
| player.name | Der aktuelle Name des Spielers |
| player.oldname | Der alte Spielername |
| player.rank | Verweis auf den Rang |
| player.firstplay | Cracked: Zeitpunkt der Registration Premium: Zeitpunkt des Serverbeitrits |
| player.lastplay | Zeitpunkt des letzten Serverbetretens |
| player.lastnamechange | Zeitpunkt des letzten Namenswechsel Die Änderung des Namens auf dem Server, nicht von Mojang. |
[subtab='Chat']Die Chatbezogenen Variablen
| Code | Beschreibung |
| chat.id | Die Eindeutige ID des Chats |
| chat.name | Übersetzung: <`chat.[id].name`> |
| chat.readonly | true/false -> Ob darin geschrieben werden kann oder nicht |
| chat.owner | Player variable |
| chat.public | true/false -> Ob frei betreten werden kann |
[subtab='Group']Die Gruppenbezogenen Variablen
| Code | Beschreibung |
| group.id | Gruppen ID |
| group.line | Position der Gruppe |
| group.name | Übersetzung: <`group.[id].name`> |
| group.color | Übersetzung: <`group.[id].color`> |
[subtab='Rank']Die Rangbezogenen Variablen
| Code | Beschreibung |
| rank.id | Rang ID |
| rank.line | Position innerhalb der Gruppe |
| rank.group | Gruppen variable |
| rank.name | Übersetzung: <`rank.[id].name`> |
| rank.color | Übersetzung: <`rank.[id].color`> |
[subtab='Spezial']Variablen, die nur bei bestimmten codes zur verfügung stehen.
| Code | Variable | Beschreibung |
| chat.mute | mutereason.reason | Grund des mutes |
| chat.mute | mutetime.time | Zeit (in ms) bis der User nicht mehr gemutet ist |
| chat.message.[id] | chatmessage.message | Die übersetzung von "chat.format" |
| chat.format | chatmessage.message | Die übersetzte Chateingabe |
| chat.not.found chat.id.invalid |
input.invalid | Die eingabe, die nicht zugeordnet/gefunden werden konnte. |
| chat.closed.broadcast | chatclose.reason | Der Grund des schliessens |
[nolexicon]
Damit das ganze nicht zu Abstrakt wird, ein paar daten
[/nolexicon]
Bisherige Übersetzungen vom Testserver
| language | code | message |
| en | connection.ping | [",{text":"Let's Mine ","color":"dark_green"},{"text":"3.0 ","color":"gold"},{"text":"| 1.11.2","color":"gray"}] |
| de-DE | chat.message | {text":"<`chatmessage.message`>"} |
| de-DE | chat.readonly | In diesem Chat kann nicht geschrieben werden. |
| de-DE | async.start | Befehlsverarbeitung gestartet |
| de-DE | async.end | Befehlsverarbeitung beendet |
| de-DE | chat.message.1 | [",{text":"[<`chat.name`>] ","color":"gray"},{"text":"<`chatmessage.message`>"}] |
| de-DE | chat.message.12 | [",{text":"[Chat<`chat.id`>] ","color":"gray"},{"text":"<`chatmessage.message`>"}] |
| de-DE | chat.name.14 | TestChat0001 |
| en-US | async.start | async.start |
| en-US | chat.message.12 | chat.message.12 |
| en-US | async.end | async.end |
| en-US | chat.message.1 | chat.message.1 |
| de-DE | chat.format | chat.format |
| de-DE | chat.list.header | chat.list.header |
| de-DE | chat.list.line | chat.list.line |
| de-DE | chat.list.footer | chat.list.footer |
| de-DE | chat.join.success | chat.join.success |
| de-DE | chat.message.13 | chat.message.13 |
| de-DE | chat.message.14 | [",{text":"[<`chat.name`>] ","color":"gray"},{"text":"<`chatmessage.message`>"}] |
| de-DE | command.chat.help.translation | command.chat.help.translation |
| en-US | command.chat.help | [",{text":"[Help] ","color":"gray"},{"text":"All Chat Commands\n","color":"dark_green"},{"text":"/chat send ","color":"gold","clickEvent":{"action":"suggest_command","value":"/chat send [id] [message] "}},{"text":"| ","color":"gray"},{"text":"Send a Chatmessage","color":"white"}] |
[nolexicon]
[/nolexicon]
Die Chats 1 bis 12 sind Chats vom Server:
- Standartausgabe für Befehle, wenn kein anderer Chat genutzt wird
- */login message
- * **server load information
- * **join and leave messages
- * **afk message
- * **event broadcast
- *Warnungen (Alarm) Nachrichten, diese können auch als Titel erscheinen (Neustart) und ist die vorstufe vor einem Kick.
- * **Aktionsinformationen wie "Es befindet sich kein User in reichweite, der die Nachricht lesen könnte"
- *"Fragen" z.B. Inv leeren beim Warpschild
- * **/m und /r
- *Texte von NPC's
- **Textausgaben von Async aufgaben (Befehl wurde emfangen und wird verarbeitet -> Sobald er verarbeitet wurde, kommt die entsprechende ausgabe, im entsprechendem (anderen) Chat.)
*Noch nicht Programmiert
**Können deaktiviert werden (man bekommt diese Nachrichten nicht mehr angezeigt)
Für jeden Chat des Servers müssen Konventionen/Vereinbarungen getroffen werden, wie diese aufgebaut sind.
Der Chat 12 (Async), ist der einfachste zum erklären.
Beim ausführen eines Befehls wird, bevor der Befehl ausgeführt wird async.start und nachdem der Befehl ausgeführt wurde async.end ausgeführt.
Die Ausgabe wird im Chat 12 chat.message.12 geschickt.
Variation 1
| Code | Inhalt |
| chat.message.12 | [",{text":"[<`chat.name`>] ","color":"gray"},{"text":"<`chatmessage.message`>"}] |
| chat.12.name | Async |
| async.start | Befehlsverarbeitung Gestartet |
| async.end | Befehlsverarbeitung Beendet |
Variation 2
| Code | Inhalt |
| chat.message.12 | [",<`chat.name`>,<`chatmessage.message`>"] |
| chat.12.name | {"text":"[Async] ","color":"gray"} |
| async.start | {"text":"Befehlsverarbeitung Gestartet"} |
| async.end | {"text":"Befehlsverarbeitung Beendet"} |
Die Variationsmöglichkeiten sind sehr hoch, bei einem Chat 13 auch trivial, bei Chat 1, welcher alle Plugin ausgaben verarbeitet, eventuell nicht so einfach..