namespace Cubist\Locale;
use Cubist\Util\Files\Files;
+use Illuminate\Support\Facades\Cache;
use \RecursiveIteratorIterator;
use \RecursiveDirectoryIterator;
use \SplFileInfo;
-class Translate
-{
+class Translate {
protected $_paths = [];
protected $_extensions = ['php', 'phtml'];
protected $_toTranslate = [];
protected static $_parsed = [];
- public function __construct()
- {
+ public function __construct() {
}
- public function addPath($path, $sectionLabel = null)
- {
+ public function addPath($path, $sectionLabel = null) {
if (null === $sectionLabel) {
$this->_paths[] = $path;
} else {
}
}
- public function clearPaths()
- {
+ public function clearPaths() {
$this->_paths = [];
$this->_toTranslate = [];
}
- public function setExtensions(array $extensions)
- {
+ public function setExtensions(array $extensions) {
$this->_extensions = $extensions;
}
- public function addExtension($extension)
- {
+ public function addExtension($extension) {
$this->_extensions[] = $extension;
}
- public function parseFiles()
- {
+ public function parseFiles() {
$this->_extensions = array_unique($this->_extensions);
$this->_paths = array_unique($this->_paths);
foreach ($this->_paths as $sectionLabel => $path) {
- if (isset(self::$_parsed[$path])) {
- continue;
- }
+
if (!isset($this->_toTranslate[$sectionLabel])) {
$this->_toTranslate[$sectionLabel] = [];
}
-
- start_measure('Get translate hash ' . $path);
- $cacheKey = 'translate_path_' . sha1($path . '//' . Files::dirmtime($path, true, $this->_extensions));
- stop_measure('Get translate hash ' . $path);
- $this->_toTranslate[$sectionLabel] = array_merge($this->_toTranslate[$sectionLabel], cache()->remember($cacheKey, 3600, function () use ($path) {
- start_measure('Parse path for translations ' . $path);
- $res = [];
- $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path));
- foreach ($iterator as $p) {
- if ($p->isFile() && in_array($p->getExtension(), $this->_extensions)) {
- $res = array_merge($res, self::extractTextsToTranslate($p));
+ if (isset(static::$_parsed[$path])) {
+ $found = static::$_parsed[$path];
+ } else {
+
+ start_measure('Get translate hash ' . $path);
+ $cacheKey = 'translate_path_' . sha1($path . '//' . Files::dirmtime($path, true, $this->_extensions));
+ stop_measure('Get translate hash ' . $path);
+ $found = cache()->remember($cacheKey, 3600, function () use ($path) {
+ start_measure('Parse path for translations ' . $path);
+ $res = [];
+ $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path));
+ foreach ($iterator as $p) {
+ if ($p->isFile() && in_array($p->getExtension(), $this->_extensions)) {
+ $res = array_merge($res, static::extractTextsToTranslate($p));
+ }
}
- }
- stop_measure('Parse path for translations ' . $path);
- return $res;
- }));
- self::$_parsed[$path] = true;
+ stop_measure('Parse path for translations ' . $path);
+ return $res;
+ });
+ static::$_parsed[$path] = $found;
+ }
+
+ $this->_toTranslate[$sectionLabel] = array_merge($this->_toTranslate[$sectionLabel], $found);
}
}
- public static function extractTextsToTranslate(SplFileInfo $file)
- {
+ public static function extractTextsToTranslate(SplFileInfo $file) {
if (!$file->isFile() || !$file->isReadable()) {
return [];
}
-
- $c = file_get_contents($file);
- $res = [];
- // @link https://regex101.com/r/uD0eT1/4
- if (preg_match_all('/__\(([\'\"]{1})(.*)(([^\\\\]{1})(\1))(.*)\)/Us', $c, $matches)) {
- foreach ($matches[2] as $k => $m) {
- if ($m == '') {
- continue;
+ $cacheKey = 'totranslate_' . Files::hashFileAttributes($file->getPathname());
+ return Cache::rememberForever($cacheKey, function () use ($file) {
+ $c = file_get_contents($file);
+ $res = [];
+ // @link https://regex101.com/r/uD0eT1/4
+ if (preg_match_all('/__\(([\'\"]{1})(.*)(([^\\\\]{1})(\1))(.*)\)/Us', $c, $matches)) {
+ foreach ($matches[2] as $k => $m) {
+ if ($m == '') {
+ continue;
+ }
+ $m .= $matches[4][$k];
+ $res[] = stripcslashes($m);
}
- $m .= $matches[4][$k];
- $res[] = stripcslashes($m);
}
- }
- return $res;
+ return $res;
+ });
}
- public function hasSomethingToTranslate()
- {
+ public function hasSomethingToTranslate() {
return count($this->_toTranslate) > 0;
}
*
* @return array
*/
- public function getStringToTranslate()
- {
+ public function getStringToTranslate() {
return $this->_toTranslate;
}
- public static function saveTranslations($data, $path)
- {
+ public static function saveTranslations($data, $path) {
file_put_contents($path, '<?php return ' . var_export($data, true) . ';');
}