我想在我的网页顶部添加语言菜单,您可以在其中选择语言English (en)
,Spanish (es)
和German (de)
(可能会添加更多语言)在将来)。我的网站包含三个页面nav.php
,index.php
和faq.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)还有什么我需要考虑的吗?
感谢您的任何建议。
答案 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中并不难。
我不知道这是最好的方式来做到这一点,但它应该有效(我用第二种测试方法做到了)并且很容易添加一个新的语言,你只需要:
yournewlangage.php
并翻译内容yournewlangage
添加到您的语言列表选择如果你做得对,那就完全了!
另一个想法可能是为您的网站使用框架。例如,我现在正在使用Silex(微框架php),它就像Symfony但更轻,你可以使用翻译组件来帮助你:https://silex.symfony.com/doc/2.0/providers/translation.html
框架可以帮助您赢得一些时间,如果您可以使用它们,花一些时间使用最好的一个你想做的事情!
希望它显而易见,并且有点帮助