В зависимости от того, какую технологию вы используете, эта концепция известна как внешняя строка , ресурсная строка , международная строка , локализация и т. д. Можно сделать все это в CSS + Javascript, но это не очень эффективный способ делать что-либо, особенно если на вашем сайте много строк и много переводов.
HTML отличается - просто посмотрите на источник HTML, если вам интересно. Источник отличается тем, что в коде, стоящем за внешним интерфейсом веб-сайта, строки типа «Логин» хранятся извне в файле коллекции, который может выглядеть примерно так:
## LANGUAGE = ENGLISH ##
LOGIN = "Login"
PASSWORD = "Password"
Когда вы переключаете языки, код за внешним интерфейсом остается тем же самым, но тогда код использует другой файл внешнего языка. Например, может быть испанский файл для того же приложения:
## LANGUAGE = SPANISH ##
LOGIN = "Iniciar sesión"
PASSWORD = "contraseña"
Идея состоит в том, что для поддержки новых языков все, что нужно сделать, это перевести исходный идентификатор в новый языковой файл. Переводчик не обязательно должен быть программистом, чтобы легко перевести приведенный фрагмент кода.
Последний комментарий: у Facebook достаточно денег, чтобы платить профессиональным переводчикам, чтобы обеспечить их очень хорошими переводами на многие языки мира. Давным-давно они позволяли пользователям отправлять переводы в качестве отправной точки. Обычно плохая идея использовать бесплатный API перевода для перевода строк приложения, потому что в большинстве случаев эти API не получают правильную грамматику. API-интерфейсы перевода наиболее эффективны для правильного определения «общего значения» некоторых слов и фраз, но они также могут быть крайне неточными при получении наиболее правильного перевода слов для любой конкретной идиомы.