
Hola Habr! Soy un desarrollador líder de localización en Badoo. Trabajamos con varios proyectos grandes: Badoo, Bumble, Lumen y Chappy. Ahora en el sistema de localización tenemos 150,000 frases y textos traducidos a 52 idiomas. Además, cada una de nuestras aplicaciones tiene su propia audiencia, sus mercados, su propio estilo de comunicación con los usuarios, versiones para la web y para plataformas móviles.
En este artículo, le contaré cómo creamos el proceso de localización, cómo abordamos el control de calidad, cómo publicaremos las traducciones según la plataforma y, lo más importante, cómo nos aseguramos de que los desarrolladores hablen bien de nuestro sistema de traducción. Este es un punto muy importante: más de 300 desarrolladores trabajan en proyectos, cuyo trabajo debería ser cómodo. Los desarrolladores no son traductores y no deberían pensar en las traducciones.
El artículo fue escrito en base a mi informe en la conferencia Highload ++ en noviembre.
Contenido:
Los términos de referencia para toda la cabeza!
Características del proceso de traducción.
Pedimos ayuda a los usuarios.
Organización de desarrollo
Control de calidad de localización
Lanzamientos, Versiones
Lo principal Resumen
Materiales adicionales
Para empezar, veamos cómo se ve generalmente el proceso de localización en nuestra empresa.

En este diagrama, no reflejé todos los matices, no son necesarios para una comprensión general. La conclusión es que comenzamos con los términos de referencia (TOR). Luego viene el desarrollo del cliente y el servidor, y en paralelo con ellos está el proceso de traducción.
TK y la fase de lanzamiento final no están en vano resaltados en un color. Esta es una pista de que la versión debe cumplir con los términos de referencia. No hay otra manera Si el TK no está lo suficientemente completo, entonces no estará claro para los desarrolladores quién es responsable de qué, cuál de ellos debería integrar el texto: el "teléfono móvil" debería "coserlo" en la aplicación móvil o los desarrolladores del servidor deberían enviarlo desde el servidor en respuesta a la solicitud.
Tratemos con todo esto. Pero primero, quiero presentar y explicar un término.
Un token es cualquier texto indivisible que necesita ser traducido. Puede ser un título de botón, un título o un párrafo completo.
¡Ahora estamos listos para pasar al material principal!
Términos de referencia
La primera etapa de nuestro proceso es la preparación de las especificaciones técnicas correctas. El elemento principal relacionado con la localización es la tabla de tokens. De hecho, esta es una lista de textos que deben usarse en la aplicación o en el sitio.

La tabla de tokens indica si el texto es proporcionado por el servidor o integrado en la aplicación. Se debe indicar la clave: si el texto se usó antes, la clave estará presente en esta tabla; Si el texto no se usó en ninguna parte, se indicará el número de serie del texto y el desarrollador podrá establecer una clave conveniente.
Reutilizar texto es un momento muy insidioso. Por un lado, el proceso de localización se acelera y, por otro, puede entrar en una situación divertida.
Lo explicaré con un ejemplo. Una vez que tuvimos una pregunta "¿Fumas?" Con las opciones de respuesta "Sí" y "No". Aquí vemos tres fichas: dos para las respuestas y una para la pregunta. La pregunta se tradujo al ruso como "¿Fumas?", Las respuestas son "Fumo" y "No fumo". Luego decidimos realizar otra encuesta y reutilizar las opciones de respuesta. En inglés, todo parecía correcto: "¿Te apetece visitar una fiesta?" - "Sí" / "No". En ruso, debido a la reutilización de tokens, resultó el siguiente "diálogo": "¿Irás a la fiesta?" - "Fumo" / "No fumo".
Ahora, cuando compilamos los términos de referencia y decidimos sobre la reutilización del texto, tenemos en cuenta en qué contextos se utilizó anteriormente. También indicamos si el token es proporcionado por el servidor o integrado en el cliente y entregado a los clientes a través de la App Store o Google Play.
Estas técnicas ayudan a ahorrar tiempo porque excluyen la discusión en etapas posteriores.
Traducciones
El siguiente paso es la traducción. Y lo principal aquí es no perder el pensamiento original. Y esto sucede a menudo, porque todos los idiomas son diferentes, con sus propios matices y giros. A veces, la traducción más precisa simplemente no cabe en la pantalla y los traductores tienen que encontrar un compromiso.
Te diré los puntos de cómo comenzamos a traducir, cómo acercamos el contexto a los traductores, mantenemos un estilo común y verificamos el resultado.
Orden de traducción
Hay orden donde hay reglas (y todas las siguen). Por lo tanto, tenemos una regulación sobre el orden de traducción.
Para empezar, elegimos un idioma que la mayoría de los traductores entiendan. Es allí donde prepararemos los textos fuente, para que luego puedan traducirse fácilmente a otros idiomas. Todos los idiomas a los que traducimos (y tenemos 52 de ellos) se dividen en principales (principales) y dialectos. El idioma en el que se preparan los textos es el inglés (lo llamamos Maestro). Además, desde inglés traducimos a otros idiomas: español, francés, ruso y otros. A veces, la traducción debe aclararse para uno de los dialectos, luego traducimos al español mexicano o al inglés australiano. Pero si no necesitamos esto, utilizaremos la traducción al idioma principal: español básico o inglés básico.
Un ejemplo Digamos que necesitamos hacer el saludo más formal. Inicialmente, había "Hey" en inglés, "Hola" en español, "Salut" en francés, "Hello" en ruso, "G'day mate" en Australia y "Que onda" en mexicano ("Like a wave" ? ”; ¡Los mexicanos son geniales!). Si queremos cambiar el texto, haciéndolo más oficial, tendremos que cambiar el texto original en inglés. En este punto, las traducciones a otros idiomas se vuelven incorrectas: deben verificarse y aclararse. Llamamos la atención de los traductores sobre esto.
Impacto contextual
Un punto importante es el contexto en el que existe la traducción.
Lo explicaré con ejemplos.
Inmediatamente, observo que algunos ejemplos son capturas de pantalla de recursos conocidos, pero sus nombres no nos importan, solo observamos los tipos más comunes de errores en la localización.

Esta es una señal con una estación de servicio: "Antes de comenzar el movimiento, asegúrese de que no haya una pistola en el tanque". La palabra "arma" se tradujo literalmente al inglés: "arma". Pero un arma para un estadounidense es un arma. En este contexto, la solicitud "Saca el arma del tanque" suena bastante extraña.
En el siguiente ejemplo, los creadores de la aplicación decidieron hacer una versión universal del texto para hombres y mujeres; aparentemente, hay algo de beneficio para ellos en esto. La sensación es que los textos y las imágenes simplemente se recopilan en una pantalla: lo que está en juego no está claro.

El siguiente ejemplo trata sobre cómo se perdió el pensamiento original del texto como resultado de la traducción. Mire la versión rusa a la derecha: se nos ofrece comenzar a comunicarnos con nosotros mismos. Aunque se entendió que nos dan la oportunidad de vincular nuestra cuenta de Instagram.

Tales errores ocurren cuando la traducción ocurre fuera de contexto. Por lo tanto, para cada token en nuestro sistema de localización, se indica lo siguiente:
- descripción del texto;
- una imagen que muestra qué elementos están al lado del texto en la pantalla;
- una nota sobre si el texto se mostrará a hombres o mujeres, para que los traductores puedan determinar si se necesitan dos traducciones diferentes o solo una;
- tipos de variables (este es un punto muy importante, y le contaré más al respecto cuando analicemos el proceso de desarrollo);
- longitud máxima del texto: es muy importante para las notificaciones push, porque el ancho de la pantalla de un dispositivo móvil no es ilimitado.
Además, definitivamente dividiremos el texto grande en partes. Esto es conveniente si necesita buscar o hacer cambios.
Analicemos este momento con más detalle. Cuando rompimos el texto, perdimos la conexión entre frases y oraciones individuales. Por lo tanto, debemos mostrar a los traductores lo que sucedió antes y después de este texto. Esto es relevante, por ejemplo, en el caso de documentos legales, para que se traduzcan correctamente.
También destacamos términos locales, palabras de argot en tokens. Por ejemplo, en el caso de la frase "Desbloquee su Lista de Me gusta para ver a todos los interesados a la vez", el traductor debe saber que Me gusta en este caso es un directorio de aplicación especial que contiene contactos de usuarios a los que les gusta el perfil. Otro ejemplo similar es el término "Historias". Hace diez años, nadie en la palabra "historia" imaginaba Instagram. Ahora está asociado principalmente con él.
Entonces, nos aseguramos de que la opción de traducción sea altamente dependiente del contexto, es decir, de los siguientes factores:
- Sexo del usuario
- la variable numérica que aparece en el texto: "Solo tienes un amigo" y "Ya tienes diez amigos";
- Plataformas: web, Android, iOS;
- El proyecto para el que se realiza la traducción.
Detengámonos en el último punto: la dependencia de la traducción del proyecto. Esto es importante porque cada proyecto tiene su propio estilo.

Estos son los encabezados de las cartas que se envían al usuario si su cuenta ha sido bloqueada.
Para Badoo: "Su cuenta está bloqueada".
Para Lumen: "Su cuenta está bloqueada".
Para Bumble: "Fuiste bloqueado".
Y para Chappy: "¡Aw!"
Para mantener un estilo unificado dentro de cada proyecto, debe dar a los traductores acceso al historial de traducción. Tenemos una herramienta llamada Memoria de traducción (TM). El traductor siempre tiene acceso a información sobre coincidencias y el porcentaje de similitud: puede usar la traducción anterior o ingresar una nueva. Mostramos a los traductores no solo el 100% de coincidencias, sino también opciones menos similares, y definitivamente destacaremos las diferencias.

Además del hecho de que la "Memoria de traducción" le permite preservar el estilo dentro del marco del proyecto, también ayuda a acelerar el proceso, ya que el traductor no necesita ingresar la misma cosa dos veces.
Casos y numeros
Tenemos una herramienta llamada Case Matrix. Esto es como una tabla de multiplicar, solo para casos y números.
Los traductores, según sea necesario, completan esta matriz para diferentes palabras en cada idioma. Llenarlo en un solo paso no es realista, por lo que esto sucede gradualmente: tomó una palabra.
Como resultado, la matriz ayuda a evitar estos errores:
La ventaja de la herramienta es que la forma deseada se selecciona inmediatamente antes de renderizar, antes de mostrarla al usuario. Así es como va:

Por ejemplo, tenemos una traducción al ruso. "Créditos" en el centro es un identificador, un enlace a una matriz de casos. La "cantidad de créditos" a la izquierda es el número que vendrá del desarrollador. Y @ 3 es el caso indicado por el traductor (en este caso, el acusativo).
"Necesita 10 créditos": la frase "10 créditos" se sustituirá automáticamente.
Verificación de traducción
Si multiplicamos 150,000 frases y textos en 52 idiomas, obtendremos un número en la región de 7.5 millones. Por supuesto, verificar manualmente todo esto no es realista. Por lo tanto, hicimos una verificación automática de las traducciones al momento de guardar.
Verificamos automáticamente las características como emoji o variables faltantes. Si el traductor eliminó accidentalmente una variable, la frase pierde su estructura y significado. Compare: "Necesita 10 créditos" y "Necesita créditos": la segunda frase se echa a perder, el pensamiento se pierde.
También verificamos el HTML faltante, de lo contrario, el diseño desaparecerá.
Y siempre advertimos al traductor que su traducción es más larga que la original. En este punto, debe verificar si es adecuado, si el texto cabe en la pantalla.
Destacamos los puntos principales:
- los traductores necesitan una comprensión del contexto;
- el sistema de traducción debe ser tan flexible que se pueda hacer una traducción apropiada para cada idioma de modo que el traductor no elija formulaciones universales; es necesario apoyar las declinaciones y los casos;
- Asegúrese de verificar automáticamente las traducciones.
Ayuda de usuario
Además del trabajo de traductores profesionales, utilizamos la ayuda de los usuarios. Aquí hay dos métodos: pruebas A / B y traducción conjunta.
Pruebas A / B
Por lo tanto, necesita una traducción, por ejemplo, al ruso. El traductor tradujo una frase de dos maneras diferentes, y usted no sabe qué opción elegir. En este caso, puede realizar una prueba A / B: muestre a los usuarios diferentes opciones y elija una dependiendo de su reacción.
Podíamos elegir entre dos opciones: “¿Listo para nuevos conocidos? ¡Únete! "Y" Unos pasos más ... y serás parte de Badoo ". Como resultado de las pruebas, descubrimos que más usuarios completaron el registro cuando vieron la segunda opción de notificación push. Lo dejamos.
A continuación se muestra un resumen completo de los factores de los que depende la opción de traducción. El quinto elemento es solo una prueba A / B: si el usuario pertenece a algún grupo, se le mostrará la versión correspondiente del texto.

Traducción conjunta
Una vez que enviamos a los usuarios de México una notificación pidiéndoles que traduzcan algunos textos a su idioma por una pequeña tarifa en forma de préstamos, la moneda interna de la aplicación. Y estuvieron de acuerdo: en solo dos días, 5,000 tokens fueron traducidos para nosotros. ¡Esto es de gran ayuda, y los mexicanos son buenos muchachos!
¿Qué es interesante y por qué es importante este enfoque? Si no tiene un traductor de dialecto local, permita que los usuarios hagan este trabajo. Al final resultó que, están realmente listos para participar en el desarrollo de un proyecto que les gusta.
Tenemos una plataforma de traducción colaborativa . Puede iniciar sesión con su cuenta de Badoo. Y vote por la mejor traducción.

Esta es una captura de pantalla de la ventana de traducción al alemán. El usuario puede agregar su propia versión. Cuando una de las opciones obtiene un número umbral de votos, se la mostramos a nuestro traductor a tiempo completo y puede usarse como la principal (siempre que coincida con el estilo, las reglas del proyecto, no ofende a nadie, etc.).
No tengas miedo de pedir ayuda a los usuarios. Le avisarán y ayudarán.
Desarrollo
Pasamos a lo más interesante: al proceso de desarrollo. Específicamente, primero hablé sobre el proceso de traducción, describí problemas comunes, luego para mostrar cómo los desarrolladores resuelven estos problemas.
Hay dos dificultades principales: cómo organizar el desarrollo paralelo y cómo rastrear errores cuando se usan tokens para que las traducciones correctas aparezcan en el momento adecuado.
Desarrollo paralelo
Comenzaré con la historia. Anteriormente, nuestro esquema de desarrollo se veía diferente. El código fuente se almacenó en un archivo en el repositorio. Dos desarrolladores podían cambiar algo en paralelo, y luego era necesario combinar estos cambios. El problema es pequeño, pero inconveniente.

El viejo esquema en el que los cambios debían combinarse
Ahora cambiamos y agregamos tokens centralmente en el sistema de localización. Los desarrolladores solo necesitan descargar un conjunto de tokens antes de comenzar a trabajar en la tarea y usarlos. La clave está indicada, usted escribió el código, lo usa, todo lo que no piensa en otra cosa.
Errores al usar tokens
Hay muchas variables en las traducciones.

Si tiene prisa, puede confundir fácilmente "credit_amount" y "credit". Para evitar esto, introdujimos el control: un contenedor de texto, una especie de abstracción sobre la traducción, que sabe qué tipo de variables se utilizan en esta traducción. Realiza la sustitución y verifica que los tipos de valores pasados para la sustitución sean los esperados. Si se realizan todas las sustituciones, devuelve una línea que ya se puede mostrar al usuario. Si no, se devuelve el mismo contenedor. Si intentamos mostrarle al usuario una traducción antes de que hayamos completado todas las sustituciones, entonces veremos una advertencia en los registros y sabremos a dónde ir y cómo corregir la situación.
Aspectos destacados en desarrollo:
- los desarrolladores solo deberían ocuparse de su trabajo; no deberían pensar en la localización, el cambio de textos, etc.
- debe verificar lo que han hecho los desarrolladores, y esta verificación también es mejor para automatizar: esto preservará las células nerviosas de todos los participantes en el proceso.
Control de calidad
Entonces, ya tenemos un producto desarrollado que hemos traducido. Queda por comprobar qué tan bien lo hicimos.
Comencemos con los ejemplos. ¿Cuántas jambas hay en esta captura de pantalla?
Destaqué dos. Arriba: el traductor aparentemente no sabía que se mostraría una distancia delante de su frase. Abajo: el ancho de la pantalla en la que se muestra la traducción no se tiene en cuenta.
El segundo ejemplo también se refiere a traducciones que son demasiado largas y que no corresponden al ancho de la pantalla: aquí simplemente se recorta todo, la inscripción no cabe en el botón.
En el siguiente ejemplo, además de mostrarnos texto en diferentes idiomas, también se nos ofrece conocer el dolor.
Para evitar que ocurran tales errores en el producto, el control de calidad es simplemente necesario.
Opciones de control
Veamos qué opciones de control existen.
Lo primero que viene a la mente es verificar la traducción en una versión de prueba del sitio o aplicación. Es decir, simplemente comience y vea si lo que sucedió es consistente con el diseño, la idea, las especificaciones técnicas, etc. Con este método, detectamos este error en la notificación push:

Capturas de pantalla de la aplicación
El siguiente método de control de calidad es de acuerdo con las capturas de pantalla de la aplicación.
Hemos desarrollado una herramienta especial que, en un entorno de prueba, toma capturas de pantalla de todas las pantallas de aplicaciones móviles en todos los idiomas. Puedes ver cómo se ven a través del navegador. También hay un modo especial, cambiando al cual, podemos ver los identificadores del texto que se nos muestra. Esto ayuda mucho al depurar: puede averiguar rápidamente qué token es y por qué llegó a donde llegó (tal vez heredamos el código en el que se sustituye este token).
Si tiene una versión web y solo necesita obtener imágenes de algún lugar, puede integrar marcadores de token en el texto fuente, escribir un complemento para Google Chrome y desde las máquinas de los evaluadores, desde sus navegadores, este complemento enviará capturas de pantalla de páginas a su sistema de localización en el que descubrió tokens.
<ul> <li>...</li> <li> </li> <li>...</li> </ul>
Usamos este método durante bastante tiempo. Permitió recolectar una gran cantidad de imágenes en solo dos semanas. Pero lo rechazamos, porque con él solo puede obtener imágenes de la versión ya lanzada, y aprendimos cómo obtener imágenes y diseñar en la etapa de formación de TK.
Control durante la traducción
Como dije anteriormente, no nos pareció suficiente tomar fotos cuando ya hay una aplicación preparada. Decidimos tomar capturas de pantalla cuando la aplicación aún no está lista, cuando todavía no hay nada y es necesario controlar de alguna manera la calidad, para comprender si todo va como debería.
Entonces obtuvimos una herramienta de control durante la traducción.

Explicaré el principio de su trabajo. Nuestros diseñadores usan Sketch, una aplicación en la que crean interfaces, incluidas las interfaces de aplicaciones móviles. Aprendimos cómo reemplazar textos en archivos Sketch y generar capturas de pantalla de la pantalla que necesitamos usando la interfaz del software Sketch. Ahora, en el proceso de trabajo del traductor, podemos mostrarle inmediatamente capturas de pantalla de pantallas en su idioma. Y para hacer esto incluso antes de que los desarrolladores comenzaran a crear la primera versión de la nueva funcionalidad.
Más tarde diseñamos esta solución como código abierto ( artículo , código ).
Auditoria de Traducción
Si no es posible verificar la traducción en un idioma en particular, por ejemplo, en japonés, puede solicitar una auditoría selectiva, es decir, una compañía externa puede mostrar la traducción de cada centésimo token con una imagen y preguntar si todo está correcto.
Aspectos destacados en el control de calidad:
es necesaria una evaluación visual de la calidad de la traducción;
Durante el proceso de prueba, es importante comprender qué dispositivos está utilizando su audiencia y probar la aplicación en todos estos dispositivos.
Fecha de lanzamiento
Por lo tanto, hemos probado una excelente funcionalidad escrita. Queda por entregarlo a los usuarios.
Fichas de control de versiones
En nuestra aplicación Badoo, había un servicio Super Power. En algún momento, necesitábamos cambiar su nombre a "Badoo Premium", y de inmediato en todas las versiones era atómico para que el usuario no viera "Super Strength" en una pantalla y "Badoo Premium" en la otra.
Para hacer esto, hemos adjuntado una versión de token a cada rama de tarea en Jira. Cuando incluimos cambios de una rama en una nueva versión de un proyecto, la nueva versión de tokens se abre de inmediato. Si necesita revertir algo, eliminamos la rama de tareas de la nueva versión y, junto con ella, eliminamos la versión de tokens con traducciones a todos los idiomas.
Cuando se ha probado un token o cuando los usuarios ya lo ven, debe tener mucho cuidado: es mejor no cambiar nada en él, sino crear una nueva versión, adjuntarlo al ticket y con la nueva versión implementar la nueva versión del token con nuevas traducciones.
Versiones de traducción
Sin embargo, puede cometer errores durante la traducción. En el siguiente ejemplo hay dos de ellos.
Falso: "Es una continuación".
Cierto: "Es una revancha".
En inglés, no puede usar el apóstrofe directo. La letra "c" también falta.
Los tokens de versión y las traducciones de versión son dos cosas diferentes. La traducción se puede arreglar en cualquier momento: cuando la tarea está en desarrollo, cuando se encuentra en la etapa de prueba o incluso cuando la funcionalidad ya ha sido presentada al usuario (nada malo sucederá si los usuarios ven la traducción corregida en la nueva versión de la aplicación).
Servidor! = Smartphone
La entrega de actualizaciones a diferentes plataformas ocurre de diferentes maneras. Si está desarrollando una aplicación móvil, entonces seguramente tiene el servidor y las partes del cliente.
Lo que le muestra al usuario proviene parcialmente del servidor o se encuentra en su teléfono inteligente (por ejemplo, traducción integrada).

La ruta que pasa la transferencia del servidor al usuario se encuentra en nuestro servidor de producción, donde puede entregar fácilmente versiones actualizadas de archivos con traducciones.
Pero el camino de la traducción integrada es largo: se encuentra en la App Store o Google Play. El usuario descarga la actualización y solo después de eso ve la solución. Este proceso nos pareció demasiado lento y se nos ocurrió nuestro propio mecanismo de actualización "Actualización en caliente". Le permite generar una nueva versión de las traducciones con solo hacer clic en un botón y dejar claro a todos los clientes del mundo que hay algo nuevo que debe descargarse y utilizarse.

Cuando la aplicación se inicia en un dispositivo móvil, envía una notificación de inicio al servidor e informa la versión actual de las traducciones. Si el sistema de localización tiene una actualización lista, emitirá una notificación en respuesta. El cliente descarga la actualización, la aplica.
El usuario verá nuevas traducciones cuando cambie a la siguiente pantalla. Dos de nuestros artículos están dedicados a la implementación de esta solución: uno y dos .
Lanzamiento: Destacados
En el proceso de lanzamiento, debe tener en cuenta qué ruta va la aplicación de usted a sus clientes. Probablemente, diferentes partes de su aplicación se actualizan de manera diferente.
Conclusiones finales
Volvamos al esquema que cité al principio del artículo.

A qué debe prestar atención si está desarrollando un sistema de traducción:
- escribir términos de referencia detallados;
- tener en cuenta el contexto y proporcionar a los traductores acceso a él;
- Mantenga un historial de traducciones para mantener un estilo unificado dentro del proyecto.
- automatizar el control (de lo contrario, cualquier traductor aleatorio que se encuentre en varias zonas horarias de usted podrá hacer todo a su manera);
- desarrolladores libres de resolver tareas no centrales. Crean nuevas versiones de su producto, da alegría a sus usuarios y satisface el proyecto que está creando.
Materiales que me gustaría compartir con ustedes
Actualizar cadenas sobre la marcha en aplicaciones móviles: parte 1
Actualizar cadenas sobre la marcha en aplicaciones móviles: parte 2
Cómo enseñar a una aplicación web a hablar 100 idiomas: características de localización
Traducimos interfaces a cincuenta idiomas. Bosquejo
Modificador de boceto de Github