function onInit() { parent::onInit(); try { I18N::getCountries(); } catch(Exception $e) { $this->available = false; return; } $this->form = new Form($this->getRequest(), new Location($this), Request::METHOD_GET); // Add the country select field $countries = I18N::getCountries(); // This returns all countries in form of cc => I18NCountry object pairs ksort($countries); // Sort the list by country code foreach($countries as $k=>$v) { $countries[$k] = $v->getCode() . ' - ' . $v->getName(); } // Now $countries is an array of cc => 'code - country' pairs $this->form->addField('country', new SelectInputField($this->getRequest()->getParameter('country'), $countries, '...')); // Add the lang select field $dialects = I18N::getDialects(); // This returns all dialects in form of cc_dc => I18NDialect object ksort($dialects); // sorting by key will assure that dialects are sorted by their lang codes foreach($dialects as $k=>$v) { // Create the dropdown select box for dialects $colls = $v->getCollations(); // We will add collations too foreach($colls as $collc=>$coll) { $dials[$k . '_' . $collc] = $v->getLanguage()->getCode() . ' - ' . $v->getName() . ' / ' . $coll->getName(); } // Now $dials holds an array in form lc_dc_collc => 'lc - dialect / collation' pairs } $this->form->addField('dialect', new SelectInputField($this->getRequest()->getParameter('dialect'), $dials, '...')); // Add the timezone select field $tzs = I18N::getTimeZones(); // This returns all timezones in form code => I18NTimeZone object uasort($tzs, array($this, 'tzSort')); // We sort this array with the user function to have timezones sorted by GMT offset foreach($tzs as $k=>$v) { $tzs1[$k] = I18NTimeZone::formatOffset($v->getUTCOffset()) . ': ' . join(', ', $v->getLocations()); } // Now $tzs1 is an array of code => '+HH:MM: locations' pairs $this->form->addField('tz', new SelectInputField($this->getRequest()->getParameter('tz'), $tzs1, '...')); // Add the 'case sensitive collate' checkbox $this->form->addField('caseSensitive', new CheckBoxInputField($this->getRequest()->getParameter('caseSensitive'))); }