{"id":20697257,"url":"https://github.com/tsnsoft/dialogblockswinappml","last_synced_at":"2025-03-11T02:49:53.576Z","repository":{"id":275124372,"uuid":"731002093","full_name":"tsnsoft/DialogBlocksWinAppML","owner":"tsnsoft","description":"Пример мультиязычной визуальной программы на C++ с использованием wxWidgets и DialogBlocks в Visual Studio 2022","archived":false,"fork":false,"pushed_at":"2025-03-10T09:39:05.000Z","size":8257,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-03-10T10:28:45.522Z","etag":null,"topics":["dialogblocks","internationalization","localization","visual-studio","wxwidgets"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tsnsoft.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-12-13T06:25:01.000Z","updated_at":"2025-03-10T09:39:08.000Z","dependencies_parsed_at":"2025-02-19T05:23:01.495Z","dependency_job_id":"24cd08f3-e0ac-4626-8670-b5b8587374fe","html_url":"https://github.com/tsnsoft/DialogBlocksWinAppML","commit_stats":null,"previous_names":["tsnsoft/dialogblockswinappml"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tsnsoft%2FDialogBlocksWinAppML","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tsnsoft%2FDialogBlocksWinAppML/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tsnsoft%2FDialogBlocksWinAppML/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tsnsoft%2FDialogBlocksWinAppML/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tsnsoft","download_url":"https://codeload.github.com/tsnsoft/DialogBlocksWinAppML/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":242961747,"owners_count":20213315,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dialogblocks","internationalization","localization","visual-studio","wxwidgets"],"created_at":"2024-11-17T00:17:19.589Z","updated_at":"2025-03-11T02:49:53.565Z","avatar_url":"https://github.com/tsnsoft.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# DialogBlocksWinAppML\nПример мультиязычной визуальной программы на C++ с использованием wxWidgets и DialogBlocks в Visual Studio 2022\n\n![srcreenshot](screenshot1.png)\n\n![srcreenshot](screenshot2.png)\n\n![srcreenshot](screenshot3.png)\n\n***DialogBlocksWinAppMLapp.h:***\n\n```\nclass DialogBlocksWinAppMLApp : public wxApp\n{\n\npublic:\n\t// --- Создать объект локализации приложения для подсистемы wxWidgets ---\n\twxLocale m_locale; \n\n```\n\n***DialogBlocksWinAppMLapp.cpp:***\n\n```\n// --- Объявление указателя на объект конфигурации ---\nwxFileConfig* m_fileconfig;\n\n```\n```\n// Инициализация приложения\nvoid DialogBlocksWinAppMLApp::Init()\n{\n\t// --- ЛОКАЛИЗАЦИЯ ПРИЛОЖЕНИЯ, ЧТЕНИЕ ИЗ ФАЙЛА НАСТРОЕК ---\n\n\t// Добавить путь к каталогу с переводами в список поиска каталогов с переводами\n\tm_locale.AddCatalogLookupPathPrefix(wxT(\"locale\"));\n\n\t// Создать имя для файла конфигурации приложения\n\twxFileName fn = wxFileName(wxPathOnly(wxStandardPaths::Get().GetExecutablePath()), GetAppName(), wxT(\"ini\"));\n\n\t// Создать объект конфигурации приложения\n\tm_fileconfig = new wxFileConfig(wxEmptyString, wxEmptyString, fn.GetFullPath(), wxEmptyString,\n\t\twxCONFIG_USE_LOCAL_FILE | wxCONFIG_USE_NO_ESCAPE_CHARACTERS);\n\n\twxConfigBase::Set(m_fileconfig); // Установить объект конфигурации приложения\n\n\twxString user_lang; // Объявить переменную для хранения языка пользователя\n\n\tif (m_fileconfig) { // Если объект конфигурации приложения создан\n\t\tuser_lang = (m_fileconfig-\u003eRead(wxT(\"language\"), wxT(\"en\"))); // Прочитать язык пользователя из конфигурации\n\n\t\tif (user_lang == L\"ru\") // Если язык пользователя русский\n\t\t{\n\t\t\tsetlocale(LC_ALL, \"ru_RU.UTF-8\"); // Установить локаль по умолчанию для Linux на русский язык\n\t\t\tm_locale.Init(wxLANGUAGE_RUSSIAN); // Установить локализацию приложения на русский язык\n\t\t\tm_locale.AddCatalog(wxT(\"ru\")); // Добавить каталог с переводами на русский язык\t\n\t\t}\n\t\telse\n\t\t\tif (user_lang == L\"de\") // Если язык пользователя немецкий\n\t\t\t{\n\t\t\t\tsetlocale(LC_ALL, \"de_DE.UTF-8\"); // Установить локаль по умолчанию для Linux на немецкий язык\n\t\t\t\tm_locale.Init(wxLANGUAGE_GERMAN); // Установить локализацию приложения на немецкий язык\n\t\t\t\tm_locale.AddCatalog(wxT(\"de\")); // Добавить каталог с переводами на немецкий язык\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tsetlocale(LC_ALL, \"en_US.UTF-8\"); // Установить локаль по умолчанию для Linux на английский язык\n\t\t\t\tm_locale.Init(wxLANGUAGE_ENGLISH); // Установить локализацию приложения на английский язык\n\t\t\t}\n\t}\n}\n```\n\n```\n// Выход из приложения\nint DialogBlocksWinAppMLApp::OnExit()\n{\n\t// --- СОХРАНИТЬ НАСТРОЙКИ В ФАЙЛ КОНФИГУРАЦИИ ПРИ ВЫХОДЕ ИЗ ПРОГРАММЫ ---\n\tif (m_fileconfig) { // Если объект конфигурации приложения создан\n\t\tm_fileconfig-\u003eFlush(); // Сохранить настройки в файл\n\t\tdelete m_fileconfig; // Удалить объект конфигурации приложения\n\t\tm_fileconfig = NULL; // Установить указатель на объект конфигурации приложения в NULL\n\t}\n\twxConfigBase::Set(NULL); // Установить объект конфигурации приложения в NULL\n\t// ------------------------------------------------------------------\n\n\treturn wxApp::OnExit(); // Вызвать функцию OnExit() базового класса\n}\n```\n\n***form1.cpp:***\n\n```\n// Конструктор создания формы\nForm1::Form1(wxWindow* parent, wxWindowID id, const wxString\u0026 caption, const wxPoint\u0026 pos, const wxSize\u0026 size, long style) {\n\tInit();\n\tCreate(parent, id, caption, pos, size, style);\n\n\t// --- Загрузить настройки из конфигурации и установить значения в визуальных компонентах ---\n\twxConfigBase* conf = wxConfigBase::Get(false); // Получить объект конфигурации приложения\n\tif (conf) { // Если объект конфигурации приложения создан\n\t\twxString user_lang = (conf-\u003eRead(wxT(\"language\"), wxT(\"en\"))); // Прочитать значение языка из конфигурации\n\t\twxChoice* cl = (wxChoice*)FindWindowById(Choice_Lang); // Найти компонент с выбором языка\n\t\tif (cl) { // Если элемент найден\n\t\t\tcl-\u003eSetStringSelection(user_lang); // Установить язык в компоненте\n\t\t}\n\t}\n\tthis-\u003eSetTitle(_(\"Multilingual program\")); // Установить имя приложения на выбранном языке\n}\n```\n\n```\n// Обработчик события нажатия на кнопку\nvoid Form1::OnButton1Click(wxCommandEvent\u0026 event) {\n\twxMessageBox(_(\"Hello\")); // Выдать локализованное сообщение\n}\n```\n\n```\n// Обработчик закрытия окна\nvoid Form1::OnCloseWindow(wxCloseEvent\u0026 event) {\n\t// --- Сохранить настройки из визуальных компонент в конфигурацию ---\n\twxConfigBase* conf = wxConfigBase::Get(false); // Получить объект конфигурации приложения\n\tif (!conf) return; // Если объект конфигурации приложения не создан, то выход\n\twxChoice* cl = (wxChoice*)FindWindowById(Choice_Lang); // Найти компонент с выбором языка\n\tif (cl) { // Если компонент найден\n\t\tconf-\u003eWrite(wxT(\"language\"), cl-\u003eGetStringSelection()); // Записать значение из компонента в конфигурацию\n\t}\n\tDestroy(); // Закрыть окно\n}\n```\n\n```\n// Обработчик события выбора языка\nvoid Form1::OnChoiceLangSelected(wxCommandEvent\u0026 event) {\n\twxMessageBox(_(\"Restart the program\")); // Выдать локализованное сообщение\n}\n\n```\n\n![srcreenshot](screenshot4.png)\n\n\n## Ссылки:\n\nhttp://www.anthemion.co.uk/dialogblocks/\n\n***Бесплатная лицензия на DialogBlocks:*** https://github.com/proffix4/dialogblocks_free\n\nhttps://www.wxwidgets.org/\n\nhttps://visualstudio.microsoft.com/ru/vs/community/\n\nhttp://www.anthemion.co.uk/dialogblocks/ImageBlocks-1.07-Setup.exe\n\nhttps://poedit.net/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftsnsoft%2Fdialogblockswinappml","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftsnsoft%2Fdialogblockswinappml","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftsnsoft%2Fdialogblockswinappml/lists"}