Динамически менять каталог изображений на основе языка в PHP? - PullRequest
1 голос
/ 31 октября 2011

Я работаю над созданием каркаса, из которого можно создавать сайты малого и среднего размера на нескольких языках.Я использую метод из этого урока:

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

Я знаю, что это с 2009 года, но мне нравится, как они это сделали, и это будет легче понять для моих коллег,тем более, что я сам закомментировал bejeezus из файлов.

Это хорошее решение для замены соответствующего текста на сайте.Проблема, с которой я сейчас сталкиваюсь, связана с тем, что не все слова на данном сайте обязательно являются текстовыми.Существует множество изображений, кнопок навигации и т. Д., Которые также необходимо заменить.

Я подумал о том, чтобы перейти в common.php (как описано в руководстве) и добавить условие, которое изменится.каталог изображений (img / или image /).Например, если моя файловая структура выглядела так:

www

index.phpcommon.php/ IMG/ JP

lang.jp.php/ img

Если пользователь выбирает японский язык в качестве своего языка, и скрипт запускается для получения всего текста из lang.jp.php, я хотел бы использовать изображения вкаталог / img внутри / jp.

Так что мой вопрос, как бы я изменил src на соответствующий каталог / img для каждого тега изображения в html?Можно ли использовать переключатель php и установить src в переменную и просто вызвать эту переменную перед указанием имени изображения, например <img src="<?php echo($imgsrc);?>/image.jpg" />, и динамически назначить путь к $ imgsrc?Если да, то как лучше установить эту переменную?

Ответы [ 3 ]

1 голос
/ 31 октября 2011

@ OpenCode имел правильную идею, но, возможно, вместо этого было бы проще использовать имеющуюся папку img и создать в ней новую папку для каждого языка.

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

Затем используйте:

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

Таким образом, ваш webroot не станет слишком грязным, если вы решите добавить больше языков позже.

1 голос
/ 31 октября 2011

Извините, но учебник, на который вы полагаетесь, - это только верхушка айсберга.

Если вы хотите сделать что-то на 100% открытое, легкое и быстрое, делайте как я (дерзость)в разобранном виде):

1 - создать очень файл простых языков, например файлы "ini", содержащие только ассоциации, например:

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

Таким образом, вы сможетечтобы перевести это очень легко.

2 - Затем создайте файл кэша "php", который создаст файл "class", который вы включите.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 дней для каждого нового языка.

И для последней (и самой сложной) проблемы: (К вашему сведению, я в четвертый раз переписываю свойвся структура, включающая эти вещи, и то, что я объясняю здесь, представляет собой много месяцев разработки, даже если это кажется простым): многоязыковые файлы.Вот как выглядит мой каталог:

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, и позволить все переводчикам, и веб-дизайнер.К вашему сведению, этот сайт занял у меня две недели, 1 день, чтобы перевести на французский и испанский, и ... 3 недели, чтобы согласиться с веб-дизайном (смеется (или сарказм, который знает)) !!!

Надеюсь, этопомогает

1 голос
/ 31 октября 2011

Переменная $ lang содержит краткий код языка (имя языка)

Если у вас есть каталог "jp" и каталог "img" внутри каталога "jp", то вы также можете сделать следующее.

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

, чтобы оно стало

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