How add vanilla JavaScript language selection
October 14, 2024
First create a select input with the language id.
<select id="language">
<option value="en">English</option>
<option value="es">Spanish</option>
<option value="fr">French</option>
</select>
Then, define the text elements on your page with a way to reference the translation. You can use data-* attributes to store the text in different languages.
<p data-en="Hello world!" data-es="¡Hola mundo!" data-fr="Bonjour le monde!">Hello world!</p>
Finally, add the logic to handle the language selection using the localStorage API and the data-* attributes.
const $languageInput = document.querySelector('select#language')
// Change the language of the page using the data attributes.
function changeLanguage(language) {
const translatableElements = document.querySelectorAll('[data-en]')
translatableElements.forEach((element) => {
element.textContent = element.getAttribute(`data-${language}`)
})
}
// Add change event listener to the language input.
$languageInput.addEventListener('change', (event) => {
const selectedLanguage = event.target.value
// Save the selected language in localStorage.
localStorage.setItem('selectedLanguage', selectedLanguage)
changeLanguage(selectedLanguage)
})
// Use localStorage API to get and update the page language.
document.addEventListener('DOMContentLoaded', () => {
const savedLanguage = localStorage.getItem('selectedLanguage') || 'en'
$languageInput.value = savedLanguage
changeLanguage(savedLanguage)
})