mirror of
https://github.com/kamilwylegala/cakephp2-php8.git
synced 2025-01-31 09:06:17 +00:00
Fix Extract task to correctly extract messages with context
This commit is contained in:
parent
02ca7f5fcb
commit
3ae61e9e16
3 changed files with 59 additions and 41 deletions
|
@ -70,7 +70,7 @@ class ExtractTask extends AppShell {
|
||||||
protected $_tokens = array();
|
protected $_tokens = array();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Extracted strings indexed by category and domain.
|
* Extracted strings indexed by category, domain, msgid and context.
|
||||||
*
|
*
|
||||||
* @var array
|
* @var array
|
||||||
*/
|
*/
|
||||||
|
@ -249,26 +249,26 @@ class ExtractTask extends AppShell {
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
protected function _addTranslation($category, $domain, $msgid, $details = array()) {
|
protected function _addTranslation($category, $domain, $msgid, $details = array()) {
|
||||||
if (empty($this->_translations[$category][$domain][$msgid])) {
|
$context = '';
|
||||||
$this->_translations[$category][$domain][$msgid] = array(
|
if (isset($details['msgctxt'])) {
|
||||||
|
$context = $details['msgctxt'];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (empty($this->_translations[$category][$domain][$msgid][$context])) {
|
||||||
|
$this->_translations[$category][$domain][$msgid][$context] = array(
|
||||||
'msgid_plural' => false,
|
'msgid_plural' => false,
|
||||||
'msgctxt' => ''
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isset($details['msgid_plural'])) {
|
if (isset($details['msgid_plural'])) {
|
||||||
$this->_translations[$category][$domain][$msgid]['msgid_plural'] = $details['msgid_plural'];
|
$this->_translations[$category][$domain][$msgid][$context]['msgid_plural'] = $details['msgid_plural'];
|
||||||
}
|
}
|
||||||
if (isset($details['msgctxt'])) {
|
|
||||||
$this->_translations[$category][$domain][$msgid]['msgctxt'] = $details['msgctxt'];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isset($details['file'])) {
|
if (isset($details['file'])) {
|
||||||
$line = 0;
|
$line = 0;
|
||||||
if (isset($details['line'])) {
|
if (isset($details['line'])) {
|
||||||
$line = $details['line'];
|
$line = $details['line'];
|
||||||
}
|
}
|
||||||
$this->_translations[$category][$domain][$msgid]['references'][$details['file']][] = $line;
|
$this->_translations[$category][$domain][$msgid][$context]['references'][$details['file']][] = $line;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -565,9 +565,9 @@ class ExtractTask extends AppShell {
|
||||||
$paths[] = realpath(APP) . DS;
|
$paths[] = realpath(APP) . DS;
|
||||||
foreach ($this->_translations as $category => $domains) {
|
foreach ($this->_translations as $category => $domains) {
|
||||||
foreach ($domains as $domain => $translations) {
|
foreach ($domains as $domain => $translations) {
|
||||||
foreach ($translations as $msgid => $details) {
|
foreach ($translations as $msgid => $contexts) {
|
||||||
|
foreach ($contexts as $context => $details) {
|
||||||
$plural = $details['msgid_plural'];
|
$plural = $details['msgid_plural'];
|
||||||
$context = $details['msgctxt'];
|
|
||||||
$files = $details['references'];
|
$files = $details['references'];
|
||||||
$occurrences = array();
|
$occurrences = array();
|
||||||
foreach ($files as $file => $lines) {
|
foreach ($files as $file => $lines) {
|
||||||
|
@ -599,6 +599,7 @@ class ExtractTask extends AppShell {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Prepare a file to be stored
|
* Prepare a file to be stored
|
||||||
|
|
|
@ -162,9 +162,20 @@ class ExtractTaskTest extends CakeTestCase {
|
||||||
$this->assertContains('msgid "double \\"quoted\\""', $result, 'Strings with quotes not handled correctly');
|
$this->assertContains('msgid "double \\"quoted\\""', $result, 'Strings with quotes not handled correctly');
|
||||||
$this->assertContains("msgid \"single 'quoted'\"", $result, 'Strings with quotes not handled correctly');
|
$this->assertContains("msgid \"single 'quoted'\"", $result, 'Strings with quotes not handled correctly');
|
||||||
|
|
||||||
$pattern = '/\#: (\\\\|\/)extract\.ctp:33\n';
|
$pattern = '/\#: (\\\\|\/)extract\.ctp:34\nmsgid "letter"/';
|
||||||
$pattern .= 'msgctxt "mail"/';
|
$this->assertRegExp($pattern, $result, 'Strings with context should not overwrite strings without context');
|
||||||
$this->assertRegExp($pattern, $result);
|
|
||||||
|
$pattern = '/\#: (\\\\|\/)extract\.ctp:35;37\nmsgctxt "A"\nmsgid "letter"/';
|
||||||
|
$this->assertRegExp($pattern, $result, 'Should contain string with context "A"');
|
||||||
|
|
||||||
|
$pattern = '/\#: (\\\\|\/)extract\.ctp:36\nmsgctxt "B"\nmsgid "letter"/';
|
||||||
|
$this->assertRegExp($pattern, $result, 'Should contain string with context "B"');
|
||||||
|
|
||||||
|
$pattern = '/\#: (\\\\|\/)extract\.ctp:38\nmsgid "%d letter"\nmsgid_plural "%d letters"/';
|
||||||
|
$this->assertRegExp($pattern, $result, 'Plural strings with context should not overwrite strings without context');
|
||||||
|
|
||||||
|
$pattern = '/\#: (\\\\|\/)extract\.ctp:39\nmsgctxt "A"\nmsgid "%d letter"\nmsgid_plural "%d letters"/';
|
||||||
|
$this->assertRegExp($pattern, $result, 'Should contain plural string with context "A"');
|
||||||
|
|
||||||
// extract.ctp - reading the domain.pot
|
// extract.ctp - reading the domain.pot
|
||||||
$result = file_get_contents($this->path . DS . 'domain.pot');
|
$result = file_get_contents($this->path . DS . 'domain.pot');
|
||||||
|
|
|
@ -30,4 +30,10 @@ __('Hot features!'
|
||||||
// Category
|
// Category
|
||||||
echo __c('You have a new message (category: LC_TIME).', 5);
|
echo __c('You have a new message (category: LC_TIME).', 5);
|
||||||
|
|
||||||
echo __x('mail', 'letter');
|
// Context
|
||||||
|
echo __('letter');
|
||||||
|
echo __x('A', 'letter');
|
||||||
|
echo __x('B', 'letter');
|
||||||
|
echo __x('A', 'letter');
|
||||||
|
echo __n('%d letter', '%d letters', $count);
|
||||||
|
echo __xn('A', '%d letter', '%d letters', $count);
|
||||||
|
|
Loading…
Add table
Reference in a new issue