Я заранее извиняюсь за слабый английский :(
Мой сайт выглядит так: https://scr.hu/LoDJpD
<div class="container-fluid">
<div class="col-sm-12 col-md-10 col-md-offset-1 col-lg-10 col-lg-offset-1 text-center">
<div class="card col-md-6 col-sm-6 row-2">
<div class="card-bg">
<div class="image" style="background-image: url('kwadrat.jpg');"></div>
<div class="title"><h1><hr>DNI OTWARTE<hr></h1></div>
<div id="big" class="text">@string/big</div>
</div>
</div>
<div class="card col-md-3 col-sm-3 row-2">
<div class="card-bg">
<div class="image" style="background-image: url('dlugi.jpg');"></div>
<div class="title"><h1><hr>PROJEKTY<br>UNIJNE<hr></h1></div>
<div id="small1" class="text">@string/small1</div>
</div>
</div>
<div class="card col-md-3 col-sm-3 row-2">
<div class="card-bg">
<div class="image" style="background-image: url('maly1.jpg');"></div>
<div class="title"><h1><hr>BUSINESS<br>ENGLISH<hr></h1></div>
<div id="small2" class="text">@string/small2</div>
</div>
</div>
<div class="card col-md-12 row-1">
<div class="card-bg">
<div class="image" style="background-image: url('banner.jpg');"></div>
<div class="title"><h1><hr>CZECHOMANIA<hr></h1></div>
<div id="bigwidth" class="text">@string/bigwidth</div>
</div>
</div>
</div>
</div>
Я хотел бы преобразовать текст "@string/text" в переменную из базы данных. В базе данных переменная также имеет имя "@string/text". Сейчас у меня простой сценарий, но я знаю, что он будет неэффективным
text = document.getElementById("big").innerHTML;
lang = document.getElementById("jezyk");
function en(){
document.getElementById("jezyk").className="flag flag-gb";
}
function pl(){
document.getElementById("jezyk").className="flag flag-pl";
}
function useen(){
if(lang.className == "flag flag-gb" && text == "@string/big"){
document.getElementById("big").innerHTML="GB variable form database";
}
}
function usepl(){
if(lang.className == "flag flag-pl" && text == "@string/big"){
document.getElementById("big").innerHTML="PL variable form database";
}
}
setInterval(function jezyk(){
usepl();
useen();
jezyk();
}, 10);
Есть ли более простой способ получить текст и заменить его из базы данных? Может ли кто-нибудь предложить некоторые более быстрые и быстрые функции?
Используйте объект (возможно, извлеките его с сервера через JSON), например:
var translate={
lang:["en","pl"],
values:{
curr_lang:["english","polish"],
info:["english text","polish text"]
}
};
Таким образом, вы можете легко отобразить язык выбора:
translate.lang.map(function(language){
var button=document.createElement("button");
button.textContent=language;
button.onclick=changeLanguage.bind(this,language);
document.body/* or a custom element*/.appendChild(button);
});
Обход всего домена не так быстр, поэтому можно просто сделать это один раз и заменить все @identifier @на промежутки (может сделать это на сервере уже и кешировать его):
document.body.innerHTML=document.body.innerHTML.split("@").reduce(function(part,i){
if(part%2===0) return part;
return "<span id='"+part+"' class='replace'>...</span>";
}).join("");
Таким образом, фактическая замена довольно проста:
function changeLanguage(lang){
var index=translate.lang.indexOf(lang);
document.querySelectorAll(".replace").forEach(fumction(el){
var select=el.id;
el.textContent=(translate.values[select]||["error","error"])[index];
});
}
Пример текста
This site is currently in @curr_lang@ ...
Хороший способ
Используйте некоторую фреймворк javascript как Angular или React. Это займет некоторое время, чтобы учиться, но будет хорошо для вас.
Я не понимаю, что вы хотите делать на этой странице, часто ли эти тексты меняются? Использование setInterval заморозит вашу страницу, не используйте ее.