4

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

  1. 复制该站点并制作一个包含适当站点的法语和英语文件夹。

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

  3. 使用 php 仅交换内容,使两者的 html 标记相同。例如。到处都是 if 语句。这会对效率不利吗?

任何其他建议将不胜感激

4

4 回答 4

5

当(如果)我们的网站走向国际时,我们有一个框架,就像这样工作......

文件夹结构;

/
  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

于 2009-08-03T22:47:48.273 回答
4

使用模板系统。Smarty 模板引擎可能是最著名的 PHP 引擎之一。模板系统不仅可以满足您要实现的确切目的,而且还可以通过将显示代码与内容分开来更轻松地维护页面(这还允许您对一个网站的许多不同内容页面使用相同的模板)性质相似)。

于 2009-08-03T22:13:45.533 回答
2

作为最简单的方法,我建议您使用i18n 国际化方法gettext目录(.po 文件)。
著名的WordPress项目也在使用它

于 2009-08-03T22:56:38.693 回答
0

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_flushphp 编译后被解析。
这意味着受影响的字符串即将到来,例如。来自 echo 语句,不在 < ?php ?> 标签内。
来自 php 的内容也包括受到影响。
但不是外部 css 或 javascript。

保持注意分隔符#不是在其他地方使用的字符。
也许您更愿意用||or替换^^

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

于 2012-01-01T05:42:56.247 回答