diff --git a/sync_parameters.csv b/csv/sync_parameters.csv similarity index 100% rename from sync_parameters.csv rename to csv/sync_parameters.csv 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/CMakeLists.txt b/source/CMakeLists.txt index e0daa2d..1758e4b 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -39,7 +39,7 @@ set(DEPENDFILES ../ubl-settings-usergroups-savesettings.glade ../ubl-settings-usergroups-confirmation.glade ../ubl-settings-usergroups-system-deletion-confirmation.glade - ../sync_parameters.csv + ../csv/sync_parameters.csv ../csv/hash_list.csv ../csv/shell_list.csv ../gresource.xml diff --git a/source/ubl-settings-usergroups-user.c b/source/ubl-settings-usergroups-user.c index fee32cc..d4c025c 100644 --- a/source/ubl-settings-usergroups-user.c +++ b/source/ubl-settings-usergroups-user.c @@ -58,7 +58,7 @@ void yon_gtk_login_block_symbols(GtkEntry *target){ void on_parameter_changed(GtkWidget *,ubl_settings_usergroups_user_window *window){ char *user_shell=NULL; char *user_home=NULL; - char *login=NULL; + // char *login=NULL; char *create_system_user=NULL; char *create_ununique=NULL; char *do_not_check=NULL; @@ -69,19 +69,26 @@ void on_parameter_changed(GtkWidget *,ubl_settings_usergroups_user_window *windo if (do_not_check_actve) do_not_check = "--badnames"; - login = (char*)gtk_entry_get_text(GTK_ENTRY(window->userLoginEntry)); - if (login[0]>'0'&&login[0]<'9'&&!do_not_check_actve){ - yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),USER_BEGINS_WITH_DIGIT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); - gtk_notebook_set_current_page(GTK_NOTEBOOK(window->MainNotebook),0); - yon_ubl_status_highlight_incorrect(window->userLoginEntry); - return; - } - if (yon_char_is_empty(login)){ - yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); - gtk_notebook_set_current_page(GTK_NOTEBOOK(window->MainNotebook),0); - yon_ubl_status_highlight_incorrect(window->userLoginEntry); - return; - } + // login = (char*)gtk_entry_get_text(GTK_ENTRY(window->userLoginEntry)); + // if (login[0]>'0'&&login[0]<'9'&&!do_not_check_actve){ + // yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),USER_BEGINS_WITH_DIGIT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); + // gtk_notebook_set_current_page(GTK_NOTEBOOK(window->MainNotebook),0); + // yon_ubl_status_highlight_incorrect(window->userLoginEntry); + // return; + // } + // if (yon_char_is_empty(login)){ + // yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); + // gtk_notebook_set_current_page(GTK_NOTEBOOK(window->MainNotebook),0); + // yon_ubl_status_highlight_incorrect(window->userLoginEntry); + // 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){ @@ -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,38 @@ 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 = main_config.locales_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"); @@ -297,6 +339,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); diff --git a/source/ubl-settings-usergroups.c b/source/ubl-settings-usergroups.c index 2e93e4f..1902ef0 100644 --- a/source/ubl-settings-usergroups.c +++ b/source/ubl-settings-usergroups.c @@ -157,11 +157,9 @@ void yon_interface_update(main_window *widgets){ } GdkRGBA rgba = {0}; - char *wheel = yon_char_parsed_check_exist_begins_with(main_config.shadow,main_config.shadow_size,"wheel"); - int wheel_size; - config_str wheel_parsed = yon_char_parse(wheel,&wheel_size,":"); + yon_char_check_element(parameters[3],"wheel",","); char *param = config(ADDADM_parameter); - if ((parameters_size>1&&atoi(parameters[1])==1000&&!yon_char_is_empty(param)&&!strcmp(param,"yes"))||yon_char_parsed_check_exist(wheel_parsed,wheel_size,login)>-1){ + if ((parameters_size>1&&atoi(parameters[1])==1000&&!yon_char_is_empty(param)&&!strcmp(param,"yes"))||yon_char_check_element(parameters[3],"wheel",",")){ rgba.red=253.0/255.0; rgba.green=251.0/255.0; rgba.blue=216.0/255.0; @@ -1559,6 +1557,7 @@ void on_main_add(GtkWidget *, main_window *widgets){ g_signal_connect(G_OBJECT(window->UserOkButton),"clicked",G_CALLBACK(on_user_save),dict); gtk_window_set_transient_for(GTK_WINDOW(window->CreateUserWindow),GTK_WINDOW(widgets->Window)); + yon_user_set_locales(window->LanguageCombo); gtk_widget_show(window->CreateUserWindow); } else { gtk_tree_selection_unselect_all(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->GroupsTree))); @@ -1583,6 +1582,7 @@ void on_main_edit(GtkWidget *, main_window *widgets){ model = GTK_TREE_MODEL(widgets->UsersList); if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->UsersTree)),&model,&iter)){ ubl_settings_usergroups_user_window *window = yon_ubl_settings_usergroups_user_new(); + gtk_widget_set_sensitive(window->userLoginEntry,0); gtk_window_set_title(GTK_WINDOW(window->CreateUserWindow),CONFIGURE_USER_TITLE_LABEL); gtk_label_set_text(GTK_LABEL(window->userTitleNameLabel),CONFIGURE_USER_TITLE_LABEL); dictionary *dict = NULL; @@ -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")){ @@ -1749,6 +1756,7 @@ void on_main_edit(GtkWidget *, main_window *widgets){ } } } + yon_user_set_locales(window->LanguageCombo); } } else { @@ -2182,6 +2190,7 @@ void config_init(){ main_config.launch_arguments=NULL; main_config.launch_size=0; int login_size; + main_config.locales_hash = g_hash_table_new(g_str_hash,g_str_equal); config_str login_defs = yon_file_open(uid_path,&login_size); for (int i=0;iUsersList; main_config.groups_list = widgets->GroupsList; + g_thread_new("locales",(GThreadFunc)yon_load_languages,NULL); + /* Signal connection | Присоединение сигналов */ g_signal_connect(G_OBJECT(widgets->AddButton),"clicked",G_CALLBACK(on_main_add),widgets); diff --git a/source/ubl-settings-usergroups.h b/source/ubl-settings-usergroups.h index 4a4285e..d3f3476 100644 --- a/source/ubl-settings-usergroups.h +++ b/source/ubl-settings-usergroups.h @@ -19,7 +19,7 @@ #endif #include "ubl-strings.h" -#define WIKI_LINK "https://wiki.ublinux.ru/ru/Программное_обеспечение/Программы_и_утилиты/Все/ubl-settings-usergroups" +#define WIKI_LINK "https://wiki.ublinux.ru/software/programs_and_utilities/all/ubl-settings-usergroups" #define _(String) gettext(String) @@ -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) @@ -202,6 +206,7 @@ typedef struct { int save_config; int launch_size; config_str launch_arguments; + GHashTable *locales_hash; } config; extern config main_config; @@ -410,6 +415,7 @@ typedef struct{ GtkWidget *userWarningSpin; GtkWidget *userActivitySpin; GtkWidget *userForceChangeCheck; + GtkWidget *LanguageCombo; GtkWidget *userShellCombo; GtkWidget *userShellEntry; GtkWidget *userHomeCombo; @@ -438,6 +444,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 +635,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-additional-settings.glade b/ubl-settings-usergroups-additional-settings.glade index 171249e..bf87594 100644 --- a/ubl-settings-usergroups-additional-settings.glade +++ b/ubl-settings-usergroups-additional-settings.glade @@ -76,8 +76,8 @@ False Group GID range - - + + True True False @@ -90,8 +90,8 @@ False Group GID in system - - + + True True False @@ -176,8 +176,8 @@ False Users UID range - - + + True True False @@ -190,8 +190,8 @@ False User UID in system - - + + True True False @@ -339,7 +339,7 @@ - user ID of 1000 is an administrator included in the wheel group + A user ID of 1000 is an administrator included in the wheel group True True False diff --git a/ubl-settings-usergroups-user.glade b/ubl-settings-usergroups-user.glade index c8bec76..2a85d8c 100644 --- a/ubl-settings-usergroups-user.glade +++ b/ubl-settings-usergroups-user.glade @@ -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