Como a localização funciona na Netflix - tradução

Olá Habr! Apresento a você a tradução do material “Tecnologias de localização na Netflix”, escrito pela equipe da Netflix sobre processos e programas internos de localização projetados especificamente para isso.

imagem

O programa de localização na Netflix é baseado em três princípios: lingüística impecável, uma atmosfera harmoniosa na equipe e tecnologias avançadas.

Não temos medo de experimentar e experimentar novos processos e ferramentas, para nos opor às normas geralmente aceitas na localização - graças a isso chegamos tão longe! Trabalhar na Netflix significa ser pioneiro.

Neste artigo, falamos sobre duas tecnologias que nos levarão à dominação do MUNDO ... Mais em detalhes.

Repositório Global de Cordas da Netflix


A Netflix não teve êxito porque produzimos conteúdo de qualidade, mas porque entregamos esse conteúdo. A maior parte do sucesso é uma interface do usuário (UI) intuitiva, fácil de usar e localizada. O Netflix está disponível em diferentes plataformas: a versão web, Apple iOS, Google Android, Sony PlayStation, Microsoft Xbox, Sony TVs, Panasonic e assim por diante. Cada uma dessas plataformas possui seus próprios requisitos de internalização, o que é um sério desafio para nossa equipe.

Aqui estão alguns exemplos em que a localização da interface do usuário é necessária:

  • adicionar novo idioma
  • adicionando novos recursos
  • alterações nos textos e dados existentes

A tradução de texto para interface do usuário não é um processo automatizado; durante a tradução, os gerentes de localização trabalham em conjunto com a equipe de desenvolvimento para entender claramente a que pertence esta ou aquela linha, em quais idiomas ela precisa ser traduzida e em que período os arquivos localizados devem ser fornecidos. Fica muito mais complicado quando vários recursos são desenvolvidos em paralelo e executados em diferentes ramificações do Git.

Após a conclusão da tradução, o aplicativo é montado, testado e colocado na plataforma. Alguns dispositivos requerem confirmação de terceiros (por exemplo, da Apple). Tudo isso provoca um atraso indesejável nos prazos. Especialmente desagradáveis ​​são os casos de mudanças de emergência.

Mas e se tornarmos o processo de localização aberto a todas as partes interessadas - tanto para a equipe de desenvolvimento quanto para os localizadores? E se não precisarmos mais reconstruir as construções toda vez que fizermos alterações no texto?

Para solucionar esses problemas, desenvolvemos um repositório global de cadeias de UI chamado Global String Repository; cadeias localizadas são armazenadas aqui, que são substituídas no ambiente pela execução do código. Nós integramos o Global String Repository ao processo de localização, para que eles se complementem.

O Global String Repository separa pacotes de localização e namespace (espaços reservados). O pacote de localização armazena todos os dados linha por linha em todos os idiomas. Espaços reservados são espaços reservados para pacotes nos quais a equipe está trabalhando. Durante o desenvolvimento, espaços reservados padrão são usados. O fluxo de trabalho é assim:

  1. O desenvolvedor faz alterações na versão em inglês da string no pacote (no espaço para nome do espaço reservado)
  2. O processo de tradução é iniciado automaticamente
  3. Linguistas completam a tradução
  4. Os tradutores disponibilizam kits de espaço reservado

Quando a integração com o Global String Repository ocorre, existem dois tipos de comportamento do aplicativo:

  • Em tempo de execução: permite que você faça alterações rapidamente na interface do usuário
  • Durante a montagem: usando o Global String Repository separadamente para localização e pacotes de dados com a montagem (compilação)

O Global String Repository permite a integração durante a fase de construção, fornecendo acesso a dados localizados por meio da API REST.

Abrimos o Repositório de Cadeias Globais por meio da API da Netflix, para que os mesmos requisitos e dimensionamento se apliquem aos metadados de outras APIs. Para aplicativos que se integram no tempo de execução, essa é uma parte crítica. Como temos 60 milhões de usuários que executam o Netflix em dispositivos diferentes, o Global String Repository é uma prioridade.

Como a Netflix, o Global String Repository possui uma arquitetura de microsserviço. O Microservice é um aplicativo Web Java (implementado no Apache Cassandra e ElasticSearch) hospedado em três regiões da AWS. Coletamos estatísticas para cada solicitação de API.

A interface do Global String Repository é desenvolvida no Node.js, Bootstrap e Backbone e hospedada na AWS.

No lado do usuário, o Global String Repository usa a API REST para recuperar dados e oferece um cliente Java com armazenamento em cache interno.

Apesar de termos percorrido um longo caminho e estarmos desenvolvendo ativamente o Repositório Global de Cordas, temos algo pelo que lutar. Aqui está o que estamos trabalhando agora:

  • Desenvolvemos suporte para strings com variáveis ​​numéricas e strings com identificadores de gênero
  • Desenvolvemos a robustez de nossas soluções técnicas
  • Melhorando os processos de dimensionamento
  • Apoiamos a exportação para diferentes formatos (XML Android, Microsoft .Resx, etc.)

O Repositório Global de Cordas não está vinculado ao domínio comercial da Netflix; portanto, planejamos lançá-lo como software de código aberto.

Hydra


Netflix - um serviço global que oferece suporte a vários locais em uma infinidade de combinações diferentes em diferentes dispositivos / interface do usuário; teste manual não é apropriado neste caso. Anteriormente, a equipe de localizadores e desenvolvedores de UI testava tudo manualmente em diferentes dispositivos - de consoles a iOS e Android; foi assim que verificamos todas as linhas quanto à conformidade com o contexto e a interface do usuário (por exemplo, se houve algum "recorte" do texto).

Mas a filosofia da Netflix é que buscamos a excelência. Essa abordagem nos permite repensar o que estamos fazendo. Então Hydra nasceu.

A tarefa do Hydra é criar um catálogo de todas as opções possíveis para uma tela exclusiva que mostrará exatamente a tela necessária (a pesquisa é realizada por filtros, por exemplo, você pode selecionar um dispositivo e localidades). Por exemplo, como especialista em localização alemã, você pode configurar a filtragem para ver todo o caminho que os usuários não registrados no PS3, site e Android percorrem. As mesmas telas podem ser visualizadas no ritmo em que o usuário as abrirá em seu dispositivo.

Trabalhando com telas no Hydra


O Hydra não funciona com telas diretamente; serve para catalogar e exibi-los. Para exibir uma tela do catálogo Hydra, usamos nosso modelo de automação da interface do usuário. Com o Jenkins CI, os testes orientados a dados são executados em paralelo em todos os locais suportados: isso cria capturas de tela publicadas no Hydra com os metadados apropriados (nome da página, área de função, plataforma da interface do usuário e uma parte crítica de metadados - uma definição exclusiva na tela).

É necessária uma definição de tela exclusiva para compilar um catálogo completo de telas sem correspondências falsas. Isso permite comparar um número maior de telas a longo prazo, à medida que a imagem de cada tela é comparada consigo mesma. A definição de uma tela exclusiva difere de UI para UI; para um navegador, é uma combinação do nome da página, navegador, resolução, ambiente local e ambiente de desenvolvimento.

Tecnologia


O Hydra é um aplicativo da Web de pilha completa da AWS. O back-end Java possui duas funções principais: processa capturas de tela recebidas e fornece dados para o back-end por meio da API REST.

imagem

Quando a automação da interface do usuário envia a tela para o Hydra, o próprio arquivo de imagem é gravado no S3, o que garante seu armazenamento infinito (mais ou menos) e metadados muito menores são gravados no banco de dados do RDS, para que mais tarde possa ser solicitado por meio da API REST. Os pontos de extremidade REST (pontos de extremidade REST) ​​exibem parâmetros de string de consulta para consultas MySQL.

Por exemplo:

REST/v1/lists/distinctList?item=feature&selectors=uigroup,TVUI;area,signupwizard;locale,da-DK

Esta solicitação contém parâmetros para selecionar os dados necessários no banco de dados:

select distinct feature where uigroup = 'TVUI' AND area = 'signupwizard' AND locale = 'da-DK'

O front-end JavaScript, que usa o knockout.js, permite que os usuários selecionem filtros e visualizem telas que correspondam a esses filtros. O conteúdo dos filtros, bem como as telas que correspondem aos filtros selecionados, são fornecidos pelas chamadas para os terminais REST mencionados acima.

Escala de aplicativo


Após instalar o Hydra e iniciar a automação, adicionar novos códigos de idioma é tão fácil quanto adicionar uma linha a um arquivo de propriedades existente, que é enviado ao Provedor de Dados da estrutura testNG. As telas com um novo código de idioma serão exibidas com as seguintes construções de Jenkins em funcionamento.

O que vem a seguir?


Precisamos implementar uma função que notifique que a tela mudou. No momento, se a linha mudar, não há nada que notifique automaticamente isso. O Hydra pode se transformar em uma fila mais ou menos funcional e, em seguida, os especialistas em localização poderão fazer login no sistema e ver apenas um conjunto específico de telas que foram alteradas.

Outro recurso é a capacidade de mapear linhas individuais de teclas para quais telas você deseja exibir. Isso permitirá que o tradutor altere a linha e, em seguida, realize uma pesquisa por chave e veja as telas afetadas por essa alteração; para que o tradutor veja como essa linha muda de contexto com antecedência.

Não temos medo de resolver problemas complexos. A Netflix se tornará um serviço global e nossa equipe de localização se expandirá. Tais desafios nos permitem atrair as pessoas mais talentosas e criamos uma equipe que pode fazer o que é considerado impossível.

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


All Articles