WIP language translation changes

pull/207/head
parent 6f814853a5
commit 45e38176db

@ -64,7 +64,6 @@ void on_configuration_exit(GtkWidget *,configuration_window *window){
GList *box = gtk_container_get_children(GTK_CONTAINER(widgets->ConfigurationModeMenuItem)); GList *box = gtk_container_get_children(GTK_CONTAINER(widgets->ConfigurationModeMenuItem));
GList *children = gtk_container_get_children(GTK_CONTAINER(box->data)); GList *children = gtk_container_get_children(GTK_CONTAINER(box->data));
GtkWidget *Check = GTK_WIDGET(g_list_nth_data(children,1)); GtkWidget *Check = GTK_WIDGET(g_list_nth_data(children,1));
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(Check),0); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(Check),0);
g_list_free(box); g_list_free(box);
@ -82,7 +81,7 @@ void on_configuration_mode_switch(GtkWidget *self,main_window *widgets){
GtkWidget *Check = GTK_WIDGET(g_list_nth_data(children,1)); GtkWidget *Check = GTK_WIDGET(g_list_nth_data(children,1));
int active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(Check)); int active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(Check));
if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(Check))){ if (!active){
GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_configuration_mode); GtkBuilder *builder = gtk_builder_new_from_resource(glade_path_configuration_mode);
configuration_window *window = malloc(sizeof(configuration_window)); configuration_window *window = malloc(sizeof(configuration_window));
window->Window = yon_gtk_builder_get_widget(builder,"MainWindow"); window->Window = yon_gtk_builder_get_widget(builder,"MainWindow");

@ -52,18 +52,18 @@ void on_config_global_load(GtkWidget *,main_window *widgets){
main_config.config_load_path = yon_char_new("global"); main_config.config_load_path = yon_char_new("global");
yon_load_proceed(YON_CONFIG_GLOBAL); yon_load_proceed(YON_CONFIG_GLOBAL);
main_config.load_mode=YON_CONFIG_GLOBAL; main_config.load_mode=YON_CONFIG_GLOBAL;
yon_main_window_update_locale(widgets); // yon_main_window_update_locale(widgets);
yon_page_init(widgets,gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->Notebook))); yon_page_init(widgets,gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->Notebook)));
} }
void on_config_custom_load(GtkWidget *,main_window *widgets){ void on_config_custom_load(GtkWidget *,main_window *){
yon_load_proceed(YON_CONFIG_CUSTOM); yon_load_proceed(YON_CONFIG_CUSTOM);
// yon_page_init(widgets,gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->Notebook))); // yon_page_init(widgets,gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->Notebook)));
main_config.load_mode=YON_CONFIG_CUSTOM; main_config.load_mode=YON_CONFIG_CUSTOM;
yon_main_window_update_locale(widgets); // yon_main_window_update_locale(widgets);
} }
void on_config_custom_load_last(GtkWidget *,main_window *widgets){ void on_config_custom_load_last(GtkWidget *,main_window *){
yon_config_clean(); yon_config_clean();
if (!yon_char_is_empty(config_get_default_command)) if (!yon_char_is_empty(config_get_default_command))
yon_config_load_config(YON_CONFIG_DEFAULT,config_get_default_command,NULL); yon_config_load_config(YON_CONFIG_DEFAULT,config_get_default_command,NULL);
@ -71,7 +71,7 @@ void on_config_custom_load_last(GtkWidget *,main_window *widgets){
yon_config_load_config(YON_CONFIG_CUSTOM,command,NULL); yon_config_load_config(YON_CONFIG_CUSTOM,command,NULL);
// yon_page_init(widgets,gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->Notebook))); // yon_page_init(widgets,gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->Notebook)));
main_config.load_mode=YON_CONFIG_CUSTOM; main_config.load_mode=YON_CONFIG_CUSTOM;
yon_main_window_update_locale(widgets); // yon_main_window_update_locale(widgets);
} }
void on_config_global_local_save(GtkWidget *,main_window *widgets){ void on_config_global_local_save(GtkWidget *,main_window *widgets){

@ -4,6 +4,11 @@ void on_locale_changed(GtkWidget *,main_window *widgets){
GtkTreeIter iter; GtkTreeIter iter;
GtkTreeModel *model; GtkTreeModel *model;
if (!gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->LanguagesTree)),&model,&iter)) return; if (!gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->LanguagesTree)),&model,&iter)) return;
{
GtkTreePath *path = gtk_tree_model_get_path(GTK_TREE_MODEL(widgets->InstallerLanguageList),&iter);
gtk_tree_view_scroll_to_cell(GTK_TREE_VIEW(widgets->LanguagesTree),path,0,0,0,0);
gtk_tree_path_free(path);
}
gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(widgets->InstallerCountryFilter)); gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(widgets->InstallerCountryFilter));
char *config_code = config(installer_locale_parameter); char *config_code = config(installer_locale_parameter);
if (yon_char_is_empty(config_code)){ if (yon_char_is_empty(config_code)){
@ -69,12 +74,17 @@ void yon_startup_language_init(){
if (size>1&&!yon_char_is_empty(parsed[1])&&strcmp(parsed[1],"(null)\n")){ if (size>1&&!yon_char_is_empty(parsed[1])&&strcmp(parsed[1],"(null)\n")){
yon_char_remove_last_symbol(parsed[1],'\n'); yon_char_remove_last_symbol(parsed[1],'\n');
free(yon_char_divide_search(parsed[1],"=",-1)); free(yon_char_divide_search(parsed[1],"=",-1));
yon_config_register(lang_parameter,lang_parameter_command,parsed[1]); yon_char_remove_brackets(parsed[1]);
yon_config_register(installer_locale_parameter,installer_locale_parameter_command,parsed[1]);
} }
if (size>2&&!yon_char_is_empty(parsed[2])&&strcmp(parsed[2],"(null)\n")){ if (size>2&&!yon_char_is_empty(parsed[2])&&strcmp(parsed[2],"(null)\n")){
yon_char_remove_last_symbol(parsed[2],'\n'); yon_char_remove_last_symbol(parsed[2],'\n');
free(yon_char_divide_search(parsed[2],"=",-1)); free(yon_char_divide_search(parsed[2],"=",-1));
yon_config_register(SYSTEM_LANG_parameter,SYSTEM_LANG_parameter_command,parsed[2]); yon_char_remove_brackets(parsed[2]);
yon_config_register(installer_locale_parameter,installer_locale_parameter_command,parsed[2]);
} else {
yon_config_register(installer_locale_parameter,installer_locale_parameter_command,setlocale(LC_ALL,""));
} }
} }
} }
@ -95,14 +105,15 @@ void yon_main_window_update_locale(main_window *widgets){
} }
locale = setlocale(LC_ALL,locale); locale = setlocale(LC_ALL,locale);
gtk_widget_destroy(widgets->MainWindow); // gtk_widget_destroy(widgets->MainWindow);
textdomain(LocaleName); textdomain(LocaleName);
g_setenv("LANGUAGE",locale,1); g_setenv("LANGUAGE",locale,1);
yon_update_translation(widgets->builder);
yon_main_window_create(widgets); // yon_main_window_create(widgets);
char *path = yon_char_unite(yon_ubl_user_get_home_directory(),"/.config/",LocaleName,"/",LocaleName,".conf",NULL); char *path = yon_char_unite(yon_ubl_user_get_home_directory(),"/.config/",LocaleName,"/",LocaleName,".conf",NULL);
yon_window_config_setup(GTK_WINDOW(widgets->MainWindow)); yon_window_config_setup(GTK_WINDOW(widgets->MainWindow));
yon_window_config_load(path); yon_window_config_load(path);
} }
typedef struct{ typedef struct{
@ -172,9 +183,7 @@ void set_locales_list(main_window *widgets){
2,code, 2,code,
3,_(title), 3,_(title),
-1); -1);
if (yon_char_is_empty(config_code)){ if (!yon_char_is_empty(config_code)){
config_code=yon_char_new(setlocale(LC_ALL,NULL));
}
char *temp = strstr(config_code,"."); char *temp = strstr(config_code,".");
if (temp) temp[0]='\0'; if (temp) temp[0]='\0';
if (!strcmp(config_code,locales[i])){ if (!strcmp(config_code,locales[i])){
@ -182,7 +191,7 @@ void set_locales_list(main_window *widgets){
gtk_tree_view_scroll_to_cell(GTK_TREE_VIEW(widgets->LanguagesTree),path,0,0,0,0); gtk_tree_view_scroll_to_cell(GTK_TREE_VIEW(widgets->LanguagesTree),path,0,0,0,0);
gtk_tree_path_free(path); gtk_tree_path_free(path);
gtk_tree_selection_select_iter(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->LanguagesTree)),&iter); gtk_tree_selection_select_iter(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->LanguagesTree)),&iter);
on_locale_changed(NULL,widgets); }
} }
} }
textdomain(LocaleName); textdomain(LocaleName);
@ -211,3 +220,44 @@ gboolean on_country_filter(GtkTreeModel *self, GtkTreeIter *iter, main_window *w
return 0; return 0;
} }
void yon_translation_init(GtkBuilder *builder){
GSList *list = gtk_builder_get_objects(builder);
GSList *iter;
for (iter = list; iter; iter = iter->next){
GtkWidget *cur_widget = NULL;
const char *widget_text = NULL;
if (GTK_IS_BUTTON(iter->data)){
cur_widget = GTK_WIDGET(iter->data);
widget_text = yon_char_new(gtk_button_get_label(GTK_BUTTON(cur_widget)));
} else if (GTK_IS_LABEL(iter->data)){
cur_widget = GTK_WIDGET(iter->data);
widget_text = yon_char_new(gtk_label_get_text(GTK_LABEL(cur_widget)));
} else continue;
g_object_set_data(G_OBJECT(cur_widget),"original_label",(void*)widget_text);
}
}
void yon_update_translation(GtkBuilder *builder){
GSList *list = gtk_builder_get_objects(builder);
GSList *iter;
for (iter = list; iter; iter = iter->next){
if (GTK_IS_BUTTON(iter->data)){
GtkWidget *cur_button = GTK_WIDGET(iter->data);
char *source_label = g_object_get_data(G_OBJECT(cur_button),"original_label");
if (!yon_char_is_empty(source_label)){
gtk_button_set_label(GTK_BUTTON(cur_button),_(source_label));
}
} else if (GTK_IS_LABEL(iter->data)){
GtkWidget *cur_label = GTK_WIDGET(iter->data);
char *source_label = g_object_get_data(G_OBJECT(cur_label),"original_label");
if (!yon_char_is_empty(source_label)){
gtk_label_set_text(GTK_LABEL(cur_label),_(source_label));
}
}
}
}

@ -401,7 +401,9 @@ gboolean on_yon_exit(GtkWidget *,GdkEvent*, main_window *widgets){
void yon_main_window_create(main_window *widgets){ void yon_main_window_create(main_window *widgets){
__attribute__((unused)) char *locale = setlocale(LC_ALL, "en_US.UTF-8");
GtkBuilder *builder = gtk_builder_new_from_resource(glade_path); GtkBuilder *builder = gtk_builder_new_from_resource(glade_path);
yon_translation_init(builder);
gtk_builder_add_callback_symbol(builder,"yon_gtk_widget_set_sensitive_from_toggle_button",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button)); gtk_builder_add_callback_symbol(builder,"yon_gtk_widget_set_sensitive_from_toggle_button",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button));
gtk_builder_add_callback_symbol(builder,"on_toggle_button_switch_on",G_CALLBACK(on_toggle_button_switch_on)); gtk_builder_add_callback_symbol(builder,"on_toggle_button_switch_on",G_CALLBACK(on_toggle_button_switch_on));
// Custom widgets configuration // Custom widgets configuration
@ -713,6 +715,7 @@ void yon_main_window_create(main_window *widgets){
gtk_menu_shell_append(GTK_MENU_SHELL(menu),widgets->DocumentationMenuItem); gtk_menu_shell_append(GTK_MENU_SHELL(menu),widgets->DocumentationMenuItem);
gtk_menu_shell_append(GTK_MENU_SHELL(menu),widgets->AboutMenuItem); gtk_menu_shell_append(GTK_MENU_SHELL(menu),widgets->AboutMenuItem);
{
g_signal_connect(G_OBJECT(widgets->LicenseAgreeRadio),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button),widgets->NextButton); g_signal_connect(G_OBJECT(widgets->LicenseAgreeRadio),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button),widgets->NextButton);
g_signal_connect(G_OBJECT(widgets->LoadGlobalConfigurationMenuItem),"activate",G_CALLBACK(on_config_global_load),widgets); g_signal_connect(G_OBJECT(widgets->LoadGlobalConfigurationMenuItem),"activate",G_CALLBACK(on_config_global_load),widgets);
@ -749,8 +752,8 @@ void yon_main_window_create(main_window *widgets){
g_signal_connect(G_OBJECT(widgets->LocaleCell),"toggled",G_CALLBACK(on_locale_toggled),widgets); g_signal_connect(G_OBJECT(widgets->LocaleCell),"toggled",G_CALLBACK(on_locale_toggled),widgets);
g_signal_connect(G_OBJECT(widgets->CancelInstallButton),"clicked",G_CALLBACK(on_page_cancel_clicked),widgets); g_signal_connect(G_OBJECT(widgets->CancelInstallButton),"clicked",G_CALLBACK(on_page_cancel_clicked),widgets);
#ifdef TIMEZONEMAP_INCLUDE
g_signal_connect(G_OBJECT(widgets->RegionCombo),"changed",G_CALLBACK(on_region_changed),widgets); g_signal_connect(G_OBJECT(widgets->RegionCombo),"changed",G_CALLBACK(on_region_changed),widgets);
#ifdef TIMEZONEMAP_INCLUDE
g_signal_connect(G_OBJECT(widgets->ZoneCombo),"changed",G_CALLBACK(on_zone_changed),widgets); g_signal_connect(G_OBJECT(widgets->ZoneCombo),"changed",G_CALLBACK(on_zone_changed),widgets);
#endif #endif
g_signal_connect(G_OBJECT(widgets->RegionSensitiveSwitch),"state-set",G_CALLBACK(yon_gtk_widget_set_sensitive_from_switch),widgets->RegionCombo); g_signal_connect(G_OBJECT(widgets->RegionSensitiveSwitch),"state-set",G_CALLBACK(yon_gtk_widget_set_sensitive_from_switch),widgets->RegionCombo);
@ -870,7 +873,9 @@ void yon_main_window_create(main_window *widgets){
g_signal_connect(G_OBJECT(widgets->AboutMenuItem),"activate",G_CALLBACK(yon_on_about),NULL); g_signal_connect(G_OBJECT(widgets->AboutMenuItem),"activate",G_CALLBACK(yon_on_about),NULL);
g_signal_connect(G_OBJECT(widgets->DocumentationMenuItem),"activate",G_CALLBACK(on_open_documentation_confirmation),WIKI_LINK); g_signal_connect(G_OBJECT(widgets->DocumentationMenuItem),"activate",G_CALLBACK(on_open_documentation_confirmation),WIKI_LINK);
}
yon_window_config_setup(GTK_WINDOW(widgets->MainWindow));
yon_gtk_window_setup(GTK_WINDOW(widgets->MainWindow),NULL,TITLE_LABEL,icon_path,NULL); yon_gtk_window_setup(GTK_WINDOW(widgets->MainWindow),NULL,TITLE_LABEL,icon_path,NULL);
@ -922,10 +927,6 @@ void yon_main_window_create(main_window *widgets){
if (main_config.lock_load_global == 1){ if (main_config.lock_load_global == 1){
gtk_widget_set_sensitive(widgets->LoadGlobalConfigurationMenuItem,0); gtk_widget_set_sensitive(widgets->LoadGlobalConfigurationMenuItem,0);
} }
if (getuid()){
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(widgets->ConfigurationModeMenuItem),1);
}
gtk_window_set_title(GTK_WINDOW(widgets->MainWindow),TITLE_LABEL); gtk_window_set_title(GTK_WINDOW(widgets->MainWindow),TITLE_LABEL);
gtk_window_set_icon_name(GTK_WINDOW(widgets->MainWindow),icon_path); gtk_window_set_icon_name(GTK_WINDOW(widgets->MainWindow),icon_path);
@ -953,6 +954,13 @@ void yon_main_window_create(main_window *widgets){
} else { } else {
gtk_widget_hide(widgets->StartScenarioButton); gtk_widget_hide(widgets->StartScenarioButton);
} }
if (getuid()){
gtk_menu_item_activate(GTK_MENU_ITEM(widgets->ConfigurationModeMenuItem));
if (yon_char_is_empty(main_config.config_save_path)){
gtk_main_quit();
exit (1);
}
}
if (main_config.force_ini){ if (main_config.force_ini){
if (yon_configuration_path_check(main_config.config_save_path)){ if (yon_configuration_path_check(main_config.config_save_path)){
GList *box = gtk_container_get_children(GTK_CONTAINER(widgets->ConfigurationModeMenuItem)); GList *box = gtk_container_get_children(GTK_CONTAINER(widgets->ConfigurationModeMenuItem));
@ -967,8 +975,6 @@ void yon_main_window_create(main_window *widgets){
exit (1); exit (1);
} }
} }
yon_locale_init();
set_locales_list(widgets);
} }
gboolean yon_maximize_start(main_window *widgets){ gboolean yon_maximize_start(main_window *widgets){
@ -989,7 +995,7 @@ void *yon_maximize(main_window *widgets){
* Функция настройки основного окна приложения. [widgets] - структура со стандартным интерфейсом. * Функция настройки основного окна приложения. [widgets] - структура со стандартным интерфейсом.
*/ */
main_window *yon_main_window_complete(){ main_window *yon_main_window_complete(){
if (main_config.force_ini){ if (main_config.force_ini){ //Check if config path exists
if (yon_configuration_path_check(main_config.config_save_path)){ if (yon_configuration_path_check(main_config.config_save_path)){
{ {
main_config.configure_mode=1; main_config.configure_mode=1;
@ -997,17 +1003,32 @@ main_window *yon_main_window_complete(){
} }
} }
main_window *widgets=NULL; main_window *widgets=NULL;
widgets = yon_remalloc(widgets,sizeof(main_window)); widgets = malloc(sizeof(main_window));
memset(widgets,0,sizeof(main_window)); memset(widgets,0,sizeof(main_window));
yon_startup_language_init();
yon_main_window_create(widgets); yon_main_window_create(widgets);
yon_window_config_setup(GTK_WINDOW(widgets->MainWindow));
// yon_window_config_custom_window_setup(GTK_WINDOW(widgets->MainWindow),"MainWindow"); yon_startup_language_init();
yon_locale_init();
set_locales_list(widgets);
// yon_main_window_update_locale(widgets);
// // yon_window_config_custom_window_setup(GTK_WINDOW(widgets->MainWindow),"MainWindow");
int fullscreen = 0;
char *path = yon_char_unite(yon_ubl_user_get_home_directory(),"/.config/",LocaleName,"/",LocaleName,".conf",NULL);
if (access(path,F_OK)){
fullscreen = 1;
g_thread_new("fullscreen",(GThreadFunc)yon_maximize,widgets);
}
yon_window_config_load(path);
yon_window_config_add_instant_parameter("fullscreen","window",&fullscreen,YON_TYPE_BOOLEAN);
yon_main_window_update_locale(widgets);
return widgets; return widgets;
} }
int main(int argc, char *argv[]){ int main(int argc, char *argv[]){
__attribute__((unused)) char *locale = setlocale(LC_ALL, ""); // __attribute__((unused)) char *locale = setlocale(LC_ALL, "en_US.UTF-8");
textdomain(LocaleName); textdomain(LocaleName);
yon_ubl_connect_config((_template_config*)&main_config); yon_ubl_connect_config((_template_config*)&main_config);
config_init(); config_init();
@ -1040,31 +1061,24 @@ int main(int argc, char *argv[]){
} }
gtk_init(&argc,&argv); gtk_init(&argc,&argv);
main_window *widgets = NULL; main_window *widgets = NULL;
if (widgets){}; GtkCssProvider *css=gtk_css_provider_new();
int fullscreen = 0; gtk_css_provider_load_from_resource(css,CssPath);
gtk_style_context_add_provider_for_screen(gdk_screen_get_default(),
GTK_STYLE_PROVIDER(css),
-1);
{
widgets = yon_main_window_complete(); widgets = yon_main_window_complete();
GtkWidget *root_button = yon_root_button_new(argv,argc); GtkWidget *root_button = yon_root_button_new(argv,argc);
gtk_style_context_add_class(gtk_widget_get_style_context(root_button),"menuitemtop"); gtk_style_context_add_class(gtk_widget_get_style_context(root_button),"menuitemtop");
gtk_menu_shell_prepend(GTK_MENU_SHELL(gtk_widget_get_parent(widgets->AboutMenuItem)),root_button); gtk_menu_shell_prepend(GTK_MENU_SHELL(gtk_widget_get_parent(widgets->AboutMenuItem)),root_button);
yon_root_button_init(root_button,GTK_WINDOW(widgets->MainWindow)); yon_root_button_init(root_button,GTK_WINDOW(widgets->MainWindow));
on_config_global_load(NULL,widgets);
char *path = yon_char_unite(yon_ubl_user_get_home_directory(),"/.config/",LocaleName,"/",LocaleName,".conf",NULL);
if (access(path,F_OK)){
fullscreen = 1;
g_thread_new("fullscreen",(GThreadFunc)yon_maximize,widgets);
on_config_global_load(NULL,widgets);
} }
yon_window_config_load(path);
yon_window_config_add_instant_parameter("fullscreen","window",&fullscreen,YON_TYPE_BOOLEAN);
main_config.launch_arguments=yon_char_parsed_copy(argv,argc); main_config.launch_arguments=yon_char_parsed_copy(argv,argc);
main_config.launch_size=argc; main_config.launch_size=argc;
GtkCssProvider *css=gtk_css_provider_new();
gtk_css_provider_load_from_resource(css,CssPath);
gtk_style_context_add_provider_for_screen(gdk_screen_get_default(),
GTK_STYLE_PROVIDER(css),
-1);
if (getuid()!=0){ if (getuid()!=0){
yon_ubl_status_box_render(yon_char_get_localised_from_lib(ROOT_WARNING_LABEL),BACKGROUND_IMAGE_FAIL_TYPE); yon_ubl_status_box_render(yon_char_get_localised_from_lib(ROOT_WARNING_LABEL),BACKGROUND_IMAGE_FAIL_TYPE);
} }

@ -1469,3 +1469,5 @@ gboolean yon_progress_bar_start(main_window *widgets);
void *yon_progress_file_buzyfy(void*); void *yon_progress_file_buzyfy(void*);
void yon_startup_language_init(); void yon_startup_language_init();
gboolean on_languages_search_func(GtkTreeModel *model, gint col,const char *key, GtkTreeIter *iter, main_window *widgets); gboolean on_languages_search_func(GtkTreeModel *model, gint col,const char *key, GtkTreeIter *iter, main_window *widgets);
void yon_update_translation(GtkBuilder *builder);
void yon_translation_init(GtkBuilder *builder);
Loading…
Cancel
Save