Merge branch 'l10nformat' into 'master'

Replace format args with icu in engine messages

See merge request OpenMW/openmw!5032
This commit is contained in:
Alexei Kotov 2025-12-16 12:07:06 +03:00
commit 76ce47a890
16 changed files with 157 additions and 70 deletions

View File

@ -124,10 +124,8 @@ namespace
return;
}
std::string messageFormat
= MWBase::Environment::get().getL10nManager()->getMessage("OMWEngine", "ScreenshotMade");
std::string message = Misc::StringUtils::format(messageFormat, filePath);
auto l10n = MWBase::Environment::get().getL10nManager()->getContext("OMWEngine");
std::string message = l10n->formatMessage("ScreenshotMade", { "file" }, { L10n::toUnicode(filePath) });
MWBase::Environment::get().getWindowManager()->scheduleMessageBox(
std::move(message), MWGui::ShowInDialogueMode_Never);

View File

@ -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;

View File

@ -35,10 +35,10 @@ namespace MWGui
}
}
MyGUI::Widget* getWidget(std::string_view name);
MyGUI::Widget* getWidget(std::string_view name) const;
template <typename T>
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<T>(false);

View File

@ -1,7 +1,6 @@
#include "settingswindow.hpp"
#include <array>
#include <iomanip>
#include <unicode/locid.h>
@ -24,7 +23,6 @@
#include <components/misc/display.hpp>
#include <components/misc/pathhelpers.hpp>
#include <components/misc/strings/algorithm.hpp>
#include <components/misc/strings/format.hpp>
#include <components/resource/resourcesystem.hpp>
#include <components/resource/scenemanager.hpp>
#include <components/sceneutil/lightmanager.hpp>
@ -139,6 +137,18 @@ namespace
else
box->setIndexSelected(MyGUI::ITEM_NONE);
}
void updateSliderLabel(MyGUI::ScrollBar* scroller, MyGUI::TextBox* textBox,
const std::vector<icu::UnicodeString>& argNames, const std::vector<icu::Formattable>& 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<MyGUI::ScrollBar>();
std::string valueStr;
std::string_view valueType = getSettingValueType(current);
std::vector<icu::UnicodeString> argNames;
std::vector<icu::Formattable> 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<float>(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<float>(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<int>(getSettingCategory(current), getSettingName(current));
valueStr = MyGUI::utility::toString(intValue);
argNames.emplace_back("value");
args.emplace_back(intValue);
value = static_cast<float>(intValue);
}
@ -201,14 +211,15 @@ namespace MWGui
else
{
const int value = Settings::get<int>(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<icu::UnicodeString> argNames;
std::vector<icu::Formattable> 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<float>(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<float>(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<int>(getSettingCategory(scroller), getSettingName(scroller))
.set(static_cast<int>(value));
valueStr = MyGUI::utility::toString(int(value));
int intValue = static_cast<int>(value);
Settings::get<int>(getSettingCategory(scroller), getSettingName(scroller)).set(intValue);
argNames.emplace_back("value");
args.emplace_back(intValue);
}
}
else
{
Settings::get<int>(getSettingCategory(scroller), getSettingName(scroller)).set(static_cast<int>(pos));
valueStr = MyGUI::utility::toString(pos);
int intValue = static_cast<int>(pos);
Settings::get<int>(getSettingCategory(scroller), getSettingName(scroller)).set(intValue);
argNames.emplace_back("value");
args.emplace_back(intValue);
}
updateSliderLabel(scroller, valueStr);
updateSliderLabel(scroller, getSliderLabel(scroller), argNames, args);
apply();
}

View File

@ -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();

View File

@ -148,11 +148,8 @@ void MWState::StateManager::askLoadRecent()
std::vector<std::string> buttons;
buttons.emplace_back("#{Interface:Yes}");
buttons.emplace_back("#{Interface:No}");
std::string message
= MWBase::Environment::get().getL10nManager()->getMessage("OMWEngine", "AskLoadLastSave");
std::string_view tag = "%s";
size_t pos = message.find(tag);
message.replace(pos, tag.length(), saveName);
auto l10n = MWBase::Environment::get().getL10nManager()->getContext("OMWEngine");
std::string message = l10n->formatMessage("AskLoadLastSave", { "save" }, { L10n::toUnicode(saveName) });
MWBase::Environment::get().getWindowManager()->interactiveMessageBox(message, buttons);
mAskLoadRecent = true;
}

View File

@ -48,8 +48,7 @@ namespace L10n
std::optional<icu::MessageFormat> parseMessageFormat(
const icu::Locale& lang, std::string_view key, std::string_view value, std::string_view locale)
{
icu::UnicodeString pattern
= icu::UnicodeString::fromUTF8(icu::StringPiece(value.data(), static_cast<std::int32_t>(value.size())));
icu::UnicodeString pattern = toUnicode(value);
icu::ErrorCode status;
UParseError parseError;
icu::MessageFormat message(pattern, lang, parseError, status);
@ -308,8 +307,7 @@ namespace L10n
std::vector<icu::Formattable> argValues;
for (auto& [k, v] : args)
{
argNames.push_back(
icu::UnicodeString::fromUTF8(icu::StringPiece(k.data(), static_cast<std::int32_t>(k.size()))));
argNames.push_back(toUnicode(k));
argValues.push_back(v);
}
return formatMessage(key, argNames, argValues);
@ -338,4 +336,10 @@ namespace L10n
return std::string(key);
return formatArgs(*defaultMessage, key, argNames, args);
}
icu::UnicodeString toUnicode(std::string_view value)
{
icu::StringPiece piece(value.data(), static_cast<std::int32_t>(value.size()));
return icu::UnicodeString::fromUTF8(piece);
}
}

View File

@ -74,6 +74,7 @@ namespace L10n
const icu::MessageFormat* findMessage(std::string_view key, std::string_view localeName) const;
};
icu::UnicodeString toUnicode(std::string_view value);
}
#endif // COMPONENTS_L10N_MESSAGEBUNDLES_H

View File

@ -1,4 +1,7 @@
AskLoadLastSave: "sLoadLastSaveMsg"
AskLoadLastSave:
pattern: "{gmst:sLoadLastSaveMsg}"
variables:
- ["save"]
AudioEffects: "sEffects"
AudioFootsteps: "sFootsteps"
AudioMaster: "sMaster"
@ -20,6 +23,8 @@ DetailLevel: "sDetail_Level"
DifficultyEasy: "sEasy"
DifficultyHard: "sHard"
Difficulty: "sDifficulty"
DifficultyValue:
pattern: "{gmst:sDifficulty} ({value})"
DistanceHigh: "sFar"
DistanceLow: "sNear"
EmptySaveNameError: "sNotifyMessage65"
@ -59,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})"

View File

@ -12,7 +12,7 @@ PhysicsProfiler: "Physik-Profiler"
# Messages
AskLoadLastSave: "Der aktuellste Spielstand ist '%s'. Soll er geladen werden?"
AskLoadLastSave: "Der aktuellste Spielstand ist ''{save}''. Soll er geladen werden?"
BuildingNavigationMesh: "Erstelle Navigationsgitter..."
InitializingData: "Initialisiere Daten..."
LoadingExterior: "Lade Bereich..."
@ -30,7 +30,7 @@ QuitGameConfirmation: "Spiel verlassen?"
SaveGameDenied: "Das Spiel kann gerade nicht gespeichert werden!"
SavingInProgress: "Speichere Spiel..."
ScreenshotFailed: "Speichern des Screenshots fehlgeschlagen!"
ScreenshotMade: "%s wurde gespeichert."
ScreenshotMade: "{file} wurde gespeichert."
# Save game menu
@ -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"
LightsMinimumInteriorBrightnessValue: "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"

View File

@ -12,7 +12,7 @@ PhysicsProfiler: "Physics Profiler"
# Messages
AskLoadLastSave: "The most recent save is '%s'. Do you want to load it?"
AskLoadLastSave: "The most recent save is ''{save}''. Do you want to load it?"
BuildingNavigationMesh: "Building Navigation Mesh"
InitializingData: "Initializing Data..."
LoadingExterior: "Loading Area"
@ -30,7 +30,7 @@ QuitGameConfirmation: "Quit the game?"
SaveGameDenied: "The game cannot be saved right now."
SavingInProgress: "Saving..."
ScreenshotFailed: "Failed to save screenshot"
ScreenshotMade: "%s has been saved"
ScreenshotMade: "{file} has been saved"
# Save game menu
@ -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"
LightsMinimumInteriorBrightnessValue: "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"

View File

@ -13,7 +13,7 @@ PhysicsProfiler: "Profileur des performances de la physique"
# Messages
BuildingNavigationMesh: "Construction du mesh de navigation"
AskLoadLastSave: "La sauvegarde la plus récente est '%s'. Voulez-vous la charger ?"
AskLoadLastSave: "La sauvegarde la plus récente est ''{save}''. Voulez-vous la charger ?"
InitializingData: "Initialisation des données..."
LoadingExterior: "Chargement de la zone de jeu"
LoadingFailed: "Échec du chargement de la sauvegarde"
@ -30,7 +30,7 @@ QuitGameConfirmation: "Quitter la partie ?"
SaveGameDenied: "Sauvegarde impossible"
SavingInProgress: "Sauvegarde en cours..."
ScreenshotFailed: "Échec de la sauvegarde de la capture d'écran"
ScreenshotMade: "Capture d'écran %s sauvegardée"
ScreenshotMade: "Capture d'écran {file} sauvegardée"
# Save game menu
@ -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"
LightsMinimumInteriorBrightnessValue: "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"

View File

@ -12,7 +12,7 @@ PhysicsProfiler: "Profilowanie fizyki"
# Messages
AskLoadLastSave: "Ostatni zapis to '%s'. Czy chcesz go wczytać?"
AskLoadLastSave: "Ostatni zapis to ''{save}''. Czy chcesz go wczytać?"
BuildingNavigationMesh: "Tworzenie siatki nawigacyjnej"
InitializingData: "Inicjalizacja..."
LoadingExterior: "Wczytywanie obszaru zewnętrznego"
@ -30,7 +30,7 @@ QuitGameConfirmation: "Wyjść z gry?"
SaveGameDenied: "Gra nie może być teraz zapisana."
SavingInProgress: "Zapisywanie..."
ScreenshotFailed: "Nie udało się zapisać zrzutu ekranu"
ScreenshotMade: "%s został zapisany"
ScreenshotMade: "{file} został zapisany"
# Save game menu
@ -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"
LightsMinimumInteriorBrightnessValue: "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"

View File

@ -12,7 +12,7 @@ PhysicsProfiler: "Профилировщик физики"
# Messages
AskLoadLastSave: "Последнее сохранение - '%s'. Загрузить?"
AskLoadLastSave: "Последнее сохранение - ''{save}''. Загрузить?"
BuildingNavigationMesh: "Построение навигационной сетки"
InitializingData: "Загрузка..."
LoadingExterior: "Загрузка области"
@ -30,7 +30,7 @@ QuitGameConfirmation: "Выйти из игры?"
SaveGameDenied: "В данный момент игру нельзя сохранить."
SavingInProgress: "Сохранение..."
ScreenshotFailed: "Не удалось создать снимок экрана"
ScreenshotMade: "Создан снимок экрана %s"
ScreenshotMade: "Создан снимок экрана {file}"
# Save game menu
@ -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: "Минимальный уровень освещения в помещениях"
LightsMinimumInteriorBrightnessValue: "Минимальный уровень освещения в помещениях ({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: "Адаптивная"

View File

@ -12,7 +12,7 @@ PhysicsProfiler: "Fysikprofilerare"
# Messages
AskLoadLastSave: "Den senaste sparfilen är '%s'. Vill du ladda den?"
AskLoadLastSave: "Den senaste sparfilen är ''{save}''. Vill du ladda den?"
BuildingNavigationMesh: "Bygger navigeringsmesh"
InitializingData: "Initialiserar data..."
LoadingExterior: "Laddar område"
@ -30,7 +30,7 @@ QuitGameConfirmation: "Avsluta spelet?"
SaveGameDenied: "Spelet kan inte sparas just nu."
SavingInProgress: "Sparar..."
ScreenshotFailed: "Misslyckades att spara skärmdump"
ScreenshotMade: "%s har sparats"
ScreenshotMade: "{file} har sparats"
# Save game menu
@ -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"
LightsMinimumInteriorBrightnessValue: "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"

View File

@ -62,7 +62,7 @@
<UserString key="SettingMin" value="-100"/>
<UserString key="SettingMax" value="100"/>
<UserString key="SettingLabelWidget" value="DifficultyText"/>
<UserString key="SettingLabelCaption" value="#{OMWEngine:Difficulty} (%s)"/>
<UserString key="SettingLabelCaption" value="DifficultyValue"/>
</Widget>
<Widget type="TextBox" skin="SandText" position="0 38 352 16" align="Left Top">
<Property key="Caption" value="#{OMWEngine:DifficultyEasy}"/>
@ -87,7 +87,7 @@
<UserString key="SettingMin" value="3584"/>
<UserString key="SettingMax" value="7168"/>
<UserString key="SettingLabelWidget" value="ActorProcessingText"/>
<UserString key="SettingLabelCaption" value="#{OMWEngine:ActorsProcessingRange} (%s)"/>
<UserString key="SettingLabelCaption" value="ActorsProcessingRangeValue"/>
</Widget>
<Widget type="TextBox" skin="SandText" position="0 38 352 16" align="Left Top">
<Property key="Caption" value="#{OMWEngine:DistanceLow}"/>
@ -339,7 +339,7 @@
<UserString key="SettingMin" value="30"/>
<UserString key="SettingMax" value="110"/>
<UserString key="SettingLabelWidget" value="FovText"/>
<UserString key="SettingLabelCaption" value="#{OMWEngine:FieldOfView} (%s)"/>
<UserString key="SettingLabelCaption" value="FieldOfViewValue"/>
</Widget>
<Widget type="TextBox" skin="SandText" position="0 286 352 18" align="Left Top">
<Property key="Caption" value="#{OMWEngine:FieldOfViewLow}"/>
@ -394,7 +394,7 @@
<UserString key="SettingCategory" value="General"/>
<UserString key="SettingName" value="anisotropy"/>
<UserString key="SettingLabelWidget" value="AnisotropyLabel"/>
<UserString key="SettingLabelCaption" value="#{OMWEngine:Anisotropy} (%s)"/>
<UserString key="SettingLabelCaption" value="AnisotropyValue"/>
</Widget>
<Widget type="AutoSizedTextBox" skin="NormalText" position="0 104 0 18" align="Left Top" name="RenderDistanceLabel">
@ -410,7 +410,7 @@
<UserString key="SettingMin" value="2500"/>
<UserString key="SettingMax" value="7168"/>
<UserString key="SettingLabelWidget" value="RenderDistanceLabel"/>
<UserString key="SettingLabelCaption" value="#{OMWEngine:ViewDistance} (%s)"/>
<UserString key="SettingLabelCaption" value="ViewDistanceValue"/>
</Widget>
<Widget type="ScrollBar" skin="MW_HScroll" position="0 126 352 18" align="HStretch Top" name="LargeRenderingDistanceSlider">
<Property key="Range" value="79421"/>
@ -422,7 +422,7 @@
<UserString key="SettingMin" value="2500"/>
<UserString key="SettingMax" value="81920"/>
<UserString key="SettingLabelWidget" value="RenderDistanceLabel"/>
<UserString key="SettingLabelCaption" value="#{OMWEngine:ViewDistance} (x%s)"/>
<UserString key="SettingLabelCaption" value="ViewDistanceValueCells"/>
</Widget>
<Widget type="TextBox" skin="SandText" position="0 148 352 18" align="Left Top">
<Property key="Caption" value="#{OMWEngine:DistanceLow}"/>
@ -585,7 +585,7 @@
<UserString key="SettingName" value="max lights"/>
<UserString key="SettingValueType" value="Integer"/>
<UserString key="SettingLabelWidget" value="MaxLightsText"/>
<UserString key="SettingLabelCaption" value="#{OMWEngine:MaxLights} (%s)"/>
<UserString key="SettingLabelCaption" value="MaxLightsValue"/>
</Widget>
<Widget type="ComboBox" skin="MW_ComboBox" position="258 28 250 24" align="Left Top" name="MaxLights">
<Property key="AddItem" value="8"/>
@ -659,7 +659,7 @@
<UserString key="SettingName" value="maximum light distance"/>
<UserString key="SettingValueType" value="Float"/>
<UserString key="SettingLabelWidget" value="MaxLightDistanceText"/>
<UserString key="SettingLabelCaption" value="#{OMWEngine:LightsMaximumDistance} (%s)"/>
<UserString key="SettingLabelCaption" value="LightsMaximumDistanceValue"/>
</Widget>
<!-- Light Fade Multiplier -->
<Widget type="TextBox" skin="NormalText" position="0 182 500 18" align="Left Top" name="LightFadeMultiplierText">
@ -677,7 +677,7 @@
<UserString key="SettingMin" value="0.0"/>
<UserString key="SettingMax" value="1.0"/>
<UserString key="SettingLabelWidget" value="LightFadeMultiplierText"/>
<UserString key="SettingLabelCaption" value="#{OMWEngine:LightsFadeStartMultiplier} (%s)"/>
<UserString key="SettingLabelCaption" value="LightsFadeStartMultiplierValue"/>
</Widget>
<!-- Bounding Sphere Multiplier -->
<Widget type="TextBox" skin="NormalText" position="0 230 500 18" align="Left Top" name="BoundingSphereMultText">
@ -695,7 +695,7 @@
<UserString key="SettingName" value="light bounds multiplier"/>
<UserString key="SettingValueType" value="Float"/>
<UserString key="SettingLabelWidget" value="BoundingSphereMultText"/>
<UserString key="SettingLabelCaption" value="#{OMWEngine:LightsBoundingSphereMultiplier} (%s)"/>
<UserString key="SettingLabelCaption" value="LightsBoundingSphereMultiplierValue"/>
</Widget>
<!-- Minimum Ambient Brightness -->
<Widget type="TextBox" skin="NormalText" position="0 278 500 18" align="Left Top" name="MinimumBrightnessText">
@ -711,7 +711,7 @@
<UserString key="SettingName" value="minimum interior brightness"/>
<UserString key="SettingValueType" value="Float"/>
<UserString key="SettingLabelWidget" value="MinimumBrightnessText"/>
<UserString key="SettingLabelCaption" value="#{OMWEngine:LightsMinimumInteriorBrightness} (%s)"/>
<UserString key="SettingLabelCaption" value="LightsMinimumInteriorBrightnessValue"/>
</Widget>
<Widget type="AutoSizedButton" skin="MW_Button" position="0 336 0 0" align="Top Left" name="LightsResetButton">
<Property key="Caption" value="#{Interface:Reset}"/>