From 570e0feed50dac818d511995c232451d09552a6c Mon Sep 17 00:00:00 2001 From: Evil Eye Date: Mon, 8 Dec 2025 12:38:37 +0100 Subject: [PATCH] Use l10n for setting label captions --- apps/openmw/mwgui/layout.cpp | 2 +- apps/openmw/mwgui/layout.hpp | 4 +- apps/openmw/mwgui/settingswindow.cpp | 70 +++++++++++-------- apps/openmw/mwgui/settingswindow.hpp | 2 +- files/data-mw/l10n/OMWEngine/gmst.yaml | 6 ++ files/data/l10n/OMWEngine/de.yaml | 11 +++ files/data/l10n/OMWEngine/en.yaml | 11 +++ files/data/l10n/OMWEngine/fr.yaml | 11 +++ files/data/l10n/OMWEngine/pl.yaml | 11 +++ files/data/l10n/OMWEngine/ru.yaml | 11 +++ files/data/l10n/OMWEngine/sv.yaml | 11 +++ .../data/mygui/openmw_settings_window.layout | 22 +++--- 12 files changed, 128 insertions(+), 44 deletions(-) diff --git a/apps/openmw/mwgui/layout.cpp b/apps/openmw/mwgui/layout.cpp index 9a5f0af7b3..d350dabfe6 100644 --- a/apps/openmw/mwgui/layout.cpp +++ b/apps/openmw/mwgui/layout.cpp @@ -62,7 +62,7 @@ namespace MWGui window->setCaptionWithReplacing(MyGUI::UString(title)); } - MyGUI::Widget* Layout::getWidget(std::string_view name) + MyGUI::Widget* Layout::getWidget(std::string_view name) const { std::string target = mPrefix; target += name; diff --git a/apps/openmw/mwgui/layout.hpp b/apps/openmw/mwgui/layout.hpp index 8f890a68f9..38ee3439bb 100644 --- a/apps/openmw/mwgui/layout.hpp +++ b/apps/openmw/mwgui/layout.hpp @@ -35,10 +35,10 @@ namespace MWGui } } - MyGUI::Widget* getWidget(std::string_view name); + MyGUI::Widget* getWidget(std::string_view name) const; template - void getWidget(T*& widget, std::string_view name) + void getWidget(T*& widget, std::string_view name) const { MyGUI::Widget* w = getWidget(name); T* cast = w->castType(false); diff --git a/apps/openmw/mwgui/settingswindow.cpp b/apps/openmw/mwgui/settingswindow.cpp index c8c97d1796..6b73bd9f87 100644 --- a/apps/openmw/mwgui/settingswindow.cpp +++ b/apps/openmw/mwgui/settingswindow.cpp @@ -1,7 +1,6 @@ #include "settingswindow.hpp" #include -#include #include @@ -24,7 +23,6 @@ #include #include #include -#include #include #include #include @@ -139,6 +137,18 @@ namespace else box->setIndexSelected(MyGUI::ITEM_NONE); } + + void updateSliderLabel(MyGUI::ScrollBar* scroller, MyGUI::TextBox* textBox, + const std::vector& argNames, const std::vector& args) + { + if (textBox != nullptr) + { + auto l10n = MWBase::Environment::get().getL10nManager()->getContext("OMWEngine"); + std::string labelCaption + = l10n->formatMessage(scroller->getUserString("SettingLabelCaption"), argNames, args); + textBox->setCaption(labelCaption); + } + } } namespace MWGui @@ -163,8 +173,9 @@ namespace MWGui if (type == sliderType) { MyGUI::ScrollBar* scroll = current->castType(); - std::string valueStr; std::string_view valueType = getSettingValueType(current); + std::vector argNames; + std::vector args; if (valueType == "Float" || valueType == "Integer" || valueType == "Cell") { // TODO: ScrollBar isn't meant for this. should probably use a dedicated FloatSlider widget @@ -175,21 +186,20 @@ namespace MWGui if (valueType == "Cell") { value = Settings::get(getSettingCategory(current), getSettingName(current)); - std::stringstream ss; - ss << std::fixed << std::setprecision(2) << value / Constants::CellSizeInUnits; - valueStr = ss.str(); + argNames.emplace_back("cells"); + args.emplace_back(value / Constants::CellSizeInUnits); } else if (valueType == "Float") { value = Settings::get(getSettingCategory(current), getSettingName(current)); - std::stringstream ss; - ss << std::fixed << std::setprecision(2) << value; - valueStr = ss.str(); + argNames.emplace_back("value"); + args.emplace_back(value); } else { const int intValue = Settings::get(getSettingCategory(current), getSettingName(current)); - valueStr = MyGUI::utility::toString(intValue); + argNames.emplace_back("value"); + args.emplace_back(intValue); value = static_cast(intValue); } @@ -201,14 +211,15 @@ namespace MWGui else { const int value = Settings::get(getSettingCategory(current), getSettingName(current)); - valueStr = MyGUI::utility::toString(value); + argNames.emplace_back("value"); + args.emplace_back(value); scroll->setScrollPosition(value); } if (init) scroll->eventScrollChangePosition += MyGUI::newDelegate(this, &SettingsWindow::onSliderChangePosition); if (scroll->getVisible()) - updateSliderLabel(scroll, valueStr); + updateSliderLabel(scroll, getSliderLabel(scroll), argNames, args); } configureWidgets(current, init); @@ -225,17 +236,16 @@ namespace MWGui } } - void SettingsWindow::updateSliderLabel(MyGUI::ScrollBar* scroller, const std::string& value) + MyGUI::TextBox* SettingsWindow::getSliderLabel(MyGUI::ScrollBar* scroller) const { auto labelWidgetName = scroller->getUserString("SettingLabelWidget"); if (!labelWidgetName.empty()) { MyGUI::TextBox* textBox; getWidget(textBox, labelWidgetName); - std::string labelCaption{ scroller->getUserString("SettingLabelCaption") }; - labelCaption = Misc::StringUtils::format(labelCaption, value); - textBox->setCaptionWithReplacing(labelCaption); + return textBox; } + return nullptr; } SettingsWindow::SettingsWindow(Files::ConfigurationManager& cfgMgr) @@ -719,7 +729,8 @@ namespace MWGui { if (getSettingType(scroller) == "Slider") { - std::string valueStr; + std::vector argNames; + std::vector args; std::string_view valueType = getSettingValueType(scroller); if (valueType == "Float" || valueType == "Integer" || valueType == "Cell") { @@ -732,30 +743,31 @@ namespace MWGui if (valueType == "Cell") { Settings::get(getSettingCategory(scroller), getSettingName(scroller)).set(value); - std::stringstream ss; - ss << std::fixed << std::setprecision(2) << value / Constants::CellSizeInUnits; - valueStr = ss.str(); + argNames.emplace_back("cells"); + args.emplace_back(value / Constants::CellSizeInUnits); } else if (valueType == "Float") { Settings::get(getSettingCategory(scroller), getSettingName(scroller)).set(value); - std::stringstream ss; - ss << std::fixed << std::setprecision(2) << value; - valueStr = ss.str(); + argNames.emplace_back("value"); + args.emplace_back(value); } else { - Settings::get(getSettingCategory(scroller), getSettingName(scroller)) - .set(static_cast(value)); - valueStr = MyGUI::utility::toString(int(value)); + int intValue = static_cast(value); + Settings::get(getSettingCategory(scroller), getSettingName(scroller)).set(intValue); + argNames.emplace_back("value"); + args.emplace_back(intValue); } } else { - Settings::get(getSettingCategory(scroller), getSettingName(scroller)).set(static_cast(pos)); - valueStr = MyGUI::utility::toString(pos); + int intValue = static_cast(pos); + Settings::get(getSettingCategory(scroller), getSettingName(scroller)).set(intValue); + argNames.emplace_back("value"); + args.emplace_back(intValue); } - updateSliderLabel(scroller, valueStr); + updateSliderLabel(scroller, getSliderLabel(scroller), argNames, args); apply(); } diff --git a/apps/openmw/mwgui/settingswindow.hpp b/apps/openmw/mwgui/settingswindow.hpp index 45eda0f315..60b3e26372 100644 --- a/apps/openmw/mwgui/settingswindow.hpp +++ b/apps/openmw/mwgui/settingswindow.hpp @@ -116,7 +116,7 @@ namespace MWGui void apply(); void configureWidgets(MyGUI::Widget* widget, bool init); - void updateSliderLabel(MyGUI::ScrollBar* scroller, const std::string& value); + MyGUI::TextBox* getSliderLabel(MyGUI::ScrollBar* scroller) const; void layoutControlsBox(); void renderScriptSettings(); diff --git a/files/data-mw/l10n/OMWEngine/gmst.yaml b/files/data-mw/l10n/OMWEngine/gmst.yaml index 598d82bad2..2d9944cc59 100644 --- a/files/data-mw/l10n/OMWEngine/gmst.yaml +++ b/files/data-mw/l10n/OMWEngine/gmst.yaml @@ -23,6 +23,8 @@ DetailLevel: "sDetail_Level" DifficultyEasy: "sEasy" DifficultyHard: "sHard" Difficulty: "sDifficulty" +DifficultyValue: + pattern: "{gmst:sDifficulty} ({value})" DistanceHigh: "sFar" DistanceLow: "sNear" EmptySaveNameError: "sNotifyMessage65" @@ -62,3 +64,7 @@ TransparencyFull: "sFull" TransparencyNone: "sNone" Video: "sVideo" ViewDistance: "sRender_Distance" +ViewDistanceValue: + pattern: "{gmst:sRender_Distance} ({value, number, ::.00})" +ViewDistanceValueCells: + pattern: "{gmst:sRender_Distance} (×{cells, number, ::.00})" diff --git a/files/data/l10n/OMWEngine/de.yaml b/files/data/l10n/OMWEngine/de.yaml index 3208887b12..618d22c28a 100644 --- a/files/data/l10n/OMWEngine/de.yaml +++ b/files/data/l10n/OMWEngine/de.yaml @@ -65,7 +65,9 @@ TimePlayed: "Spielzeit" # Settings menu ActorsProcessingRange: "Akteur-Verarbeitungsreichweite" +ActorsProcessingRangeValue: "Akteur-Verarbeitungsreichweite ({value, number, :: group-off})" Anisotropy: "Anisotropie" +AnisotropyValue: "Anisotropie ({value})" Audio: "Audio" AudioMaster: "Master-Lautstärke" AudioVoice: "Stimmen" @@ -98,12 +100,14 @@ DelayLow: "Schnell" DelayHigh: "Langsam" DetailLevel: "Detailgrad" Difficulty: "Schwierigkeitsgrad" +DifficultyValue: "Schwierigkeitsgrad ({value})" DifficultyEasy: "Leicht" DifficultyHard: "Schwer" DistanceHigh: "Weit" DistanceLow: "Kurz" EnableController: "Controller aktivieren" FieldOfView: "Sichtfeld" +FieldOfViewValue: "Sichtfeld ({value, number, ::.00})" FieldOfViewLow: "Niedrig" FieldOfViewHigh: "Hoch" ForcePerPixelLighting: "Beleuchtung pro Pixel" @@ -131,16 +135,20 @@ LightingMethodShadersCompatibility: "Shader (Kompatibilitätsmodus)" LightingResetToDefaults: "Einstellungen wirklich zurücksetzen? Das Ändern der „Beleuchtungsmethode“ erfordert einen Neustart." Lights: "Beleuchtung" LightsBoundingSphereMultiplier: "Multiplikator für Begrenzungssphäre" +LightsBoundingSphereMultiplierValue: "Multiplikator für Begrenzungssphäre ({value, number, ::.00})" LightsBoundingSphereMultiplierTooltip: "Standard: 1,65\nMultiplikator für Größe der Begrenzungssphäre.\nGrößere Werte ermöglichen einen sanfteren Abfall, erfordern jedoch eine Erhöhung der maximalen Anzahl von Lichtquellen.\n\nBeeinflusst nicht die Beleuchtung oder Lichtintensität." LightsFadeStartMultiplier: "Multiplikator für Startwert der Lichtabblendung" +LightsFadeStartMultiplierValue: "Multiplikator für Startwert der Lichtabblendung ({value, number, ::.00})" LightsFadeStartMultiplierTooltip: "Standard: 0,85\nBruchteil der maximalen Lichtreichweite, bei der Lichtquellen langsam zu verblassen beginnen.\n\nKleinere Werte führen zu einem sanfteren Übergang, der allerdings bereits bei geringerer Entfernung startet; größere Werte machen den Übergang abrupter, betreffen aber nur weiter entfernte Lichtquellen." LightsLightingMethodTooltip: "Legt die interne Behandlung von Lichtquellen fest.\n\n „Veraltet“ verwendet immer bis zu 8 Lichtquellen pro Objekt und führt zu Ergebnissen, die denen der Original-Engine am ähnlichsten sind.\n\n „Shader (Kompatibilitätsmodus)“ entfernt das Maximum von 8 Lichtquellen pro Objekt; Bodenvegetation wird von Lichtquellen beleuchtet. Es wird empfohlen, diese Option für ältere Hardware und Maximalwerte für Lichtquellen nahe 8 zu verwenden.\n\n „Shader“ bietet alle Vorteile von „Shader (Kompatibilitätsmodus)“, nutzt aber einen moderneren Ansatz, der größere Maximalwerte für Lichtquellen bei geringen bis keinen Leistungseinbußen ermöglicht. Funktioniert möglicherweise nicht auf älterer Hardware." LightsMaximumDistance: "Maximale Lichtreichweite" +LightsMaximumDistanceValue: "Maximale Lichtreichweite ({value, number, :: group-off})" LightsMaximumDistanceTooltip: "Standard: 8192 (1 Zelle)\nMaximale Entfernung, bis zu der Lichtquellen noch dargestellt werden (gemessen in In-Game-Einheiten).\n\nEin Wert von 0 entspricht einer unbegrenzten Reichweite." LightsMinimumInteriorBrightness: "Minimale Helligkeit in Innenräumen" +LightsMinimumInteriorBrightness: "Minimale Helligkeit in Innenräumen ({value, number, ::.00})" LightsMinimumInteriorBrightnessTooltip: "Standard: 0,08\nMinimale Umgebungshelligkeit in Innenräumen.\n\nKann erhöht werden, falls Innenräume zu dunkel dargestellt werden.\n\nDies hat keine Auswirkung, wenn der klassische Lichtabfall verwendet wird." MatchSunlightToSun: "Licht an Sonne ausrichten" MatchSunlightToSunTooltip: |- @@ -149,6 +157,7 @@ MatchSunlightToSunTooltip: |- Diese Option passt die Position der Sonnenlichtquelle an die sichtbare Position der Sonne an. MaxLights: "Maximale Anzahl von Lichtquellen pro Objekt" +MaxLightsValue: "Maximale Anzahl von Lichtquellen pro Objekt ({value, number, ::.00})" MaxLightsTooltip: "Standard: 8\nMaximale Anzahl von Lichtquellen, die ein Objekt beleuchten können.\n\nKleine Werte können gerade an Orten mit vielen Lichtquellen zum Aufploppen und zum schnellen Wechsel von Lichtern führen, wie es aus der Original-Engine und anderen The-Elder-Scrolls-Titeln bekannt ist." MenuHelpDelay: "Verzögerung des Hilfe-Menüs" MenuTransparency: "Menü-Transparenz" @@ -200,6 +209,8 @@ TransparencyFull: "Vollständig" TransparencyNone: "Keine" Video: "Video" ViewDistance: "Sichtweite" +ViewDistanceValue: "Sichtweite ({value, number, ::.00})" +ViewDistanceValueCells: "Sichtweite (×{cells, number, ::.00})" VSync: "VSync" VSyncAdaptive: "Adaptiv" Water: "Wasser" diff --git a/files/data/l10n/OMWEngine/en.yaml b/files/data/l10n/OMWEngine/en.yaml index a121be11ae..d8407a3446 100644 --- a/files/data/l10n/OMWEngine/en.yaml +++ b/files/data/l10n/OMWEngine/en.yaml @@ -65,7 +65,9 @@ TimePlayed: "Time Played" # Settings menu ActorsProcessingRange: "Actors Processing Range" +ActorsProcessingRangeValue: "Actors Processing Range ({value, number, :: group-off})" Anisotropy: "Anisotropy" +AnisotropyValue: "Anisotropy ({value})" Audio: "Audio" AudioEffects: "Effects" AudioFootsteps: "Footsteps" @@ -98,12 +100,14 @@ DelayLow: "Fast" DelayHigh: "Slow" DetailLevel: "Detail Level" Difficulty: "Difficulty" +DifficultyValue: "Difficulty ({value})" DifficultyEasy: "Easy" DifficultyHard: "Hard" DistanceHigh: "Far" DistanceLow: "Near" EnableController: "Enable Controller" FieldOfView: "Field of View" +FieldOfViewValue: "Field of View ({value, number, ::.00})" FieldOfViewHigh: "High" FieldOfViewLow: "Low" ForcePerPixelLighting: "Per-Pixel Lighting" @@ -131,16 +135,20 @@ LightingMethodShadersCompatibility: "Shaders (compatibility)" LightingResetToDefaults: "Resets to default values, would you like to continue? Changes to lighting method will require a restart." Lights: "Lights" LightsBoundingSphereMultiplier: "Bounding Sphere Multiplier" +LightsBoundingSphereMultiplierValue: "Bounding Sphere Multiplier ({value, number, ::.00})" LightsBoundingSphereMultiplierTooltip: "Default: 1.65\nMultiplier for bounding sphere of lights.\nHigher numbers allows for smooth falloff but require an increase in number of max lights.\n\nDoes not effect the illumination or strength of lights." LightsFadeStartMultiplier: "Fade Start Multiplier" +LightsFadeStartMultiplierValue: "Fade Start Multiplier ({value, number, ::.00})" LightsFadeStartMultiplierTooltip: "Default: 0.85\nFraction of maximum distance at which lights will start to fade.\n\nSet this to a low value for slower transitions or a high value for quicker transitions." LightsLightingMethodTooltip: "Set the internal handling of light sources.\n\n \"Legacy\" always uses 8 lights per object. It provides results most similar to Morrowind's lighting.\n\n \"Shaders (compatibility)\" removes the 8 light limit. This mode also enables lighting on groundcover. It is recommended to use this with older hardware and a light limit closer to 8.\n\n \"Shaders\" carries all of the benefits that \"Shaders (compatibility)\" does, but uses a modern approach that allows for a higher max lights count with little to no performance penalties on modern hardware." LightsMaximumDistance: "Maximum Light Distance" +LightsMaximumDistanceValue: "Maximum Light Distance ({value, number, :: group-off})" LightsMaximumDistanceTooltip: "Default: 8192\nMaximum distance at which lights will appear (measured in units).\n\nSet this to 0 to use an unlimited distance." LightsMinimumInteriorBrightness: "Minimum Interior Brightness" +LightsMinimumInteriorBrightness: "Minimum Interior Brightness ({value, number, ::.00})" LightsMinimumInteriorBrightnessTooltip: "Default: 0.08\nMinimum ambient interior brightness.\n\nIncrease this if you feel interiors are too dark.\n\nThis has no effect if classic falloff is used." MatchSunlightToSun: "Match Sunlight to Sun" MatchSunlightToSunTooltip: |- @@ -149,6 +157,7 @@ MatchSunlightToSunTooltip: |- This option makes the sun light source's position match the sun's position. MaxLights: "Max Lights" +MaxLightsValue: "Max Lights ({value, number, ::.00})" MaxLightsTooltip: "Default: 8\nMaximum number of lights per object.\n\nA low number near default will cause light popping similar to what you would see with legacy lighting." MenuHelpDelay: "Menu Help Delay" MenuTransparency: "Menu Transparency" @@ -200,6 +209,8 @@ TransparencyFull: "Full" TransparencyNone: "None" Video: "Video" ViewDistance: "View Distance" +ViewDistanceValue: "View Distance ({value, number, ::.00})" +ViewDistanceValueCells: "View Distance (×{cells, number, ::.00})" VSync: "VSync" VSyncAdaptive: "Adaptive" Water: "Water" diff --git a/files/data/l10n/OMWEngine/fr.yaml b/files/data/l10n/OMWEngine/fr.yaml index a6b6f047ba..b00d7fca11 100644 --- a/files/data/l10n/OMWEngine/fr.yaml +++ b/files/data/l10n/OMWEngine/fr.yaml @@ -65,7 +65,9 @@ TimePlayed: "Temps de jeu" # Settings menu ActorsProcessingRange: "Distance de traitement pour les personnages" +ActorsProcessingRangeValue: "Distance de traitement pour les personnages ({value, number, :: group-off})" Anisotropy: "Anisotropie" +AnisotropyValue: "Anisotropie ({value})" Audio: "Audio" AudioEffects: "Ambiance" AudioFootsteps: "Bruits de pas" @@ -98,12 +100,14 @@ DelayHigh: "Lent" DelayLow: "Rapide" DetailLevel: "Niveau de détails" Difficulty: "Difficulté" +DifficultyValue: "Difficulté ({value})" DifficultyEasy: "Facile" DifficultyHard: "Difficile" DistanceHigh: "Lointain" DistanceLow: "Proche" EnableController: "Activer la manette" FieldOfView: "Champ de vision" +FieldOfViewValue: "Champ de vision ({value, number, ::.00})" FieldOfViewHigh: "Étendu" FieldOfViewLow: "Restreint" ForcePerPixelLighting: "Éclairage par pixel" @@ -131,16 +135,20 @@ LightingMethodShadersCompatibility: "Shaders (mode de compatibilité)" LightingResetToDefaults: "Voulez-vous réinitialiser les paramètres d'affichage des lumières à leur valeur par défaut ? Ces changements requièrent un redémarrage de l'application." Lights: "Sources lumineuses" LightsBoundingSphereMultiplier: "Multiplicateur de sphère englobante" +LightsBoundingSphereMultiplierValue: "Multiplicateur de sphère englobante ({value, number, ::.00})" LightsBoundingSphereMultiplierTooltip: "valeur par défaut: 1.65\nMultiplicateur pour le rayon de la sphère incluant les sources lumineuses.\nUn multiplicateur plus élevé permet une extinction plus douce, mais applique un plus grand nombre de sources lumineuses sur chaque objet.\n\nCe paramètre ne modifie ni l'intensité ni la luminance des lumières." LightsFadeStartMultiplier: "Seuil de perte d'éclat lumineux" +LightsFadeStartMultiplierValue: "Seuil de perte d'éclat lumineux ({value, number, ::.00})" LightsFadeStartMultiplierTooltip: "valeur par défaut: 0.85\nFraction de la distance maximale d'une source à partir de laquelle l'intensité lumineuse commence à décroître.\n\nSélectionnez une valeur basse pour une transition douce ou une valeur plus élevée pour une transition plus abrupte." LightsLightingMethodTooltip: "Définit la gestion des sources lumineuses :\n\n \"Traditionnelle\" Chaque objet est éclairé par 8 sources lumineuses. Cet méthode est la plus proche du jeu original.\n\n \"Shaders (mode de compatibilité)\" supprime la limite des 8 sources lumineuses. Cette méthode permet d'éclairer la végétation au sol. Ce choix est recommandé pour les ordinateurs plus anciens avec un nombre de sources lumineuses proche de 8.\n\n \"Shaders\" offre tous les bénéfices apportés par \"Shaders (mode de compatibilité)\", mais utilise une approche moderne. Celle-ci permet, sur du matériel moderne, d'augmenter le nombre de sources lumineuses par objet sans perte de performance." LightsMaximumDistance: "Distance maximale des sources lumineuses" +LightsMaximumDistanceValue: "Distance maximale des sources lumineuses ({value, number, :: group-off})" LightsMaximumDistanceTooltip: "valeur par défaut: 8192\nDistance maximale d'affichage des sources lumineuses (en unité de distance).\n\nMettez cette valeur à 0 pour une distance d'affichage infinie." LightsMinimumInteriorBrightness: "Luminosité intérieure minimale" +LightsMinimumInteriorBrightness: "Luminosité intérieure minimale ({value, number, ::.00})" LightsMinimumInteriorBrightnessTooltip: "valeur par défaut: 0.08\nLuminosité ambiante minimum en intérieur.\n\nAugmentez cette valeur si les intérieurs vous semblent trop sombres.\n\nCela n'a aucun effet si l'atténuation classique est utilisée." MatchSunlightToSun: "Aligner la lumière du soleil" MatchSunlightToSunTooltip: |- @@ -149,6 +157,7 @@ MatchSunlightToSunTooltip: |- Cette option aligne la source lumineuse du soleil sur la position réelle du soleil. MaxLights: "Maximum de sources lumineuses" +MaxLightsValue: "Maximum de sources lumineuses ({value, number, ::.00})" MaxLightsTooltip: "valeur par défaut: 8\nNombre maximum de sources lumineuses par objet.\n\nUne valeur faible mène à des apparitions tardives des sources lumineuses similaires à celles obtenues avec la méthode d'éclairage traditionnelle." MenuHelpDelay: "Délai d'affichage du menu d'aide" MenuTransparency: "Transparence des menus" @@ -200,6 +209,8 @@ TransparencyFull: "Haute" TransparencyNone: "Basse" Video: "Graphisme" ViewDistance: "Distance d'affichage" +ViewDistanceValue: "Distance d'affichage ({value, number, ::.00})" +ViewDistanceValueCells: "Distance d'affichage (×{cells, number, ::.00})" VSync: "VSync" VSyncAdaptive: "Adaptif" Water: "Eau" diff --git a/files/data/l10n/OMWEngine/pl.yaml b/files/data/l10n/OMWEngine/pl.yaml index bda86c96bd..d21f298b74 100644 --- a/files/data/l10n/OMWEngine/pl.yaml +++ b/files/data/l10n/OMWEngine/pl.yaml @@ -65,7 +65,9 @@ TimePlayed: "Czas gry" # Settings menu ActorsProcessingRange: "Zasięg przetwarzania postaci" +ActorsProcessingRangeValue: "Zasięg przetwarzania postaci ({value, number, :: group-off})" Anisotropy: "Anizotropia" +AnisotropyValue: "Anizotropia ({value})" Audio: "Dźwięk" AudioEffects: "Efekty" AudioFootsteps: "Kroki" @@ -98,12 +100,14 @@ DelayLow: "Szybko" DelayHigh: "Wolno" DetailLevel: "Poziom szczegółowości" Difficulty: "Trudność" +DifficultyValue: "Trudność ({value})" DifficultyEasy: "Łatwy" DifficultyHard: "Trudny" DistanceHigh: "Daleko" DistanceLow: "Blisko" EnableController: "Włącz kontroler" FieldOfView: "Pole widzenia" +FieldOfViewValue: "Pole widzenia ({value, number, ::.00})" FieldOfViewHigh: "Szerokie" FieldOfViewLow: "Wąskie" ForcePerPixelLighting: "Oświetlenie per-piksel" @@ -131,16 +135,20 @@ LightingMethodShadersCompatibility: "Shadery (kompatybilne)" LightingResetToDefaults: "Przywrócić domyślne wartości? Zmiany w metodzie oświetlenia wymagają ponownego uruchomienia." Lights: "Światła" LightsBoundingSphereMultiplier: "Mnożnik sfery ograniczającej" +LightsBoundingSphereMultiplierValue: "Mnożnik sfery ograniczającej ({value, number, ::.00})" LightsBoundingSphereMultiplierTooltip: "Domyślnie: 1.65\nMnożnik sfery ograniczającej światła.\nWiększe wartości pozwalają na płynniejsze zanikanie,\nale wymagają zwiększenia liczby maksymalnych świateł.\n\nNie wpływa na siłę ani zasięg światła." LightsFadeStartMultiplier: "Mnożnik początku zanikania" +LightsFadeStartMultiplierValue: "Mnożnik początku zanikania ({value, number, ::.00})" LightsFadeStartMultiplierTooltip: "Domyślnie: 0.85\nProcent maksymalnego zasięgu, w którym światła zaczną zanikać.\n\nNiska wartość = wolniejsze przejścia.\nWysoka wartość = szybsze przejścia." LightsLightingMethodTooltip: "Ustawia wewnętrzne przetwarzanie źródeł światła.\n\n \"Klasyczna\" zawsze używa 8 świateł na obiekt. Najbardziej przypomina oryginalne oświetlenie Morrowinda.\n\n \"Shadery (kompatybilne)\" usuwa limit 8 świateł. Obsługuje również oświetlenie trawy. Zalecane dla starszego sprzętu.\n\n \"Shadery\" oferuje te same zalety co wersja kompatybilna, ale działa nowocześnie i pozwala na więcej świateł bez dużych kosztów wydajności." LightsMaximumDistance: "Maksymalny zasięg światła" +LightsMaximumDistanceValue: "Maksymalny zasięg światła ({value, number, :: group-off})" LightsMaximumDistanceTooltip: "Domyślnie: 8192\nMaksymalna odległość wyświetlania świateł (w jednostkach).\n\n0 = brak ograniczenia." LightsMinimumInteriorBrightness: "Minimalna jasność wnętrz" +LightsMinimumInteriorBrightness: "Minimalna jasność wnętrz ({value, number, ::.00})" LightsMinimumInteriorBrightnessTooltip: "Domyślnie: 0.08\nMinimalna jasność w pomieszczeniach.\n\nZwiększ to, jeśli wnętrza są zbyt ciemne.\n\nNie działa, gdy używana jest klasyczna metoda zanikania." MatchSunlightToSun: "Dopasuj światło słoneczne do pozycji słońca" MatchSunlightToSunTooltip: |- @@ -149,6 +157,7 @@ MatchSunlightToSunTooltip: |- Ta opcja sprawia, że źródło światła słonecznego zgadza się z faktyczną pozycją słońca. MaxLights: "Maksymalna liczba świateł" +MaxLightsValue: "Maksymalna liczba świateł ({value, number, ::.00})" MaxLightsTooltip: "Domyślnie: 8\nMaksymalna liczba świateł na obiekt.\n\nNiska wartość = efekt 'wyskakiwania' świateł, jak w klasycznym trybie." MenuHelpDelay: "Opóźnienie pomocy w menu" MenuTransparency: "Przezroczystość menu" @@ -200,6 +209,8 @@ TransparencyFull: "Pełna" TransparencyNone: "Brak" Video: "Wideo" ViewDistance: "Zasięg widzenia" +ViewDistanceValue: "Zasięg widzenia ({value, number, ::.00})" +ViewDistanceValueCells: "Zasięg widzenia (×{cells, number, ::.00})" VSync: "Synchronizacja pionowa" VSyncAdaptive: "Adaptacyjna" Water: "Woda" diff --git a/files/data/l10n/OMWEngine/ru.yaml b/files/data/l10n/OMWEngine/ru.yaml index 66739270c3..5b5a2dbd1a 100644 --- a/files/data/l10n/OMWEngine/ru.yaml +++ b/files/data/l10n/OMWEngine/ru.yaml @@ -65,7 +65,9 @@ TimePlayed: "Время в игре" # Settings menu ActorsProcessingRange: "Дальность обработки персонажей" +ActorsProcessingRangeValue: "Дальность обработки персонажей ({value, number, :: group-off})" Anisotropy: "Анизотропная фильтрация" +AnisotropyValue: "Анизотропная фильтрация ({value})" Audio: "Звук" AudioEffects: "Эффекты" AudioFootsteps: "Шаги" @@ -98,12 +100,14 @@ DelayLow: "Маленькая" DelayHigh: "Большая" DetailLevel: "Уровень детализации" Difficulty: "Сложность" +DifficultyValue: "Сложность ({value})" DifficultyEasy: "Легко" DifficultyHard: "Сложно" DistanceHigh: "Далеко" DistanceLow: "Близко" EnableController: "Геймпад" FieldOfView: "Поле зрения" +FieldOfViewValue: "Поле зрения ({value, number, ::.00})" FieldOfViewLow: "Маленькое" FieldOfViewHigh: "Большое" ForcePerPixelLighting: "Попиксельное освещение" @@ -131,16 +135,20 @@ LightingMethodShadersCompatibility: "Шейдеры (режим совм-ти)" LightingResetToDefaults: "Обнулить настройки освещения? Смена метода освещения вступит в силу только после перезапуска приложения." Lights: "Освещение" LightsBoundingSphereMultiplier: "Множитель размера ограничивающей сферы" +LightsBoundingSphereMultiplierValue: "Множитель размера ограничивающей сферы ({value, number, ::.00})" LightsBoundingSphereMultiplierTooltip: "Значение по умолчанию: 1.65\nМножитель размера ограничивающей сферы источников света.\nВысокие значения делают затухание света плавнее, но требуют более высокого максимального количества источников света.\n\nНастройка не влияет на уровень освещения или мощность источников света." LightsFadeStartMultiplier: "Множитель начала затухания" +LightsFadeStartMultiplierValue: "Множитель начала затухания ({value, number, ::.00})" LightsFadeStartMultiplierTooltip: "Значение по умолчанию: 0.85\nДоля расстояния (относительно дальности отображения источников света), на которой свет начинает затухать.\n\nНизкие значения ведут к плавному затуханию, высокие - к резкому." LightsLightingMethodTooltip: "Задает способ обработки источников света.\n\n \"Устаревший\" всегда использует 8 источников света на объект и выдает освещение, наиболее близкое к таковому в оригинальной игре.\n\n \"Шейдеры (режим совместимости)\" убирает ограничение в 8 источников света. Этот режим также позволяет освещению влиять на анимированную траву. Рекомендуется использовать этот режим на устаревшем аппаратном обеспечении и с количеством источников света на объект около 8.\n\n \"Шейдеры\" работает аналогично режиму \"Шейдеры (режим совместимости)\", но использует более современный подход, позволяющий использовать большее количество источников света с минимальным влиянием на производительность на современном аппаратном обеспечении." LightsMaximumDistance: "Дальность отображения источников света" +LightsMaximumDistanceValue: "Дальность отображения источников света ({value, number, :: group-off})" LightsMaximumDistanceTooltip: "Значение по умолчанию: 8192\nМаксимальное расстояние, на котором будут отображаться источники света (во внутриигровых единицах измерения).\n\nЕсли 0, то расстояние не ограничено." LightsMinimumInteriorBrightness: "Минимальный уровень освещения в помещениях" +LightsMinimumInteriorBrightness: "Минимальный уровень освещения в помещениях ({value, number, ::.00})" LightsMinimumInteriorBrightnessTooltip: "Значение по умолчанию: 0.08\nМинимальный уровень фонового освещения в помещениях.\n\nУвеличьте значение, если помещения в игре кажутся слишком темными. Эта настройка не имеет эффекта, если используется классическое угасание." MatchSunlightToSun: "Свет солнца идет от солнца" MatchSunlightToSunTooltip: |- @@ -149,6 +157,7 @@ MatchSunlightToSunTooltip: |- Настройка делает так, чтобы направление света от солнца соответствовало его положению. MaxLights: "Макс. кол-во источников света" +MaxLightsValue: "Макс. кол-во источников света ({value, number, ::.00})" MaxLightsTooltip: "Значение по умолчанию: 8\nМаксимальное количество источников света для каждого объекта.\n\nНизкие числа (близкие к значению по умолчанию) приводят к резким перепадам освещения, как при устаревшем методе освещения." MenuHelpDelay: "Задержка всплывающих подсказок" MenuTransparency: "Прозрачность меню" @@ -199,6 +208,8 @@ TogglePostProcessorHUD: "Меню настроек постобработки" TransparencyFull: "Прозрачное" TransparencyNone: "Непрозрачное" ViewDistance: "Дальность обзора" +ViewDistanceValue: "Дальность обзора ({value, number, ::.00})" +ViewDistanceValueCells: "Дальность обзора (×{cells, number, ::.00})" Video: "Видео" VSync: "Вертикальная синхронизация" VSyncAdaptive: "Адаптивная" diff --git a/files/data/l10n/OMWEngine/sv.yaml b/files/data/l10n/OMWEngine/sv.yaml index bd2204ab09..23d26b72d8 100644 --- a/files/data/l10n/OMWEngine/sv.yaml +++ b/files/data/l10n/OMWEngine/sv.yaml @@ -65,7 +65,9 @@ SelectCharacter: "Välj spelfigur..." # Settings menu ActorsProcessingRange: "Processavstånd för figurer" +ActorsProcessingRangeValue: "Processavstånd för figurer ({value, number, :: group-off})" Anisotropy: "Anisotropi" +AnisotropyValue: "Anisotropi ({value})" Audio: "Ljud" AudioEffects: "Effekter" AudioFootsteps: "Fotsteg" @@ -98,12 +100,14 @@ DelayLow: "Snabbt" DelayHigh: "Långsamt" DetailLevel: "Detaljnivå" Difficulty: "Svårighetsgrad" +DifficultyValue: "Svårighetsgrad ({value})" DifficultyEasy: "Lätt" DifficultyHard: "Svårt" DistanceHigh: "Långt" #Unsure in what context this goes DistanceLow: "Nära" #Unsure in what context this goes EnableController: "Aktivera handkontroll" FieldOfView: "Synfält" +FieldOfViewValue: "Synfält ({value, number, ::.00})" FieldOfViewLow: "Låg" FieldOfViewHigh: "Hög" ForcePerPixelLighting: "Per-pixelljussättning" @@ -132,16 +136,20 @@ LightingMethodShadersCompatibility: "Shader (kompatibilitet)" LightingResetToDefaults: "Återställer till ursprungliga värden, vill du fortsätta? Ändringar till ljussättningsmetod kräver omstart." Lights: "Ljus" LightsBoundingSphereMultiplier: "Gränssfärsmultiplikator" +LightsBoundingSphereMultiplierValue: "Gränssfärsmultiplikator ({value, number, ::.00})" LightsBoundingSphereMultiplierTooltip: "Förvalt: 1.65\nMultiplikator för ljusens gränssfär.\nHögre värden ger mjukare minskning av gränssfären, men kräver högre värde i Max antal ljuskällor.\n\nPåverkar inte ljusstyrkan." LightsFadeStartMultiplier: "Blekningsstartmultiplikator" +LightsFadeStartMultiplierValue: "Blekningsstartmultiplikator ({value, number, ::.00})" LightsFadeStartMultiplierTooltip: "Förvalt: 0.85\nFraktion av det maximala avståndet från vilket ljuskällor börjar blekna.\n\nVälj lågt värde för långsammare övergång eller högre värde för snabbare övergång." LightsLightingMethodTooltip: "Välj intern hantering av ljuskällor.\n\n \"Gammaldags\" använder alltid max 8 ljuskällor per objekt och ger ljussättning likt ett gammaldags spel.\n\n \"Shader (kompatibilitet)\" tar bort begränsningen med max 8 ljuskällor per objekt. Detta läge aktiverar också ljus på marktäckning. Rekommenderas för äldre hårdvara tillsammans med en ljusbegränsning nära 8.\n\n \"Shader\" har alla fördelar som \"Shader (kompatibilitet)\" har, med med ett modernt förhållningssätt som möjliggör fler maximalt antal ljuskällor med liten eller ingen prestandaförlust på modern hårdvara." LightsMaximumDistance: "Maximalt ljusavstånd" +LightsMaximumDistanceValue: "Maximalt ljusavstånd ({value, number, :: group-off})" LightsMaximumDistanceTooltip: "Förvalt: 8192\nMaximala avståndet där ljuskällor syns (mätt i enheter).\n\nVärdet 0 ger oändligt avstånd." LightsMinimumInteriorBrightness: "Minsta ljusstyrka i interiörer" +LightsMinimumInteriorBrightness: "Minsta ljusstyrka i interiörer ({value, number, ::.00})" LightsMinimumInteriorBrightnessTooltip: "Förvalt: 0.08\nMinsta omgivande ljusstyrka i interiörer.\n\nÖka värdet om du anser att interiörer är för mörka.\n\nDetta har ingen effekt om klassiskt ljusavtagande används." MatchSunlightToSun: "Matcha solljus med solen" MatchSunlightToSunTooltip: |- @@ -150,6 +158,7 @@ MatchSunlightToSunTooltip: |- Detta alternativ gör att solljuskällans position matchar solens synliga position. MaxLights: "Max antal ljuskällor" +MaxLightsValue: "Max antal ljuskällor ({value, number, ::.00})" MaxLightsTooltip: "Förvalt: 8\nMaximalt antal ljuskällor per objekt.\n\nEtt lågt tal nära det förvalda kommer orsaka att ljuskällor poppar upp som vid ljussättningsmetoden Gammaldags." MenuHelpDelay: "Menyhjälp, fördröjning" #Unsure in what context this goes MenuTransparency: "Menytransparens" @@ -201,6 +210,8 @@ TransparencyFull: "Full" TransparencyNone: "Ingen" Video: "Bild" ViewDistance: "Siktavstånd" +ViewDistanceValue: "Siktavstånd ({value, number, ::.00})" +ViewDistanceValueCells: "Siktavstånd (×{cells, number, ::.00})" VSync: "VSynk" VSyncAdaptive: "Adaptiv" Water: "Vatten" diff --git a/files/data/mygui/openmw_settings_window.layout b/files/data/mygui/openmw_settings_window.layout index e6f42248dd..e2e20cd3a4 100644 --- a/files/data/mygui/openmw_settings_window.layout +++ b/files/data/mygui/openmw_settings_window.layout @@ -62,7 +62,7 @@ - + @@ -87,7 +87,7 @@ - + @@ -339,7 +339,7 @@ - + @@ -394,7 +394,7 @@ - + @@ -410,7 +410,7 @@ - + @@ -422,7 +422,7 @@ - + @@ -585,7 +585,7 @@ - + @@ -659,7 +659,7 @@ - + @@ -677,7 +677,7 @@ - + @@ -695,7 +695,7 @@ - + @@ -711,7 +711,7 @@ - +