Funktionsweise der Lokalisierung in Netflix - Übersetzung

Hallo Habr! Ich präsentiere Ihnen die Übersetzung des vom Netflix-Team verfassten Materials „Localization Technologies at Netflix“ über interne Lokalisierungsprozesse und -programme, die speziell dafür entwickelt wurden.

Bild

Das Lokalisierungsprogramm bei Netflix basiert auf drei Prinzipien: einwandfreie Sprachwissenschaft, eine harmonische Atmosphäre im Team und fortschrittliche Technologien.

Wir haben keine Angst davor, zu experimentieren und neue Prozesse und Werkzeuge auszuprobieren, um den in der Lokalisierung allgemein anerkannten Normen entgegenzutreten - dank dessen sind wir so weit gekommen! Bei Netflix zu arbeiten bedeutet, ein Pionier zu sein.

In diesem Artikel sprechen wir über zwei Technologien, die uns zur Weltherrschaft führen werden ... Mehr unter dem Strich.

Netflix Global String Repository


Netflix war nicht erfolgreich, weil wir qualitativ hochwertige Inhalte erstellen, sondern weil wir diese Inhalte bereitstellen. Der größte Erfolg ist eine intuitive, benutzerfreundliche und lokalisierte Benutzeroberfläche. Netflix ist auf verschiedenen Plattformen verfügbar: der Webversion, Apple iOS, Google Android, Sony PlayStation, Microsoft Xbox, Sony TVs, Panasonic usw. Jede dieser Plattformen hat ihre eigenen Anforderungen an die Internalisierung, was eine ernsthafte Herausforderung für unser Team darstellt.

Hier einige Beispiele, bei denen eine Lokalisierung der Benutzeroberfläche erforderlich ist:

  • neue Sprache hinzufügen
  • Hinzufügen neuer Funktionen
  • Änderungen an vorhandenen Texten und Daten

Die Textübersetzung für die Benutzeroberfläche ist kein automatisierter Prozess. Während der Übersetzung arbeiten die Lokalisierungsmanager mit dem Entwicklungsteam zusammen, um klar zu verstehen, zu welcher oder welcher Zeile sie gehören, in welche Sprachen sie übersetzt werden müssen und zu welchem ​​Zeitpunkt die lokalisierten Dateien bereitgestellt werden müssen. Es wird viel komplizierter, wenn mehrere Funktionen parallel entwickelt und in verschiedenen Git-Zweigen ausgeführt werden.

Nach Abschluss der Übersetzung wird die Anwendung zusammengestellt, getestet und auf der Plattform platziert. Einige Geräte erfordern eine Bestätigung von Drittanbietern (z. B. von Apple). All dies führt zu einer unerwünschten Verzögerung der Fristen. Besonders unangenehm sind Fälle von Notveränderungen.

Was aber, wenn wir den Lokalisierungsprozess für alle Beteiligten offen machen - sowohl für das Entwicklungsteam als auch für die Lokalisierer? Was ist, wenn wir die Builds nicht mehr jedes Mal neu erstellen müssen, wenn wir Änderungen am Text vornehmen?

Um diese Probleme zu lösen, haben wir ein globales UI-String-Repository namens Global String Repository entwickelt. Hier werden lokalisierte Zeichenfolgen gespeichert, die für die Codeausführung in die Umgebung eingesetzt werden. Wir haben das Global String Repository in den Lokalisierungsprozess integriert, sodass sie sich gegenseitig ergänzen.

Das globale String-Repository trennt Lokalisierungspakete und Namespace (Platzhalter). Das Lokalisierungspaket speichert alle Daten zeilenweise in allen Sprachen. Platzhalter sind Platzhalter für Pakete, an denen das Team arbeitet. Während der Entwicklung werden Standardplatzhalter verwendet. Der Workflow sieht folgendermaßen aus:

  1. Der Entwickler nimmt Änderungen an der englischen Version der Zeichenfolge im Paket vor (im Platzhalter-Namespace).
  2. Der Übersetzungsprozess startet automatisch
  3. Linguisten vervollständigen die Übersetzung
  4. Übersetzer stellen Platzhalter-Kits zur Verfügung

Bei der Integration in das Global String Repository gibt es zwei Arten von Anwendungsverhalten:

  • Zur Laufzeit: Mit dieser Option können Sie schnell Änderungen an der Benutzeroberfläche vornehmen
  • Während der Assembly: Verwenden Sie das Global String Repository separat für die Lokalisierung und Datenpakete mit der Assembly (Build).

Das Global String Repository ermöglicht die Integration während der Erstellungsphase, indem über die REST-API auf lokalisierte Daten zugegriffen wird.

Wir öffnen das Global String Repository über die Netflix-API, sodass für es die gleichen Skalierungen und Anforderungen gelten wie für die Metadaten anderer APIs. Für Anwendungen, die zur Laufzeit integriert werden, ist dies ein kritischer Teil. Wir haben 60 Millionen Benutzer, die Netflix auf verschiedenen Geräten ausführen, daher hat das Global String Repository Priorität.

Wie Netflix verfügt auch das Global String Repository über eine Microservice-Architektur. Microservice ist eine Java-Webanwendung (ausgeführt in Apache Cassandra und ElasticSearch), die in drei AWS-Regionen gehostet wird. Wir sammeln Statistiken für jede API-Anfrage.

Die Global String Repository-Schnittstelle wurde auf Node.js, Bootstrap und Backbone entwickelt und in AWS gehostet.

Auf der Benutzerseite verwendet das Global String Repository die REST-API zum Abrufen von Daten und bietet einen Java-Client mit integriertem Caching.

Trotz der Tatsache, dass wir einen langen Weg zurückgelegt haben und das Global String Repository aktiv weiterentwickeln, müssen wir uns um etwas bemühen. Daran arbeiten wir gerade:

  • Wir entwickeln Unterstützung für Zeichenfolgen mit numerischen Variablen und Zeichenfolgen mit Geschlechtskennungen
  • Wir entwickeln die Robustheit unserer technischen Lösungen
  • Skalierungsprozesse verbessern
  • Wir unterstützen den Export in verschiedene Formate (Android XML, Microsoft .Resx usw.)

Das Global String Repository ist nicht an die Netflix-Geschäftsdomäne gebunden, daher planen wir, es als Open Source-Software zu veröffentlichen.

Hydra


Netflix - ein globaler Dienst, der viele Gebietsschemas in einer Vielzahl unterschiedlicher Kombinationen auf verschiedenen Geräten / Benutzeroberflächen unterstützt. Eine manuelle Prüfung ist in diesem Fall nicht angebracht. Zuvor testete das Team von Lokalisierern und UI-Entwicklern alles manuell auf verschiedenen Geräten - von Konsolen bis hin zu iOS und Android. Auf diese Weise haben wir alle Zeilen auf Übereinstimmung mit dem Kontext und der Benutzeroberfläche überprüft (z. B. wenn der Text „beschnitten“ wurde).

Die Philosophie von Netflix ist jedoch, dass wir nach Spitzenleistungen streben. Dieser Ansatz ermöglicht es uns zu überdenken, was wir tun. So wurde Hydra geboren.

Die Aufgabe von Hydra besteht darin, einen Katalog aller möglichen Optionen für einen eindeutigen Bildschirm zu erstellen, der genau den erforderlichen Bildschirm anzeigt (die Suche erfolgt über Filter, z. B. können Sie ein Gerät und Gebietsschemas auswählen). Als Spezialist für deutsche Lokalisierung können Sie beispielsweise die Filterung so konfigurieren, dass Sie den gesamten Pfad sehen, den nicht registrierte Benutzer auf PS3, Website und Android durchlaufen. Dieselben Bildschirme können in dem Tempo angezeigt werden, in dem der Benutzer sie auf seinem Gerät öffnet.

Arbeiten mit Bildschirmen in Hydra


Hydra arbeitet nicht direkt mit Bildschirmen. es dient dazu, sie zu katalogisieren und anzuzeigen. Um eine Bildschirmanzeige aus dem Hydra-Katalog zu entnehmen, verwenden wir unser UI-Automatisierungsmodell. Mit Jenkins CI werden datengesteuerte Tests in allen unterstützten Gebietsschemas parallel ausgeführt: Dadurch werden Screenshots erstellt, die in Hydra mit den entsprechenden Metadaten (Seitenname, Funktionsbereich, UI-Plattform und einem wichtigen Teil der Metadaten - eine eindeutige Definition auf dem Bildschirm) veröffentlicht werden.

Eine eindeutige Bildschirmdefinition ist erforderlich, um einen vollständigen Katalog von Bildschirmen ohne falsche Übereinstimmungen zu erstellen. Auf diese Weise können Sie auf lange Sicht eine größere Anzahl von Bildschirmen vergleichen, da das Bild jedes Bildschirms mit sich selbst verglichen wird. Die Definition eines eindeutigen Bildschirms unterscheidet sich von Benutzeroberfläche zu Benutzeroberfläche. Für einen Browser ist dies eine Kombination aus Seitenname, Browser, Auflösung, lokaler Umgebung und Entwicklungsumgebung.

Technologie


Hydra ist eine AWS Full-Stack-Webanwendung. Das Java-Backend hat zwei Hauptfunktionen: Es verarbeitet eingehende Screenshots und stellt Daten für das Backend über die REST-API bereit.

Bild

Wenn die UI-Automatisierung den Bildschirm an Hydra sendet, wird die Bilddatei selbst in S3 geschrieben, wodurch der unendliche Speicher (Plus oder Minus) sichergestellt wird, und viel kleinere Metadaten werden in die RDS-Datenbank geschrieben, damit sie später über die REST-API angefordert werden können. REST-Endpunkte (REST-Endpunkte) zeigen Abfragezeichenfolgenparameter für MySQL-Abfragen an.

Zum Beispiel:

REST/v1/lists/distinctList?item=feature&selectors=uigroup,TVUI;area,signupwizard;locale,da-DK

Diese Anforderung enthält Parameter zur Auswahl der erforderlichen Daten aus der Datenbank:

select distinct feature where uigroup = 'TVUI' AND area = 'signupwizard' AND locale = 'da-DK'

Über das JavaScript-Frontend, das knockout.js verwendet, können Benutzer Filter auswählen und Bildschirme anzeigen, die diesen Filtern entsprechen. Der Inhalt der Filter sowie die Bildschirme, die den ausgewählten Filtern entsprechen, werden durch die Aufrufe der oben genannten REST-Endpunkte bereitgestellt.

Anwendungsskalierung


Nach der Installation von Hydra und dem Start der Automatisierung ist das Hinzufügen neuer Gebietsschemas so einfach wie das Hinzufügen einer Zeile zu einer vorhandenen Eigenschaftendatei, die an den Datenprovider des testNG-Frameworks gesendet wird. Bildschirme mit einem neuen Gebietsschema werden mit den folgenden funktionierenden Jenkins-Builds angezeigt.

Was weiter?


Wir müssen eine Funktion implementieren, die benachrichtigt, dass sich der Bildschirm geändert hat. Im Moment, wenn sich die Leitung ändert, gibt es nichts, was dies automatisch benachrichtigen würde. Hydra kann zu einer mehr oder weniger funktionierenden Warteschlange werden, und dann können sich Lokalisierungsexperten beim System anmelden und nur einen bestimmten Satz von Bildschirmen sehen, die sich geändert haben.

Eine weitere Funktion ist die Möglichkeit, einzelne Tastenzeilen den Bildschirmen zuzuordnen, die Sie anzeigen möchten. Auf diese Weise kann der Übersetzer die Zeile ändern und anschließend eine Schlüsselsuche durchführen, um die von dieser Änderung betroffenen Bildschirme anzuzeigen. Der Übersetzer wird also im Voraus sehen, wie sich diese Zeile im Kontext ändert.

Wir haben keine Angst, komplexe Probleme zu lösen. Netflix wird zu einem globalen Dienst und unser Lokalisierungsteam wird erweitert. Solche Herausforderungen ermöglichen es uns, die talentiertesten Leute anzuziehen, und wir bilden ein Team, das das kann, was als unmöglich angesehen wird.

Source: https://habr.com/ru/post/de453456/


All Articles