Mehrsprachigkeit in Minecraft

  • 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
    [nolexicon] [tabmenu]


    [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


    [/tabmenu][/nolexicon]

    [nolexicon]
    Damit das ganze nicht zu Abstrakt wird, ein paar daten
    [/nolexicon]

    Bisherige Übersetzungen vom Testserver
    [nolexicon]
    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 command.chat.help [",{text":"[Help] ","color":"gray"},{"text":"Alle Chat Befehle\n","color":"dark_green"},{"text":"/chat senden ","color":"gold","clickEvent":{"action":"suggest_command","value":"/chat senden "}},{"text":"[id] ","color":"dark_purple","hoverEvent":{"action":"show_text","value":{"text":"","extra":[{"text":"Chat ID","color":"white"}]}}},{"text":"[message] ","color":"dark_purple","hoverEvent":{"action":"show_text","value":{"text":"","extra":[{"text":"Nachricht"}]}}},{"text":"| ","color":"gray"},{"text":"Nachricht im Chat senden","color":"white"}]
    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 command.chat.help command.chat.help
    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]
    [/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..

    Technischer Administrator, Entwicklungsleiter und Leiter des Let's Mine Minecraft Community Server Projektes
    KleinCrafter

  • Ich hoffe, ihr habt verstanden, was ich dort versucht habe zu erklären xD

    Beispiele für Konventionen/Vereinbarungen

    Befehls Hilfen
    Ich habe den Befehl /chat welcher mit /chat help die Hilfe ausgeben soll. (Habe mal die "alte" Lösung in der Tabelle oben durchgestrichen)
    command.chat.help sendet den "Header" der Hilfe
    command.chat.help.translation ist der Hilfetext zum Subcommand translation, diese Nachricht wird auch ausgegeben, wenn der Command /chat translation falsch eingegeben wird

    Wird nun vor jedem Hilfe Text ein [Help] oder ein [Chat] gesetzt?

    Wird versucht auf Einzeilern zu bleiben?

    Wird in der Hilfe nur der Befehl geschrieben und mit Hover Texten gearbeitet? /chat translation (Zum Übersetzen) [name|description] (Was geändert werden soll, name oder beschreibung) [locale] (welche Sprache erstellt/überschrieben werden soll) [text] (Der zu setzende Name)

    Text in den Runden klammern = Text im Hover

    Und wenn sowas festgelegt wurde, muss dies für jeden Befehl, den es auf dem Server gibt angewendet werden. (/home help| /spawn help | /pe help | ...)

    Auflistungen in Befehlen
    Ich habe den Befehl /chat welcher mit /chat list alle verfügbaren Chats auflistet.
    chat.list.header - Oben drüber (Auflistung der Chats)
    chat.list.line - Jede Zeile (id: sprache - name(Hover: Beschreibung))

    chat.list.footer - Ende der liste (Seite 1 von 7)


    Aufbau des Headers
    Aufbau der Zeilen
    Aufbau des Footers

    Und so~ weiter.

    Technischer Administrator, Entwicklungsleiter und Leiter des Let's Mine Minecraft Community Server Projektes
    KleinCrafter

  • Bahnhof XD Like^^ Nutzloser Post, nur zur Kenntnis genommen^^

    @KleinCrafter Wenn ich das richtig verstanden habe geht es dir Hauptsächlich um Mehrsprachigkeit XD
    Finde es persönlich jetzt nicht schlecht wenn auch andere Sprachen hier Spielen können, aber WTF was für einen Aufwand für Spieler die sich mit den meisten hier nicht unterhalten können ? XD

    Mfg
    Ares

    ich halte ihn für einen Einzeller der es irgendwie geschafft hat die Transzendenz mit dem Internet zu erreichen...

    *Hust* Ares in live auf Twitch ? -----> twitch.tv/areslevain

    Einmal editiert, zuletzt von AresLevain (15. März 2017 um 16:56)

  • Hmm, mein hintergedanke war: "Die Community kann bei der 3.0 mitmachen/helfen."

    Als Programmierer etwas zu erschaffen ist einfach, sobald es aber an die "GUI" geht, fang ich an zu kotzen xD
    Mir wird immer gesagt, dass ich bescheid geben soll, wenn ich hilfe brauche.
    User haben mich oft gefragt, warum "das denn so angezeigt wird und nicht anders"
    Spieler mit anderen sprachen verstehen kein wort.

    Zusammengefast: Dann macht es selber! xD
    Ich habe kein Bock auf GUI und ihr sollt mir helfen: Dann helft mir.
    Ihr wollt, dass der Englisch sprachige User im Tut weiter kommt und nicht mit google translator sich durch das quiz raten soll? Dann schreibt eine Englische Übersetzung xD

    Alles möglich, ohne das ich nochmal nen finger krum machen muss.
    Und bei der frage, warum das so ausgegeben wird: Weil die Community das so festgelegt hat :P

    Ich muss keine Tabellen von Texten rausgeben, diese wieder einpflegen und wehe ich habe welche vergessen oder falsch übertragen..

    Technischer Administrator, Entwicklungsleiter und Leiter des Let's Mine Minecraft Community Server Projektes
    KleinCrafter

  • Sobald die ersten Vereinbarungen in dem Forum Übersetzungen getroffen wurden, werde ich den Test Server mal für ein paar Tage öffentlich betretbar machen, damit sich das Resultat angeguckt werden kann.
    Ich hoffe, das sich an den Diskusionen beteiligt wird und ich nicht wieder am ende alles alleine entscheide...

    Technischer Administrator, Entwicklungsleiter und Leiter des Let's Mine Minecraft Community Server Projektes
    KleinCrafter

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!