- Captures way more L10n::t(t) instances - Add recursive search into `src/` folder - Fix string capture with new sprintf-free syntax
		
			
				
	
	
		
			100 lines
		
	
	
	
		
			2.1 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			100 lines
		
	
	
	
		
			2.1 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable file
		
	
	
	
	
#!/usr/bin/env php
 | 
						|
<?php
 | 
						|
 | 
						|
/**
 | 
						|
 * @file util/extract.php
 | 
						|
 *
 | 
						|
 * Extracts translation strings from the Friendica project's files to be exported
 | 
						|
 * to Transifex for translation.
 | 
						|
 *
 | 
						|
 * Outputs a PHP file with language strings used by Friendica
 | 
						|
 */
 | 
						|
 | 
						|
$s = '<?php' . PHP_EOL;
 | 
						|
$s .= '
 | 
						|
function string_plural_select($n){
 | 
						|
	return ($n != 1);
 | 
						|
}
 | 
						|
 | 
						|
';
 | 
						|
 | 
						|
$arr = [];
 | 
						|
 | 
						|
$files = ['index.php', 'boot.php'];
 | 
						|
$files = array_merge(
 | 
						|
	$files,
 | 
						|
	glob('mod/*'),
 | 
						|
	glob('include/*'),
 | 
						|
	glob('addon/*/*'),
 | 
						|
	glob_recursive('src')
 | 
						|
);
 | 
						|
 | 
						|
foreach ($files as $file) {
 | 
						|
	$str = file_get_contents($file);
 | 
						|
 | 
						|
	$pat = '|L10n::t\(([^\)]*+)[\)]|';
 | 
						|
	$patt = '|L10n::tt\(([^\)]*+)[\)]|';
 | 
						|
 | 
						|
	preg_match_all($pat, $str, $matches);
 | 
						|
	preg_match_all($patt, $str, $matchestt);
 | 
						|
 | 
						|
	if (count($matches) || count($matchestt)) {
 | 
						|
		$s .= '// ' . $file . PHP_EOL;
 | 
						|
	}
 | 
						|
 | 
						|
	if (count($matches)) {
 | 
						|
		foreach ($matches[1] as $long_match) {
 | 
						|
			$match_arr = preg_split('/(?<=[\'"])\s*,/', $long_match);
 | 
						|
			$match = $match_arr[0];
 | 
						|
			if (!in_array($match, $arr)) {
 | 
						|
				if (substr($match, 0, 1) == '$') {
 | 
						|
					continue;
 | 
						|
				}
 | 
						|
 | 
						|
				$arr[] = $match;
 | 
						|
 | 
						|
				$s .= '$a->strings[' . $match . '] = ' . $match . ';' . "\n";
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
	if (count($matchestt)) {
 | 
						|
		foreach ($matchestt[1] as $match) {
 | 
						|
			$matchtkns = preg_split("|[ \t\r\n]*,[ \t\r\n]*|", $match);
 | 
						|
			if (count($matchtkns) == 3 && !in_array($matchtkns[0], $arr)) {
 | 
						|
				if (substr($matchtkns[1], 0, 1) == '$') {
 | 
						|
					continue;
 | 
						|
				}
 | 
						|
 | 
						|
				$arr[] = $matchtkns[0];
 | 
						|
 | 
						|
				$s .= '$a->strings[' . $matchtkns[0] . "] = array(\n";
 | 
						|
				$s .= "\t0 => " . $matchtkns[0] . ",\n";
 | 
						|
				$s .= "\t1 => " . $matchtkns[1] . ",\n";
 | 
						|
				$s .= ");\n";
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
$s .= '// Timezones' . PHP_EOL;
 | 
						|
 | 
						|
$zones = timezone_identifiers_list();
 | 
						|
foreach ($zones as $zone) {
 | 
						|
	$s .= '$a->strings[\'' . $zone . '\'] = \'' . $zone . '\';' . "\n";
 | 
						|
}
 | 
						|
 | 
						|
echo $s;
 | 
						|
 | 
						|
function glob_recursive($path) {
 | 
						|
	$dir_iterator = new RecursiveDirectoryIterator($path);
 | 
						|
	$iterator = new RecursiveIteratorIterator($dir_iterator, RecursiveIteratorIterator::SELF_FIRST);
 | 
						|
 | 
						|
	$return = [];
 | 
						|
	foreach ($iterator as $file) {
 | 
						|
		if ($file->getBasename() != '.' && $file->getBasename() != '..') {
 | 
						|
			$return[] = $file->getPathname();
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	return $return;
 | 
						|
}
 |