题
我正在建立一个英语/法语网站,想知道是否有此类工作的最佳实践。
复制该站点并制作一个法语和英语文件夹,其中包含相应的站点。
使用 PHP 将内容与 html 标签交换。例如。if($lang=='en'):
使用 php 仅交换内容,使两者的 html 标记保持相同。例如。if 语句到处都是。这会影响效率吗?
任何其他建议将不胜感激
解决方案
我们有一个框架,当(如果)我们的网站走向国际时,它的工作原理如下......
文件夹结构;
/
lang/
english/
images/
text/
dutch/
images/
text/
任何特定于语言的文本或图像都会直接从页面中删除并替换为常量。例如,在登录屏幕上,我们进入;
echo TEXT_LOGIN_WELCOME;
在 /lang/english/text/login.php 中定义为;
define('TEXT_LOGIN_WELCOME', 'Welcome, please login:');
但在 /lang/dutch/text/login.php 中它被定义为;
define('TEXT_LOGIN_WELCOME', 'Welcome, please login (in dutch):');
;-)
每个语言定义文件的命名与其所使用的页面完全相同,因此当我们加载面向公众的页面时,我们只需要弄清楚用户使用哪种语言,就可以包含相关的语言定义文件。
该系统的好处是所有语言信息都是集中的。当您需要添加新语言时,只需复制主(英语?)文件夹,重命名,压缩整个文件并将其发送到翻译服务即可发挥其魔力。当然,这个系统的缺点是随着语言和内容的增长而需要维护......如果有人对此有任何好主意,那么我很乐意听到他们!
顺便说一句,如果您最终需要通过 IP 猜测用户的位置,您可能需要查看 地理IP.
其他提示
使用模板系统。 Smarty模板引擎 可能是最著名的 PHP 之一。模板系统不仅可以满足您想要实现的确切目的,还可以通过将显示代码与内容分离来使页面维护变得更加容易(这还允许您对一个网站的许多不同内容页面使用相同的模板)性质相似)。
1 - 复制整个网站将迫使您将每个代码修改重复到 2 个文件夹中:-[
2 - 如果你的意思是像
<?php if($lang=='en') { ?>
<p>English text</p>
<? } else { ?>
<p>Text français</p>
<? } ?>
该解决方案非常适合在同一页面中管理两种语言。
但你仍然有重复的标签。
3 - 只改变内容就真的很满意。
也许大量的 if 语句会拖累 php 编译......我不知道。
无论如何,使用这种方法文档可以更加简洁:
<?php
function interpreter($buffer) {
$pieces = explode('#', $buffer);
if (isset($_GET['lang'])) $begin=$_GET['lang'];
else $begin = 1; // 1 to display français, 2 to display english
$tot = count($pieces);
for ($i=$begin; $i<$tot; $i+=3) { // remove one language
unset($pieces[$i]); }
foreach ($pieces as $value) { // recompose the text
$output .= $value; }
return $output;
}
ob_start("interpreter");
?>
<a href="?lang=#1#2#">#Français#English#</a>
<p>#English text#Texte français#.</p>
<?php ob_end_flush() ?>
之间的文字 ob_start
和 ob_end_flush
在 php 编译后解析。
这意味着受影响的字符串即将到来,例如。来自 echo 语句,不在 < ?php ?> 标签内。
来自 php include 的内容也受到影响。
但不是外部 css 或 javascript。
保留注意分隔符 #
还没有在其他地方使用过的角色。
也许您更愿意替换为 ||
或者 ^^
当然,将来您可以将此解决方案改编为 3 种或更多语言。但如果您必须在大型网站的多行中插入“第三语言翻译#”,也许 MatW 的解决方案适合您。