【问题标题】:One Page Multilingual Website using only CSS and PHP仅使用 CSS 和 PHP 的一页多语言网站
【发布时间】:2017-04-06 16:10:42
【问题描述】:

给定一个简单的静态网站,只有一个主页和两个其他页面,每个页面都包含两种语言的文本:英语和荷兰语。所有内容都应保存在每个页面的单个 php 文件中:

<body>
<menu id="EN">
  <ul>
    <li>About</li>
    <li>Home</li>
  </ul>
</menu>

<menu id="NL">
  <ul>
    <li>Over</li>
    <li>Thuis</li>
  </ul>
</menu>

<article id="EN">
     Goodmorning [...]
</article>

<article id="NL">
     Goedemorgen [...]
</article>
</body>

默认可以是英语,因此在到达时会显示英语内容,除非观众选择荷兰语。一旦用户单击一种语言,系统应该“记住”该选择,以便以正确的语言打开更多链接。如何通过 php/css 尽可能简单地使用几行代码进行设置?如果可能的话?这将是拥有一个多语言网站的绝对和最终选择,也是最简单的方法,而无需建立一个完整的(数据库驱动的动态)多语言框架,远远超出了这个愿望的适度性质)。

【问题讨论】:

  • 不要在 onefile 应用程序中重复 html。将语言数据绑定到命名变量并在 html 中使用它们。 $about = $langarray['DE']['ABOUT']; &lt;li&gt;$about&lt;/li&gt;
  • 你的问题的其余部分是广泛回答。 google 怎么样:基于 cookie 和会话制作一个简单的多语言网页。
  • 您可以通过将选择的语言存储在 cookie 中来记住用户的选择,该 cookie 可以设置为随时记住

标签: php css multilingual remember-me


【解决方案1】:

这个问题并不完全有意义。如果您使用 PHP,您希望在服务器端跟踪用户的语言。这通常通过会话变量完成。

另一种方法是发送两种语言并使用 css 和 javascript 来替换客户端上的值,具体取决于单击的标志。

【讨论】:

  • 您可以使用javascript cookie 来记住用户在多个网址中选择的语言。
  • +1 感谢@Michael Arrison 和 Tijmen 的采纳。好吧,我的目标是这里的替代方案 Michael ;) 但是如果我从您的回答中理解正确,实际上有两种方法可以解决这个问题: php 设置 cookie 并记住必须显示哪种语言 OR javascript设置 cookie 并记住必须显示的语言。不能同时两个,对吗? Tijmen 这是一个很好的链接,我会测试一下。
  • @Michael Arrison 和 Tijmen 我是否正确,因为第一个选项 (PHP) 让谷歌认为结果是两个可以保存的页面,例如 /en/page112/nl/page112(稍后通过设置htaccess 重写)而 javascript 选项使 google 认为它的一页 `/page112' 包含两种语言,从而可能使 google 烦人和困惑?
  • 我认为第一个选项(php,服务器端会话)比第二个选项(js,客户端会话)更优雅,所以我将专注于 PHP-only-solution,就像在另一个中构建的那样两个答案。
【解决方案2】:

这是基于您的信息的最简单的多语言实现。还有很多其他更好的解决方案。

您首先需要一个语言选择器

<div class="language-selector">
    <a href="changelanguage.php?lang=en">EN</a>
    <a href="changelanguage.php?lang=nl">NL</a>
</div>

changelanguage.php 内容:

<?php
    session_start();
    if(!empty($_GET['lang']) $_SESSION['lang'] = $_GET['lang'];
    header("Location: ".$_SERVER['HTTP_REFERER'])
?>

每个页面都应该包含在顶部

<style type="text/css">
#EN, #NL { display:none; }
<?php
    session_start();
    if($_SESSION['lang'] == "EN" || empty($_SESSION['lang'])) echo "#EN { display: block; }";
    if($_SESSION['lang'] == "NL") echo "#NL { display: block; }";
?>
</style>

【讨论】:

  • +1 感谢您的建设性解决方案!我想这就是我的意思......但是默认语言应该已经设置为英语(如果尚未设置语言),因此语言选择器应该是可选的。我可以通过在 session_start() 之后直接添加一行来解决这个问题吗? if(empty($_GET['lang']) $_SESSION['lang'] = "EN";
  • 感谢您的评论。我编辑了代码以提供默认语言。
【解决方案3】:

第一个错误是你不能在不同的元素中重复 id 属性。我认为没有 CSS 最简单的方法是使用 $_GET["lang"] 参数,如下所示:

在您的第一行 PHP 中输​​入:

<?php 
   if(isset($_GET["lang"]){
      $lang = $_GET["lang"];
   }else{
      $lang = "NL"; // by default
   }
?>

荷兰语

 <?php if ($lang=="NL"){ ?>
<article>
     Goedemorgen [...]
</article>
<?php } ?>

英语

 <?php if ($lang=="EN"){ ?>
<article>
     Goodmorning [...]
</article>
<?php } ?>

如果你想改变语言:

<a href="?lang=EN>Website in English</a>

【讨论】:

  • +!感谢@Christian Carrillo 为这个评论家和解决方案提供了帮助。因此,即使选择器不同(文章/菜单等,id 仍然必须是唯一的?)。我将测试这个解决方案,但我确实有一个问题:如何启动/初始加载英文版本(没有那些由用户选择语言的旧欢迎屏幕)?
  • 感谢@Christian Carrillo 的升级!我测试了它,但dreamweaver 说代码有问题,第一部分是if(isset(,页面什么也没有显示。一旦代码正常工作,我将删除此评论。我还发现网址中缺少",但这没什么大不了
猜你喜欢
  • 2015-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-23
  • 1970-01-01
  • 1970-01-01
  • 2019-12-27
  • 2018-03-14
相关资源
最近更新 更多