mirror of
https://github.com/processwire/processwire.git
synced 2025-08-18 12:31:17 +02:00
Some updates for processwire/processwire-issues#126 plus some improvements to ProcessLanguage and add a refresh link in the language translation phrase live-search
This commit is contained in:
@@ -6,7 +6,7 @@
|
||||
* It also contains the hooks for altering the output of the InputfieldFile to hold language info and links.
|
||||
* This is the process assigned to processwire/setup/languages/.
|
||||
*
|
||||
* ProcessWire 3.x, Copyright 2016 by Ryan Cramer
|
||||
* ProcessWire 3.x, Copyright 2019 by Ryan Cramer
|
||||
* https://processwire.com
|
||||
*
|
||||
*
|
||||
@@ -102,19 +102,24 @@ class ProcessLanguage extends ProcessPageType {
|
||||
}
|
||||
|
||||
public function processInputfieldFileInput(HookEvent $event) {
|
||||
$event->object->overwrite = true;
|
||||
/** @var InputfieldFile $inputfield */
|
||||
$inputfield = $event->object;
|
||||
$inputfield->overwrite = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Hook for before InputfieldFile::render
|
||||
*
|
||||
* In this case we add an 'edit' link to the translator and some info about the translation file.
|
||||
*
|
||||
* @param HookEvent $event
|
||||
*
|
||||
*/
|
||||
public function renderInputfieldFile(HookEvent $event) {
|
||||
|
||||
$language = $this->wire('process')->getPage();
|
||||
/** @var InputfieldFile $inputfield */
|
||||
$inputfield = $event->object;
|
||||
$language = $this->wire('process')->getPage();
|
||||
|
||||
/** @var Pagefiles $pagefiles */
|
||||
$pagefiles = $inputfield->attr('value');
|
||||
@@ -134,7 +139,8 @@ class ProcessLanguage extends ProcessPageType {
|
||||
}
|
||||
|
||||
public function renderInputfieldForm(HookEvent $event) {
|
||||
|
||||
|
||||
/** @var InputfieldForm $form */
|
||||
$form = $event->object;
|
||||
$language = $this->getPage();
|
||||
if(!$language->id) return;
|
||||
@@ -143,15 +149,17 @@ class ProcessLanguage extends ProcessPageType {
|
||||
$inputfield->label = $this->_('Live Search');
|
||||
$inputfield->icon = 'search';
|
||||
$placeholder = $this->_('Text to search for');
|
||||
$refreshUrl = "../../language-translator/add/?language_id=$language->id&refresh=1";
|
||||
$refreshLabel = $this->_('Refresh search phrase index');
|
||||
|
||||
if(!is_file($file)) {
|
||||
$inputfield->value = "<p><a href='../../language-translator/add/?language_id=$language->id&refresh=1'>" .
|
||||
$inputfield->value = "<p><a href='$refreshUrl'>" .
|
||||
$this->_('Click here to build search phrase index') . "</a></p>";
|
||||
|
||||
} else {
|
||||
|
||||
$phrases = file_get_contents($file);
|
||||
$phrases = str_replace(array('"', "\n"), array(' ', ' '), $phrases);
|
||||
$phrases = str_replace(array('"', "\n", "<", ">"), ' ', $phrases);
|
||||
|
||||
$inputfield->value =
|
||||
"<script>" .
|
||||
@@ -163,8 +171,9 @@ class ProcessLanguage extends ProcessPageType {
|
||||
$this->_('Click found matches to edit translation or add file (if not already present).') .
|
||||
"<p>" .
|
||||
"<p>" .
|
||||
"<input type='text' class='language-phrase-search' style='width:50%' name='_q' placeholder='$placeholder' /> " .
|
||||
"<span class='detail language-phrase-search-cnt'></span>" .
|
||||
"<input type='text' class='language-phrase-search InputfieldIgnoreChanges' style='width:50%' name='_q' placeholder='$placeholder' /> " .
|
||||
"<span class='detail language-phrase-search-cnt'></span> " .
|
||||
"<a class='pw-tooltip' title='$refreshLabel' href='$refreshUrl'>" . wireIconMarkup('refresh') . "</a>" .
|
||||
"</p>";
|
||||
}
|
||||
|
||||
@@ -176,6 +185,8 @@ class ProcessLanguage extends ProcessPageType {
|
||||
* Hook for InputfieldFile::renderItem
|
||||
*
|
||||
* In this case we add an 'edit' link to the translator and some info about the translation file.
|
||||
*
|
||||
* @param HookEvent $event
|
||||
*
|
||||
*/
|
||||
public function renderInputfieldFileItem(HookEvent $event) {
|
||||
@@ -244,15 +255,22 @@ class ProcessLanguage extends ProcessPageType {
|
||||
* Hook for InputfieldFile::renderUpload
|
||||
*
|
||||
* This just adds a 'new' link to add a new translation file.
|
||||
*
|
||||
* @param HookEvent $event
|
||||
*
|
||||
*/
|
||||
public function renderInputfieldFileUpload(HookEvent $event) {
|
||||
|
||||
$translationUrl = $this->translationUrl();
|
||||
$page = $event->arguments[0]->get('page');
|
||||
/** @var Pagefiles $pagefiles */
|
||||
$pagefiles = $event->arguments(0);
|
||||
/** @var Page $page */
|
||||
$page = $pagefiles->get('page');
|
||||
/** @var InputfieldFile $inputfield */
|
||||
$inputfield = $event->object;
|
||||
$out = '';
|
||||
|
||||
|
||||
/** @var InputfieldButton $btn1 */
|
||||
$btn1 = $this->wire('modules')->get('InputfieldButton');
|
||||
$btn1->href = "{$translationUrl}add/?language_id={$page->id}";
|
||||
$btn1->value = $this->_('Find Files to Translate');
|
||||
@@ -261,6 +279,7 @@ class ProcessLanguage extends ProcessPageType {
|
||||
$out .= $btn1->render();
|
||||
|
||||
if(count($inputfield->attr('value'))) {
|
||||
/** @var InputfieldButton $btn2 */
|
||||
$btn2 = $this->wire('modules')->get('InputfieldButton');
|
||||
$btn2->href = "../download/?language_id={$page->id}&field=" . $inputfield->attr('name');
|
||||
$btn2->value = $this->_('Download ZIP');
|
||||
@@ -282,6 +301,10 @@ class ProcessLanguage extends ProcessPageType {
|
||||
* Modify the output per-field in the PageType list (template-method)
|
||||
*
|
||||
* In this case we make it return a count for the language_files
|
||||
*
|
||||
* @param string $name
|
||||
* @param mixed $value
|
||||
* @return string
|
||||
*
|
||||
*/
|
||||
protected function renderListFieldValue($name, $value) {
|
||||
@@ -352,7 +375,7 @@ class ProcessLanguage extends ProcessPageType {
|
||||
foreach($untranslated as $hash => $text1) {
|
||||
$text2 = isset($translated[$hash]) ? $translated[$hash]['text'] : '';
|
||||
$comment = isset($comments[$hash]) ? $comments[$hash] : '';
|
||||
if(strpos($comment, '//') !== false) list($ignore, $comment) = explode('//', $comment);
|
||||
if(strpos($comment, '//') !== false) list(, $comment) = explode('//', $comment);
|
||||
$fields = array($text1, $text2, trim($comment), $file, $hash);
|
||||
fputcsv($fp, $fields);
|
||||
}
|
||||
@@ -405,9 +428,9 @@ class ProcessLanguage extends ProcessPageType {
|
||||
);
|
||||
|
||||
$n = 0;
|
||||
$data = array();
|
||||
$header = array();
|
||||
$translator = new LanguageTranslator($language);
|
||||
$textdomain = '';
|
||||
$lastTextdomain = '';
|
||||
$lastFile = '';
|
||||
$numChanges = 0;
|
||||
@@ -447,7 +470,7 @@ class ProcessLanguage extends ProcessPageType {
|
||||
|
||||
$file = $row['file'];
|
||||
$hash = $row['hash'];
|
||||
$textOriginal = $row['original'];
|
||||
// $textOriginal = $row['original'];
|
||||
$textTranslated = $row['translated'];
|
||||
$textdomain = $translator->filenameToTextdomain($file);
|
||||
|
||||
@@ -503,16 +526,18 @@ class ProcessLanguage extends ProcessPageType {
|
||||
*
|
||||
* @param LanguageTranslator $translator
|
||||
* @param string $textdomain
|
||||
* @param string $filename
|
||||
* @param int $numChanges
|
||||
*
|
||||
*/
|
||||
protected function processCSV_saveTextdomain(LanguageTranslator $translator, $textdomain, $filename, $numChanges) {
|
||||
if($filename) { /* ignore, not currently used */ }
|
||||
$file = $translator->textdomainToFilename($textdomain);
|
||||
if($numChanges) {
|
||||
try {
|
||||
$translator->saveTextdomain($textdomain);
|
||||
$this->message($this->csvImportLabel . sprintf($this->_('Saved %d change(s) for file: %s'), $numChanges, $file));
|
||||
} catch(Exception $e) {
|
||||
} catch(\Exception $e) {
|
||||
$this->error($e->getMessage());
|
||||
}
|
||||
} else {
|
||||
|
@@ -192,6 +192,11 @@ class ProcessLanguageTranslator extends Process {
|
||||
'site' => $this->findTranslatableFiles($this->wire('config')->paths->site, $useCache),
|
||||
'wire' => $this->findTranslatableFiles($this->wire('config')->paths->wire, $useCache)
|
||||
);
|
||||
|
||||
if($this->input->get('refresh')) {
|
||||
$this->wire('session')->redirect("../../languages/edit/?id={$this->language->id}");
|
||||
return '';
|
||||
}
|
||||
|
||||
$textdomains = array();
|
||||
foreach(array('language_files', 'language_files_site') as $fieldName) {
|
||||
@@ -486,7 +491,7 @@ class ProcessLanguageTranslator extends Process {
|
||||
$this->session->redirect('../add/');
|
||||
}
|
||||
|
||||
$numFound = $this->parseTranslatableFile($file);
|
||||
$this->parseTranslatableFile($file);
|
||||
|
||||
/** @var InputfieldForm $form */
|
||||
$form = $this->modules->get('InputfieldForm');
|
||||
@@ -658,7 +663,7 @@ class ProcessLanguageTranslator extends Process {
|
||||
}
|
||||
|
||||
if(is_null($this->fp)) {
|
||||
$f = $this->language->filesManager()->path() . '.phrase-index.txt'; // @todo make hidden
|
||||
$f = $this->language->filesManager()->path() . '.phrase-index.txt';
|
||||
if(is_file($f)) $this->wire('files')->unlink($f);
|
||||
$this->fp = fopen($f, "a");
|
||||
}
|
||||
@@ -723,7 +728,7 @@ class ProcessLanguageTranslator extends Process {
|
||||
$files[$pathname] = $pathname;
|
||||
if(preg_match_all('/\b(?:_[_nx]\(|->_[nx]?\()[\'"](.+?)[\'"]\)/', $text, $matches)) {
|
||||
foreach($matches[1] as $key => $phrase) {
|
||||
$phrase = str_replace(array('|', '^', "\n", "\r", "\t"), ' ', $phrase);
|
||||
$phrase = str_replace(array('|', '^', "\n", "\r", "\t", "<", ">"), ' ', strip_tags($phrase));
|
||||
fwrite($this->fp, "|$phrase");
|
||||
}
|
||||
$textdomain = $this->translator->filenameToTextdomain($pathname);
|
||||
|
Reference in New Issue
Block a user