public function testGetTranslationPageText()
 {
     $title = Title::newFromText(__CLASS__);
     $page = TranslatablePage::newFromText($title, '<translate>Hello <tvar|abc>peter!</></translate>');
     $prefix = $title->getPrefixedDBKey() . '/';
     $parse = $page->getParse();
     $collection = array();
     $expected = 'Hello peter!';
     $actual = $parse->getTranslationPageText($collection);
     $this->assertEquals($expected, $actual, 'Variable declarations are substituted when no translation');
     foreach ($parse->sections as $section) {
         $key = $prefix . $section->id;
         $message = new FatMessage($key, $section->getText());
         $message->setTranslation($section->getText());
         $collection[$key] = $message;
     }
     $actual = $parse->getTranslationPageText($collection);
     $this->assertEquals($expected, $actual, 'Variable declarations are substituted in source language');
     foreach ($parse->sections as $section) {
         $key = $prefix . $section->id;
         $message = new FatMessage($key, $section->getText());
         $message->setTranslation($section->getTextForTrans());
         $collection[$key] = $message;
     }
     $actual = $parse->getTranslationPageText($collection);
     $this->assertEquals($expected, $actual, 'Variable declarations are substituted in translation');
 }
 public function __construct($messages)
 {
     $keys = array_keys($messages);
     $this->keys = array_combine($keys, $keys);
     foreach ($messages as $key => $value) {
         $m = new FatMessage($key, $value);
         $m->setTranslation($value);
         $this->messages[$key] = $m;
     }
     $this->messages['foobar']->addTag('fuzzy');
 }
 public function __construct()
 {
     $msg = new FatMessage('translatedmsg', 'definition');
     $msg->setTranslation('translation');
     $this->messages['translatedmsg'] = $msg;
     $msg = new FatMessage('fuzzymsg', 'definition');
     $msg->addTag('fuzzy');
     $msg->setTranslation('!!FUZZY!!translation');
     $this->messages['fuzzymsg'] = $msg;
     $msg = new FatMessage('untranslatedmsg', 'definition');
     $this->messages['untranslatedmsg'] = $msg;
     $this->tags = array('fuzzy' => array('fuzzymsg'));
     $this->keys = array_flip(array_keys($this->messages));
 }
    public function testMsgctxtExport()
    {
        /** @var FileBasedMessageGroup $group */
        $group = MessageGroupBase::factory($this->groupConfiguration);
        $ffs = new GettextFFS($group);
        $object = new ReflectionObject($ffs);
        $method = $object->getMethod('formatMessageBlock');
        $method->setAccessible(true);
        $key = 'key';
        $m = new FatMessage('key', 'definition');
        $m->setTranslation('translation');
        $trans = array();
        $pot = array();
        $pluralCount = 0;
        $results = <<<GETTEXT
#
msgid "definition"
msgstr "translation"

#
msgctxt ""
msgid "definition"
msgstr "translation"

#
msgctxt "context"
msgid "definition"
msgstr "translation"
GETTEXT;
        $results = preg_split('/\\n\\n/', $results);
        // Case 1: no context
        $this->assertEquals($results[0], trim($method->invoke($ffs, $key, $m, $trans, $pot, $pluralCount)));
        // Case 2: empty context
        $pot['ctxt'] = '';
        $this->assertEquals($results[1], trim($method->invoke($ffs, $key, $m, $trans, $pot, $pluralCount)));
        // Case 3: context
        $pot['ctxt'] = 'context';
        $this->assertEquals($results[2], trim($method->invoke($ffs, $key, $m, $trans, $pot, $pluralCount)));
    }
 public function getCheckBox()
 {
     $this->mustBeKnownMessage();
     global $wgTranslateDocumentationLanguageCode;
     $placeholder = Html::element('div', array('class' => 'mw-translate-messagechecks'));
     $page = $this->handle->getKey();
     $translation = $this->getTranslation();
     $code = $this->handle->getCode();
     $en = $this->getDefinition();
     if (strval($translation) === '') {
         return $placeholder;
     }
     if ($code === $wgTranslateDocumentationLanguageCode) {
         return null;
     }
     $checker = $this->group->getChecker();
     if (!$checker) {
         return null;
     }
     $message = new FatMessage($page, $en);
     // Take the contents from edit field as a translation
     $message->setTranslation($translation);
     $checks = $checker->checkMessage($message, $code);
     if (!count($checks)) {
         return $placeholder;
     }
     $checkMessages = array();
     foreach ($checks as $checkParams) {
         array_splice($checkParams, 1, 0, 'parseinline');
         $checkMessages[] = call_user_func_array('wfMsgExt', $checkParams);
     }
     return Html::rawElement('div', array('class' => 'mw-translate-messagechecks'), TranslateUtils::fieldset(wfMsgHtml('translate-edit-warnings'), implode('<hr />', $checkMessages), array('class' => 'mw-sp-translate-edit-warnings')));
 }
 /**
  * @param MessageHandle $handle
  * @param string $text
  * @return bool
  */
 protected static function checkNeedsFuzzy(MessageHandle $handle, $text)
 {
     // Check for explicit tag.
     $fuzzy = MessageHandle::hasFuzzyString($text);
     // Docs are exempt for checks
     if ($handle->isDoc()) {
         return $fuzzy;
     }
     // Not all groups have checkers
     $group = $handle->getGroup();
     $checker = $group->getChecker();
     if (!$checker) {
         return $fuzzy;
     }
     $code = $handle->getCode();
     $key = $handle->getKey();
     $en = $group->getMessage($key, $group->getSourceLanguage());
     $message = new FatMessage($key, $en);
     // Take the contents from edit field as a translation.
     $message->setTranslation($text);
     $checks = $checker->checkMessage($message, $code);
     if (count($checks)) {
         $fuzzy = true;
     }
     return $fuzzy;
 }
 public function getCheckBox()
 {
     $this->mustBeKnownMessage();
     global $wgTranslateDocumentationLanguageCode;
     $context = RequestContext::getMain();
     $title = $context->getOutput()->getTitle();
     list($alias, ) = SpecialPageFactory::resolveAlias($title->getText());
     $tux = SpecialTranslate::isBeta($context->getRequest()) && $title->isSpecialPage() && $alias === 'Translate';
     $formattedChecks = $tux ? FormatJson::encode(array()) : Html::element('div', array('class' => 'mw-translate-messagechecks'));
     $page = $this->handle->getKey();
     $translation = $this->getTranslation();
     $code = $this->handle->getCode();
     $en = $this->getDefinition();
     if (strval($translation) === '') {
         return $formattedChecks;
     }
     if ($code === $wgTranslateDocumentationLanguageCode) {
         return $formattedChecks;
     }
     // We need to get the primary group of the message. It may differ from
     // the supplied group (aggregate groups, dynamic groups).
     $checker = $this->handle->getGroup()->getChecker();
     if (!$checker) {
         return $formattedChecks;
     }
     $message = new FatMessage($page, $en);
     // Take the contents from edit field as a translation
     $message->setTranslation($translation);
     $checks = $checker->checkMessage($message, $code);
     if (!count($checks)) {
         return $formattedChecks;
     }
     $checkMessages = array();
     foreach ($checks as $checkParams) {
         $key = array_shift($checkParams);
         $checkMessages[] = $context->msg($key, $checkParams)->parse();
     }
     if ($tux) {
         $formattedChecks = FormatJson::encode($checkMessages);
     } else {
         $formattedChecks = Html::rawElement('div', array('class' => 'mw-translate-messagechecks'), TranslateUtils::fieldset($context->msg('translate-edit-warnings')->escaped(), implode('<hr />', $checkMessages), array('class' => 'mw-sp-translate-edit-warnings')));
     }
     return $formattedChecks;
 }