Continúa una serie de artículos sobre la configuración de localizaciones continuas. Puedes encontrar el primero aquí . En este artículo, le diré cómo integrar el paquete Serge-Smartcat-GitLab y configurar los archivos de configuración de Serge utilizando un proyecto de prueba de ejemplo. Instrucciones para Ubuntu.
Instalación a través de vagrantfile
Si no tiene un servidor con Ubuntu a mano, puede usar Vagrant. Cómo funciona
- Instale Vagrant y VirtualBox siguiendo las instrucciones .
- Descargue el script vagrantfile y bash.
- Inicie vagrantfile siguiendo las instrucciones .
El resultado de la compilación Vagrant es una máquina virtual con Ubuntu, en la que Serge está instalado con el complemento Smartcat. Se copiarán todos los archivos necesarios, se crea la clave ssh. Puede proceder de inmediato a configurar el proyecto e iniciar la aplicación.
Instalación manual
Creación de usuario
Cree un grupo de usuarios serge:
sudo groupadd serge
Cree el usuario serge con el directorio de inicio / usr / local / serge:
sudo useradd -g serge serge -m -d /usr/local/serge
Instalar Serge
La documentación completa de Serge está aquí .
Actualice los metadatos de la base de datos del paquete local:
sudo apt-get -qq update
Instale herramientas de ensamblaje, así como los paquetes necesarios. Antes de comenzar la instalación, asegúrese de que esté instalado Perl 5.10 o superior.
sudo apt-get -qq -y install build-essential libssl-dev libexpat-dev unzip wget
Vaya al directorio de inicio del usuario de serge e instale Serge con todas las dependencias necesarias.
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
Instalación del complemento Smartcat
sudo cpanm HTTP::Daemon@6.01 sudo cpanm Serge::Sync::Plugin::TranslationService::Smartcat sudo cpan install LWP::Protocol::https
Creación de clave
Cree un usuario serge con la clave ssh que el usuario serge usará en GitLab:
sudo -u serge ssh-keygen -t rsa -N "" -f .id_rsa_serge
Integración con GitLab
Cree un usuario de sargento en GitLab y agréguelo a todos los repositorios de desarrolladores.
Copie la clave ssh del archivo id_rsa_serge.pub a la configuración del perfil de usuario de serge en GitLab. Esto es necesario para que Serge pueda recibir y enviar cadenas en GitLab.
¡La instalación está completa!
Integración Smartcat
Para comenzar, debes:
- Regístrese en Smartcat .
- Cree un proyecto indicando los idiomas a los que piensa traducir. Al configurar el complemento, necesitará los códigos de idioma utilizados por Smartcat.
- Obtenga project_id , token y token_id .
- Escriba a support@smartcat.ai y solicite habilitar el soporte para el algoritmo de análisis de archivos Serge
Configurar Serge-Smartcat
Antes de proceder a la configuración, describiré el principio general de operación. El ciclo de localización estándar incluye 5 pasos:

- pull : obtén nuevas líneas del repositorio.
- pull-ts : obtenga cadenas localizadas de Smartcat (el complemento Smartcat está habilitado).
- localizar : todos los formatos de origen del repositorio se analizan y se convierten en archivos .po, las traducciones recibidas se escriben en archivos .po. Todas las líneas se escriben en la base de datos de memoria de traducción Serge.
- push-ts : las nuevas líneas recibidas en el primer paso se envían a Smartcat (utilizando el complemento Smartcat).
- push : las cadenas localizadas se comprometen en GitLab.
Puede usar la integración con otro sistema CAT, por ejemplo, hay un complemento para Pootle .
Serge y repositorios git
¿Cómo sabe Serge qué líneas enviar para la traducción? Para determinar nuevas líneas, se utilizan herramientas git estándar: se toma la diferencia entre la rama maestra y la actual. Diff se envía para traducción.

Importante : Como regla, la rama maestra está protegida, por lo tanto, se usa una rama de traducción adicional para definir diffs, la llamamos base-translate. Es decir, después de la fusión de lanzamiento en master, master debe mantenerse adicionalmente en base-translate.
Hay un punto importante aquí. Es necesario construir los procesos de tal manera que, por un lado, los desarrolladores entiendan qué y en qué momento irá a la traducción, y por otro, para que el techpeace no se ejecute en círculos, sosteniendo su cabeza, porque su diferencia es de 1000 líneas. Y parece que solo se corrigió el título.
Principio de funcionamiento
Serge entra al repositorio, toma todas las ramas y comienza a compararlas con la rama maestra. Para cada rama en la que se detecta diff, crea un conjunto de documentos de traducción en el proyecto Smartcat. Para no quedar empantanado en el caos de ramas irrelevantes y no pararse cerca de cada desarrollador con la pregunta: "¿recordó eliminar la rama?", Es conveniente usar prefijos. Por ejemplo, Serge solo trabaja con ramas que tienen el prefijo de traducción .
También es importante que los textos ya leídos y aprobados que estén listos para traducir caigan en la rama con el prefijo traducir. Después de todo, nadie quiere analizar la historia de los commits en vanos intentos de entender qué tipo de textos son y ¿por qué se ve así?
Preparación de contenido
Nuestro proceso de preparación de contenido es el siguiente:

Declaración del problema. Cuando la tarea está en la etapa de formulación, a veces ya aparecen textos que deberían ir a la aplicación sin cambios. Si lo son, un redactor técnico y un redactor técnico ayudan a finalizarlos.
Desarrollo de diseños. Cuando el diseñador preparó los diseños, el redactor técnico y el redactor leyeron todos los textos. Por lo tanto, los diseños deducidos en inglés caen en el desarrollo. El desarrollador no tiene que pensar en textos; simplemente toma líneas preparadas de los diseños.
Desarrollo. Desafortunadamente, los pasos anteriores no pueden cubrir todos los tipos de texto posibles. Por ejemplo, los diseños no incluyen validadores, errores de API, algunas ventanas modales. Si durante el proceso de desarrollo fue necesario agregar líneas, el redactor técnico y el redactor proporcionarán al desarrollador todos los textos necesarios.
Por lo tanto, en algún momento, tenemos un estado en el que la rama contiene todos los textos nuevos que son necesarios para la parte del código que se está desarrollando en él. En este punto, se crea una nueva rama con el prefijo traductor, y Serge puede comenzar el proceso de traducción. Cuando las traducciones están listas, el desarrollador las toma de la rama de traducción y luego actúa según el flujo git aceptado en el equipo.
Este proceso minimiza la participación del desarrollador en el proceso de localización y también minimiza la cantidad de trabajo manual: solo necesita crear una sucursal.
Una descripción más detallada del proceso de ajuste se basa en gran medida en el hecho de que el equipo tiene arreglos y procesos similares.
Configuración del proyecto
Inicie sesión como serge:
sudo -Hu serge -i
Crea el directorio de grupos:
mkdir groups
Este directorio alojará los proyectos correspondientes a los repositorios en GitLab. Tiene sentido repetir la estructura de los grupos de repositorios y sus ubicaciones para facilitar la navegación.
Cree un directorio para el primer proyecto:
cd groups mkdir myproject cd myproject
Copie los archivos de configuración de Serge. Puede instalar Midnight Commander y administrar archivos usando el administrador de archivos. Antes de instalar MC, debe cerrar sesión en su cuenta serge.
exit sudo apt install mc sudo -Hu serge -i
Archivos para copiar desde / usr / local / serge / serge-master / bin / tools / feature-branch-config-generator:
- Archivo de configuración de Serge: myproject.cfg
- archivo de plantilla de trabajo: myproject.inc
- .serge template: myproject.serge.tmpl
- archivo para agregar ramas manualmente: myproject_branches.txt
- script para trabajar con 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/
Cree un archivo para grabar registros de complementos:
mkdir log cd log touch smartcat.log
Configurar myproject.inc
- En el campo de nombre, especifique el formato de archivo de recursos utilizado en el proyecto.
- Rellene la identificación con la máscara% yourproject%.% Yourformat%.% Yourmasterbranchname%.
- En el campo destination_languages, especifique los idiomas a los que desea traducir.
- Rellene la fuente con la máscara ./%yourproject%/%yourmasterbranch%/res/en.
- Rellene output_file_path con la máscara ./%yourproject%/%yourmasterbranch%/res/% LANG% /% FILE%.
- Rellene source_match con la máscara.% Yourformat%.
- Dependiendo del formato de los archivos de recursos, especifique el complemento requerido para el análisis. Los complementos se enumeran en la documentación de serge . Complete ts_file_path con máscara ./po/%yourproject%/% LOCALE% /% FILE% .po.
- Complete master_job con la máscara% yourproject%.% Yourformat%.% Yourmasterbranch%.
Los parámetros restantes se dejan sin cambios.
Configure myproject.serge.tmpl
- project_id - id del proyecto en Smartcat
- token_id, token: datos de Smartcat
- ruta remota: aquí debe especificar correctamente el nombre del parámetro y su valor {% yourmasterbranch %% ssh_path_to_your_repo% #% yourmasterbranch%}
- $ FBCGEN_DIR_PADDED -% ssh_path_to_your_repo% # FBCGEN_BRANCH
- id - job.yourmasterbranch
- nombre - su proyecto
- source_language - es
- destination_languages: idiomas a los que será necesario traducir
- source_dir - ./branches/yourmasterbranch/%path_to_resource_files%
- source_match - es.% yourformat%
- db_source - DBI: SQLite: dbname -./% 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
} - Este parámetro le permite redefinir las designaciones de idioma. Si las designaciones de idioma en el proyecto no coinciden con las designaciones utilizadas en Smartcat, puede redefinirlas. - master_job - trabajo.% yourmasterbranch%
- @inherit -. # jobs /:% yourmasterbranch%
- source_dir (en FBCGEN_BRANCH_JOBS) - ./branches/$FBCGEN_DIR/%path_to_resource_files%/
- output_file_path (en FBCGEN_BRANCH_JOBS) - ./branches/$FBCGEN_DIR/%path_to_resource_files%/% LOCALE%. % yourformat%
Importante! En source_path_prefix, el final debe ser el punto% FBCGEN_BRANCH.
Se debe agregar una llamada al complemento Smartcat a la sección correspondiente 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 } }
Descripción de algunos parámetros:
- disassemble_algorithm_name Serge.io PO : utilice los hashes clave pasados a Serge. Este parámetro es necesario para optimizar el tiempo de ejecución de los comandos pull-ts y push-ts.
- complete_projects NO : seleccione líneas de Smartcat solo si se han completado todos los documentos del proyecto. Para nuestra integración, el proyecto en Smartcat es sinónimo del repositorio en GitLab e incluye un conjunto de documentos. Un documento es un producto cartesiano del número de sucursales en el repositorio y los idiomas a los que se realiza la traducción. Es decir, si en su repositorio hay 2 sucursales que deben traducirse a 6 idiomas, se crearán 12 documentos en el proyecto.
- complete_documents YES : seleccione líneas de Smartcat si el documento está en estado listo. Esto se hace para minimizar el número de confirmaciones en el repositorio.
Ejemplo de proyecto personalizado
A continuación se muestran los archivos de configuración para un proyecto con 6 idiomas. El proyecto almacena las líneas de origen en formato js. Se utiliza un formato de nombre de archivo de 5 caracteres. La ruta a los archivos de recursos: ./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
Lanzamiento de la aplicación
Clonar el repositorio
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/
Ciclo de localización
El archivo .serge está formado:
GIT_SSH_COMMAND="ssh -i /usr/local/serge/serge-master/.id_rsa_serge" /usr/local/serge/serge-master/fbcgen.pl myproject.cfg
Obteniendo cambios de todas las ramas del repositorio:
GIT_SSH_COMMAND="ssh -i /usr/local/serge/serge-master/.id_rsa_serge" serge pull --initialize myproject.local.serge
Colección de cambios de traducción para todas las sucursales de Smartcat:
GIT_SSH_COMMAND="ssh -i /usr/local/serge/serge-master/.id_rsa_serge" serge pull-ts myproject.local.serge
Formación de la base de datos y .po:
GIT_SSH_COMMAND="ssh -i /usr/local/serge/serge-master/.id_rsa_serge" serge localize myproject.local.serge
Envío de nuevos datos desde el repositorio a Smartcat:
GIT_SSH_COMMAND="ssh -i /usr/local/serge/serge-master/.id_rsa_serge" serge push-ts myproject.local.serge
Envío de transferencias recibidas al repositorio en las sucursales apropiadas:
GIT_SSH_COMMAND="ssh -i /usr/local/serge/serge-master/.id_rsa_serge" serge push myproject.local.serge
Los siguientes artículos estarán dedicados a la resolución de problemas y la descripción de casos especiales de integración.
Artículo final: 20 proyectos, 20 idiomas, fecha límite ayer. Parte 3