如何使用纯html,js,jquery构建多语言网站?

Lao*_*dao 8 html javascript multilingual jquery

我正在使用html来构建页面.问题是如何构建多语言切换?语言翻译不是问题,我有条款.但是,我不知道如何通过菜单栏上的语言按钮/下拉列表切换每页的btw?如果有现有的示例或模板,那就更好了.提前致谢.

M. *_*eed 24

好.作为我的答案的编辑,请遵循:

1 -创建一个名为language的文件夹并向其添加2个文件(es.json和en.json)

json文件的结构应该相同,但在翻译方面有所不同,如下所示:

en.json

{ 
    "date": "Date", 
    "save": "Save",
    "cancel": "Cancel" 
}
Run Code Online (Sandbox Code Playgroud)

es.json

{ 
    "date": "Fecha", 
    "save": "Salvar",
    "cancel": "Cancelar" 
}
Run Code Online (Sandbox Code Playgroud)

2 - 创建一个包含示例div的html页面,并放置2个链接以选择指向步骤3中列出的js函数的语言.

<a href="#" onclick="setLanguage('en')">English</a> 
<a href="#" onclick="setLanguage('es')">Spanish</a>

<div id="div1"></div>
Run Code Online (Sandbox Code Playgroud)

3 -创建2个java脚本函数来获取/设置所选语言:

<script>
var language; 
function getLanguage() {
(localStorage.getItem('language') == null) ? setLanguage('en') : false;
$.ajax({ 
url:  '/language/' +  localStorage.getItem('language') + '.json', 
dataType: 'json', async: false, dataType: 'json', 
success: function (lang) { language = lang } });
}

function setLanguage(lang) {
localStorage.setItem('language', lang);
}
</script>
Run Code Online (Sandbox Code Playgroud)

4 - 使用变量语言填充文本.

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
    <script>

    $(document).ready(function(){
    $('#div1').text(language.date);
    });

    </script>
Run Code Online (Sandbox Code Playgroud)

我相信这回答了这个问题,因为我在跨多个站点实现了相同的概念.

注意:只需使用来自JQuery的document.ready之外的onclick事件,即可进行即时翻译(无需重新加载).这取决于您的情况.

  • 谁投下了票! (3认同)
  • 另外,当托管它时,由于数据类型是 json,ajax 会生成 CORS 错误。有解决方法吗? (2认同)

Yin*_*yto 5

由于您不熟悉前端,因此我想给您一个工作模板/示例,这是一个非常基本的尝试,使用iframe模拟两种不同语言的页面。至少在M. Taha完成关于提供多语言UI的通用前端框架的工作之前,这将至少为您提供一种实现方式的替代方法。

假设这个这个是你分别在英语和法语,页面的版本,你可以那样做(小提琴这里):

<html>
<body>
<select id="langselector" onchange="loadlang()">
  <option value="en">English</option>
  <option value="fr">French</option>
</select>
<p></p>
<iframe id="contents" src="https://jsfiddle.net/q2nw8o35/" width="1366" height="768" scrolling="yes">
  <p>Your browser does not support iframes.</p>
</iframe>
<script>
function loadlang()
  {
  var lng = document.getElementById("langselector").value;
  var cnt = document.getElementById("contents");
  switch (lng)
    {
    case "en":
      cnt.src = "https://jsfiddle.net/q2nw8o35/";
    break;
    case "fr":
      cnt.src = "https://jsfiddle.net/jmn8c9tj/";
    break;
    }
  }
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

现在,如果您构建页面的版本,而只是将src-s 的值替换为服务器上页面版本的路径,则可以在-内实现它iframe。进行一些试验(可以在JSFiddle上玩,很有趣)并且可能会有所帮助,您可以从那里继续前进,并寻找正确的方式,例如M.Taha尝试(例如,使用本地存储/ cookie来“记住”您以前的设置,依此类推)。

我的示例并不是要提供最终的框架等,而是应该将其视为一个非常基本的工作示例,可以暂时实现您想要的目标,或者直到提供更好的解决方案/答案为止。

  • 有趣的是,有些人喜欢对一个工作示例投反对票……而不提供一个(甚至一个答案)。仅仅因为一个问题“太宽泛”并不意味着答案也应该被低估,即使它们并不完美……尤其是如果它们有效的话。 (5认同)
  • 人们应该定义“太宽泛”。问题是否必须与特定代码相关?如果问题太宽泛,不同的人可能会有不同的意见。对于回答这个问题的人来说,他们似乎并不这么认为。此外,他们中的一些人实际上在某些框架上工作以实现这一目标。不知道为什么他们对此投了反对票。对不起他们。 (2认同)