Я бы использовал немного другой подход. То, как вы пытаетесь использовать константы, ограничено областью блоков, используемой в условных выражениях.
Почему бы не поместить все связанные с языком строки в модуль или отдельные файлы. что-то вроде translation.en.js
и translation.es.js
Поместите const внутри них. Загрузите только один файл в зависимости от вашей переменной localStorage.
Получить переменную lang
let lang = localStorage.getItem('lang')
Если вы можете импортировать модули (для совместимости используйте транспортер)
import {TRANSLATIONS} from `path/to/translation.${lang}.js`
Если нет, то идите в старую школу
let languageFile=document.createElement('script')
languageFile.setAttribute("type","text/javascript")
languageFile.setAttribute("src", `path/to/translation.${lang}.js`)
document.body.appendChild(languageFile)
А затем используйте это так:
const LANGCONVERT = {
accept: TRANSLATIONS['accept'],
accept_invitation: TRANSLATIONS['accept_invitation']
}
или используйте деструктуризацию для более коротких обозначений (опять же, только с транспортом)
let {accept, accept_invitation} = TRANSLATIONS
const LANGCONVERT = {accept, accept_invitation}
пример языкового файла
// make sure to export the const for module usage
const TRANSLATIONS = {
accept: 'Accept'
accept_invitation: 'Accept Invitation'
}
Вы поняли идею. И имейте в виду, что let, const, this
все связаны с областью родительского блока, вы не можете использовать их вне этого. Чтобы преодолеть это, используйте модули, если можете, и если нет, убедитесь, что вы объявляете их в глобальном контексте.
Надеюсь, я дал вам хотя бы несколько полезных советов.