Übersetzung des Charakterblatts

Charakterblatt i18n, oder Internationalisierung, ermöglicht es Ihnen, IhrZeichenblattso zu gestalten, dass unsere Übersetzergemeinschaft Ihr Blatt in ihre Sprache übersetzen kann und diese Sprache jedem auf Roll20 zur Verfügung stellt. Wenn Ihr Blatt in eine andere Sprache übersetzt wurde, beispielsweise Französisch, und jemand, der Ihr Blatt verwendet, die Kontosprache auf Französisch eingestellt hat, wird Ihr Blatt mit den übersetzten Texten für diesen Benutzer angezeigt.


Entwerfen Sie Ihr Blatt

Das Einrichten IhresBlattsfür die Reaktion auf den i18n-Dienst ist sehr einfach, es kann jedoch einige Zeit dauern, insbesondere wenn Sie mit einem großen, bereits vorhandenen Blatt arbeiten. Sie müssen zwei Schritte ausführen, damit Ihr Blatt übersetzt werden kann. Schritt eins: Markieren Sie die Elemente, die den übersetzten Text enthalten sollen. Schritt zwei: Erstellen Sie eine Übersetzungsdatei, die alle zu übersetzenden Zeichenfolgen enthält. Diese Datei wird an unseren Übersetzungsdienst Crowdin weitergeleitet, wo unsere Freiwilligen sie String für String durchgehen und in eine andere Sprache übersetzen können. Dadurch wird in allen anderen Sprachen dieselbe Übersetzungsdatei generiert, die wir dann entsprechend verwenden, wenn jemand diese Sprache auf Roll20 ausgewählt hat.

Da es schwierig sein kann, ein einziges Design zu erstellen, das für mehrere Größen übersetzten Texts geeignet ist, haben wir dem übergeordneten „charsheet“-Element eine Klasse hinzugefügt, damit Sie für einzelne Sprachen separates CSS haben. Die Klasse ist „lang-[2 char language code]“, also wenn die Sprache Englisch „lang-en“ oder Französisch „lang-fr“ ist. Dadurch können Sie nach der Übersetzung Ihres Blatts den Stil speziell für eine Sprache ändern, wenn der neue Text für diese Sprache nicht zu Ihrem aktuellen Design passt.


Schritt eins: Blattformatierung

Sie sollten das Attribut „data-i18n=[unique-key]“ zu jedem Element hinzufügen, das Text enthält, den Sie übersetzen möchten. Behalten Sie den gesamten Text bei, der bereits im Element vorhanden ist, da er zum Generieren Ihrer Übersetzungsdatei verwendet werden kann, wenn Sie fertig sind (wird später erklärt). Es ist besonders wichtig, dass der Text dort bleibt, während sich der Sheet-i18n-Code nur auf Dev befindet. Andernfalls funktioniert Ihr Blatt nicht mehr auf der Hauptseite, bis Sheet-i18n es auf die Hauptseite schafft.Wenn Sie weitere Beispiele für die Funktionsweise der i18n-Übersetzungen wünschen, schauen Sie sich das Blatt5th Edition OGL von Roll20an, das bereits mit dem i18n-Text formatiert wurde.


Standardtext

<div class="col">
    <div class="row">
        <span data-i18n="acrobatics-u">Akrobatik <span>(Geschick    </div></span></span>
        <input class="num" type="text" name="attr_npc_acrobatics" placeholder="0">
    </div>    <div class="row">13
        <span data-i18n="animal-handling-u">
        mit Tieren</span>
        <input class="num" type="text" name="attr_npc_animal_handling" placeholder="0">

    </div>

        <span data-i18n="arcana-u">ARCANA</span>
        <input class="num" type="text" name="attr_npc_arcana" placeholder="0">
    <div class="row">
    <div class="row">
        <span data-i18n="athletics-u">Leichtathletik</span>
        <input class="num" type="text" name="attr_npc_athletics" placeholder="0">
    </div>
    <div class="row">        <span data-i18n="deception-u">TÄUSCHUNG</span>
        <input class="num" type="text" name="attr_npc_deception" placeholder="0">
    </div>
    <div class="row">
        <span data-i18n="history-u">GESCHICHTE</span>
        <input class="num" type="text" name="attr_npc_history" placeholder="0">
    </div>
</div>

Beachten Sie, dass jeder Span in diesem Codeblock über das data-i18n-Attribut mit einem Schlüssel verfügt, der auf den im Span enthaltenen Text verweist. Beachten Sie auch, dass der Bereich HTML enthält. Das ist völlig in Ordnung. Der HTML-Code wird von Crowdin markiert, sodass es für sie einfach ist, den HTML-Code zu kopieren und in ihre Übersetzung einzufügen. Während HTML in der Übersetzung in Ordnung ist, versuchen Sie, es so einfach wie möglich zu halten, da die Übersetzer höchstwahrscheinlich nicht mit Code vertraut sind und möglicherweise Probleme beim Kopieren des Codes haben, wenn dieser nicht einfach ist. Es ist sehr wichtig, dass jede eindeutige Zeichenfolge einen eindeutigen Schlüssel hat; Beachten Sie, dass ich am Ende jedes Schlüssels ein -u verwende, da dieser Text in Großbuchstaben geschrieben ist. Das liegt daran, dass diese Wörter später im Blatt auftauchen, aber in normaler Schreibweise geschrieben werden.

In einigen Fällen möchten Sie dem Schlüssel zusätzlichen Kontext hinzufügen, den der Übersetzer möglicherweise nicht allein aus dem Text erhält, z. B. bei Abkürzungen.

<div class="row">
    <span data-i18n="components:-u">KOMPONENTEN:</span>
    <input type="checkbox" name="attr_spellcomp_v" value="{{v=1}}" checked="checked">
    <span data-i18n="spell-component-verbal">V</span>
    <input type="checkbox" name="attr_spellcomp_s" value="{{s=1}}" checked="checked">
    <span data-i18n="spell-component-somatic">S</span>
    <input type="checkbox" name="attr_spellcomp_m" value="{{m=1}}" checked="checked">
    <span data-i18n="spell-component-material">M</span>
    <input type="text" name="attr_spellcomp_materials" accept="Material" style="margin-left: 17px; width: 215px;" placeholder="ruby dust worth 50gp" data-i18n-place="ruby-dust-place">
</div>

Beachten Sie, dass die Schlüssel für die V-, S- und M-Texte genau angeben, worauf sich das einzelne Zeichen bezieht. Andernfalls hätte der Übersetzer keine Ahnung, was „V“ bedeutet. Auf diese Weise kann der Übersetzer „V“ durch den ersten Buchstaben des „Verbal“ in seiner Sprache ersetzen, wenn dieser anders ist.


Elementattributtext

Oftmals befindet sich in einem Elementattribut Text, der übersetzt werden muss, beispielsweise Platzhalter und Titel. Um den Text in diesen Attributen zu ersetzen, können Sie „data-i18n-[attribute]='key'“ verwenden, um dem Parser mitzuteilen, dass der von Ihnen angegebene Schlüssel zum Ersetzen des Texts innerhalb des angegebenen Attributs verwendet werden soll. Wenn Sie beispielsweise den Text in einem Platzhalterattribut ersetzen:

<input name="attr_weapon_name" data-i18n-placeholder="weapon-name" placeholder="Hand Axe" />

Die unterstützten Attribute sind: Titel, Alt, Aria-Label, Label, Platzhalter

Variablenersetzung

Ein Sonderfall besteht darin, dass Sie spezielle Variablen und das Attribut „data-i18n-vars“ verwenden können, wenn Sie Text in einer Zeichenfolge haben, den Sie nicht übersetzen möchten.

<span data-i18n="var-test" data-i18n-vars="will not|be translated">Dieser Text {{0}} {{1}}</span>

Der Text innerhalb des data-i18n-vars-Attributs wird durch das „|“ geteilt. Zeichen und in einem Array platziert. Sie können dann auf dieses Array verweisen, indem Sie {{[index]}} verwenden, um auf die bestimmte Zeile des Arrays zu verweisen.


Dynamischer Schlüsselaustausch

Es gibt Situationen, in denen Sie eine Übersetzung basierend auf einem sich ändernden Schlüssel abrufen müssen. Sie verfügen beispielsweise über ein Dropdown-Menü „Klassenauswahl“, in dem der Benutzer seine Klasse auswählen kann. Die in dieser Liste angezeigten Klassennamen können mit den normalen Tools übersetzt werden. Sie können den Wert innerhalb der Option im Auswahlfeld jedoch nicht übersetzen. (Wir tun dies, damit die Blattdaten nicht übersetzt werden müssen, wenn Sie die Sprache ändern. Das Übersetzungssystem bleibt rein im Frontend und nicht in der Datenschicht) Stattdessen markieren Sie den Span dort, wo Sie diesen Klassennamen übersetzt anzeigen möchten, mit dem Attribut „data-i18n-dynamic“. Dadurch wird der Parser angewiesen, den Wert zu verwenden, der normalerweise im Span angezeigt wird, als Schlüssel zum Abrufen einer Übersetzung.

// Dieser Teil muss sich nicht ändern
<select class="hiding" name="attr_class" style="width: 64px;">
	<option value="Barbarian" data-i18n="barbarian">Bárbaro</option>
	<option value="Bard" data-i18n="bard">Bardo</option>
	<option value="Cleric" data-i18n="cleric">Clerigo</option>
	<option value="Druid" data-i18n="druid">Druida</option>
</select>
<span data-i18n="class-options">Klassenoptionen</span> (<span name="attr_class" data-i18n-dynamic></span>)
{ „Barbarian“: „Bárbaro“, „Bard“: „Bardo“, „Kleriker“: „Clerigo“, „Druid“: „Druida“ }

Wenn Sie nun mit dem obigen Code „Bárbaro“ aus dem Auswahlfeld auswählen, wird „Barbarian“ unter attr_class gespeichert. Wenn das Blatt jedoch aktualisiert wird und der Bereich mit name="attr_class" normalerweise mit „Barbarian“ ausgefüllt wird, wird stattdessen „Barbarian“ als Schlüssel verwendet, um auf die JSON-Übersetzung zu verweisen und stattdessen „Bárbaro“ anzuzeigen.


Rollenabfragen

Text in Rollenabfragen kann nicht im HTML-Zeichenblatt übersetzt werden. Mithilfe vonSheet Worker-Skriptenund Attributen kann der Text jedoch in JavaScript übersetzt und in die Rollenabfrage eingesetzt werden.

<script type="text/worker">

on("sheet:opened", function(eventInfo){
    
    setAttrs({
        bonusmacro: getTranslationByKey("ask-bonus")
    });     
    
});

</script>
<span style="display: none" data-i18n="ask-bonus">Wie hoch ist Ihr Bonus?</span> <button type='roll' value='[[d20 + ?{@{bonusmacro}|0}]]' ></button>

Das Tag <span> wird nicht angezeigt, führt jedoch dazu, dass der Schlüssel „ask-bonus“ in die generierte Übersetzungsdatei aufgenommen wird. Das Skript erstellt ein Attribut namens „bonusmacro“ mit dem Wert „Was ist Ihr Bonus?“ und der Roll-Button verwendet diesen Wert, um den Befehl „[[d20 + ?{Was ist Ihr Bonus?|0}]“ zu senden. ]". Wenn das Blatt geöffnet wird, während eine andere Übersetzungsdatei aktiv ist, wird das Attribut auf den neuen übersetzten Wert für „bonusmacro“ gesetzt. Diese Technik kann verwendet werden, um einzelne Schlüssel zu ersetzen, oder ein einzelnes Attribut kann zum Speichern einer komplexen Abfrage verwendet werden, wobei das Sheet Worker-Skript nach Bedarf übersetzte Schlüssel in den Abfragecode einfügt.

<script type="text/worker">
on("sheet:opened", function(eventInfo){
    
    setAttrs({
        rollquery: "?{" + getTranslationByKey("advantageordisadvantage") +"|" + getTranslationByKey("neither") + ",d20| " + getTranslationByKey("advantage") + ",2d20kh1[" + getTranslationByKey("withadvantage") + "]|" + getTranslationByKey("nachteil") + ",2d20kl1[" + getTranslationByKey("withdisadvantage") + "]} ",
    });
    
});

</script>
<span style="display: none" data-i18n="advantageordisadvantage">Gehen Sie mit Vorteil oder Nachteil um?</span> 
<span style="display: none" data-i18n="neither">Weder</span> 
<span style="display: none" data-i18n="advantage">Vorteil</span> 
<span style="display: none" data-i18n="withadvantage">mit Vorteil</span> 
<span style="display: none" data-i18n="disadvantage">Nachteil</span> 
<span style="display: none" data-i18n="withdisadvantage">mit Nachteil</span> 
<button type='roll' value='[[@{rollquery}]]' ></button>

In diesem Beispiel wird die folgende Rolle unter Verwendung der Standardübersetzungsdatei erstellt

[[?{Rollen Sie mit Vorteil oder Nachteil?|Weder,d20|Vorteil,2d20kh1[mit Vorteil]|Nachteil,2d20kl1[mit Nachteil]}]]

 


Rollenvorlagen

Statisches HTML innerhalb der Rollenvorlagendefinition des Blatts kann alle oben genannten Tools verwenden, einschließlich dynamischer Schlüssel. Wenn es in der Rolltemplate-Definition des Blatts enthalten ist, gibt Code wie{{strength-key}}den übersetzten Wert dessen an, was auch immer der Wert {{strength-key}}ist. Wenn Sie dynamisch übersetzte Werte innerhalb einer Roll-Funktion senden möchten, verwenden Sie das folgende Tool.

Innerhalb einer Roll-Funktion können Sie mithilfe einer Roll-Vorlage jeden Text in „^{ [key] }“ umschließen, um den Text als Übersetzungsschlüssel zu kennzeichnen. Dieser Text wird durch die übersetzte Version ersetzt, die diesem Schlüssel zugeordnet ist. Dieser Schritt erfolgt, nachdem die Zeichenblattwerte ausgetauscht wurden. Daher wird „^{ @{ability_key} }“ mit Fähigkeitsschlüssel = STRENGTH als „^{STRENGTH}“ geparst und zeigt den Übersetzungswert an, den Sie für „STRENGTH“ haben. Dies funktioniert auch mit dem Schlüssel für die Schlüssel/Wert-Paare, die in der Funktion allprops() verwendet werden. Beispiel: „{{^{TEXT}=@{content} }}“ hat den Übersetzungswert für „TEXT“ als „{{key}}“ innerhalb der allprops()-Funktion.


Listenbestellung

Wenn Sie eine Liste von Elementen in einem Container haben, die auf Englisch alphabetisch geordnet ist, und Sie die Reihenfolge in anderen Sprachen ändern möchten, können Sie dieses Tool verwenden. Bei der Neuordnung werden alle aktuellen Formatierungen in der Liste berücksichtigt. Selbst wenn Ihre Liste mehrere Untercontainer umfasst, sollte also alles auf die gleiche Weise formatiert bleiben.

Identifizieren Sie den Container. Alle Listenelemente müssen sich im Container befinden, sonst werden sie ignoriert:

data-i18n-list="list-key"

Identifizieren Sie die einzelnen Elemente in der Liste. Diese Elemente können ein HTML-Block sein. Wenn sie neu angeordnet werden, wird der gesamte Block verschoben.

data-i18n-list-item="item-key"

(Optional) Es wird davon ausgegangen, dass die „Start“-Reihenfolge der Liste im HTML von oben nach unten gelesen wird. Wenn Ihre Bestellung anders ist, können Sie die Artikel manuell nummerieren (beginnend bei 1), um die Reihenfolge festzulegen.

data-i18n-list-item-num="1"

(Besonderes) Dies ist kein Tag, den Sie „verwenden“, sondern ein Tag, der erstellt wird, wenn bei Ihrer Formatierung ein Fehler auftritt. Wenn bei Ihrem Listenreihenfolgecode ein Fehler auftritt, wird die Liste ignoriert und dieses Tag wird auf dem Listencontainerelement mit dem Fehler erstellt. Wenn die Liste nicht wie erwartet neu angeordnet wird, überprüfen Sie das übergeordnete Element auf einen Fehler.

data-i18n-error="Fehlermeldung"

Fügen Sie den Schlüssel zu Ihrer Übersetzungsdatei hinzu. Diese enthält eine durch Kommas getrennte Liste aller Elementschlüssel in der Sprache der Originalübersetzung. Wenn Sie diese Schlüssel neu anordnen, werden die Artikel neu angeordnet. Der Listenschlüssel kann für mehrere Listen verwendet werden, wenn alle zu sortierenden Elemente „gleiche“ Elemente sind. Der HTML-Code muss nicht derselbe sein, nur die Wörter, die sortiert werden. Beispielsweise kann eine Liste von „Fertigkeiten“ in D&D an mehreren Stellen auf einem Blatt mit völlig unterschiedlichem HTML angezeigt werden, sie können jedoch alle denselben Listenschlüssel verwenden. Ich werde den folgenden Beispielcode verwenden, um meinen Listenschlüssel zu generieren.

„skills-list“: „Akrobatik, Arkana, Fingerfertigkeit, Überleben“

Um diese Liste für die tschechische Sprache neu anzuordnen, würde der Listenschlüsselwert wie folgt aussehen:

 „skills-list“: „Akrobatik, Fingerfertigkeit, Arkana, Überleben“

Beispiel:

<div data-i18n-list="skills-list"> // Beschriften Sie Ihren Listencontainer und verweisen Sie ihn auf den Schlüssel, der zum Festlegen der Reihenfolge verwendet wird.
    <div> // Beachten Sie, dass sich die Elemente in einem Untercontainer befinden. Diese Spalten bleiben auch nach der Neuordnung bestehen.
        <div data-i18n-list-item="acrobatics"> // Beschriften Sie Ihren Listenelemente, das sind die Blöcke, die            <input type="text" name="attr_npc_sleight_of_hand" placeholder="0"><div data-i18n-list-item="arcana">werden
            <span data-i18n="acrobatics-u">AKROBATIK</span>
            <input type="text" name="attr_npc_acrobatics" placeholder="0">
        </div>

            <span data-i18n="arcana-u">ARCANA</span>
            <input type="text" name="attr_npc_arcana" placeholder="0">
        </div>    </div>22
        <div>
        <div data-i18n-list-item="sleight-of-hand">
            <span data-i18n="sleight-of-hand-u">SLEIGHT OF HAND</span>
            

        </div>
        <div data-i18n-list-item="survival">
            <span data-i18n="survival-u">SUR VIVAL</span>
            <input type="text" name="attr_npc_survival" placeholder="0">
        </div>
    </div>
</div>

Nur das gleiche Beispiel: Anstatt die Liste durch die Spalten nach unten und dann nach unten zu verschieben, wird die Liste durch die Spalten und dann nach unten verschoben:

<div data-i18n-list="skills-list">
    <div>
        <div data-i18n-list-item="acrobatics" data-i18n-list-item-num="1">
            <span data-i18n="acrobatics-u">AKROBATIK</span>
            <input type="text" name="attr_npc_acrobatics" placeholder="0">
        </div>
        <div data-i18n-list-item="sleight-of-hand" data-i18n-list-item-num="3">
            <span data-i18n="sleight-of-hand-u">HANDTASCHE</span>
            <input type="text" name="attr_npc_sleight_of_hand" placeholder="0">
        </div>
    </div>
    
    <div>

        <span data-i18n="arcana-u"></span>
            <input type="text" name="attr_npc_arcana" placeholder="0">
        <div data-i18n-list-item="arcana" data-i18n-list-item-num="2">
        <div data-i18n-list-item="survival" data-i18n-list-item-num="4">
            <span data-i18n="survival-u">ÜBERLEBEN</span>
            <input type="text" name="attr_npc_survival" placeholder="0">
        </div></div>    </div>
</div>

Schritt zwei: Generieren der Übersetzungsdatei

Sobald Sie Ihr Blatt formatiert haben und den obigen Anweisungen folgen, können Sie ganz einfach Ihre Übersetzungsdatei erstellen. Nachdem Sie Ihr Blatt im Editor geladen haben, gehen Siein das Spiel,und öffnen Sie dort die Entwicklertools für Ihren Browser und gehen Sie zur Konsole. Geben Sie ganz unten in der Konsole, wo Sie Code eingeben können, „i18nOutput“ ein. (Die automatische Vervollständigung beginnt höchstwahrscheinlich, sobald Sie mit der Eingabe beginnen.) Drücken Sie die Eingabetaste, um dieses Objekt abzurufen. Es wird eine JSON-Zeichenfolge ausgegeben, die alle von Ihnen verwendeten Schlüssel mit dem entsprechenden Text aus dem Element/Platzhalter enthält. Sie sollten diesen Text dann in Ihr bevorzugtes JSON-Format kopieren können (optional, aber empfohlen) und dann in die Registerkarte „Übersetzung“ im Bereich „Benutzerdefiniertes Blatt“ der Spieleinstellungen.

Wenn Sie die translation.json manuell erstellen möchten, können Sie das folgende Format verwenden:

{
    „key“: „string“,
    „key-2“: „Eine andere Zeichenfolge.“
}

Sobald Sie Ihr formatiertes Blatt und die JSON-Übersetzung für Ihr benutzerdefiniertes Blatt gespeichert haben, sollte es genau so aussehen wie vor der Übersetzung, vorausgesetzt, alles wurde korrekt gemacht.

Wenn Sie einen roten Text wie [translation-key] sehen, handelt es sich um einen Schlüssel, den Sie dem System mitteilen, den Sie aber nicht in die JSON-Übersetzung eingegeben haben. Wenn Sie das vom System generierte JSON verwenden, sollten Sie keines davon sehen.

Sobald Sie eine funktionierende Übersetzungsdatei haben, können Sie diese mit dem Rest Ihres Blattcodes als „translation.json“ in das Stammverzeichnis Ihres Charakterblattordners hochladen. Diese wird automatisch von unserem System erfasst und auf Crowdin hochgeladen, wo sie dann übersetzt werden kann.


Ändern Ihrer Übersetzung

Wenn Sie Ihre Übersetzung ändern möchten, nachdem sie bereits generiert wurde, können Sie Ihre Datei translation.json bearbeiten. Die Änderungen werden dann an die Sprachdateien weitergegeben, wenn die Übersetzungen das nächste Mal aktualisiert werden. Bestimmte Änderungen führen jedoch nicht dazu, dass Übersetzungswerte überschrieben werden, selbst wenn die Werte noch nicht übersetzt wurden. Mit anderen Worten: Manchmal werden Änderungen an der translation.json nicht in Ihrem Blatt angezeigt.

Zu den Änderungen, die keine Aktualisierung auslösen, gehören Änderungen, bei denen der einzige Unterschied in Leerzeichen oder Sonderzeichen besteht, sowie Änderungen, bei denen nur Zeichen entfernt und keine neuen Zeichen geändert oder hinzugefügt werden.


Senden Sie Ihre Änderungen an Roll20

SieheAnfängerleitfaden zu GitHub


Siehe auch

 
War dieser Beitrag hilfreich?
8 von 19 fanden dies hilfreich