public function testLoad() { $poFile = new CGettextPoFile(); $poFilePath = dirname(__FILE__) . '/../data/ru/test.po'; $context1 = $poFile->load($poFilePath, 'context1'); $context2 = $poFile->load($poFilePath, 'context2'); // item count $this->assertCount(4, $context1); $this->assertCount(2, $context2); // original messages $this->assertArrayHasKey("Missing\n\r\t\"translation.", $context1); $this->assertArrayHasKey("Aliquam tempus elit vel purus molestie placerat. In sollicitudin tincidunt\naliquet. Integer tincidunt gravida tempor. In convallis blandit dui vel malesuada.\nNunc vel sapien nunc, a pretium nulla.", $context1); $this->assertArrayHasKey("String number two.", $context1); $this->assertArrayHasKey("Nunc vel sapien nunc, a pretium nulla.\nPellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.", $context1); $this->assertArrayHasKey("\n\nThe other context.\n", $context2); $this->assertArrayHasKey("test1\\\ntest2\n\\\\\ntest3", $context2); // translated messages $this->assertTrue(in_array("\n\r\t\"", $context1)); $this->assertTrue(in_array("Олицетворение однократно. Представленный лексико-семантический анализ является\nпсихолингвистическим в своей основе, но механизм сочленений полидисперсен. Впечатление\nоднократно. Различное расположение выбирает сюжетный механизм сочленений.", $context1)); $this->assertTrue(in_array('Строка номер два.', $context1)); $this->assertTrue(in_array('Короткий перевод.', $context1)); $this->assertTrue(in_array("\n\nДругой контекст.\n", $context2)); $this->assertTrue(in_array("тест1\\\nтест2\n\\\\\nтест3", $context2)); }
/** * Loads the message translation for the specified language and category. * @param string $category the message category * @param string $language the target language * @return array the loaded messages */ protected function loadMessages($category, $language) { $messageFile = $this->basePath . DIRECTORY_SEPARATOR . $language . DIRECTORY_SEPARATOR . $this->catalog; if ($this->useMoFile) { $messageFile .= self::MO_FILE_EXT; } else { $messageFile .= self::PO_FILE_EXT; } if ($this->cachingDuration > 0 && $this->cacheID !== false && ($cache = Yii::app()->getComponent($this->cacheID)) !== null) { $key = self::CACHE_KEY_PREFIX . $messageFile; if (($data = $cache->get($key)) !== false) { return unserialize($data); } } if (is_file($messageFile)) { if ($this->useMoFile) { $file = new CGettextMoFile($this->useBigEndian); } else { $file = new CGettextPoFile(); } $messages = $file->load($messageFile, $category); if (isset($cache)) { $dependency = new CFileCacheDependency($messageFile); $cache->set($key, serialize($messages), $this->cachingDuration, $dependency); } return $messages; } else { return array(); } }
function InsertMessage($m) { $file = $m->sender->catalog; $messageFile = $m->sender->basePath . DIRECTORY_SEPARATOR . $m->language; if (!file_exists($messageFile)) { mkdir($messageFile, 0755); } $messageFile .= DIRECTORY_SEPARATOR . $file; $data = array(); if ($m->sender->useMoFile) { $messageFile .= CGettextMessageSource::MO_FILE_EXT; $file = new CGettextMoFile($m->sender->useBigEndian); if (is_file($messageFile)) { $data = $file->load($messageFile, $m->category); } } else { $messageFile .= CGettextMessageSource::PO_FILE_EXT; $file = new CGettextPoFile(); if (is_file($messageFile)) { $data = $file->load($messageFile, $m->category); } } $msg = strtoupper($m->language) . $m->message; try { $tmp = file_get_contents("http://translate.yandex.net/api/v1/tr.json/translate?lang=ru-{$m->language}&text=" . urlencode($m->message)); $tmp = json_decode($tmp); if ($tmp->code == 200) { $msg = $tmp->text[0]; } } catch (Exception $e) { //do nothing } $data[$m->category . chr(4) . $m->message] = $msg; $file->save($messageFile, $data); $m->message = $msg; /* $criteria = new CDbCriteria; $criteria->condition="`message`='".$m->message."'"; $c=MessageSource::model()->count($criteria); if($c==0) { $criteria->condition="`name`='".$m->category."'"; $c1=MessageCategory::model()->count($criteria); if ($c1==0) { $c = new MessageCategory(); $c->name=$m->category; $c->title=$m->category; $c->save(); } $mes = new MessageSource; $mes->message=$m->message; $mes->category=$m->category; if(!$mes->save()) { echo CHtml::errorSummary($mes); }else { $t = new Message(); $t->language=$m->language; $t->translation=$m->message; $t->id=$mes->id; $t->save(); } }else { $c=MessageSource::model()->find($criteria); if(Message::model()->count("`id`='{$c->id}' AND `language`='{$m->language}'")==0) { $t = new Message(); $t->language=$m->language; $t->translation=$m->message; $t->id=$c->id; $t->save(); } } */ }