diff options
author | Andy Staudacher <andy.st@gmail.com> | 2009-02-19 08:48:14 +0000 |
---|---|---|
committer | Andy Staudacher <andy.st@gmail.com> | 2009-02-19 08:48:14 +0000 |
commit | 237656f6c85697c41a935d0b05979cebbb2cc87b (patch) | |
tree | a2d8d5a897d5355a94a59b4272282b36cb9570b6 | |
parent | d47e4c9b43aca6092c1555c392ae072d449bb888 (diff) |
Differentiate between available and installed languages. Provide admin UI to install languages.
See: https://apps.sourceforge.net/trac/gallery/ticket/75 (first step for this task)
-rw-r--r-- | core/controllers/admin_languages.php | 17 | ||||
-rw-r--r-- | core/helpers/locale.php | 20 | ||||
-rw-r--r-- | modules/user/helpers/user.php | 17 |
3 files changed, 44 insertions, 10 deletions
diff --git a/core/controllers/admin_languages.php b/core/controllers/admin_languages.php index 389bbc98..5336639b 100644 --- a/core/controllers/admin_languages.php +++ b/core/controllers/admin_languages.php @@ -29,19 +29,30 @@ class Admin_Languages_Controller extends Admin_Controller { $form = $this->_languages_form(); if ($form->validate()) { module::set_var("core", "default_locale", $form->choose_language->locale->value); + locale::update_installed($form->choose_language->installed_locales->value); message::success(t("Settings saved")); } url::redirect("admin/languages"); } private function _languages_form() { - $locales = locale::available(); + $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("Please select a language")); $group->dropdown("locale") - ->options($locales) - ->selected(module::get_var("core", "default_locale")); + ->options($installed_locales) + ->selected(module::get_var("core", "default_locale")) + ->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('Installed Languages') + ->options($installation_options) + ->rules('required'); $group->submit("save")->value(t("Save settings")); return $form; } diff --git a/core/helpers/locale.php b/core/helpers/locale.php index 6605f2af..e0e40c0e 100644 --- a/core/helpers/locale.php +++ b/core/helpers/locale.php @@ -35,6 +35,26 @@ class locale_Core { return self::$locales; } + static function installed() { + $available = self::available(); + $default = module::get_var("core", "default_locale"); + $codes = explode("|", module::get_var("core", "installed_locales", $default)); + foreach ($codes as $code) { + if (isset($available->$code)) { + $installed->$code = $available->$code; + } + } + return $installed; + } + + static function update_installed($locales) { + // Ensure that the default is included... + $default = module::get_var("core", "default_locale"); + $locales = array_merge($locales, array($default)); + + module::set_var('core', 'installed_locales', join("|", $locales)); + } + // TODO(andy_st): Might want to add a localizable language name as well. private static function _init_language_data() { $l->af_ZA = 'Afrikaans'; // Afrikaans diff --git a/modules/user/helpers/user.php b/modules/user/helpers/user.php index e979475c..22fe6a28 100644 --- a/modules/user/helpers/user.php +++ b/modules/user/helpers/user.php @@ -79,13 +79,16 @@ class user_Core { } private static function _add_locale_dropdown(&$form, $user=null) { - $locales = locale::available(); - $locales->none = t("« none »"); - $selected_locale = ($user && $user->locale) ? $user->locale : "none"; - $form->dropdown("locale") - ->label(t("Language Preference")) - ->options($locales) - ->selected($selected_locale); + $locales = locale::installed(); + $locales_array = (array) $locales; + if (count($locales_array) > 1) { + $locales->none = t("« none »"); + $selected_locale = ($user && $user->locale) ? $user->locale : "none"; + $form->dropdown("locale") + ->label(t("Language Preference")) + ->options($locales) + ->selected($selected_locale); + } } static function get_delete_form_admin($user) { |