public function init()
 {
     $this->setTitle('Translate Language')->setDescription('Translate a language pack using Google Translate.')->setAction(Zend_Controller_Front::getInstance()->getRouter()->assemble(array()));
     // Build language list
     $translate = Zend_Registry::get('Zend_Translate');
     //$translate        = new Zend_Translate_Adapter();
     $languageList = Zend_Locale_Data::getList('en', 'language');
     $territoryList = Zend_Locale_Data::getList('en', 'territory');
     //var_dump(array_intersect(Engine_Service_GTranslate::getAvailableLanguages(), array_keys($languageList)));
     //var_dump(array_diff(Engine_Service_GTranslate::getAvailableLanguages(), array_keys($languageList)));
     //var_dump(array_diff(array_keys($languageList), Engine_Service_GTranslate::getAvailableLanguages()));
     //die();
     $languageNameList = array();
     foreach (array_keys(Zend_Locale::getLocaleList()) as $localeCode) {
         $lang_array = explode('_', $localeCode);
         $locale = array_shift($lang_array);
         $territory = array_shift($lang_array);
         // Full locale
         $languageName = null;
         if (isset($languageList[$localeCode])) {
             $languageName = $languageList[$locale] . ' [' . $localeCode . ']';
         } else {
             if (isset($languageList[$locale])) {
                 $languageName = $languageList[$locale];
                 if (!empty($territoryList[$territory])) {
                     $languageName .= ' (' . $territoryList[$territory] . ')';
                 }
                 $languageName .= ' [' . $localeCode . ']';
             } else {
                 //$languageName = '[' . $localeCode . ']';
             }
         }
         // Check against gtranslate
         if (!Engine_Service_GTranslate::isAvailableLanguage($localeCode)) {
             continue;
             //} else if( !Engine_Service_GTranslate::testAvailableLanguage($localeCode) ) {
             //  echo 'Bad: ' . $localeCode . '<br />' . PHP_EOL;
             //  continue;
             //} else {
             //  echo 'Good: ' . $localeCode . '<br />' . PHP_EOL;
         }
         if ($languageName) {
             $languageNameList[$localeCode] = $languageName;
         }
     }
     asort($languageNameList);
     // Let's pull the existing languages to the top?
     $existingLanguageNameList = array();
     $notExistingLanguageNameList = array();
     foreach ($translate->getList() as $locale) {
         if (isset($languageNameList[$locale])) {
             $existingLanguageNameList[$locale] = $languageNameList[$locale];
         }
     }
     $notExistingLanguageNameList = array_diff_key($languageNameList, $existingLanguageNameList);
     //$languageNameList = array_merge($existingLanguageNameList, $languageNameList);
     $targetMultiOptions = array_merge($existingLanguageNameList, $notExistingLanguageNameList);
     $targetMultiOptions = array('Translated' => $existingLanguageNameList, 'Untranslated' => $notExistingLanguageNameList, 'Special' => array('all' => 'All Available', 'all-translated' => 'All Translated', 'all-untranslated' => 'All Untranslated'));
     // Element: source
     $this->addElement('Select', 'source', array('label' => 'Source language', 'value' => 'en', 'required' => true, 'allowEmpty' => false));
     foreach ($translate->getList() as $locale) {
         if (!Engine_Service_GTranslate::isAvailableLanguage($locale)) {
             continue;
         }
         $this->source->addMultiOption($locale, @$languageNameList[$locale] ? $languageNameList[$locale] : $locale);
     }
     // Element: target
     $this->addElement('Select', 'target', array('label' => 'Target Language', 'multiOptions' => array_merge(array('' => ''), $targetMultiOptions), 'required' => true, 'allowEmpty' => false));
     // Element: batchCount
     $this->addElement('Text', 'batchCount', array('label' => 'Batch Count', 'allowEmpty' => false, 'validators' => array('Int'), 'value' => 50));
     // Element: overwrite
     $this->addElement('Radio', 'overwrite', array('label' => 'Retranslate', 'description' => 'Do you want to retranslate existing phrases?', 'multiOptions' => array('1' => 'Yes', '0' => 'No'), 'value' => '0'));
     // Element: test
     $this->addElement('Text', 'test', array('label' => 'Test Translation', 'description' => 'Test Translation'));
     // Element: submit
     $this->addElement('Button', 'submit', array('label' => 'Translate', 'type' => 'submit', 'decorators' => array('ViewHelper')));
     // Element: cancel
     $this->addElement('Cancel', 'cancel', array('prependText' => ' or ', 'link' => true, 'label' => 'cancel', 'onclick' => 'history.go(-1); return false;', 'decorators' => array('ViewHelper')));
     // DisplayGroup: buttons
     $this->addDisplayGroup(array('submit', 'cancel'), 'buttons');
 }
 public function translatePhraseAction()
 {
     // Make sure source is valid
     $this->view->source = $source = $this->_getParam('source');
     if (!Zend_Locale::isLocale($source)) {
         $this->view->status = false;
         $this->view->error = 'Source is not a valid Zend locale';
         return;
     }
     if (!Engine_Service_GTranslate::isAvailableLanguage($source)) {
         $this->view->status = false;
         $this->view->error = 'Source is not a valid Google locale';
         return;
     }
     // Make sure target is valid
     $this->view->target = $target = $this->_getParam('target');
     if (!Zend_Locale::isLocale($target)) {
         $this->view->status = false;
         $this->view->error = 'Target is not a valid Zend locale';
         return;
     }
     if (!Engine_Service_GTranslate::isAvailableLanguage($target)) {
         $this->view->status = false;
         $this->view->error = 'Target is not a valid Google locale';
         return;
     }
     // Make sure we have a phrase
     $text = $this->_getParam('text');
     if (!$text) {
         $this->view->status = false;
         $this->view->error = 'No text was given';
         return;
     }
     // Check for escape param
     $escape = (bool) $this->_getParam('escape', true);
     // Send query
     $languageApi = new Engine_Service_GTranslate();
     $languageApi->setRequestType('curl');
     if ($escape) {
         $this->view->sourcePhraseUnescaped = $text;
         $text = $this->_escape($text);
     }
     $response = $languageApi->query($source, $target, $text);
     if ($escape) {
         $this->view->targetPhraseEscaped = $response;
         $response = $this->_unescape($response);
     }
     // Assign response
     $this->view->sourcePhrase = $text;
     $this->view->targetPhrase = $response;
 }
 /**
  * Get available languages
  *
  * @param boolean $translateLocales
  * @return string
  */
 public static function getAvailableLanguages($translateLocales = true)
 {
     if (null === self::$_availableLanguages) {
         self::$_availableLanguages = array_diff(self::$_knownLanguages, self::$_unavailableLanguages);
     }
     if (!$translateLocales) {
         return self::$_availableLanguages;
     } else {
         $availableLanguages = array();
         $reverseTranslate = array_flip(self::$_localeToLanguage);
         foreach (self::$_availableLanguages as $availableLanguage) {
             if (isset($reverseTranslate[$availableLanguage])) {
                 $availableLanguage = $reverseTranslate[$availableLanguage];
             }
             $availableLanguages[] = $availableLanguage;
         }
         return $availableLanguages;
     }
 }