first draft, only one (main) page

This commit is contained in:
2014-06-02 11:53:18 +02:00
parent c25d541a7d
commit 8be00a6c46
17 changed files with 1312 additions and 33 deletions

112
inc/translator.php Normal file
View File

@@ -0,0 +1,112 @@
<?php
class Translator extends PhpObject
{
private $sLang;
private $asLanguages;
private $asTranslations; // [lang][key_word] = translation
const LANG_FOLDER = 'languages/';
const LANG_EXT = '.lang';
const LANG_SEP = '=';
const DEFAULT_LANG = 'FR';
public function __construct($sLang='')
{
parent::__construct(__CLASS__, Settings::DEBUG);
$this->asLanguages = array();
$this->asTranslations = array();
$this->loadLanguages();
$this->setLanguage($sLang);
}
public function setLanguage($sLang)
{
$this->sLang = in_array($sLang, $this->asLanguages)?$sLang:self::DEFAULT_LANG;
}
public function getTranslation($sTransKey, $sLang='')
{
$sTransText = false;
//Select language
if($sLang=='')
{
$sLang = $this->sLang;
}
//Look up in the selected language dictionary
if(in_array($sLang, $this->asLanguages) && array_key_exists($sTransKey, $this->asTranslations[$sLang]))
{
$sTransText = $this->asTranslations[$sLang][$sTransKey];
}
//Look up in the default language dictionary
elseif(array_key_exists($sTransKey, $this->asTranslations[self::DEFAULT_LANG]))
{
$this->addWarning('Missing translation in "'.$sLang.'" for the key "'.$sTransKey.'", falling back to "'.self::DEFAULT_LANG.'"');
$sTransText = $this->asTranslations[self::DEFAULT_LANG][$sTransKey];
}
else $this->addWarning('Missing translation in "'.$sLang.'" for the key "'.$sTransKey.'"');
return $sTransText;
}
public function getHashToPage($asMenuPages)
{
$asHashToPage = array();
foreach($asMenuPages as $sHash)
{
foreach($this->asLanguages as $sLang)
{
$asHashToPage[$this->getTranslation('menu_'.$sHash.'_key', $sLang)] = $sHash;
}
}
return $asHashToPage;
}
public function getPageToHash($asMenuPages)
{
$asPageToHash = array();
foreach($asMenuPages as $sHash)
{
$asPageToHash[$sHash] = $this->getTranslation('menu_'.$sHash.'_key');
}
return $asPageToHash;
}
private function loadLanguages()
{
//List all available languages
$asLangPaths = glob(self::getLangPath('*'));
$this->asLanguages = array_map('basename', $asLangPaths, array_fill(1, count($asLangPaths), self::LANG_EXT));
//Load languages
array_walk($this->asLanguages, array($this, 'loadLanguageFile'));
}
private function loadLanguageFile($sLang)
{
if(!in_array($sLang, $this->asTranslations))
{
$sData = file_get_contents(self::getLangPath($sLang));
$asData = explode("\n", $sData);
foreach($asData as $sTranslation)
{
$iSepPos = stripos($sTranslation, self::LANG_SEP);
if($iSepPos!==false)
{
$sTransKey = trim(substr($sTranslation, 0, $iSepPos));
$sTransText = /*htmlspecialchars(*/trim(substr($sTranslation, $iSepPos+1))/*, ENT_QUOTES)*/; //TODO when all entities have been removed
$this->asTranslations[$sLang][$sTransKey] = $sTransText;
}
}
}
}
private static function getLangPath($sLang)
{
return self::LANG_FOLDER.$sLang.self::LANG_EXT;
}
}
?>