diff --git a/src/desktop/types/OverridableVar.hpp b/src/desktop/types/OverridableVar.hpp index 9ecfc890cc5..c37d1243882 100644 --- a/src/desktop/types/OverridableVar.hpp +++ b/src/desktop/types/OverridableVar.hpp @@ -3,7 +3,7 @@ #include #include #include -#include +#include #include "../../config/ConfigValue.hpp" namespace Desktop::Types { @@ -25,6 +25,8 @@ namespace Desktop::Types { PRIORITY_WORKSPACE_RULE, PRIORITY_WINDOW_RULE, PRIORITY_SET_PROP, + + PRIORITY_END, }; template @@ -56,11 +58,11 @@ namespace Desktop::Types { if (this == &other) return *this; - for (auto const& value : other.m_values) { + for (size_t i = 0; i < PRIORITY_END; ++i) { if constexpr (Extended && !std::is_same_v) - m_values[value.first] = clampOptional(value.second, m_minValue, m_maxValue); + m_values[i] = clampOptional(*other.m_values[i], m_minValue, m_maxValue); else - m_values[value.first] = value.second; + m_values[i] = other.m_values[i]; } return *this; @@ -71,18 +73,19 @@ namespace Desktop::Types { } void unset(eOverridePriority priority) { - m_values.erase(priority); + m_values[priority] = std::nullopt; } bool hasValue() const { - return !m_values.empty(); + return std::ranges::any_of(m_values, [](const auto& e) { return e.has_value(); }); } T value() const { - if (!m_values.empty()) - return std::prev(m_values.end())->second; - else - throw std::bad_optional_access(); + for (const auto& v : m_values | std::ranges::views::reverse) { + if (v) + return *v; + } + throw std::bad_optional_access(); } T valueOr(T const& other) const { @@ -115,10 +118,12 @@ namespace Desktop::Types { } eOverridePriority getPriority() const { - if (!m_values.empty()) - return std::prev(m_values.end())->first; - else - throw std::bad_optional_access(); + for (int i = PRIORITY_END - 1; i >= 0; --i) { + if (m_values[i]) + return sc(i); + } + + throw std::bad_optional_access(); } void increment(T const& other, eOverridePriority priority) { @@ -143,11 +148,11 @@ namespace Desktop::Types { } private: - std::map m_values; - std::optional m_defaultValue; // used for toggling, so required for bool - std::optional m_minValue; - std::optional m_maxValue; - std::any m_configValue; // only there for select variables + std::array, PRIORITY_END> m_values; + std::optional m_defaultValue; // used for toggling, so required for bool + std::optional m_minValue; + std::optional m_maxValue; + std::any m_configValue; // only there for select variables }; } \ No newline at end of file diff --git a/src/i18n/Engine.cpp b/src/i18n/Engine.cpp index e777f81a8c6..46a439fc629 100644 --- a/src/i18n/Engine.cpp +++ b/src/i18n/Engine.cpp @@ -369,6 +369,46 @@ I18n::CI18nEngine::CI18nEngine() { huEngine->registerEntry("fa_IR", TXT_KEY_NOTIF_WIDE_COLOR_NOT_10B, "مانیتور {name}: گسترهٔ رنگ وسیع فعال است اما نمایشگر در حالت ۱۰ بیتی نیست."); + // fi_FI (Finnish) + huEngine->registerEntry("fi_FI", TXT_KEY_ANR_TITLE, "Sovellus ei vastaa"); + huEngine->registerEntry("fi_FI", TXT_KEY_ANR_CONTENT, "Sovellus {title} - {class} ei vastaa.\nMitä haluat tehdä sille?"); + huEngine->registerEntry("fi_FI", TXT_KEY_ANR_OPTION_TERMINATE, "Lopeta"); + huEngine->registerEntry("fi_FI", TXT_KEY_ANR_OPTION_WAIT, "Odota"); + huEngine->registerEntry("fi_FI", TXT_KEY_ANR_PROP_UNKNOWN, "(tuntematon)"); + + huEngine->registerEntry("fi_FI", TXT_KEY_PERMISSION_REQUEST_UNKNOWN, "Sovellus {app} pyytää tuntematonta käyttöoikeutta."); + huEngine->registerEntry("fi_FI", TXT_KEY_PERMISSION_REQUEST_SCREENCOPY, "Sovellus {app} yrittää nauhoittaa näyttöäsi.\n\nHaluatko sallia nauhoituksen?"); + huEngine->registerEntry("fi_FI", TXT_KEY_PERMISSION_REQUEST_PLUGIN, "Sovellus {app} yrittää ladata laajennusta: {plugin}

.\n\nHaluatko sallia latauksen?"); + huEngine->registerEntry("fi_FI", TXT_KEY_PERMISSION_REQUEST_KEYBOARD, "Uusi näppäimistö havaittu: {keyboard}.\n\nHaluatko sallia sen toiminnan?"); + huEngine->registerEntry("fi_FI", TXT_KEY_PERMISSION_UNKNOWN_NAME, "(tuntematon)"); + huEngine->registerEntry("fi_FI", TXT_KEY_PERMISSION_TITLE, "Käyttöoikeuspyyntö"); + huEngine->registerEntry("fi_FI", TXT_KEY_PERMISSION_PERSISTENCE_HINT, "Vihje: voit asettaa nämä säännöt pysyvästi Hyprland konfiguraatio tiedostossa."); + huEngine->registerEntry("fi_FI", TXT_KEY_PERMISSION_ALLOW, "Salli"); + huEngine->registerEntry("fi_FI", TXT_KEY_PERMISSION_ALLOW_AND_REMEMBER, "Salli ja muista"); + huEngine->registerEntry("fi_FI", TXT_KEY_PERMISSION_ALLOW_ONCE, "Salli kerran"); + huEngine->registerEntry("fi_FI", TXT_KEY_PERMISSION_DENY, "Kiellä"); + huEngine->registerEntry("fi_FI", TXT_KEY_PERMISSION_UNKNOWN_WAYLAND_APP, "Tuntematon sovellus (wayland client ID {wayland_id})"); + + huEngine->registerEntry( + "fi_FI", TXT_KEY_NOTIF_EXTERNAL_XDG_DESKTOP, + "XDG_CURRENT_DESKTOP ympäristösi näyttäisi olevan ulkoisesti hallittu, ja sen nykyinen arvo on {value}.\nTämä voi aiheuttaa ongelmia, ellei se ole tarkoituksellista."); + huEngine->registerEntry("fi_FI", TXT_KEY_NOTIF_NO_GUIUTILS, + "Paketti hyprland-guiutils ei ole asennettuna järjestelmääsi. Jotkin dialogit tarvitsevat sitä. Harkitse sen asentamista."); + huEngine->registerEntry("fi_FI", TXT_KEY_NOTIF_FAILED_ASSETS, [](const Hyprutils::I18n::translationVarMap& vars) { + int assetsNo = std::stoi(vars.at("count")); + if (assetsNo <= 1) + return "Hyprland epäonnistui olennaisen resurssin ({count}) latauksessa. Syytä distrosi pakkajaa huonosta pakkauksesta!"; + return "Hyprland epäonnistui olennaisten resurssien ({count}) latauksessa. Syytä distrosi pakkajaa huonosta pakkauksesta!"; + }); + huEngine->registerEntry( + "fi_FI", TXT_KEY_NOTIF_INVALID_MONITOR_LAYOUT, + "Näyttöjesi asettelu on virheellinen. Näyttö {name} on muiden näyttöjen päällä.\nLisätietoja löydät wikistä (Monitors sivu). Tämä tulee aiheuttamaan ongelmia."); + huEngine->registerEntry("fi_FI", TXT_KEY_NOTIF_MONITOR_MODE_FAIL, "Näyttö {name} epäonnistui pyydetyn tilan asettamisessa, palataan tilaan {mode}."); + huEngine->registerEntry("fi_FI", TXT_KEY_NOTIF_MONITOR_AUTO_SCALE, "Näytölle {name} asetettu skaalaus: {scale} on virheellinen, asetetaan suositeltu skaalaus: {fixed_scale}."); + huEngine->registerEntry("fi_FI", TXT_KEY_NOTIF_FAILED_TO_LOAD_PLUGIN, "Laajennuksen {name} lataus epäonnistui: {error}"); + huEngine->registerEntry("fi_FI", TXT_KEY_NOTIF_CM_RELOAD_FAILED, "CM varjostimen uudelleenlataus epäonnistui, palataan takaisin rgba/rgbx tilaan."); + huEngine->registerEntry("fi_FI", TXT_KEY_NOTIF_WIDE_COLOR_NOT_10B, "Näyttö {name}: laaja väriskaala on otettu käyttöön, mutta näyttö ei ole 10-bit tilassa."); + // fr_FR (French) huEngine->registerEntry("fr_FR", TXT_KEY_ANR_TITLE, "L'application ne répond plus"); huEngine->registerEntry("fr_FR", TXT_KEY_ANR_CONTENT, "L'application {title} - {class} ne répond plus.\nQue voulez-vous faire?");