Russian localisation, saving and loading

pull/14/head
parent e77cc22c1a
commit 98dab018a4

@ -8,11 +8,6 @@ include_directories(${GTK_INCLUDE_DIRS})
link_directories(${GTK_LIBRARY_DIRS})
add_definitions(${GTK_CFLAGS_OTHER})
pkg_check_modules(VTE291 REQUIRED vte-2.91)
include_directories(${VTE291_INCLUDE_DIRS})
link_directories(${VTE291_LIBRARY_DIRS})
add_definitions(${VTE291_CFLAGS_OTHER})
find_library(WEBKIT_LIBRARIES_FOUND webkit2gtk-4.0 webkit2gtk-web-extension-4.0)
option(WEBKIT_FOUND "No" OFF)
@ -84,8 +79,6 @@ set(SOURCE_FILES
set(LIBRARIES
${GTK_LIBRARIES}
${WEBKIT_LIBRARIES}
${VTE291_LIBRARIES}
ublsettings
ublsettings-gtk3
ublsettingsui-gtk3
@ -94,6 +87,19 @@ set(LIBRARIES
add_executable(${PROJECT_NAME} ${SOURCE_FILES} ${CMAKE_CURRENT_BINARY_DIR}/${GRESOURCE_C})
target_link_libraries(${PROJECT_NAME} PUBLIC ${LIBRARIES})
list(FIND LIBRARIES "vte-2.91" VTE_FOUND_INDEX)
list(FIND LIBRARIES "webkit" WEBKIT_FOUND_INDEX)
if(NOT VTE_FOUND_INDEX EQUAL -1)
message(STATUS "Библиотека VTE не добавлена в target_link_libraries()")
add_definitions(-DVTE_INCLUDE)
endif()
if(NOT WEBKIT_FOUND_INDEX EQUAL -1)
add_definitions(-DWEBKIT_INCLUDE)
endif()
target_include_directories(${PROJECT_NAME} PUBLIC ${PROJECT_BINARY_DIR})
set_source_files_properties(
${CMAKE_CURRENT_BINARY_DIR}/${GRESOURCE_C}

@ -5,23 +5,87 @@ config main_config;
//functions
int yon_load_proceed(YON_CONFIG_TYPE type){
if (yon_config_load_register(type,"logging","",NULL)){
return 1;
if (yon_config_load_register(type,"users","DEFAULTPASSWD DEFAULTROOTPASSWD DEFAULTUSER HASHPASSWD USERGROUPS ADDADM USERADD[*] USERSHADOW[*] GROUPADD[*]",NULL)){
return 1;
}
return 0;
}
}
void yon_interface_update(main_window *widgets){
gtk_list_store_clear(widgets->UsersList);
gtk_list_store_clear(widgets->GroupsList);
int size;
GtkTreeIter iter;
config_str users = yon_config_get_all_by_key("USERADD",&size);
if (users){
for (int i=0;i<size;i++){
gtk_list_store_append(widgets->UsersList,&iter);
int parameters_size;
config_str parameters = yon_char_parse(users[i],&parameters_size,":");
free(yon_char_divide(parameters[0],7));
char *login = yon_char_divide_search(parameters[i],"\"",-1);
login[strlen(login)-2]='\0';
gtk_list_store_set(widgets->UsersList,&iter,
2,login,
3,parameters_size>0?parameters[0]:"",
1,parameters_size>1?parameters[1]:"",
4,parameters_size>2?parameters[2]:"",
5,parameters_size>3?parameters[3]:"",
6,parameters_size>4?parameters[4]:"",
7,parameters_size>5?ENDRYPTED_LABEL:DEFAULT_USER_LABEL,
-1);
if(parameters)
free(parameters);
}
free(users);
}
config_str groups = yon_config_get_all_by_key("GROUPADD",&size);
if (groups){
for (int i=0;i<size;i++){
gtk_list_store_append(widgets->GroupsList,&iter);
int parameters_size;
config_str parameters = yon_char_parse(groups[i],&parameters_size,":");
free(yon_char_divide(parameters[0],8));
char *login = yon_char_divide_search(parameters[i],"\"",-1);
login[strlen(login)-2]='\0';
gtk_list_store_set(widgets->GroupsList,&iter,
1,login,
0,parameters_size>1?parameters[1]:"",
2,parameters_size>0?parameters[0]:"",
3,parameters_size>2?parameters[2]:"",
4,parameters_size>3?ENDRYPTED_LABEL:DEFAULT_USER_LABEL,
-1);
if(parameters)
free(parameters);
}
}
}
void on_config_local_load(GtkWidget *self, main_window *widgets){
yon_load_proceed(YON_CONFIG_LOCAL);
main_config.load_mode=1;
yon_interface_update(widgets);
}
void on_config_global_load(GtkWidget *self, main_window *widgets){
yon_load_proceed(YON_CONFIG_GLOBAL);
main_config.load_mode=0;
yon_interface_update(widgets);
}
void on_config_save(){
yon_save_proceed(NULL,YON_CONFIG_BOTH,"logging", "",NULL);
yon_save_proceed(NULL,YON_CONFIG_BOTH,"users", "DEFAULTPASSWD DEFAULTROOTPASSWD DEFAULTUSER HASHPASSWD USERGROUPS ADDADM USERADD[*] USERSHADOW[*] GROUPADD[*]",NULL);
}
void on_config_global_save(){
yon_save_proceed("global",YON_CONFIG_GLOBAL,"logging", "",NULL);
yon_save_proceed("global",YON_CONFIG_GLOBAL,"users", "DEFAULTPASSWD DEFAULTROOTPASSWD DEFAULTUSER HASHPASSWD USERGROUPS ADDADM USERADD[*] USERSHADOW[*] GROUPADD[*]",NULL);
}
void on_config_local_save(){
yon_save_proceed("system",YON_CONFIG_LOCAL,"logging", "",NULL);
yon_save_proceed("system",YON_CONFIG_LOCAL,"users", "DEFAULTPASSWD DEFAULTROOTPASSWD DEFAULTUSER HASHPASSWD USERGROUPS ADDADM USERADD[*] USERSHADOW[*] GROUPADD[*]",NULL);
}
void on_password_combo_changed(GtkComboBox *self, GtkWidget *target){
@ -102,8 +166,15 @@ void on_groups_multiple_clicked(GtkWidget *self, GtkEntry *output_target){
}
void on_password_change(GtkWidget *self, GtkEntry *output_target){
void on_password_change(GtkWidget *self, dictionary *entry_dict){
GtkComboBox *combo = yon_dictionary_get_data(entry_dict->first,GtkComboBox*);
GtkEntry *output_target = yon_dictionary_get_data(entry_dict->first->next,GtkEntry*);
ubl_settings_usergroups_password_window *window = yon_ubl_settings_usergroups_password_new();
int active = gtk_combo_box_get_active(combo);
if (active == 2)
gtk_widget_hide(window->HashBox);
else if (active==3)
gtk_widget_hide(window->PasswordBox);
dictionary *dict = NULL;
yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window);
yon_dictionary_add_or_create_if_exists_with_data(dict,"target",output_target);
@ -122,7 +193,7 @@ void on_additional_settings_clicked(GtkWidget *self, GtkEntry *output_target){
}
void on_expiration_clicked(GtkWidget *self, GtkEntry *output_target){
}
// standard functions
@ -196,8 +267,15 @@ ubl_settings_usergroups_additional_settings_window *yon_ubl_settings_usergroups_
g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL);
g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_additional_settings_save),window);
g_signal_connect(G_OBJECT(window->DefaultPasswordButton),"clicked",G_CALLBACK(on_password_change),window->DefaultPasswordEntry);
g_signal_connect(G_OBJECT(window->RootPasswordButton),"clicked",G_CALLBACK(on_password_change),window->RootPasswordEntry);
dictionary *default_dict=NULL;
yon_dictionary_add_or_create_if_exists_with_data(default_dict,"combo",window->DefaultPasswordCombo);
yon_dictionary_add_or_create_if_exists_with_data(default_dict,"entry",window->DefaultPasswordEntry);
dictionary *root_dict=NULL;
yon_dictionary_add_or_create_if_exists_with_data(root_dict,"combo",window->RootPasswordCombo);
yon_dictionary_add_or_create_if_exists_with_data(root_dict,"entry",window->RootPasswordEntry);
g_signal_connect(G_OBJECT(window->DefaultPasswordButton),"clicked",G_CALLBACK(on_password_change),default_dict);
g_signal_connect(G_OBJECT(window->RootPasswordButton),"clicked",G_CALLBACK(on_password_change),root_dict);
g_signal_connect(G_OBJECT(window->RootPasswordCombo),"changed",G_CALLBACK(on_password_combo_changed),window->RootPasswordButton);
g_signal_connect(G_OBJECT(window->DefaultPasswordCombo),"changed",G_CALLBACK(on_password_combo_changed),window->DefaultPasswordButton);
@ -305,12 +383,15 @@ ubl_settings_usergroups_group_creation_window *yon_ubl_settings_usergroups_group
window->PasswordEntry=yon_gtk_builder_get_widget(builder,"PasswordEntry");
window->ChangePasswordButton=yon_gtk_builder_get_widget(builder,"ChangePasswordButton");
g_signal_connect(G_OBJECT(window->UnuniqueGIDCheck),"clicked",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button_inversed),window->userLoginEntry);
g_signal_connect(G_OBJECT(window->ChangePasswordButton),"clicked",G_CALLBACK(on_password_change),window->PasswordEntry);
gtk_window_set_title(GTK_WINDOW(window->CreateGroupWindow),TITLE_LABEL);
dictionary *entry_dict=NULL;
yon_dictionary_add_or_create_if_exists_with_data(entry_dict,"combo",window->PasswordCombo);
yon_dictionary_add_or_create_if_exists_with_data(entry_dict,"entry",window->PasswordEntry);
g_signal_connect(G_OBJECT(window->userUIDAutoCheck),"clicked",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button_inversed),window->userUIDEntry);
g_signal_connect(G_OBJECT(window->ChangePasswordButton),"clicked",G_CALLBACK(on_password_change),entry_dict);
g_signal_connect(G_OBJECT(window->PasswordCombo),"changed",G_CALLBACK(on_password_combo_changed),window->ChangePasswordButton);
g_signal_connect(G_OBJECT(window->userUIDAutoCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button_inversed),window->userUIDEntry);
g_signal_connect(G_OBJECT(window->UserCancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL);
g_signal_connect(G_OBJECT(window->UserAdditionalGroupsButton),"clicked",G_CALLBACK(on_user_choose),window);
g_signal_connect(G_OBJECT(window->UserAdditionalGroupsButton),"clicked",G_CALLBACK(on_user_choose),window->userGroupsEntry);
return window;
}
@ -418,16 +499,30 @@ void on_password_changed(GtkEntry *self, ubl_settings_usergroups_password_window
void on_password_accept(GtkWidget *self, dictionary *dict){
ubl_settings_usergroups_password_window *window = yon_dictionary_get_data(dict->first,ubl_settings_usergroups_password_window*);
GtkEntry *entry = yon_dictionary_get_data(dict->first->next,GtkEntry*);
char *pasted_hash = (char*)gtk_entry_get_text(GTK_ENTRY(window->PasswordHashEntry));
if (yon_char_is_empty(pasted_hash)){
if (gtk_widget_get_visible(window->HashBox)){
char *pasted_hash = (char*)gtk_entry_get_text(GTK_ENTRY(window->PasswordHashEntry));
if (yon_char_is_empty(pasted_hash)){
yon_ubl_status_box_spawn_infinite(GTK_CONTAINER(window->StatusBox),EMPTY_IMPORTANT_LABEL,BACKGROUND_IMAGE_FAIL_TYPE);
return;
} else {
gtk_entry_set_text(entry,pasted_hash);
}
} else {
char *password = yon_char_new((char*)gtk_entry_get_text(GTK_ENTRY(window->PasswordEntry)));
char *password_check = (char*)gtk_entry_get_text(GTK_ENTRY(window->PasswordEntry));
if (yon_char_is_empty(password)){
yon_ubl_status_box_spawn_infinite(GTK_CONTAINER(window->StatusBox),EMPTY_IMPORTANT_LABEL,BACKGROUND_IMAGE_FAIL_TYPE);
return;
}
char *password_check = (char*)gtk_entry_get_text(GTK_ENTRY(window->RepeatPasswordEntry));
if (!strcmp(password,password_check)){
char *passwd_hash = g_malloc0(101);
FILE *fl = popen(password_hash_get_command(password),"r");
fgets(passwd_hash,100,fl);
if (passwd_hash[strlen(passwd_hash)-1]=='\n') passwd_hash[strlen(passwd_hash)-1]='\0';
gtk_entry_set_text(entry,passwd_hash);
} else {
yon_ubl_status_box_spawn_infinite(GTK_CONTAINER(window->StatusBox),PASSWORD_MISMATCH_LABEL,BACKGROUND_IMAGE_FAIL_TYPE);
return;
}
}
on_subwindow_close(self);
@ -441,6 +536,8 @@ ubl_settings_usergroups_password_window *yon_ubl_settings_usergroups_password_ne
window->PasswordEntry=yon_gtk_builder_get_widget(builder,"PasswordEntry");
window->RepeatPasswordEntry=yon_gtk_builder_get_widget(builder,"RepeatPasswordEntry");
window->PasswordHashEntry=yon_gtk_builder_get_widget(builder,"PasswordHashEntry");
window->HashBox=yon_gtk_builder_get_widget(builder,"HashBox");
window->PasswordBox=yon_gtk_builder_get_widget(builder,"PasswordBox");
window->UserCancelButton=yon_gtk_builder_get_widget(builder,"UserCancelButton");
window->UserOkButton=yon_gtk_builder_get_widget(builder,"UserOkButton");
@ -633,9 +730,11 @@ void on_user_save(GtkWidget *self, dictionary *dict){
extra_options=(char*)gtk_entry_get_text(GTK_ENTRY(window->userExtraOptionsEntry));
time_t t = time(NULL);
struct tm tm = *localtime(&t);
password_changed_date = yon_char_unite(yon_char_from_int(tm.tm_mday),".",yon_char_from_int(tm.tm_mon+1),".",yon_char_from_int(1900+tm.tm_year),NULL);
if (window->old_password&&strcmp(window->old_password,password)){
time_t t = time(NULL);
struct tm tm = *localtime(&t);
password_changed_date = yon_char_unite(yon_char_from_int(tm.tm_mday),".",yon_char_from_int(tm.tm_mon+1),".",yon_char_from_int(1900+tm.tm_year),NULL);
}
char *shadow_string = NULL;
shadow_string = yon_char_unite(yon_char_return_if_exist(password_changed_date,""),
@ -705,11 +804,15 @@ ubl_settings_usergroups_user_window *yon_ubl_settings_usergroups_user_new(){
window->UserCancelButton=yon_gtk_builder_get_widget(builder,"UserCancelButton");
window->UserOkButton=yon_gtk_builder_get_widget(builder,"UserOkButton");
window->old_password=NULL;
dictionary *entry_dict = NULL;
yon_dictionary_add_or_create_if_exists_with_data(entry_dict,"combo",window->userPasswordCombo);
yon_dictionary_add_or_create_if_exists_with_data(entry_dict,"entry",window->userPasswordEntry);
g_signal_connect(G_OBJECT(window->UserCancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL);
g_signal_connect(G_OBJECT(window->userUIDAutoCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button_inversed),window->userUIDEntry);
g_signal_connect(G_OBJECT(window->userHomeButton),"clicked",G_CALLBACK(on_filechooser_open),window->userHomeEntry);
g_signal_connect(G_OBJECT(window->UserGroupsButton),"clicked",G_CALLBACK(on_groups_clicked),window->userGroupsEntry);
g_signal_connect(G_OBJECT(window->userPasswordButton),"clicked",G_CALLBACK(on_password_change),window->userPasswordEntry);
g_signal_connect(G_OBJECT(window->userPasswordButton),"clicked",G_CALLBACK(on_password_change),entry_dict);
g_signal_connect(G_OBJECT(window->userAdditionalGroupsButton),"clicked",G_CALLBACK(on_groups_multiple_clicked),window->userAdditionalGroupsEntry);
g_signal_connect(G_OBJECT(window->userPasswordExpirationButton),"clicked",G_CALLBACK(on_expiration_clicked),window->userPasswordExpirationEntry);
g_signal_connect(G_OBJECT(window->userUIDAutoCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button_inversed),window->userUIDEntry);
@ -764,7 +867,9 @@ void on_main_edit(GtkWidget *self, main_window *widgets){
char *name;
gtk_tree_model_get(GTK_TREE_MODEL(widgets->UsersList),&iter,2,&name,-1);
char *parameter_string = yon_config_get_by_key(USERADD(name));
int parsed_size;
int parsed_size=0;
if (parameter_string[0]=='\"') yon_char_divide(parameter_string,0);
if (parameter_string[strlen(parameter_string)-1]=='\"') parameter_string[strlen(parameter_string)-1]='\0';
config_str parameters = yon_char_parse(parameter_string,&parsed_size,":");
gtk_entry_set_text(GTK_ENTRY(window->userLoginEntry), name);
gtk_entry_set_text(GTK_ENTRY(window->userUserNameEntry), parsed_size>0?parameters[0]:"");
@ -809,6 +914,7 @@ void on_main_edit(GtkWidget *self, main_window *widgets){
}
// gtk_entry_set_text(GTK_ENTRY(window->), parsed_size>4?parameters[4]:"");
}
window->old_password=parameters[5];
gtk_entry_set_text(GTK_ENTRY(window->userPasswordEntry), parsed_size>5?parameters[5]:"");
free(parameters);
parameters=yon_char_parse(yon_config_get_by_key(USERSHADOW(name)),&parsed_size,":");
@ -829,6 +935,47 @@ void on_main_edit(GtkWidget *self, main_window *widgets){
yon_dictionary_add_or_create_if_exists_with_data(dict,"widgets",widgets);
yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window);
g_signal_connect(G_OBJECT(window->UserOkButton),"clicked",G_CALLBACK(on_group_save),dict);
char *name;
gtk_tree_model_get(model,&iter,1,&name,-1);
char *config_string = yon_config_get_by_key(GROUPADD(name));
if (!yon_char_is_empty(config_string)){
if (config_string[0]=='\"') yon_char_divide(config_string,0);
if (config_string[strlen(config_string)-1]=='\"') config_string[strlen(config_string)-1]='\0';
int size;
config_str parsed = yon_char_parse(config_string,&size,":");
gtk_entry_set_text(GTK_ENTRY(window->userLoginEntry),name);
gtk_entry_set_text(GTK_ENTRY(window->userGroupsEntry),size>1?parsed[0]:"");
if (size>1){
if (!strcmp(parsed[1],"")||!strcmp(parsed[1],"x"))
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->userUIDAutoCheck),1);
else
gtk_entry_set_text(GTK_ENTRY(window->userUIDEntry),parsed[1]);
}
if (size>2&&!yon_char_is_empty(parsed[2])){
int parsed_size=0;
config_str substring = yon_char_parse(parsed[2],&parsed_size," ");
for (int i=0;i<parsed_size;i++){
if (!yon_char_is_empty(substring[i])){
if (!strcmp(substring[i],"--non-unique")||!strcmp(substring[i],"-o")){
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->UnuniqueGIDCheck),1);
} else if (!strcmp(substring[i],"--system")||!strcmp(substring[i],"-r")){
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(window->SystemGroupCheck),1);
}
}
}
free(substring);
}
if (size>3){
if (strcmp(parsed[3],"")&&strcmp(parsed[3],"x")){
gtk_entry_set_text(GTK_ENTRY(window->PasswordEntry),parsed[3]);
gtk_combo_box_set_active(GTK_COMBO_BOX(window->PasswordCombo),3);
} else {
gtk_combo_box_set_active(GTK_COMBO_BOX(window->PasswordCombo),1);
}
}
} else {
yon_ubl_status_box_render(LOADING_FAILED_LABEL,BACKGROUND_IMAGE_FAIL_TYPE);
}
gtk_window_set_transient_for(GTK_WINDOW(window->CreateGroupWindow),GTK_WINDOW(widgets->Window));
gtk_widget_show(window->CreateGroupWindow);
@ -866,11 +1013,11 @@ void config_init(){
main_config.save_socket_id=-1;
main_config.load_socket_id=-1;
main_config.lock_help=0;
main_config.lock_help=0;
main_config.lock_load_global=0;
main_config.lock_save_global=0;
main_config.lock_save_local=0;
main_config.groups_size=0;
main_config.load_mode=1;
main_config.groups = yon_file_open(groups_path,&main_config.groups_size);
}
@ -924,9 +1071,12 @@ void yon_main_window_complete(main_window *widgets){
g_signal_connect(G_OBJECT(widgets->SaveMenuItem),"activate",G_CALLBACK(on_config_save),widgets);
g_signal_connect(G_OBJECT(widgets->SaveGlobalMenuItem),"activate",G_CALLBACK(on_config_global_save),widgets);
g_signal_connect(G_OBJECT(widgets->SaveLocalMenuItem),"activate",G_CALLBACK(on_config_local_save),widgets);
gtk_widget_show(widgets->Window);
g_signal_connect(G_OBJECT(widgets->LoadGlobalMenuItem),"activate",G_CALLBACK(on_config_global_load),widgets);
g_signal_connect(G_OBJECT(widgets->LoadLocalMenuItem),"activate",G_CALLBACK(on_config_local_load),widgets);
yon_load_proceed(YON_CONFIG_LOCAL);
yon_interface_update((main_window*)widgets);
}
int main(int argc, char *argv[]){
@ -1010,6 +1160,5 @@ int main(int argc, char *argv[]){
yon_ubl_window_init(TITLE_LABEL,TITLE_INFO_LABEL,LocaleName,CssPath,LocaleName,version_application,WIKI_LINK);
template_main_window *widgets = yon_ubl_window_setup();
yon_main_window_complete((main_window*)widgets);
yon_load_proceed(YON_CONFIG_LOCAL);
gtk_main();
gtk_main();
}

@ -181,6 +181,8 @@ typedef struct{
GtkWidget *PasswordEntry;
GtkWidget *RepeatPasswordEntry;
GtkWidget *PasswordHashEntry;
GtkWidget *HashBox;
GtkWidget *PasswordBox;
} ubl_settings_usergroups_password_window;
typedef struct{
@ -226,6 +228,8 @@ typedef struct{
GtkWidget *userExtraOptionsEntry;
GtkWidget *UserCancelButton;
GtkWidget *UserOkButton;
char *old_password;
} ubl_settings_usergroups_user_window;

@ -39,12 +39,21 @@
#define GROUPS_USERS_LABEL _("Group users")
#define GROUPS_LABEL _("Groups")
#define INSPECT_SYSTEM_LABEL _("Inspect users and groups in system")
#define ADDITIONAL_SETTINGS_LABEL _("Additional settings")
#define SHARED_GROUPS_SETTINGS_LABEL _("Shared groups configuration")
#define CREATE_NEW_LABEL _("Create new")
#define EDIT_LABEL _("Edit")
#define REMOVE_LABEL _("Remove")
#define UPDATE_LABEL _("Update users and groups")
//ubl-settings-usergroups-additional-settings.glade
#define ADDITIONAL_SETTINGS_TITLE_LABEL _("Users and groups - additional settings")
#define NO_PASSWORD_LABEL _("No password required")
#define SET_PASSWORD_LABEL _("Set a password")
#define ENDRYPTED_LABEL _("Endrypted password")
#define MD5_LABEL "md5"
#define YESCRYPT_LABEL "yescrypt"
#define NO_PASSWORD_LABEL _("No password required")
#define SCRYPT_LABEL "scrypt"
#define BF_LABEL "bf"
#define BCRYPT_LABEL "bcrypt"
@ -58,14 +67,19 @@
#define ACCEPT_LABEL _("Accept")
//ubl-settings-usergroups-group-creation.glade
#define GROUP_TITLE_LABEL _("Users and groups - group configuration")
#define GROUP_ID_LABEL _("Group id:")
#define GROUP_CREATION_NAME_LABEL _("Group name:")
#define GROUP_USERS_LABEL _("Group users:")
#define AUTOMATICALLY_LABEL _("Automatically")
#define LOGIN_GROUP_LABEL _("login")
#define LOGIN_GROUP_LABEL _("Login")
#define CREATE_GROUP_UNUNIQUE_LABEL _("Create group with ununique GID")
#define CREATE_SYSTEM_GROUP_LABEL _("Create system group")
#define ENCRYPTED_PASSWORD_LABEL _("Encrypted password")
#define ADDITIONAL_CONFIGURATION_LABEL _("Additional configuration")
//ubl-settings-usergroups-group.glade
#define GROUPS_TITLE_LABEL _("Users and groups - groups")
#define ADM_LABEL "adm"
#define AUDIO_LABEL "audio"
#define AUTOLIGIN_LABEL "autologin"
@ -79,6 +93,7 @@
#define COLORD_LABEL "colord"
//ubl-settings-usergroups-system.glade
#define INSPECTOR_TITLE_LABEL _("Users and groups - system users and groups")
#define BLOCKED_LABEL _("Blocked")
#define USERNAME_LABEL _("Username")
#define PRIMARY_GROUP_LABEL _("Primary group")
@ -89,5 +104,26 @@
#define GROUP_LABEL _("Group")
//ubl-settings-usergroups-user.glade
#define USER_TITLE_LABEL _("Users and groups - user configuration")
#define SET_LABEL _("Set")
#define EMPTY_IMPORTANT_LABEL _("Empty important field")
#define EMPTY_IMPORTANT_LABEL _("Empty important field")
#define LOADING_FAILED_LABEL _("Loading has failed")
#define LOGIN_NAME_LABEL _("Login name")
#define ADDITIONAL_GROUPS_LABEL _("Additional groups:")
#define PASSWORD_SECTION_LABEL _("Password configuration")
#define PASSWORD_CHANGE_DATA_LABEL _("Password has been changed:")
#define EXPIRATION_DATE_LABEL _("expiration date:")
#define PASSWORD_MIN_INTERVAL_LABEL _("Password change interval: minimum")
#define PASSWORD_MAX_INTERVAL_LABEL _("days, maximum")
#define DAYS_LABEL _("days")
#define DAYS_WARNING_LABEL _("Days until warning")
#define DAYS_ACTIVITY_LABEL _("Days without activity")
#define FORCE_CONFIGURE_LABEL _("Force change at next login")
#define USER_SHELL_LABEL _("User shell")
#define HOME_DIR_LABEL _("Home directory")
#define DONT_SET_LABEL _("Don't set")
#define CREATE_SYSTEM_USER_LABEL _("Create system user")
#define CREATE_UNUNIQUE_LABEL _("Create user with ununique (repeating) UID")
#define DO_NOT_CHECK_LABEL _("Do not check login for compliance with character rules")
#define TEMPORARY_DEACTIVATION_LABEL _("Temporary deactivation")
#define SAVE_LABEL _("Save")

@ -23,11 +23,10 @@
<property name="can-focus">False</property>
<property name="icon-name">com.ublinux.ubl-settings-usergroups.edit-symbolic</property>
</object>
<object class="GtkApplicationWindow" id="Window">
<object class="GtkWindow" id="Window">
<property name="width-request">600</property>
<property name="height-request">350</property>
<property name="can-focus">False</property>
<property name="resizable">False</property>
<property name="modal">True</property>
<property name="icon-name">com.ublinux.ubl-settings-usergroups</property>
<child>

@ -23,9 +23,8 @@
<property name="can-focus">False</property>
<property name="icon-name">com.ublinux.ubl-settings-usergroups.accept-symbolic</property>
</object>
<object class="GtkApplicationWindow" id="CreateGroupWindow">
<object class="GtkWindow" id="CreateGroupWindow">
<property name="can-focus">False</property>
<property name="resizable">False</property>
<property name="modal">True</property>
<property name="default-width">450</property>
<property name="icon-name">com.ublinux.ubl-settings-usergroups</property>
@ -236,7 +235,7 @@
</child>
<child>
<object class="GtkButton" id="UserOkButton">
<property name="label" translatable="yes">Save</property>
<property name="label" translatable="yes">Accept</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
@ -346,6 +345,7 @@
<child>
<object class="GtkEntry" id="PasswordEntry">
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can-focus">True</property>
<property name="visibility">False</property>
<property name="invisible-char">*</property>
@ -361,6 +361,7 @@
<child>
<object class="GtkButton" id="ChangePasswordButton">
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="image">image2</property>

@ -13,11 +13,10 @@
<property name="can-focus">False</property>
<property name="icon-name">com.ublinux.ubl-settings-usergroups.accept-symbolic</property>
</object>
<object class="GtkApplicationWindow" id="GroupsWindow">
<object class="GtkWindow" id="GroupsWindow">
<property name="width-request">250</property>
<property name="height-request">385</property>
<property name="can-focus">False</property>
<property name="resizable">False</property>
<property name="modal">True</property>
<property name="icon-name">com.ublinux.ubl-settings-usergroups</property>
<child>

@ -13,7 +13,7 @@
<property name="can-focus">False</property>
<property name="icon-name">com.ublinux.ubl-settings-usergroups.accept-symbolic</property>
</object>
<object class="GtkApplicationWindow" id="CreateGroupWindow">
<object class="GtkWindow" id="CreateGroupWindow">
<property name="can-focus">False</property>
<property name="resizable">False</property>
<property name="modal">True</property>
@ -102,33 +102,46 @@
<property name="orientation">vertical</property>
<property name="spacing">5</property>
<child>
<object class="GtkBox">
<object class="GtkBox" id="PasswordBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<property name="spacing">5</property>
<child>
<object class="GtkLabel" id="label3">
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Parrword:</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="PasswordEntry">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="visibility">False</property>
<property name="invisible-char">*</property>
<property name="truncate-multiline">True</property>
<property name="secondary-icon-name">com.ublinux.ubl-settings-usergroups.view-symbolic</property>
<property name="placeholder-text" translatable="yes">********</property>
<property name="input-purpose">password</property>
<property name="spacing">5</property>
<child>
<object class="GtkLabel" id="label3">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Parrword:</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="PasswordEntry">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="visibility">False</property>
<property name="invisible-char">*</property>
<property name="truncate-multiline">True</property>
<property name="secondary-icon-name">com.ublinux.ubl-settings-usergroups.view-symbolic</property>
<property name="placeholder-text" translatable="yes">********</property>
<property name="input-purpose">password</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">True</property>
@ -136,77 +149,65 @@
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="spacing">5</property>
<child>
<object class="GtkLabel" id="label2">
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Repeat password:</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="RepeatPasswordEntry">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="visibility">False</property>
<property name="invisible-char">*</property>
<property name="truncate-multiline">True</property>
<property name="secondary-icon-name">com.ublinux.ubl-settings-usergroups.view-symbolic</property>
<property name="placeholder-text" translatable="yes">********</property>
<property name="input-purpose">password</property>
<property name="spacing">5</property>
<child>
<object class="GtkLabel" id="label2">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Repeat password:</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="RepeatPasswordEntry">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="visibility">False</property>
<property name="invisible-char">*</property>
<property name="truncate-multiline">True</property>
<property name="secondary-icon-name">com.ublinux.ubl-settings-usergroups.view-symbolic</property>
<property name="placeholder-text" translatable="yes">********</property>
<property name="input-purpose">password</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
<property name="position">2</property>
</packing>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkSeparator">
<property name="visible">True</property>
<property name="can-focus">False</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkBox">
<object class="GtkBox" id="HashBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<property name="spacing">5</property>
<child>
<object class="GtkLabel" id="label1">
<object class="GtkSeparator">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Password hash:</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="expand">False</property>
@ -215,12 +216,37 @@
</packing>
</child>
<child>
<object class="GtkEntry" id="PasswordHashEntry">
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="visibility">False</property>
<property name="invisible-char">*</property>
<property name="secondary-icon-name">com.ublinux.ubl-settings-usergroups.view-symbolic</property>
<property name="can-focus">False</property>
<property name="spacing">5</property>
<child>
<object class="GtkLabel" id="label1">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Password hash:</property>
<property name="xalign">0</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkEntry" id="PasswordHashEntry">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="visibility">False</property>
<property name="invisible-char">*</property>
<property name="secondary-icon-name">com.ublinux.ubl-settings-usergroups.view-symbolic</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">True</property>
@ -230,7 +256,7 @@
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">3</property>
</packing>

@ -15,11 +15,11 @@
</object>
<object class="GtkListStore" id="liststore1"/>
<object class="GtkListStore" id="liststore2"/>
<object class="GtkApplicationWindow" id="MonitorWindow">
<object class="GtkWindow" id="MonitorWindow">
<property name="width-request">800</property>
<property name="height-request">600</property>
<property name="can-focus">False</property>
<property name="resizable">False</property>
<property name="modal">True</property>
<property name="icon-name">com.ublinux.ubl-settings-usergroups</property>
<child>
<object class="GtkBox">

@ -59,10 +59,9 @@
<property name="can-focus">False</property>
<property name="icon-name">com.ublinux.ubl-settings-usergroups.cancel-symbolic</property>
</object>
<object class="GtkApplicationWindow" id="CreateUserWindow">
<object class="GtkWindow" id="CreateUserWindow">
<property name="height-request">500</property>
<property name="can-focus">False</property>
<property name="resizable">False</property>
<property name="modal">True</property>
<property name="icon-name">com.ublinux.ubl-settings-usergroups</property>
<child>
@ -75,6 +74,7 @@
<object class="GtkBox" id="StatusBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<child>
<placeholder/>
</child>
@ -468,6 +468,7 @@
<child>
<object class="GtkEntry" id="userPasswordChangedEntry">
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can-focus">True</property>
</object>
<packing>

@ -12,4 +12,4 @@ Icon=com.ublinux.ubl-settings-usergroups
Terminal=false
X-XfcePluggable=true
X-UBLPluggable=true
Categories=XFCE;GTK;Settings;DesktopSettings;X-XFCE-SettingsDialog;X-XFCE-SystemSettings;X-UBL-SettingsManager;X-UBL-Personal-Settings;
Categories=XFCE;GTK;Settings;DesktopSettings;X-UBL-SettingsManager;X-UBL-Personal-Settings;

@ -33,62 +33,36 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
</object>
<object class="GtkListStore" id="GroupsList">
<columns>
<!-- column-name uid -->
<column type="gint"/>
<!-- column-name uid_auto -->
<column type="gint"/>
<!-- column-name uid_unique -->
<column type="gboolean"/>
<!-- column-name uid_system -->
<column type="gboolean"/>
<!-- column-name username -->
<column type="gchararray"/>
<!-- column-name login -->
<!-- column-name GID -->
<column type="gchararray"/>
<!-- column-name password -->
<!-- column-name Name -->
<column type="gchararray"/>
<!-- column-name password_auto -->
<column type="gint"/>
<!-- column-name groups -->
<!-- column-name Users -->
<column type="gchararray"/>
<!-- column-name groups_own -->
<column type="gboolean"/>
<!-- column-name user_shell -->
<!-- column-name Parameters -->
<column type="gchararray"/>
<!-- column-name home_dir -->
<!-- column-name PasswordStatus -->
<column type="gchararray"/>
<!-- column-name home_create -->
<column type="gboolean"/>
</columns>
</object>
<object class="GtkListStore" id="UsersList">
<columns>
<!-- column-name uid -->
<column type="gint"/>
<!-- column-name uid_auto -->
<column type="gint"/>
<!-- column-name uid_unique -->
<column type="gboolean"/>
<!-- column-name uid_system -->
<!-- column-name Block -->
<column type="gboolean"/>
<!-- column-name username -->
<!-- column-name UID -->
<column type="gchararray"/>
<!-- column-name login -->
<!-- column-name Login -->
<column type="gchararray"/>
<!-- column-name password -->
<!-- column-name UserName -->
<column type="gchararray"/>
<!-- column-name password_auto -->
<column type="gint"/>
<!-- column-name groups -->
<!-- column-name MainGroup -->
<column type="gchararray"/>
<!-- column-name groups_own -->
<column type="gboolean"/>
<!-- column-name user_shell -->
<!-- column-name AdditionalGroups -->
<column type="gchararray"/>
<!-- column-name home_dir -->
<!-- column-name AdditionalParameters -->
<column type="gchararray"/>
<!-- column-name PasswordStatus -->
<column type="gchararray"/>
<!-- column-name home_create -->
<column type="gboolean"/>
</columns>
</object>
<object class="GtkImage" id="image1">
@ -149,6 +123,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="tooltip-text" translatable="yes">Inspect users and groups in system</property>
<property name="image">image12</property>
<style>
<class name="thin"/>
@ -165,6 +140,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="tooltip-text" translatable="yes">Additional settings</property>
<property name="image">image11</property>
<style>
<class name="thin"/>
@ -181,6 +157,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="tooltip-text" translatable="yes">Shared groups configuration</property>
<property name="image">image10</property>
<style>
<class name="thin"/>
@ -197,6 +174,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="tooltip-text" translatable="yes">Create new</property>
<property name="image">image1</property>
<style>
<class name="thin"/>
@ -213,6 +191,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="tooltip-text" translatable="yes">Edit</property>
<property name="image">image2</property>
<style>
<class name="thin"/>
@ -229,6 +208,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="tooltip-text" translatable="yes">Remove</property>
<property name="image">image3</property>
<style>
<class name="thin"/>
@ -245,6 +225,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="tooltip-text" translatable="yes">Update users and groups</property>
<property name="image">image13</property>
<style>
<class name="thin"/>
@ -293,6 +274,9 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
<child>
<object class="GtkTreeViewColumn">
<property name="title" translatable="yes">Block</property>
<child>
<object class="GtkCellRendererToggle"/>
</child>
</object>
</child>
<child>
@ -301,7 +285,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
<child>
<object class="GtkCellRendererText"/>
<attributes>
<attribute name="text">0</attribute>
<attribute name="text">1</attribute>
</attributes>
</child>
</object>
@ -312,7 +296,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
<child>
<object class="GtkCellRendererText"/>
<attributes>
<attribute name="text">5</attribute>
<attribute name="text">2</attribute>
</attributes>
</child>
</object>
@ -323,7 +307,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
<child>
<object class="GtkCellRendererText"/>
<attributes>
<attribute name="text">4</attribute>
<attribute name="text">3</attribute>
</attributes>
</child>
</object>
@ -333,6 +317,9 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
<property name="title" translatable="yes">Main group</property>
<child>
<object class="GtkCellRendererText"/>
<attributes>
<attribute name="text">4</attribute>
</attributes>
</child>
</object>
</child>
@ -341,6 +328,9 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
<property name="title" translatable="yes">Additional groups</property>
<child>
<object class="GtkCellRendererText"/>
<attributes>
<attribute name="text">5</attribute>
</attributes>
</child>
</object>
</child>
@ -349,12 +339,21 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
<property name="title" translatable="yes">Additional parameters</property>
<child>
<object class="GtkCellRendererText"/>
<attributes>
<attribute name="text">6</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn">
<property name="title" translatable="yes">Password status</property>
<child>
<object class="GtkCellRendererText"/>
<attributes>
<attribute name="text">7</attribute>
</attributes>
</child>
</object>
</child>
</object>
@ -396,7 +395,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
<object class="GtkTreeView" id="GroupsTree">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="model">UsersList</property>
<property name="model">GroupsList</property>
<property name="search-column">0</property>
<child internal-child="selection">
<object class="GtkTreeSelection"/>
@ -418,7 +417,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
<child>
<object class="GtkCellRendererText"/>
<attributes>
<attribute name="text">2</attribute>
<attribute name="text">1</attribute>
</attributes>
</child>
</object>
@ -429,7 +428,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
<child>
<object class="GtkCellRendererText"/>
<attributes>
<attribute name="text">3</attribute>
<attribute name="text">2</attribute>
</attributes>
</child>
</object>
@ -440,7 +439,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
<child>
<object class="GtkCellRendererText"/>
<attributes>
<attribute name="text">5</attribute>
<attribute name="text">3</attribute>
</attributes>
</child>
</object>
@ -449,7 +448,10 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
<object class="GtkTreeViewColumn">
<property name="title" translatable="yes">Password status</property>
<child>
<object class="GtkCellRendererToggle"/>
<object class="GtkCellRendererText"/>
<attributes>
<attribute name="text">4</attribute>
</attributes>
</child>
</object>
</child>

@ -101,7 +101,7 @@ msgstr ""
msgid "UID"
msgstr ""
#: source/ubl-strings.h:15
#: source/ubl-strings.h:15 source/ubl-strings.h:75
msgid "Login"
msgstr ""
@ -193,62 +193,206 @@ msgstr ""
msgid "Groups"
msgstr ""
#: source/ubl-strings.h:42
msgid "Inspect users and groups in system"
msgstr ""
#: source/ubl-strings.h:43
msgid "Set a password"
msgid "Additional settings"
msgstr ""
#: source/ubl-strings.h:44
msgid "Endrypted password"
msgid "Shared groups configuration"
msgstr ""
#: source/ubl-strings.h:45
msgid "Create new"
msgstr ""
#: source/ubl-strings.h:46
msgid "Edit"
msgstr ""
#: source/ubl-strings.h:47
msgid "Remove"
msgstr ""
#: source/ubl-strings.h:48
msgid "Update users and groups"
msgstr ""
#: source/ubl-strings.h:51
msgid "Users and groups - additional settings"
msgstr ""
#: source/ubl-strings.h:52
msgid "No password required"
msgstr ""
#: source/ubl-strings.h:58
#: source/ubl-strings.h:53
msgid "Set a password"
msgstr ""
#: source/ubl-strings.h:54
msgid "Endrypted password"
msgstr ""
#: source/ubl-strings.h:67
msgid "Accept"
msgstr ""
#: source/ubl-strings.h:61
msgid "Automatically"
#: source/ubl-strings.h:70
msgid "Users and groups - group configuration"
msgstr ""
#: source/ubl-strings.h:71
msgid "Group id:"
msgstr ""
#: source/ubl-strings.h:72
msgid "Group name:"
msgstr ""
#: source/ubl-strings.h:62
msgid "login"
#: source/ubl-strings.h:73
msgid "Group users:"
msgstr ""
#: source/ubl-strings.h:63
#: source/ubl-strings.h:74
msgid "Automatically"
msgstr ""
#: source/ubl-strings.h:76
msgid "Create group with ununique GID"
msgstr ""
#: source/ubl-strings.h:64
#: source/ubl-strings.h:77
msgid "Create system group"
msgstr ""
#: source/ubl-strings.h:65
#: source/ubl-strings.h:78
msgid "Encrypted password"
msgstr ""
#: source/ubl-strings.h:66
#: source/ubl-strings.h:79
msgid "Additional configuration"
msgstr ""
#: source/ubl-strings.h:82
msgid "Users and groups - groups"
msgstr ""
#: source/ubl-strings.h:96
msgid "Users and groups - system users and groups"
msgstr ""
#: source/ubl-strings.h:97
msgid "Blocked"
msgstr ""
#: source/ubl-strings.h:83
#: source/ubl-strings.h:98
msgid "Username"
msgstr ""
#: source/ubl-strings.h:84
#: source/ubl-strings.h:99
msgid "Primary group"
msgstr ""
#: source/ubl-strings.h:85
#: source/ubl-strings.h:100 source/ubl-strings.h:123
msgid "Home directory"
msgstr ""
#: source/ubl-strings.h:86 source/ubl-strings.h:88 source/ubl-strings.h:89
#: source/ubl-strings.h:101 source/ubl-strings.h:104
msgid "Group"
msgstr ""
#: source/ubl-strings.h:103
msgid "Password mismatch"
msgstr ""
#: source/ubl-strings.h:107
msgid "Users and groups - user configuration"
msgstr ""
#: source/ubl-strings.h:108
msgid "Set"
msgstr ""
#: source/ubl-strings.h:109
msgid "Empty important field"
msgstr ""
#: source/ubl-strings.h:110
msgid "Loading has failed"
msgstr ""
#: source/ubl-strings.h:111
msgid "Login name"
msgstr ""
#: source/ubl-strings.h:112
msgid "Additional groups:"
msgstr ""
#: source/ubl-strings.h:113
msgid "Password configuration"
msgstr ""
#: source/ubl-strings.h:114
msgid "Password has been changed:"
msgstr ""
#: source/ubl-strings.h:115
msgid "expiration date:"
msgstr ""
#: source/ubl-strings.h:116
msgid "Password change interval: minimum"
msgstr ""
#: source/ubl-strings.h:117
msgid "days, maximum"
msgstr ""
#: source/ubl-strings.h:118
msgid "days"
msgstr ""
#: source/ubl-strings.h:119
msgid "Days until warning"
msgstr ""
#: source/ubl-strings.h:120
msgid "Days without activity"
msgstr ""
#: source/ubl-strings.h:121
msgid "Force change at next login"
msgstr ""
#: source/ubl-strings.h:122
msgid "User shell"
msgstr ""
#: source/ubl-strings.h:124
msgid "Don't set"
msgstr ""
#: source/ubl-strings.h:125
msgid "Create system user"
msgstr ""
#: source/ubl-strings.h:126
msgid "Create user with ununique (repeating) UID"
msgstr ""
#: source/ubl-strings.h:127
msgid "Do not check login for compliance with character rules"
msgstr ""
#: source/ubl-strings.h:128
msgid "Temporary deactivation"
msgstr ""
#: source/ubl-strings.h:129
msgid "Save"
msgstr ""

@ -104,7 +104,7 @@ msgstr "Алгоритм хэширования пароля"
msgid "UID"
msgstr "UID"
#: source/ubl-strings.h:15
#: source/ubl-strings.h:15 source/ubl-strings.h:75
msgid "Login"
msgstr "Логин"
@ -196,62 +196,211 @@ msgstr "Пользователи группы"
msgid "Groups"
msgstr "Группы"
#: source/ubl-strings.h:42
msgid "Inspect users and groups in system"
msgstr ""
"Просмотр пользователей и групп в системе"
#: source/ubl-strings.h:43
msgid "Set a password"
msgstr "Установить пароль"
msgid "Additional settings"
msgstr "Дополнительные настройки"
#: source/ubl-strings.h:44
msgid "Endrypted password"
msgstr "Зашифрованный пароль"
msgid "Shared groups configuration"
msgstr ""
"Группы пользователей по умлочанию"
#: source/ubl-strings.h:45
msgid "Create new"
msgstr "Создать"
#: source/ubl-strings.h:46
msgid "Edit"
msgstr "Редактировать"
#: source/ubl-strings.h:47
msgid "Remove"
msgstr "Удалить"
#: source/ubl-strings.h:48
msgid "Update users and groups"
msgstr "Обновить список пользователей и групп"
#: source/ubl-strings.h:51
msgid "Users and groups - additional settings"
msgstr "Пользователи и группы - дополнительные настройки"
#: source/ubl-strings.h:52
msgid "No password required"
msgstr "Пароль не требуется"
#: source/ubl-strings.h:58
#: source/ubl-strings.h:53
msgid "Set a password"
msgstr "Установить пароль"
#: source/ubl-strings.h:54
msgid "Endrypted password"
msgstr "Зашифрованный пароль"
#: source/ubl-strings.h:67
msgid "Accept"
msgstr "Принять"
#: source/ubl-strings.h:61
#: source/ubl-strings.h:70
msgid "Users and groups - group configuration"
msgstr "Пользователи и группы - настройка группы"
#: source/ubl-strings.h:71
msgid "Group id:"
msgstr "ID Группы:"
#: source/ubl-strings.h:72
msgid "Group name:"
msgstr "Имя группы:"
#: source/ubl-strings.h:73
msgid "Group users:"
msgstr "Пользователи группы:"
#: source/ubl-strings.h:74
msgid "Automatically"
msgstr "Автоматически"
#: source/ubl-strings.h:62
msgid "login"
msgstr "логин"
#: source/ubl-strings.h:63
#: source/ubl-strings.h:76
msgid "Create group with ununique GID"
msgstr "Создать группу с повторяющимися (не уникальными) GID"
#: source/ubl-strings.h:64
#: source/ubl-strings.h:77
msgid "Create system group"
msgstr "Создать системную группу"
#: source/ubl-strings.h:65
#: source/ubl-strings.h:78
msgid "Encrypted password"
msgstr "Зашифрованный пароль"
#: source/ubl-strings.h:66
#: source/ubl-strings.h:79
msgid "Additional configuration"
msgstr "Загрузить локальную конфигуруцию"
#: source/ubl-strings.h:82
msgid "Users and groups - groups"
msgstr "Пользователи и группы - группы"
#: source/ubl-strings.h:96
msgid "Users and groups - system users and groups"
msgstr "Пользователи и группы - в системе"
#: source/ubl-strings.h:97
msgid "Blocked"
msgstr "Заблокировано"
#: source/ubl-strings.h:83
#: source/ubl-strings.h:98
msgid "Username"
msgstr "Имя пользователя"
#: source/ubl-strings.h:84
#: source/ubl-strings.h:99
msgid "Primary group"
msgstr "Основная группа"
#: source/ubl-strings.h:85
#: source/ubl-strings.h:100 source/ubl-strings.h:123
msgid "Home directory"
msgstr "Домашний каталог"
#: source/ubl-strings.h:86 source/ubl-strings.h:88 source/ubl-strings.h:89
#: source/ubl-strings.h:101 source/ubl-strings.h:104
msgid "Group"
msgstr "Группа"
#: source/ubl-strings.h:103
msgid "Password mismatch"
msgstr "Несовпадение паролей"
#: source/ubl-strings.h:107
msgid "Users and groups - user configuration"
msgstr "Пользователи и группы - настройка пользователя"
#: source/ubl-strings.h:108
msgid "Set"
msgstr "Задать"
#: source/ubl-strings.h:109
msgid "Empty important field"
msgstr "Пустое важное поле"
#: source/ubl-strings.h:110
msgid "Loading has failed"
msgstr "Ошибка загрузки"
#: source/ubl-strings.h:111
msgid "Login name"
msgstr "Имя логина"
#: source/ubl-strings.h:112
msgid "Additional groups:"
msgstr "Дополнительные группы:"
#: source/ubl-strings.h:113
msgid "Password configuration"
msgstr "Конфигурация пароля"
#: source/ubl-strings.h:114
msgid "Password has been changed:"
msgstr "Пароль изменён:"
#: source/ubl-strings.h:115
msgid "expiration date:"
msgstr "Дата устаревания:"
#: source/ubl-strings.h:116
msgid "Password change interval: minimum"
msgstr "Интервал смены пароля: минимум"
#: source/ubl-strings.h:117
msgid "days, maximum"
msgstr "дней, максимум"
#: source/ubl-strings.h:118
msgid "days"
msgstr "дней"
#: source/ubl-strings.h:119
#, fuzzy
msgid "Days until warning"
msgstr "Дней до предупреждения:"
#: source/ubl-strings.h:120
#, fuzzy
msgid "Days without activity"
msgstr "Дней без активности:"
#: source/ubl-strings.h:121
msgid "Force change at next login"
msgstr "Принулительно сменить при следующем входе в систему"
#: source/ubl-strings.h:122
#, fuzzy
msgid "User shell"
msgstr "Оболочка пользователя:"
#: source/ubl-strings.h:124
msgid "Don't set"
msgstr "Не создавать"
#: source/ubl-strings.h:125
msgid "Create system user"
msgstr "Создать системного пользователя"
#: source/ubl-strings.h:126
msgid "Create user with ununique (repeating) UID"
msgstr "Создать пользователя с повторяющимися (не уникальными) UID"
#: source/ubl-strings.h:127
msgid "Do not check login for compliance with character rules"
msgstr "Не проверять логин на несоответствие правилам использования символов"
#: source/ubl-strings.h:128
msgid "Temporary deactivation"
msgstr "Временное отключение учётной записи"
#: source/ubl-strings.h:129
msgid "Save"
msgstr "Сохранить"

Loading…
Cancel
Save