在PHP中基于语言动态更改图像目录?

时间:2011-10-31 07:04:45

标签: php dynamic directory multilingual

我正在制作一个用多种语言构建中小型网站的骨架。我正在使用本教程中的方法:

http://www.bitrepository.com/php-how-to-add-multi-language-support-to-a-website.html

我知道它是从2009年开始的,但我喜欢他们是如何做到的,而且这对我的同事来说是最容易理解的,特别是因为我自己已经从文件中评论了bejeezus。

这是替换网站中相关文字的好方法。我现在面临的问题源于这样一个事实:并非任何给定网站上的所有文字都必然是文本。有很多图像,导航按钮等也需要更换。

我的想法是进入common.php(如教程中所述)并添加一个条件,它也会改变图像目录(img /或image /)。例如,如果我的文件结构如下所示:

  

WWW

     
    

的index.php
    的common.php
    / IMG
    / JP

         
      

lang.jp.php
      / IMG

    
  

如果用户选择日语作为他们的语言并且脚本运行以从lang.jp.php获取所有文本,我也希望在/ jp中使用/ img目录中的图像。

所以我的问题是,如何将hrc更改为html中每个图像标记的正确/ img目录?是否可以使用php开关并将src设置为变量,并在声明图像名称之前调用该变量,如<img src="<?php echo($imgsrc);?>/image.jpg" />,并将路径动态分配给$ imgsrc?如果是这样,设置该变量的最佳方法是什么?

3 个答案:

答案 0 :(得分:1)

$ lang变量包含短语言代码(语言名称)

如果您在“jp”目录中有“jp”目录和“img”目录,那么您也可以执行以下操作。

<img src="<?php echo $lang; ?>/img/image.jpg" />

这样就变成了

<img src="jp/img/image.jpg" />

答案 1 :(得分:1)

@OpenCode有正确的想法,但可能更容易,而是继续使用你拥有的img文件夹,并在其中为每种语言创建一个新文件夹。

/img
    /jp
    /en
    /es
        /image.jpg

然后使用:

<img src="/img/<?php echo $lang; ?>/image.jpg" />

这样,如果您决定稍后添加更多语言,您的webroot就不会变得太乱。

答案 2 :(得分:1)

我很抱歉,但你所依赖的教程只是冰山一角。

如果你想制作100%开放,简单和快速的东西,请像我一样(厚颜无耻):

1 - 制作非常简单语言文件,例如仅包含关联的“ini”文件,例如:

text1 = my text
text2 = my text2
text3 = my text3
email_customer = Dear customer
...

通过这种方式,您可以轻松翻译它。

2 - 然后制作一个“php”缓存文件,创建一个你将包含的“类”文件。 3 - 制作一个包含翻译内容的翻译“php”类文件。在其中你可以编写这样的代码:

if language file more recent than cache file
  => create cache file
...
code to generate "language cache file"
...
include "language cache file"
...

3 - 将您的语言文件基于主机:使用$_SERVER['HTTP_HOST']。这是我的方式:

- if it's "fr.mysite.com" => it's french language
- if it's "es.mysite.com" => it's spanish language
- ... and so on ...
- if it's "www.mysite.com" => it's default language (your choice)

第1步非常非常重要,因为您只需向翻译人员发送适当的文件即可获得大量时间。没有头疼了。您将花费2-3天的时间来编写它,每种新语言将获得4-5天的时间。

对于最终(也是最难)的问题:(仅供参考,这是我第四次重写整个框架以包含这些内容,而我在这里解释的内容代表了几个月的开发,即使看起来很简单):multilangage文件。 这是我的目录:

templates/
|-- common
|   |-- css
|   |-- htm
|   |   `-- intranet
|   |-- img
|   |-- js
|   |   `-- openid
|   |-- pdf
|   `-- txt
|-- fr
|   |-- css
|   |-- htm
|   |-- img
|   |-- js
|   |-- pdf
|   `-- txt
`-- us
    |-- css
    |-- htm
    |-- img
    |-- js
    |-- pdf
    `-- txt

在您的“翻译类文件”代码中执行以下操作:

...
include "language cache file"
...
**after the include**
...
function get_expanded_path_file() {
  if file exists in language template directory
    return full "language" path + filename
  if file exists in "common" template directory
    return full "common" path + filename

  return "/" filename
}
...

现在我希望你能得到完整的想法。如果你想看到这样一个框架的实际行动,请看看我的最新网站(如果你认为它是垃圾邮件或其他什么,请删除我的链接):mysite 如果你明智地使用我的建议像Smarty这样的东西,你最终可能会像我一样:只做Php基础文件,让所有内容都转换为翻译者和webdesigner。仅供参考这个网站花了我两个星期的时间来开发,1天用法语和西班牙语进行翻译,并且... 3周时间同意网页设计(大声笑(或讽刺谁知道))!!!

希望这有帮助