Joomla! …because open source matters
DokuWiki is a standards compliant, simple to use Wiki which does not need databases.
Vim This is the Vi IMproved version of the well known VI programmer's editor distributed with most UNIX systems. (Debian: apt-get install vim)
For information on how to use the php gettext function, please go to melaxis.com website.
Below are the steps followed in order to make everything working:
apt-get upgrade apt-get install aspell aspell-fr aspell-... apt-get install locales dpkg-reconfigure locales #And select what you need locale -a # To see installed locales apt-get install poedit #gettext catalog editor which scans PHP files and build translation files apt-get install potool #A program to aid manipulation of gettext po files
You can use poedit through an SSH connection using the X redirection.
To use with the locales, people like flags. On Debian, it exist a package that provides all this flags:
apt-get install link-monitor-applet
which will provide in the /usr/share/link-monitor-applet/flags directory all flags in svg format.
Personally I prefer to have png files which are better supported by all navigators and for that you can use the svg2png.sh script below:
apt-get install librsvg2-bin
which provides the rsvg program.
To convert all this flags at once, you can use the small script below:
#!/bin/bash resol=32 for svg in `ls ./svg` do rsvg-convert -h "$resol" -w "$resol" "svg/${svg}" -o "png/${svg}.$resol.png" done
the tree structure in my case was:
sylvain:/usr/share/link-monitor-applet# tree -L 2 . |-- flags | |-- png | |-- svg | `-- svg2png.sh
root@siro2:/# tree -L 3 /www/skeleton.irovision.ch/ /www/skeleton.irovision.ch/ |-- index.php -> skeleton/index.php `-- skeleton |-- index.php |-- awstats -> /www/awstats/awstats/wwwroot/ |-- img -> /www/img/ |-- lib -> /www/lib/ |-- locales -> /www/lib/locales/ |-- metas | |-- lib_metas.php -> /www/lib/lib_metas.php | |-- metas.anotherSkeleton.php | |-- metas.common.php | |-- metas.main.php | |-- metas.skeleton.php |-- page | |-- anotherSkeleton.php | |-- config.php | |-- info.php | |-- language.bck.php | |-- language.php | |-- lib_dbconnection.php -> /www/lib/lib_dbconnection.php | |-- lib_functions.php -> /www/lib/lib_functions.php | |-- lib_language.php -> /www/lib/lib_language.php | |-- lib_validators.php -> /www/lib/lib_validators.php | |-- main.php | |-- menu.php | |-- skeleton.php |-- profiles | |-- core | `-- profile |-- script | |-- lib_menu.js -> /www/lib/lib_menu.js | |-- script.anotherSkeleton.js | |-- script.main.js | |-- script.skeleton.js `-- style |-- screen-sw.css |-- screen-ws.css |-- style.all.css |-- style.aural.css |-- style.braille.css |-- style.handheld.css |-- style.print.css `-- style.screen.css
Some of this links (ln -s) are hard coded into the apache2 configuration files (e.g /etc/apache2/conf.d). Example:
root@proxy:/etc/apache2/conf.d# cat awstats Alias /awstatsicons/ "/www/awstats/awstats/wwwroot/icon/" Alias /awstats/js/ "/www/awstats/awstats/wwwroot/js/" ScriptAlias /awstats/ "/www/awstats/awstats/wwwroot/cgi-bin/" <Directory "/www/awstats/awstats/wwwroot/cgi-bin"> AllowOverride None Options ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all </Directory>
Location: /www/skeleton.irovision.ch/skeleton
Location: /www/skeleton.irovision.ch/skeleton
<?php ob_start(); //Start stream buffering require_once("page/config.php"); //include configuration file require_once("page/lib_language.php"); //include languages functions require_once("page/lib_validators.php"); //includs validators and more... require_once("page/menu.php"); //inclusion du menu $lInit=initializeLocales(DEFAULT_LANGUAGE); $page="main"; $metas="metas.$page"; $func=NULL; if(isset($_GET['page'])){ //echo "Getting page ($_GET[page])...<br>"; if(file_exists("page/$_GET[page].php")){ //echo "existing page(page/$_GET[page].php)...<br>"; $page=$_GET['page']; //What is the request? } } if(file_exists("metas/metas.$page.php")){ $metas="metas.$page"; } /*echo '<?xml version="1.0" encoding="ISO-8859-1"?>'; //Encoding*/ ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html lang="<?php echo getLanguage('en');?>"> <head profile="<?php echo HOST.'/profiles/core';?>"> <?php require_once("metas/$metas.php");?> </head> <body> <noscript> <p> <?php echo _("WARNING: Your browser seems not able to hande javascript"); ?> . </p> </noscript> <div id="topBar"> <div id="title"> </div> </div> <div id="leftSideBar"> <div id="lang"> <?php $flagSize=32; $locales=array('en_US','fr_FR','de_DE'); echo localesForm("/index.php?page=language&function=changeLanguage",$locales,$flagSize); ?> </div> <div id="menu"> <?php echo menuForm(); ?> </div> <div id="webmaster"> <? echo validators(); ?> </div> </div> <div id="main"> <?php include("page/$page.php"); ?> </div> <div id="rightSideBar"> <div id="addons"> <?php if (isset($_SESSION['rightSideBarAddon'])){ include_once($_SESSION['rightSideBarAddon']); } ?> </div> <div id="bottomBar"> </div> </div> <!--<script type="text/javascript" src="/awstats/js/awstats_misc_tracker.js"></script> <noscript> <p> <img src="/awstats/js/awstats_misc_tracker.js?nojs=y" height="0" width="0" style="display: none" alt="Awstat Image"> </p> </noscript> --> </body> </html> <?php ob_end_flush(); //Send the stream at once to the browser client ?>
Location: /www/skeleton.irovision.ch/skeleton/page
Location: /www/skeleton.irovision.ch/skeleton/page
<?php session_start(); //clear everythings that are in the rightSideBar addon div unset($_SESSION['rightSideBarAddon']); $lInit=false; $protocol="http"; //$sprotocol="https"; $sprotocol="https"; //print_r($_SERVER); if(isset($_SESSION["id_author"])) $protocol=$sprotocol; if (isset($_SERVER['HTTP_HOST'])){ define("FQDN","skeleton.irovision.ch"); //define("FQDN",$_SERVER['HTTP_HOST']); define("HOST",$protocol."://".FQDN); define("SHOST",$sprotocol."://".FQDN); }else{ define("FQDN","skeleton.irovision.ch"); define("HOST",$protocol."://".FQDN); define("SHOST",$sprotocol."://".FQDN); } define("DB_HOST","localhost"); define("DB_USER" ,"dbskeleton"); define("DB_PWD","dbskeletonpw"); define("DB_COMMON","skeleton_common"); define("EMAIL_ADDRESS","it@irovision.ch"); define("DEFAULT_LANGUAGE","en_US"); //AFTER THE PHP END TAG THEY SHOULD NOT BE ANY MORE CARRIEGE RETURN //otherwise they would be supplementary CR in the javascript response.text ?>
Location: /www/skeleton.irovision.ch/skeleton/page
<?php require_once("config.php"); require_once("lib_language.php"); function getMenuForm(){ echo menuForm(); } function menuForm(){ //print_r($_SERVER); $tabindex=0; $language=getLanguage(DEFAULT_LANGUAGE); $str=""; $str.='<div class="unorderedList">'; $str.='<a '; $str.='name="Home" '; $str.='href="'.HOST.'/index.php" '; $str.='hreflang="'.$language.'" '; $tabindex++; $str.='tabindex="'.$tabindex.'"'; $str.='>'; $str.=_('Home'); $str.='</a>'; $str.='</div>'; /* if($_SESSION["id_author"]) { $str.='<div '; $str.='class="unorderedList" '; $str.='onclick="selectMenu(\'register\',\'getGetMyCard\'); return false;" '; $str.='onkeypress="selectMenu(\'register\',\'getGetMyCard\'); return false;" '; $str.='>'; $str.='<a '; $str.='name="Card" '; $str.='href="'.SHOST.'/index.php?page=register&function=getGetMyCard" '; $str.='hreflang="'.$language.'" '; $tabindex++; $str.='tabindex="'.$tabindex.'"'; $str.='>'; $str.=_('My Account'); $str.='</a>'; $str.='</div>'; }else{ $str.='<div '; $str.='class="unorderedList" '; $str.='>'; $str.='<a '; $str.='name="Registration" '; $str.='href="'.SHOST.'/index.php?page=register&function=getRegistrationForm" '; $str.='hreflang="'.$language.'" '; $tabindex++; $str.='tabindex="'.$tabindex.'"'; $str.='>'; $str.=_('Register'); $str.='</a>'; $str.='</div>'; } */ $str.='<div '; $str.='class="unorderedList" style="color: red" '; $str.='onclick="selectMenu(\'skeleton\',\'getSkeletonFunction\'); return false;" '; $str.='onkeypress="selectMenu(\'skeleton\',\'getSkeletonFunction\'); return false;" '; $str.='>'; $str.='<a '; $str.='name="Skeleton" '; $str.='href="'.HOST.'/index.php?page=skeleton&function=getSkeletonFunction" '; $str.='hreflang="'.$language.'" '; $tabindex++; $str.='tabindex="'.$tabindex.'"'; $str.='>'; $str.=_('Skeleton'); $str.='</a>'; $str.='</div>'; $str.='<div '; $str.='class="unorderedList" style="color: red" '; $str.='onclick="selectMenu(\'anotherSkeleton\',\'getSkeletonFunction\'); return false;" '; $str.='onkeypress="selectMenu(\'anotherSkeleton\',\'getSkeletonFunction\'); return false;" '; $str.='>'; $str.='<a '; $str.='name="AnotherSkeleton" '; $str.='href="'.HOST.'/index.php?page=anotherSkeleton&function=getSkeletonFunction" '; $str.='hreflang="'.$language.'" '; $tabindex++; $str.='tabindex="'.$tabindex.'"'; $str.='>'; $str.=_('Another Skeleton'); $str.='</a>'; $str.='</div>'; $str.='<div '; $str.='class="unorderedList" style="color: red" '; $str.='onclick="selectMenu(\'language\',\'getGetLocale\'); return false;" '; $str.='onkeypress="selectMenu(\'language\',\'getGetLocale\'); return false;" '; $str.='>'; $str.='<a '; $str.='name="language" '; $str.='href="'.HOST.'/index.php?page=language&function=getGetLocale" '; $str.='hreflang="'.$language.'" '; $tabindex++; $str.='tabindex="'.$tabindex.'"'; $str.='>'; $str.=_('Language'); $str.='</a>'; $str.='</div>'; $str.='<div '; $str.='class="unorderedList" style="color: red" '; $str.='onclick="selectMenu(\'info\',\'getInfo\'); return false;" '; $str.='onkeypress="selectMenu(\'info\',\'getInfo\'); return false;" '; $str.='>'; $str.='<a '; $str.='name="info" '; $str.='href="'.HOST.'/index.php?page=info&function=getInfo" '; $str.='hreflang="'.$language.'" '; $tabindex++; $str.='tabindex="'.$tabindex.'"'; $str.='>'; $str.=_('Info'); $str.='</a>'; $str.='</div>'; /*For registered user only*/ if($_SESSION["id_author"]) { /***ABSTRACT***/ /* $str.='<div '; $str.='class="unorderedList" '; $str.='onclick="selectMenu(\'registerAbstract\',\'getPreviewAbstract\'); return false;" '; $str.='onkeypress="selectMenu(\'registerAbstract\',\'getPreviewAbstract\'); return false;" '; $str.='>'; $str.='<a '; $str.='name="PreviewAbstract" '; $str.='href="'.SHOST.'/index.php?page=registerAbstract&function=getPreviewAbstract" '; $str.='hreflang="'.$language.'" '; $tabindex++; $str.='tabindex="'.$tabindex.'"'; $str.='>'; $str.=_('Abstract'); $str.='</a>'; $str.="</div>"; $str.='<div '; $str.='class="menuListItemBlock" '; $str.='>'; $str.='<div '; $str.='class="menuListItem" '; $str.='onclick="selectMenu(\'registerAbstract\',\'abstractForm\',\'page/entities.html\'); return false;" '; $str.='onkeypress="selectMenu(\'registerAbstract\',\'abstractForm\',\'page/entities.html\'); return false;" '; $str.='>'; $str.='<a '; $str.='name="RegisterAbstract" '; $str.='href="'.SHOST.'/index.php?page=registerAbstract&function=abstractForm" '; $str.='hreflang="'.$language.'" '; $tabindex++; $str.='tabindex="'.$tabindex.'"'; $str.='>'; $str.=_('edit abstract'); $str.='</a>'; $str.='</div>'; $str.='</div>'; */ } if($_SESSION["id_author"]) { /* $str.='<div '; $str.='class="unorderedList" '; $str.='>'; $str.='<a '; $str.='name="Logout" '; $str.='href="'.SHOST.'/index.php?page=login&function=logout" '; $str.='hreflang="'.$language.'" '; $tabindex++; $str.='tabindex="'.$tabindex.'"'; $str.='>'; $str.=_('Logout'); $str.='</a>'; $str.='</div>'; } else { $str.='<div '; $str.='class="unorderedList" '; $str.='>'; $str.='<a '; $str.='name="Login" '; $str.='href="'.SHOST.'/index.php?page=login&function=loginForm" '; $str.='hreflang="'.$language.'" '; $tabindex++; $str.='tabindex="'.$tabindex.'"'; $str.='>'; $str.=_('Login'); $str.='</a>'; $str.='</a>'; $str.='</div>'; */ } return $str; } //AFTER THE PHP END TAG THEY SHOULD NOT BE ANY MORE CARRIEGE RETURN //otherwise they would be supplementary CR in the javascript response.text ?>
Location: /www/skeleton.irovision.ch/skeleton/page
<?php $str =""; $str.='<div class="centre">'; $str.='<div class="milieu">'; $str.='<h3>'; $str.=_('News'); $str.=' !'; $str.='</h3>'; $str.='<h3>'; $str.=_('IRO\'s SKELETON'); $str.=' !'; $str.='</h3>'; $str.='</div>'; $str.='</div>'; echo $str; //AFTER THE PHP END TAG THEY SHOULD NOT BE ANY MORE CARRIEGE RETURN //otherwise they would be supplementary CR in the javascript response.text ?>
Location: /www/skeleton.irovision.ch/skeleton/page
<?php require_once("config.php"); require_once("lib_dbconnection.php"); require_once("lib_functions.php"); function getSkeletonFunction(){ $fields=array("in1","in2","in3"); $ajax=false; $ajax=getOptions("ajax",false); foreach($fields as $key){ ${$key}=NULL; ${$key}=getOptions($key,$ajax); //echo $key." ".${$key}." <br>"; } echo skeletonFunction($in1,$in2,$in3); } function skeletonFunction($in1,$in2,$in3){ $str=""; $str.=_("This is the skeleton function"); return $str; } callFunction(__FILE__); cleanUpDB(); //AFTER THE PHP END TAG THEY SHOULD NOT BE ANY MORE CARRIEGE RETURN //otherwise they would be supplementary CR in the javascript response.text ?>
Location: /www/skeleton.irovision.ch/skeleton/profiles
Location: /www/skeleton.irovision.ch/skeleton/profiles
Location: /www/skeleton.irovision.ch/skeleton/profiles
Location: /www/skeleton.irovision.ch/skeleton/script
Location: /www/skeleton.irovision.ch/skeleton/script
function aMain(){ }
Location: /www/skeleton.irovision.ch/skeleton/script
function aSkeleton(){ }
Location: /www/skeleton.irovision.ch/skeleton/style
Creates:
`-- style |-- screen-sw.css |-- screen-ws.css |-- style.all.css |-- style.aural.css |-- style.braille.css |-- style.handheld.css |-- style.print.css `-- style.screen.css
skeleton: /www/skeleton.irovision.ch/skeleton/metas
Location: /www/skeleton.irovision.ch/skeleton/metas
<?php require_once('lib_metas.php'); function commonMetas($filename){ $str=""; //echo "Entering filename: $filename<br>"; $path_part=pathinfo($filename); $rootDirectory=$_SERVER['DOCUMENT_ROOT']; $dirname=$path_part['dirname']; $filename=$path_part['filename']; $extension=$path_part['extension']; $filename_array= explode('.', $filename); $explosionCounter=count($filename_array); //echo "explosion: $explosionCounter<br>"; if( $explosionCounter > 1 ){ //print_r($filename_array); $filename=$filename_array[$explosionCounter-1]; } /* echo "Document Root: $rootDirectory<br>"; echo "dirname $dirname<br>"; echo "filename $filename<br>"; echo "extension $extension<br>"; */ $PageRootDir="$rootDirectory/page"; $MetasRootDir="$rootDirectory/metas"; $ScriptRootDir="$rootDirectory/script"; $StyleRootDir="$rootDirectory/style"; //$targetFile=str_replace("metas","page",$targetFile); $str.='<base href="'.HOST.'">'; /*META*/ $str.='<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">'; $str.=lastRevisionDate("$PageRootDir/$filename.php",$filename); /*LINK*/ /*STYLESHEET*/ $cssType=array('all','aural','braille','embossed','handheld','print','projection','screen'); //Include CSS specific to the whole web site foreach ($cssType as $key){ $str.=linkStyleSheet("$StyleRootDir/style.$key.css","style/style.$key.css",$key); } //Include CSS specific to the requested page foreach ($cssType as $key){ $str.=linkStyleSheet("$StyleRootDir/style.$filename.$key.css","style/style.$filename.$key.css",$key); } /*ALTERNATE STYLESHEET*/ //$str.='<link rel="alternate stylesheet" type="text/css" href="styles/screen-print.css" title="Print">'; //$str.='<link rel="alternate stylesheet" type="text/css" href="styles/screen-ws.css" title="White + Black">'; //$str.='<link rel="alternate stylesheet" type="text/css" href="styles/screen-sw.css" title="Black + White">'; /*SCRIPT*/ //Include common scripts // Call Prototype javascript framwork (Simplify AJAX and DOM)--> $str.=includeScript("$rootDirectory/lib/prototype.js","lib/prototype.js"); // Call Scriptaculous javascript framwork (visual effects) --> $str.=includeScript("$rootDirectory/lib/scriptaculous/scriptaculous.js","lib/scriptaculous/scriptaculous.js?load=effects"); //Call Proprietary (s.bolay) frameworks $str.=includeScript("$rootDirectory/lib/lib_variables.js","lib/lib_variables.js"); $str.=includeScript("$rootDirectory/lib/lib_menu.js","lib/lib_menu.js"); //Include script file linked to the actual page $str.=includeScript("$ScriptRootDir/$filename.js","script/script.$filename.js"); return $str; } //AFTER THE PHP END TAG THEY SHOULD NOT BE ANY MORE CARRIEGE RETURN //otherwise they would be supplementary CR in the javascript response.text ?>
Location: /www/skeleton.irovision.ch/skeleton/metas
<? include("metas.common.php"); $str=""; $str=commonMetas(__FILE__); //For details see http://eis.bris.ac.uk/~cckhrb/webdev/code/html/meta_w3c.htm $str.="<title>Main - This is an IRO's website example!</title>"; $str.='<meta name="author" content="Sylvain Bolay">'; $str.='<meta name="generator" content="VIM - Vi IMproved, version 7.0.235">'; $str.='<meta name="description" content="This is the main page">'; $str.='<meta name="keywords" content="IRO Main page, an Example, something else">'; $str.='<meta name="robots" content="aRobots">'; $str.='<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">'; $str.='<meta http-equiv="reply-to" content="it@irovision.ch (Sylvain Bolay)">'; //$str.="<meta http-equiv=\"expires\" content=\"aDate\">"; //$str.="<meta http-equiv=\"refresh\" content=\"aRefresh\">"; echo $str; //AFTER THE PHP END TAG THEY SHOULD NOT BE ANY MORE CARRIEGE RETURN //otherwise they would be supplementary CR in the javascript response.text ?>
Location: /www/skeleton.irovision.ch/skeleton/metas
<? include("metas.common.php"); $str=""; $str=commonMetas(__FILE__); //For details see http://eis.bris.ac.uk/~cckhrb/webdev/code/html/meta_w3c.htm $str.="<title>SKELETON - This is an IRO's website example!</title>"; $str.="<meta name=\"author\" content=\"Sylvain Bolay\">"; $str.="<meta name=\"generator\" content=\"VIM - Vi IMproved, version 7.0.235\">"; $str.="<meta name=\"description\" content=\"This is the skeleton page\">"; $str.="<meta name=\"keywords\" content=\"IRO the Skeleton page, an Example, something else\">"; $str.="<meta name=\"robots\" content=\"aRobots\">"; $str.="<meta http-equiv=\"content-type\" content=\"text/html; charset=iso-8859-1\">"; $str.="<meta http-equiv=\"reply-to\" content=\"it@irovision.ch (Sylvain Bolay)\">"; //$str.="<meta http-equiv=\"expires\" content=\"aDate\">"; //$str.="<meta http-equiv=\"refresh\" content=\"aRefresh\">"; echo $str; //AFTER THE PHP END TAG THEY SHOULD NOT BE ANY MORE CARRIEGE RETURN //otherwise they would be supplementary CR in the javascript response.text ?>
Location: /www/lib
Location: /www/lib
<?php function lastRevisionDate($file,$filename){ $str=""; if (file_exists($file)) { // outputs e.g. somefile.txt was last modified: December 29 2002 22:16:23. //echo "$filename was last modified: " . date ("F d Y H:i:s.", filemtime($filename)); $modificationDate=date("d/m/Y", filemtime($file)); $str.='<meta name="revised" content="'.$filename.', '.$modificationDate.'">'; } return $str; } function linkStyleSheet($file,$link,$type){ $str=""; if (file_exists($file)) { $str.='<link rel="stylesheet" type="text/css" href="'.$link.'" media="'.$type.'">'; //echo "$str<br>"; } return $str; } function includeScript($file,$link){ $str=""; if (file_exists($file)) { $str.='<script type="text/javascript" src="'.$link.'"></script>'; } return $str; } //AFTER THE PHP END TAG THEY SHOULD NOT BE ANY MORE CARRIEGE RETURN //otherwise they would be supplementary CR in the javascript response.text ?>
Location: /www/lib
<?php $db_connection = false; function getMyConnection() { // 2.1 global $db_connection; if( $db_connection ) return $db_connection; $db_connection = mysql_connect(DB_HOST, DB_USER, DB_PWD) or die('Could not connect to server.' ); mysql_select_db(DATABASE, $db_connection) or die('Could not select database.'); return $db_connection; } function cleanUpDB() { // 2.2 global $db_connection; if( $db_connection != false ) mysql_close($db_connection); $db_connection = false; } //AFTER THE PHP END TAG THEY SHOULD NOT BE ANY MORE CARRIEGE RETURN //otherwise they would be supplementary CR in the javascript response.text ?>
Location: /www/lib
<?php require_once('lib_language.php'); /* This has to be added in the form $str.='<form>'; $str.='<input type="hidden" name="ajax" id="ajax" value="0">'; $str.='</form>'; */ /* This is to modify the ajax field with the javascript before posting the form // Remember, this instruction does DOM with the help of the prototype.js library function aFunction(){ $('ajax').value = "1"; } */ function getOptions($key,$ajax){ $field=NULL; if (isset($_GET[$key])){ if($ajax) $field=utf8_decode($_GET[$key]); else $field=$_GET[$key]; }elseif (isset($_POST[$key])){ if($ajax) $field=utf8_decode($_POST[$key]); else $field=$_POST[$key]; }else{ //echo("You ask for the $key option which actually does not exist!<br>"); } return $field; } function getAFunction(){ $ajax=false; $ajax=getOptions("ajax",false); $fields=array("field1","field2","field3"); foreach($fields as $key){ ${$key}=NULL; ${$key}=getOptions($key,$ajax); //echo $key." ".${$key}." <br>"; } $id_gen=aFunction($field1, $field2, $field3); if ($ajax) echo "A Result When Ajax is Used<br>"; else echo "Another Result When Ajax is Not Used<br>"; } function noFunction(){ $str =""; $str.=_("Error 404. Requested Page/Function not found!"); return $str; } function callFunction($file){ $fileName = pathinfo($file,PATHINFO_FILENAME); $incommingURL=pathinfo($_SERVER["PHP_SELF"],PATHINFO_FILENAME); //echo "** $_POST[page] | $_GET[page] | $incommingURL || $fileName **"; if($_POST["page"]==$fileName || $_GET["page"]==$fileName || $incommingURL==$fileName ){ //envoi des donnees par post ou get en passant en parametre tout ce qu'il y a apres le f $aFunction=null; if(isset($_POST['function'])) $aFunction=$_POST['function']; elseif (isset($_GET['function'])) $aFunction=$_GET['function']; elseif(isset($_POST['fonction'])) $aFunction=$_POST['fonction'];//kept for compatibilities reasons elseif (isset($_GET['fonction'])) $aFunction=$_GET['fonction'];//kept for compatibilities reasons else { echo noFunction(); return; } if (function_exists($aFunction)) { if (!isset($_GET['locale'])){ $_SESSION['lastPage']=$fileName; $_SESSION['lastFunction']=$aFunction; } if(!$lInit) $lInit=initializeLocales(DEFAULT_LANGUAGE); $aFunction(); }else{ echo noFunction(); } } } /*Use the callFunction as: require_once("common.php"); callFunction(__FILE__); */ //AFTER THE PHP END TAG THEY SHOULD NOT BE ANY MORE CARRIEGE RETURN //otherwise they would be supplementary CR in the javascript response.text ?>
Location: /www/lib
<?php function getLanguage($default){ $str=$default; if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])){ $str=substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2); } return $str; } function changeLanguage(){ // initializeLocales(DEFAULT_LANGUAGE); if (isset($_SESSION['lastPage'])&&isset($_SESSION['lastFunction'])){ header('Location: '.HOST.'/index.php?page='.$_SESSION['lastPage'].'&function='.$_SESSION['lastFunction']); }else{ header('Location: '.HOST.'/index.php'); } } function initializeLocales($default){ //echo date(DATE_RFC822); /* function list_system_locales(){ ob_start(); system('locale -a'); $str = ob_get_contents(); ob_end_clean(); return split("\\n", trim($str)); } */ //print_r($_GET); if (isset($_GET["locale"])){ $_SESSION['locale']=$_GET["locale"]; setcookie("locale", $_SESSION['locale'], time()+60*60*24*30, "/");// save a cookie }elseif (isset($_SESSION['locale'])){ //nothing to do }elseif (!isset($_SESSION['locale']) && isset($_COOKIE["locale"])){ $_SESSION['locale']=$_COOKIE["locale"]; }elseif (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])){ $_SESSION['locale']=substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2); }else{ $_SESSION['locale']=$default; } /* //$locale.=".iso88591"; //$locale="french"; //echo "Locale: $locale<br>"; //$locale = "fr_FR.UTF8"; //$locale = "fr_FR.UTF8"; $locales = list_system_locales(); if(in_array($locale, $locales)){ echo "yes yes yes....<br>"; }else{ echo "no no no.......<br>"; } */ //echo $_SESSION['locale']; $gettext_domain = FQDN; // set following the FQDN putenv("LC_ALL=$_SESSION[locale]");//needed on some systems putenv("LANGUAGE=$_SESSION[locale]");//needed on some systems //echo "setlocale: ".setlocale(LC_ALL,0)."<br>";//print actual locale setlocale(LC_ALL, $_SESSION['locale']); //echo "setlocale: ".setlocale(LC_ALL,0)."<br>";//print actual locale //bindtextdomain("messages", "./locale"); //echo "bindtextdomain: ".bindtextdomain("fr", "./locales")."<br>"; //echo "bindtextdomain($gettext_domain, /www/lib/locales)<br>"; bindtextdomain($gettext_domain, "/www/lib/locales"); //bind_textdomain_codeset("messages", "UTF-8"); //echo "bind_textdomain_codeset: ".bind_textdomain_codeset("fr", "ISO-8859-1")."<br>"; bind_textdomain_codeset($gettext_domain, "ISO-8859-1"); //echo "textdomain: ".textdomain("skeleton")."<br>"; textdomain($gettext_domain); /* $locale = "fr_CH.iso-8859-1"; $gettext_domain = 'fr'; // change by language putenv("LC_ALL=$locale");//needed on some systems putenv("LANG=$locale");//needed on some systems putenv("LANGUAGE=$locale");//needed on some systems setlocale(LC_ALL, $locale); // change by language, directory name fr_CH, not fr_CH.ISO-8859-1 bindtextdomain($gettext_domain, "./locales"); bind_textdomain_codeset($gettext_domain, 'iso-8859-1'); textdomain($gettext_domain); */ return true; } function localesForm($href,$locales,$flagSize){ $str=""; //$str.=date('l dS \of F Y h:i:s A'); //$str.=date(DATE_RFC822); foreach ($locales as $key){ //$shortLocale=substr($key, 0, 2); $str.='<a '; $str.="href=\"$href&locale=$key\">"; $str.="<img src=\"/img/flags/png/$key.svg.$flagSize.png\" alt=\"$key "._('Flag')."\" height=\"$flagSize\" width=\"$flagSize\">"; $str.='</a>'; $str.=' | '; } return $str; } //AFTER THE PHP END TAG THEY SHOULD NOT BE ANY MORE CARRIEGE RETURN //otherwise they would be supplementary CR in the javascript response.text ?>
Location: /www/lib
<?php function validators(){ $str=""; $str.='<p>'; $str.='Webmaster'; $str.=' '; $str.='<a '; $str.='href="http://www.bolay.net" '; $str.='>'; $str.='Sylvain Bolay'; $str.='</a>'; $str.='@'; $str.='<a '; $str.='href="http://www.irovision.ch" '; $str.='>'; $str.='Irovision.ch'; $str.='</a>'; $str.='</p>'; $str.='Spread Firefox/Iceweasel'; $str.='<p>'; $str.='<!-- http://www.spreadfirefox.com/?q=affiliates/homepage -->'; $str.='<!--[if IE]>'; $str.='<div '; $str.='id="getfirefox" '; $str.='style="text-align:center" '; $str.='>'; $str.='<a '; $str.='href="http://www.spreadfirefox.com/?q=affiliates&id=0&t=210" '; $str.='>'; $str.='<img '; $str.='border="0" '; $str.='alt="Firefox 2" '; $str.='title="Firefox 2" '; $str.='src="http://sfx-images.mozilla.org/affiliates/Buttons/firefox2/firefox-spread-btn-1b.png" '; $str.='>'; $str.='</a>'; $str.='</div>'; $str.='<![endif]-->'; $str.='</p>'; $str.='Valid HTML 4.01 Strict!'; $str.='<p>'; $str.='<a '; $str.='href="http://validator.w3.org/check?uri=referer" '; $str.='>'; $str.='<img '; $str.='src="img/valid-html401-blue" '; $str.='alt="Valid HTML 4.01 Strict" '; $str.='height="31" '; $str.='width="88" '; $str.='>'; $str.='</a>'; $str.='</p>'; $str.='Valid CSS!'; $str.='<p>'; $str.='<a '; //$str.='href="http://jigsaw.w3.org/css-validator/" '; $str.='href="http://jigsaw.w3.org/css-validator/validator?uri='.urlencode(HOST.$_SERVER['REQUEST_URI']).'" '; $str.='>'; $str.='<img '; $str.='style="border:0px" '; $str.='src="img/vcss" '; $str.='alt="Valid CSS!" '; $str.='height="31" '; $str.='width="88" '; $str.='>'; $str.='</a>'; $str.='</p>'; $str.='Valid Cynthia!'; $str.='<p>'; $str.='<a '; $str.='href="http://www.CynthiaSays.com/org/cynthiatested.htm" '; $str.='>'; $str.='<img '; $str.='style="border:0px" '; $str.='src="http://www.CynthiaSays.com/images/Ctested.gif" '; $str.='alt="Cynthia Tested!" '; $str.='height="31" '; $str.='width="88" '; $str.='>'; $str.='</a>'; $str.='</p>'; return $str; } //AFTER THE PHP END TAG THEY SHOULD NOT BE ANY MORE CARRIEGE RETURN //otherwise they would be supplementary CR in the javascript response.text ?>
Location: /www/lib
<?php //AFTER THE PHP END TAG THEY SHOULD NOT BE ANY MORE CARRIEGE RETURN //otherwise they would be supplementary CR in the javascript response.text ?>
In general our web site will be written in english (en/en_US) and the translation (called “Locale”) into other languages will be performed through gettext (either in bash or php). In this section I describe the file structure and the way I create a locale.
PHP can automatically translate files if when the text is surrounded by _():
echo _('Hello World!');
based on gettext
aptitude install php-gettext
root@siro2:/# tree /www/lib/locales/ /www/lib/locales/ |-- fr_CH | `-- LC_MESSAGES | |-- skeleton.irovision.ch.mo | `-- skeleton.irovision.ch.po `-- fr_FR `-- LC_MESSAGES |-- skeleton.irovision.ch.mo `-- skeleton.irovision.ch.po
ssh -X username@siro2.iro poedit
Normally at this stage poedit should be opened! Next:
Replace the fr_FR by the right directory following your choice that you did on point 4 above. Furthermore, the .po file has to be saved with the name of the FQDN of your web site.
It may take some time since apache is aware of the modification. You can overcome this problem by reloading the apache web server (/etc/init.d/apache2 reload).