* select: * @ _e('hello') * @ _n('Product','Products',$n) * @ _ef('hello %s',$user) * * @package eftec\bladeone * @version 1.0 2017-12-17 (1) * @link https://github.com/EFTEC/BladeOne * @author Jorge Patricio Castro Castillo * @copyright 2017 Jorge Patricio Castro Castillo MIT License. Don't delete this comment, its part of the license. */ trait BladeOneLang { var $missingLog = ''; // if empty then every missing key is not saved. static public $dictionary = array(); // static is for a small optimization. // function compile_e( $expression ) { return $this->phpTag . "echo \$this->_e{$expression}; ?>"; } function compile_ef( $expression ) { return $this->phpTag . "echo \$this->_ef{$expression}; ?>"; } function compile_n( $expression ) { return $this->phpTag . "echo \$this->_n{$expression}; ?>"; } // function _e( $phrase ) { if ( ( ! array_key_exists( $phrase, BladeOneLang::$dictionary ) ) ) { $this->missingTranslation( $phrase ); return $phrase; } else { return BladeOneLang::$dictionary[ $phrase ]; } } 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 */ function _n( $phrase, $phrases, $num = 0 ) { if ( ( ! array_key_exists( $phrase, BladeOneLang::$dictionary ) ) ) { $this->missingTranslation( $phrase ); return ( $num <= 1 ) ? $phrase : $phrases; } else { return ( $num <= 1 ) ? $this->_e( $phrase ) : $this->_e( $phrases ); } } private function missingTranslation( $txt ) { if ( ! $this->missingLog ) { return; } // if there is not a file assigned then it skips saving. $fz = @filesize( $this->missingLog ); if ( is_object( $txt ) || is_array( $txt ) ) { $txtW = print_r( $txt, true ); } else { $txtW = $txt; } if ( $fz > 100000 ) { // mas de 100kb = reducirlo a cero. $fp = fopen( $this->missingLog, 'w' ); } else { $fp = fopen( $this->missingLog, 'a' ); } fwrite( $fp, $txtW . "\n" ); fclose( $fp ); } }