From e8af9c24e5100aa8d928b6d00856c4efc37d2e8c Mon Sep 17 00:00:00 2001 From: Sumit Sharma Date: Thu, 14 Jan 2021 01:12:24 +0530 Subject: [PATCH 01/10] Fixed issue Order status not updating to Applied --- src/controllers/FilesController.php | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/controllers/FilesController.php b/src/controllers/FilesController.php index aa511819..c97afb94 100644 --- a/src/controllers/FilesController.php +++ b/src/controllers/FilesController.php @@ -468,14 +468,11 @@ public function actionApplyTranslationDraft() $publishedFilesCount = 0; foreach ($files as $key => $f) { - if ($f->status !== 'complete') { - continue; + if ($f->status === 'published') { + $publishedFilesCount++; } - - $publishedFilesCount++; } - if ($publishedFilesCount === $filesCount) { $order->status = 'published'; } From ba01dab97a140e3ad4bbda0a15b71d6f31106f39 Mon Sep 17 00:00:00 2001 From: Sumit Sharma Date: Fri, 15 Jan 2021 01:17:46 +0530 Subject: [PATCH 02/10] Disable the Publish Changes button within Entry detail screen --- src/assetbundles/src/js/ApplyTranslations.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/assetbundles/src/js/ApplyTranslations.js b/src/assetbundles/src/js/ApplyTranslations.js index b7b302af..f22a51cf 100644 --- a/src/assetbundles/src/js/ApplyTranslations.js +++ b/src/assetbundles/src/js/ApplyTranslations.js @@ -8,8 +8,8 @@ Craft.Translations.ApplyTranslations = { init: function(draftId, file) { // Disable default Craft updating window.draftEditor.settings.canUpdateSource = false; - $("#main-form input[type='submit']").disable(); - $("#main-form input[type='submit']").attr('disabled', true); + $("#publish-changes-btn-container :input[type='button']").disable(); + $("#publish-changes-btn-container :input[type='button']").attr('disabled', true); // Create the Apply Translations button var $applyTranslationsContainer = document.createElement('div'); @@ -68,4 +68,4 @@ Craft.Translations.ApplyTranslations = { }, }; -})(jQuery); \ No newline at end of file +})(jQuery); From 7a7ff928b6d89ed6139cc5ac9639c39571e7aa01 Mon Sep 17 00:00:00 2001 From: sidedwards Date: Thu, 14 Jan 2021 16:53:58 -0700 Subject: [PATCH 03/10] Removed duplicate variables --- src/Translations.php | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/Translations.php b/src/Translations.php index cef96fb4..78b8debb 100644 --- a/src/Translations.php +++ b/src/Translations.php @@ -563,9 +563,6 @@ private function _onDeleteElement(Event $event) $currentFile->status = 'canceled'; - $element = Craft::$app->getElements()->getElementById($currentFile->elementId, null, $currentFile->targetSite); - $currentFile->previewUrl = Translations::$plugin->urlGenerator->generateElementPreviewUrl($element, $currentFile->targetSite); - $element = Craft::$app->getElements()->getElementById($currentFile->elementId, null, $currentFile->sourceSite); $currentFile->previewUrl = Translations::$plugin->urlGenerator->generateElementPreviewUrl($element, $currentFile->targetSite); $currentFile->source = Translations::$plugin->elementToXmlConverter->toXml( From fce203876f58bf96a6d0c1cc8be5cb5c2ea54d31 Mon Sep 17 00:00:00 2001 From: sidedwards Date: Thu, 14 Jan 2021 16:54:40 -0700 Subject: [PATCH 04/10] - `generateElementPreviewUrl()` logic for $siteId parameter - siteId parameters for function calls to `generateElementPreviewUrl()` --- src/services/ElementToXmlConverter.php | 2 +- src/services/UrlGenerator.php | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/services/ElementToXmlConverter.php b/src/services/ElementToXmlConverter.php index 6a668e0e..20cf0e14 100644 --- a/src/services/ElementToXmlConverter.php +++ b/src/services/ElementToXmlConverter.php @@ -36,7 +36,7 @@ public function toXml(Element $element, $draftId = 0, $sourceSite = null, $targe $sites->setAttribute('target-site', $targetSite); $langs->setAttribute('source-language', Craft::$app->sites->getSiteById($sourceSite)->language); $langs->setAttribute('target-language', (Craft::$app->sites->getSiteById($targetSite)) ? Craft::$app->sites->getSiteById($targetSite)->language : 'deleted'); - $original->setAttribute('url', Translations::$plugin->urlGenerator->generateElementPreviewUrl($element, $targetSite)); + $original->setAttribute('url', Translations::$plugin->urlGenerator->generateElementPreviewUrl($element)); $preview->setAttribute('url', $previewUrl); $elementIdMeta = $head->appendChild($dom->createElement('meta')); diff --git a/src/services/UrlGenerator.php b/src/services/UrlGenerator.php index f0e9f23e..32b00511 100644 --- a/src/services/UrlGenerator.php +++ b/src/services/UrlGenerator.php @@ -106,7 +106,7 @@ public function generateCpUrl($path) return Translations::$plugin->urlHelper->cpUrl($path); } - public function generateElementPreviewUrl(Element $element, $targetSite) + public function generateElementPreviewUrl(Element $element, $siteId) { $params = array(); @@ -123,7 +123,7 @@ public function generateElementPreviewUrl(Element $element, $targetSite) 'preview/preview', [ 'elementType' => $className, 'sourceId' => $element->sourceId, - 'siteId' => $element->siteId, + 'siteId' => $siteId ? $siteId : $element->siteId, 'draftId' => $element->draftId, 'revisionId' => $element->revisionId ] From ca62ff5c917d22dab2988f928ad2d7c40f3c9646 Mon Sep 17 00:00:00 2001 From: sidedwards Date: Thu, 14 Jan 2021 17:53:01 -0700 Subject: [PATCH 05/10] Specify siteId when generating element preview url --- src/services/UrlGenerator.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/services/UrlGenerator.php b/src/services/UrlGenerator.php index 32b00511..ab99a659 100644 --- a/src/services/UrlGenerator.php +++ b/src/services/UrlGenerator.php @@ -106,7 +106,7 @@ public function generateCpUrl($path) return Translations::$plugin->urlHelper->cpUrl($path); } - public function generateElementPreviewUrl(Element $element, $siteId) + public function generateElementPreviewUrl(Element $element, $siteId = null) { $params = array(); @@ -119,6 +119,8 @@ public function generateElementPreviewUrl(Element $element, $siteId) if ($className === Entry::class && !$element->getIsDraft()) { $previewUrl = $element->getUrl(); } else { + $element = Craft::$app->getElements()->getElementById($element->sourceId, null, $siteId); + $route = [ 'preview/preview', [ 'elementType' => $className, @@ -142,7 +144,7 @@ public function generateElementPreviewUrl(Element $element, $siteId) $previewUrl = ''; } } - + return $previewUrl; } } From 523b44ef5a459fed79a57cef5b574fa60bc40282 Mon Sep 17 00:00:00 2001 From: Sumit Sharma Date: Sat, 16 Jan 2021 02:45:30 +0530 Subject: [PATCH 06/10] Custom Twig RegEx Filters --- src/controllers/SettingsController.php | 6 +++++- src/models/Settings.php | 4 ++++ .../StaticTranslationsRepository.php | 9 +++++---- .../settings/configuration-options.twig | 20 ++++++++++++++++++- 4 files changed, 33 insertions(+), 6 deletions(-) diff --git a/src/controllers/SettingsController.php b/src/controllers/SettingsController.php index 6b229e18..4f125499 100644 --- a/src/controllers/SettingsController.php +++ b/src/controllers/SettingsController.php @@ -235,6 +235,8 @@ public function actionConfigurationOptions() $variables['chkDuplicateEntries'] = Translations::getInstance()->settings->chkDuplicateEntries; $variables['uploadVolume'] = Translations::getInstance()->settings->uploadVolume; + $variables['twigSearchFilterSingleQuote'] = !empty(Translations::getInstance()->settings->twigSearchFilterSingleQuote) ? Translations::getInstance()->settings->twigSearchFilterSingleQuote : ""; + $variables['twigSearchFilterDoubleQuote'] = !empty(Translations::getInstance()->settings->twigSearchFilterDoubleQuote) ? Translations::getInstance()->settings->twigSearchFilterDoubleQuote : ""; $allVolumes = Craft::$app->getVolumes()->getAllVolumes(); @@ -264,12 +266,14 @@ public function actionSaveConfigurationOptions() $request = Craft::$app->getRequest(); $duplicateEntries = $request->getParam('chkDuplicateEntries'); $selectedVolume = $request->getParam('uploadVolume'); + $twigSearchFilterSingleQuote = $request->getParam('twigSearchFilterSingleQuote'); + $twigSearchFilterDoubleQuote = $request->getParam('twigSearchFilterDoubleQuote'); try { $pluginService = Craft::$app->getPlugins(); $plugin = $pluginService->getPlugin('translations'); - if (!$pluginService->savePluginSettings($plugin, ['chkDuplicateEntries' => $duplicateEntries, 'uploadVolume' => $selectedVolume])) { + if (!$pluginService->savePluginSettings($plugin, ['chkDuplicateEntries' => $duplicateEntries, 'uploadVolume' => $selectedVolume, 'twigSearchFilterSingleQuote' => $twigSearchFilterSingleQuote, 'twigSearchFilterDoubleQuote' => $twigSearchFilterDoubleQuote])) { Craft::$app->getSession()->setError(Translations::$plugin->translator->translate('app', 'Unable to save setting.')); } else { Craft::$app->getSession()->setNotice(Translations::$plugin->translator->translate('app', 'Setting saved.')); diff --git a/src/models/Settings.php b/src/models/Settings.php index 9014fa54..103e715e 100644 --- a/src/models/Settings.php +++ b/src/models/Settings.php @@ -26,6 +26,10 @@ class Settings extends Model { public $chkDuplicateEntries = true; + public $twigSearchFilterSingleQuote = ""; + + public $twigSearchFilterDoubleQuote = ""; + /** @var int The Volume ID where uploads will be saved */ public $uploadVolume = 0; diff --git a/src/services/repository/StaticTranslationsRepository.php b/src/services/repository/StaticTranslationsRepository.php index 81460524..9e668428 100644 --- a/src/services/repository/StaticTranslationsRepository.php +++ b/src/services/repository/StaticTranslationsRepository.php @@ -14,6 +14,7 @@ use Exception; use craft\helpers\FileHelper; use craft\helpers\ElementHelper; +use acclaro\translations\Translations; use craft\elements\db\ElementQueryInterface; use acclaro\translations\elements\StaticTranslations; @@ -137,7 +138,8 @@ private function getFileStrings($path, $file, ElementQueryInterface $query, $cat * @return array */ public function getExpressions($ext) { - + $twigSearchFilterSingleQuote = !empty(Translations::getInstance()->settings->twigSearchFilterSingleQuote) ? Translations::getInstance()->settings->twigSearchFilterSingleQuote : '/\'((?:[^\']|\\\\\')*)\'\s*\|\s*t(?:ranslate)?\b/'; + $twigSearchFilterDoubleQuote = !empty(Translations::getInstance()->settings->twigSearchFilterDoubleQuote) ? Translations::getInstance()->settings->twigSearchFilterDoubleQuote : '/"((?:[^"]|\\\\")*)"\s*\|\s*t(?:ranslate)?\b/'; $exp = []; switch ($ext) { case 'php': @@ -156,8 +158,7 @@ public function getExpressions($ext) { $exp = [ 'position' => '1', 'regex' => [ - '/\'((?:[^\']|\\\\\')*)\'\s*\|\s*t(?:ranslate)?\b/', - '/"((?:[^"]|\\\\")*)"\s*\|\s*t(?:ranslate)?\b/', + $twigSearchFilterSingleQuote, $twigSearchFilterDoubleQuote ] ]; break; @@ -205,4 +206,4 @@ public function set($lang, array $fileContent) return true; } -} \ No newline at end of file +} diff --git a/src/templates/settings/configuration-options.twig b/src/templates/settings/configuration-options.twig index 5b0a4d7d..2d3919bb 100644 --- a/src/templates/settings/configuration-options.twig +++ b/src/templates/settings/configuration-options.twig @@ -36,6 +36,24 @@ toggle: true }) }} +

{{ "Static Translations"|t('app') }}

+ + {{ forms.textField({ + label: "Twig search filter (single quote)"|t('app'), + id: 'twigSearchFilterSingleQuote', + name: 'twigSearchFilterSingleQuote', + value: twigSearchFilterSingleQuote ?? '', + size: '40', + }) }} + + {{ forms.textField({ + label: "Twig search filter (double quote)"|t('app'), + id: 'twigSearchFilterDoubleQuote', + name: 'twigSearchFilterDoubleQuote', + value: twigSearchFilterDoubleQuote ?? '', + size: '40', + }) }} +
@@ -50,4 +68,4 @@ $('#save-configuration').toggleClass('submit'); }); }); -{% endjs %} \ No newline at end of file +{% endjs %} From 05c1c50255136592d75bb64601919ff9de1c4b84 Mon Sep 17 00:00:00 2001 From: Sumit Sharma Date: Sat, 16 Jan 2021 02:55:01 +0530 Subject: [PATCH 07/10] Add spinner icon to individual Apply Translation buttons --- src/assetbundles/src/js/ApplyTranslations.js | 9 +++++++-- src/assetbundles/src/js/OrderDetail.js | 8 ++++++++ src/assetbundles/src/js/OrderEntries.js | 6 ++++++ 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/assetbundles/src/js/ApplyTranslations.js b/src/assetbundles/src/js/ApplyTranslations.js index b7b302af..eb720338 100644 --- a/src/assetbundles/src/js/ApplyTranslations.js +++ b/src/assetbundles/src/js/ApplyTranslations.js @@ -46,13 +46,18 @@ Craft.Translations.ApplyTranslations = { // reactivate the button $(this.$btn).enable(); $(this.$btn).attr('disabled', false); - $(this.$btn).on("click", function (e) { + + $(this.$btn).one("click", function (e) { e.preventDefault(); + $(".apply-translations > a").addClass("disabled"); + $(".apply-translations > a").html(""); + $(".apply-translations .submit").width(122); + $(".apply-translations > a").toggleClass("spinner"); var fileData = { fileId: file.id, }; - + Craft.postActionRequest('translations/files/apply-translation-draft', fileData, function(response, textStatus) { if (textStatus === 'success' && response.success) { console.log(response.data); diff --git a/src/assetbundles/src/js/OrderDetail.js b/src/assetbundles/src/js/OrderDetail.js index 086336ae..e7824dc3 100644 --- a/src/assetbundles/src/js/OrderDetail.js +++ b/src/assetbundles/src/js/OrderDetail.js @@ -363,6 +363,14 @@ Craft.Translations.OrderDetail = { // Add the diff html document.getElementById("modal-body-entry").innerHTML = diffHtml; + $('#apply-translation').one('click', function(e) { + $(".apply-translation").addClass("disabled"); + $(".apply-translation").prop("value", ""); + $(".apply-translation").css('margin-right', 4); + $(".apply-translation").width(110); + $(".apply-translation").toggleClass("spinner"); + }); + $('#close-diff-modal-entry').on('click', function(e) { e.preventDefault(); modal.hide(); diff --git a/src/assetbundles/src/js/OrderEntries.js b/src/assetbundles/src/js/OrderEntries.js index 888cb3f5..9957dcb2 100644 --- a/src/assetbundles/src/js/OrderEntries.js +++ b/src/assetbundles/src/js/OrderEntries.js @@ -46,6 +46,12 @@ Craft.Translations.OrderEntries = { Craft.Translations.OrderEntries.togglePublishButton(); Craft.Translations.OrderEntries.toggleSelectAllCheckbox(); }); + this.$publishSelectedBtn.one('click', function (e) { + $(".translations-publish-selected-btn").addClass("disabled"); + $(".translations-publish-selected-btn").prop("value", ""); + $(".translations-publish-selected-btn").width(160); + $(".translations-publish-selected-btn").toggleClass("spinner"); + }); } }; From e6afaae8d9f4450288946d7c2f34491f28d5ec4a Mon Sep 17 00:00:00 2001 From: sidedwards Date: Fri, 15 Jan 2021 21:41:46 -0700 Subject: [PATCH 08/10] Added 'zh-Hans-CN' mapping to `SiteRepository.php` --- src/services/repository/SiteRepository.php | 1 + 1 file changed, 1 insertion(+) diff --git a/src/services/repository/SiteRepository.php b/src/services/repository/SiteRepository.php index 46d0e621..726b4c02 100644 --- a/src/services/repository/SiteRepository.php +++ b/src/services/repository/SiteRepository.php @@ -127,6 +127,7 @@ class SiteRepository 'zh-tw' => 'zh-TW', //Chinese (Traditional) 'zh-hans' => 'zh-CN', //Chinese (Simplified) 'zh-hant' => 'zh-TW', //Chinese (Traditional) + 'zh-hans-cn' => 'zh-CN', //Chinese (Simplified) 'nl-nl' => 'nl', //Dutch (Netherlands) 'da-dk' => 'da', //Danish (Denmark) 'en' => 'en-us', //English From 8af1c75b451523b91ea1f6b9a039824b4a03b8b8 Mon Sep 17 00:00:00 2001 From: sidedwards Date: Mon, 18 Jan 2021 14:26:27 -0700 Subject: [PATCH 09/10] Updated CHANGELOG and .craftplugin to v1.9.4 --- .craftplugin | 2 +- CHANGELOG.md | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/.craftplugin b/.craftplugin index 07ee4455..ffa8d62b 100644 --- a/.craftplugin +++ b/.craftplugin @@ -1,7 +1,7 @@ { "pluginName": "Translations for Craft", "pluginDescription": "Easily launch and manage multilingual Craft websites without having to copy/paste content or manually track updates.", - "pluginVersion": "1.9.3", + "pluginVersion": "1.9.4", "pluginAuthorName": "Acclaro", "pluginVendorName": "Acclaro", "pluginAuthorUrl": "http://www.acclaro.com/", diff --git a/CHANGELOG.md b/CHANGELOG.md index e3df73e0..5761c1d7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,18 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/) and this project adheres to [Semantic Versioning](http://semver.org/). +## 1.9.4 - 2021-01-18 + +## Added +- Custom Twig RegEx Filters for Static Translations https://github.com/AcclaroInc/craft-translations/pull/130 +- Spinner icon to individual "Apply Translation" buttons https://github.com/AcclaroInc/craft-translations/pull/131 +- `zh-Hans-CN` mapping to `SiteRepository.php` https://github.com/AcclaroInc/craft-translations/commit/acfc84dde21318bfb04a4e8970680aed12021699 + +### Fixed +- [BUG] - Target Site draft preview URI structures https://github.com/AcclaroInc/craft-translations/commit/be7bbe219730e5586477729996c1c5ecad84055d +- [BUG] - Disable the "Publish Changes" button within Entry detail screen https://github.com/AcclaroInc/craft-translations/pull/129 +- [BUG] - Order status not updating to "Applied" https://github.com/AcclaroInc/craft-translations/pull/128 + ## 1.9.3 - 2020-12-16 ### Fixed From 461257f15123d82b9b9bd90b32f344e61996edbb Mon Sep 17 00:00:00 2001 From: Sumit Sharma Date: Tue, 19 Jan 2021 03:33:29 +0530 Subject: [PATCH 10/10] Added target string position in configuration setting --- src/controllers/SettingsController.php | 13 ++++++++----- src/models/Settings.php | 2 ++ .../repository/StaticTranslationsRepository.php | 15 ++++++++++++--- src/templates/settings/configuration-options.twig | 11 +++++++++++ 4 files changed, 33 insertions(+), 8 deletions(-) diff --git a/src/controllers/SettingsController.php b/src/controllers/SettingsController.php index 4f125499..044b02dc 100644 --- a/src/controllers/SettingsController.php +++ b/src/controllers/SettingsController.php @@ -233,10 +233,12 @@ public function actionConfigurationOptions() return; } - $variables['chkDuplicateEntries'] = Translations::getInstance()->settings->chkDuplicateEntries; - $variables['uploadVolume'] = Translations::getInstance()->settings->uploadVolume; - $variables['twigSearchFilterSingleQuote'] = !empty(Translations::getInstance()->settings->twigSearchFilterSingleQuote) ? Translations::getInstance()->settings->twigSearchFilterSingleQuote : ""; - $variables['twigSearchFilterDoubleQuote'] = !empty(Translations::getInstance()->settings->twigSearchFilterDoubleQuote) ? Translations::getInstance()->settings->twigSearchFilterDoubleQuote : ""; + $settings = Translations::getInstance()->settings; + $variables['chkDuplicateEntries'] = $settings->chkDuplicateEntries; + $variables['uploadVolume'] = $settings->uploadVolume; + $variables['twigSearchFilterSingleQuote'] = !empty($settings->twigSearchFilterSingleQuote) ? $settings->twigSearchFilterSingleQuote : ""; + $variables['twigSearchFilterDoubleQuote'] = !empty($settings->twigSearchFilterDoubleQuote) ? $settings->twigSearchFilterDoubleQuote : ""; + $variables['targetStringPosition'] = !empty($settings->targetStringPosition) ? $settings->targetStringPosition : ""; $allVolumes = Craft::$app->getVolumes()->getAllVolumes(); @@ -268,12 +270,13 @@ public function actionSaveConfigurationOptions() $selectedVolume = $request->getParam('uploadVolume'); $twigSearchFilterSingleQuote = $request->getParam('twigSearchFilterSingleQuote'); $twigSearchFilterDoubleQuote = $request->getParam('twigSearchFilterDoubleQuote'); + $targetStringPosition = $request->getParam('targetStringPosition'); try { $pluginService = Craft::$app->getPlugins(); $plugin = $pluginService->getPlugin('translations'); - if (!$pluginService->savePluginSettings($plugin, ['chkDuplicateEntries' => $duplicateEntries, 'uploadVolume' => $selectedVolume, 'twigSearchFilterSingleQuote' => $twigSearchFilterSingleQuote, 'twigSearchFilterDoubleQuote' => $twigSearchFilterDoubleQuote])) { + if (!$pluginService->savePluginSettings($plugin, ['chkDuplicateEntries' => $duplicateEntries, 'uploadVolume' => $selectedVolume, 'twigSearchFilterSingleQuote' => $twigSearchFilterSingleQuote, 'twigSearchFilterDoubleQuote' => $twigSearchFilterDoubleQuote, 'targetStringPosition' => $targetStringPosition])) { Craft::$app->getSession()->setError(Translations::$plugin->translator->translate('app', 'Unable to save setting.')); } else { Craft::$app->getSession()->setNotice(Translations::$plugin->translator->translate('app', 'Setting saved.')); diff --git a/src/models/Settings.php b/src/models/Settings.php index 103e715e..64f9923d 100644 --- a/src/models/Settings.php +++ b/src/models/Settings.php @@ -30,6 +30,8 @@ class Settings extends Model public $twigSearchFilterDoubleQuote = ""; + public $targetStringPosition = ""; + /** @var int The Volume ID where uploads will be saved */ public $uploadVolume = 0; diff --git a/src/services/repository/StaticTranslationsRepository.php b/src/services/repository/StaticTranslationsRepository.php index 9e668428..693bc5cb 100644 --- a/src/services/repository/StaticTranslationsRepository.php +++ b/src/services/repository/StaticTranslationsRepository.php @@ -138,8 +138,17 @@ private function getFileStrings($path, $file, ElementQueryInterface $query, $cat * @return array */ public function getExpressions($ext) { - $twigSearchFilterSingleQuote = !empty(Translations::getInstance()->settings->twigSearchFilterSingleQuote) ? Translations::getInstance()->settings->twigSearchFilterSingleQuote : '/\'((?:[^\']|\\\\\')*)\'\s*\|\s*t(?:ranslate)?\b/'; - $twigSearchFilterDoubleQuote = !empty(Translations::getInstance()->settings->twigSearchFilterDoubleQuote) ? Translations::getInstance()->settings->twigSearchFilterDoubleQuote : '/"((?:[^"]|\\\\")*)"\s*\|\s*t(?:ranslate)?\b/'; + $settings = Translations::getInstance()->settings; + if(!empty($settings->twigSearchFilterSingleQuote)) { + $twigSearchFilterSingleQuote = $settings->twigSearchFilterSingleQuote; + $twigSearchFilterDoubleQuote = $settings->twigSearchFilterDoubleQuote; + $targetStringPosition = $settings->targetStringPosition; + } else { + $twigSearchFilterSingleQuote = '/\'((?:[^\']|\\\\\')*)\'\s*\|\s*t(?:ranslate)?\b/'; + $twigSearchFilterDoubleQuote = '/"((?:[^"]|\\\\")*)"\s*\|\s*t(?:ranslate)?\b/'; + $targetStringPosition = 1; + } + $exp = []; switch ($ext) { case 'php': @@ -156,7 +165,7 @@ public function getExpressions($ext) { case 'atom': case 'rss': $exp = [ - 'position' => '1', + 'position' => $targetStringPosition, 'regex' => [ $twigSearchFilterSingleQuote, $twigSearchFilterDoubleQuote ] diff --git a/src/templates/settings/configuration-options.twig b/src/templates/settings/configuration-options.twig index 2d3919bb..825c8a9b 100644 --- a/src/templates/settings/configuration-options.twig +++ b/src/templates/settings/configuration-options.twig @@ -40,6 +40,7 @@ {{ forms.textField({ label: "Twig search filter (single quote)"|t('app'), + placeholder: "Twig search filter (single quote)"|t('app'), id: 'twigSearchFilterSingleQuote', name: 'twigSearchFilterSingleQuote', value: twigSearchFilterSingleQuote ?? '', @@ -48,12 +49,22 @@ {{ forms.textField({ label: "Twig search filter (double quote)"|t('app'), + placeholder: "Twig search filter (double quote)"|t('app'), id: 'twigSearchFilterDoubleQuote', name: 'twigSearchFilterDoubleQuote', value: twigSearchFilterDoubleQuote ?? '', size: '40', }) }} + {{ forms.textField({ + label: "Target String Position"|t('app'), + placeholder: "Target String Position"|t('app'), + id: 'targetStringPosition', + name: 'targetStringPosition', + value: targetStringPosition ?? '', + size: '40', + }) }} +