Topics

Sitio web de Astro SSG multilingüe mediante la API de Google Translate

  • column

Un día, el presidente me dio una orden: "Hagamos que nuestro sitio web sea multilingüe. ¡Parece que existe una API llamada Google Cloud Translation que puede traducir automáticamente durante la compilación!"

Nuestro sitio web es estático (SSG) y está desarrollado con Astro. Decidí implementarlo mientras investigaba la API de Google Cloud Translation.

Preparación: Habilitar la clave API y crear una cuenta de servicio

Habilitación de la API de traducción en la nube

Consola de Google CloudEn "API y servicios", seleccione "API de traducción en la nube".Permitir

Creación de una cuenta de servicio y una clave

Para utilizar la API, cree una cuenta de servicio y descargue una clave JSON.

Esta clave JSON contiene su clave privada, así que tenga mucho cuidado de no revelarla.

Otorgar derechos de acceso a la cuenta de servicio.

Vaya a IAM y agregue la dirección de correo electrónico de la cuenta de servicio como principal y el rol como "Usuario de API de Cloud Translation".

Cómo generar páginas multilingües

Lo primero que intenté fue copiar el archivo Astro, llamar a la API de traducción en el momento y generar automáticamente archivos Astro multilingües.

Aunque se generó la página, encontramos varios problemas, como errores de código, incompatibilidad con componentes importados y problemas cuando se escribieron etiquetas dentro de atributos, por lo que cambiamos nuestro enfoque.

Finalmente, opté por un proceso de poscompilación simple que realiza la traducción del HTML estático generado después de la compilación.

La configuración del idioma está vinculada al archivo de configuración i18n de Astro

Para administrar la estructura multilingüe del sitio, utilicé el archivo de configuración Astro i18n (LOCALES_SETTING) se utilizó como "archivo de configuración" para el script de traducción.

Si deseas agregar un idioma, simplemente agrégalo aquí.

export const LOCALES_SETTING: LocaleSetting = {
  ja: {
    label: '日本語',
    lang: 'ja',
    oglocale: 'ja_JP',
    path: 'ja',
  },
  en: {
    label: 'English',
    lang: 'en',
    oglocale: 'en_US',
    path: 'en',
  },
  de: {
    label: 'Deutsch',
    lang: 'de',
    oglocale: 'de_DE',
    path: 'de',
  },
  es: {
    label: 'Español',
    lang: 'es',
    oglocale: 'es_ES',
    path: 'es',
  },
  cn: {
    label: '简体中文',
    lang: 'zh-CN',
    oglocale: 'zh_CN',
    path: 'zh-cn',
  },
  tw: {
    label: '繁體中文',
    lang: 'zh-TW',
    oglocale: 'zh_TW',
    path: 'zh-tw',
  },
};

Implementación del cambio de idioma

El menú desplegable de selección de idioma también se genera a partir del archivo de configuración i18n mencionado anteriormente. Dado que la etiqueta se convierte en el nombre del elemento seleccionado, no queremos traducirlo. Por lo tanto, hemos añadido código para sobrescribirlo con el valor de la etiqueta. (Parece que `translate="no"` no funciona con la API de Cloud Translation).

Por cierto, me dijeron que "añadiera una bandera nacional al menú desplegable" e intenté hacerlo, pero parece que poner una bandera nacional en el selector de idioma es una contradicción. Por ejemplo, si un usuario austriaco habla alemán, podría confundirse al ver la bandera alemana, lo que demuestra que el país y el idioma no siempre coinciden. Ahora que lo mencionas, es cierto. Podría convertirse en un tema delicado en algunos casos.

Caché para minimizar el uso de API.

En este punto, el mecanismo para generar texto multilingüe está casi completo. Sin embargo, el problema es el costo.

A través de prueba y error y compilaciones repetidas, las tarifas de uso de la API superaron rápidamente los 10.000 yenes.

Por lo tanto, durante el proceso de compilación, la combinación de japonés y traducción procesada por la API se utiliza como caché.translate-cache.jsonLos datos se guardarán en un archivo y la siguiente compilación usará este JSON. Se modificó la especificación para que solo se llamen los datos faltantes mediante la API y los resultados se agreguen al JSON.

Se guardará así.

{
  "en:UIデザイン": "UI Design",
  "en:私たちについて": "About Us",
  "en:サービス": "Service",
  ...
}

¡Esto reduce significativamente los costos! Dependiendo de la frecuencia de actualización, los costos operativos serán de solo unos cientos de yenes al mes.

Notas operativas

Al agregar artículos mediante un CMS y compilarlos mediante un gancho de implementación, el servidor solo puede acceder a los archivos de caché antiguos en Git. Por lo tanto, decidimos implementar estrictamente una regla de compilación local al agregar contenido y enviar los archivos de caché actualizados a Git.

Control de traducciones incorrectas

Después de todo, está traducido por máquina y hay algunas traducciones extrañas aquí y allá.
Se detectaron inconsistencias notables en la ortografía de los nombres propios, como por ejemplo que el nombre de la empresa "Liberogic" a veces se escribía como "Liberogic" o "Liberogic", y que la notación del estado corporativo (Inc., Ltd., etc.) no estaba estandarizada.

La API de Cloud Translation cuenta con una función de glosario, pero solo sirve como apoyo para la traducción automática y no permite un control completo y detallado. Además de cargar un archivo CSV, es necesario ejecutar un comando cada vez para recrear los recursos, lo que puede resultar difícil para el personal de operaciones que no esté familiarizado con la web.

Integración de hojas de cálculo para un control confiable

Por lo tanto, compilamos los idiomas y los errores tipográficos en una hoja de cálculo, recuperamos esta hoja de cálculo en formato CSV durante la compilación y realizamos un proceso de reemplazo de texto para que la notación pudiera sobrescribirse y corregirse.

Esto significa que los administradores pueden controlar las traducciones hasta cierto punto simplemente actualizando una hoja de cálculo, sin tener que tocar ningún código.

resumen

Tras varias pruebas, logré crear un sistema más práctico de lo que esperaba usando la API de Google Cloud Translation para traducción automática. Para un soporte multilingüe sencillo y rentable, ¡creo que es perfectamente adecuado!

(El CEO dice que quiere hacer compatible el idioma RTL con el árabe, pero eso sería una tarea enorme).

Escrito por

Pasó de la maquetación al mundo web y rápidamente se convirtió en un maestro de la artesanía, con un dominio del marcado, el diseño front-end, la dirección y la accesibilidad. Ha estado activo en diversos campos desde la fundación de Liberogic y ahora es un diccionario viviente dentro de la empresa. Recientemente, se ha obsesionado con explorar mejoras de eficiencia mediante indicaciones, preguntándose: "¿Podemos confiar más en la IA para la accesibilidad?". Su tecnología y su pensamiento siguen evolucionando.

Futa

Especialista certificado en accesibilidad web (WAS) de IAAP / Ingeniero de marcado / Ingeniero de interfaz / Director web

Vea el artículo de este miembro del personal

Nos enorgullecemos de nuestra confiable estructura de equipo y de nuestra rápida capacidad de respuesta.

En Liberogic, nuestro experimentado personal impulsa los proyectos de forma proactiva, por lo que gozamos de gran prestigio entre nuestros clientes.
Nos aseguramos de que los gerentes y directores de proyecto estén correctamente asignados para asegurar el progreso fluido de todo el proyecto. Evitamos aumentos innecesarios de costos por compromisos completos y asignamos recursos a las personas adecuadas en los puestos adecuados. Somos reconocidos por la rapidez con la que comprendemos el contenido del trabajo, creamos y presentamos presupuestos.

Tenga en cuenta que no participamos activamente en trabajos de campo al estilo del SES.

Somos compatibles con casi todas las principales herramientas de gestión de proyectos y chat, incluidas Slack, Teams, Redmine, Backlog, Asana, Jira, Notion, Google Workspace, Zoom y Webex.

En proyectos a gran escala que utilizan SES y plataformas offshore¿Tiene algún problema técnico o inquietud sobre cómo abordarlo?

Estudio de caso