Проблема с заменой CSS-изображения на многоязычном PHP-сайте - PullRequest
1 голос
/ 14 июня 2011

Я создаю многоязычный (испанский / английский) сайт с PHP и CSS.

У меня есть этот фрагмент кода в моем файле common.php, чтобы указать на разные файлы CSS в зависимости от языкапользователь определяет:

<?php
if ($_GET['lang'] == 'en')
$cssFile = 'english.css';
elseif ($_GET['lang'] == 'es')
$cssFile = 'espanol.css';
?>

Вот пример того, как выглядит мой файл english.css:

#rightHome h3 {
padding-top: 20px;
text-indent: -999px;
background: url(images/latestworkTitle.png) no-repeat;
background-position: 0 20px;
}

И мой файл espanol.css выглядит так:

#rightHome h3 {
padding-top: 20px;
text-indent: -999px;
background: url(images/latestworkTitleES.png) no-repeat;
background-position: 0 20px;
}

Также мой индекс выглядит так:

<?php
include_once 'common.php';
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Jimena Contreras | Film Scoring Composer</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link rel="alternate" type="application/rss+xml" title="Jimena Contreras's News Feed"  href="http://www.jimenacontreras.com/news.xml" />
<link rel='index' title='Jimena Contreras | Film Scoring Composer' href='http://www.jimenacontreras.com/' />
<link rel='prev' title='Biography' href='http://www.jimenacontreras.com/biography' />
<link rel='next' title='Resume' href='http://www.jimenacontreras.com/resume' />
<link rel="shortcut icon" href="favicon.ico">
<meta name="description" content="Jimena Contreras is a film scoring composer based in  Mexico City specialized in feature films, short films, documentaries, spots & TV Series." />
<meta name="keywords" content="film scoring, composer, compositora, bandas sonoras, feature films, short film, TV Series, peliculas" />
<meta name="robots" content="INDEX, FOLLOW" />
<link href="styles.css" rel="stylesheet" />
<link href="menuprueba.css" rel="stylesheet" />
<link rel="stylesheet" type="text/css" href="<?php echo $cssFile; ?>" />
<link rel="stylesheet" href="css/lightbox.css" type="text/css" media="screen" />
<link rel="stylesheet" href="css/videobox.css" type="text/css" media="screen" />
<script type="text/javascript" src="js/prototype.js"></script>
<script type="text/javascript" src="js/scriptaculous.js?load=effects,builder"></script>
<script type="text/javascript" src="js/lightbox.js"></script>
<script type="text/javascript" src="js/contact-form.js"></script>
<script type="text/javascript" src="js/mootools.js"></script>
<script type="text/javascript" src="js/swfobject.js"></script>
<script type="text/javascript" src="js/videobox.js"></script>
</head>
<body>
<div id="container">
<?php 
include ("header.php");
// Define our array of allowed $_GET values
$pass = array('home', 'biography', 'resume', 'filmography', 'contact', 'compositions- performed-or-broadcasted', 'resume2', 'resume3', '1015', 'i-laugh-not-to-cry', 'with-2-of-sugar', 'feminine-lips', 'crumbs-of-venus', 'pito-the-movie', 'the-mapuche-nation', 'creando-conciencia', 'building-unam', 'monsivais-honoris-causa', 'mexico-68-olympic-games', 'the-mexican-people', 'raining-colors', 'eyes-of-paradise');
// If the page is allowed, include it:
if (in_array($_GET['id'], $pass)) {
include ( $_GET['id'] . '.php'); 
}
// If there is no $_GET['id'] defined, then serve the homepage:
elseif (!isset($_GET['id'])) {
include ('home.php'); 
}   
?>
<?php 
include ("footer.php");
?>
</div>


</body>
</html>

И мой файл lang.en.php выглядит так:

<?php
/* 
------------------
Language: English
------------------
*/

$lang = array();

define('HEADING_NEWS', 'Latest News');
define('TEXT_NEWS1', '<span class="date">04.24.2011 </span>| <span class="news">Festival   Tour <br /><br /></span>Wishing the best of lucks for my last work "Crumbs from Venus",   shortfilm of Maira Bautista Neumann being sent to various festivals around the world.<br /><br />Good luck!');
define('TEXT_NEWS2', '<span class="date">02.26.2011 </span>| <span class="news">NYU! <br /><br /></span>Ready to start the adventure in NY in the ASCAP Workshop at NYU, will be taught by Sean Callery (24, La Femme Nikita).');
define('TEXT_NEWS3', '<span class="date">02.26.2011 </span>| <span class="news">New Project <br /><br /></span>Working on the soundtrack of P.I.T.O The Movie, a film by Fer Ortega, production by Yenin Escotto<br /><br />Click<a href="http://www.elpitolapelicula.com" target="_blank"> here </a> to go to the official website.');
?>

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

Для просмотра работающего сайта вы можете перейти на http://www.jimenacontreras.com

Любая помощь очень ценится, я надеюсь, что я достаточно ясен и что мой вопрос легко понятен.

Заранее спасибо.

JC Чавес С.

Ответы [ 2 ]

0 голосов
/ 14 июня 2011

Добавьте атрибут lang к тегу body (или там, где он применяется), он весьма универсален , поэтому многие теги HTML имеют его.

В CSS вы можете создавать селекторы, которые соответствуют только определенному языку, поэтому, например, выберите правильные фоновые изображения. Это делается с помощью селектора атрибутов .

Таким образом вы можете отделить данные (информацию о языке) от стиля (графика).

body[lang=en] #header { your engish graphic } 
body[lang=es] #header { your spanish graphic }

В зависимости от поддержки версии CSS существует также CSS 2.1: псевдокласс lang .

Ссылка: Разработка двуязычного веб-сайта: краткое тематическое исследование

0 голосов
/ 14 июня 2011

У вас нет частей '? Lang = es' или '? Lang = en' ни на одной странице, кроме заглавной.Следовательно, GET ничего не возвращает.Я лично рекомендую использовать структуру папок для разных языков вместо того, чтобы пытаться использовать один и тот же URL.Например: http://www.jimenacontreras.com/ и http://www.jimenacontreras.com//es вместо того, что вы делаете.Вы можете иметь текст на английском и испанском языках, сохраненный в БД, и настроить язык в файле включаемых конфигов (для каждой языковой папки будет отдельный файл конфигурации.

Если вы хотите придерживаться этого, вы можете установитьпеременную сеанса для cssFile и проверяйте ее в верхней части каждой страницы. Что-то вроде этого:

<?php
  if (isset($_GET['lang'])){
     if ($_GET['lang'] == 'en'){
      $cssFile = 'english.css';
  }
      elseif ($_GET['lang'] == 'es'){
  $cssFile = 'espanol.css';
  }
      $_SESSION['lang '] = $cssFile;
  }elseif(isset($_SESSION['lang'])){
   $cssFile =  $_SESSION['lang '];
  }
   ?>

Имея также кучу разных файлов css и javascript, это ужасная идея по скорости.

...