Мой сайт использует отдельный JSON-файл для загрузки переводов оттуда.

```
{  
  "en": {  
    "h1": "Welcome to the Website",  
    "h2": "This is a subtitle",  
    "h3": "Another Heading",  
    "paragraph": "This is a sample text to demonstrate language switching.",  
    "paragraph2": "sample text"  
  },  
  "ru": {  
    "h1": "Добро пожаловать на сайт",  
    "h2": "Это подзаголовок",  
    "h3": "Еще один заголовок",  
    "paragraph": "Это пример текста для демонстрации смены языка.",  
    "paragraph2": "апварчварчпаапопаоыапрпыр"  
  },  
  "uk": {  
    "h1": "Ласкаво просимо на сайт",  
    "h2": "Це підзаголовок",  
    "h3": "Ще один заголовок",  
    "paragraph": "Це приклад тексту для демонстрації зміни мови.",  
    "paragraph2": "уууаааууаааауууааа"  
  }  
}
```

И дело в том, что ключи в JSON-файле совпадают с идентификаторами элементов в коде моего сайта. Не мог бы ты сделать динамичную загрузку идентификаторов из JSON, чтобы я не добавлял каждый раз новые записи и в коде?

Вот код сайта:

```
<body>  
  
<div class="language-selector">  
  <img src="https://flagcdn.com/w80/ru.png" alt="Русский" data-lang="ru" id="ru-flag">  
  <img src="https://flagcdn.com/w80/us.png" alt="English" data-lang="en" id="en-flag">  
  <img src="https://flagcdn.com/w80/ua.png" alt="Українська" data-lang="uk" id="uk-flag">  
</div>  
  
<h1 id="title1"></h1>  
<h2 id="title2"></h2>  
<h3 id="title3"></h3>  
<p id="paragraph"></p><p id="paragraph2"></p>  
  
<script>  
  document.addEventListener('DOMContentLoaded', () => {  
    const languageSelector = document.querySelector('.language-selector');  
    const flags = document.querySelectorAll('.language-selector img');  
    const elements = {  
      h1: document.getElementById('title1'),  
      h2: document.getElementById('title2'),  
      h3: document.getElementById('title3'),  
      paragraph: document.getElementById('paragraph'),  
      paragraph2: document.getElementById('paragraph2')  
    };  
    let translations = {};  
  
    // Функция для загрузки JSON с переводами  
    function loadTranslations() {  
      return fetch('lang.json')  
              .then(response => response.json())  
              .then(data => {  
                translations = data;  
              })  
              .catch(err => {  
                console.error('Ошибка загрузки lang.json:', err);  
              });  
    }  
  
    // Функция для определения языка пользователя  
    function detectLanguage() {  
      const storedLang = localStorage.getItem('language');  
      if (storedLang && translations[storedLang]) {  
        return storedLang;  
      }  
  
      const browserLang = navigator.language.slice(0, 2).toLowerCase();  
      if (translations[browserLang]) {  
        return browserLang;  
      }  
  
      // Поиск среди navigator.languages  
      for (let lang of navigator.languages) {  
        let shortLang = lang.slice(0, 2).toLowerCase();  
        if (translations[shortLang]) {  
          return shortLang;  
        }  
      }  
  
      // По умолчанию английский  
      return 'en';  
    }  
  
    // Функция для установки языка  
    function setLanguage(lang) {  
      if (!translations[lang]) return;  
  
      // Обновление текста на странице  
      elements.h1.textContent = translations[lang].h1;  
      elements.h2.textContent = translations[lang].h2;  
      elements.h3.textContent = translations[lang].h3;  
      elements.paragraph.textContent = translations[lang].paragraph;  
      elements.paragraph2.textContent = translations[lang].paragraph2;  
  
      // Обновление localStorage  
      localStorage.setItem('language', lang);  
  
      // Обновление выделения флага  
      flags.forEach(flag => {  
        if (flag.dataset.lang === lang) {  
          flag.classList.add('selected');  
        } else {  
          flag.classList.remove('selected');  
        }  
      });  
    }  
  
    // Обработчик клика по флагам  
    languageSelector.addEventListener('click', (e) => {  
      if (e.target.tagName === 'IMG') {  
        const selectedLang = e.target.dataset.lang;  
        setLanguage(selectedLang);  
      }  
    });  
  
    // Инициализация  
    loadTranslations().then(() => {  
      const userLang = detectLanguage();  
      setLanguage(userLang);  
    });  
  });  
</script>  
  
</body>  
</html>
```