我正在建立一个英语/法语网站,想知道这样的工作是否有最佳实践。
复制该站点并制作一个包含适当站点的法语和英语文件夹。
使用 PHP 将内容与 html 标签交换。例如。如果($lang=='en'):
使用 php 仅交换内容,使两者的 html 标记相同。例如。到处都是 if 语句。这会对效率不利吗?
任何其他建议将不胜感激
我正在建立一个英语/法语网站,想知道这样的工作是否有最佳实践。
复制该站点并制作一个包含适当站点的法语和英语文件夹。
使用 PHP 将内容与 html 标签交换。例如。如果($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 猜测用户的位置,您可能需要查看geoIP。
使用模板系统。Smarty 模板引擎可能是最著名的 PHP 引擎之一。模板系统不仅可以满足您要实现的确切目的,而且还可以通过将显示代码与内容分开来更轻松地维护页面(这还允许您对一个网站的许多不同内容页面使用相同的模板)性质相似)。
作为最简单的方法,我建议您使用i18n 国际化方法和gettext目录(.po 文件)。
著名的WordPress项目也在使用它。
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 的内容也包括受到影响。
但不是外部 css 或 javascript。
保持注意分隔符#
不是在其他地方使用的字符。
也许您更愿意用||
or替换^^
当然,将来您可以将此解决方案改编为 3 种或更多语言。但是,如果您必须在大型网站的多行中插入“第三语言翻译#”,也许 MatW 的解决方案适合您。