Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 建立多语言网站模板的最有效方法_Php_Templates_Multilingual - Fatal编程技术网

Php 建立多语言网站模板的最有效方法

Php 建立多语言网站模板的最有效方法,php,templates,multilingual,Php,Templates,Multilingual,我正在建立一个英语/法语网站,想知道是否有这样一个工作的最佳实践 复制网站,制作一个法文和英文文件夹,里面有合适的网站 使用PHP将内容与html标记交换。 例如,如果($lang=='en'): 使用php只交换内容,使两个html标记保持相同。到处都是if语句。这会对效率不利吗 如有任何其他建议,请使用模板系统。可能是最著名的PHP之一。模板系统不仅可以实现您想要实现的确切目的,还可以通过将显示代码与内容分离(这也允许您对许多性质类似的不同内容页使用相同的模板),从而使维护页面变得更加容易。

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

  • 复制网站,制作一个法文和英文文件夹,里面有合适的网站

  • 使用PHP将内容与html标记交换。 例如,如果($lang=='en'):

  • 使用php只交换内容,使两个html标记保持相同。到处都是if语句。这会对效率不利吗


  • 如有任何其他建议,请使用模板系统。可能是最著名的PHP之一。模板系统不仅可以实现您想要实现的确切目的,还可以通过将显示代码与内容分离(这也允许您对许多性质类似的不同内容页使用相同的模板),从而使维护页面变得更加容易。

    我们有一个适当的时间框架(如果)我们的网站走向国际,工作方式如下

    文件夹结构

    /
      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猜测用户的位置,您可能需要签出。

    作为最简单的方法,我建议您使用&catalogs(.po文件)。

    著名的项目是。

    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() ?>
    
    
    #英语文本#法语文本#

    php编译后将解析
    ob\u start
    ob\u end\u flush
    之间的文本。
    这意味着受影响的字符串来自echo语句,而不是标记中的字符串。
    来自php include的内容也会受到影响。
    但不是外部css或javascript

    注意定界符
    #
    不是其他地方使用的字符。
    也许您更愿意替换为
    |
    ^


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

    我应该提到的是,英语部分已经构建。是否有许多“如果”语句会明显降低我的网站速度吗?Smarty看起来很酷。我尝试构建自己的模板引擎。我正在寻找最好的方法使其成为多语言的。我认为,对于一个提供过多语言UI的网站来说,这可能很难。