Я абсолютный новичок в отношении javascript, express, node, ejs и т. Д., Пожалуйста, будьте осторожны со мной.: D
Я создаю сайт, который представляет собой галерею моих проектов.Вы можете увидеть их сетку, и можете посмотреть живую версию, просто нажав на GIF.Каждый проект (две мини-игры) при нажатии на него идет по разному маршруту (/ squareTap, / guessColor).Теперь я хочу внедрить другой язык в веб-сайт.Я добавил выпадающий список, с помощью которого вы можете выбрать нужный язык.Работает на главной странице, хорошо меняет текст.Но когда вы переходите в какой-либо проект, эта информация теряется ... И мне нужно, чтобы игра узнала, на каком языке должно отображаться предупреждение об эпилепсии, и, соответственно, изменила описание игры.
Таков сайтструктурированный: запустить с "node app.js";каждому файлу ejs соответствуют свои файлы js и css
//app.js
require('dotenv').config();
const express = require('express'),
app = express(),
bodyParser = require('body-parser'),
https = require('https'),
http = require('http'),
fs = require('fs');
var setToEnglish = false;
// app.locals.setToEnglish = false;
app.use(bodyParser.urlencoded({extended: true}));
app.use(express.static(__dirname + '/views'));
app.use('/node_modules', express.static(__dirname + '/node_modules/'));
app.use('/sounds', express.static(__dirname + '/sounds/'));
app.use('/images', express.static(__dirname + '/images/'));
app.set('view engine', 'ejs');
const options = {
key: fs.readFileSync('key.pem'),
cert: fs.readFileSync('cert.pem')
};
app.get("/", function(req, res){
res.render("main", { setToEnglish : setToEnglish});
});
app.get("/squareTap", function(req, res){
res.render("squareTap", { setToEnglish : setToEnglish});
});
app.get("/guessColor", function(req, res){
res.render("guessColor", { setToEnglish : setToEnglish});
});
https.createServer(options, app)
.listen(process.env.HTTPS_PORT, function () {
console.log('Serving the https');
});
http.createServer(function (req, res) {
res.writeHead(301, { 'Location': 'https://www.' + process.env.DOMAIN});
res.end();
}).listen(process.env.HTTP_PORT);
Я пробовал глобальную переменную ejs (если так она называется).По сути, я создал переменную setToEnglish
в app.js, передавая ее каждому представлению (файлы ejs), не мог понять, как передать ее в файл js, поэтому я сделал объявление функции внутри файла ejs и выполнил их в js каждыйвремя пользователь меняет язык, нажимая на выпадающий список.
<script>
function setGlobalToEnglish() {
<% setToEnglish=true %>;
}
function setGlobalToPolish() {
<% setToEnglish=false %>;
}
</script>
Это не сработало, оно изменило переменную, но только в области действия текущего файла.Когда пользователь щелкнул по проекту, он все еще получил неизменное значение по умолчанию.
Я читал о res.locals, app.locals и немного попробовал, но не смог заставить его работать.Файлы Js и EJS ничего не распознали.
Это моя цель: мне нужен какой-то способ узнать, какой язык пользователь установил, он должен меняться в зависимости от того, что пользователь нажал, быть доступным для файлов представлений (внутри ихбыло бы здорово)Первое, что нужно сделать играм, это проверить язык и, соответственно, отредактировать текст.
Пожалуйста, помогите
Редактировать 1: я объявил setToEnglish
в качестве глобальной переменной (внутри app.js), сначала- удалив var
часть.Затем я попытался console.log(setToEnglish);
внутри main.js, получил неопределенную ошибку, затем в main.ejs, внутри <script></script>
, также получил неопределенную ошибку.Затем я изменил объявление переменной на эту форму global.setToEnglish = false
и попытался снова.Получение неопределенной ошибки во всех случаях.
Редактировать 2: Не удалось выяснить это, поэтому я изменил подход.Я избавился от выпадающего списка изменений языка и добавил оператор if к каждому из моих представлений, которые не будут делать именно то, что я хотел, но достаточно близко.Он определяет предпочитаемый язык пользователя, проверяя настройки его браузера, и соответственно меняет текст на сайте.
let preferredLanguage = window.navigator.language;
if(preferredLanguage.includes('en')) {
//changing text to english
} else if(preferredLanguage.includes('pl')) {
//changing text to polish
} ...