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));
 }
Example #2
0
 /**
  * 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();
          }
          } */
}