我正在建立一个英语/法语网站,想知道是否有此类工作的最佳实践。

  1. 复制该站点并制作一个法语和英语文件夹,其中包含相应的站点。

  2. 使用 PHP 将内容与 html 标签交换。例如。if($lang=='en'):

  3. 使用 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 之一。模板系统不仅可以满足您想要实现的确切目的,还可以通过将显示代码与内容分离来使页面维护变得更加容易(这还允许您对一个网站的许多不同内容页面使用相同的模板)性质相似)。

作为最简单的方法,我建议您使用 i18n国际化方法 & 获取文本 目录(.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_startob_end_flush 在 php 编译后解析。
这意味着受影响的字符串即将到来,例如。来自 echo 语句,不在 < ?php ?> 标签内。
来自 php include 的内容也受到影响。
但不是外部 css 或 javascript。

保留注意分隔符 # 还没有在其他地方使用过的角色。
也许您更愿意替换为 || 或者 ^^

当然,将来您可以将此解决方案改编为 3 种或更多语言。但如果您必须在大型网站的多行中插入“第三语言翻译#”,也许 MatW 的解决方案适合您。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top