1
0
mirror of https://github.com/veracrypt/VeraCrypt.git synced 2026-06-19 02:56:07 -05:00

Linux/FreeBSD/macOS: Implement language selection settings (#1253)

* Implement Language selection into settings
Initial commit to create a new tab in PreferencesNotebook for
Language selection. By default, if nothing is chosen, it uses the
current behaviour of using the language from system environment
variables. If another language is chosen from the settings, it is
saved into the Configuration.xml and this is used instead.

* Fix SetStringSelection() assert issue on macOS

* Add header include to fix build

* Add current language pack, authors and way to use literal strings

* Translations also for FreeBSD

* Minimal GTK3 WX build on FreeBSD requires wxGraphicsContext

* Get Preferences properly instead of workaround function

* Use WrapSizer instead of BoxSizer for author line
This forces long author lists to be put on a new line, reducing
the need to increase window width.

* Update Finnish translation

* Borrow translation from IDM_LANGUAGE where it makes sense

* Remove colon and thus unneeded function

* Simplify Language tab layout

* Reintroduce macOS specific fixes to Forms.cpp

* cleanup
This commit is contained in:
Jertzukka
2023-11-19 01:31:40 +02:00
committed by GitHub
parent 9247ce1bb9
commit 6a1780864c
56 changed files with 954 additions and 91 deletions
+56
View File
@@ -14,6 +14,9 @@
#include <wx/dynlib.h>
#ifdef TC_WINDOWS
#include <wx/msw/registry.h>
#else
#include <wx/dir.h>
#include <wx/arrstr.h>
#endif
#include "Common/SecurityToken.h"
#include "Main/Main.h"
@@ -68,6 +71,30 @@ namespace VeraCrypt
}
Pkcs5PrfChoice->Select (prfInitialIndex);
// Language for non-Windows
#ifndef TC_WINDOWS
#if defined (TC_MACOSX)
wxDir languagesFolder(StringConverter::ToSingle (Application::GetExecutableDirectory()) + "/../Resources/languages/");
#else
wxDir languagesFolder("/usr/share/veracrypt/languages/");
#endif
wxArrayString langArray;
LanguageListBox->Append("System default");
LanguageListBox->Append("English");
size_t langCount;
langCount = wxDir::GetAllFiles(languagesFolder.GetName(), &langArray, wxEmptyString, wxDIR_FILES);
for (size_t i = 0; i < langCount; ++i) {
wxFileName filename(langArray[i]);
wxString langId = filename.GetName().AfterLast('.');
wxString langNative = langEntries[langId];
if (!langNative.empty()) {
LanguageListBox->Append(langNative);
}
}
#endif
// Keyfiles
TC_CHECK_BOX_VALIDATOR (UseKeyfiles);
@@ -238,6 +265,15 @@ namespace VeraCrypt
}
}
void PreferencesDialog::OnSysDefaultLangButtonClick (wxCommandEvent& event)
{
// SetStringSelection()'s Assert currently broken in sorted ListBoxes on macOS, workaround:
int itemIndex = LanguageListBox->FindString("System default", true);
if (itemIndex != wxNOT_FOUND) {
LanguageListBox->SetSelection(itemIndex);
}
}
void PreferencesDialog::OnAssignHotkeyButtonClick (wxCommandEvent& event)
{
#ifdef TC_WINDOWS
@@ -355,6 +391,13 @@ namespace VeraCrypt
AssignHotkeyButton->Enable (false);
}
// Fixes an issue where going through PreferencesNotebook tabs would unintentionally select the first entry
// in the LanguageListBox and thus cause a language change on OKButton press.
void PreferencesDialog::OnPageChanged(wxBookCtrlEvent &event)
{
LanguageListBox->DeselectAll();
}
void PreferencesDialog::OnOKButtonClick (wxCommandEvent& event)
{
#ifdef TC_WINDOWS
@@ -388,6 +431,19 @@ namespace VeraCrypt
bool securityTokenModuleChanged = (Preferences.SecurityTokenModule != wstring (Pkcs11ModulePathTextCtrl->GetValue()));
Preferences.SecurityTokenModule = wstring (Pkcs11ModulePathTextCtrl->GetValue());
if (LanguageListBox->GetSelection() != wxNOT_FOUND) {
wxString langToFind = LanguageListBox->GetString(LanguageListBox->GetSelection());
for (const auto &each: langEntries) {
if (each.second == langToFind) {
Preferences.Language = each.first;
#ifdef DEBUG
cout << "Lang set to: " << each.first << endl;
#endif
}
}
Gui->ShowInfo (LangString["LINUX_RESTART_FOR_LANGUAGE_CHANGE"]);
}
Gui->SetPreferences (Preferences);
try