Fortsetzung einer Reihe von Artikeln zum Einrichten kontinuierlicher Lokalisierungen. Den ersten finden Sie hier . In diesem Artikel werde ich Ihnen erklären, wie Sie das Serge-Smartcat-GitLab-Bundle integrieren und Serge-Konfigurationsdateien anhand eines Beispieltestprojekts konfigurieren. Anleitung für Ubuntu.
Installation über Vagrantfile
Wenn Sie keinen Server mit Ubuntu zur Hand haben, können Sie Vagrant verwenden. Wie es funktioniert:
- Installieren Sie Vagrant und VirtualBox gemäß den Anweisungen .
- Laden Sie das Vagrantfile- und Bash-Skript herunter .
- Starten Sie vagrantfile gemäß den Anweisungen .
Das Ergebnis des Vagrant-Builds ist eine virtuelle Ubuntu-Maschine, auf der Serge mit dem Smartcat-Plugin installiert ist. Alle notwendigen Dateien werden kopiert, der SSH-Schlüssel wird erstellt. Sie können sofort mit dem Einrichten des Projekts und dem Starten der Anwendung fortfahren.
Manuelle Installation
Benutzererstellung
Erstellen Sie eine Serge-Benutzergruppe:
sudo groupadd serge
Erstellen Sie den Serge-Benutzer mit dem Home-Verzeichnis / usr / local / serge:
sudo useradd -g serge serge -m -d /usr/local/serge
Installieren Sie Serge
Die vollständige Serge-Dokumentation finden Sie hier .
Aktualisieren Sie die Metadaten der lokalen Paketdatenbank:
sudo apt-get -qq update
Installieren Sie die Montagewerkzeuge sowie die erforderlichen Pakete. Stellen Sie vor Beginn der Installation sicher, dass Perl 5.10 oder höher installiert ist.
sudo apt-get -qq -y install build-essential libssl-dev libexpat-dev unzip wget
Wechseln Sie in das Home-Verzeichnis des Serge-Benutzers und installieren Sie Serge mit allen erforderlichen Abhängigkeiten.
cd /usr/local/serge sudo -u serge wget https://github.com/evernote/serge/archive/master.zip -O serge-master.zip sudo -u serge unzip serge-master.zip sudo -u serge unlink serge-master.zip cd serge-master sudo cpan App::cpanminus sudo cpanm --installdeps . sudo -u serge sudo ln -s /usr/local/serge/serge-master/bin/serge /usr/local/bin/serge
Installieren des Smartcat Plugins
sudo cpanm HTTP::Daemon@6.01 sudo cpanm Serge::Sync::Plugin::TranslationService::Smartcat sudo cpan install LWP::Protocol::https
Schlüsselerstellung
Erstellen Sie einen Serge-Benutzer mit dem SSH-Schlüssel, den der Serge-Benutzer in GitLab verwendet:
sudo -u serge ssh-keygen -t rsa -N "" -f .id_rsa_serge
Integration mit GitLab
Erstellen Sie einen Serge-Benutzer in GitLab und fügen Sie ihn allen Entwickler-Repositorys hinzu.
Kopieren Sie den SSH-Schlüssel aus der Datei id_rsa_serge.pub in die Serge-Benutzerprofileinstellungen in GitLab. Dies ist erforderlich, damit Serge Zeichenfolgen in GitLab empfangen und senden kann.
Die Installation ist abgeschlossen!
Smartcat-Integration
Um loszulegen, müssen Sie:
- Melden Sie sich bei Smartcat an .
- Erstellen Sie ein Projekt, indem Sie die Sprachen angeben, in die Sie übersetzen möchten. Zum Einrichten des Plugins benötigen Sie die von Smartcat verwendeten Sprachcodes.
- Holen Sie sich project_id , token und token_id .
- Schreiben Sie an support@smartcat.ai und bitten Sie um Unterstützung für den Serge-Datei-Parsing-Algorithmus
Serge-Smartcat konfigurieren
Bevor ich mit dem Setup fortfahre, werde ich das allgemeine Funktionsprinzip beschreiben. Der Standardlokalisierungszyklus umfasst 5 Schritte:

- pull - Neue Zeilen aus dem Repository abrufen.
- pull-ts - Holen Sie sich lokalisierte Zeichenfolgen von Smartcat (das Smartcat-Plugin ist aktiviert).
- Lokalisieren - Alle Quellformate aus dem Repository werden analysiert und in POO-Dateien konvertiert. Empfangene Übersetzungen werden in POO-Dateien geschrieben. Alle Zeilen werden in die Serge-Translation-Memory-Datenbank geschrieben.
- push-ts - Neue Leitungen, die im ersten Schritt empfangen wurden, werden an Smartcat gesendet (mithilfe des Smartcat-Plugins).
- Push- lokalisierte Zeichenfolgen werden in GitLab festgeschrieben.
Sie können die Integration mit einem anderen CAT-System verwenden. Beispielsweise gibt es ein Plugin für Pootle .
Serge- und Git-Repositories
Woher weiß Serge, welche Zeilen zur Übersetzung gesendet werden sollen? Um neue Zeilen zu bestimmen, werden Standard-Git-Tools verwendet: Die Differenz zwischen dem Hauptzweig und dem aktuellen wird genommen. Diff wird zur Übersetzung gesendet.

Wichtig : In der Regel ist der Hauptzweig geschützt, daher wird ein zusätzlicher Übersetzungszweig verwendet, um Unterschiede zu definieren. Wir nennen ihn Basisübersetzung. Das heißt, nach der Release-Zusammenführung in Master muss Master zusätzlich in Base-Translate gehalten werden.
Hier gibt es einen wichtigen Punkt. Es ist notwendig, die Prozesse so zu gestalten, dass die Entwickler einerseits verstehen, was und zu welchem Zeitpunkt sie zur Übersetzung gehen, und andererseits, dass die Techpec nicht im Kreis läuft und den Kopf hält, da sein Diff 1000 Zeilen beträgt. Und es scheint, dass nur der Titel korrigiert wurde.
Arbeitsprinzip
Serge betritt das Repository, nimmt alle Zweige und beginnt, sie mit dem Hauptzweig zu vergleichen. Für jeden Zweig, in dem diff erkannt wird, werden im Smartcat-Projekt eine Reihe von Übersetzungsdokumenten erstellt. Um nicht im Chaos irrelevanter Zweige zu stecken und nicht in der Nähe jedes Entwicklers mit der Frage zu stehen: "Haben Sie daran gedacht, den Zweig zu löschen?", Ist es praktisch, Präfixe zu verwenden. Zum Beispiel arbeitet Serge nur mit Zweigen, die das Übersetzungspräfix haben .
Es ist auch wichtig, dass bereits gelesene und genehmigte Texte, die zur Übersetzung bereit sind, mit dem Präfix translate in den Zweig fallen. Schließlich möchte niemand die Geschichte der Commits vergeblich analysieren, um zu verstehen, um welche Art von Texten es sich handelt und warum diff so aussieht.
Inhaltsvorbereitung
Unser Prozess zur Vorbereitung von Inhalten sieht wie folgt aus:

Erklärung des Problems. Wenn sich die Aufgabe in der Formulierungsphase befindet, werden manchmal bereits Texte angezeigt, die unverändert in die Anwendung aufgenommen werden sollen. Wenn dies der Fall ist, helfen ein Texter und ein technischer Redakteur bei der Fertigstellung.
Entwicklung von Layouts. Als der Designer die Layouts vorbereitete, lasen der technische Redakteur und der Texter alle Texte vor. Somit fallen die abgeleiteten Layouts in Englisch in die Entwicklung. Der Entwickler muss nicht über Texte nachdenken, sondern nimmt einfach vorgefertigte Zeilen aus Layouts.
Entwicklung. Leider können die vorherigen Schritte nicht alle möglichen Texttypen abdecken. Beispielsweise enthalten Layouts keine Validatoren, API-Fehler und einige modale Fenster. Wenn während des Entwicklungsprozesses Zeilen hinzugefügt werden mussten, stellen der technische Redakteur und der Texter dem Entwickler alle erforderlichen Texte zur Verfügung.
So haben wir zu einem bestimmten Zeitpunkt einen Zustand, in dem der Zweig alle neuen Texte enthält, die für den Teil des Codes erforderlich sind, der in ihm entwickelt wird. Zu diesem Zeitpunkt wird daraus ein neuer Zweig mit dem Präfix translate- erstellt, und Serge kann mit dem Übersetzungsprozess beginnen. Wenn die Übersetzungen fertig sind, nimmt der Entwickler sie aus dem Übersetzungszweig und reagiert dann auf den im Team akzeptierten Git-Flow.
Dieser Prozess minimiert die Beteiligung des Entwicklers am Lokalisierungsprozess und minimiert auch den manuellen Aufwand: Sie müssen lediglich eine Verzweigung erstellen.
Eine weitere Beschreibung des Optimierungsprozesses hängt stark von der Tatsache ab, dass das Team ähnliche Vorkehrungen und Prozesse hat.
Projekteinrichtung
Melden Sie sich als Serge an:
sudo -Hu serge -i
Erstellen Sie das Gruppenverzeichnis:
mkdir groups
In diesem Verzeichnis werden die Projekte gehostet, die den Repositorys in GitLab entsprechen. Es ist sinnvoll, die Struktur der Repository-Gruppen und ihre Speicherorte zu wiederholen, um die Navigation zu erleichtern.
Erstellen Sie ein Verzeichnis für das erste Projekt:
cd groups mkdir myproject cd myproject
Kopieren Sie die Serge-Konfigurationsdateien. Sie können den Mitternachtsbefehlshaber installieren und Dateien mit dem Dateimanager verwalten. Vor der Installation von MC müssen Sie sich von Ihrem Serge-Konto abmelden.
exit sudo apt install mc sudo -Hu serge -i
Zu kopierende Dateien aus / usr / local / serge / serge-master / bin / tools / feature-branch-config-generator:
- Serge-Konfigurationsdatei: myproject.cfg
- Jobvorlagendatei : myproject.inc
- .serge template: myproject.serge.tmpl
- Datei zum manuellen Hinzufügen von Zweigen: myproject_branches.txt
- Skript für die Arbeit mit GitLab: fbcgen.pl
cp /usr/local/serge/serge-master/bin/tools/feature-branch-config-generator/{myproject.cfg,myproject.inc,myproject.serge.tmpl,myproject_branches.txt} /usr/local/serge/serge-master/groups/myproject cp /usr/local/serge/serge-master/bin/tools/feature-branch-config-generator/fbcgen.pl /usr/local/serge/serge-master/
Erstellen Sie eine Datei zum Aufzeichnen von Plugin-Protokollen:
mkdir log cd log touch smartcat.log
Konfigurieren Sie myproject.inc
- Geben Sie im Feld Name das im Projekt verwendete Ressourcendateiformat an.
- Füllen Sie die ID mit der Maske% yourproject%.% Yourformat%.% Yourmasterbranchname%.
- Geben Sie im Feld destination_languages die Sprachen an, in die Sie übersetzen möchten.
- Füllen Sie die Quelle mit der Maske ./%yourproject%/%yourmasterbranch%/res/en.
- Füllen Sie den Ausgabedateipfad mit der Maske ./%yourproject%/%yourmasterbranch%/res/% LANG% /% FILE%.
- Füllen Sie source_match mit der Maske.% Yourformat%.
- Geben Sie abhängig vom Format der Ressourcendateien das erforderliche Plugin für die Analyse an. Plugins sind in der Serge-Dokumentation aufgeführt . Füllen Sie ts_file_path mit der Maske ./po/%yourproject%/% LOCALE% /% FILE% .po aus.
- Füllen Sie master_job mit der Maske% yourproject%.% Yourformat%.% Yourmasterbranch% aus.
Die restlichen Parameter bleiben unverändert.
Konfigurieren Sie myproject.serge.tmpl
- project_id - Projekt-ID in Smartcat
- token_id, token - Daten von Smartcat
- remotepath - hier müssen Sie den Namen des Parameters und seinen Wert korrekt angeben {% yourmasterbranch %% ssh_path_to_your_repo% #% yourmasterbranch%}
- $ FBCGEN_DIR_PADDED -% ssh_path_to_your_repo% # FBCGEN_BRANCH
- id - job.yourmasterbranch
- Name - Ihr Projekt
- source_language - en
- destination_languages - Sprachen, in die übersetzt werden muss
- source_dir - ./branches/yourmasterbranch/%path_to_resource_files%
- source_match - de.% yourformat%
- db_source - DBI: SQLite: Datenbankname -./% yourproject% .db3
- db_namespace -% yourproject%
- ts_file_path - ./po/PROJECT_ID_IN_SMARTCAT/% LANG% /% FILE% .po
- output_file_path - ./branches/%yourmasterbranch%/%path_to_resource_files%/% LOCALE%. % yourformat%
- output_lang_rewrite {
zh-hans zh-cn '' zh-hant-tw zh-tw
} - Mit diesem Parameter können Sie Sprachbezeichnungen neu definieren. Wenn die Sprachbezeichnungen im Projekt nicht mit den in Smartcat verwendeten Bezeichnungen übereinstimmen, können Sie sie neu definieren. - master_job - job.% yourmasterbranch%
- @inherit -. # jobs /:% yourmasterbranch%
- source_dir (in FBCGEN_BRANCH_JOBS) - ./branches/$FBCGEN_DIR/%path_to_resource_files%/
- Ausgabedateipfad (in FBCGEN_BRANCH_JOBS) - ./branches/$FBCGEN_DIR/%path_to_resource_files%/% LOCALE%. % yourformat%
Wichtig! In source_path_prefix muss das Ende der Punkt% FBCGEN_BRANCH sein.
Ein Aufruf des Smartcat-Plugins muss dem entsprechenden Abschnitt myproject.serge.tmpl hinzugefügt werden
sync { ts { plugin Smartcat data { project_id 12345678-1234-1234-1234-1234567890123 token_id 12345678-1234-1234-1234-1234567890123 token 1_qwertyuiopasdfghjklzxcvbn push { disassemble_algorithm_name Serge.io PO } pull { complete_projects NO complete_documents YES } log_file ./log/smartcat.log } }
Beschreibung einiger Parameter:
- disassemble_algorithm_name Serge.io PO - Verwenden Sie die an Serge übergebenen Schlüssel-Hashes. Dieser Parameter ist erforderlich, um die Ausführungszeit der Befehle pull-ts und push-ts zu optimieren.
- complete_projects NO - Wählen Sie nur dann Zeilen aus Smartcat aus, wenn alle Dokumente im Projekt abgeschlossen sind. Für unsere Integration ist das Projekt in Smartcat gleichbedeutend mit dem Repository in GitLab und enthält eine Reihe von Dokumenten. Ein Dokument ist ein kartesisches Produkt aus der Anzahl der Zweige im Repository und den Sprachen, in die die Übersetzung erfolgt. Wenn sich in Ihrem Repository zwei Zweige befinden, die in 6 Sprachen übersetzt werden müssen, werden im Projekt 12 Dokumente erstellt.
- complete_documents YES - Wählen Sie Zeilen aus Smartcat aus, wenn sich das Dokument im Status "Fertig" befindet. Dies geschieht, um die Anzahl der Commits für das Repository zu minimieren.
Beispiel für ein benutzerdefiniertes Projekt
Unten finden Sie die Konfigurationsdateien für ein Projekt mit 6 Sprachen. Das Projekt speichert die Quellzeilen im js-Format. Es wird ein 5-stelliges Dateinamenformat verwendet. Der Pfad zu den Ressourcendateien: ./branches/base-translate/client/src/translations.
myproject.cfg
myproject.inc
myproject.serge.tmpl
sync { ts { plugin Smartcat data { project_id %project_id% token_id %token_id% token %token% push { disassemble_algorithm_name Serge.io PO } pull { complete_projects NO complete_documents YES } } } vcs { plugin git data { local_path ./branches add_unversioned YES name L10N Robot email l10n-robot@example.com remote_path { base-translate git@gitlab.loc:common/myproject.git
Anwendungsstart
Klonen Sie das Repository
GIT_SSH_COMMAND="ssh -i /usr/local/serge/serge-master/.id_rsa_serge" git clone -b base-translate git@gitlab.loc:groups/myproject.git branches/base-translate/
Lokalisierungszyklus
Die .serge-Datei wird gebildet:
GIT_SSH_COMMAND="ssh -i /usr/local/serge/serge-master/.id_rsa_serge" /usr/local/serge/serge-master/fbcgen.pl myproject.cfg
Abrufen von Änderungen aus allen Repository-Zweigen:
GIT_SSH_COMMAND="ssh -i /usr/local/serge/serge-master/.id_rsa_serge" serge pull --initialize myproject.local.serge
Sammlung von Übersetzungsänderungen für alle Zweige von Smartcat:
GIT_SSH_COMMAND="ssh -i /usr/local/serge/serge-master/.id_rsa_serge" serge pull-ts myproject.local.serge
Bildung der Datenbank und .po:
GIT_SSH_COMMAND="ssh -i /usr/local/serge/serge-master/.id_rsa_serge" serge localize myproject.local.serge
Senden neuer Daten aus dem Repository an Smartcat:
GIT_SSH_COMMAND="ssh -i /usr/local/serge/serge-master/.id_rsa_serge" serge push-ts myproject.local.serge
Senden empfangener Überweisungen an das Repository in den entsprechenden Zweigen:
GIT_SSH_COMMAND="ssh -i /usr/local/serge/serge-master/.id_rsa_serge" serge push myproject.local.serge
Die folgenden Artikel befassen sich mit der Fehlerbehebung und Beschreibung spezieller Integrationsfälle.
Schlussartikel: 20 Projekte, 20 Sprachen, Frist gestern. Teil 3