[Translator] Set sources when extracting strings from php files
This commit is contained in:
parent
446480e2f7
commit
f05d4e41be
@ -81,7 +81,7 @@ class PhpExtractor extends AbstractFileExtractor implements ExtractorInterface
|
|||||||
{
|
{
|
||||||
$files = $this->extractFiles($resource);
|
$files = $this->extractFiles($resource);
|
||||||
foreach ($files as $file) {
|
foreach ($files as $file) {
|
||||||
$this->parseTokens(token_get_all(file_get_contents($file)), $catalog);
|
$this->parseTokens(token_get_all(file_get_contents($file)), $catalog, $file);
|
||||||
|
|
||||||
gc_mem_caches();
|
gc_mem_caches();
|
||||||
}
|
}
|
||||||
@ -197,9 +197,15 @@ class PhpExtractor extends AbstractFileExtractor implements ExtractorInterface
|
|||||||
*
|
*
|
||||||
* @param array $tokens
|
* @param array $tokens
|
||||||
* @param MessageCatalogue $catalog
|
* @param MessageCatalogue $catalog
|
||||||
|
* @param string $filename
|
||||||
*/
|
*/
|
||||||
protected function parseTokens($tokens, MessageCatalogue $catalog)
|
protected function parseTokens($tokens, MessageCatalogue $catalog/*, string $filename*/)
|
||||||
{
|
{
|
||||||
|
if (\func_num_args() < 3 && __CLASS__ !== \get_class($this) && __CLASS__ !== (new \ReflectionMethod($this, __FUNCTION__))->getDeclaringClass()->getName() && !$this instanceof \PHPUnit\Framework\MockObject\MockObject && !$this instanceof \Prophecy\Prophecy\ProphecySubjectInterface) {
|
||||||
|
@trigger_error(sprintf('The "%s()" method will have a new "string $filename" argument in version 5.0, not defining it is deprecated since Symfony 4.3.', __METHOD__), E_USER_DEPRECATED);
|
||||||
|
}
|
||||||
|
$filename = 2 < \func_num_args() ? \func_get_arg(2) : '';
|
||||||
|
|
||||||
$tokenIterator = new \ArrayIterator($tokens);
|
$tokenIterator = new \ArrayIterator($tokens);
|
||||||
|
|
||||||
for ($key = 0; $key < $tokenIterator->count(); ++$key) {
|
for ($key = 0; $key < $tokenIterator->count(); ++$key) {
|
||||||
@ -236,6 +242,10 @@ class PhpExtractor extends AbstractFileExtractor implements ExtractorInterface
|
|||||||
|
|
||||||
if ($message) {
|
if ($message) {
|
||||||
$catalog->set($message, $this->prefix.$message, $domain);
|
$catalog->set($message, $this->prefix.$message, $domain);
|
||||||
|
$metadata = $catalog->getMetadata($message, $domain) ?? [];
|
||||||
|
$normalizedFilename = preg_replace('{[\\\\/]+}', '/', $filename);
|
||||||
|
$metadata['sources'][] = $normalizedFilename.':'.$tokens[$key][2];
|
||||||
|
$catalog->setMetadata($message, $metadata, $domain);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -69,6 +69,10 @@ EOF;
|
|||||||
$actualCatalogue = $catalogue->all();
|
$actualCatalogue = $catalogue->all();
|
||||||
|
|
||||||
$this->assertEquals($expectedCatalogue, $actualCatalogue);
|
$this->assertEquals($expectedCatalogue, $actualCatalogue);
|
||||||
|
|
||||||
|
$filename = __DIR__.'/../fixtures/extractor/translation.html.php';
|
||||||
|
$this->assertEquals(['sources' => [$filename.':2']], $catalogue->getMetadata('single-quoted key'));
|
||||||
|
$this->assertEquals(['sources' => [$filename.':43']], $catalogue->getMetadata('other-domain-test-no-params-short-array', 'not_messages'));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function resourcesProvider()
|
public function resourcesProvider()
|
||||||
|
Reference in New Issue
Block a user