/** * @param CM_Model_Language $language */ public function __construct(CM_Model_Language $language) { $translations = array(); foreach (new CM_Paging_Translation_Language($language, null, null, null, true) as $translation) { $translations[$translation['key']] = $language->getTranslation($translation['key']); } $this->_content = 'cm.language.setAll(' . CM_Params::encode($translations, true) . ');'; }
/** * @param CM_Site_Abstract $site * @param bool|null $debug * @param CM_Model_Language $language */ public function __construct(CM_Site_Abstract $site, $debug = null, CM_Model_Language $language) { parent::__construct($site, $debug); $translations = array(); foreach ($language->getTranslations(true) as $translation) { $translations[$translation['key']] = $language->getTranslation($translation['key']); } $this->_js->append('cm.language.setAll(' . CM_Params::encode($translations, true) . ');'); }
public function testProcessTranslationsEnableKey() { $language = CMTest_TH::createLanguage('test'); $languageKey = CM_Model_LanguageKey::create('Hello World'); $this->assertSame(false, $languageKey->getJavascript()); $site = CM_Site_Abstract::factory(); $render = new CM_Frontend_Render(new CM_Frontend_Environment(null, null, $language)); // Check that key is *not* included in the JS translations list $versionJavascript = CM_Model_Language::getVersionJavascript(); $request = new CM_Http_Request_Get($render->getUrlResource('library-js', "translations/{$versionJavascript}.js")); $response = CM_Http_Response_Resource_Javascript_Library::createFromRequest($request, $site, $this->getServiceManager()); $response->process(); $this->assertNotContains('Hello World', $response->getContent()); // Request JS-enabling of language key via RPC call $body = CM_Params::jsonEncode(['method' => 'CM_Model_Language.requestTranslationJs', 'params' => ['Hello World']]); $request = new CM_Http_Request_Post('/rpc', null, null, $body); $response = CM_Http_Response_RPC::createFromRequest($request, $site, $this->getServiceManager()); $response->process(); CMTest_TH::reinstantiateModel($languageKey); $this->assertSame(true, $languageKey->getJavascript()); // Check that key *is* included in the JS translations list $versionJavascript = CM_Model_Language::getVersionJavascript(); $request = new CM_Http_Request_Get($render->getUrlResource('library-js', "translations/{$versionJavascript}.js")); $response = CM_Http_Response_Resource_Javascript_Library::createFromRequest($request, $site, $this->getServiceManager()); $response->process(); $this->assertContains('Hello World', $response->getContent()); }
public function testTrailingWhitespaceInLanguageKeyName() { CM_Db_Db::insert('cm_model_languagekey', ['name'], [['foo '], ['foo']]); $language = CM_Model_Language::create('Foo', 'foo', true); $language->getTranslations()->getAssociativeArray(); $this->assertEquals(['foo ', 'foo'], array_keys($language->getTranslations()->getAssociativeArray())); $this->assertCount(2, $language->getTranslations()); }
/** * @param string $phrase */ public function remove($phrase) { $languageKey = CM_Model_LanguageKey::findByName($phrase); if (!$languageKey) { return; } CM_Db_Db::delete('cm_languageValue', array('languageKeyId' => $languageKey->getId(), 'languageId' => $this->_language->getId())); $this->_change(); }
public function testDelete() { $language = CM_Model_Language::create('Foo', 'foo', true); $language->setTranslation('foo', 'bar'); $this->assertSame(array('foo' => array('value' => 'bar', 'variables' => array())), $language->getTranslations()->getAssociativeArray()); $languageKey = CM_Model_LanguageKey::findByName('foo'); $languageKey->delete(); $this->assertSame(array(), $language->getTranslations()->getAssociativeArray()); $this->assertSame(0, CM_Db_Db::count('cm_model_languagekey', array('name' => 'foo'))); $this->assertSame(0, CM_Db_Db::count('cm_languageValue', array('languageKeyId' => $languageKey->getId(), 'languageId' => $language->getId()))); }
public function testEnabled() { $english = CM_Model_Language::create('English', 'en', true); $italian = CM_Model_Language::create('Italian', 'it', true); $german = CM_Model_Language::create('German', 'de', true); $french = CM_Model_Language::create('French', 'fr', true); $svenska = CM_Model_Language::create('Svenska', 'sv', false); $paging = new CM_Paging_Language_Enabled(); $this->assertEquals([$english, $french, $german, $italian], $paging->getItems()); $this->assertNotContains($svenska, $paging->getItems()); }
public function testCreateAllData() { CMTest_TH::createDefaultCurrency(); $site = $this->getMockSite(); $language = CM_Model_Language::create('English', 'en', true); $currency = CM_Model_Currency::create('978', 'EUR'); $user = CM_Model_User::createStatic(['site' => $site, 'language' => $language, 'currency' => $currency]); $this->assertInternalType('int', $user->getCreated()); $this->assertEquals(time(), $user->getCreated()); $this->assertEquals(time(), $user->getLatestActivity()); $this->assertEquals($site, $user->getSite()); $this->assertEquals($language, $user->getLanguage()); $this->assertEquals($currency, $user->getCurrency()); }
public function testRenderTranslated() { $recipient = CMTest_TH::createUser(); $mail = new CM_Mail_Welcome($recipient); $language = CM_Model_Language::create('Test language', 'foo', true); $language->setTranslation('Welcome to {$siteName}!', 'foo'); list($subject, $html, $text) = $mail->render(); $nodeList = new CM_Dom_NodeList($html); $this->assertContains('foo', $nodeList->getText()); $nodeLink = $nodeList->find('a'); $this->assertSame(1, $nodeLink->count()); $this->assertSame('http://www.default.dev/example', $nodeLink->getAttribute('href')); $this->assertSame('Example Page', $nodeLink->getText()); $this->assertContains('border-style:solid;', $nodeLink->getAttribute('style')); }
public function testGetters() { $site = CM_Site_Abstract::factory(); $user = CM_Model_User::createStatic(); $language = CM_Model_Language::create('English', 'en', true); $timezone = new DateTimeZone('Europe/London'); $debug = true; $location = CM_Model_Location::createCountry('United Kingdom', 'UK'); $environment = new CM_Frontend_Environment($site, $user, $language, $timezone, $debug, $location); $this->assertSame($site, $environment->getSite()); $this->assertSame($user, $environment->getViewer(true)); $this->assertSame($language, $environment->getLanguage()); $this->assertSame($language->getAbbreviation(), $environment->getLocale()); $this->assertSame($timezone, $environment->getTimeZone()); $this->assertSame($debug, $environment->isDebug()); $this->assertSame($location, $environment->getLocation()); }
/** * @param CM_Model_Language $language * @param bool|null $javascriptOnly */ public function __construct(CM_Model_Language $language, $javascriptOnly = null) { $this->_language = $language; $this->_javascriptOnly = (bool) $javascriptOnly; $where = null; if ($javascriptOnly) { $where = 'k.javascript = 1'; // Include the javascript version in the cache key, so the paging invalidates when the version changes. $javascriptVersion = CM_Model_Language::getVersionJavascript(); $where .= " AND '{$javascriptVersion}' = '{$javascriptVersion}'"; } $orderBy = 'k.name ASC'; $join = 'LEFT JOIN `cm_languageValue` AS v ON k.id = v.languageKeyId AND v.languageId = ' . $this->_language->getId() . ' '; $groupBy = 'BINARY k.name'; $source = new CM_PagingSource_Sql_Deferred('k.name AS `key`, v.value, k.variables', 'cm_model_languagekey` as `k', $where, $orderBy, $join, $groupBy); $source->enableCache(null, CM_Cache_Persistent::getInstance()); parent::__construct($source); }
public function testPaging() { $language = CM_Model_Language::create('Foo', 'foo', true); $languagePagingAll = $language->getTranslations(); $languagePagingJavascriptOnly = $language->getTranslations(true); $this->assertEquals([], $languagePagingAll); $this->assertEquals([], $languagePagingJavascriptOnly); $languagePagingAll->set('foo', 'foo'); // js CM_Db_Db::update('cm_model_languagekey', ['javascript' => 1], ['name' => 'foo']); $languagePagingJavascriptOnly->set('bar', 'bar'); // js CM_Db_Db::update('cm_model_languagekey', ['javascript' => 1], ['name' => 'bar']); $languagePagingAll->set('baz', 'baz'); // no js $this->assertSame('foo', $language->getTranslations()->get('foo')); $this->assertSame('foo', $language->getTranslations(true)->get('foo')); $this->assertSame('bar', $language->getTranslations()->get('bar')); $this->assertSame('bar', $language->getTranslations(true)->get('bar')); $this->assertSame('baz', $language->getTranslations()->get('baz')); $exception = $this->catchException(function () use($language) { $language->getTranslations(true)->get('baz'); }); $this->assertInstanceOf('CM_Exception_Invalid', $exception); $languagePagingJavascriptOnly->set('foo', 'bar'); $this->assertSame('bar', $language->getTranslations(true)->get('foo')); $this->assertSame('bar', $language->getTranslations()->get('foo')); $languagePagingAll->set('bar', 'foo'); $this->assertSame('foo', $language->getTranslations()->get('bar')); $this->assertSame('foo', $language->getTranslations(true)->get('bar')); $languagePagingAll->remove('foo'); $this->assertSame(null, $language->getTranslations()->get('foo')); $this->assertSame(null, $language->getTranslations(true)->get('foo')); $languagePagingJavascriptOnly->remove('bar'); $this->assertSame(null, $language->getTranslations()->get('bar')); $this->assertSame(null, $language->getTranslations(true)->get('bar')); }
public function testSetUri() { $language = CM_Model_Language::create('english', 'en', true); $uri = '/en/foo/bar?foo1=bar1'; $headers = array('Host' => 'example.ch', 'Connection' => 'keep-alive'); /** @var CM_Http_Request_Abstract $mock */ $mock = $this->getMockForAbstractClass('CM_Http_Request_Abstract', array($uri, $headers)); $this->assertEquals($language, $mock->popPathLanguage()); $this->assertSame('/foo/bar', $mock->getPath()); $this->assertSame(array('foo', 'bar'), $mock->getPathParts()); $this->assertSame(array('foo1' => 'bar1'), $mock->getQuery()); $this->assertEquals($language, $mock->getLanguageUrl()); $this->assertSame($uri, $mock->getUri()); $mock->setUri('/foo1/bar1?foo=bar'); $this->assertSame('/foo1/bar1', $mock->getPath()); $this->assertSame(array('foo1', 'bar1'), $mock->getPathParts()); $this->assertSame(array('foo' => 'bar'), $mock->getQuery()); $this->assertNull($mock->getLanguageUrl()); $this->assertSame('/foo1/bar1?foo=bar', $mock->getUri()); }
/** * @return CM_Model_Language|null */ public function getLanguage() { if ($language = $this->_getLanguageViewer()) { return $language; } if ($language = $this->getLanguageUrl()) { return $language; } if ($language = $this->_getLanguageBrowser()) { return $language; } return CM_Model_Language::findDefault(); }
public function testRpcRequestTranslationJsNonExistentKey() { $exception = $this->catchException(function () { CM_Model_Language::rpc_requestTranslationJs('foo'); }); $this->assertInstanceOf('CM_Exception_Invalid', $exception); /** @var CM_Exception_Invalid $exception */ $this->assertSame('Language key not found', $exception->getMessage()); $this->assertSame(['phrase' => 'foo'], $exception->getMetaInfo()); }
<?php CM_Model_LanguageKey::deleteByName('First'); CM_Model_LanguageKey::deleteByName('Next'); CM_Model_LanguageKey::deleteByName('Previous'); CM_Model_LanguageKey::deleteByName('Last'); if ($en = CM_Model_Language::findByAbbreviation('en')) { $en->setTranslation('.pagination.first', 'First'); $en->setTranslation('.pagination.next', 'Next'); $en->setTranslation('.pagination.previous', 'Previous'); $en->setTranslation('.pagination.last', 'Last'); } if ($de = CM_Model_Language::findByAbbreviation('de')) { $de->setTranslation('.pagination.first', 'Erste'); $de->setTranslation('.pagination.next', 'Weiter'); $de->setTranslation('.pagination.previous', 'Zurück'); $de->setTranslation('.pagination.last', 'Letzte'); }
public function testGetTranslation() { $render = new CM_Frontend_Render(); $this->assertSame('abc', $render->getTranslation('abc')); $this->assertSame('abc cool', $render->getTranslation('abc {$variable}', array('variable' => 'cool'))); $this->assertSame('abc ', $render->getTranslation('abc {$variable}')); $this->assertSame('abc ', $render->getTranslation('abc {$variable}', array('foo' => 'bar'))); $language = CM_Model_Language::create('Test language', 'test', true); $render = new CM_Frontend_Render(new CM_Frontend_Environment(null, null, $language)); $language->setTranslation('abc {$variable}', 'translated stuff is {$variable}'); $this->assertSame('translated stuff is cool', $render->getTranslation('abc {$variable}', array('variable' => 'cool'))); }
/** * @expectedException CM_Exception_Invalid * @expectedExceptionMessage Language key `foo` not found */ public function testRpcRequestTranslationJsNonExistentKey() { CM_Model_Language::rpc_requestTranslationJs('foo'); }
/** * @param bool|null $fallbackToDefault * @return CM_Model_Language|null */ public function getLanguage($fallbackToDefault = null) { $language = $this->getEnvironment()->getLanguage(); if (null === $language && $fallbackToDefault) { if ($viewer = $this->getViewer()) { $language = $viewer->getLanguage(); } if (null === $language) { $language = CM_Model_Language::findDefault(); } } return $language; }
public function testGetLanguage() { $language = CM_Model_Language::create('English', 'en', true); $params = new CM_Params(array('language' => $language, 'languageId' => $language->getId(), 'no-object-param' => 'xyz')); $this->assertEquals($language, $params->getLanguage('language')); $this->assertEquals($language, $params->getLanguage('languageId')); try { $params->getLanguage('no-object-param'); $this->fail('getObject should fail and throw exception'); } catch (CM_Exception $e) { $this->assertSame('Model has no data', $e->getMessage()); $this->assertContains(get_class($language), $e->getMetaInfo()); } }
/** * @param string|null $abbreviation * @return CM_Model_Language */ public static function createLanguage($abbreviation = null) { if (!$abbreviation) { do { $abbreviation = self::_randStr(5); } while (CM_Model_Language::findByAbbreviation($abbreviation)); } return CM_Model_Language::create('English', $abbreviation, true); }
<?php $language = CM_Model_Language::findByAbbreviation('en'); $language->setTranslation('Please Confirm', 'Please Confirm');
/** * @param CM_Model_Language $language */ public function setLanguage(CM_Model_Language $language) { CM_Db_Db::update('cm_user', array('languageId' => $language->getId()), array('userId' => $this->getId())); $this->_change(); }