Al construir un sitio web a gran escala, ¿cuál es la mejor manera de implementar I18n: en back-end o front-end?

Primero debe determinar cuál es el idioma del usuario. Podría inferir esto usando algo de magia de IP-geo (usando la dirección IP del usuario para determinar dónde vive geográficamente) y razonando qué idioma sería el más apropiado. Si realmente desea seguir este enfoque, no necesita ninguna lógica de front-end en absoluto; el servidor web podría obtener la dirección IP del usuario de los encabezados HTTP. Sin embargo, es mejor dejar que el usuario seleccione explícitamente qué idioma es mejor para ellos. Esto requiere algún código de front-end en forma de un selector de idioma y alguna forma de persistir en su selección. Las cookies suelen ser el método de elección.

A continuación, una vez que haya recibido el idioma preferido del usuario, debe notificárselo de alguna manera. Supongo que a esto se refiere la pregunta original. Consideremos dos formas de representar una página web: plantillas del lado del servidor y del lado del cliente. Con la representación del lado del servidor, el HTML enviado al usuario está en un estado listo para usar y se puede dibujar en la pantalla de inmediato. Con la representación del lado del cliente, se requieren algunos JS para completar los espacios en blanco o, lo que es peor, hacer una solicitud ajax para los datos. Solo después de que los scripts hayan representado el texto, se puede mostrar el contenido.

Yo diría que i18n del lado del cliente es ineficiente porque de una forma u otra, necesita obtener texto traducido en el marcado. Para empezar, puede servirlo de esa manera, o puede usar JS para hacerlo después del hecho. Si hornea el texto traducido en la respuesta HTTP inicial, puede mostrarse inmediatamente tal cual o puede procesarlo posteriormente con JS. El rendimiento de JS está limitado por la máquina local del usuario, mientras que la representación del lado del servidor depende de su servidor web. Solo puede garantizar el rendimiento de una de esas máquinas.

Por lo tanto, la configuración que recomendaría sería usar una plantilla del lado del servidor para representar el marcado con el texto traducido ya en su lugar.