diff --git a/CHANGELOG.md b/CHANGELOG.md index 75e5b5e458e29dcd516dab398e0a65e15f038e71..79d6020320fa2e982b265b166efe2c1ee1c53661 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,9 @@ This is a changelog for Piwik platform developers. All changes for our HTTP API' ### Breaking Changes * The event `User.getLanguage` has been removed. +### Deprecations +* The `Piwik\Translate` class has been deprecated in favor of `Piwik\Translation\Translator`. + ## Piwik 2.10.0 ### Breaking Changes diff --git a/core/FrontController.php b/core/FrontController.php index 89e91b943b2da4caa2d81987cf7620e7a36144bc..28031e863b1d87d682a1f40a8400579618b539dd 100644 --- a/core/FrontController.php +++ b/core/FrontController.php @@ -442,7 +442,6 @@ class FrontController extends Singleton } SettingsServer::raiseMemoryLimitIfNecessary(); - Translate::reloadLanguage(); \Piwik\Plugin\Manager::getInstance()->postLoadPlugins(); /** diff --git a/core/Piwik.php b/core/Piwik.php index e3d1d5ba35183152fc6c85303000afb84b3bd396..2227eca2e43ece42f1dcb109e1e9d70efefbbce1 100644 --- a/core/Piwik.php +++ b/core/Piwik.php @@ -735,15 +735,16 @@ class Piwik * @param string $translationId Translation ID, eg, `'General_Date'`. * @param array|string|int $args `sprintf` arguments to be applied to the internationalized * string. + * @param string|null $language Optionally force the language. * @return string The translated string or `$translationId`. * @api */ - public static function translate($translationId, $args = array()) + public static function translate($translationId, $args = array(), $language = null) { /** @var Translator $translator */ $translator = StaticContainer::getContainer()->get('Piwik\Translation\Translator'); - return $translator->translate($translationId, $args); + return $translator->translate($translationId, $args, $language); } /** diff --git a/core/Tracker/ScheduledTasksRunner.php b/core/Tracker/ScheduledTasksRunner.php index 3f4602ef2b298c9c0c6e8d23928c04878c9ea088..2a4683a4cb3e904c5581141d944387b7c741ef1f 100644 --- a/core/Tracker/ScheduledTasksRunner.php +++ b/core/Tracker/ScheduledTasksRunner.php @@ -78,10 +78,6 @@ class ScheduledTasksRunner // Scheduled tasks assume Super User is running Piwik::setUserHasSuperUserAccess(); - // While each plugins should ensure that necessary languages are loaded, - // we ensure English translations at least are loaded - Translate::loadEnglishTranslation(); - ob_start(); CronArchive::$url = SettingsPiwik::getPiwikUrl(); $cronArchive = new CronArchive(); diff --git a/core/Translate.php b/core/Translate.php index c828ed3d1df3c92224898d41e8abcb2d7eddc10e..eb7f19f21d0d5773a8899e73a776fbad6959d12d 100644 --- a/core/Translate.php +++ b/core/Translate.php @@ -10,6 +10,7 @@ namespace Piwik; use Exception; use Piwik\Container\StaticContainer; +use Piwik\Plugin\Manager; use Piwik\Translation\Translator; /** @@ -29,16 +30,25 @@ class Translate return html_entity_decode(trim($s), ENT_QUOTES, 'UTF-8'); } + /** + * @deprecated + */ public static function loadEnglishTranslation() { - self::loadCoreTranslation(); + self::loadAllTranslations(); } + /** + * @deprecated + */ public static function unloadEnglishTranslation() { - self::getTranslator()->reset(); + self::reset(); } + /** + * @deprecated + */ public static function reloadLanguage($language = false) { } @@ -54,6 +64,9 @@ class Translate self::getTranslator()->addDirectory(PIWIK_INCLUDE_PATH . '/lang'); } + /** + * @deprecated + */ public static function mergeTranslationArray($translation) { } @@ -107,4 +120,10 @@ class Translate { return StaticContainer::getContainer()->get('Piwik\Translation\Translator'); } + + public static function loadAllTranslations() + { + self::loadCoreTranslation(); + Manager::getInstance()->loadPluginTranslations(); + } } diff --git a/core/Translation/Translator.php b/core/Translation/Translator.php index 9d256b6940c499c530e9b6a6db090a7967a66e27..a9099e29711aa645d06f1ddcdd1051453d969633 100644 --- a/core/Translation/Translator.php +++ b/core/Translation/Translator.php @@ -68,16 +68,19 @@ class Translator * @param string $translationId Translation ID, eg, `General_Date`. * @param array|string|int $args `sprintf` arguments to be applied to the internationalized * string. + * @param string|null $language Optionally force the language. * @return string The translated string or `$translationId`. * @api */ - public function translate($translationId, $args = array()) + public function translate($translationId, $args = array(), $language = null) { $args = is_array($args) ? $args : array($args); if (strpos($translationId, "_") !== false) { list($plugin, $key) = explode("_", $translationId, 2); - $translationId = $this->getTranslation($translationId, $this->currentLanguage, $plugin, $key); + $language = is_string($language) ? $language : $this->currentLanguage; + + $translationId = $this->getTranslation($translationId, $language, $plugin, $key); } if (count($args) == 0) { diff --git a/plugins/API/API.php b/plugins/API/API.php index 8e875323672ebe4b613357af1ae3c58fff3834b2..be03396f68a1f06d123a7ed4b6f4a25aad95a43d 100644 --- a/plugins/API/API.php +++ b/plugins/API/API.php @@ -12,6 +12,7 @@ use Piwik\API\Proxy; use Piwik\API\Request; use Piwik\Columns\Dimension; use Piwik\Config; +use Piwik\Container\StaticContainer; use Piwik\DataTable; use Piwik\DataTable\Filter\ColumnDelete; use Piwik\DataTable\Row; @@ -25,6 +26,7 @@ use Piwik\Plugin\Dimension\VisitDimension; use Piwik\Plugins\CoreAdminHome\CustomLogo; use Piwik\Segment\SegmentExpression; use Piwik\Translate; +use Piwik\Translation\Translator; use Piwik\Version; require_once PIWIK_INCLUDE_PATH . '/core/Config.php'; @@ -321,7 +323,10 @@ class API extends \Piwik\Plugin\API public function getMetadata($idSite, $apiModule, $apiAction, $apiParameters = array(), $language = false, $period = false, $date = false, $hideMetricsDoc = false, $showSubtableReports = false) { - Translate::reloadLanguage($language); + /** @var Translator $translator */ + $translator = StaticContainer::getContainer()->get('Piwik\Translation\Translator'); + $translator->setCurrentLanguage($language); + $reporter = new ProcessedReport(); $metadata = $reporter->getMetadata($idSite, $apiModule, $apiAction, $apiParameters, $language, $period, $date, $hideMetricsDoc, $showSubtableReports); return $metadata; diff --git a/plugins/Actions/tests/Unit/ArchiverTest.php b/plugins/Actions/tests/Unit/ArchiverTest.php index a3ba57511ab76e088de5741714d283c6f1e51d7c..ee1fe940eed4ecdadf7ff368d3c2903dfc0fd331 100644 --- a/plugins/Actions/tests/Unit/ArchiverTest.php +++ b/plugins/Actions/tests/Unit/ArchiverTest.php @@ -23,12 +23,12 @@ class ArchiverTests extends \PHPUnit_Framework_TestCase { public function setUp() { - Translate::reloadLanguage('en'); + Translate::loadAllTranslations(); } public function tearDown() { - Translate::unloadEnglishTranslation(); + Translate::reset(); } public function getActionNameTestData() diff --git a/plugins/Contents/tests/System/ContentsTest.php b/plugins/Contents/tests/System/ContentsTest.php index b555cf796253b34a333ea2e726ee65dcd47abefa..ccb7a690864aed9fc5297c5417a5796e8912cf36 100644 --- a/plugins/Contents/tests/System/ContentsTest.php +++ b/plugins/Contents/tests/System/ContentsTest.php @@ -47,12 +47,13 @@ class ContentsTest extends SystemTestCase protected function setup() { parent::setup(); - Translate::reloadLanguage('en'); + Translate::loadAllTranslations(); } protected function tearDown() { parent::tearDown(); + Translate::reset(); } public function getApiForTesting() diff --git a/plugins/Feedback/API.php b/plugins/Feedback/API.php index ce6acdce200149be17b21b03761892779a345c6d..70ba272d4d36236851026834e85265a27f6e78d1 100644 --- a/plugins/Feedback/API.php +++ b/plugins/Feedback/API.php @@ -80,22 +80,12 @@ class API extends \Piwik\Plugin\API private function getEnglishTranslationForFeatureName($featureName) { - $loadedLanguage = Translate::getLanguageLoaded(); - - if ($loadedLanguage == 'en') { + if (Translate::getLanguageLoaded() == 'en') { return $featureName; } $translationKeyForFeature = Translate::findTranslationKeyForTranslation($featureName); - if (!empty($translationKeyForFeature)) { - Translate::reloadLanguage('en'); - - $featureName = Piwik::translate($translationKeyForFeature); - Translate::reloadLanguage($loadedLanguage); - return $featureName; - } - - return $featureName; + return Piwik::translate($translationKeyForFeature, array(), 'en'); } } diff --git a/plugins/Insights/tests/Integration/ApiTest.php b/plugins/Insights/tests/Integration/ApiTest.php index 6eeac84700809ee2fabf189284b88cbf47c3035a..56d51add2ddbe7b5d02ff62f717d11ee4dfa644d 100644 --- a/plugins/Insights/tests/Integration/ApiTest.php +++ b/plugins/Insights/tests/Integration/ApiTest.php @@ -41,10 +41,17 @@ class ApiTest extends SystemTestCase PiwikCache::flushAll(); - Translate::reloadLanguage('en'); + Translate::loadAllTranslations(); $this->api = API::getInstance(); } + public function tearDown() + { + parent::tearDown(); + + Translate::reset(); + } + /** * '/Mover1' => 2, +8 // 400% * '/Old1' => 9, -9 // -100% diff --git a/plugins/Installation/Installation.php b/plugins/Installation/Installation.php index 427d3d502e40b4015edd34590823bdfff06ec972..3d501c26270f09a9bd8c43092ee472433a0de6d3 100644 --- a/plugins/Installation/Installation.php +++ b/plugins/Installation/Installation.php @@ -91,8 +91,6 @@ class Installation extends \Piwik\Plugin $message = ''; } - Translate::reloadLanguage(); - $action = Common::getRequestVar('action', 'welcome', 'string'); if ($this->isAllowedAction($action)) { diff --git a/plugins/ScheduledReports/API.php b/plugins/ScheduledReports/API.php index 1eade02df06b73d980d9492c68523fbd5b1eeb21..d93e252793f6ab77cbbd484161000aa55dce97ae 100644 --- a/plugins/ScheduledReports/API.php +++ b/plugins/ScheduledReports/API.php @@ -11,6 +11,7 @@ namespace Piwik\Plugins\ScheduledReports; use Exception; use Piwik\Common; use Piwik\Config; +use Piwik\Container\StaticContainer; use Piwik\Date; use Piwik\Db; use Piwik\Log; @@ -23,6 +24,7 @@ use Piwik\ReportRenderer; use Piwik\Site; use Piwik\Tracker; use Piwik\Translate; +use Piwik\Translation\Translator; /** * The ScheduledReports API lets you manage Scheduled Email reports, as well as generate, download or email any existing report. @@ -270,7 +272,9 @@ class API extends \Piwik\Plugin\API $language = Translate::getLanguageDefault(); } - Translate::reloadLanguage($language); + /** @var Translator $translator */ + $translator = StaticContainer::getContainer()->get('Piwik\Translation\Translator'); + $translator->setCurrentLanguage($language); $reports = $this->getReports($idSite = false, $_period = false, $idReport); $report = reset($reports); diff --git a/tests/PHPUnit/Framework/Fixture.php b/tests/PHPUnit/Framework/Fixture.php index 5cf7c1d59700c59b3f9dfe75f375102ee8b6edeb..751c4ce1abda7eb3f00edb114d4051d5ec7b6721 100644 --- a/tests/PHPUnit/Framework/Fixture.php +++ b/tests/PHPUnit/Framework/Fixture.php @@ -217,7 +217,7 @@ class Fixture extends \PHPUnit_Framework_Assert // Make sure translations are loaded to check messages in English if ($this->loadTranslations) { - Translate::reloadLanguage('en'); + Translate::loadAllTranslations(); APILanguageManager::getInstance()->setLanguageForUser('superUserLogin', 'en'); } @@ -314,7 +314,7 @@ class Fixture extends \PHPUnit_Framework_Assert EventDispatcher::getInstance()->clearAllObservers(); $_GET = $_REQUEST = array(); - Translate::unloadEnglishTranslation(); + Translate::reset(); Config::unsetInstance(); diff --git a/tests/PHPUnit/Framework/TestCase/SystemTestCase.php b/tests/PHPUnit/Framework/TestCase/SystemTestCase.php index 6429f5cf4f0e65d1a1fcd83d41d422ba0c6acbf1..8e63da92b8bef3669a557128b6a7a84c505deab4 100755 --- a/tests/PHPUnit/Framework/TestCase/SystemTestCase.php +++ b/tests/PHPUnit/Framework/TestCase/SystemTestCase.php @@ -12,7 +12,7 @@ use Exception; use Piwik\ArchiveProcessor\Rules; use Piwik\Common; use Piwik\Config; -use Piwik\DataAccess\ArchiveTableCreator; +use Piwik\Container\StaticContainer; use Piwik\Db; use Piwik\DbHelper; use Piwik\ReportRenderer; @@ -24,6 +24,7 @@ use Piwik\Translate; use Piwik\Log; use PHPUnit_Framework_TestCase; use Piwik\Tests\Framework\Fixture; +use Piwik\Translation\Translator; require_once PIWIK_INCLUDE_PATH . '/libs/PiwikTracker/PiwikTracker.php'; @@ -492,8 +493,9 @@ abstract class SystemTestCase extends PHPUnit_Framework_TestCase { if ($this->lastLanguage != $langId) { $_GET['language'] = $langId; - Translate::reset(); - Translate::reloadLanguage($langId); + /** @var Translator $translator */ + $translator = StaticContainer::getContainer()->get('Piwik\Translation\Translator'); + $translator->setCurrentLanguage($langId); } $this->lastLanguage = $langId; diff --git a/tests/PHPUnit/Integration/CacheIdTest.php b/tests/PHPUnit/Integration/CacheIdTest.php index 01d39d7e494b4cf901fd67e3f382b882a1560549..b549bc9668e4269a3925e682eb177f134b0b78dc 100644 --- a/tests/PHPUnit/Integration/CacheIdTest.php +++ b/tests/PHPUnit/Integration/CacheIdTest.php @@ -20,12 +20,12 @@ class CacheIdTest extends IntegrationTestCase { public function setUp() { - Translate::loadEnglishTranslation(); + Translate::loadAllTranslations(); } public function tearDown() { - Translate::unloadEnglishTranslation(); + Translate::reset(); } public function test_languageAware_shouldAppendTheLoadedLanguage() diff --git a/tests/PHPUnit/Integration/ReportTest.php b/tests/PHPUnit/Integration/ReportTest.php index 1e141db383eb4a0c318ae0bbb0ffc0fba15ee596..21e8a5254246909d80c30bee4dfad1c7c02fb790 100644 --- a/tests/PHPUnit/Integration/ReportTest.php +++ b/tests/PHPUnit/Integration/ReportTest.php @@ -116,7 +116,6 @@ class ReportTest extends IntegrationTestCase { WidgetsList::getInstance()->_reset(); MenuReporting::getInstance()->unsetInstance(); - Translate::unloadEnglishTranslation(); unset($_GET['idSite']); parent::tearDown(); } @@ -157,14 +156,16 @@ class ReportTest extends IntegrationTestCase public function test_getWidgetTitle_shouldReturnTranslatedTitleIfSet() { - $this->loadEnglishTranslation(); + Translate::loadAllTranslations(); $this->assertEquals('Page Titles Following a Site Search', $this->advancedReport->getWidgetTitle()); + Translate::reset(); } public function test_getCategory_shouldReturnTranslatedCategory() { - $this->loadEnglishTranslation(); + Translate::loadAllTranslations(); $this->assertEquals('Goals', $this->advancedReport->getCategory()); + Translate::reset(); } public function test_configureWidget_shouldNotAddAWidgetIfNoWidgetTitleIsSet() @@ -539,9 +540,4 @@ class ReportTest extends IntegrationTestCase { PluginManager::getInstance()->unloadPlugins(); } - - private function loadEnglishTranslation() - { - Translate::reloadLanguage('en'); - } } diff --git a/tests/PHPUnit/Integration/Tracker/ActionTest.php b/tests/PHPUnit/Integration/Tracker/ActionTest.php index 1ca87f96785e7728847dc76592170b78c588590b..a00ea4c9b3ccdec40da9e5f09d0e39fa2fa8b1b3 100644 --- a/tests/PHPUnit/Integration/Tracker/ActionTest.php +++ b/tests/PHPUnit/Integration/Tracker/ActionTest.php @@ -40,7 +40,14 @@ class ActionTest extends IntegrationTestCase PluginManager::getInstance()->loadPlugins(array('SitesManager')); - Translate::loadEnglishTranslation(); + Translate::loadAllTranslations(); + } + + public function tearDown() + { + parent::tearDown(); + + Translate::reset(); } protected function setUpRootAccess() diff --git a/tests/PHPUnit/Integration/WidgetsListTest.php b/tests/PHPUnit/Integration/WidgetsListTest.php index fc00be7799000ae03c652ad2481723ab2d326231..22967a9d2d64bb97a0a8a1ff649c2205cad571e2 100644 --- a/tests/PHPUnit/Integration/WidgetsListTest.php +++ b/tests/PHPUnit/Integration/WidgetsListTest.php @@ -164,7 +164,7 @@ class WidgetsListTest extends IntegrationTestCase FakeAccess::$superUser = true; Access::setSingletonInstance($pseudoMockAccess); - Translate::loadEnglishTranslation(); + Translate::loadAllTranslations(); Fixture::createWebsite('2009-01-04 00:11:42', true); @@ -175,5 +175,7 @@ class WidgetsListTest extends IntegrationTestCase $this->assertTrue(WidgetsList::isDefined('Actions', 'getPageUrls')); $this->assertFalse(WidgetsList::isDefined('Actions', 'inValiD')); + + Translate::reset(); } } diff --git a/tests/PHPUnit/Unit/Metrics/Formatter/HtmlTest.php b/tests/PHPUnit/Unit/Metrics/Formatter/HtmlTest.php index 6d7d18def31b7970784aaabf3d5b99387cb39b6e..dd0c0a106b77061f58a61ddbc41f4ab23e76219e 100644 --- a/tests/PHPUnit/Unit/Metrics/Formatter/HtmlTest.php +++ b/tests/PHPUnit/Unit/Metrics/Formatter/HtmlTest.php @@ -35,13 +35,13 @@ class HtmlTest extends \PHPUnit_Framework_TestCase $this->formatter = new Html(); - Translate::loadEnglishTranslation(); + Translate::loadAllTranslations(); $this->setSiteManagerApiMock(); } public function tearDown() { - Translate::unloadEnglishTranslation(); + Translate::reset(); $this->unsetSiteManagerApiMock(); } diff --git a/tests/PHPUnit/Unit/Metrics/FormatterTest.php b/tests/PHPUnit/Unit/Metrics/FormatterTest.php index 6cf3a8e502e4cff5b357a2cc8dd9840d39ec97ed..36def63bb14ee1ea24c9796a597b52bec95f34a1 100644 --- a/tests/PHPUnit/Unit/Metrics/FormatterTest.php +++ b/tests/PHPUnit/Unit/Metrics/FormatterTest.php @@ -51,13 +51,13 @@ class FormatterTest extends \PHPUnit_Framework_TestCase $this->formatter = new Formatter(); - Translate::loadEnglishTranslation(); + Translate::loadAllTranslations(); $this->setSiteManagerApiMock(); } public function tearDown() { - Translate::unloadEnglishTranslation(); + Translate::reset(); $this->unsetSiteManagerApiMock(); } diff --git a/tests/PHPUnit/Unit/Period/BasePeriodTest.php b/tests/PHPUnit/Unit/Period/BasePeriodTest.php index e6713b5f3da7615f3f6d3dcf2de04378b113fa96..a534b1bb2e4edaa6b9621a3832ef79db9038dc15 100644 --- a/tests/PHPUnit/Unit/Period/BasePeriodTest.php +++ b/tests/PHPUnit/Unit/Period/BasePeriodTest.php @@ -8,9 +8,7 @@ namespace Piwik\Tests\Unit\Period; -use Piwik\Container\StaticContainer; use Piwik\Translate; -use Piwik\Translation\Translator; abstract class BasePeriodTest extends \PHPUnit_Framework_TestCase { @@ -18,10 +16,7 @@ abstract class BasePeriodTest extends \PHPUnit_Framework_TestCase { parent::setUp(); - Translate::loadCoreTranslation(); - /** @var Translator $translator */ - $translator = StaticContainer::getContainer()->get('Piwik\Translation\Translator'); - $translator->addDirectory(PIWIK_INCLUDE_PATH . '/plugins/CoreHome/lang'); + Translate::loadAllTranslations(); } public function tearDown()