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


Dynamically change images directory based on language in PHP?

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

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

我知道这是2009年的,但我喜欢他们的做法,这对我的同事来说是最容易理解的,特别是因为我自己已经评论了这些文件。

这是替换站点中相关文本的一个很好的解决方案。我现在面临的问题源于这样一个事实,即并非任何给定网站上的所有单词都必须是文本。还有很多图像、导航按钮等也需要替换。

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

www

index . php
common.php
/img
/jp

lang.jp.php
/img

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

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

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

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

然后使用:

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

这样你的网页不会变得太乱,如果你决定以后添加更多的语言

$lang变量保存着短语言代码(语言名)

如果在"jp"目录下有"jp"目录和"img"目录,那么你也可以这样做。

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

变成

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

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

如果你想做一些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)

第一步非常重要,因为您只需将适当的文件发送给翻译人员即可获得大量时间。不再头疼了。你将花2-3天的时间来写它,每学一门新语言你将获得4-5天的时间。

对于最后(也是最难的)问题:(供参考,这是我第四次重写我的整个框架来包含这些东西,我在这里解释的内容代表了几个月的开发,尽管它看起来很简单):多语言文件。下面是我的目录:

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

在你的"translator class file"代码中做如下操作:

...
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基础文件,把一切交给翻译和网页设计师。顺便说一下,这个网站花了我两周的时间来开发,1天的时间翻译成法语和西班牙语,还有…3周的时间来同意这个网页设计(哈哈(或讽刺谁知道))!!

希望能有所帮助