在PHP中循环进入一个开关?

时间:2013-12-11 15:37:32

标签: php loops while-loop switch-statement case

我正在尝试使用不同语言创建一个网站,并从数据库中检索此信息。现在我有两种语言:英语和荷兰语。

我想要做的是获得所有语言的可能性,并把它放到一个开关中。因此,如果人们点击这个链接:index.php?page = NL,他们将获得页面的荷兰语翻译。

所以这是我正在使用的代码。它工作到目前为止,但它显示我认为语言选项和默认选项。因为当我删除默认值时,我只得到代码。

    <div id="content">
    <?php 
    //Retrieve languages
    $querySwitchLang = "SELECT * FROM languages";
    $resultSwitchLang = mysql_query($querySwitchLang);
    ?>
    <?php
    while($rowSwitchLang = mysql_fetch_array($resultSwitchLang)){
        switch($page){
            case $rowSwitchLang['langCode']:include('page.php');break;
            default: include('pageDefault.php'); 
            break;
        }
    }
    ?>   
    </div>

所以实际上我想让它像这样,因为现在它运行switch语句的次数与我认为的语言一样多次:

    <div id="content">
    <?php 
    //Retrieve languages
    $querySwitchLang = "SELECT * FROM languages";
    $resultSwitchLang = mysql_query($querySwitchLang);
    ?>
    <?php
    include('functions.php');

        switch($page){
                        while($rowSwitchLang = mysql_fetch_array($resultSwitchLang)){
            case $rowSwitchLang['langCode']:include('page.php');break;
                        }
            default: include('pageDefault.php'); 
            break;

    }
    ?>   
    </div>

但这不起作用,因为我会得到这个错误:

Parse error: syntax error, unexpected 'while' (T_WHILE), expecting case (T_CASE) or default (T_DEFAULT) or '}' in C:\wamp\www\glimpler\index.php on line 6

我无法弄清楚如何解决这个问题。

1 个答案:

答案 0 :(得分:0)

我认为你的方法有点凌乱是使用文件进行翻译而不是db,就像这样:

NL.php

   <?php
      return [
         'welcome' =>'welkom',
         'goodbye' =>'afscheid'
         ];

然后在你的索引中

$translationFile =$_GET['page'].'.php';
if(file_exists(translationFile)){
    $language = include(translationFile);
}
else{
 die("Couldn't find translation file. Page Terminated!");
}

然后回复你的翻译。

echo $language['welcome'] . ' USER';

优点是不会为每种语言提供多个页面,这使得更新更容易。 如果没有设置,你可以将$ _GET ['page']设置为'EN'。