inital commit
This commit is contained in:
146
webroot/epicvelocity/lib/BladeOneLang.php
Normal file
146
webroot/epicvelocity/lib/BladeOneLang.php
Normal file
@@ -0,0 +1,146 @@
|
||||
<?php
|
||||
|
||||
namespace eftec\bladeone;
|
||||
|
||||
/**
|
||||
* Trait BladeOneLang
|
||||
* It adds the next tags
|
||||
* <code>
|
||||
* select:
|
||||
* @ _e('hello')
|
||||
* @ _n('Product','Products',$n)
|
||||
* @ _ef('hello %s',$user)
|
||||
* </code>
|
||||
*
|
||||
* @package eftec\bladeone
|
||||
* @version 1.0 2017-12-17 (1)
|
||||
* @link https://github.com/EFTEC/BladeOne
|
||||
* @author Jorge Patricio Castro Castillo <jcastro arroba eftec dot cl>
|
||||
* @copyright 2017 Jorge Patricio Castro Castillo MIT License. Don't delete this comment, its part of the license.
|
||||
*/
|
||||
trait BladeOneLang
|
||||
{
|
||||
/** @var string The path to the missing translations log file. If empty then every missing key is not saved. */
|
||||
public $missingLog = '';
|
||||
|
||||
/** @var array Hold dictionary of translations */
|
||||
public static $dictionary = [];
|
||||
|
||||
/**
|
||||
* Tries to translate the word if its in the array defined by BladeOneLang::$dictionary
|
||||
* If the operation fails then, it returns the original expression without translation.
|
||||
*
|
||||
* @param $phrase
|
||||
* @return string
|
||||
*/
|
||||
public function _e($phrase)
|
||||
{
|
||||
if ((!\array_key_exists($phrase, static::$dictionary))) {
|
||||
$this->missingTranslation($phrase);
|
||||
return $phrase;
|
||||
} else {
|
||||
return static::$dictionary[$phrase];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Its the same than @_e, however it parses the text (using sprintf).
|
||||
* If the operation fails then, it returns the original expression without translation.
|
||||
*
|
||||
* @param $phrase
|
||||
* @return string
|
||||
*/
|
||||
public function _ef($phrase)
|
||||
{
|
||||
$argv = \func_get_args();
|
||||
$r = $this->_e($phrase);
|
||||
$argv[0] = $r; // replace the first argument with the translation.
|
||||
$result = @\call_user_func_array("sprintf", $argv);
|
||||
$result = ($result === false) ? $r : $result;
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* if num is more than one then it returns the phrase in plural, otherwise the phrase in singular.
|
||||
* Note: the translation should be as follow: $msg['Person']='Person' $msg=['Person']['p']='People'
|
||||
*
|
||||
* @param string $phrase
|
||||
* @param string $phrases
|
||||
* @param int $num
|
||||
* @return string
|
||||
*/
|
||||
public function _n($phrase, $phrases, $num = 0)
|
||||
{
|
||||
if ((!\array_key_exists($phrase, static::$dictionary))) {
|
||||
$this->missingTranslation($phrase);
|
||||
return ($num <= 1) ? $phrase : $phrases;
|
||||
} else {
|
||||
return ($num <= 1) ? $this->_e($phrase) : $this->_e($phrases);
|
||||
}
|
||||
}
|
||||
|
||||
//<editor-fold desc="compile">
|
||||
|
||||
/**
|
||||
* Used for @_e directive.
|
||||
*
|
||||
* @param $expression
|
||||
* @return string
|
||||
*/
|
||||
protected function compile_e($expression)
|
||||
{
|
||||
return $this->phpTag . "echo \$this->_e{$expression}; ?>";
|
||||
}
|
||||
|
||||
/**
|
||||
* Used for @_ef directive.
|
||||
*
|
||||
* @param $expression
|
||||
* @return string
|
||||
*/
|
||||
protected function compile_ef($expression)
|
||||
{
|
||||
return $this->phpTag . "echo \$this->_ef{$expression}; ?>";
|
||||
}
|
||||
|
||||
/**
|
||||
* Used for @_n directive.
|
||||
*
|
||||
* @param $expression
|
||||
* @return string
|
||||
*/
|
||||
protected function compile_n($expression)
|
||||
{
|
||||
return $this->phpTag . "echo \$this->_n{$expression}; ?>";
|
||||
}
|
||||
|
||||
//</editor-fold>
|
||||
|
||||
/**
|
||||
* Log a missing translation to $this->missingLog.
|
||||
*
|
||||
* @param $txt
|
||||
*/
|
||||
private function missingTranslation($txt)
|
||||
{
|
||||
if (!$this->missingLog) {
|
||||
return; // if there is not a file assigned then it skips saving.
|
||||
}
|
||||
|
||||
$fz = @\filesize($this->missingLog);
|
||||
$mode = 'a';
|
||||
|
||||
if (\is_object($txt) || \is_array($txt)) {
|
||||
$txt = \print_r($txt, true);
|
||||
}
|
||||
|
||||
// Rewrite file if more than 100000 bytes
|
||||
if ($fz > 100000) {
|
||||
$mode = 'w';
|
||||
}
|
||||
|
||||
$fp = \fopen($this->missingLog, 'w');
|
||||
\fwrite($fp, $txt . "\n");
|
||||
\fclose($fp);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user