/** * @group ZF-9364 */ public function testElementTranslatorPreferredOverDefaultTranslator() { $defaultTranslations = array( 'isEmpty' => 'Default message', ); $formTranslations = array( 'isEmpty' => 'Form message', ); $elementTranslations = array( 'isEmpty' => 'Element message', ); $defaultTranslate = new Translator('ArrayAdapter', $defaultTranslations); $formTranslate = new Translator('ArrayAdapter', $formTranslations); $elementTranslate = new Translator('ArrayAdapter', $elementTranslations); Registry::set('Zend_Translator', $defaultTranslate); $this->form->setTranslator($formTranslate); $this->form->addElement('text', 'foo', array('required'=>true, 'translator'=>$elementTranslate)); $this->form->addElement('text', 'bar', array('required'=>true)); $this->assertFalse($this->form->isValid(array('foo'=>'', 'bar'=>''))); $messages = $this->form->getMessages(); $this->assertEquals(2, count($messages)); $this->assertEquals('Element message', $messages['foo']['isEmpty']); $this->assertEquals('Form message', $messages['bar']['isEmpty']); $this->assertFalse($this->form->isValidPartial(array('foo'=>'', 'bar'=>''))); $messages = $this->form->getMessages(); $this->assertEquals(2, count($messages)); $this->assertEquals('Element message', $messages['foo']['isEmpty']); $this->assertEquals('Form message', $messages['bar']['isEmpty']); }
/** * @group ZF-12375 */ public function testElementTranslatorNotOveriddenbyFormTranslatorDuringRendering() { // Set translator for form $this->form->setTranslator(new Zend_Translate('array', array('labelText' => 'Foo'))); // Add element with his own translator $this->form->addElement('text', 'foo', array('label' => 'labelText', 'translator' => new Zend_Translate('array', array('labelText' => 'Bar')), 'decorators' => array('Label'))); $this->form->setDecorators(array('FormElements')); // Test $this->assertSame(PHP_EOL . '<label for="foo" class="optional">Bar</label>' . PHP_EOL, $this->form->render(new Zend_View())); }
public function testLocalTranslatorPreferredOverDefaultGlobalTranslator() { $this->assertNull($this->form->getTranslator()); $translatorDefault = new Zend_Translate('array', array('foo' => 'bar')); Zend_Form::setDefaultTranslator($translatorDefault); $received = $this->form->getTranslator(); $this->assertSame($translatorDefault->getAdapter(), $received); $translator = new Zend_Translate('array', array('foo' => 'bar')); $this->form->setTranslator($translator); $received = $this->form->getTranslator(); $this->assertNotSame($translatorDefault->getAdapter(), $received); $this->assertSame($translator->getAdapter(), $received); }
protected function initTranslation(\Zend_Form $form, $id, $locale = null) { if ($locale === null) { $locale = \Zend_Locale::findLocale(); } $trans = $this->translateForm($id, $locale); if ($locale != null && $locale != "") { if (null === $form->getTranslator()) { $form->setTranslator($trans); } else { $form->getTranslator()->addTranslation($trans); } } }
public function translateAction() { $this->view->page_title .= $this->view->translate('Help us to translate nolotiro.org to your language'); $request = $this->getRequest(); $newlangs = array('ca' => 'Català', 'gl' => 'Galego', 'eu' => 'Euskara', 'nl' => 'Nederlands', 'de' => 'Deutsch', 'fr' => 'Français', 'pt' => 'Português', 'it' => 'Italiano'); $lform = new Zend_Form(); $lform->setMethod('get'); $lform->addElement('select', 'lang', array('multiOptions' => $newlangs)); $elem_newlang = $lform->getElement('lang'); $elem_newlang->removeDecorator('label')->removeDecorator('HtmlTag')->setAttrib('onchange', 'this.form.submit()'); $lform->populate($request->getParams()); $newlang = $elem_newlang->getValue(); $this->view->langsform = $lform; if ($newlang != null) { if (isset($newlangs[$newlang])) { $this->view->newlangtext = $newlangs[$newlang]; } else { $newlang == null; } } if ($newlang == null) { $elem_newlang->clearMultiOptions(); $elem_newlang->addMultiOption("", "-- " . $this->view->translate("Choose language") . " --"); $elem_newlang->addMultiOptions($newlangs); } else { $options = array('scan' => Zend_Translate::LOCALE_FILENAME); $translate = new Zend_Translate('csv', NOLOTIRO_PATH . '/application/languages/', 'en', $options); $adapter = $translate->getAdapter(); $es = $adapter->getMessages('es'); if (strcmp($this->lang, $newlang) != 0) { $userlang = $adapter->getMessages($this->lang); $adapter->setLocale($this->lang); } else { $adapter->setLocale("en"); } $en = $adapter->getMessages('en'); $lang = $adapter->getMessages($newlang); $tform = new Zend_Form(); $tform->setMethod('post'); $tform->setAttrib('class', 'texts'); $tform->addElement('captcha', 'safe_captcha', array('label' => 'Please, insert the 4 characters shown:', 'required' => true, 'captcha' => array(' captcha' => 'Image', 'wordLen' => 4, 'height' => 50, 'width' => 160, 'gcfreq' => 50, 'timeout' => 300, 'font' => NOLOTIRO_PATH . '/www/images/antigonimed.ttf', 'imgdir' => NOLOTIRO_PATH . '/www/images/captcha'))); $tform->setTranslator($adapter); $index = 0; foreach ($es as $key => $text) { if (strpos($key, "safe_") === 0) { continue; } if (isset($userlang[$key])) { $text = $userlang[$key]; } elseif (isset($en[$key])) { $text = $en[$key]; } else { $text = $key; } $maxlen = strlen($text) * 3; $text = preg_replace("/(\\<[^\\>]*\\>)/", " ", $text); $text = preg_replace("/(\\'?%[a-zA-Z\\-]*%?\\'?)/", "...", $text); if (isset($lang[$key])) { $val = $lang[$key]; $maxlen = strlen($val) * 3; $val = preg_replace("/(\\<[^\\>]*\\>)/", " ", $val); $val = preg_replace("/(\\'?%[a-zA-Z\\-]*%?\\'?)/", "...", $val); } else { $val = ''; } if ($maxlen < 20) { $maxlen = 20; } if ($maxlen < 140) { $type = "text"; $rows = 1; } else { $type = "textarea"; $rows = round($maxlen / 50); } $tform->addElement($type, "text{$index}", array('validators' => array(array('StringLength', false, array(1, $maxlen))), 'required' => false, 'label' => $text, 'value' => $val, 'cols' => 40, 'rows' => $rows)); $input = $tform->getElement("text{$index}"); if ($val == '') { $input->getDecorator('Label')->setOption('class', 'empty'); } $valid = $input->getValidator("StringLength")->setEncoding('UTF-8'); $index++; } // add the submit button $tform->addElement('submit', 'submit_texts', array('label' => 'Send texts', 'class' => 'magenta awesome')); $this->view->textsform = $tform; $this->view->newlang = $newlang; $tform->populate($request->getParams()); if ($tform->getElement("submit_texts")->getValue() != null) { $data = $tform->getValues(); if ($tform->isValid($data)) { $newdata = false; $index = 0; foreach ($es as $key => $text) { if (strpos($key, "safe_") === 0 || strpos($key, "lang") === 0) { continue; } $mod = false; $val = $data["text{$index}"]; $comp = $lang[$key]; $comp = preg_replace("/(\\<[^\\>]*\\>)/", " ", $comp); $comp = preg_replace("/(\\'?%[a-zA-Z\\-]*%?\\'?)/", "...", $comp); if ($val != "" && (!isset($lang[$key]) || ($mod = $comp != $val))) { $body .= "\"{$key}\";\"{$val}\"" . ($mod ? ' ***' : "") . "<br>"; if ($mod) { $body .= "\"{$key}\";\"{$comp}\"" . ($mod ? ' ***' : "") . "<br>"; } $newdata = true; } else { $body .= "<br>"; } $index++; } if (!$newdata) { $this->view->error = $this->view->translate('Please, translate at least one text.'); return; } $mail = new Zend_Mail('utf-8'); $mail->setBodyHtml($body); $auth = Zend_Auth::getInstance(); if ($auth->hasIdentity()) { $mail->setFrom($auth->getIdentity()->email, $auth->getIdentity()->username); } else { $mail->setFrom("*****@*****.**"); } $mail->addTo('*****@*****.**', 'aLabs'); $mail->setSubject("Translation: {$newlang}.csv"); $mail->send(); $this->_helper->_flashMessenger->addMessage($this->view->translate('Your translation has been sent. Thanks for your help!')); $this->_redirect('/' . $this->lang); } } } }
/** * Возвращает массив объектов Zend_Form мини-форм по типам * * @return array */ public function getForms() { $forms = array(); foreach ($this->configs as $fieldtype => $template) { $form = new Zend_Form($template); $form->setElementsBelongTo('fields[]'); $form->addDisplayGroup(array_keys($template['elements']), 'main', array('legend' => $template['label'], 'class' => 'ui-widget-content')); $form->removeDecorator('Form'); $form->removeDecorator('DtDdWrapper'); $form->setTranslator($this->translate); $forms[$fieldtype] = $form; } return $forms; }