Localização de aplicativos: como fizemos amigos tradução e desenvolvimento


Olá Habr! Sou desenvolvedor líder de localização no Badoo. Trabalhamos com vários grandes projetos: Badoo, Bumble, Lumen e Chappy. Agora, no sistema de localização, temos 150.000 frases e textos traduzidos para 52 idiomas. Além disso, cada um de nossos aplicativos tem seu próprio público, seus mercados, seu próprio estilo de comunicação com os usuários, versões para a web e plataformas móveis.


Neste artigo, mostrarei como criamos o processo de localização, como abordamos o controle de qualidade, como lançaremos traduções dependendo da plataforma e, o mais importante, como garantimos que os desenvolvedores falem bem do nosso sistema de tradução. Este é um ponto muito importante: mais de 300 desenvolvedores trabalham em projetos, cujo trabalho deve ser confortável. Os desenvolvedores não são tradutores e não devem pensar em traduções.


O artigo foi escrito com base no meu relatório na conferência Highload ++ em novembro.


Conteúdo:


Os termos de referência para toda a cabeça!
Recursos do processo de tradução
Pedimos aos usuários para ajudar
Organização de Desenvolvimento
Controle de qualidade de localização
Versões, Versões
A principal coisa. Sumário
Materiais adicionais


Para começar, vamos ver como é o processo de localização em nossa empresa.



Neste diagrama, não refleti todas as nuances - elas não são necessárias para um entendimento geral. O ponto principal é que começamos com os termos de referência (TOR). A seguir, vem o desenvolvimento de clientes e servidores e, paralelamente, a eles, é o processo de tradução.


TK e a fase final de lançamento não são em vão realçadas em uma cor. Essa é uma dica de que o release deve estar em conformidade com o ToR. Não tem outro jeito. Se o TK não estiver completo o suficiente, não ficará claro para os desenvolvedores responsáveis ​​pelo quê, qual deles deve integrar o texto: o "telefone celular" deve "costurá-lo" no aplicativo móvel ou os desenvolvedores do servidor devem enviá-lo do servidor em resposta à solicitação.


Vamos lidar com tudo isso. Mas primeiro, quero apresentar e explicar um termo.


Um token é qualquer texto indivisível que precise ser traduzido. Pode ser uma legenda de botão, um título ou um parágrafo inteiro.

Agora estamos prontos para avançar para o material principal!


Termos de Referência


A primeira etapa do nosso processo é a preparação das especificações técnicas corretas. O principal elemento relacionado à localização é a tabela de tokens. De fato, esta é uma lista de textos que devem ser usados ​​no aplicativo ou no site.



A tabela de token indica se o texto é fornecido pelo servidor ou integrado ao aplicativo. A chave deve ser indicada: se o texto foi usado anteriormente, a chave estará presente nesta tabela; se o texto não foi usado em nenhum lugar, o número de série do texto será indicado e o desenvolvedor poderá definir uma chave conveniente.


Reutilizar texto é um momento muito insidioso. Por um lado, o processo de localização é acelerado e, por outro, você pode entrar em uma situação engraçada.


Vou explicar com um exemplo. Uma vez, tivemos a pergunta "Você fuma?" Com as opções de resposta "Sim" e "Não". Aqui vemos três tokens: dois para respostas e um para a pergunta. A pergunta foi traduzida para o russo como "Você fuma?", As respostas são "Eu fumo" e "Eu não fumo". Decidimos realizar outra pesquisa e reutilizar as opções de resposta. Em inglês, tudo parecia correto: “Gosta de visitar uma festa?” - “Sim” / “Não”. Em russo, devido à reutilização de tokens, o seguinte "diálogo" acabou: "Você vai à festa?" - "Eu fumo" / "Eu não fumo".


Agora, quando compilamos o ToR e decidimos sobre a reutilização do texto, levamos em consideração em quais contextos ele foi usado anteriormente. Também indicamos se o token é fornecido pelo servidor ou integrado ao cliente e entregue aos clientes através da App Store ou do Google Play.


Essas técnicas ajudam a economizar tempo porque excluem discussões em estágios posteriores.


Traduções


O próximo passo é a tradução. E o principal aqui é não perder o pensamento original. E isso geralmente acontece, porque todos os idiomas são diferentes, com suas próprias sombras e curvas. Às vezes, a tradução mais precisa simplesmente não se encaixa na tela e os tradutores precisam encontrar um compromisso.


Vou falar sobre como começamos a traduzir, como trazemos o contexto para os tradutores, mantemos um estilo comum e verificamos o resultado.


Ordem de tradução


Há ordem em que existem regras (e todas as seguem). Portanto, temos um regulamento sobre a ordem da tradução.


Para começar, escolhemos um idioma que seja entendido pela maioria dos tradutores. É nela que prepararemos os textos originais, para que mais tarde possam ser facilmente traduzidos para outros idiomas. Todos os idiomas para os quais traduzimos (e temos 52 deles) são divididos em principal (pai) e dialetos. O idioma em que os textos são preparados é o inglês (chamamos de mestre). Além disso, do inglês traduzimos para outros idiomas: espanhol, francês, russo e outros. Às vezes, a tradução precisa ser esclarecida para um dos dialetos - depois traduzimos para o espanhol mexicano ou o inglês australiano. Mas se não precisarmos disso, usaremos a tradução no idioma principal: espanhol básico ou inglês básico.


Um exemplo Digamos que precisamos tornar a saudação mais formal. Inicialmente, havia "Hey" em inglês, "Hola" em espanhol, "Salut" em francês, "Hello" em russo, "G'day mate" em australiano e "Que onda" em mexicano ("Like a wave ? ”; Mexicanos são legais!). Se quisermos mudar o texto, tornando-o mais oficial, teremos que mudar o texto original em inglês. Nesse momento, as traduções para outros idiomas ficam incorretas: elas precisam ser verificadas e esclarecidas. Chamamos a atenção dos tradutores para isso.


Impacto do contexto


Um ponto importante é o contexto em que a tradução existe.


Vou explicar com exemplos.


Imediatamente, observo que alguns exemplos são capturas de tela de recursos conhecidos, mas seus nomes não importam para nós, apenas analisamos os tipos mais comuns de erros na localização.

Este é um sinal com um posto de gasolina: "Antes de iniciar o movimento, verifique se não há pistola no tanque". A palavra "arma" foi traduzida literalmente para o inglês: "arma". Mas uma arma para um americano é uma arma. Nesse contexto, a solicitação "Tire a arma do tanque" parece um tanto estranha.


No exemplo a seguir, os criadores do aplicativo decidiram criar uma versão universal do texto para homens e mulheres - aparentemente, há algum benefício para eles. A sensação é de que textos e imagens são simplesmente coletados em uma tela: o que está em jogo não é claro.



O próximo exemplo é sobre como o pensamento original do texto foi perdido como resultado da tradução. Veja a versão russa à direita: somos oferecidos a iniciar a comunicação conosco. Embora tenha sido entendido que eles nos dão a oportunidade de vincular nossa conta do Instagram.



Tais erros ocorrem quando a tradução ocorre fora do contexto. Portanto, para cada token em nosso sistema de localização, o seguinte é indicado:


  • descrição do texto;
  • uma imagem que mostra quais elementos estão próximos ao texto na tela;
  • uma observação sobre se o texto será exibido para homens ou mulheres - para que os tradutores possam determinar se são necessárias duas traduções diferentes ou apenas uma;
  • tipos de variáveis ​​(este é um ponto muito importante, e eu falarei mais sobre isso quando analisarmos o processo de desenvolvimento);
  • tamanho máximo do texto: é muito importante para notificações por push, porque a largura da tela de um dispositivo móvel não é ilimitada.
    Além disso, definitivamente dividiremos o texto grande em partes. Isso é conveniente se você precisar pesquisar ou fazer alterações.

Vamos analisar esse momento com mais detalhes. Quando quebramos o texto, perdemos a conexão entre frases e sentenças individuais. Portanto, devemos mostrar aos tradutores o que aconteceu antes e depois deste texto. Isso é relevante, por exemplo, no caso de documentos legais - para que sejam traduzidos corretamente.


Também destacamos termos locais, gírias em tokens. Por exemplo, no caso da frase "Desbloqueie sua lista de curtidas para ver todos os que estão interessados ​​ao mesmo tempo", o tradutor precisa saber que as curtidas nesse caso são um diretório de aplicativo especial que contém contatos de usuários que gostam do perfil. Outro exemplo semelhante é o termo "Histórias". Há dez anos, ninguém na palavra "história" imaginava o Instagram. Agora está associado principalmente a ele.


Portanto, garantimos que a opção de tradução seja altamente dependente do contexto, ou seja, dos seguintes fatores:


  • Sexo do usuário
  • a variável numérica que aparece no texto: "Você tem apenas um amigo" e "Você já tem dez amigos";
  • Plataformas: Web, Android, iOS;
  • o projeto para o qual a tradução está sendo executada.

Vamos nos debruçar sobre o último ponto - a dependência da tradução no projeto. Isso é importante porque cada projeto tem seu próprio estilo.

Esses são os cabeçalhos das cartas enviadas ao usuário se sua conta foi bloqueada.


Para o Badoo: "Sua conta está bloqueada".
Para o Lumen: "Sua conta está bloqueada".
Para Bumble: "Você foi bloqueado".
E para Chappy - "Ah!"


Para manter um estilo unificado em cada projeto, você precisa conceder aos tradutores acesso ao histórico de traduções. Temos uma ferramenta chamada Translation memory (TM). O tradutor sempre tem acesso a informações sobre correspondências e a porcentagem de similaridade: ele pode usar a tradução antiga ou inserir uma nova. Mostramos aos tradutores não apenas 100% de correspondências, mas também opções menos semelhantes, e definitivamente destacaremos as diferenças.

Além do fato de a “Memória de tradução” permitir preservar o estilo na estrutura do projeto, também ajuda a acelerar o processo, pois o tradutor não precisa digitar a mesma coisa duas vezes.


Casos e números


Temos uma ferramenta chamada Case Matrix. É como uma tabuada de multiplicação, apenas para maiúsculas e minúsculas.


Os tradutores, conforme necessário, preenchem essa matriz para palavras diferentes em cada idioma. Preenchê-lo em uma etapa é irreal, então isso acontece gradualmente: foi preciso uma palavra feita.


Como resultado, a matriz ajuda a evitar esses erros:



A vantagem da ferramenta é que a forma desejada é selecionada imediatamente antes da renderização, antes de ser exibida ao usuário. Aqui está como vai:



Por exemplo, temos uma tradução para o russo. "Créditos" no centro é um identificador, um link para uma matriz de casos. O "Valor dos créditos" à esquerda é o número que virá do desenvolvedor. E @ 3 é o caso indicado pelo tradutor (neste caso, o acusativo).


"Você precisa de 10 créditos": a frase "10 créditos" será substituída automaticamente.


Verificação de tradução


Se multiplicarmos 150.000 frases e textos em 52 idiomas, obteremos um número na região de 7,5 milhões, é claro, verificar manualmente tudo isso é irreal. Portanto, fizemos uma verificação automática das traduções no momento da economia.


Verificamos automaticamente recursos como emoji ou variáveis ​​ausentes. Se o tradutor excluiu acidentalmente uma variável, a frase perde sua estrutura e significado. Compare: “Você precisa de 10 créditos” e “Você precisa de créditos” - a segunda frase é estragada, o pensamento está perdido.


Também verificamos o HTML ausente, caso contrário, o layout continuará.


E sempre advertimos o tradutor de que sua tradução é mais longa que a original. Nesse ponto, ele deve verificar se é adequado, se o texto caberá na tela.


Destacamos os principais pontos:


  • tradutores precisam entender o contexto;
  • o sistema de tradução deve ser tão flexível que uma tradução apropriada possa ser feita para cada idioma, para que o tradutor não escolha formulações universais; é necessário suporte para declinações e casos;
  • Certifique-se de verificar automaticamente as traduções.

Ajuda do Usuário


Além do trabalho de tradutores profissionais, usamos a ajuda dos usuários. Existem dois métodos aqui: teste A / B e tradução conjunta.


Teste A / B


Então, você precisa de uma tradução, por exemplo, para o russo. O tradutor traduziu uma frase de duas maneiras diferentes e você não sabe qual opção escolher. Nesse caso, você pode realizar um teste A / B: mostre aos usuários opções diferentes e escolha uma, dependendo da reação deles.


Tivemos uma escolha entre duas opções: “Pronto para novos conhecidos? Participe! ”E“ Mais alguns passos ... e você se tornará parte do Badoo. " Como resultado dos testes, descobrimos que mais usuários concluíram o registro quando viram a segunda opção de notificação por push. Nós o deixamos.


Abaixo está um resumo completo dos fatores dos quais a opção de tradução depende. O quinto elemento é apenas um teste A / B: se o usuário se enquadra em algum grupo, será mostrada a versão correspondente do texto.



Tradução conjunta


Depois que enviamos aos usuários do México uma notificação solicitando que eles traduzissem alguns textos para o idioma por uma pequena taxa na forma de empréstimos - a moeda interna do aplicativo. E eles concordaram: em apenas dois dias, 5.000 tokens foram traduzidos para nós. É uma grande ajuda, e os mexicanos são ótimos!


O que é interessante e por que essa abordagem é importante? Se você não possui um tradutor de dialeto local, permita que os usuários façam esse trabalho. Como se viu, eles estão realmente prontos para participar do desenvolvimento de um projeto que eles gostam.


Temos uma plataforma de tradução colaborativa . Você pode fazer login usando sua conta do Badoo. E vote na melhor tradução.



Esta é uma captura de tela da janela de tradução em alemão. O usuário pode adicionar sua própria versão. Quando uma das opções obtém um número limite de votos, mostramos ao nosso tradutor em tempo integral e pode ser usada como a principal (desde que corresponda ao estilo, às regras do projeto, não ofenda ninguém e assim por diante).


Não tenha medo de pedir ajuda aos usuários. Eles pedirão e ajudarão.


Desenvolvimento


Passamos para o mais interessante - para o processo de desenvolvimento. Falei especificamente sobre o processo de tradução, descrevi problemas comuns e depois mostrei como os desenvolvedores resolvem esses problemas.


Existem duas dificuldades principais: como organizar o desenvolvimento paralelo e como rastrear erros ao usar tokens para que as traduções corretas apareçam no momento certo.


Desenvolvimento paralelo


Vou começar com a história. Anteriormente, nosso esquema de desenvolvimento parecia diferente. O código fonte foi armazenado em um arquivo no repositório. Dois desenvolvedores poderiam mudar algo em paralelo e, em seguida, houve a necessidade de combinar essas mudanças. O problema é pequeno, mas inconveniente.

O antigo esquema no qual as mudanças precisavam ser combinadas


Agora, alteramos e adicionamos tokens centralmente no sistema de localização. Os desenvolvedores precisam apenas baixar um conjunto de tokens antes de iniciar o trabalho na tarefa e usá-los. A chave está indicada, você escreveu o código, usa-o - tudo o que você não pensa em mais nada.


Erros ao usar tokens


Existem muitas variáveis ​​nas traduções.

Se você estiver com pressa, pode facilmente confundir "quantidade de crédito" e "crédito". Para evitar isso, introduzimos o controle - um contêiner de texto, um tipo de abstração sobre a tradução, que sabe que tipo de variáveis ​​são usadas nessa tradução. Ele executa a substituição e verifica se os tipos de valores passados ​​para a substituição são conforme o esperado. Se todas as substituições forem feitas, ele retornará uma linha que já pode ser mostrada ao usuário. Caso contrário, o mesmo contêiner é retornado. Se tentarmos mostrar ao usuário uma tradução antes de concluir todas as substituições, veremos um aviso nos logs e saberemos para onde ir e como corrigir a situação.


Destaques em desenvolvimento:


  • os desenvolvedores devem lidar apenas com seu trabalho - eles não devem pensar em localização, alteração de textos e assim por diante;
  • você precisa verificar o que os desenvolvedores fizeram, e essa verificação também é melhor para automatizar - isso preservará as células nervosas de todos os participantes do processo.

Controle de qualidade


Então, já temos um produto desenvolvido que traduzimos. Resta verificar o quão bem fizemos.


Vamos começar com os exemplos. Quantos batentes nesta captura de tela?



Eu destaquei dois. Acima - o tradutor aparentemente não sabia que uma distância seria mostrada na frente de sua frase. Inferior - a largura da tela na qual a tradução é exibida não é levada em consideração.


O segundo exemplo também diz respeito a traduções muito longas que não correspondem à largura da tela - tudo é simplesmente recortado aqui, a inscrição não cabe no botão.



No exemplo a seguir, além de nos mostrar texto em diferentes idiomas, também nos é oferecido o conhecimento da dor.



Para evitar que esses erros ocorram no produto, o controle de qualidade é simplesmente necessário.


Opções de controle


Vamos ver quais opções de controle existem.


O primeiro que vem à mente é verificar a tradução em uma versão de teste do site ou aplicativo. Ou seja, basta começar e ver se o que aconteceu é consistente com o design, ideia, especificações técnicas e assim por diante. Usando esse método, detectamos esse erro na notificação por push:



Capturas de tela do aplicativo


O próximo método de controle de qualidade é de acordo com as capturas de tela do aplicativo.


Desenvolvemos uma ferramenta especial que, em um ambiente de teste, captura capturas de tela de todas as telas de aplicativos móveis em todos os idiomas. Você pode ver como eles ficam no navegador. Há também um modo especial, alternando para o qual podemos ver os identificadores do texto que nos são mostrados. Isso ajuda muito na depuração: você pode descobrir rapidamente qual token é e por que chegou até onde chegou (talvez tenhamos herdado o código no qual esse token é substituído).


Se você possui uma versão da Web e precisa apenas tirar fotos de algum lugar, pode integrar marcadores de token no texto de origem, escrever um plug-in para o Google Chrome - e nas máquinas dos testadores, em seus navegadores, esse plug-in enviará capturas de tela de páginas para o seu sistema de localização em que ele descobriu fichas.


<ul> <li>...</li> <li> <!--lexeme_12345-->  <!--lexeme_12345_end--> </li> <li>...</li> </ul> 

Usamos esse método por algum tempo. Ele permitiu coletar um grande número de fotos em apenas duas semanas. Mas nós recusamos, porque com ele você só pode obter imagens da versão já lançada e aprendemos como obter fotos e design na fase de formação do TK.


Controle durante a tradução


Como eu disse acima, parecia-nos insuficiente tirar fotos quando já existe um aplicativo pronto. Decidimos fazer capturas de tela quando o aplicativo ainda não está pronto, quando ainda não há nada e é necessário controlar de alguma forma a qualidade, para entender se tudo está indo como deveria.


Então, nós temos uma ferramenta de controle durante a tradução.

Vou explicar o princípio do seu trabalho. Nossos designers usam o Sketch, um aplicativo no qual eles criam interfaces, incluindo interfaces de aplicativos móveis. Aprendemos como substituir textos nos arquivos do Sketch e gerar capturas de tela da tela que precisamos usando a interface do software Sketch. Agora, no processo de trabalho do tradutor, podemos mostrar imediatamente a ele capturas de tela de telas em seu idioma. E para fazer isso antes mesmo de os desenvolvedores começarem a criar a primeira versão da nova funcionalidade.


Mais tarde, projetamos esta solução como código-fonte aberto ( artigo , código ).


Auditoria de tradução


Se não for possível verificar a tradução em qualquer idioma específico, por exemplo, em japonês, você poderá solicitar uma auditoria seletiva, ou seja, uma empresa terceirizada poderá mostrar a tradução de cada centésimo token com uma imagem e perguntar se está tudo correto.


Destaques no controle de qualidade:


é necessária uma avaliação visual da qualidade da tradução;
durante o processo de teste, é importante entender quais dispositivos seu público está usando e testar o aplicativo em todos esses dispositivos.


Data de lançamento


Portanto, testamos a funcionalidade escrita legal. Resta entregá-lo aos usuários.


Tokens de versão


Em nosso aplicativo Badoo, havia um serviço Super Power. Em algum momento, precisávamos mudar o nome para “Badoo Premium” e, ao mesmo tempo, em todas as versões, era atômica para que o usuário não visse “Super Strength” em uma tela e “Badoo Premium” na outra.


Para fazer isso, anexamos uma versão de token a cada ramo de tarefa no Jira. Quando incluímos alterações de uma ramificação em uma nova versão de um projeto, a nova versão dos tokens é imediatamente exibida. Se você precisar reverter algo, removeremos o ramo da tarefa da nova versão e, juntamente com ele, a versão dos tokens com traduções para todos os idiomas.


Quando um token é testado ou quando os usuários já o veem, é preciso ter muito cuidado: é melhor não alterar nada, mas criar uma nova versão, anexá-lo ao ticket e, com a nova versão, implantar a nova versão do token com novas traduções.


Versionamento de Tradução


No entanto, você pode cometer erros durante a tradução. No exemplo abaixo, existem dois deles.


Falso: "É um descanso."
Verdade: "É uma revanche".


Em inglês, você não pode usar o apóstrofo direto. A letra "c" também está ausente.


Tokens de versão e traduções de versão são duas coisas diferentes. A tradução pode ser corrigida a qualquer momento: quando a tarefa estiver em desenvolvimento, quando estiver no estágio de teste ou mesmo quando a funcionalidade já tiver sido trazida para o usuário (nada de ruim acontecerá se os usuários virem a tradução corrigida na nova versão do aplicativo).


Servidor! = Smartphone


A entrega de atualizações para plataformas diferentes ocorre de maneiras diferentes. Se você estiver desenvolvendo um aplicativo móvel, certifique-se de ter as partes do servidor e do cliente.


O que você mostra ao usuário vem parcialmente do servidor ou está localizado em seu smartphone (por exemplo, tradução integrada).

O caminho que passa a transferência do servidor para o usuário está no nosso servidor de produção, onde você pode entregar facilmente versões atualizadas de arquivos com traduções.


Mas o caminho da tradução integrada é longo: está na App Store ou no Google Play. O usuário baixa a atualização e somente depois vê a correção. Esse processo parecia muito lento para nós e criamos nosso próprio mecanismo de atualização "Hot Update". Ele permite gerar uma nova versão de traduções com o clique de um botão e deixar claro para todos os clientes no mundo que há algo novo que precisa ser baixado e usado.

Quando o aplicativo é iniciado em um dispositivo móvel, ele envia uma notificação de inicialização ao servidor e relata a versão atual das traduções. Se o sistema de localização tiver uma atualização pronta, ele emitirá uma notificação em resposta. O cliente baixa a atualização, aplica-a.


O usuário verá novas traduções quando mudar para a próxima tela. Dois de nossos artigos são dedicados à implementação desta solução: um e dois .


Lançamento: Destaques


No processo de liberação, você deve levar em consideração o caminho que o aplicativo percorre de você para seus clientes. Provavelmente, diferentes partes do seu aplicativo são atualizadas de maneira diferente.


Conclusões finais


Vamos voltar ao esquema que citei no início do artigo.

O que você deve prestar atenção se estiver desenvolvendo um sistema de tradução:


  • escreva termos de referência detalhados;
  • levar em conta o contexto e fornecer aos tradutores acesso a ele;
  • manter um histórico de traduções para manter um estilo unificado dentro do projeto;
  • automatizar o controle (caso contrário, qualquer tradutor aleatório localizado em vários fusos horários poderá fazer tudo à sua maneira);
  • livre desenvolvedores de resolver tarefas não essenciais. Eles criam novas versões do seu produto, alegram os usuários e satisfazem o projeto que você está criando.

Materiais que eu gostaria de compartilhar com você


Atualizar seqüências em tempo real em aplicativos móveis: parte 1


Atualizar seqüências em tempo real em aplicativos móveis: parte 2


Como ensinar um aplicativo Web a falar 100 idiomas: recursos de localização


Traduzimos interfaces para cinquenta idiomas. Esboço


Modificador de esboço do Github

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


All Articles