Modulet muliggør tilføjelse af understøttelse for nye tilpassede filformater. Modulet implementeres uddelegering af en kildefilfortolkning til en app med et tilpasset filformatmodul. When translations are completed, Crowdin passes a source file and a string array with translations to the Custom file format app for translation files generation. Dette modul er tilgængeligt for projektmedlemmer med administratortilladelser (eller højere).
{
"custom-file-format": [
{
"key": "relevant-modulnøgletype-xyz",
"type": "type-xyz",
"url": "/process",
"multilingual": true,
"signaturePatterns": {
"fileName": "^.+\\.xyz$",
"fileContent": "<properties>\\s*<property\\s+name=.*value=.*/>"
}
}
]
}
nøgle | Type: Required: yes Beskrivelse: Modul-identifikator i Crowdin-appen. |
type | Type: Required: yes Beskrivelse: Den tilpasset filformat-identifikator. Kan bruges i en API til at tvinge behandlingen af filerne af den Tilpasset filformat-app. Bruges parameteren |
url | Type: Required: yes Beskrivelse: Den relative URL udløst ved filimport, opdatering, oversættelses-upload og -eksport. |
multilingual | Type: Required: no Gyldige værdier: Beskrivelse: Denne parameter bruges til at kombinere indholdet af flere sprog til én forespørgsel ved up- og download af oversættelser i Crowdin-projektet. |
signaturePatterns | Type: Beskrivelse: Indeholder Bemærk: Det regulære udtryk fileContent tjekker kun de første 64 KB af filindholdet. |
Ved første filimporten detekterer systemet tilpasset filformat vha. parametrene signaturePatterns
eller type
og fremsætter en HTTP-anmodning til appens URL ($baseUrl. $url
) for yderligere behandling. Derefter behandler appen filen i et tilpasset format og svarer systemet. Anmodninger og svar til og fra de tilpasset filformat-apps har to minutters timeout. Den maksimale anmodning og respons nyttelaststørrelse er begrænset til 5 MB.
Anmod om nyttelast-eks.:
// makd. forespørgsels payload - 5 MB
// afventningstimeout - 2 min.
{
"jobType": "parse-fil | build-fil",
"organisation": {
"id": 1,
"domain": "{domain}",
"baseUrl": "https://{domain}.crowdin.com",
"apiBaseUrl": "https://{domain}.api.crowdin.com"
},
"project": {
"id": 1,
"identifier": "projektidentifikator",
"name": "Projektnavnet"
},
"file": {
"id": 1,
"name": "fil.xml",
"content": "VGhpcyBpcyBmaWxlIGNvbnRlbnQ=", // base64-kodet kildefilindhold
"contentUrl": "https://crowdin-tmp.downloads.crowdin.com/1/file.xml?aws-signatur=..." // source file public URL
},
"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": [{
// samme struktur som for sourceLanguage, tom ved upload af en ny kildefil, ét element til import_translations og eksport, kan være flere til flersprogede filer
}],
"strings": [...], // til build-file job, segmentskema
"stringsUrl": "https://tmp.downloads.crowdin.com/strings.ndjson", // til build-file job, fil med segmenter, i new-line delimited json-format
}
Egenskaber:
jobType | Type: Gyldige værdier: Beskrivelse: Angiver den handling, der skal udføres af appen. |
file.content , file.contentUrl | Type: Beskrivelse: Parametre brugt til at videregive det base64-kodet kildefilindhold ( |
strings , stringsUrl | Type(strings): Type(stringsUrl): Beskrivelse: Parametre anvendt til download af oversættelser (kun til |
Svarnyttelasteks.:
// maks. svarnyttelast - 5 MB
// afventnings timeout - 2 min.
{
"data": {
"strings": [...], // skema over segmenter
"stringsUrl": "https://app.example.com/jKe8ujs7a-segments.ndjson", // new-line delimited json-fil med fortolkede strenge
"preview": "VGhpbmdzIGFyZSBvbmx5IGltcG9zc2libGUgdW50aWwgdGhleSdyZSBub3Qu", // valgfri, base64-kodet indhold af preview html-fil, uunderstøttet ved strenge i flertalsform
"previewUrl": "https://app.example.com/LN3km2K6M-preview.html", // valgfri, URL for preview html-fil, uunderstøttet ved strenge i flertalsform
},
"error": {
"message": "Egen fejlmeddelelse"
}
}
Egenskaber:
data.strings , data.stringsUrl | Type(data.strings): Type(data.stringsUrl): Beskrivelse: Parametre brugt til at videregive det fortolkede strengeindhold. |
preview , previewUrl | Type(preview): Type(previewUrl): Beskrivelse: Parametre brugt til at videregive den valgfrie HTML-forhåndsvisning af fortolkede strengeindhold, som kan genereres af appen. Den genererede HTML-forhåndsvisning vil fremgå i Redigeringsværktøjet. See the HTML Preview file example. Bemærk: HTML-forhåndsvisning vil ikke fremgå i Crowdins Redigeringsværktøj, hvis appen videregiver strenge med flertalsform. |
error.message | Type: Description: An error message that can be passed from the app to Crowdin Enterprise and will be visible to a user in the UI. |
Svarnyttelasteks.:
// maks. svarnyttelast - 5 MB
// afventningstimeout - 2 min.
{
"data": {
"content": "TWF5IHRoZSBGb3JjZSBiZSB3aXRoIHlvdS4=", // base64-kodet oversættelsesfilindhold
"contentUrl": "https://app.example.com/p5uLEpq8p-result.xml", // oversættelsesfils offentlige URL
},
"error": {
"message": "Egen fejlmeddelelse"
}
}
Egenskaber:
data.content , data.contentUrl | Type(data.content): Type(data.contentUrl): Beskrivelse: Parametre brugt til at videregive det base64-kodet oversættelsesfilindhold ( |
error.message | Type: Description: An error message that can be passed from the app to Crowdin Enterprise and will be visible to a user in the UI. |
Nedenfor ses et eks. på den strengestruktur forventet fra appen for parse-file
-jobtypen og videresendt til appen til build-file
-jobtypen.
Eksempel på indhold:
// strings should be in "new-line delimited json" format if they passed by URL
[{ // non plural string
"previewId": 1, // only for "parse-file" jobType, required when the HTML preview of the file is generated
"id": 1, // only for "build-file" jobType
"identifier": "string-key-1", // required
"context": "Some context", // optional
"customData": "max 4 KB of custom data", // optional
"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
"translations": { // optional
"uk": { // targetLanguage.id
"text": "Переклад стрічки", // required
"status": "untranslated | translated | approved" // optional, default "translated"
},
// can be other languages for multilingual, check "targetLanguages" in the request payload
}
},
{ // plural string
"previewId": 2,
"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",
}
}
}
}]
Egenskaber:
previewId | Type: Required: ja (kun til jobbet Beskrivelse: Numerisk strengidentifikator i i HTML-forhåndsvisningsfilen. Kun brugt til |
id | Type: Beskrivelse: Numerisk strengidentifikator i Enterprise-projektet. Kun brugt til |
identifier | Type: Beskrivelse: Unik strengnøgle i selve filen. |
customData | Type: Beskrivelse: Evt. tilpassede data, som skal være tilknyttet strengen. Tilføjet tilpassede data vil eksporteres sammen de korresponderende strenge under oversættelseseksport. |
HTML-forhåndsvisning af filen
HTML-forhåndsvisning af fileks.:
<html lang="en">
<head>
<title>Optional Title</title>
<style>
table, th, td { border: 1px solid #aaa; }
</style>
</head>
<body>
<h1 style="text-align: center">HTML preview of the file</h1>
<table style="width: 100%">
<tr>
<th>Key:</th>
<th>Text:</th>
</tr>
<tr>
<td>Key 1</td>
<td><span id="string_preview_id_1">Source Text 1</span></td> <!-- 1 is previewId in strings json -->
</tr>
<tr>
<td>Key 2</td>
<td><span id="string_preview_id_2">Source Text 2</span></td> <!-- 2 is previewId in strings json -->
</tr>
</table>
</body>
</html>