将不同语言包含到网页中的最佳方式

时间:2018-03-08 07:26:39

标签: php html

我想在我的网页顶部添加语言菜单,您可以在其中选择语言English (en)Spanish (es)German (de) (可能会添加更多语言)在将来)。我的网站包含三个页面nav.phpindex.phpfaq.php

但是,我不确定在我的网站上实施这些语言的最佳方法。到目前为止,我已经提出了以下选项:

(1)使用其他语言创建网站的每个网页,并将其放在相同的文件夹中:

website/pages/nav-en.php
             /nav-es.php
             /nav-de.php
             /index-en.php
             /index-es.php
             ...

(2)使用其他语言创建网站的每个网页,并为每种语言创建拥有文件夹:

website/en/nav-en.php
          /index-en.php
          /faq-en.php

website/es/nav-es.php
          /index-es.php
          /faq-es.php

....

(3)通过上述选项(1)(2),我发现代码更改必须完成的问题为每个页面手动。因此,我的解决方案是将functional 代码text 内容分开,并根据所选语言加载文本文件菜单:

website/pages/nav.php
             /index.php
             /faq.php

website/text-content/nav-text-en.php
                    /nav-text-es.php
                    /nav-text-de.php
                    /index-text-en.php
                    /index-text-es.php
                    ....

由于我是网络开发的新手,我想问你:

(a)上述选项是否只有一次,或者是否有其他(更好)方式在网页上包含不同的语言?

(b)根据您的经验,您会推荐哪个选项?

(c)还有什么我需要考虑的吗?

感谢您的任何建议。

5 个答案:

答案 0 :(得分:2)

您可以使用gettext进行翻译。这样,您可以在同一个地方为所有语言创建一个包含结构和文本的文件,并使用编辑器(如poedit)翻译您的字符串,这也可以由翻译人员完成。然后,翻译人员只能看到一种语言的字符串,并且必须填写翻译版本,而不必处理它周围的HTML。

gettext()函数_()有一个快捷方式,因此您可以编写类似

的内容
<a href="http://www.example.com"><?=_("Linktext in different languages")?></a>

设置一次需要做更多的工作,但之后,添加其他语言将比包含所有结构的不同文件容易得多,这将很快成为维护的噩梦。

答案 1 :(得分:1)

(a)上述选项是否只有一次或是否有另一种(更好的)方式在网页上包含不同的语言?

我认为对语言和内容使用$ _GET参数是更好的方法。例如,

SELECT *
FROM events_table WHERE
Date_From = 'start_event_date' AND  Date_To = 'end_event_date' AND Time_From = 'start_event_time'  AND  Time_To = 'end_event_time';

(b)根据您的经验,您会推荐哪个选项?

使用php语言的强大功能是我的建议。您可能会忘记静态HTML网站架构。

(c)我还需要考虑其他什么吗?

如果您正在使用apache,我建议使用mod_rewrite。这样每个页面网址看起来更好:

index.php?page=faq&lang=en

而不是

index.php/en/faq

答案 2 :(得分:1)

好吧,如果你谷歌本地化的PHP,你会想出多个想法。我个人会使用gettext。这样,您还可以以正确的格式格式化数字。

答案 3 :(得分:1)

到目前为止我的经历:

改善甚至维护网页是一场噩梦,其中相同内容的不同视图基于不同的文件,例如你的英语,德语和西班牙语的起始页。

因此,将HTML框架(+ CSS)与依赖于语言的文本分离是一种很好的方法。你可以通过实现自己的想法来做到这一点......或者你正在寻找一个提供这种功能的php框架。我主要是一个Java人,所以我不知道这样的框架。我猜Laravel和Zend Framework 2可以提供本地化。与线程中提到的其他人一样,gettext看起来也是在项目中实现本地化的好方法。

希望有所帮助。

答案 4 :(得分:1)

要构建易于维护的多线程网站,您可以这样做:

1。您可以通过语言

创建一个文件
en.php // english content
es.php // spanish content
...

2。每个文件都是一个具有相同密钥的数组,其中包含您需要翻译的所有内容:

<?php 
// en.php

$translate = array(
    "menu_content" => array(
        "home" => "Home page",
        "nav" => "Nav page",
        ...
    ),
    "nav_page_content" => array(
        "title" => "Welcome to the nav page",
        "content" => "In this page you will find...",
        ...
    ),
    // same for ALL the content
);

3。现在,我看到有两种方法可以在您的网站中添加翻译文件的内容:

3.1 :如果您在网址$_SESSION['lang']中拥有当前语言并加载了所需的php文件,则使用$_GET['lang']变量或某个(eg. http://www.my-page?lang=en)变量在PHP脚本的开头。然后在您的HTML中,您将根据您的php数组获取内容(所有语言中的相同键)。例如,使用我的示例数组作为菜单:

<nav>
    <ul>
        <li id="home"> <?= $translate["menu_content"]["home"]; ?> </li>
        <li id="nav"> <?= $translate["menu_content"]["nav"]; ?> </li>
        ...
    </ul>
</nav>

要更改语言,请创建一个语言列表,然后点击即可更改$_SESSION['lang']$_GET['lang']值并使用新的php语言内容重新加载页面。

3.2 :如果不使用$ .ajax重新加载页面,您几乎可以执行相同操作。这个想法几乎是一样的:你有一个包含langage属性的网站所有语言的列表,例如:

<ul>
    <li data-lg='es'>ES</li>
    <li data-lg='en'>EN</li>
    ...
</ul>

单击时,您将获得此data-lg值并将其发送到您的Ajax函数,调用选择语言的php文件:

function changeLangue(lg) {
    $.ajax({
        type: "POST",
        url: lg +".php", // eg. es.php, en.php, etc.
        dataType: "json", // you will need to add "echo json_encode($translate);" at the end of your php file to send back JSON content
        success: function(response){
             // Here your change the content of your website without reloading the page, eg with my nav before:

           $("#home").html(response.menu['home']);
           $("#nav").html(response.menu['nav']);
           ...

        },
        error:    function(x,e,t){
            manageError(x,e);
        }
    });

使用这种方法,您需要更改当前的语言并重建您的语言选择,但在JS / jQuery中并不难。

我不知道这是最好的方式来做到这一点,但它应该有效(我用第二种测试方法做到了)并且很容易添加一个新的语言,你只需要:

  1. 使用与之前相同的数组创建一个新的php文件yournewlangage.php并翻译内容
  2. yournewlangage添加到您的语言列表选择
  3. 如果你做得对,那就完全了!

    另一个想法可能是为您的网站使用框架。例如,我现在正在使用Silex(微框架php),它就像Symfony但更轻,你可以使用翻译组件来帮助你:https://silex.symfony.com/doc/2.0/providers/translation.html

    框架可以帮助您赢得一些时间,如果您可以使用它们,花一些时间使用最好的一个你想做的事情!

    希望它显而易见,并且有点帮助