Как получить все строки и заменить их на другую из базы данных JavaScript

1

Я заранее извиняюсь за слабый английский :(

Мой сайт выглядит так: 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);

Есть ли более простой способ получить текст и заменить его из базы данных? Может ли кто-нибудь предложить некоторые более быстрые и быстрые функции?

  • 0
    Где вы подключаетесь к базе данных?
  • 0
    Я использую PHP скрипт
Теги:

2 ответа

0
Лучший ответ

Используйте объект (возможно, извлеките его с сервера через 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@ ...
0

Хороший способ

Используйте некоторую фреймворк javascript как Angular или React. Это займет некоторое время, чтобы учиться, но будет хорошо для вас.


Я не понимаю, что вы хотите делать на этой странице, часто ли эти тексты меняются? Использование setInterval заморозит вашу страницу, не используйте ее.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню