Skip to content

Commit

Permalink
[Translator] Set sources when extracting strings from php files
Browse files Browse the repository at this point in the history
  • Loading branch information
Stadly authored and fabpot committed May 7, 2019
1 parent 446480e commit f05d4e4
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 2 deletions.
14 changes: 12 additions & 2 deletions src/Symfony/Component/Translation/Extractor/PhpExtractor.php
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ public function extract($resource, MessageCatalogue $catalog)
{
$files = $this->extractFiles($resource);
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();
}
Expand Down Expand Up @@ -197,9 +197,15 @@ private function getValue(\Iterator $tokenIterator)
*
* @param array $tokens
* @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);

for ($key = 0; $key < $tokenIterator->count(); ++$key) {
Expand Down Expand Up @@ -236,6 +242,10 @@ protected function parseTokens($tokens, MessageCatalogue $catalog)

if ($message) {
$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;
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,10 @@ public function testExtraction($resource)
$actualCatalogue = $catalogue->all();

$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()
Expand Down

0 comments on commit f05d4e4

Please sign in to comment.