Continuando uma série de artigos sobre como configurar localizações contínuas. Você pode encontrar o primeiro aqui . Neste artigo, mostrarei como integrar o pacote Serge-Smartcat-GitLab e configurar os arquivos de configuração do Serge usando um exemplo de projeto de teste. Instruções para o Ubuntu.
Instalação via vagrantfile
Se você não possui um servidor com o Ubuntu em mãos, pode usar o Vagrant. Como funciona:
- Instale o Vagrant e o VirtualBox seguindo as instruções .
- Faça o download do script vagrantfile e bash.
- Inicie o arquivo vagrant seguindo as instruções .
O resultado da compilação do Vagrant será uma máquina virtual Ubuntu na qual Serge está instalado com o plug-in Smartcat. Todos os arquivos necessários serão copiados, a chave ssh é criada. Você pode prosseguir imediatamente para configurar o projeto e iniciar o aplicativo.
Instalação manual
Criação de Usuário
Crie um grupo de usuários de distribuição:
sudo groupadd serge
Crie o usuário serge com o diretório inicial / usr / local / serge:
sudo useradd -g serge serge -m -d /usr/local/serge
Instale o Serge
A documentação completa do Serge está aqui .
Atualize os metadados do banco de dados do pacote local:
sudo apt-get -qq update
Instale ferramentas de montagem, bem como os pacotes necessários. Antes de iniciar a instalação, verifique se o Perl 5.10 ou superior está instalado.
sudo apt-get -qq -y install build-essential libssl-dev libexpat-dev unzip wget
Vá para o diretório inicial do usuário serge e instale o Serge com todas as dependências necessárias.
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
Instalando o plug-in Smartcat
sudo cpanm HTTP::Daemon@6.01 sudo cpanm Serge::Sync::Plugin::TranslationService::Smartcat sudo cpan install LWP::Protocol::https
Criação de chave
Crie um usuário serge com a chave ssh que o usuário serge usará no GitLab:
sudo -u serge ssh-keygen -t rsa -N "" -f .id_rsa_serge
Integração com GitLab
Crie um usuário de criação no GitLab e adicione-o a todos os repositórios de desenvolvedores.
Copie a chave ssh do arquivo id_rsa_serge.pub para as configurações de perfil de usuário serge no GitLab. Isso é necessário para que Serge possa receber e enviar seqüências de caracteres no GitLab.
A instalação está completa!
Integração Smartcat
Para começar, você deve:
- Inscreva-se no Smartcat .
- Crie um projeto indicando os idiomas para os quais você pretende traduzir. Ao configurar o plug-in, você precisará dos códigos de idioma usados pelo Smartcat.
- Obtenha project_id , token e token_id .
- Escreva para support@smartcat.ai e peça para ativar o suporte ao algoritmo de análise de arquivos Serge
Configurando Serge-Smartcat
Antes de prosseguir com a instalação, descreverei o princípio geral de operação. O ciclo de localização padrão inclui 5 etapas:

- pull - obtenha novas linhas do repositório.
- pull-ts - obtenha seqüências de caracteres localizadas do Smartcat (o plug-in do Smartcat está ativado).
- localizar - todos os formatos de origem do repositório são analisados e convertidos em arquivos .po, as traduções recebidas são gravadas em arquivos .po. Todas as linhas são gravadas no banco de dados de memória de tradução Serge.
- push-ts - novas linhas recebidas na primeira etapa são enviadas ao Smartcat (usando o plug-in Smartcat).
- strings localizadas por push são confirmadas no GitLab.
Você pode usar a integração com outro sistema CAT, por exemplo, existe um plugin para Pootle .
Repositórios Serge e Git
Como Serge sabe quais linhas enviar para tradução? Para determinar novas linhas, ferramentas git padrão são usadas: a diferença entre a ramificação principal e a atual é tomada. Diff é enviado para tradução.

Importante : Como regra geral, o ramo mestre é protegido, portanto, um ramo de tradução adicional é usado para definir diferenças, que chamamos de base-translate. Ou seja, após a mesclagem do release no master, o master deve ser mantido adicionalmente na base-translate.
Há um ponto importante aqui. É necessário construir os processos de tal maneira que, por um lado, os desenvolvedores entendam o que e em que momento será a tradução e, por outro, para que o techpeace não corra em círculos, segurando sua cabeça, porque seu diff é de 1000 linhas. E parece que apenas o título foi corrigido.
Princípio de funcionamento
Serge entra no repositório, pega todas as ramificações e começa a compará-las com a ramificação principal. Para cada filial na qual o diff é detectado, ele cria um conjunto de documentos de tradução no projeto Smartcat. Para não ficar atolado no caos de ramificações irrelevantes e não ficar perto de cada desenvolvedor com a pergunta: "você se lembrou de excluir a ramificação?", É conveniente usar prefixos. Por exemplo, Serge trabalha apenas com ramificações que possuem o prefixo de tradução .
Também é importante que os textos já lidos e aprovados e prontos para tradução caiam no ramo com o prefixo translate. Afinal, ninguém quer analisar a história dos commits em vão tentativas de entender que tipo de textos são e por que diff é assim?
Preparação de Conteúdo
Nosso processo de preparação de conteúdo é o seguinte:

Declaração do problema. Quando a tarefa está no estágio de formulação, algumas vezes os textos já aparecem lá e devem entrar inalterados no aplicativo. Se forem, um redator e redator técnico ajudam a finalizá-los.
Desenvolvimento de layouts. Quando o designer preparou os layouts, o redator e redator técnico leram todos os textos. Assim, os layouts deduzidos em inglês se enquadram no desenvolvimento. O desenvolvedor não precisa pensar em textos; ele simplesmente retira as linhas prontas dos layouts.
Desenvolvimento. Infelizmente, as etapas anteriores não podem cobrir todos os tipos de texto possíveis. Por exemplo, layouts não incluem validadores, erros de API, algumas janelas modais. Se durante o processo de desenvolvimento foi necessário adicionar linhas, o redator e redator técnico fornecem ao desenvolvedor todos os textos necessários.
Assim, em algum momento, temos um estado em que o ramo contém todos os novos textos necessários para a parte do código que está sendo desenvolvido nele. Nesse ponto, uma nova ramificação é criada com o prefixo translate- e Serge pode iniciar o processo de tradução. Quando as traduções estão prontas, o desenvolvedor as retira da ramificação de tradução e atua no fluxo git aceito na equipe.
Esse processo minimiza o envolvimento do desenvolvedor no processo de localização e também minimiza a quantidade de trabalho manual: você só precisa criar uma filial.
Uma descrição adicional do processo de ajuste depende muito do fato de a equipe ter arranjos e processos semelhantes.
Configuração do projeto
Efetue login como serge:
sudo -Hu serge -i
Crie o diretório de grupos:
mkdir groups
Este diretório hospedará os projetos correspondentes aos repositórios no GitLab. Faz sentido repetir a estrutura dos grupos de repositórios e seus locais para facilitar a navegação.
Crie um diretório para o primeiro projeto:
cd groups mkdir myproject cd myproject
Copie os arquivos de configuração do Serge. Você pode instalar o comandante da meia-noite e gerenciar arquivos usando o gerenciador de arquivos. Antes de instalar o MC, você deve sair da sua conta serge.
exit sudo apt install mc sudo -Hu serge -i
Arquivos para copiar de / usr / local / serge / serge-master / bin / tools / feature-branch-config-generator:
- Arquivo de configuração Serge: myproject.cfg
- arquivo de modelo de trabalho: myproject.inc
- Modelo .serge: myproject.serge.tmpl
- arquivo para adicionar ramificações manualmente: myproject_branches.txt
- script para trabalhar com o 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/
Crie um arquivo para gravar os logs do plug-in:
mkdir log cd log touch smartcat.log
Configurar myproject.inc
- No campo nome, especifique o formato do arquivo de recurso usado no projeto.
- Preencha o ID com a máscara% yourproject%.% Yourformat%.% Yourmasterbranchname%.
- No campo language_language, especifique os idiomas nos quais você deseja traduzir.
- Preencha a fonte com a máscara ./%yourproject%/%yourmasterbranch%/res/en.
- Preencha output_file_path com a máscara ./%yourproject%/%yourmasterbranch%/res/% LANG% /% FILE%.
- Preencha source_match com a máscara.% Yourformat%.
- Dependendo do formato dos arquivos de recursos, especifique o plug-in necessário para análise. Os plug-ins estão listados na documentação da serge . Preencha ts_file_path com a máscara ./po/%yourproject%/% LOCALE% /% FILE% .po.
- Preencha master_job com a máscara% yourproject%.% Yourformat%.% Yourmasterbranch%.
Os demais parâmetros permanecem inalterados.
Configurar myproject.serge.tmpl
- project_id - ID do projeto no Smartcat
- token_id, token - dados do Smartcat
- remotepath - aqui você deve especificar corretamente o nome do parâmetro e seu valor {% yourmasterbranch %% ssh_path_to_your_repo% #% yourmasterbranch%}
- $ FBCGEN_DIR_PADDED -% ssh_path_to_your_repo% # FBCGEN_BRANCH
- id - job.yourmasterbranch
- nome - seuprojeto
- source_language - pt
- destination_languages - idiomas para os quais será necessário traduzir
- source_dir - ./branches/yourmasterbranch/%path_to_resource_files%
- source_match - pt.% yourformat%
- db_source - DBI: SQLite: dbname -./% yourproject% .db3
- db_namespace -% seuprojeto%
- 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 permite redefinir as designações de idioma. Se as designações de idioma no projeto não corresponderem às designações usadas no Smartcat, você poderá redefini-las. - master_job - job.% yourmasterbranch%
- @inherit -. # jobs /:% yourmasterbranch%
- source_dir (em FBCGEN_BRANCH_JOBS) - ./branches/$FBCGEN_DIR/%path_to_resource_files%/
- output_file_path (em FBCGEN_BRANCH_JOBS) - ./branches/$FBCGEN_DIR/%path_to_resource_files%/% LOCALE%. % yourformat%
Importante! Em source_path_prefix, o final deve ser o ponto% FBCGEN_BRANCH.
Uma chamada para o plug-in Smartcat deve ser adicionada à seção apropriada 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 } }
Descrição de alguns parâmetros:
- disassemble_algorithm_name Serge.io PO - use os hashes de chave passados para Serge. Este parâmetro é necessário para otimizar o tempo de execução dos comandos pull-ts e push-ts.
- complete_projects NÃO - selecione as linhas do Smartcat apenas se todos os documentos no projeto forem concluídos. Para nossa integração, o projeto no Smartcat é sinônimo de repositório no GitLab e inclui um conjunto de documentos. Um documento é um produto cartesiano do número de ramificações no repositório e dos idiomas em que a tradução é feita. Ou seja, se no seu repositório houver 2 ramificações que precisam ser traduzidas para 6 idiomas, 12 documentos serão criados no projeto.
- complete_documents YES - selecione as linhas do Smartcat se o documento estiver no status concluído. Isso é feito para minimizar o número de confirmações no repositório.
Exemplo de projeto personalizado
Abaixo estão os arquivos de configuração para um projeto com 6 idiomas. O projeto armazena as linhas de origem no formato js. Um formato de nomeação de arquivo de 5 caracteres é usado. O caminho para os arquivos 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
Lançamento do aplicativo
Clonar o repositório
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 localização
O arquivo .serge é formado:
GIT_SSH_COMMAND="ssh -i /usr/local/serge/serge-master/.id_rsa_serge" /usr/local/serge/serge-master/fbcgen.pl myproject.cfg
Buscando alterações de todas as ramificações do repositório:
GIT_SSH_COMMAND="ssh -i /usr/local/serge/serge-master/.id_rsa_serge" serge pull --initialize myproject.local.serge
Coleção de alterações de tradução para todas as filiais do Smartcat:
GIT_SSH_COMMAND="ssh -i /usr/local/serge/serge-master/.id_rsa_serge" serge pull-ts myproject.local.serge
Formação do banco de dados e .po:
GIT_SSH_COMMAND="ssh -i /usr/local/serge/serge-master/.id_rsa_serge" serge localize myproject.local.serge
Enviando novos dados do repositório para o Smartcat:
GIT_SSH_COMMAND="ssh -i /usr/local/serge/serge-master/.id_rsa_serge" serge push-ts myproject.local.serge
Enviando transferências recebidas para o repositório nas ramificações apropriadas:
GIT_SSH_COMMAND="ssh -i /usr/local/serge/serge-master/.id_rsa_serge" serge push myproject.local.serge
Os artigos a seguir serão dedicados a Solução de problemas e descrição de casos especiais de integração.
Artigo final: 20 projetos, 20 idiomas, prazo de ontem. Parte 3