diff --git a/locale/ubl-settings-usergroups.pot b/locale/ubl-settings-usergroups.pot index da8116e..4441e09 100644 --- a/locale/ubl-settings-usergroups.pot +++ b/locale/ubl-settings-usergroups.pot @@ -1042,4 +1042,16 @@ msgstr "" #: source/ubl-strings.h:302 msgid "The selected home directory is used by another user" +msgstr "" + +#: source/ubl-strings.h:302 +msgid "System language:" +msgstr "" + +#: source/ubl-strings.h:302 +msgid "Regional settings" +msgstr "" + +#: source/ubl-strings.h:302 +msgid "System" msgstr "" \ No newline at end of file diff --git a/locale/ubl-settings-usergroups_ru.po b/locale/ubl-settings-usergroups_ru.po index a9ba5b4..3cda365 100644 --- a/locale/ubl-settings-usergroups_ru.po +++ b/locale/ubl-settings-usergroups_ru.po @@ -1123,6 +1123,18 @@ msgstr "ММ-ДД-ГГГГ" msgid "The selected home directory is used by another user" msgstr "Указанный домашний каталог используется другим пользователем" +#: source/ubl-strings.h:302 +msgid "System language:" +msgstr "Язык системы:" + +#: source/ubl-strings.h:302 +msgid "Regional settings" +msgstr "Региональные настройки" + +#: source/ubl-strings.h:302 +msgid "System" +msgstr "Системный" + #~ msgid "User(-s)" #~ msgstr "Пользователь(-ли)" diff --git a/source/ubl-settings-usergroups-user.c b/source/ubl-settings-usergroups-user.c index fee32cc..104885a 100644 --- a/source/ubl-settings-usergroups-user.c +++ b/source/ubl-settings-usergroups-user.c @@ -83,6 +83,13 @@ void on_parameter_changed(GtkWidget *,ubl_settings_usergroups_user_window *windo return; } + char *user_lang = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->LanguageCombo)); + + if (!yon_char_is_empty(user_lang)){ + user_lang = yon_char_unite("--lang ",user_lang,NULL); + + } else user_lang=""; + int user_shell_active = gtk_combo_box_get_active(GTK_COMBO_BOX(window->userShellCombo)); if (user_shell_active>0){ user_shell = yon_char_unite("--shell ",!strcmp(gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->userShellCombo)),"Set")?(char*)gtk_entry_get_text(GTK_ENTRY(window->userShellEntry)):(char*)gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(window->userShellCombo)),NULL); @@ -119,6 +126,8 @@ void on_parameter_changed(GtkWidget *,ubl_settings_usergroups_user_window *windo final_string = yon_char_unite(final_string,!yon_char_is_empty(final_string)?" ":"", yon_char_return_if_exist(user_shell,""), !yon_char_is_empty(user_shell)?" ":"", + yon_char_return_if_exist(user_lang,""), + !yon_char_is_empty(user_lang)?" ":"", yon_char_return_if_exist(create_system_user,""), !yon_char_is_empty(create_system_user)?" ":"", yon_char_return_if_exist(create_ununique,""), @@ -180,6 +189,41 @@ void on_home_changed(GtkWidget *self,ubl_settings_usergroups_user_window *window free(home_parameter); } +gboolean yon_user_set_locales(GtkWidget *target){ + char *languages_string = config(LOCALE_parameter); + int languages_size; + config_str languages = yon_char_parse(languages_string,&languages_size,","); + GHashTable *hash = g_object_get_data(G_OBJECT(target),"hash"); + char *config_lang = g_object_get_data(G_OBJECT(target),"value"); + for (int i=0;iuserWarningSpin=yon_gtk_builder_get_widget(builder,"userWarningSpin"); window->userActivitySpin=yon_gtk_builder_get_widget(builder,"userActivitySpin"); window->userForceChangeCheck=yon_gtk_builder_get_widget(builder,"userForceChangeCheck"); + window->LanguageCombo=yon_gtk_builder_get_widget(builder,"LanguageCombo"); window->userShellCombo=yon_gtk_builder_get_widget(builder,"userShellCombo"); window->userShellEntry=yon_gtk_builder_get_widget(builder,"userShellEntry"); window->userHomeCombo=yon_gtk_builder_get_widget(builder,"userHomeCombo"); @@ -229,6 +274,7 @@ ubl_settings_usergroups_user_window *yon_ubl_settings_usergroups_user_new(){ window->MainNotebook=yon_gtk_builder_get_widget(builder,"MainNotebook"); window->expiration_unix=NULL; window->last_uid=NULL; + window->locale_thread=NULL; yon_gtk_entry_block_symbols(GTK_ENTRY(window->userUserNameEntry),"'\":\n"); yon_gtk_entry_block_symbols(GTK_ENTRY(window->userLoginEntry),"'\"=:\n"); @@ -251,6 +297,7 @@ ubl_settings_usergroups_user_window *yon_ubl_settings_usergroups_user_new(){ } gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(window->userShellCombo),"Set",SET_LABEL); yon_char_parsed_free(shells,shell_size); + window->locale_thread=g_thread_new("locales",(GThreadFunc)yon_load_languages,window->LanguageCombo); gtk_combo_box_set_active(GTK_COMBO_BOX(window->userShellCombo),0); window->old_password=NULL; window->old_username=NULL; @@ -297,6 +344,7 @@ ubl_settings_usergroups_user_window *yon_ubl_settings_usergroups_user_new(){ g_signal_connect(G_OBJECT(window->userHomeEntry),"changed",G_CALLBACK(on_home_changed),window); g_signal_connect(G_OBJECT(window->userHomeCombo),"changed",G_CALLBACK(on_parameter_changed),window); g_signal_connect(G_OBJECT(window->userShellCombo),"changed",G_CALLBACK(on_parameter_changed),window); + g_signal_connect(G_OBJECT(window->LanguageCombo),"changed",G_CALLBACK(on_parameter_changed),window); g_signal_connect(G_OBJECT(window->userShellEntry),"changed",G_CALLBACK(on_parameter_changed),window); g_signal_connect(G_OBJECT(window->userCreateSystemCheck),"toggled",G_CALLBACK(on_parameter_changed),window); g_signal_connect(G_OBJECT(window->userCreateUnuniqueCheck),"toggled",G_CALLBACK(on_parameter_changed),window); @@ -367,6 +415,7 @@ void on_user_login_update(GtkWidget *, ubl_settings_usergroups_user_window *wind void on_user_save(GtkWidget *self, dictionary *dict){ main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); ubl_settings_usergroups_user_window *window = yon_dictionary_get_data(dict->first->next,ubl_settings_usergroups_user_window*); + g_thread_join(window->locale_thread); yon_ubl_status_box_despawn(GTK_CONTAINER(window->StatusBox)); char *final_user=""; char *uid_string = NULL; diff --git a/source/ubl-settings-usergroups.c b/source/ubl-settings-usergroups.c index 2e93e4f..277c249 100644 --- a/source/ubl-settings-usergroups.c +++ b/source/ubl-settings-usergroups.c @@ -1649,12 +1649,19 @@ void on_main_edit(GtkWidget *, main_window *widgets){ gtk_combo_box_set_active(GTK_COMBO_BOX(window->userHomeCombo),2); i++; } else if (!strcmp(parameters_substring[i],"--shell")||!strcmp(parameters_substring[i],"-s")){ - if (!gtk_combo_box_set_active_id(GTK_COMBO_BOX(window->userShellCombo),parameters_substring[i+1])){ - gtk_entry_set_text(GTK_ENTRY(window->userShellEntry),parameters_substring[i+1]); - gtk_combo_box_set_active_id(GTK_COMBO_BOX(window->userShellCombo),"Set"); + if (yon_char_is_empty(parameters_substring[i+1])){ + gtk_combo_box_set_active(GTK_COMBO_BOX(window->userShellCombo),0); + } else { + if (!gtk_combo_box_set_active_id(GTK_COMBO_BOX(window->userShellCombo),parameters_substring[i+1])){ + gtk_entry_set_text(GTK_ENTRY(window->userShellEntry),parameters_substring[i+1]); + gtk_combo_box_set_active_id(GTK_COMBO_BOX(window->userShellCombo),"Set"); + } } i++; - + } else if (!strcmp(parameters_substring[i],"--lang")){ + g_object_set_data(G_OBJECT(window->LanguageCombo),"value",parameters_substring[i+1]); + window->config_locale=yon_char_new(parameters_substring[i+1]); + }else if (!strcmp(parameters_substring[i],"--system")||!strcmp(parameters_substring[i],"-r")){ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->userCreateSystemCheck),1); }else if (!strcmp(parameters_substring[i],"--no-create-home")||!strcmp(parameters_substring[i],"-M")){ diff --git a/source/ubl-settings-usergroups.h b/source/ubl-settings-usergroups.h index 4a4285e..e46815e 100644 --- a/source/ubl-settings-usergroups.h +++ b/source/ubl-settings-usergroups.h @@ -59,6 +59,8 @@ #define get_system_shadow_command(target) yon_char_unite("/usr/lib/ublinux/functions get_conf_usershadow_from_system ",target,NULL) #define get_system_group_command(target) yon_char_unite("/usr/lib/ublinux/functions get_conf_groupadd_from_system ",target,NULL) +#define languages_command "while IFS= read -ru3 SELECT_LOCALE; do SELECT_LOCALE=\"${SELECT_LOCALE% *}\"; [[ $(< /usr/share/i18n/locales/${SELECT_LOCALE%.*}) =~ (\"language\"[[:blank:]]*\\\"([^\\\"]*)\\\".*\"territory\"[[:blank:]]*\\\"([^\\\"]*)\\\".*\"country_name\"[[:blank:]]*\\\"([^\\\"]*)\\\".*\"lang_name\"[[:blank:]]*\\\"([^\\\"]*)\\\")|(\"language\"[[:blank:]]*\\\"([^\\\"]*)\\\".*\"territory\"[[:blank:]]*\\\"([^\\\"]*)\\\".*\"lang_name\"[[:blank:]]*\\\"([^\\\"]*)\\\")|(\"language\"[[:blank:]]*\\\"([^\\\"]*)\\\".*\"territory\"[[:blank:]]*\\\"([^\\\"]*)\\\") ]] && echo \"${SELECT_LOCALE}|${BASH_REMATCH[2]}${BASH_REMATCH[7]}${BASH_REMATCH[11]}${BASH_REMATCH[5]:+ (${BASH_REMATCH[5]})}${BASH_REMATCH[9]:+ (${BASH_REMATCH[9]})}|${BASH_REMATCH[3]}${BASH_REMATCH[8]}${BASH_REMATCH[12]}${BASH_REMATCH[4]:+ (${BASH_REMATCH[4]})}\" || echo \"${SELECT_LOCALE}\"; done 3< \"/usr/share/i18n/SUPPORTED\"" + #define remove_user_from_system_command(target) yon_char_append("userdel ",target) #define remove_user_and_homedir_from_system_command(target) yon_char_append("userdel -r ",target) #define remove_group_from_system_command(target) yon_char_append("groupdel ",target) @@ -105,8 +107,8 @@ #define user_info_pdf_command(target,path) yon_char_unite("echo ",target,path,NULL) #define user_info_txt_command(target,path) yon_char_unite("echo ",target,path,NULL) -#define config_get_command(source) yon_char_unite("ubconfig --source ",source," -ea get [users] DEFAULTPASSWD DEFAULTROOTPASSWD DEFAULTUSER HASHPASSWD USERGROUPS ADDADM USERADD[*] USERADD_SYNC USERADD_SYNC[*] USERSHADOW[*] USERSHADOW_SYNC[*] GROUPADD[*] GROUPADD_SYNC[*] GROUPADD_SYNC"," -- [system] SYSTEMBOOT_STATEMODE"," -- [save] SAVE_ROOTCOPY_CHANGES",NULL) -#define config_get_default_command "ubconfig --source default -ea get users DEFAULTPASSWD DEFAULTROOTPASSWD USERGROUPS DEFAULTUSER HASHPASSWD ADDADM" +#define config_get_command(source) yon_char_unite("ubconfig --source ",source," -ea get [users] DEFAULTPASSWD DEFAULTROOTPASSWD DEFAULTUSER HASHPASSWD USERGROUPS ADDADM USERADD[*] USERADD_SYNC USERADD_SYNC[*] USERSHADOW[*] USERSHADOW_SYNC[*] GROUPADD[*] GROUPADD_SYNC[*] GROUPADD_SYNC"," -- [system] SYSTEMBOOT_STATEMODE"," -- [save] SAVE_ROOTCOPY_CHANGES", " -- [locale] LOCALE",NULL) +#define config_get_default_command "ubconfig --source default -ea get users DEFAULTPASSWD DEFAULTROOTPASSWD USERGROUPS DEFAULTUSER HASHPASSWD ADDADM -- get [locale] LOCALE" #define config_get_global_only_parameters "ubconfig --source global -ea get users DEFAULTPASSWD DEFAULTROOTPASSWD" #define config_get_local_only_parameters "" @@ -156,6 +158,8 @@ #define USERADD_SYNC_parameter "USERADD_SYNC" #define USERADD_SYNC_parameter_command "ubconfig --source system get users USERADD_SYNC" +#define LOCALE_parameter "LOCALE" +#define LOCALE_parameter_command "ubconfig --source system get [locale] LOCALE" #define USERADD_SEARCH_macro "USERADD[" #define USERADD_parameter_command yon_char_unite("ubconfig --source system get users USERADD[",target,"]",NULL) @@ -410,6 +414,7 @@ typedef struct{ GtkWidget *userWarningSpin; GtkWidget *userActivitySpin; GtkWidget *userForceChangeCheck; + GtkWidget *LanguageCombo; GtkWidget *userShellCombo; GtkWidget *userShellEntry; GtkWidget *userHomeCombo; @@ -438,6 +443,8 @@ typedef struct{ char *old_password; char *old_username; char *last_uid; + char *config_locale; + GThread *locale_thread; } ubl_settings_usergroups_user_window; typedef struct { @@ -627,4 +634,6 @@ int yon_system_user_sync(char *user); void on_homedir_changed(GtkComboBox *self, GtkWidget *target); int yon_config_check_valid(); void on_home_changed(GtkWidget *self,ubl_settings_usergroups_user_window *window); +gboolean yon_user_set_locales(GtkWidget *target); +void *yon_load_languages(void *target); #endif \ No newline at end of file diff --git a/source/ubl-strings.h b/source/ubl-strings.h index f9b4b14..5582c0a 100644 --- a/source/ubl-strings.h +++ b/source/ubl-strings.h @@ -301,4 +301,7 @@ #define DMY_SLASH_FORMAT_LABEL _("DD/MM/YYYY") #define MDY_FORMAT_LABEL _("MM-DD-YYYY") -#define HOMEDIR_USED_LABEL _("The selected home directory is used by another user") \ No newline at end of file +#define HOMEDIR_USED_LABEL _("The selected home directory is used by another user") +#define SYSTEM_LANGUAGE_LABEL _("System language:") +#define REGIONAL_SETTINGS_LABEL _("Regional settings") +#define SYSTEM_LABEL _("System") \ No newline at end of file diff --git a/ubl-settings-usergroups-user.glade b/ubl-settings-usergroups-user.glade index c8bec76..f11aad6 100644 --- a/ubl-settings-usergroups-user.glade +++ b/ubl-settings-usergroups-user.glade @@ -1,5 +1,5 @@ - + @@ -582,6 +582,83 @@ 5 vertical 5 + + + True + False + 0.019999999552965164 + in + + + True + False + 5 + 5 + 5 + + + True + False + vertical + 5 + + + True + False + 5 + + + True + False + System language: + + + False + True + 0 + + + + + True + False + 0 + + Default + System + + + + False + True + 1 + + + + + False + True + 0 + + + + + + + + + True + False + Regional settings + + + + + False + True + 0 + + True @@ -816,7 +893,7 @@ False True - 0 + 1 @@ -1099,7 +1176,7 @@ False True - 1 + 2 @@ -1135,7 +1212,7 @@ False True - 2 + 3