Crowdin Apps JS
Die Crowdin Apps JS ist eine JavaScript-Bibliothek, die die Kommunikation zwischen Ihrer App und der Crowdin-Benutzeroberfläche ermöglicht. Da alle Crowdin Apps in einem isolierten \<iframe> ausgeführt werden, sind sie isoliert und können nicht direkt auf den Inhalt oder Code der Crowdin-Hauptseite zugreifen.
Diese Bibliothek löst dieses Problem, indem sie eine sichere Cross-Window-Messaging-Brücke (postMessage()) bereitstellt. Nach dem Einbinden der Bibliothek steht dir ein globales AP-Objekt (App Project) zur Verfügung. Dieses Objekt ist Ihr zentraler Einstiegspunkt zum Aufrufen von Methoden (wie AP.getContext()) und zum Abonnieren von Ereignissen (wie AP.events.on()).
Um das AP-Objekt zu verwenden, musst du das iframe.js-Skript im \<head> der HTML-Seite deiner App einbinden.
<script src="https://cdn.crowdin.com/apps/dist/iframe.js"></script>Globale Aktionen sind in jedem Kontext verfügbar, in dem deine App geladen werden kann (z. B. in einem Modal, im Tab „Tools“ des Projekts oder in der Editor-Seitenleiste). Sie werden alle direkt über das Root-AP-Objekt aufgerufen.
Diese Methoden ermöglichen es deiner App, essenzielle Informationen über ihre Umgebung zu erhalten, wie zum Beispiel das aktuelle Projekt, den Benutzer und das aktive UI-Theme.
Ruf ein ContextDataObject ab, das Schlüsselinformationen über die Umgebung enthält, in der die App aktuell ausgeführt wird (z. B. Projekt-ID, Benutzer und Dateidaten).
Beispiel:
AP.getContext(function(contextData) { if (contextData) { console.log("Current project ID:", contextData.project_id); if(contextData.editor) { console.log("Current file name:", contextData.editor.fileData.name); } }});callback | Typ: Erforderlich: ja Beschreibung: Eine Callback-Funktion, die die Antwort verarbeitet. Sie erhält ein Argument: das |
{ "user_id": 15, "user_login": "john.smith", "project_id": 123, "project_identifier": "docs-portal", "organization_id": 100001, "organization_domain": "acme", "user": { "id": 15, "username": "john.smith", "fullname": "John Smith", "isAdmin": false }, "project": { "id": 123, "name": "Docs Portal", "identifier": "docs-portal", "type": "file-based", "sourceLanguage": "en", "targetLanguages": ["fr", "uk"], "description": "Public documentation portal" }, "permissions": [ { "name": "translator", "allLanguages": false, "languages": ["fr"] }, { "name": "proofreader", "allLanguages": true, "languages": [] } ], "editor": {62 ausgeblendete Zeilen
"mode": "translate", "theme": "dark", "source_language_id": "en", "target_language_id": "fr", // Present in "translate" and "proofread" "target_language_ids": ["fr", "uk"], // Present only in "multilingual" "active_target_language_id": "fr", // The currently active target language in the Editor "task_id": 327, // Present only if Task-based access control is enabled "task": { "id": 327, "type": 2, "status": 0, "title": "New task", "description": "Task description", "created": "2025-01-01 10:30:00", "to_language": "French", "workflow_step_id": 0, "workflow_step_title": "", "language_id": "fr" }, "file": 987, "fileData": { "id": "987", "is_plain_text": true, "type": "android", "status": "1", "parent_id": "0", "node_type": "1", "created": "2025-01-01 10:30:00", "extension": "xml", "priority": "1", "name": "example_file.xml", "upload_ready": 1, "export_ready": 1, "export_xliff_ready": 1, "can_change": 1, "plural_support": 1, "excluded_languages": [], "html_preview": 0, "identifier_required": 1, "total": 50, "translated": 10, "approved": 5, "preTranslated": 0, "translated_percent": 20, "approved_percent": 10, "progress": { "total": 50, "translated": 10, "approved": 5, "translated_percent": 20, "approved_percent": 10, "pre_translated": 0, "file_id": 987, "language_id": 2, "translation_link": "/editor/project-name/987/en-fr" } }, "workflow_step": { "id": 7777, "title": "Translation", "type": "Translate" } }}user_id | Typ: Beschreibung: Die eindeutige numerische ID des Benutzers, dem die App derzeit angezeigt wird. Nur für authentifizierte Benutzer verfügbar. |
user_login | Typ: Beschreibung: Der Benutzername des Benutzers, für den die App derzeit angezeigt wird. Nur für authentifizierte Benutzer verfügbar. |
project_id | Typ: Beschreibung: Die eindeutige numerische ID des aktuellen Projekts. |
project_identifier | Typ: Beschreibung: Der Bezeichner des Projekts, in dem das Modul geöffnet ist. Wird angezeigt, wenn das Modul in einem Projektkontext ausgeführt wird und der Bezeichner verfügbar ist. |
organization_id | Typ: Beschreibung: Die eindeutige numerische ID der Organisation (nur Crowdin Enterprise). |
organization_domain | Typ: Beschreibung: Die Domain der Organisation, in der die App installiert ist (nur Crowdin Enterprise). |
user | Typ: Beschreibung: Ein Objekt mit Angaben zu dem Benutzer, dem die App angezeigt wird. |
user.id | Typ: Beschreibung: Die eindeutige numerische ID des Benutzers. |
user.username | Typ: Beschreibung: Der Benutzername des Benutzers. |
user.fullname | Typ: Beschreibung: Der vollständige Name des Benutzers. |
user.isAdmin | Typ: Beschreibung: Crowdin Enterprise only. Gibt an, ob der Benutzer über Administratorzugriff auf die Organisation verfügt. |
project | Typ: Beschreibung: Ein Objekt mit Angaben zu dem Projekt, in dem die App ausgeführt wird. Wird angezeigt, wenn die App in einem Projektkontext ausgeführt wird. |
project.id | Typ: Beschreibung: Die eindeutige numerische ID des Projekts. |
project.name | Typ: Beschreibung: Der Anzeigename des Projekts. |
project.identifier | Typ: Beschreibung: Der Bezeichner des Projekts. |
project.type | Typ: Zulässige Werte: |
project.sourceLanguage | Typ: Beschreibung: Der Sprachcode der Ausgangssprache des Projekts. |
project.targetLanguages | Typ: Beschreibung: Die Sprachcodes der Zielsprachen des Projekts. |
project.description | Typ: Beschreibung: Die Projektbeschreibung. |
permissions | Typ: Beschreibung: Die Rollen, die der Benutzer im aktuellen Projekt innehat. Es wird nur die höchste Zugriffsebene
aufgeführt, sodass ein Benutzer mit der Rolle |
permissions[].name | Typ: Zulässige Werte: |
permissions[].allLanguages | Typ: Beschreibung: Gibt an, ob die Rolle jede Zielsprache des Projekts abdeckt. |
permissions[].languages | Typ: Beschreibung: Die Sprachcodes, auf die die Rolle beschränkt ist. Leer, wenn
|
editor | Typ: Beschreibung: Ein Objekt mit dem Editor-Kontext. |
editor.mode | Typ: Zulässige Werte: Beschreibung: Der aktuelle Modus des Editors. |
editor.theme | Typ: Zulässige Werte: Beschreibung: Der aktuelle Modus des Editors. |
editor.source_language_id | Typ: Beschreibung: Die ID der Ausgangssprache (z. B. |
editor.target_language_id | Typ: Beschreibung: Die ID der aktuellen Zielsprache (z. B. |
editor.target_language_ids | Typ: Beschreibung: Ein Array mit den IDs der Zielsprachen. |
editor.active_target_language_id | Typ: Beschreibung: Die ID der aktuell aktiven Zielsprache im Editor (z. B. |
editor.task_id | Typ: Beschreibung: Die numerische ID der aktuellen Aufgabe. |
editor.task | Typ: Beschreibung: Ein detailliertes Objekt mit Metadaten zur aktuellen Aufgabe (e.g., title, status, description). Nur zusammen mit |
editor.file | Typ: Beschreibung: Die numerische ID der Datei, die derzeit im Editor geöffnet ist. |
editor.fileData | Typ: Beschreibung: Ein detailliertes Objekt mit Daten zur geöffneten Datei. (Dieses Objekt entspricht dem Objekt, das von |
editor.fileData.id | Typ: Beschreibung: Die Datei-ID (als Zeichenkette). |
editor.fileData.name | Typ: Beschreibung: Der Name der Datei. |
editor.fileData.node_type | Typ: Beschreibung: Der Typ des Knotens ( |
editor.fileData.total | Typ: Beschreibung: Die Gesamtzahl der Strings in der Datei. |
editor.fileData.progress | Typ: Beschreibung: Ein Objekt mit Daten zum Übersetzungsfortschritt für die aktuelle Sprache. |
editor.fileData.progress.translation_link | Typ: Beschreibung: Ein relativer URL-Pfad zu der Datei im Editor. |
editor.workflow_step | Typ: Beschreibung: nur für Crowdin Enterprise. Details des aktuellen Workflow-Schritts.
|
editor.workflow_step.id | Typ: Beschreibung: Die numerische ID des Workflow-Schritts. |
editor.workflow_step.title | Typ: Beschreibung: Der Anzeigename des Workflow-Schritts. |
editor.workflow_step.type | Typ: Beschreibung: Der Typ des Workflow-Schritts (z. B. |
Ruft ein PageStateObject mit einer Momentaufnahme des aktuellen Editor-Zustands ab: alles, was AP.getContext() zurückgibt, sowie der aktuelle String, die Stringliste, Übersetzungen, Filter und die Dateiauswahl. Verwende es, wenn deine App mehrere Zustände gleichzeitig benötigt, anstatt separate AP.editor.get*-Aufrufe aneinanderzureihen.
Beispiel:
AP.getPageState(function(pageState) { if (pageState) { console.log("Current string:", pageState.currentString); console.log("Current page:", pageState.page); }});callback | Typ: Erforderlich: ja Beschreibung: Eine Callback-Funktion, die die Antwort verarbeitet. Sie erhält ein Argument: das |
Die folgenden Objekte und Arrays sind verkürzt dargestellt. Die vollständige Struktur findest du in den in der Tabelle verlinkten Methoden.
{ // Every field returned by AP.getContext(), plus the fields below "currentString": { "id": 1568759, "text": "Welcome!", "context": "Main screen" }, "stringsList": [ { "id": 1568759, "text": "Welcome!" } ], "selectedStrings": null, "translations": [], "topTranslation": null, "filter": 3, "customFilter": { "translations": "untranslated", "croql_expression": "" }, "croqlFilter": "", "filtersList": [ { "name": "Show All", "value": 3 } ], "page": 1, "workflowStepStatusFilter": null, "selectedFiles": [], "isMultipleFilesSelected": false, "unsavedSourceStrings": null}Der Snapshot wiederholt jedes Feld der Antwort von AP.getContext und ergänzt die folgenden Felder.
currentString | Typ: Beschreibung: Die derzeit aktive Quellzeichenfolge. Informationen zur Objektstruktur finden Sie unter |
stringsList | Typ: Beschreibung: Die derzeit in der Zeichenfolgenliste angezeigten Zeichenfolgen. Informationen zur Objektstruktur finden Sie unter |
selectedStrings | Typ: Beschreibung: Die derzeit in der Editor-Liste ausgewählten Zeichenfolgen. Informationen zur Objektstruktur finden Sie unter |
translations | Type: Description: The translations and suggestions for the current string. Informationen zur Objektstruktur finden Sie unter |
topTranslation | Typ: Beschreibung: Die oberste Übersetzung des aktuellen Strings. Siehe |
filter | Typ: Beschreibung: Die numerische ID des aktiven Basisfilters. Siehe |
customFilter | Typ: Beschreibung: Der aktuelle Zustand des erweiterten Filters. Siehe |
croqlFilter | Typ: Beschreibung: Die aktive CroQL-Filterabfrage oder eine leere Zeichenkette, wenn kein Filter festgelegt ist. Siehe
|
filtersList | Typ: Beschreibung: Die verfügbaren Standardfilter mit ihren Namen und numerischen IDs. Siehe |
page | Typ: Beschreibung: Die aktuelle Seitenzahl der Zeichenfolgenliste. Siehe |
workflowStepStatusFilter | Typ: Beschreibung: Nur Crowdin Enterprise. Der aktive Filter für den Status des Workflow-Schritts am
aktuellen Workflow-Schritt oder |
selectedFiles | Typ: Beschreibung: Die in der Dateistruktur ausgewählten Dateien. Die Objektstruktur finden Sie unter |
isMultipleFilesSelected | Typ: Beschreibung: Gibt an, ob mehr als eine Datei im Dateibaum ausgewählt ist. Siehe |
unsavedSourceStrings | Typ: Beschreibung: Die Quellstrings mit ungespeicherten Änderungen. Siehe |
Ruft den Namen des aktuell aktiven Benutzeroberflächen-Designs (UI-Theme) ab.
Beispiel:
AP.getTheme(function(themeName) { console.log("Current theme:", themeName); // e.g., 'light', 'dark', or 'auto'});callback | Typ: Erforderlich: ja Beschreibung: Eine Callback-Funktion, die die Antwort verarbeitet. Sie nimmt ein Argument entgegen: eine |
Diese Methode gibt einen einfachen string zurück.
"light"Typ: Zeichenkette
Zulässige Werte: hell, dunkel, auto
Ruft ein Objekt mit allen aktiven Crowdin-CSS-Variablen ab. Damit kann deine App ihre Elemente so gestalten, dass sie zum UI-Theme des Benutzers passen und sich nahtlos einfügen.
Beispiel:
AP.getCssVariables(function(variables) { if (variables) { // Set our app's text color to match Crowdin's document.body.style.color = variables['--crowdin-body-color']; }});callback | Typ: Erforderlich: ja Beschreibung: Eine Callback-Funktion, die die Antwort verarbeitet. Sie erhält ein Argument: ein |
{ "--crowdin-level-1-bg": "#f5f7f8", "--crowdin-level-2-bg": "#ffffff", "--crowdin-body-bg": "#f5f7f8", "--crowdin-title-color": "rgba(38, 50, 56, 1)", "--crowdin-body-color": "rgba(38, 50, 56, 0.87)", "--crowdin-text-muted": "rgba(38, 50, 56, 0.54)", "--crowdin-primary": "rgba(67, 160, 71, 1)", "..." : "..."}Gibt ein Objekt zurück, bei dem jeder Schlüssel den Namen einer CSS-Variablen (z. B. "--crowdin-primary") und der Wert ihren aktuell berechneten Wert (z. B. "rgba(67, 160, 71, 1)") enthält.
Ruft den Authentifizierungs-JWT-Token des aktuellen Benutzers ab. Mit diesem Token können im Namen des Benutzers Anfragen an die Crowdin API v2 gestellt werden.
Beispiel:
AP.getJwtToken(function(token) { if (token) { console.log("My JWT:", token); } else { console.log("Token is not available in this context."); }});callback | Typ: Erforderlich: ja Beschreibung: Eine Callback-Funktion, die die Antwort verarbeitet. Sie nimmt ein Argument entgegen: eine |
Diese Methode gibt einen einfachen string zurück, der den JWT-Token enthält, oder null.
"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkw...SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"Du kannst aus deiner App im Namen des aktuellen Benutzers die Crowdin REST API aufrufen, entweder direkt oder über den offiziellen API-Client.
Deine App kann die Crowdin REST API direkt aus dem iframe aufrufen. Crowdin führt jede Anfrage im Namen des aktuellen Benutzers aus und beschränkt sie auf die im App-Manifest angegebenen Scopes, sodass in deinem Code keine Tokens benötigt werden.
Beispiel:
AP.apiRequest( { method: "get", path: "projects?limit=25", headers: {} }, (res) => { if (res.status >= 200 && res.status < 300) { console.log(res.body.data); } },);payload | Typ: Erforderlich: ja Beschreibung: Die Definition der Anfrage. Siehe die folgenden Payload-Felder. |
callback | Typ: Erforderlich: ja Beschreibung: Eine Funktion, die den Antwort-Payload mit den Eigenschaften status, statusText und body erhält. |
method | Typ: Erforderlich: ja Beschreibung: HTTP-Methode: |
path | Typ: Erforderlich: ja Beschreibung: Pfad relativ zu |
headers | Typ: Erforderlich: ja Beschreibung: Zusätzliche Anfrage-Header. Übergib ein leeres Objekt, wenn keine benötigt werden. |
body | Typ: Erforderlich: nein Beschreibung: Request-Body: ein JSON-serialisierbarer Wert, eine Zeichenfolge oder ein |
Der Callback erhält einen Antwort-Payload mit drei Eigenschaften: status, statusText und body. Crowdin gibt diesen Payload für jede abgeschlossene Anfrage zurück, unabhängig davon, ob sie erfolgreich war. Eine Nicht-2xx-Antwort löst daher keinen Fehler aus. Ein status von 0 weist auf einen Netzwerkfehler hin.
Der body ist bei JSON-Antworten ein geparster JSON-Wert, bei Textantworten ein String und bei binären Antworten ein ArrayBuffer. Er fehlt, wenn die Antwort keinen Body enthält.
const buffer = await file.arrayBuffer();
AP.apiRequest( { method: "post", path: "storages", headers: { "Crowdin-API-FileName": file.name }, body: buffer, }, (res) => console.log(res.body.data),);Statt AP.apiRequest direkt aufzurufen, kannst du den offiziellen @crowdin/crowdin-api-client zusammen mit dem Paket @crowdin/apps-api-adapter verwenden. The adapter implements the client’s HTTP layer on top of AP.apiRequest, so you get the full typed API surface while every request still runs under the current user’s session and manifest scopes.
npm install @crowdin/apps-api-adapter @crowdin/crowdin-api-clientimport { AppsApiAdapter } from "@crowdin/apps-api-adapter";import { Client } from "@crowdin/crowdin-api-client";
const crowdin = new Client( { token: "unused" }, { httpClient: new AppsApiAdapter() },);
const { data: projects } = await crowdin.projectsGroupsApi.listProjects();
const file = document.querySelector("#file").files[0];await crowdin.uploadStorageApi.addStorage(file.name, file);- Binäre Uploads akzeptieren ein
Blob,File,ArrayBufferoder typisiertes Array; der Adapter konvertiert diese automatisch. - Fehlgeschlagene Anfragen werden mit dem üblichen
CrowdinError/CrowdinValidationErrordes Clients abgewiesen. - GraphQL ist über die Bridge nicht verfügbar; verfügbar ist nur die REST API (
/api/v2).
Mit dieser Methodengruppe kann deine App Informationen über Größe und Position ihres iframe abrufen und Größenänderungen anfordern.
Ruft die aktuell sichtbaren Abmessungen des iframe deiner App ab. Das ist hilfreich, um zu erkennen, wie viel von deiner App beim Scrollen für den Benutzer tatsächlich sichtbar ist.
Beispiel:
AP.getViewportSize(function(viewport) { console.log("Visible iframe width:", viewport.width); console.log("Visible iframe height:", viewport.height);});callback | Typ: Erforderlich: ja Beschreibung: Eine Callback-Funktion, die die Antwort verarbeitet. Sie erhält ein |
{ "width": 800, "height": 250}width | Typ: Beschreibung: Die sichtbare Breite des iframe in Pixeln. |
height | Typ: Beschreibung: Die sichtbare Höhe des iframes in Pixeln, angepasst an die Crowdin-Hauptkopfzeile und den Bildlauf. |
Ruft die Abmessungen des gesamten Browserfensters (des top-Fensters) ab, nicht nur die des iframe der App.
Beispiel:
AP.getWindowSize(function(windowSize) { console.log("Browser window width:", windowSize.width); console.log("Browser window height:", windowSize.height);});callback | Typ: Erforderlich: ja Beschreibung: Eine Callback-Funktion, die die Antwort verarbeitet. Sie erhält ein |
{ "width": 1440, "height": 900}width | Typ: Beschreibung: Die Gesamtbreite des Browserfensters in Pixeln. |
height | Typ: Beschreibung: Die Gesamthöhe des Browserfensters in Pixeln. |
Ruft die vertikale Scrollposition des iframe deiner App relativ zum oberen Rand des Viewports des Hauptfensters ab.
Gibt 0 zurück, wenn der obere Bereich der App sichtbar ist. Wenn der Benutzer die Seite nach unten scrollt, ist der Wert eine positive Zahl, die angibt, wie viele Pixel der App außerhalb des sichtbaren Bereichs liegen.
Beispiel:
AP.getScrollPosition(function(scrollPosition) { console.log("App is scrolled by:", scrollPosition, "pixels"); // Example output: 150});callback | Typ: Erforderlich: ja Beschreibung: Eine Callback-Funktion, die die Antwort verarbeitet. Sie erhält ein |
Diese Methode gibt einen einfachen integer zurück, der die Anzahl der Pixel darstellt.
150Aktualisiert die Abmessungen des iframe deiner App. Dies ist die wichtigste Methode zur Steuerung der Größe deiner App-Ansicht.
Beispiel:
// Request to resize the iframe to 400px wide and 500px tallAP.resize('400px', '500px');
// You can also use percentagesAP.resize('100%', '300px');width | Typ: Erforderlich: Ja Beschreibung: Die gewünschte Breite (z. B. |
height | Typ: Erforderlich: Ja Beschreibung: Die gewünschte Höhe (z. B. |
Ruft die aktuellen Abmessungen des iframe der App ab.
Beispiel:
const currentSize = AP.size();console.log("Current width:", currentSize.w);console.log("Current height:", currentSize.h);{ "w": "100%", "h": 926}w | Typ: Beschreibung: Die aktuelle Breite des iframe (z. B. |
h | Typ: Beschreibung: Die aktuelle Höhe des iframe in Pixeln. |
AP.registerIntersectionObserver(elementId, callback)
Abschnitt betitelt „AP.registerIntersectionObserver(elementId, callback)“Registriert einen Intersection Observer für ein Element innerhalb des iframe deiner App. Damit kannst du erkennen, wann ein Element beim Scrollen des Benutzers sichtbar oder ausgeblendet wird.
Beispiel:
// Assuming you have an element: <div id="my-element"></div>AP.registerIntersectionObserver('my-element', function(entry) { if (entry.isIntersecting) { console.log('Element is now visible!'); } else { console.log('Element is hidden.'); }});elementId | Typ: Erforderlich: Ja Beschreibung: Die |
callback | Typ: Erforderlich: ja Beschreibung: Ein Callback, der ausgelöst wird, wenn sich die Sichtbarkeit des Elements ändert. Sie erhält ein |
Mit diesen Methoden kann deine App die Navigation innerhalb von Crowdin steuern, etwa indem der Benutzer auf eine neue Seite weitergeleitet oder die App-Ansicht geschlossen wird.
Leitet das gesamte Browserfenster des Benutzers auf eine andere Seite innerhalb von Crowdin weiter.
Beispiel (Crowdin):
// Redirects to the user's account settingsAP.redirect('/settings#account');
// Redirects to a project's Activity tabAP.redirect('/project/my-project/activity-stream');
// Redirects to the Store with queryParamsAP.redirect('/store/apps', {'a': 123});Beispiel (Crowdin Enterprise):
// Redirects to the user's account settingsAP.redirect('/u/user_settings');
// Redirects to a project's Activity tabAP.redirect('/u/projects/15/activity');
// Redirects to the Store with queryParamsAP.redirect('u/marketplace/apps', {'a': 123});path | Typ: Erforderlich: Ja Beschreibung: Der relative Pfad innerhalb von Crowdin, zu dem weitergeleitet werden soll. Dieser Pfad unterscheidet sich bei Crowdin und Crowdin Enterprise. |
queryParams | Typ: Erforderlich: nein Beschreibung: Ein optionales Objekt mit Schlüssel-Wert-Paaren, die als URL-Suchparameter hinzugefügt werden. |
Schließt das Modal-Fenster, in dem die App aktuell ausgeführt wird.
Beispiel:
// Close the modal this app is running inAP.closeAppModal();Schließt die Ansicht der App, wenn sie über die obere Navigationsleiste (die „Navbar“) geöffnet wurde.
Beispiel:
// Close the app's panelAP.closeNavbarExtension();Diese Methoden werden von Apps verwendet, die benutzerdefinierte Formulare darstellen oder schemabasierte Daten benötigen, etwa benutzerdefinierte Workflow-Schritte in Crowdin Enterprise.
Ruft die aktuellen Daten aus dem Formular der App ab. Diese Methode wird typischerweise von Crowdin aufgerufen, wenn ein Benutzer versucht, von einem benutzerdefinierten App-Bildschirm fortzufahren.
Beispiel:
AP.getFormData(function(formData) { if (formData) { console.log("Current form data:", formData); }});callback | Typ: Erforderlich: ja Beschreibung: Eine Callback-Funktion, die die Antwort verarbeitet. Sie erhält das Formular-Datenobjekt oder |
Der Payload hängt vollständig von den Formulardaten der App ab.
{ "custom_field": "some-value", "another_setting": true}Die Struktur dieses Objekts wird von deiner App definiert.
Benachrichtigt Crowdin darüber, dass sich die Daten im Formular deiner App geändert haben.
Beispiel:
// Call this inside your app when a form field changesconst myFormData = { custom_field: "new-value" };AP.formDataUpdated(myFormData);detail | Typ: Erforderlich: ja Beschreibung: Das Objekt mit dem neuen Zustand deiner Formulardaten. |
Ruft die von Crowdin bereitgestellten Anfangsdaten zum Darstellen der Benutzeroberfläche deiner App ab. Dies wird häufig bei benutzerdefinierten Workflow-Schritten verwendet, die aufgabenspezifische Daten benötigen.
Beispiel:
AP.getRenderData(function(renderData) { if (renderData) { console.log("Initial data for rendering:", renderData); }});callback | Typ: Erforderlich: ja Beschreibung: Eine Callback-Funktion, die die Antwort verarbeitet. Sie erhält das Renderdatenobjekt oder ein leeres Objekt |
Der Payload ist dynamisch und hängt vom Kontext der App ab.
{ "task_id": 123, "file_ids": [10, 11, 12]}Die Struktur dieses Objekts ist dynamisch und wird durch den Kontext definiert, in dem die App gestartet wird.
Ruft das für die App definierte Formularschema ab. Dies wird typischerweise von Apps verwendet, die eine Benutzeroberfläche auf Grundlage eines von Crowdin bereitgestellten Schemas darstellen.
Beispiel:
AP.getSchema(function(schema) { if (schema) { console.log("Form schema:", schema); }});callback | Typ: Erforderlich: ja Beschreibung: Eine Callback-Funktion, die die Antwort verarbeitet. Sie erhält das Schemaobjekt oder |
Der Payload ist ein Formularschemaobjekt, häufig im JSON-Schema-Format.
{ "type": "object", "properties": { "custom_field": { "type": "string", "title": "Custom Field" } }}Die Struktur dieses Objekts ist dynamisch und wird durch die Konfiguration der App definiert.
Mit diesen Methoden kann deine App Informationen aus der Editor-Benutzeroberfläche abrufen und dort Aktionen ausführen. They are available only when your app is loaded within the Crowdin Editor (e.g., in the side panel) and are all called via the AP.editor object.
Mit dieser Methodengruppe kann deine App Informationen über die im Editor aktuell angezeigten Strings und Dateien abrufen und die Dateiauswahl ändern. Um mehrere Teile des Editorstatus mit einem einzigen Aufruf abzurufen, verwende AP.getPageState.
Ruft ein Datenobjekt für den aktuell aktiven (hervorgehobenen) Quellstring im Editor ab.
Beispiel:
AP.editor.getString(function(stringData) { if (stringData) { console.log("Active string ID:", stringData.id); } else { console.log("No string is currently active."); }});callback | Typ: Erforderlich: ja Beschreibung: Eine Callback-Funktion, die die Antwort verarbeitet. Sie erhält ein |
{ "id": 1568759, "identifier": "welcome.key", "text": "Welcome!", "context": "Main screen welcome message", "max_length": 0, "file": { "id": 15385, "name": "google_play.xml" }}id | Typ: Beschreibung: Die eindeutige numerische ID der Quellzeichenfolge. |
identifier | Typ: Beschreibung: Der Schlüssel oder die Kennung der Zeichenkette (z. B. |
text | Typ: Beschreibung: Der vollständige Text der Quellzeichenkette. |
Kontext | Typ: Beschreibung: Der mit der Zeichenkette verknüpfte Kontext. |
max_length | Typ: Beschreibung: Die maximal zulässige Länge der Übersetzung ( |
file | Typ: Beschreibung: Ein Objekt mit Informationen über die Datei, zu der dieser String gehört. |
file.id | Typ: Beschreibung: Die eindeutige ID der Datei. |
file.name | Typ: Beschreibung: Der Name der Datei. |
Ruft ein Array von Datenobjekten für alle derzeit in der Stringliste sichtbaren Strings ab (unter Berücksichtigung der aktuellen Datei, des Filters und der Seite).
Beispiel:
AP.editor.getStringsList(function(strings) { if (strings && strings.length > 0) { console.log("Total strings in list:", strings.length); console.log("First string:", strings[0]); }});callback | Typ: Erforderlich: ja Beschreibung: Eine Callback-Funktion, die die Antwort verarbeitet. Sie erhält ein Array mit |
[ { "id": 1569759, "project_id": "844514", "text": "Welcome!", "key": "welcome", "file_id": 15411 }, { "id": 1569761, "project_id": "844514", "text": "Save as...", "key": "save_as", "file_id": 15411 }]id | Typ: Beschreibung: Die eindeutige numerische ID der Quellzeichenfolge. |
project_id | Typ: Beschreibung: Die ID des Projekts, zu dem diese Zeichenkette gehört. |
text | Typ: Beschreibung: Der Text der Quellzeichenkette. |
key | Typ: Beschreibung: Der Schlüssel oder die Kennung der Zeichenkette. |
file_id | Typ: Beschreibung: Die eindeutige ID der Datei, zu der diese Zeichenfolge gehört. |
Ruft Informationen zu den Strings ab, die der Benutzer aktuell in der Editor-Liste ausgewählt (markiert) hat.
Beispiel:
AP.editor.getSelectedStrings(function(selectedData, selectedCount) { if (selectedData === 'all') { console.log(`All ${selectedCount} strings are selected.`); } else { console.log(`Selected ${selectedCount} individual strings:`, selectedData); }});callback | Typ: Erforderlich: ja Beschreibung: Eine Callback-Funktion, die die Antwort verarbeitet. Sie erhält zwei Argumente (in dieser Reihenfolge):
|
Beispiel für den Antwort-Payload (bestimmte Strings ausgewählt)
Abschnitt betitelt „Beispiel für den Antwort-Payload (bestimmte Strings ausgewählt)“[ { "string": { "id": 1569759, "identifier": "welcome", "text": "Welcome!", "context": "welcome", "max_length": 0, "file": { "id": 15411, "name": "crowdin_sample_android.xml" } }, "translations": { "fr": [] } }, { "string": { "id": 1569761, "identifier": "save_as", "text": "Save as...", "context": "save_as", "max_length": 0, "file": { "id": 15411, "name": "crowdin_sample_android.xml" } }, "translations": { "fr": [ { "id": 690949, "text": "Sauvegarder sous..." } ] } }]Beispiel für den Antwort-Payload (alle Strings ausgewählt)
Abschnitt betitelt „Beispiel für den Antwort-Payload (alle Strings ausgewählt)“Wenn alle Strings im Projekt ausgewählt sind, gibt das erste Argument des Callbacks Folgendes zurück:
"all"Die folgenden Felder gelten für die SelectedStringObject-Elemente, die zurückgegeben werden, wenn selectedData ein Array ist:
Zeichenkette | Typ: Beschreibung: Das Quellstring-Objekt. Siehe die Struktur von |
translations | Typ: Beschreibung: Ein Objekt mit Übersetzungen für den String, nach Sprach-ID als Schlüssel. |
translations.[language_id] | Typ: Beschreibung: Ein Array von Übersetzungsobjekten für die angegebene Zielsprache (z. B.
|
Ruft ein Array von Datenobjekten für alle Dateien ab, die aktuell im Dateibaum ausgewählt (markiert) sind.
Beispiel:
AP.editor.getSelectedFiles(function(files) { if (files && files.length > 0) { console.log("Selected files count:", files.length); console.log("First selected file:", files[0].name); }});callback | Typ: Erforderlich: ja Beschreibung: Eine Callback-Funktion, die die Antwort verarbeitet. Sie erhält ein Array mit |
[ { "id": "15411", "is_plain_text": true, "type": "android10", "status": "1", "parent_id": "0", "node_type": "1", "created": "2025-11-07 14:53:28", "extension": "xml", "priority": "1", "name": "crowdin_sample_android.xml", "upload_ready": 1, "export_ready": 1, "export_xliff_ready": 1, "can_change": 1, "plural_support": 1, "excluded_languages": [], "html_preview": false, "identifier_required": 1, "total": 45, "translated": 0, "approved": 0, "preTranslated": 0, "translated_percent": 0, "approved_percent": 0 }]id | Typ: Beschreibung: Die eindeutige ID der Datei. |
name | Typ: Beschreibung: Der Name der Datei. |
type | Typ: Beschreibung: Die Dateityp-Kennung (z. B. |
node_type | Typ: Beschreibung: Der Typ des Knotens in der Dateistruktur (z. B. |
total | Typ: Beschreibung: Die Gesamtzahl der Zeichenfolgen in der Datei. |
translated | Typ: Beschreibung: Die Anzahl der übersetzten Zeichenfolgen in der Datei (für die aktuelle Sprache). |
approved | Typ: Beschreibung: Die Anzahl der freigegebenen Zeichenfolgen in der Datei (für die aktuelle Sprache). |
AP.editor.isMultipleFilesSelected(callback)
Abschnitt betitelt „AP.editor.isMultipleFilesSelected(callback)“Prüft, ob aktuell mehr als eine Datei im Dateibaum ausgewählt (markiert) ist.
Beispiel:
AP.editor.isMultipleFilesSelected(function(isMultiple) { if (isMultiple) { console.log("Multiple files are selected."); } else { console.log("Only one file (or no files) is selected."); }});callback | Typ: Erforderlich: ja Beschreibung: Eine Callback-Funktion, die die Antwort verarbeitet. Sie erhält einen |
Diese Methode gibt einen einfachen boolean zurück.
trueÄndert die Editoransicht, sodass eine einzelne andere Datei fokussiert wird.
Beispiel:
// Switch the Editor to show strings from file with ID 15409AP.editor.changeFile('15409');fileId | Typ: Erforderlich: Ja Beschreibung: Die ID der Datei, zu der Sie wechseln möchten. |
Wählt mehrere Dateien im Dateibaum aus. Dies entspricht programmgesteuert dem Auswählen mehrerer Dateiauswahl-Kontrollkästchen durch einen Benutzer.
Beispiel:
// Select two specific files in the file listAP.editor.changeFiles(['15409', '15411']);fileIds | Typ: Erforderlich: Ja Beschreibung: Ein Array mit Datei-IDs (als Zeichenfolgen oder Ganzzahlen), die ausgewählt werden sollen. |
AP.editor.getUnsavedSourceStrings(callback)
Abschnitt betitelt „AP.editor.getUnsavedSourceStrings(callback)“Ruft eine Liste von Quellstrings ab, die ungespeicherte Änderungen enthalten.
Beispiel:
AP.editor.getUnsavedSourceStrings(function(unsavedStrings) { if (unsavedStrings) { console.log("Unsaved strings:", unsavedStrings); }});callback | Typ: Erforderlich: ja Beschreibung: Eine Callback-Funktion zur Verarbeitung der Antwort. Sie erhält ein Array von Objekten mit ungespeicherten Strings oder |
Mit dieser Methodengruppe kann deine App Übersetzungsvorschläge abrufen sowie Text im Übersetzungsbereich des Editors schreiben oder ändern.
Ruft ein Array aller Übersetzungen und Vorschläge (von Benutzern, TM und MT) für den aktuell aktiven Quellstring ab.
Beispiel:
AP.editor.getTranslations(function(translations) { if (translations && translations.length > 0) { console.log("Total translations/suggestions:", translations.length); console.log("First translation author:", translations[0].author.login); }});callback | Typ: Erforderlich: ja Beschreibung: Eine Callback-Funktion, die die Antwort verarbeitet. Sie erhält ein Array mit |
[ { "id": 690949, "string_id": 1569689, "text": "Translation text", "target_language_id": "fr", "votes_rating": 0, "approved": false, "author": { "id": "12729493", "login": "example_user", "name": "Example User", "avatar_url": "https://.../avatar.png" }, "created_at": "2025-11-07T08:19:10-05:00" }]id | Typ: Beschreibung: Die eindeutige numerische ID der Übersetzung. |
string_id | Typ: Beschreibung: Die ID der Quellzeichenfolge, zu der diese Übersetzung gehört. |
text | Typ: Beschreibung: Der Übersetzungstext. |
target_language_id | Typ: Beschreibung: Die ID der Sprache, für die diese Übersetzung bestimmt ist (z. B. |
votes_rating | Typ: Beschreibung: Die aktuelle Punktzahl für diese Übersetzung. |
approved | Typ: Beschreibung: |
author | Typ: Beschreibung: Ein Objekt mit Informationen über den Benutzer, der die Übersetzung erstellt hat. |
author.id | Typ: Beschreibung: Die eindeutige ID des Autors. |
author.login | Typ: Beschreibung: Der Anmeldename des Autors. |
created_at | Typ: Beschreibung: Der Zeitstempel nach ISO 8601, der angibt, wann die Übersetzung erstellt wurde. |
Ruft ein einzelnes TranslationObject für die „oberste“ Übersetzung des aktuell aktiven Strings ab (z. B. die genehmigte Übersetzung oder die mit den meisten Stimmen).
Beispiel:
AP.editor.getTopTranslation(function(topTranslation) { if (topTranslation) { console.log("Top translation text:", topTranslation.text); } else { console.log("No translations exist for this string yet."); }});callback | Typ: Erforderlich: ja Beschreibung: Eine Callback-Funktion, die die Antwort verarbeitet. Sie erhält ein |
{ "id": 690949, "string_id": 1569689, "text": "This is the top translation.", "target_language_id": "fr", "votes_rating": 1, "approved": true, "author": { "id": "12729493", "login": "example_user" }, "created_at": "2025-11-07T08:19:10-05:00"}Diese Methode gibt ein einzelnes TranslationObject zurück. Eine vollständige Liste der Eigenschaften findest du in der Strukturtabelle für AP.editor.getTranslations.
Setzt den Text im Haupt-Übersetzungstextfeld des Editors für den aktiven String oder überschreibt ihn.
Beispiel:
// Set the translation text to "Hello world"AP.editor.setTranslation("Hello world");text | Typ: Erforderlich: Ja Beschreibung: Der Text, der in den Übersetzungsbereich eingefügt werden soll. |
Hängt Text an das Ende des vorhandenen Textes im Übersetzungstextfeld des Editors an.
Beispiel:
// If the text area contains "Hello", this will change it to "Hello world"AP.editor.appendTranslation(" world");text | Typ: Erforderlich: Ja Beschreibung: Der anzuhängende Text. |
Löscht den gesamten Text aus dem Übersetzungstextfeld des Editors für den aktiven String.
Beispiel:
AP.editor.clearTranslation();Setzt den Fokus des Browsers auf das Übersetzungstextfeld des Editors.
Beispiel:
AP.editor.setFocus();AP.editor.setUnsavedSuggestion(suggestion)
Abschnitt betitelt „AP.editor.setUnsavedSuggestion(suggestion)“Setzt einen „ungespeicherten Vorschlag“ für einen bestimmten String. Dies wird verwendet, um programmgesteuert eine Übersetzung hinzuzufügen, ohne sie zu speichern, und wird häufig in der Multilingual-Ansicht genutzt.
Beispiel:
AP.editor.setUnsavedSuggestion({ id: 1569759, // The numeric or string ID of the phrase text: 'My unsaved suggestion', // The translation text languageId: 'fr', // Target language code pluralId: 1, // Optional: Specific plural form ID translationId: 45678 // Optional: ID if editing an existing translation});suggestion | Typ: Erforderlich: ja Beschreibung: Ein Objekt mit den Details des Vorschlags. Siehe unten die |
id | Typ: Erforderlich: Ja Beschreibung: Die numerische oder als Zeichenkette angegebene ID der Quellzeichenkette (Phrase). |
text | Typ: Erforderlich: Ja Beschreibung: Der Übersetzungstext. |
languageId | Type: Required: Yes Description: The ID of the target language (e.g., |
pluralId | Typ: Erforderlich: Nein Beschreibung: Die ID der Pluralform (z. B. |
translationId | Typ: Erforderlich: Nein Beschreibung: Die ID einer vorhandenen Übersetzung, falls Sie diese bearbeiten. |
AP.editor.setUnsavedSuggestions(suggestions)
Abschnitt betitelt „AP.editor.setUnsavedSuggestions(suggestions)“Setzt mehrere „ungespeicherte Vorschläge“ gleichzeitig.
Beispiel:
AP.editor.setUnsavedSuggestions([ { id: 1569759, text: 'Suggestion 1', languageId: 'fr', pluralId: '1' }, { id: 1569761, text: 'Suggestion 2', languageId: 'fr', pluralId: null }]);suggestions | Typ: Erforderlich: Ja Beschreibung: Ein Array von Vorschlagsobjekten. Siehe |
AP.editor.removeUnsavedSuggestions(suggestions)
Abschnitt betitelt „AP.editor.removeUnsavedSuggestions(suggestions)“Entfernt einen oder mehrere „ungespeicherte Vorschläge“.
Beispiel:
// Remove a specific unsaved suggestionAP.editor.removeUnsavedSuggestions([ { id: 1569759, text: 'Suggestion 1', languageId: 'fr', pluralId: '1' }]);suggestions | Typ: Erforderlich: Ja Beschreibung: Ein Array mit Vorschlagsobjekten, die entfernt werden sollen. Das Format entspricht dem von |
AP.editor.applyUnsavedTranslations(method, data)
Abschnitt betitelt „AP.editor.applyUnsavedTranslations(method, data)“Wendet alle ungespeicherten Übersetzungen anhand der angegebenen Methode an (und speichert sie).
Beispiel:
// Apply unsaved translations only for the selected stringsAP.editor.applyUnsavedTranslations('selectedStrings', null);
// Apply unsaved translations for a specific list of string IDsAP.editor.applyUnsavedTranslations('providedStrings', [1569759, 1569761]);method | Typ: Erforderlich: Ja Beschreibung: Die Methode, die zum Anwenden von Übersetzungen verwendet werden soll. Zulässige Werte: |
data | Typ: Erforderlich: ja Beschreibung: Ein Array mit numerischen String-IDs. Dies wird nur verwendet, wenn |
Mit dieser Methodengruppe kann deine App die im Editor verwendeten Stringfilter abrufen und steuern, einschließlich grundlegender Filter, des erweiterten Filters und von CroQL-Abfragen.
Ruft eine vollständige Liste aller verfügbaren grundlegenden Filter einschließlich ihrer Namen und numerischen IDs ab.
Beispiel:
AP.editor.getFiltersList(function(filters) { console.log("Available filters:", filters);});callback | Typ: Erforderlich: ja Beschreibung: Eine Callback-Funktion, die die Antwort verarbeitet. Sie erhält ein Array mit |
[ { "name": "Show All", "value": 3 }, { "name": "Untranslated", "value": 2 }, { "name": "Not Approved", "value": 5 }, { "name": "Approved", "value": 4 }, { "name": "Machine Translations" }, { "name": "All", "value": 10 }, { "name": "All, Untranslated First", "value": 0 }]name | Typ: Beschreibung: Der Anzeigename des Filters (z. B. „Unübersetzt“). |
value | Typ: Beschreibung: Die numerische ID des Filters. Dieser Wert wird von
|
Ruft die numerische ID des aktuell aktiven grundlegenden Filters ab (z. B. „Untranslated“, „Approved“).
Beispiel:
AP.editor.getFilter(function(filterId) { console.log("Current filter ID:", filterId); // Example output: 0 (for "All, Untranslated First")});callback | Typ: Erforderlich: ja Beschreibung: Eine Callback-Funktion, die die Antwort verarbeitet. Sie erhält ein Argument: einen |
Diese Methode gibt einen einfachen integer zurück.
0Wendet mithilfe der numerischen ID einen grundlegenden Filter auf die Stringliste an.
Beispiel:
// Filter the list to show only "Untranslated" strings (ID 2)AP.editor.setFilter(2);filterNumber | Typ: Erforderlich: Ja Beschreibung: Die numerische ID des anzuwendenden Filters. Siehe |
Hier sind einige der häufigsten Standard-Filter-IDs:
- 0: Alle, nicht übersetzte zuerst
- 2: Nicht übersetzt
- 3: Alle anzeigen
- 4: Genehmigt
- 5: Übersetzt, nicht genehmigt
- 7: Mit Kommentaren
- 10: Durch TM oder MT übersetzt
- 12: Erweiterter Filter
- 30: Durch TM übersetzt
- 31: Durch MT übersetzt
Ruft ein Objekt ab, das den aktuellen Zustand des „Erweiterten Filters“ darstellt.
Beispiel:
AP.editor.getCustomFilter(function(customFilter) { if (customFilter) { console.log("Current advanced filter settings:", customFilter); console.log("Filtering by translation status:", customFilter.translations); }});callback | Typ: Erforderlich: ja Beschreibung: Eine Callback-Funktion, die die Antwort verarbeitet. Sie erhält ein |
{ "translations": "untranslated", "labels": [123, 456], "label_match_rule": "any", "comments": "have_comments", "croql_expression": "", "ai_query": ""}Das CustomFilterObject enthält alle im Dialog des erweiterten Filters des Editors verfügbaren Felder. Nachfolgend sind einige wichtige Eigenschaften aufgeführt:
translations | Typ: Zulässige Werte: Beschreibung: Filtert Zeichenketten anhand ihres Übersetzungsstatus. |
comments | Typ: Zulässige Werte: Beschreibung: Filtert Zeichenketten danach, ob sie Kommentare enthalten. |
labels | Typ: Beschreibung: Ein Array von Label-IDs, nach denen gefiltert werden soll. |
croql_expression | Typ: Beschreibung: Ein benutzerdefinierter CroQL-Ausdruck für erweiterte Filterung. |
Wendet einen „Erweiterten Filter“ auf die Stringliste an, indem ein Filterobjekt übergeben wird.
Beispiel:
// Filter for untranslated strings with specific labelsAP.editor.setCustomFilter({ translations: 'untranslated', labels: [123, 456], label_match_rule: 'any'});customFilter | Typ: Erforderlich: ja Beschreibung: Ein |
Klicken, um alle verfügbaren Filtereigenschaften anzuzeigen
{ added_from: '', added_to: '', updated_from: '', updated_to: '', translations: '', // 'translated', 'untranslated' duplicates: '', tm_and_mt: '', pre_translation: '', approvals: '', comments: '', // 'have_comments', 'no_comments' screenshots: '', visibility: '', qa_issues: '', labels: [], label_match_rule: 'any', // 'all', 'any' exclude_labels: [], exclude_label_match_rule: 'all', string_type: '', votes: '', votes_count: null, approvals_count_select: '', approvals_count: null, translated_by_user: '', not_translated_by_user: '', approved_by_user: '', not_approved_by_user: '', sort_method: 0, sort_ascending: 1, croql_expression: '', ai_query: ''}Setzt den „Erweiterten Filter“ auf seinen Standardzustand (leer) zurück.
Beispiel:
AP.editor.resetCustomFilter();Ruft die aktuell aktive CroQL-Filterabfrage als String ab.
Beispiel:
AP.editor.getCroqlFilter(function(croqlQuery) { if (croqlQuery) { console.log("Current CroQL query:", croqlQuery); }});callback | Typ: Erforderlich: ja Beschreibung: Eine Callback-Funktion, die die Antwort verarbeitet. Es nimmt einen
|
Diese Methode gibt einen einfachen string zurück.
"text = "Welcome!""Wendet einen CroQL-Filter auf die Stringliste an.
Beispiel:
// Filter strings where the text is "Welcome!"AP.editor.setCroqlFilter("text = 'Welcome!'");croql | Typ: Erforderlich: Ja Beschreibung: Eine gültige CroQL-Abfragezeichenkette. |
Setzt den CroQL-Filter auf seinen Standardzustand (leer) zurück.
Beispiel:
AP.editor.resetCroqlFilter();Mit dieser Methodengruppe kann deine App den Status des Editors abrufen und steuern, z. B. den aktuellen Ansichtsmodus, die Seite, die ausgewählte Sprache oder die Suchabfrage.
Ruft den Namen des aktuell aktiven Editor-Modus ab.
Beispiel:
AP.editor.getMode(function(modeName) { console.log("Current mode:", modeName); // Example output: "translate"});callback | Typ: Erforderlich: ja Beschreibung: Eine Callback-Funktion, die die Antwort verarbeitet. Sie nimmt ein Argument entgegen: eine
|
Diese Methode gibt einen einfachen string zurück.
"translate"Typ: Zeichenkette
Zulässige Werte: übersetzen, korrigieren, überprüfen,
mehrsprachig
Wechselt den Editor in einen anderen Modus.
Beispiel:
// Switch the Editor to Proofreading modeAP.editor.setMode('proofread');modeName | Typ: Erforderlich: Ja Beschreibung: Der Name des Modus, zu dem gewechselt werden soll. Zulässige Werte: |
Ruft die aktuelle Seitennummer der Stringliste ab.
Beispiel:
AP.editor.getPage(function(pageNumber) { console.log("Current page:", pageNumber); // Example output: 1});callback | Typ: Erforderlich: ja Beschreibung: Eine Callback-Funktion, die die Antwort verarbeitet. Sie erhält ein Argument: einen |
Diese Methode gibt einen einfachen integer zurück.
1Wechselt die Stringliste auf eine bestimmte Seite.
Beispiel:
// Go to the second page of stringsAP.editor.setPage(2);pageNumber | Typ: Erforderlich: Ja Beschreibung: Die Seitenzahl, zu der navigiert werden soll. |
AP.editor.getProjectTargetLanguages(callback)
Abschnitt betitelt „AP.editor.getProjectTargetLanguages(callback)“Ruft eine Liste der Zielsprache des Projekts ab, die dem aktuellen Benutzer im Editor zur Verfügung stehen.
Beispiel:
AP.editor.getProjectTargetLanguages(function(languages) { if (languages && languages.length > 0) { console.log("Available languages:", languages); }});callback | Typ: Erforderlich: ja Beschreibung: Eine Callback-Funktion, die die Antwort verarbeitet. Sie erhält ein Array mit |
[ { "id": "2", "name": "French", "internal_code": "fr", "code": "fr", "preferred": false }, { "id": "3", "name": "German", "internal_code": "de", "code": "de", "preferred": true }]id | Typ: Beschreibung: Die eindeutige ID der Sprache (z. B. |
name | Typ: Beschreibung: Der Anzeigename der Sprache (z. B. „Französisch“). |
code | Typ: Beschreibung: Der Sprachcode (z. B. |
AP.editor.setTargetLanguage(languageIds, [callback])
Abschnitt betitelt „AP.editor.setTargetLanguage(languageIds, [callback])“Wechselt den Editor in Side-by-Side- und Comfortable-Modi in eine andere Zielsprache oder legt im Multilingual-Modus die aktiven Sprachen fest.
Beispiel (Side-by-Side- und Comfortable-Modi):
// Switch the Editor to German (ID "11")AP.editor.setTargetLanguage('11');Beispiel (Multilingual-Modus):
// Set the active languages to German (ID "11") and French (ID "2")AP.editor.setTargetLanguage(['11', '2']);languageIds | Typ: Erforderlich: Ja Beschreibung: Die Zeichenfolgen-ID (z. B. |
callback | Typ: Erforderlich: nein Beschreibung: Ein optionaler Callback, der eine Fehlermeldung zurückgibt, wenn eine der angeforderten language IDs were not found. |
Führt im Editor eine Suche nach dem angegebenen Text durch.
Beispiel:
// Perform a simple search for the word "Welcome"AP.editor.search("Welcome");
// Perform a case-sensitive searchAP.editor.search("Welcome", { caseSensitive: true, search_option: 1 });text | Typ: Erforderlich: Ja Beschreibung: Der zu suchende Text. |
options | Typ: Erforderlich: nein Beschreibung: Ein Objekt mit Suchoptionen. Siehe unten die |
searchStrict | Typ: Beschreibung: Wenn |
searchFullMatch | Typ: Beschreibung: Wenn |
caseSensitive | Typ: Beschreibung: Wenn |
search_option | Typ: Beschreibung: Legt den Suchbereich fest. |
Mit dieser Methodengruppe kann deine App dem Benutzer Feedbackmeldungen (z. B. Hinweise, Erfolgsmeldungen oder Fehler) anzeigen und Benachrichtigungs-Badges auf dem App-Symbol verwalten.
Zeigt oben im Editor eine gelbe „notice“-Meldungsleiste an.
Beispiel:
AP.editor.noticeMessage("This is a test notification.");message | Typ: Erforderlich: Ja Beschreibung: Der Text, der in der Meldungsleiste angezeigt werden soll. |
Zeigt oben im Editor eine grüne „success“-Meldungsleiste an.
Beispiel:
AP.editor.successMessage("The operation was successful!");message | Typ: Erforderlich: Ja Beschreibung: Der Text, der in der Meldungsleiste angezeigt werden soll. |
Zeigt oben im Editor eine rote „error“-Meldungsleiste an.
Beispiel:
AP.editor.errorMessage("An error occurred. Please try again.");message | Typ: Erforderlich: Ja Beschreibung: Der Text, der in der Meldungsleiste angezeigt werden soll. |
AP.editor.setApplicationNotification(count)
Abschnitt betitelt „AP.editor.setApplicationNotification(count)“Setzt im Seitenbereich des Editors ein blaues Benachrichtigungs-Badge mit einer Zahl auf dem App-Symbol.
Beispiel:
AP.editor.setApplicationNotification(2);count | Typ: Erforderlich: Ja Beschreibung: Die Zahl, die im Benachrichtigungssymbol angezeigt werden soll. |
AP.editor.clearApplicationNotification()
Abschnitt betitelt „AP.editor.clearApplicationNotification()“Entfernt das Benachrichtigungs-Badge vom App-Symbol deiner App.
Beispiel:
AP.editor.clearApplicationNotification();Mit dieser Methodengruppe kann deine App Informationen über den Workflow des Projekts abrufen und den Status des Benutzers innerhalb dieses Workflows steuern.
Ruft eine Liste aller Workflow-Schritte ab, die dem Benutzer im aktuellen Projekt zur Verfügung stehen.
Beispiel:
AP.editor.getWorkflowSteps(function(steps) { if (steps && steps.length > 0) { console.log("Available workflow steps:", steps); }});callback | Typ: Erforderlich: ja Beschreibung: Eine Callback-Funktion, die die Antwort verarbeitet. Sie erhält ein Array mit |
[ { "id": 752, "title": "Translation", "type": "Translate", "editor_mode": "translate", "approving_available": true, "source_language": { "id": 52, "name": "English", "code": "en" } }, { "id": 753, "title": "Proofreading", "type": "Proofread", "editor_mode": "proofread", "approving_available": true, "source_language": { "id": 52, "name": "English", "code": "en" } }]id | Typ: Beschreibung: Die eindeutige numerische ID des Workflow-Schritts. |
title | Typ: Beschreibung: Der Anzeigename des Workflow-Schritts (z. B. „Übersetzung“). |
type | Typ: Beschreibung: Der Typ des Arbeitsschritts (z. B. „Übersetzen“, „Korrekturlesen“). |
editor_mode | Typ: Beschreibung: Der entsprechende Editor-Modus für diesen Schritt. |
approving_available | Typ: Beschreibung: |
source_language | Typ: Beschreibung: Ein Objekt mit Angaben zur Quellsprache. |
AP.editor.getWorkflowStepStatusFilter(callback)
Abschnitt betitelt „AP.editor.getWorkflowStepStatusFilter(callback)“Ruft den aktuell aktiven Filter für den Workflow-Schrittstatus des aktuellen Workflow-Schritts ab.
Beispiel:
AP.editor.getWorkflowStepStatusFilter(function(status) { console.log("Current step status filter:", status); // Example output: "ALL"});callback | Typ: Erforderlich: ja Beschreibung: Eine Callback-Funktion, die die Antwort verarbeitet. Sie nimmt ein
|
Diese Methode gibt einen einfachen string zurück.
"ALL"Typ: Zeichenkette
Zulässige Werte: ALL, TODO, PENDING,
INCOMPLETE, DONE
PENDING gilt für den Modus review, und INCOMPLETE für die
Modi translate, proofread und multilingual. Der Editor zeigt beide als Pending im Menü Workflow step status an.
Wechselt den Editor zu einem anderen Workflow-Schritt.
Beispiel:
// Switch the Editor to workflow step with ID 753AP.editor.setWorkflowStep(753);stepId | Typ: Erforderlich: Ja Beschreibung: Die ID des Workflow-Schritts, zu dem gewechselt werden soll. Siehe
|
AP.editor.setWorkflowStepStatusFilter(status)
Abschnitt betitelt „AP.editor.setWorkflowStepStatusFilter(status)“Legt den Filter für den Workflow-Schrittstatus des aktuellen Workflow-Schritts fest.
Beispiel:
// Filter to show only strings that are "DONE"AP.editor.setWorkflowStepStatusFilter('DONE');status | Typ: Erforderlich: Ja Beschreibung: Der Status, nach dem gefiltert werden soll. Zulässige Werte:
|
Mit diesen Methoden kann deine App den Text abrufen, den der Benutzer mit dem Cursor im Quellstring- oder Übersetzungstextbereich ausgewählt hat.
AP.editor.source.getSelectedText(callback)
Abschnitt betitelt „AP.editor.source.getSelectedText(callback)“Ruft den Text ab, den der Benutzer aktuell mit dem Cursor im Quellstringbereich ausgewählt hat.
Beispiel:
AP.editor.source.getSelectedText(function(selectedText) { if (selectedText) { console.log("User selected this source text:", selectedText); }});callback | Typ: Erforderlich: ja Beschreibung: Eine Callback-Funktion, die die Antwort verarbeitet. Sie nimmt ein Argument entgegen: eine
|
Diese Methode gibt einen einfachen string mit dem ausgewählten Text zurück oder null, wenn kein Text ausgewählt ist.
"Selected source text"AP.editor.textarea.getSelectedText(callback)
Abschnitt betitelt „AP.editor.textarea.getSelectedText(callback)“Ruft den Text ab, den der Benutzer aktuell mit dem Cursor im Übersetzungstextbereich ausgewählt hat.
Beispiel:
AP.editor.textarea.getSelectedText(function(selectedText) { if (selectedText) { console.log("User selected this translation text:", selectedText); }});callback | Typ: Erforderlich: ja Beschreibung: Eine Callback-Funktion, die die Antwort verarbeitet. Sie nimmt ein Argument entgegen: eine
|
Diese Methode gibt einen einfachen string mit dem ausgewählten Text zurück oder null, wenn kein Text ausgewählt ist.
"My selected translation"Diese Methodengruppe bietet erweiterte Integrationspunkte zur Anpassung des nativen Editor-Verhaltens, z. B. zum Hinzufügen benutzerdefinierter Kontextmenüs, Verwalten von Tastenkürzeln und Anwenden benutzerdefinierter Stile.
AP.editor.registerContextMenuAction(action, callback)
Abschnitt betitelt „AP.editor.registerContextMenuAction(action, callback)“Registriert einen benutzerdefinierten Eintrag im Kontextmenü des Editors (dem Menü, das per Rechtsklick angezeigt wird).
Du musst das action-Objekt definieren; der callback gibt dasselbe Objekt zurück, ergänzt um eine eventSubscriptionId. You then use AP.events.on to listen for clicks on that ID.
Beispiel:
// 1. Define and register the context menu itemAP.editor.registerContextMenuAction({ type: 'textarea-context-menu', name: 'My Custom Action'}, function(action) {
// 2. Listen for clicks on this specific item AP.events.on(action.eventSubscriptionId, function() { console.log(`'${action.name}' was clicked!`); AP.editor.noticeMessage("Custom action triggered!"); });});action | Typ: Erforderlich: ja Beschreibung: Das Konfigurationsobjekt für die Aktion. Siehe unten die |
callback | Typ: Erforderlich: ja Beschreibung: Ein Callback, der das Aktionsobjekt zurückerhält, das nun eine
|
type | Typ: Erforderlich: Ja Beschreibung: Der Typ des Kontextmenüs, in dem die Aktion angezeigt wird. Mögliche Werte:
|
name | Typ: Erforderlich: Ja Beschreibung: Die Textbezeichnung, die im Kontextmenü angezeigt wird. |
children | Typ: Erforderlich: nein Beschreibung: Ein optionales Array untergeordneter |
Beispiel für den Antwort-Payload (im Callback)
Abschnitt betitelt „Beispiel für den Antwort-Payload (im Callback)“Der Callback gibt das action-Objekt zusammen mit einer ergänzten eventSubscriptionId zurück.
{ "type": "textarea-context-menu", "name": "My Test Action", "eventSubscriptionId": "context.menu.click:GGChNhE"}eventSubscriptionId | Typ: Beschreibung: Die eindeutige ID für diesen Menüpunkt. Verwende diese ID zusammen mit |
…plus alle Eigenschaften aus der von dir angegebenen | |
Einfache Aktion für das Kontextmenü des Quellstrings
AP.editor.registerContextMenuAction({ type: 'source-string-context-menu', name: 'Run custom action'}, function(action) { AP.events.on(action.eventSubscriptionId, () => { // Run custom logic when clicked console.log('Custom action triggered.'); });});Aktion mit einem Untermenü
AP.editor.registerContextMenuAction({ type: 'source-string-context-menu', name: 'My Actions', children: [ { name: 'Explain selection' }, { name: 'Check grammar' } ]}, function(action) { // Handle the child menu items if (action.children) { action.children.forEach((childAction) => { AP.events.on(childAction.eventSubscriptionId, () => { // Add the logic that should happen on click console.log(`'${childAction.name}' was clicked.`); }); }); }});Aktion für ausgewählten Text im Übersetzungsbereich
AP.editor.registerContextMenuAction({ type: 'textarea-context-menu', name: 'Log selected text'}, function(action) { AP.events.on(action.eventSubscriptionId, () => { // Get the selected text and process it AP.editor.textarea.getSelectedText(function(text) { if (text) { console.log('Selected text:', text); } }); });});Ruft einen String ab, der alle derzeit im Editor aktiven Tastenkürzel enthält.
Beispiel:
AP.editor.getHotKeys(function(hotkeys) { console.log("Active hotkeys:", hotkeys);});callback | Typ: Erforderlich: ja Beschreibung: Eine Callback-Funktion, die die Antwort verarbeitet. Sie nimmt ein Argument entgegen: eine
|
Diese Methode gibt einen einfachen string zurück, in dem die Tastenkürzel durch Kommas getrennt sind.
"Command+Enter,Command+[,Command+],Control+Shift+C,..."AP.editor.propagateHotKeyPress(hotKeyPressed)
Abschnitt betitelt „AP.editor.propagateHotKeyPress(hotKeyPressed)“Überträgt einen Tastendruck manuell vom iframe deiner App an den Haupteditor. Das ist nützlich, wenn deine App ein Tastenereignis (z. B. „Enter“) abfängt, auf das der Editor ebenfalls reagieren soll.
Beispiel:
// Tell the Editor that the "Command+Enter" hotkey was pressedAP.editor.propagateHotKeyPress('Command+Enter');hotKeyPressed | Typ: Erforderlich: Ja Beschreibung: Die Zeichenkette des gedrückten Tastenkombination (z. B. |
AP.editor.applyCustomThemeStyle(theme, callback)
Abschnitt betitelt „AP.editor.applyCustomThemeStyle(theme, callback)“Wendet eine benutzerdefinierte Theme-Konfiguration auf die Benutzeroberfläche des Editors an. Damit lassen sich Farben, Hintergründe und Hervorhebungen von Elementen umfassend anpassen.
Beispiel:
AP.editor.applyCustomThemeStyle({ themeMode: 'dark', // Context mode ('light' or 'dark') primaryAccent: '#35a1ff', base: { baseBackground: '#16191d', stringStatus: { translated: '#74bb02', approved: '#35a1ff' }, highlights: { placeholderColor: '#35a1ff', placeholderBg: 'rgba(53, 161, 255, 0.1)', tagColor: '#74bb02', tagBg: 'rgba(116, 187, 2, 0.1)', nonePrintableCharacterColor: '#3eb17f', findAndReplaceHighlightBg: '#cc9a06', specialLightColor: '#35a1ff', specialLightBg: 'rgba(53, 161, 255, 0.05)' } }, accents: { info: { accentColor: '#35a1ff' }, danger: { accentColor: '#ff4444' }, warning: { accentColor: '#cc9a06' }, success: { accentColor: '#74bb02' } }}, (result) => { if (result) { console.error('Error applying theme:', result); } else { console.log('Theme applied successfully'); }});theme | Typ: Erforderlich: ja Beschreibung: Ein |
callback | Typ: Erforderlich: nein Beschreibung: Eine Callback-Funktion, die die Antwort verarbeitet. Sie erhält bei einem Fehler der Anwendung einen String mit der Fehlermeldung oder bei Erfolg |
Removes all custom CSS applied by AP.editor.applyCustomThemeStyle.
Beispiel:
AP.editor.resetCustomThemeStyle();AP.editor.updateButton(moduleKey, patch, [callback])
Abschnitt betitelt „AP.editor.updateButton(moduleKey, patch, [callback])“Wendet zur Laufzeit einen Patch auf eines der eigenen Editor Buttons-Module der App an. Nicht angegebene Felder behalten ihren aktuellen Wert. Wenn icon, badge oder tooltip auf null gesetzt wird, wird der jeweilige Wert auf den im Manifest festgelegten Zustand zurückgesetzt. Dasselbe gilt, wenn enabled auf true gesetzt wird. Der Zustand bleibt erhalten, bis der Editor neu geladen oder die Module der App aktualisiert werden.
Beispiel:
AP.editor.updateButton( 'attach-screenshot', { icon: '/icons/filled.svg', badge: 3 }, function(applied) { console.log(applied); // true });moduleKey | Typ: Erforderlich: Ja Beschreibung: Der |
patch | Typ: Erforderlich: Ja Beschreibung: Die zu ändernden Felder des Buttons. |
patch.icon | Typ: Beschreibung: Ein Pfad, der mit |
patch.badge | Typ: Beschreibung: Eine Zahl zwischen 1 und 99 zeigt einen Zähler auf der Schaltfläche an, höhere Zahlen werden als |
patch.enabled | Typ: Beschreibung: Setze den Wert auf |
patch.tooltip | Typ: Beschreibung: Der Text, der anstelle des |
callback | Typ: Erforderlich: Nein Beschreibung: Erhält |
AP.editor.resetButton(moduleKey, [callback])
Abschnitt betitelt „AP.editor.resetButton(moduleKey, [callback])“Versetzt eines der eigenen Editor Buttons-Module der App in den im Manifest festgelegten Zustand.
Beispiel:
AP.editor.resetButton('attach-screenshot', function(cleared) { console.log(cleared); // true});moduleKey | Typ: Erforderlich: Ja Beschreibung: Der |
callback | Typ: Erforderlich: Nein Beschreibung: Erhält |
Mit diesen Methoden kann deine App innerhalb des Editors Modal-Fenster öffnen und schließen.
AP.editor.openModal(options, [callback])
Abschnitt betitelt „AP.editor.openModal(options, [callback])“Öffnet eines der in deiner App definierten „modal“-Module.
Beispiel:
// Open a modal moduleAP.editor.openModal({ resource: 'my-modal-key', size: 'medium'}, function(success) { if (success) { console.log("Modal opened successfully."); }});options | Typ: Erforderlich: ja Beschreibung: Das Konfigurationsobjekt für das Modal. Siehe unten die |
callback | Typ: Erforderlich: nein Beschreibung: Eine optionale Callback-Funktion, die bei Erfolg einen |
resource | Typ: Erforderlich: Ja Beschreibung: Der |
size | Typ: Erforderlich: Nein Beschreibung: Die Größe des modalen Fensters. Zulässige Werte: |
onClose | Typ: Erforderlich: nein Beschreibung: Eine optionale Callback-Funktion, die beim Schließen des Modals ausgeführt wird. |
Closes the currently open modal, but only if it was opened by your app using AP.editor.openModal.
Beispiel:
// Close the modalAP.editor.closeModal();Mit dieser Methodengruppe kann deine App mit dem Crowdin-Projekt interagieren, z. B. zu verschiedenen Projektseiten navigieren oder den Editor öffnen. They are all called via the AP.project object.
Leitet den Benutzer auf eine andere Seite innerhalb des aktuellen Projekts weiter.
Beispiel:
// Redirects to the project's Activity tabAP.project.redirect('/activity-stream');
// Forces a full-page reload to the project's rootAP.project.redirect('/', true);path | Typ: Erforderlich: Ja Beschreibung: Der relative Pfad innerhalb des Projekts, zu dem umgeleitet werden soll (z. B. |
hardRedirect | Typ: Erforderlich: nein Beschreibung: Wenn auf |
Öffnet einen integrierten Crowdin-Modal-Dialog.
Beispiel:
// Open the "Pre-translation via MT" modalAP.project.openModal('mt-pre-translation');modalName | Typ: Erforderlich: Ja Beschreibung: Der Name des zu öffnenden integrierten Modals. Zulässige Werte: |
AP.project.openEditor(fileId, [view], [languageCode])
Abschnitt betitelt „AP.project.openEditor(fileId, [view], [languageCode])“Öffnet den Crowdin Editor für eine bestimmte Datei.
Beispiel:
// Open a specific file in the default viewAP.project.openEditor('15411');
// Open a file in Multilingual mode for a specific languageAP.project.openEditor('15411', 'multilingual', 'de');fileId | Typ: Erforderlich: Ja Beschreibung: Die ID der zu öffnenden Datei. |
view | Typ: Erforderlich: Nein Beschreibung: Der zu öffnende Editor-Modus (z. B. |
languageCode | Typ: Erforderlich: Nein Beschreibung: Der Sprachcode (z. B. |
Navigiert je nach Projekttyp zum passenden Tab (Translations bei dateibasierten Projekten bzw. Download bei stringbasierten Projekten) und löst einen Vorschau-Download im CSV- oder XLSX-Format aus.
Beispiel:
// Trigger a preview download in CSV formatAP.project.previewTranslations('csv');action | Typ: Erforderlich: Ja Beschreibung: Das Format der Vorschau, die heruntergeladen werden soll. Zulässige Werte: |
AP.project.getTabsConfiguration(callback)
Abschnitt betitelt „AP.project.getTabsConfiguration(callback)“Ruft das Konfigurationsobjekt für die Projekt-Tabs ab und gibt an, welche Tabs im Projektkontext derzeit sichtbar bzw. ausgeblendet sind.
Beispiel:
AP.project.getTabsConfiguration(function(config) { if (config) { console.log("Current tabs configuration:", config); }});callback | Typ: Erforderlich: ja Beschreibung: Eine Callback-Funktion, die die Antwort verarbeitet. Sie erhält ein |
Diese Methode gibt ein array mit Objekten zurück.
[ { "identifier": "home", "visible": true }, { "identifier": "sources", "visible": true },40 ausgeblendete Zeilen
{ "identifier": "translations", "visible": true }, { "identifier": "screenshots", "visible": true }, { "identifier": "tasks", "visible": true }, { "identifier": "members", "visible": true }, { "identifier": "integrations", "visible": true }, { "identifier": "reports", "visible": false }, { "identifier": "activity-stream", "visible": true }, { "identifier": "discussions", "visible": true }, { "identifier": "tools", "visible": true }, { "identifier": "test_app¦test_app-project-menu", "visible": true }, { "identifier": "settings", "visible": true }]AP.project.saveTabsConfiguration(params, callback)
Abschnitt betitelt „AP.project.saveTabsConfiguration(params, callback)“Speichert eine neue Konfiguration für die Projekt-Tabs. Damit kannst du bestimmte Tabs im Projektkontext programmgesteuert ein- oder ausblenden.
Beispiel:
const newConfig = [ { "identifier": "home", "visible": true }, { "identifier": "sources", "visible": true },40 ausgeblendete Zeilen
{ "identifier": "translations", "visible": true }, { "identifier": "screenshots", "visible": true }, { "identifier": "tasks", "visible": false }, { "identifier": "members", "visible": false }, { "identifier": "integrations", "visible": true }, { "identifier": "reports", "visible": false }, { "identifier": "activity-stream", "visible": true }, { "identifier": "discussions", "visible": true }, { "identifier": "tools", "visible": true }, { "identifier": "test_app¦test_app-project-menu", "visible": true }, { "identifier": "settings", "visible": true }];
AP.project.saveTabsConfiguration({ tabs_configuration: newConfig }, function(success) { if (success) { console.log("Configuration saved successfully."); }});params | Typ: Erforderlich: ja Beschreibung: Ein Objekt mit der neuen Konfiguration. Siehe unten die |
callback | Typ: Erforderlich: nein Beschreibung: Eine optionale Callback-Funktion, die bei Erfolg einen |
tabs_configuration | Typ: Erforderlich: Ja Beschreibung: Ein Array von Objekten zur Registerkartenkonfiguration. Siehe |
Mit dieser Methodengruppe kann deine App mit den Profilseiten des Benutzerkontos außerhalb eines Projekts interagieren. They are all called via the AP.profile object.
Leitet den Benutzer auf eine andere Seite innerhalb seines „Profils“ weiter.
Beispiel:
// Redirects the user to their "Tasks" pageAP.profile.redirect('/tasks');path | Typ: Erforderlich: Ja Beschreibung: Der relative Pfad innerhalb des Benutzerprofils, zu dem die Weiterleitung erfolgen soll (z. B.
|
Diese Methoden dienen zur Steuerung von Modal-Fenstern (z. B. zum Festlegen der Größe eines Modals aus dessen eigenem iframe).
Aktualisiert die Abmessungen und das Scrollverhalten des Modal-Fensters, in dem deine App derzeit ausgeführt wird.
Beispiel:
// Update the modal size and scroll behaviorAP.modal.setSize({ width: "600px", height: "600px", hideXScrolls: true, // Optional, default: true hideYScrolls: false // Optional, default: false});options | Typ: Erforderlich: ja Beschreibung: Ein Objekt mit den Größen- und Scroll-Einstellungen. Siehe unten die |
width | Typ: Erforderlich: Ja Beschreibung: Die gewünschte Breite (z. B. |
height | Typ: Erforderlich: Ja Beschreibung: Die gewünschte Höhe (z. B. |
hideXScrolls | Typ: Erforderlich: nein Beschreibung: Gibt an, ob horizontale Bildlaufleisten ausgeblendet werden sollen. Der Standardwert ist |
hideYScrolls | Typ: Erforderlich: nein Beschreibung: Gibt an, ob vertikale Bildlaufleisten ausgeblendet werden sollen. Der Standardwert ist |
Mit diesen Methoden kann deine App auf Ereignisse reagieren, die innerhalb der Crowdin-Benutzeroberfläche auftreten (z. B. wenn ein Benutzer einen String ändert oder eine Übersetzung speichert), und eigene benutzerdefinierte Ereignisse auslösen. They are all called via the AP.events object.
Weitere Informationen findest du unter Unterstützte Ereignisse.
Abonniert einen Listener für ein Ereignis. Dies ist die wichtigste Methode, um sowohl auf Crowdin-UI-Ereignisse (z. B. string.change) als auch auf benutzerdefinierte interne Ereignisse zu reagieren, die von deiner App oder der Bibliothek ausgelöst werden.
Beispiel:
// Listen for the 'string.change' event from CrowdinAP.events.on('string.change', function(stringData) { console.log("User switched to string ID:", stringData.id);});eventName | Typ: Erforderlich: Ja Beschreibung: Der Name des Ereignisses, auf das gewartet werden soll (z. B. |
callback | Typ: Erforderlich: ja Beschreibung: Die Funktion, die ausgeführt wird, wenn das Ereignis ausgelöst wird. Sie erhält ein für das Ereignis spezifisches Daten-Payload-Objekt. |
Abonniert einen Listener für ein Ereignis; der Listener wird jedoch automatisch entfernt, nachdem er einmal ausgeführt wurde.
Beispiel:
// Run this code only the next time a translation is addedAP.events.once('translation.added', function(translation) { console.log("A translation was added:", translation.text);});eventName | Typ: Erforderlich: Ja Beschreibung: Der Name des Ereignisses, auf das gewartet werden soll. |
callback | Typ: Erforderlich: ja Beschreibung: Die Funktion, die einmal ausgeführt wird, wenn das Ereignis ausgelöst wird. |
Removes a specific event listener that was previously registered with AP.events.on or AP.events.once.
Beispiel:
const myListener = function(data) { console.log(data); };
// Start listeningAP.events.on('string.change', myListener);
// Stop listeningAP.events.off('string.change', myListener);eventName | Typ: Erforderlich: Ja Beschreibung: Der Name des Ereignisses, von dem die Abmeldung erfolgen soll. |
callback | Typ: Erforderlich: Ja Beschreibung: Das genau gleiche Funktionsobjekt, das zur Registrierung des Listeners verwendet wurde. |
Entfernt alle Event-Listener für ein bestimmtes Ereignis.
Beispiel:
// Stop all listeners for the 'string.change' eventAP.events.offAll('string.change');eventName | Typ: Erforderlich: Ja Beschreibung: Der Name des Ereignisses, für das alle Listener entfernt werden sollen. |
Abonniert einen Listener, der bei jedem Ereignis ausgelöst wird. Dies ist nützlich zum Debuggen, um alle Ereignisse anzuzeigen, die das System durchlaufen.
Beispiel:
AP.events.onAny(function(eventName, eventData) { console.log("Event fired:", eventName, "with data:", eventData);});callback | Typ: Erforderlich: ja Beschreibung: Eine Callback-Funktion, die zwei Argumente erhält: |
Removes a specific listener that was registered with AP.events.onAny.
Beispiel:
const myDebugListener = function(eventName, eventData) { /* ... */ };AP.events.onAny(myDebugListener);
// Later, to stop listeningAP.events.offAny(myDebugListener);callback | Typ: Erforderlich: Ja Beschreibung: Das genau gleiche Funktionsobjekt, das zur Registrierung des Listeners verwendet wurde. |
Löst ein benutzerdefiniertes Ereignis innerhalb deiner App aus. Any listeners registered with AP.events.on will be triggered.
Beispiel:
// Fire a custom event with some dataAP.events.emit('my-custom-event', { status: 'updated' });eventName | Typ: Erforderlich: Ja Beschreibung: Der Name des auszulösenden benutzerdefinierten Ereignisses. |
data | Typ: Erforderlich: nein Beschreibung: Ein optionaler Daten-Payload, der an die Event-Listener gesendet wird. |
Use these event names with the AP.events.on() method to listen for actions happening in the Crowdin UI.
| Ereignis | Details & Payload |
|---|---|
string.change | Wird ausgelöst, wenn ein Benutzer von einem Quellstring zu einem anderen wechselt. Payload: Ein |
string.selected | Wird ausgelöst, wenn ein Benutzer Strings auswählt oder die Auswahl aufhebt (über Kontrollkästchen in der Side-by-Side-Ansicht). Payload: Ein Array mit |
editor.button.click | Wird ausgelöst, wenn ein Benutzer auf ein Editor-Schaltflächen Modul des Typs Payload: Ein Objekt mit dem |
textarea.edited | Wird ausgelöst, wenn ein Benutzer eine beliebige Änderung im Übersetzungstextfeld vornimmt (tippt, löscht oder einfügt). Payload: Ein Objekt mit den Stringdaten, |
translation.added | Wird ausgelöst, wenn ein Benutzer eine neue Übersetzung speichert. Payload: Ein |
translation.deleted | Wird ausgelöst, wenn ein Benutzer eine Übersetzung löscht. Payload: Ein Objekt mit der |
translation.restored | Wird ausgelöst, wenn ein Benutzer eine gelöschte Übersetzung wiederherstellt. Payload: Das wiederhergestellte |
translation.vote | Wird ausgelöst, wenn ein Benutzer für eine Übersetzung abstimmt (nach oben oder unten). Payload: Das aktualisierte |
translation.approve | Wird ausgelöst, wenn ein Benutzer eine Übersetzung genehmigt. Payload: Das aktualisierte |
translation.disapprove | Wird ausgelöst, wenn ein Benutzer eine Genehmigung für eine Übersetzung entfernt. Payload: Das aktualisierte |
language.change | Wird ausgelöst, wenn der Benutzer die Zielsprache im Editor ändert. Payload: Das vollständige |
file.change | Wird ausgelöst, wenn der Benutzer im Editor zu einer anderen Datei wechselt. Payload: Das vollständige |
theme.changed | Wird ausgelöst, wenn der Benutzer das UI-Theme ändert. Nutzdaten: Eine |
asset.source.preview | Wird ausgelöst, wenn im Editor eine Quell-Asset-Datei ausgewählt wird (bei Asset-basierten Projekten). Payload: Das |
asset.suggestion.preview | Wird ausgelöst, wenn im Editor eine Vorschlags-Asset-Datei ausgewählt wird (bei Asset-basierten Projekten). Payload: Ein Objekt mit |
pageState.changed | Wird ausgelöst, wenn sich ein beliebiger Teil des Seitenstatus des Editors ändert. Änderungen, die innerhalb von 200 ms erfolgen, werden als ein einzelnes Ereignis gemeldet. Payload: Das vollständige |