Poursuite d'une série d'articles sur la mise en place de localisations continues. Vous pouvez trouver le premier ici . Dans cet article, je vais vous expliquer comment intégrer le bundle Serge-Smartcat-GitLab et configurer les fichiers de configuration Serge à l'aide d'un exemple de projet de test. Instructions pour Ubuntu.
Installation via vagrantfile
Si vous n'avez pas de serveur avec Ubuntu à portée de main, vous pouvez utiliser Vagrant. Comment ça marche:
- Installez Vagrant et VirtualBox en suivant les instructions .
- Téléchargez le script vagrantfile et bash.
- Lancez vagrantfile en suivant les instructions .
Le résultat de la construction de Vagrant sera une machine virtuelle Ubuntu sur laquelle Serge est installé avec le plugin Smartcat. Tous les fichiers nécessaires seront copiés, la clé ssh est créée. Vous pouvez immédiatement procéder à la configuration du projet et au lancement de l'application.
Installation manuelle
Création d'utilisateurs
Créez un groupe d'utilisateurs de serge:
sudo groupadd serge
Créez l'utilisateur serge avec le répertoire personnel / usr / local / serge:
sudo useradd -g serge serge -m -d /usr/local/serge
Installer Serge
La documentation complĂšte de Serge est ici .
Mettez à jour les métadonnées de la base de données de packages locale:
sudo apt-get -qq update
Installez les outils d'assemblage, ainsi que les packages nécessaires. Avant de commencer l'installation, assurez-vous que Perl 5.10 ou supérieur est installé.
sudo apt-get -qq -y install build-essential libssl-dev libexpat-dev unzip wget
Accédez au répertoire personnel de l'utilisateur de serge et installez Serge avec toutes les dépendances nécessaires.
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
Installation du plugin Smartcat
sudo cpanm HTTP::Daemon@6.01 sudo cpanm Serge::Sync::Plugin::TranslationService::Smartcat sudo cpan install LWP::Protocol::https
Création de clé
Créez un utilisateur de serge avec la clé ssh que l'utilisateur de serge utilisera dans GitLab:
sudo -u serge ssh-keygen -t rsa -N "" -f .id_rsa_serge
Intégration avec GitLab
Créez un utilisateur de serge dans GitLab et ajoutez-le à tous les référentiels de développeurs.
Copiez la clé ssh du fichier id_rsa_serge.pub dans les paramÚtres du profil utilisateur de serge dans GitLab. Cela est nécessaire pour que Serge puisse recevoir et envoyer des chaßnes dans GitLab.
L'installation est terminée!
Intégration Smartcat
Pour commencer, vous devez:
- Inscrivez-vous Ă Smartcat .
- Créez un projet en indiquant les langues dans lesquelles vous souhaitez traduire. Lors de la configuration du plugin, vous aurez besoin des codes de langue utilisés par Smartcat.
- Obtenez project_id , token et token_id .
- Ăcrivez Ă support@smartcat.ai et demandez d'activer la prise en charge de l'algorithme d'analyse de fichiers Serge
Configurer Serge-Smartcat
Avant de procéder à l'installation, je décrirai le principe général de fonctionnement. Le cycle de localisation standard comprend 5 étapes:

- pull - récupÚre de nouvelles lignes depuis le dépÎt.
- pull-ts - récupÚre les chaßnes localisées de Smartcat (le plugin Smartcat est activé).
- localiser - tous les formats source du référentiel sont analysés et convertis en fichiers .po, les traductions reçues sont écrites dans des fichiers .po. Toutes les lignes sont écrites dans la base de données de la mémoire de traduction Serge.
- push-ts - les nouvelles lignes reçues à la premiÚre étape sont envoyées à Smartcat (à l'aide du plug-in Smartcat).
- push - les chaßnes localisées sont validées dans GitLab.
Vous pouvez utiliser l'intégration avec un autre systÚme CAT, par exemple, il existe un plugin pour Pootle .
DépÎts Serge et Git
Comment Serge sait-il quelles lignes envoyer pour traduction? Pour déterminer de nouvelles lignes, des outils git standard sont utilisés: la différence entre la branche principale et la branche actuelle est prise. Diff est envoyé pour traduction.

Important : En rĂšgle gĂ©nĂ©rale, la branche principale est protĂ©gĂ©e, donc une branche de traduction supplĂ©mentaire est utilisĂ©e pour dĂ©finir les diffĂ©rences, nous l'appelons base-translate. Autrement dit, aprĂšs la fusion de la version dans master, master doit en outre ĂȘtre conservĂ© dans base-translate.
Il y a un point important ici. Il est nĂ©cessaire de construire les processus de telle maniĂšre que, d'une part, les dĂ©veloppeurs comprennent quoi et Ă quel moment il ira Ă la traduction, et d'autre part, afin que le techpec ne tourne pas en rond, tenant sa tĂȘte, car son diff est de 1000 lignes. Et il semble que seul le titre ait Ă©tĂ© corrigĂ©.
Principe de fonctionnement
Serge entre dans le référentiel, prend toutes les branches et commence à les comparer avec la branche maßtre. Pour chaque branche dans laquelle diff est détecté, il crée un ensemble de documents de traduction dans le projet Smartcat. Afin de ne pas s'enliser dans le chaos des branches non pertinentes et de ne pas se tenir prÚs de chaque développeur avec la question: «avez-vous pensé à supprimer la branche?», Il est pratique d'utiliser des préfixes. Par exemple, Serge ne fonctionne qu'avec les branches qui ont le préfixe translate .
Il est Ă©galement important que les textes dĂ©jĂ lus et approuvĂ©s prĂȘts pour la traduction tombent dans la branche avec le prĂ©fixe translate. AprĂšs tout, personne ne veut analyser l'histoire des commits en vain pour comprendre de quel type de texte il s'agit et pourquoi diff ressemble à ça?
Préparation du contenu
Notre processus de préparation de contenu est le suivant:

ĂnoncĂ© du problĂšme. Lorsque la tĂąche est au stade de la formulation, il arrive parfois que des textes y apparaissent et doivent ĂȘtre inchangĂ©s dans l'application. S'ils le sont, un rĂ©dacteur et un rĂ©dacteur technique aident Ă les finaliser.
Développement de mises en page. Lorsque le concepteur a préparé les mises en page, le rédacteur technique et le rédacteur ont lu tous les textes. Ainsi, les dispositions déduites en anglais entrent dans le développement. Le développeur n'a pas à penser aux textes, il prend simplement des lignes toutes faites à partir de mises en page.
DĂ©veloppement. Malheureusement, les Ă©tapes prĂ©cĂ©dentes ne peuvent pas couvrir tous les types de texte possibles. Par exemple, les mises en page n'incluent pas les valideurs, les erreurs API, certaines fenĂȘtres modales. Si vous avez besoin d'ajouter des lignes au cours du processus de dĂ©veloppement, le rĂ©dacteur technique et le rĂ©dacteur fournissent au dĂ©veloppeur tous les textes nĂ©cessaires.
Ainsi, Ă un moment donnĂ©, nous avons un Ă©tat oĂč la branche contient tous les nouveaux textes qui sont nĂ©cessaires pour la partie du code qui y est dĂ©veloppĂ©e. Ă ce stade, une nouvelle branche est créée Ă partir d'elle avec le prĂ©fixe translate- et Serge peut commencer le processus de traduction. Lorsque les traductions sont prĂȘtes, le dĂ©veloppeur les prend dans la branche de traduction, puis agit sur le flux git acceptĂ© dans l'Ă©quipe.
Ce processus minimise l'implication du développeur dans le processus de localisation, et minimise également la quantité de travail manuel: il vous suffit de créer une branche.
Une autre description du processus de réglage repose fortement sur le fait que l'équipe a des dispositions et des processus similaires.
Configuration du projet
Connectez-vous en tant que serge:
sudo -Hu serge -i
Créez le répertoire des groupes:
mkdir groups
Ce répertoire hébergera les projets correspondant aux référentiels dans GitLab. Il est logique de répéter la structure des groupes de référentiels et leurs emplacements pour faciliter la navigation.
Créez un répertoire pour le premier projet:
cd groups mkdir myproject cd myproject
Copiez les fichiers de configuration de Serge. Vous pouvez installer midnight commander et gérer des fichiers à l'aide du gestionnaire de fichiers. Avant d'installer MC, vous devez vous déconnecter de votre compte serge.
exit sudo apt install mc sudo -Hu serge -i
Fichiers Ă copier depuis / usr / local / serge / serge-master / bin / tools / feature-branch-config-generator:
- Fichier de configuration Serge: myproject.cfg
- fichier de modĂšle de travail: myproject.inc
- modĂšle .serge: myproject.serge.tmpl
- fichier pour ajouter des branches manuellement: myproject_branches.txt
- script pour travailler avec 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/
Créez un fichier pour enregistrer les journaux des plugins:
mkdir log cd log touch smartcat.log
Configurer myproject.inc
- Dans le champ du nom, spécifiez le format de fichier de ressources utilisé dans le projet.
- Remplissez l'identifiant avec le masque% yourproject%.% Yourformat%.% Yourmasterbranchname%.
- Dans le champ destination_languages, spécifiez les langues dans lesquelles vous souhaitez traduire.
- Remplissez la source avec le masque ./%yourproject%/%yourmasterbranch%/res/en.
- Remplissez output_file_path avec le masque ./%yourproject%/%yourmasterbranch%/res/% LANG% /% FILE%.
- Remplissez source_match avec le masque.% Yourformat%.
- Selon le format des fichiers de ressources, spécifiez le plug-in requis pour l'analyse. Les plugins sont répertoriés dans la documentation de Serge . Remplissez ts_file_path avec le masque ./po/%yourproject%/% LOCALE% /% FILE% .po.
- Remplissez master_job avec le masque% yourproject%.% Yourformat%.% Yourmasterbranch%.
Les paramÚtres restants restent inchangés.
Configurer myproject.serge.tmpl
- project_id - id du projet dans Smartcat
- token_id, token - données de Smartcat
- remotepath - ici, vous devez spécifier correctement le nom du paramÚtre et sa valeur {% yourmasterbranch %% ssh_path_to_your_repo% #% yourmasterbranch%}
- $ FBCGEN_DIR_PADDED -% ssh_path_to_your_repo% # FBCGEN_BRANCH
- id - job.yourmasterbranch
- nom - votreprojet
- source_language - en
- destination_languages ââ- langues dans lesquelles il sera nĂ©cessaire de traduire
- source_dir - ./branches/yourmasterbranch/%path_to_resource_files%
- source_match - en.% votreformat%
- db_source - DBI: SQLite: dbname -./% yourproject% .db3
- db_namespace -% votreprojet%
- ts_file_path - ./po/PROJECT_ID_IN_SMARTCAT/% LANG% /% FILE% .po
- chemin_fichier_sortie - ./branches/%yourmasterbranch%/%path_to_resource_files%/% LOCALE%. % votreformat%
- output_lang_rewrite {
zh-hans zh-cn '' zh-hant-tw zh-tw
} - Ce paramÚtre vous permet de redéfinir les désignations de langue. Si les désignations de langue dans le projet ne correspondent pas aux désignations utilisées dans Smartcat, vous pouvez les redéfinir. - master_job - job.% yourmasterbranch%
- @inherit -. # jobs /:% yourmasterbranch%
- source_dir (dans FBCGEN_BRANCH_JOBS) - ./branches/$FBCGEN_DIR/%path_to_resource_files%/
- chemin_fichier_sortie (dans FBCGEN_BRANCH_JOBS) - ./branches/$FBCGEN_DIR/%path_to_resource_files%/% LOCALE%. % votreformat%
Important! Dans source_path_prefix, la fin doit ĂȘtre le point% FBCGEN_BRANCH.
Un appel au plugin Smartcat doit ĂȘtre ajoutĂ© Ă la section appropriĂ©e myproject.serge.tmpl
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 } }
Description de certains paramĂštres:
- disassemble_algorithm_name Serge.io PO - utilisez les hachages de clés passés à Serge. Ce paramÚtre est nécessaire pour optimiser le temps d'exécution des commandes pull-ts et push-ts.
- complete_projects NO - sĂ©lectionnez les lignes de Smartcat uniquement si tous les documents du projet sont terminĂ©s. Pour notre intĂ©gration, le projet dans Smartcat est synonyme du rĂ©fĂ©rentiel dans GitLab, et comprend un ensemble de documents. Un document est un produit cartĂ©sien du nombre de branches dans le rĂ©fĂ©rentiel et des langues dans lesquelles la traduction est effectuĂ©e. Autrement dit, si dans votre rĂ©fĂ©rentiel il y a 2 branches qui doivent ĂȘtre traduites en 6 langues, 12 documents seront créés dans le projet.
- complete_documents YES - choisissez des lignes dans Smartcat si le document est en état terminé. Cette opération est effectuée pour minimiser le nombre de validations dans le référentiel.
Exemple de projet personnalisé
Vous trouverez ci-dessous les fichiers de configuration d'un projet en 6 langues. Le projet stocke les lignes source au format js. Un format de dénomination de fichier à 5 caractÚres est utilisé. Chemin d'accÚs aux fichiers de ressources: ./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
Lancement de l'application
Clonez le référentiel
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/
Cycle de localisation
Le fichier .serge est formé:
GIT_SSH_COMMAND="ssh -i /usr/local/serge/serge-master/.id_rsa_serge" /usr/local/serge/serge-master/fbcgen.pl myproject.cfg
Récupération des modifications dans toutes les branches du référentiel:
GIT_SSH_COMMAND="ssh -i /usr/local/serge/serge-master/.id_rsa_serge" serge pull --initialize myproject.local.serge
Collection des changements de traduction pour toutes les branches de Smartcat:
GIT_SSH_COMMAND="ssh -i /usr/local/serge/serge-master/.id_rsa_serge" serge pull-ts myproject.local.serge
Formation de la base de données et du .po:
GIT_SSH_COMMAND="ssh -i /usr/local/serge/serge-master/.id_rsa_serge" serge localize myproject.local.serge
Envoi de nouvelles données du référentiel à Smartcat:
GIT_SSH_COMMAND="ssh -i /usr/local/serge/serge-master/.id_rsa_serge" serge push-ts myproject.local.serge
Envoi des transferts reçus au référentiel dans les branches appropriées:
GIT_SSH_COMMAND="ssh -i /usr/local/serge/serge-master/.id_rsa_serge" serge push myproject.local.serge
Les articles suivants seront consacrés au dépannage et à la description des cas particuliers d'intégration.
Article final: 20 projets, 20 langues, date limite hier. 3e partie