Mask i18n
This commit is contained in:
89
inc/mask.php
89
inc/mask.php
@@ -3,7 +3,7 @@
|
||||
/**
|
||||
* Mask Reader
|
||||
* @author franzz
|
||||
* @version 1.0
|
||||
* @version 1.1
|
||||
*/
|
||||
class Mask extends PhpObject
|
||||
{
|
||||
@@ -11,6 +11,7 @@ class Mask extends PhpObject
|
||||
public $sFilePath;
|
||||
private $sMask;
|
||||
private $asTags;
|
||||
private $asTagsParams;
|
||||
private $asPartsSource;
|
||||
private $aoInstances;
|
||||
|
||||
@@ -31,14 +32,40 @@ class Mask extends PhpObject
|
||||
$this->sFilePath = '';
|
||||
$this->sMask = '';
|
||||
$this->asTags = array();
|
||||
$this->asTagsParams = array();
|
||||
$this->asPartsSource = array();
|
||||
$this->aoInstances = array();
|
||||
$this->sFilePath = '';
|
||||
$this->oLang = $oLang;
|
||||
$this->setTranslator($oLang);
|
||||
|
||||
//load file
|
||||
if($sFileName!='') $this->initFile($sFileName);
|
||||
}
|
||||
|
||||
public function setLanguage($sLang, $sDefaultLang='') {
|
||||
if(is_null($this->oLang)) $this->setTranslator(new Translator($sLang, $sDefaultLang));
|
||||
else {
|
||||
$this->oLang->setLanguage($sLang, $sDefaultLang);
|
||||
foreach($this->aoInstances as &$aoPartInstance) {
|
||||
foreach($aoPartInstance as $oInstance) $oInstance->setLanguage($sLang, $sDefaultLang);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private function setTranslator($oLang) {
|
||||
$this->oLang = $oLang;
|
||||
foreach($this->aoInstances as &$aoPartInstance) {
|
||||
foreach($aoPartInstance as $oInstance) $oInstance->setTranslator($this->oLang);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Mask Translator
|
||||
* @return Translator
|
||||
*/
|
||||
public function getTranslator() {
|
||||
return $this->oLang;
|
||||
}
|
||||
|
||||
public static function getMaskFile($sFileName)
|
||||
{
|
||||
@@ -70,7 +97,7 @@ class Mask extends PhpObject
|
||||
$this->sMaskName = $sMaskName;
|
||||
$this->sMask = $sSource;
|
||||
$this->setParts();
|
||||
$this->setLangTags();
|
||||
$this->setDefaultTagValues();
|
||||
}
|
||||
|
||||
private function setParts()
|
||||
@@ -141,12 +168,12 @@ class Mask extends PhpObject
|
||||
$oMask->aoInstances[$sPartName][] = $oInstance;
|
||||
}
|
||||
|
||||
public function setInstanceTag($sPartName, $sTagName, $sTagValue)
|
||||
public function setInstanceTag($sPartName, $sTagName, $sTagValue, $asLangParams=array())
|
||||
{
|
||||
$oMask = $this->findPart($this, $sPartName);
|
||||
if(!$oMask) $this->addError('No part found : '.$sPartName);
|
||||
|
||||
$oMask->getCurrentInstance($sPartName)->setTag($sTagName, $sTagValue);
|
||||
$oMask->getCurrentInstance($sPartName)->setTag($sTagName, $sTagValue, $asLangParams);
|
||||
}
|
||||
|
||||
private function findPart($oMask, $sPartName)
|
||||
@@ -181,8 +208,17 @@ class Mask extends PhpObject
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
private function setDefaultTagValues() {
|
||||
$asTagNames = $this->getTags();
|
||||
|
||||
//Default translations
|
||||
foreach($asTagNames as $sTagName) {
|
||||
if(self::isLangTag($sTagName)) $this->setTag($sTagName, $sTagName);
|
||||
}
|
||||
}
|
||||
|
||||
public function getTags($bLang=false)
|
||||
public function getTags()
|
||||
{
|
||||
$sSafeTagMark = preg_quote(self::TAG_MARK);
|
||||
$sSafeLangMark = preg_quote(self::LANG_PREFIX);
|
||||
@@ -191,14 +227,10 @@ class Mask extends PhpObject
|
||||
return array_unique(array_filter($asMatches['tag']));
|
||||
}
|
||||
|
||||
public function setTag($sTagName, $sTagValue)
|
||||
public function setTag($sTagName, $sTagValue, $asLangParams=array())
|
||||
{
|
||||
//Check if tagged should be translated
|
||||
if(self::isLangTag($sTagValue)) {
|
||||
if(is_null($this->oLang)) $this->addError('Missing Lang Class. Please provide in constructor');
|
||||
else $sTagValue = $this->oLang->getTranslation(mb_substr($sTagValue, 5));
|
||||
}
|
||||
$this->asTags[$sTagName] = $sTagValue;
|
||||
$this->asTagsParams[$sTagName] = $asLangParams;
|
||||
}
|
||||
|
||||
public function setTags($asTags)
|
||||
@@ -206,18 +238,6 @@ class Mask extends PhpObject
|
||||
foreach($asTags as $sTagName=>$sTagValue) $this->setTag($sTagName, $sTagValue);
|
||||
}
|
||||
|
||||
/**
|
||||
* Default value for tags tagged as translation: Starting with lang/
|
||||
*/
|
||||
private function setLangTags() {
|
||||
if($this->oLang != null) {
|
||||
$asTags = $this->getTags();
|
||||
foreach($asTags as $sTagName) {
|
||||
if(self::isLangTag($sTagName)) $this->setTag($sTagName, $this->oLang->getTranslation(mb_substr($sTagName, 5)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static function isLangTag($sTag) {
|
||||
return (mb_substr($sTag, 0, 5) == self::LANG_PREFIX);
|
||||
}
|
||||
@@ -226,7 +246,7 @@ class Mask extends PhpObject
|
||||
{
|
||||
$sCompletedMask = $this->sMask;
|
||||
|
||||
//build parts
|
||||
//Build Parts
|
||||
foreach($this->aoInstances as $sPart=>$aoParts)
|
||||
{
|
||||
$sTagValue = '';
|
||||
@@ -236,12 +256,19 @@ class Mask extends PhpObject
|
||||
}
|
||||
$this->setTag($this->getPartTagPattern($sPart, false), $sTagValue);
|
||||
}
|
||||
|
||||
//replace tags
|
||||
if(!empty($this->asTags))
|
||||
{
|
||||
$asTags = $this->addTagMark(array_keys($this->asTags));
|
||||
$sCompletedMask = str_replace($asTags, $this->asTags, $sCompletedMask);
|
||||
|
||||
//Translate Tags
|
||||
$asTags = $this->asTags;
|
||||
if(!is_null($this->oLang)) {
|
||||
foreach($asTags as $sTagName=>&$sTagValue) {
|
||||
if(self::isLangTag($sTagValue)) $sTagValue = $this->oLang->getTranslation(mb_substr($sTagValue, 5), $this->asTagsParams[$sTagName]);
|
||||
}
|
||||
}
|
||||
|
||||
//Replace Tags
|
||||
if(!empty($asTags)) {
|
||||
$asMarkedTags = $this->addTagMark(array_keys($asTags));
|
||||
$sCompletedMask = str_replace($asMarkedTags, $asTags, $sCompletedMask);
|
||||
}
|
||||
return $sCompletedMask;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user