ACCES INTERZIS | blog de programare si securitate IT


Am vazut pe net multe siteuri cu continutul prezentat in mai multe limbi. Ceea ce este un lucru bun si imbucarator. Gresita, sau cel putin grosiera, era modalitatea de realiza acest lucru si anume se crea pentru fiecare limba in parte un folder nou in care se stocau fisierele ce alcatuiesc websiteul. Acest lucru are multiple dezavantaje:

  • se ocupa inutil spatiu pe server
  • se pierde timp mult atunci cand clientul cere o modificare sau un update
  • iti dai cu firma in cap daca codezi in stilul asta websiteurile

De aceea voi prezenta mai josĀ o tehnica de a genera continutul unui website mult mai elegant folosindu-ma de limbajul de scripting server-side PHP.

Folosind aceasta tehnica websiteul este indexat de catre motoarele de cautare (Google, Yahoo, Bing, Ask.com) in toate limbile in care este afisat continutul (engleza, romana, franceza, germana, italiana, spaniola etc.). Scriptul PHP genereaza in toate limbileĀ pana si titlul si metadatele paginii.

mlwebsite.php – pagina principala a websiteului

<?php
#1
@include('includes/choose_lang.inc.php');

#2
@include('langs/'.$lang.'.php');
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title><?php echo $home_seo['title']; ?></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="description" content="<?php echo $home_seo['description']; ?>" />
<meta name="keywords" content="<?php echo $home_seo['keywords']; ?>" />
<meta name="abstract" content="<?php echo $home_seo['abstract']; ?>" />
<meta name="author" content="AccesInterzis" />
<meta name="copyright" content="AccesInterzis" />
<meta name="robots" content="index,follow" />
<meta name="revisit-after" content="7 days" />

<link href="http://www.accesinterzis.ro/myportofolio/css/reset.css" type="text/css" rel="stylesheet" media="all" />
<link href="css/mlwebsite.css" type="text/css" rel="stylesheet" media="all" />

</head>

<body>
<?php include('includes/langs_menu.inc.php'); ?>

<div id="main">
	<?php include('includes/header.inc.php'); ?>

	<ul id="left_side">
		<li>
			<h2><?php echo $home_content['html_title']; ?></h2>
			<p><?php echo $home_content['html_description']; ?></p>
		</li>

		<li>
			<h2><?php echo $home_content['css_title']; ?></h2>
			<p><?php echo $home_content['css_description']; ?></p>
		</li>

		<li>
			<h2><?php echo $home_content['js_title']; ?></h2>
			<p><?php echo $home_content['js_description']; ?></p>
		</li>
	</ul>

	<ul id="right_side">
		<li>
			<h2><?php echo $home_content['php_title']; ?></h2>
			<p><?php echo $home_content['php_description']; ?></p>
		</li>

		<li>
			<h2><?php echo $home_content['mysql_title']; ?></h2>
			<p><?php echo $home_content['mysql_description']; ?></p>
		</li>

		<li>
			<h2><?php echo $home_content['xml_title']; ?></h2>
			<p><?php echo $home_content['xml_description']; ?></p>
		</li>
	</ul>

	<?php include('includes/footer.inc.php'); ?>
</div>
</body>
</html>

Am apelat in fisier cateva surse externe:
choose_lang.inc.php – fisierul care stabileste in ce limba se va afisa continutul siteului

<?php
/*
Specific limba default in care va fi afisat continutul websiteului.
*/
if (!isset($_GET['lang'])) {
	$lang = 'en';
} else {
	#1.1
	/*
	Si validez valorile ce se transmit prin URL. Valoarea trebuie sa contina 2 litere.
	Daca nu se indeplineste aceasta conditie inseamna ca ceva e dubios si afisam continutul
	in limba default adica limba engleza.
	*/
	$lang = trim($_GET['lang']);

	if (!preg_match('/^[a-z]{2}$/', $lang)) {
		$lang = 'en';
	}
}
?>

ro.php – fisierul in care se afla continutul siteului in limba romana. Fisierul en.php este identic cu ro.php. Doar traducerea continutului difera. Atentie! Cheile array-urilor nu se traduc. Doar valorile se traduc. Aceste fisiere se afla in folderul langs din root-ul websiteului. Daca vrem sa adaugam inca o limba, de exemplu limba franceza, nu trebuie decat sa cream un fisier fr.php in care vom baga continutul websiteului in limba franceza.

<?php
$common_content = array(
'en_flag' => 'Engleza',
'ro_flag' => 'Romana',
'header' => 'Ce limbaje trebuie sa stiu ca sa dezvolt aplicatii web?',
'copyright' => 'Site dezvoltat de <a href="http://www.accesinterzis.ro"
				title="Programare | Web development | Web design | securitate IT | SEO"
				target="_blank">www.accesinterzis.ro</a> &copy; 2010. Toate drepturile rezervate.'
);

if (basename($_SERVER['PHP_SELF']) == 'mlwebsite.php') {
	$home_seo = array(
		'title' => 'Cum fac un website multilingvistic?',
		'description' => 'Acest script PHP prezinta continutul unui website in mai multe limbi.',
		'keywords' => 'limbi,php,website,romana,engleza,italiana',
		'abstract' => 'Acest script PHP prezinta continutul unui website in mai multe limbi.'
	);

	$home_content = array (
	'html_title' => '<a href="mlwebsite.php?lang='.$lang.'" title="Limbaj de marcaj a hypertextului">HTML</a>',
	'html_description' => 'HTML este o forma de marcare orientata catre prezentarea documentelor text pe o singura pagina, utilizand
					   un software de redare specializat, numit agent utilizator HTML, cel mai bun exemplu de astfel de software
					   fiind browserul web. HTML furnizeaza mijloacele prin care continutul unui document poate fi adnotat cu diverse
					   tipuri de metadate si indicatii de redare. Indicatiile de redare pot varia de la decoratiuni minore ale textului,
					   cum ar fi specificarea faptului ca un anumit cuvant trebuie subliniat sau ca o imagine trebuie introdusa, pana la
					   scripturi sofisticate....
					   <br /><a href="mlwebsite.php?lang='.$lang.'" title="mai mult">[mai mult]</a>',

	'css_title' => '<a href="mlwebsite.php?lang='.$lang.'" title="Foi de stil in cascada">CSS</a>',
	'css_description' => 'CSS este destinat in primul rand pentru a permite separarea continutului documentului (scrise in HTML sau un limbaj
					  de markup similare) de la prezentarea document, inclusiv elemente, cum ar fi structura, culori si fonturi.
					  Aceasta separare se poate imbunatati continutul de accesibilitate, sa asigure o mai mare flexibilitate si de control
					  in caietul de sarcini al caracteristicilor de prezentare, permite mai multe paginila formatarea parts, si de a reduce
					  complexitatea si repetitia in continutul structurale...
					  <br /><a href="mlwebsite.php?lang='.$lang.'" title="mai mult">[mai mult]</a>',

	'js_title' => '<a href="mlwebsite.php?lang='.$lang.'" title="Limbaj de scripting client-side">Javascript</a>',
	'js_description' => 'JavaScript este un limbaj de programare orientat obiect bazat pe conceptul prototipurilor. Este folosit mai ales
					 pentru introducerea unor functionalitati in paginile web, codul Javascript din aceste pagini fiind rulat de catre browser.
					 Limbajul este binecunoscut pentru folosirea sa in construirea siturilor web, dar este folosit si pentru acesul la obiecte
					 incastrate (embedded objects) in alte aplicatii. A fost dezvoltat initial de catre Brendan Eich de la Netscape
					 Communications Corporation sub numele de Mocha, apoi LiveScript, si denumit in final JavaScript...
					 <br /><a href="mlwebsite.php?lang='.$lang.'" title="mai mult">[mai mult]</a>',

	'php_title' => '<a href="mlwebsite.php?lang='.$lang.'" title="Limbaj de scripting server-side">PHP</a>',
	'php_description' => 'PHP este un limbaj de programare. Numele PHP provine din limba engleza si este un acronim recursiv :
					  Php: Hypertext Preprocessor. Folosit initial pentru a produce pagini web dinamice, este folosit pe scara larga
					  in dezvoltarea paginilor si aplicatiilor web. Se foloseste in principal inglobat in codul HTML, dar incepand de
					  la versiunea 4.3.0 se poate folosi si in mod "linie de comanda" (CLI)...
					  <br /><a href="mlwebsite.php?lang='.$lang.'" title="mai mult">[mai mult]</a>',

	'mysql_title' => '<a href="mlwebsite.php?lang='.$lang.'" title="Limbaj de interogare a bazelor de date">MySQL</a>',
	'mysql_description' => 'Desi este folosit foarte des impreuna cu limbajul de programare PHP, cu MySQL se pot construi aplicatii in orice
						limbaj major. Exista multe scheme API disponibile pentru MySQL ce permit scrierea aplicatiilor in numeroase
						limbaje de programare pentru accesarea bazelor de date MySQL, cum are fi: C, C++, C#, Java, Perl, PHP,
						Python, FreeBasic, etc., fiecare dintre acestea folosind un tip spefic API. O interfata de tip ODBC denumita
						MyODBC permite altor limbaje de programare ce folosesc aceasta interfata, sa interactioneze cu bazele de date
						MySQL cum ar fi ASP sau Visual Basic...
						<br /><a href="mlwebsite.php?lang='.$lang.'" title="mai mult">[mai mult]</a>',

	'xml_title' => '<a href="mlwebsite.php?lang='.$lang.'" title="Limbaj extensibil de marcaj">XML</a>',
	'xml_description' => 'eXtensible Markup Language(XML) este un meta-limbaj de marcare recomandat de Consortiul Web pentru crearea de alte
					  limbaje de marcare, cum ar fi XHTML, RDF, RSS, MathML, SVG, OWL etc. Aceste limbaje formeaza familia de limbaje XML.
					  Meta-limbajul XML este o simplificare a limbajului SGML (din care se trage si HTML) si a fost proiectat in scopul
					  transferului de date intre aplicatii pe internet, descriere structura date. XML este acum si un model de stocare a
					  datelor nestructurate si semi-structurate in cadrul bazelor de date native XML....
					  <br /><a href="mlwebsite.php?lang='.$lang.'" title="mai mult">[mai mult]</a>'
	);
}
?>

langs_menu.inc.php – fisierul care genereaza meniul de limbi

<ul id="langs">
	<?php
	$langs = array('ro', 'en');

	foreach ($langs as $item) {
		echo '<li>';
		echo '<a href="http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].'?lang='.$item.'" title="'.$common_content[$item.'_flag'].'">';
		echo '<img src="images/'.$item.'.gif" alt="'.$item.'" title="'.$common_content[$item.'_flag'].'" />';
		echo '</a>';
		echo '</li>';
	}
	?>
</ul>

header.inc.php – fisierul care contine headerul websiteului

<div id="header">
	<h1>
		<a href="mlwebsite.php?lang=<?php echo $lang; ?>" title="<?php echo $common_content['header']; ?>"><?php echo $common_content['header']; ?></a>
	</h1>
</div>

footer.inc.php – fisierul care contine footerul websiteului

<div id="footer">
	<?php echo $common_content['copyright']; ?>
</div>

Toate fisierele apelate cu functia PHP include() contin bucati de cod comune tuturor paginilor. Astfel, editand un fisier include modificarea se face automat in toate paginile websiteului casting timp.

Descrierile limbajelor sunt luate de pe Wikipedia.

Post to Twitter Publica acest articol pe Twitter

Articole asemanatoare:

Publicat de: admin
Ultima modificare: 05, 2010, 18:27

Etichete
Etichete:
Categorii: programare


 

Comentarii lasate » (4 Total)

 
  1. Maxi says:

    Parerea mea e ca nu iti dai cu firma in cap daca faci cu foldere e mai greu dar am vazut oameni care sunte de acord cu varianta asta la situri mici 4,6 ….pagin la cele mari e foarte nasol :P . In legatura cu scriptu asta e un translator sau tot tu trebe sa traduci ?

  2. Si la un script wordpress tot asa procedam? Ca nu prea cred ca o sa mearga. Si pe mine m-ar interesa sa fac siteul accesibil in mai multe limbi si nu prea stiu cum si am siteul pe wordpress si nu vreau sa folosesc pluginul ptr google translate ptr ca imi apare bara aia sus.

  3. admin says:

    Majoritatea cand vor sa faca un blog pe wordpress in doua limbi instaleaza de doua ori wp-ul. Cum am facut si eu. Sunt unele platforme, ca Dolphin de exemplu, care atunci cand au fost create au fost create si cu fisiere de limba care iti permit sa bagi textul in mai multe limbi instaland plartforma doar o singura data. WP-ul nu cred ca a fost gandit asa. Poate in versiunile viitoare o sa apar si feature-ul asta.

  4. Jocuri says:

    Pe mine pe wordpress ma interesa sa fac site-ul in mai multe limbi. Defapt doar 2. Romana care o am deja pe site si mai vreau sa-l fac si in engleza. Deci singura metoda ar fi sa mai instalez o data wordpress. Dar nu imi dau seama cum o sa bag continutul in engleza. Cand bag un post vreau sa apara automat si in cealalata limba automat. Sa nu bag de 2 ori acelasi post in 2 limbi. Daca vrei sa ma ajuti si pe mine te rog baga id-ul asta: neodesignstudio. Multumesc

Lasa un comentariu

XHTML: Poti folosi urmatoarele taguri HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>