Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
authorsgiehl <stefan@piwik.org>2013-08-30 20:40:10 +0400
committersgiehl <stefan@piwik.org>2013-09-04 02:15:14 +0400
commitc125af242c907baa5dea760b3f414f8d71408c53 (patch)
tree987447027f067af7e1fa379ca070372d07ad666f /core
parent30c244736fe04a6c2f3fee40ed6ecae0071fc655 (diff)
added translations filter to filter by matching placeholder counts
Diffstat (limited to 'core')
-rw-r--r--core/Translate/Filter/ByParameterCount.php81
1 files changed, 81 insertions, 0 deletions
diff --git a/core/Translate/Filter/ByParameterCount.php b/core/Translate/Filter/ByParameterCount.php
new file mode 100644
index 0000000000..6b0f90f90b
--- /dev/null
+++ b/core/Translate/Filter/ByParameterCount.php
@@ -0,0 +1,81 @@
+<?php
+/**
+ * Piwik - Open source web analytics
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ *
+ * @category Piwik
+ * @package Piwik
+ */
+
+namespace Piwik\Translate\Filter;
+
+use Piwik\Translate\Filter\FilterAbstract;
+
+/**
+ * @package Piwik
+ * @subpackage Piwik_Translate
+ */
+class ByParameterCount extends FilterAbstract
+{
+ /**
+ * Filter the given translations
+ *
+ * @param array $translations
+ *
+ * @return array filtered translations
+ *
+ */
+ public function filter($translations)
+ {
+ $cleanedTranslations = array();
+
+ foreach ($translations AS $pluginName => $pluginTranslations) {
+
+ foreach ($pluginTranslations AS $key => $translation) {
+
+ if (isset($this->_baseTranslations[$pluginName][$key])) {
+ $baseTranslation = $this->_baseTranslations[$pluginName][$key];
+ } else {
+ $baseTranslation = '';
+ }
+
+ // ensure that translated strings have the same number of %s as the english source strings
+ $baseCount = $this->_getParametersCountToReplace($baseTranslation);
+ $translationCount = $this->_getParametersCountToReplace($translation);
+
+ if ($baseCount != $translationCount) {
+
+ $this->_filteredData[$pluginName][$key] = $translation;
+ continue;
+ }
+
+ $cleanedTranslations[$pluginName][$key] = $translation;
+ }
+ }
+
+ return $cleanedTranslations;
+ }
+
+ /**
+ * Counts the placeholder parameters n given string
+ *
+ * @param string $string
+ * @return array
+ */
+ protected function _getParametersCountToReplace($string)
+ {
+ $sprintfParameters = array('%s', '%1$s', '%2$s', '%3$s', '%4$s', '%5$s', '%6$s', '%7$s', '%8$s', '%9$s');
+ $count = array();
+ foreach ($sprintfParameters as $parameter) {
+
+ $placeholderCount = substr_count($string, $parameter);
+ if ($placeholderCount > 0) {
+
+ $count[$parameter] = $placeholderCount;
+ }
+ }
+ return $count;
+ }
+} \ No newline at end of file