diff options
Diffstat (limited to 'core/Plugin/Manager.php')
-rw-r--r-- | core/Plugin/Manager.php | 32 |
1 files changed, 29 insertions, 3 deletions
diff --git a/core/Plugin/Manager.php b/core/Plugin/Manager.php index 114d79a1d6..e3d32f4e98 100644 --- a/core/Plugin/Manager.php +++ b/core/Plugin/Manager.php @@ -9,10 +9,14 @@ namespace Piwik\Plugin; +use Piwik\Cache\PluginAwareStaticCache; +use Piwik\Cache\StaticCache; +use Piwik\CacheFile; use Piwik\Common; use Piwik\Config as PiwikConfig; use Piwik\Config; use Piwik\Db; +use Piwik\Development; use Piwik\EventDispatcher; use Piwik\Filesystem; use Piwik\Option; @@ -645,11 +649,33 @@ class Manager extends Singleton if (empty($language)) { $language = Translate::getLanguageToLoad(); } - $plugins = $this->getLoadedPlugins(); - foreach ($plugins as $plugin) { - $this->loadTranslation($plugin, $language); + $cache = new CacheFile('tracker', 43200); // ttl=12hours + $cacheKey = 'PluginTranslations-' . $language; + $translations = $cache->get($cacheKey); + + if (!empty($translations) && + !Development::isEnabled()) { + + Translate::mergeTranslationArray($translations); + return; } + + $translations = array(); + $pluginNames = self::getAllPluginsNames(); + + foreach ($pluginNames as $pluginName) { + if ($this->isPluginThirdPartyAndBogus($pluginName)) { + continue; + } + + $this->loadTranslation($pluginName, $language); + if (isset($GLOBALS['Piwik_translations'][$pluginName])) { + $translations[$pluginName] = $GLOBALS['Piwik_translations'][$pluginName]; + } + } + + $cache->set($cacheKey, $translations); } /** |