Zum Inhalt springen

Modul zum Generieren benutzerdefinierter Bundles

Verwende dieses Modul, um benutzerdefinierte Formate von Zieldatei-Bundles zu unterstützen. Der Generierungsprozess wird an deine Crowdin-App delegiert, die ein Modul zum Generieren benutzerdefinierter Bundles implementiert. Wenn die Übersetzungen bereit sind, sendet Crowdin die Übersetzungsdaten an deine App, die das generierte Bundle im gewünschten Format zurückgibt.

Du kannst Zugriff auf dieses Modul für eine der folgenden Benutzerkategorien gewähren:

Für Crowdin:

  • Nur ich (also der Projektinhaber)
  • Alle Projektmitglieder
  • Ausgewählte Benutzer

Für Crowdin Enterprise:

  • Nur Organisationsadministratoren
  • Alle Benutzer in den Projekten der Organisation
  • Ausgewählte Benutzer
manifest.json
{
"modules": {
"custom-file-format": [
{
"key": "your-module-key-type-xyz",
"type": "type-xyz",
"url": "/process",
"multilingualExport": true,
"stringsExport": true,
"extensions": [
".resx"
]
}
]
}
}
key

Typ: string

Erforderlich: ja

Beschreibung: Kennung des Moduls innerhalb der Crowdin-App.

type

Typ: string

Erforderlich: ja

Beschreibung: Kennung des benutzerdefinierten Bundle-Typs. Kann in der API verwendet werden, um die Verarbeitung dieses Moduls beim Generieren von Übersetzungs-Bundles auszulösen.

url

Typ: String

Erforderlich: ja

Beschreibung: Die relative URL, die während des Übersetzungsexports aufgerufen wird. Crowdin sendet eine Anfrage an diese URL, um die Generierung des benutzerdefinierten Bundles zu starten.

multilingualExport

Typ: bool

Erforderlich: nein

Zulässige Werte: true, false. Standardwert ist false

Beschreibung: Ermöglicht den Export von Strings für mehrere Zielsprachen in einer einzigen Anfrage. Nützlich für Dateiformate, die mehrere Sprachen innerhalb desselben Bundles unterstützen.

stringsExport

Typ: bool

Erforderlich: ja

Beschreibung: Muss für Bundle-Generator-Module auf true gesetzt werden. Gibt an, dass die App exportierte Strings von Crowdin erwartet, um ein benutzerdefiniertes Bundle zu generieren.

extensions

Typ: array

Erforderlich: ja

Beschreibung: Liste der Dateierweiterungen, die den generierten Bundles zugeordnet sind (z. B. .resx, .json). Definiert das erwartete Ausgabeformat und wird für Dateibenennung und Exportverarbeitung in Crowdin verwendet.

Wenn ein Benutzer den Export eines Übersetzungs-Bundles anfordert, sendet Crowdin eine HTTP-Anfrage an die konfigurierte URL der App ($baseUrl. $url) mit den erforderlichen Projekt-, Sprach- und Übersetzungsdaten. Die App verarbeitet die Daten und antwortet mit der generierten Bundle-Datei.

Für Anfragen und Antworten von und zu Apps zum Generieren benutzerdefinierter Bundles gilt ein Timeout von zwei Minuten. Die maximale Größe von Request- und Response-Payloads ist auf 5 MB begrenzt.

Beispiel für die Nutzlast der Anfrage:

// max request payload - 5 MB
// wait timeout - 2 minutes
{
"jobType": "build-file",
"organization": {
"id": 1,
"domain": "{domain}",
"baseUrl": "https://{domain}.crowdin.com",
"apiBaseUrl": "https://{domain}.api.crowdin.com"
},
"project": {
"id": 1,
"identifier": "your-project-identifier",
"name": "Your Project Name"
},
"sourceLanguage": {
"id": "es",
"name": "Spanish",
"editorCode": "es",
"twoLettersCode": "es",
"threeLettersCode": "spa",
"locale": "es-ES",
"androidCode": "es-rES",
"osxCode": "es.lproj",
"osxLocale": "es",
"pluralCategoryNames": ["one"],
"pluralRules": "(n != 1)"
},
"targetLanguages": [
{
// same structure as for sourceLanguage
}
],
"strings": [...], // array of segments
"stringsUrl": "https://tmp.downloads.crowdin.com/strings.ndjson" // file with segments, in new-line delimited json format
}

Eigenschaften:

jobType

Typ: string

Mögliche Werte: build-file

Beschreibung: Gibt die Aktion an, die von der App ausgeführt werden soll. Für Bundle-Generator-Module immer auf build-file setzen. Crowdin sendet Übersetzungsdaten und erwartet im Gegenzug ein generiertes Bundle.

strings, stringsUrl

Typ(strings): array

Typ(stringsUrl): string

Beschreibung: Enthält die Übersetzungsstrings für die Bundle-Generierung. Entweder strings (Inline-Array) oder stringsUrl (öffentlicher Link zu NDJSON) kann verwendet werden.


Beispiel für die Nutzlast der Antwort:

// max response payload - 5 MB
// wait timeout - 2 minutes
{
"data": {
"content": "TWF5IHRoZSBGb3JjZSBiZSB3aXRoIHlvdS4=", // base64 encoded translation file content
"contentUrl": "https://app.example.com/p5uLEpq8p-result.xml", // translation file public URL
},
"error": {
"message": "Your error message"
}
}

Eigenschaften:

data.content, data.contentUrl

Typ(data.content): string

Typ(data.contentUrl): string

Beschreibung: Verwende entweder data.content (base64-codiert) oder data.contentUrl (öffentlich zugängliche URL), um den generierten Inhalt der Übersetzungsdatei zurückzugeben. Nur eines von beiden darf in der Antwort vorhanden sein.

Das Format der Datei hängt von deiner Implementierung ab.

error.message

Typ: string

Beschreibung: Eine Fehlermeldung, die von der App an Crowdin übergeben wird und für einen Benutzer in der Benutzeroberfläche sichtbar ist.

Unten siehst du ein Beispiel für die Struktur, die verwendet wird, um Übersetzungsstrings zur Generierung benutzerdefinierter Bundles an die App zu übergeben.

Payload Beispiel:

// strings should be in "new-line delimited json" format if they passed by URL
[
{ // non plural string
"id": 1, // numeric identifier of the string in Crowdin
"identifier": "string-key-1", // required: unique string key
"context": "Some context", // optional: additional info for translators
"customData": "max 4 KB of custom data", // optional: preserved on export
"maxLength": 10, // optional, default null
"isHidden": false, // optional, default null
"hasPlurals": false, // optional, default false
"labels": ["label-one", "label-two"], // optional, default []
"text": "String source text", // required: source content
"translations": { // required: grouped by target language ID
"uk": { // targetLanguage.id
"text": "Переклад стрічки", // required: translation text
"status": "untranslated | translated | approved" // optional, default "translated"
},
// can be other languages for multilingual, check "targetLanguages" in the request payload
}
},
{ // plural string
"id": 2,
"identifier": "string-key-2",
"context": "Some optional context",
"customData": "max 4 KB of custom data",
"maxLength": 15,
"isHidden": false,
"hasPlurals": true,
"labels": [],
"text": { // keys from sourceLanguage.pluralCategoryNames
"one": "One file",
"other": "%d files",
},
"translations": {
"uk": {
"text": { // keys from targetLanguage.pluralCategoryNames
"one": "One file",
"few": "%d файла",
"many": "%d файлів",
},
"status": {
"one": "untranslated",
"few": "translated",
"many": "approved",
}
}
}
}
]

Eigenschaften:

id

Typ: integer

Erforderlich: ja

Beschreibung: Numerische ID des Strings in deinem Crowdin-Projekt. Für die Zuordnung von Übersetzungen erforderlich.

identifier

Typ: string

Erforderlich: ja

Beschreibung: Eindeutiger String-Schlüssel innerhalb der Datei. Erforderlich.

text

Typ: string (nicht plural) oder object (plural)

Beschreibung: Source-String-Text. Erforderlich zum Generieren von Übersetzungen. Bei Strings mit Pluralformen ist dies ein Objekt mit den Pluralformschlüsseln aus sourceLanguage.pluralCategoryNames.

customData

Typ: string

Erforderlich: nein

Beschreibung: Beliebige benutzerdefinierte Daten, die mit dem String verknüpft werden müssen. Hinzugefügte benutzerdefinierte Daten werden zusammen mit den entsprechenden Strings beim Übersetzungsexport exportiert.

translations

Typ: object

Erforderlich: ja

Beschreibung: Erforderliche Übersetzungen für jede Zielsprache. Jede Sprach-ID wird einem Objekt mit einem Feld text und optional status zugeordnet. Bei Strings mit Pluralformen sind auch text und status Objekte mit Schlüsseln für die jeweiligen Pluralkategorien.

War diese Seite hilfreich?