mirror of
https://github.com/Einundzwanzig-Podcast/einundzwanzig-portal.git
synced 2025-12-11 06:46:47 +00:00
65 lines
2.2 KiB
PHP
65 lines
2.2 KiB
PHP
<?php
|
|
|
|
namespace JoeDixon\Translation;
|
|
|
|
use Illuminate\Filesystem\Filesystem;
|
|
|
|
class Scanner
|
|
{
|
|
private $disk;
|
|
|
|
private $scanPaths;
|
|
|
|
private $translationMethods;
|
|
|
|
public function __construct(Filesystem $disk, $scanPaths, $translationMethods)
|
|
{
|
|
$this->disk = $disk;
|
|
$this->scanPaths = $scanPaths;
|
|
$this->translationMethods = $translationMethods;
|
|
}
|
|
|
|
/**
|
|
* Scan all the files in the provided $scanPath for translations.
|
|
*
|
|
* @return array
|
|
*/
|
|
public function findTranslations()
|
|
{
|
|
$results = ['single' => [], 'group' => []];
|
|
|
|
// This has been derived from a combination of the following:
|
|
// * Laravel Language Manager GUI from Mohamed Said (https://github.com/themsaid/laravel-langman-gui)
|
|
// * Laravel 5 Translation Manager from Barry vd. Heuvel (https://github.com/barryvdh/laravel-translation-manager)
|
|
$matchingPattern =
|
|
'[^\w]'. // Must not start with any alphanum or _
|
|
'(?<!->)'. // Must not start with ->
|
|
'('.implode('|', $this->translationMethods).')'. // Must start with one of the functions
|
|
"\(". // Match opening parentheses
|
|
"\s*". // Whitespace before param
|
|
"[\'\"]". // Match " or '
|
|
'('. // Start a new group to match:
|
|
'.+'. // Must start with group
|
|
')'. // Close group
|
|
"[\'\"]". // Closing quote
|
|
"\s*". // Whitespace after param
|
|
"[\),]"; // Close parentheses or new parameter
|
|
|
|
foreach ($this->disk->allFiles($this->scanPaths) as $file) {
|
|
if (preg_match_all("/$matchingPattern/siU", $file->getContents(), $matches)) {
|
|
foreach ($matches[2] as $key) {
|
|
if (preg_match("/(^[a-zA-Z0-9:_-]+([.][^\1)\ ]+)+$)/siU", $key, $arrayMatches)) {
|
|
[$file, $k] = explode('.', $arrayMatches[0], 2);
|
|
$results['group'][$file][$k] = '';
|
|
continue;
|
|
} else {
|
|
$results['single']['single'][$key] = '';
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return $results;
|
|
}
|
|
}
|