Example #1
0
 private static function _add_locale_dropdown(&$form, $user = null)
 {
     $locales = locale::installed();
     if (count($locales) > 1) {
         // Put "none" at the first position in the array
         $locales = array_merge(array("" => t("« none »")), $locales);
         $selected_locale = $user && $user->locale ? $user->locale : "";
         $form->dropdown("locale")->label(t("Language Preference"))->options($locales)->selected($selected_locale);
     }
 }
Example #2
0
 static function fetch_updates()
 {
     $request->locales = array();
     $request->messages = new stdClass();
     $locales = locale::installed();
     foreach ($locales as $locale => $locale_data) {
         $request->locales[] = $locale;
     }
     // @todo Batch requests (max request size)
     foreach (Database::instance()->select("key", "locale", "revision", "translation")->from("incoming_translations")->get()->as_array() as $row) {
         if (!isset($request->messages->{$row->key})) {
             $request->messages->{$row->key} = 1;
         }
         if (!empty($row->revision) && !empty($row->translation)) {
             if (!is_object($request->messages->{$row->key})) {
                 $request->messages->{$row->key} = new stdClass();
             }
             $request->messages->{$row->key}->{$row->locale} = $row->revision;
         }
     }
     // @todo Include messages from outgoing_translations?
     $request_data = json_encode($request);
     $url = self::_server_url() . "?q=translations/fetch";
     list($response_data, $response_status) = remote::post($url, array("data" => $request_data));
     if (!remote::success($response_status)) {
         throw new Exception("@todo TRANSLATIONS_FETCH_REQUEST_FAILED " . $response_status);
     }
     if (empty($response_data)) {
         log::info("translations", "Translations fetch request resulted in an empty response");
         return;
     }
     $response = json_decode($response_data);
     // Response format (JSON payload):
     //   [{key:<key_1>, translation: <JSON encoded translation>, rev:<rev>, locale:<locale>},
     //    {key:<key_2>, ...}
     //   ]
     $count = count($response);
     log::info("translations", "Installed {$count} new / updated translation messages");
     foreach ($response as $message_data) {
         // @todo Better input validation
         if (empty($message_data->key) || empty($message_data->translation) || empty($message_data->locale) || empty($message_data->rev)) {
             throw new Exception("@todo TRANSLATIONS_FETCH_REQUEST_FAILED: Invalid response data");
         }
         $key = $message_data->key;
         $locale = $message_data->locale;
         $revision = $message_data->rev;
         $translation = serialize(json_decode($message_data->translation));
         // @todo Should we normalize the incoming_translations table into messages(id, key, message)
         // and incoming_translations(id, translation, locale, revision)? Or just allow
         // incoming_translations.message to be NULL?
         $locale = $message_data->locale;
         $entry = ORM::factory("incoming_translation")->where(array("key" => $key, "locale" => $locale))->find();
         if (!$entry->loaded) {
             // @todo Load a message key -> message (text) dict into memory outside of this loop
             $root_entry = ORM::factory("incoming_translation")->where(array("key" => $key, "locale" => "root"))->find();
             $entry->key = $key;
             $entry->message = $root_entry->message;
             $entry->locale = $locale;
         }
         $entry->revision = $revision;
         $entry->translation = $translation;
         $entry->save();
     }
 }
Example #3
0
 private function _languages_form()
 {
     $all_locales = locale::available();
     $installed_locales = locale::installed();
     $form = new Forge("admin/languages/save", "", "post", array("id" => "gLanguageSettingsForm"));
     $group = $form->group("choose_language")->label(t("Language settings"));
     $group->dropdown("locale")->options($installed_locales)->selected(module::get_var("gallery", "default_locale"))->label(t("Default language"))->rules('required');
     $installation_options = array();
     foreach ($all_locales as $code => $display_name) {
         $installation_options[$code] = array($display_name, isset($installed_locales->{$code}));
     }
     $group->checklist("installed_locales")->label(t("Installed Languages"))->options($installation_options)->rules("required");
     $group->submit("save")->value(t("Save settings"));
     return $form;
 }