Added localisation configuration for users

pull/295/head
parent a35bfd762f
commit 5c7711363f
No known key found for this signature in database
GPG Key ID: FF1D842BF4DDE92B

@ -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 ""

@ -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 "Пользователь(-ли)"

@ -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;i<languages_size;i++){
char *locale_str = g_hash_table_lookup(hash,languages[i]);
if (!yon_char_is_empty(locale_str)){
int parsed_size;
config_str parsed = yon_char_parse(locale_str,&parsed_size,"|");
gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(target),parsed[0],parsed[1]);
}
}
if (!yon_char_is_empty(config_lang)){
gtk_combo_box_set_active_id(GTK_COMBO_BOX(target),config_lang);
}
return G_SOURCE_REMOVE;
}
void *yon_load_languages(void *target){
int size;
config_str locales = yon_config_load(languages_command,&size);
GHashTable *hash = g_hash_table_new(g_str_hash,g_str_equal);
for (int i=0;i<size;i++){
yon_char_remove_last_symbol(locales[i],'\n');
int parsed_size;
config_str parsed = yon_char_parse(locales[i],&parsed_size,"|");
g_hash_table_insert(hash,yon_char_new(parsed[0]),yon_char_new(locales[i]));
}
g_object_set_data(G_OBJECT(target),"hash",hash);
g_idle_add((GSourceFunc)yon_user_set_locales,target);
g_thread_exit(NULL);
}
ubl_settings_usergroups_user_window *yon_ubl_settings_usergroups_user_new(){
ubl_settings_usergroups_user_window *window = malloc(sizeof(ubl_settings_usergroups_user_window));
GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_ubl_settings_usergroups_user);
@ -205,6 +249,7 @@ ubl_settings_usergroups_user_window *yon_ubl_settings_usergroups_user_new(){
window->userWarningSpin=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;

@ -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")){

@ -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

@ -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")
#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")

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.38.2 -->
<!-- Generated with glade 3.40.0 -->
<interface domain="ubl-settings-usergroups">
<requires lib="gtk+" version="3.24"/>
<!-- interface-css-provider-path ubl-settings-usergroups.css -->
@ -582,6 +582,83 @@
<property name="margin-bottom">5</property>
<property name="orientation">vertical</property>
<property name="spacing">5</property>
<child>
<object class="GtkFrame">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label-xalign">0.019999999552965164</property>
<property name="shadow-type">in</property>
<child>
<object class="GtkAlignment">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="bottom-padding">5</property>
<property name="left-padding">5</property>
<property name="right-padding">5</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<property name="spacing">5</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="spacing">5</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">System language:</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkComboBoxText" id="LanguageCombo">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="active">0</property>
<items>
<item translatable="yes">Default</item>
<item id="system" translatable="yes">System</item>
</items>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
</object>
</child>
</object>
</child>
<child type="label">
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Regional settings</property>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkFrame">
<property name="visible">True</property>
@ -816,7 +893,7 @@
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
<property name="position">1</property>
</packing>
</child>
<child>
@ -1099,7 +1176,7 @@
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
<property name="position">2</property>
</packing>
</child>
<child>
@ -1135,7 +1212,7 @@
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
<property name="position">3</property>
</packing>
</child>
</object>

Loading…
Cancel
Save