diff options
author | sgiehl <stefan@piwik.org> | 2013-08-30 20:40:10 +0400 |
---|---|---|
committer | sgiehl <stefan@piwik.org> | 2013-09-04 02:15:14 +0400 |
commit | c125af242c907baa5dea760b3f414f8d71408c53 (patch) | |
tree | 987447027f067af7e1fa379ca070372d07ad666f /core | |
parent | 30c244736fe04a6c2f3fee40ed6ecae0071fc655 (diff) |
added translations filter to filter by matching placeholder counts
Diffstat (limited to 'core')
-rw-r--r-- | core/Translate/Filter/ByParameterCount.php | 81 |
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 |