Merge branch 'l10n' into 'master'

Dehardcode non-game-specific localization GMSTs

See merge request OpenMW/openmw!2855
depth-refraction
uramer 2 years ago
commit ee1551f02c

@ -679,7 +679,7 @@ namespace MWGui
void Console::updateConsoleTitle() void Console::updateConsoleTitle()
{ {
std::string title = "#{sConsoleTitle}"; std::string title = "#{OMWEngine:ConsoleWindow}";
if (!mConsoleMode.empty()) if (!mConsoleMode.empty())
title = mConsoleMode + " " + title; title = mConsoleMode + " " + title;
if (!mPtr.isEmpty()) if (!mPtr.isEmpty())

@ -467,7 +467,7 @@ namespace MWGui
void HUD::unsetSelectedSpell() void HUD::unsetSelectedSpell()
{ {
std::string_view spellName = "#{sNone}"; std::string_view spellName = "#{Interface:None}";
if (spellName != mSpellName && mSpellVisible) if (spellName != mSpellName && mSpellVisible)
{ {
mWeaponSpellTimer = 5.0f; mWeaponSpellTimer = 5.0f;

@ -126,7 +126,7 @@ namespace MWGui
} }
std::vector<std::string> buttons; std::vector<std::string> buttons;
buttons.emplace_back("#{sOk}"); buttons.emplace_back("#{Interface:OK}");
MWBase::Environment::get().getWindowManager()->interactiveMessageBox(message, buttons); MWBase::Environment::get().getWindowManager()->interactiveMessageBox(message, buttons);
} }
} }

@ -107,7 +107,7 @@ namespace MWGui
else else
{ {
ConfirmationDialog* dialog = winMgr->getConfirmationDialog(); ConfirmationDialog* dialog = winMgr->getConfirmationDialog();
dialog->askForConfirmation("#{sMessage2}"); dialog->askForConfirmation("#{OMWEngine:QuitGameConfirmation}");
dialog->eventOkClicked.clear(); dialog->eventOkClicked.clear();
dialog->eventOkClicked += MyGUI::newDelegate(this, &MainMenu::onExitConfirmed); dialog->eventOkClicked += MyGUI::newDelegate(this, &MainMenu::onExitConfirmed);
dialog->eventCancelClicked.clear(); dialog->eventCancelClicked.clear();
@ -120,7 +120,7 @@ namespace MWGui
else else
{ {
ConfirmationDialog* dialog = winMgr->getConfirmationDialog(); ConfirmationDialog* dialog = winMgr->getConfirmationDialog();
dialog->askForConfirmation("#{sNotifyMessage54}"); dialog->askForConfirmation("#{OMWEngine:NewGameConfirmation}");
dialog->eventOkClicked.clear(); dialog->eventOkClicked.clear();
dialog->eventOkClicked += MyGUI::newDelegate(this, &MainMenu::onNewGameConfirmed); dialog->eventOkClicked += MyGUI::newDelegate(this, &MainMenu::onNewGameConfirmed);
dialog->eventCancelClicked.clear(); dialog->eventCancelClicked.clear();

@ -316,7 +316,7 @@ namespace MWGui
std::string_view version = technique->getVersion().empty() ? NA : technique->getVersion(); std::string_view version = technique->getVersion().empty() ? NA : technique->getVersion();
std::string_view description = technique->getDescription().empty() ? NA : technique->getDescription(); std::string_view description = technique->getDescription().empty() ? NA : technique->getDescription();
auto serializeBool = [](bool value) { return value ? "#{sYes}" : "#{sNo}"; }; auto serializeBool = [](bool value) { return value ? "#{Interface:Yes}" : "#{Interface:No}"; };
const auto flags = technique->getFlags(); const auto flags = technique->getFlags();

@ -85,7 +85,7 @@ namespace MWGui
void SaveGameDialog::confirmDeleteSave() void SaveGameDialog::confirmDeleteSave()
{ {
ConfirmationDialog* dialog = MWBase::Environment::get().getWindowManager()->getConfirmationDialog(); ConfirmationDialog* dialog = MWBase::Environment::get().getWindowManager()->getConfirmationDialog();
dialog->askForConfirmation("#{sMessage3}"); dialog->askForConfirmation("#{OMWEngine:DeleteGameConfirmation}");
dialog->eventOkClicked.clear(); dialog->eventOkClicked.clear();
dialog->eventOkClicked += MyGUI::newDelegate(this, &SaveGameDialog::onDeleteSlotConfirmed); dialog->eventOkClicked += MyGUI::newDelegate(this, &SaveGameDialog::onDeleteSlotConfirmed);
dialog->eventCancelClicked.clear(); dialog->eventCancelClicked.clear();
@ -268,7 +268,7 @@ namespace MWGui
if (mCurrentSlot != nullptr && !reallySure) if (mCurrentSlot != nullptr && !reallySure)
{ {
ConfirmationDialog* dialog = MWBase::Environment::get().getWindowManager()->getConfirmationDialog(); ConfirmationDialog* dialog = MWBase::Environment::get().getWindowManager()->getConfirmationDialog();
dialog->askForConfirmation("#{sMessage4}"); dialog->askForConfirmation("#{OMWEngine:OverwriteGameConfirmation}");
dialog->eventOkClicked.clear(); dialog->eventOkClicked.clear();
dialog->eventOkClicked += MyGUI::newDelegate(this, &SaveGameDialog::onConfirmationGiven); dialog->eventOkClicked += MyGUI::newDelegate(this, &SaveGameDialog::onConfirmationGiven);
dialog->eventCancelClicked.clear(); dialog->eventCancelClicked.clear();
@ -277,7 +277,7 @@ namespace MWGui
} }
if (mSaveNameEdit->getCaption().empty()) if (mSaveNameEdit->getCaption().empty())
{ {
MWBase::Environment::get().getWindowManager()->messageBox("#{sNotifyMessage65}"); MWBase::Environment::get().getWindowManager()->messageBox("#{OMWEngine:EmptySaveNameError}");
return; return;
} }
} }
@ -289,7 +289,7 @@ namespace MWGui
if (state == MWBase::StateManager::State_Running && !reallySure) if (state == MWBase::StateManager::State_Running && !reallySure)
{ {
ConfirmationDialog* dialog = MWBase::Environment::get().getWindowManager()->getConfirmationDialog(); ConfirmationDialog* dialog = MWBase::Environment::get().getWindowManager()->getConfirmationDialog();
dialog->askForConfirmation("#{sMessage1}"); dialog->askForConfirmation("#{OMWEngine:LoadGameConfirmation}");
dialog->eventOkClicked.clear(); dialog->eventOkClicked.clear();
dialog->eventOkClicked += MyGUI::newDelegate(this, &SaveGameDialog::onConfirmationGiven); dialog->eventOkClicked += MyGUI::newDelegate(this, &SaveGameDialog::onConfirmationGiven);
dialog->eventCancelClicked.clear(); dialog->eventCancelClicked.clear();
@ -425,7 +425,7 @@ namespace MWGui
text << mCurrentSlot->mProfile.mInGameTime.mDay << " " text << mCurrentSlot->mProfile.mInGameTime.mDay << " "
<< MWBase::Environment::get().getWorld()->getMonthName(mCurrentSlot->mProfile.mInGameTime.mMonth) << " " << MWBase::Environment::get().getWorld()->getMonthName(mCurrentSlot->mProfile.mInGameTime.mMonth) << " "
<< hour << " " << (pm ? "#{sSaveMenuHelp05}" : "#{sSaveMenuHelp04}"); << hour << " " << (pm ? "#{Calendar:pm}" : "#{Calendar:am}");
if (Settings::Manager::getBool("timeplayed", "Saves")) if (Settings::Manager::getBool("timeplayed", "Saves"))
{ {

@ -163,9 +163,9 @@ namespace MWGui
hour = 12; hour = 12;
ESM::EpochTimeStamp currentDate = MWBase::Environment::get().getWorld()->getEpochTimeStamp(); ESM::EpochTimeStamp currentDate = MWBase::Environment::get().getWorld()->getEpochTimeStamp();
std::string daysPassed std::string daysPassed = Misc::StringUtils::format(
= Misc::StringUtils::format("(#{sDay} %i)", MWBase::Environment::get().getWorld()->getTimeStamp().getDay()); "(#{Calendar:day} %i)", MWBase::Environment::get().getWorld()->getTimeStamp().getDay());
std::string_view formattedHour(pm ? "#{sSaveMenuHelp05}" : "#{sSaveMenuHelp04}"); std::string_view formattedHour(pm ? "#{Calendar:pm}" : "#{Calendar:am}");
std::string dateTimeText std::string dateTimeText
= Misc::StringUtils::format("%i %s %s %i %s", currentDate.mDay, month, daysPassed, hour, formattedHour); = Misc::StringUtils::format("%i %s %s %i %s", currentDate.mDay, month, daysPassed, hour, formattedHour);
mDateTimeText->setCaptionWithReplacing(dateTimeText); mDateTimeText->setCaptionWithReplacing(dateTimeText);

@ -1408,7 +1408,7 @@ namespace MWGui
if (player->getDrawState() == MWMechanics::DrawState::Spell) if (player->getDrawState() == MWMechanics::DrawState::Spell)
player->setDrawState(MWMechanics::DrawState::Nothing); player->setDrawState(MWMechanics::DrawState::Nothing);
mSpellWindow->setTitle("#{sNone}"); mSpellWindow->setTitle("#{Interface:None}");
} }
void WindowManager::unsetSelectedWeapon() void WindowManager::unsetSelectedWeapon()

@ -473,7 +473,7 @@ namespace MWInput
case A_CycleWeaponRight: case A_CycleWeaponRight:
return "#{sNextWeapon}"; return "#{sNextWeapon}";
case A_Console: case A_Console:
return "#{sConsoleTitle}"; return "#{OMWEngine:ConsoleWindow}";
case A_Run: case A_Run:
return "#{sRun}"; return "#{sRun}";
case A_Sneak: case A_Sneak:
@ -528,7 +528,7 @@ namespace MWInput
std::string BindingsManager::getActionKeyBindingName(int action) std::string BindingsManager::getActionKeyBindingName(int action)
{ {
if (mInputBinder->getChannel(action)->getControlsCount() == 0) if (mInputBinder->getChannel(action)->getControlsCount() == 0)
return "#{sNone}"; return "#{Interface:None}";
ICS::Control* c = mInputBinder->getChannel(action)->getAttachedControls().front().control; ICS::Control* c = mInputBinder->getChannel(action)->getAttachedControls().front().control;
@ -551,16 +551,16 @@ namespace MWInput
case ICS::InputControlSystem::MouseWheelClick::LEFT: case ICS::InputControlSystem::MouseWheelClick::LEFT:
return "Mouse Wheel Left"; return "Mouse Wheel Left";
default: default:
return "#{sNone}"; return "#{Interface:None}";
} }
else else
return "#{sNone}"; return "#{Interface:None}";
} }
std::string BindingsManager::getActionControllerBindingName(int action) std::string BindingsManager::getActionControllerBindingName(int action)
{ {
if (mInputBinder->getChannel(action)->getControlsCount() == 0) if (mInputBinder->getChannel(action)->getControlsCount() == 0)
return "#{sNone}"; return "#{Interface:None}";
ICS::Control* c = mInputBinder->getChannel(action)->getAttachedControls().front().control; ICS::Control* c = mInputBinder->getChannel(action)->getAttachedControls().front().control;
@ -573,7 +573,7 @@ namespace MWInput
return SDLUtil::sdlControllerButtonToString( return SDLUtil::sdlControllerButtonToString(
mInputBinder->getJoystickButtonBinding(c, sFakeDeviceId, ICS::Control::INCREASE)); mInputBinder->getJoystickButtonBinding(c, sFakeDeviceId, ICS::Control::INCREASE));
else else
return "#{sNone}"; return "#{Interface:None}";
} }
const std::initializer_list<int>& BindingsManager::getActionKeySorting() const std::initializer_list<int>& BindingsManager::getActionKeySorting()

@ -10,6 +10,8 @@
#include <components/esm3/loadcell.hpp> #include <components/esm3/loadcell.hpp>
#include <components/esm3/loadclas.hpp> #include <components/esm3/loadclas.hpp>
#include <components/l10n/manager.hpp>
#include <components/loadinglistener/loadinglistener.hpp> #include <components/loadinglistener/loadinglistener.hpp>
#include <components/files/conversion.hpp> #include <components/files/conversion.hpp>
@ -124,11 +126,11 @@ void MWState::StateManager::askLoadRecent()
{ {
MWState::Slot lastSave = *character->begin(); MWState::Slot lastSave = *character->begin();
std::vector<std::string> buttons; std::vector<std::string> buttons;
buttons.emplace_back("#{sYes}"); buttons.emplace_back("#{Interface:Yes}");
buttons.emplace_back("#{sNo}"); buttons.emplace_back("#{Interface:No}");
std::string message
= MWBase::Environment::get().getL10nManager()->getMessage("OMWEngine", "AskLoadLastSave");
std::string_view tag = "%s"; std::string_view tag = "%s";
std::string message{ MWBase::Environment::get().getWindowManager()->getGameSettingString(
"sLoadLastSaveMsg", tag) };
size_t pos = message.find(tag); size_t pos = message.find(tag);
message.replace(pos, tag.length(), lastSave.mProfile.mDescription); message.replace(pos, tag.length(), lastSave.mProfile.mDescription);
MWBase::Environment::get().getWindowManager()->interactiveMessageBox(message, buttons); MWBase::Environment::get().getWindowManager()->interactiveMessageBox(message, buttons);
@ -172,7 +174,7 @@ void MWState::StateManager::newGame(bool bypass)
MWBase::Environment::get().getWindowManager()->pushGuiMode(MWGui::GM_MainMenu); MWBase::Environment::get().getWindowManager()->pushGuiMode(MWGui::GM_MainMenu);
std::vector<std::string> buttons; std::vector<std::string> buttons;
buttons.emplace_back("#{sOk}"); buttons.emplace_back("#{Interface:OK}");
MWBase::Environment::get().getWindowManager()->interactiveMessageBox(error.str(), buttons); MWBase::Environment::get().getWindowManager()->interactiveMessageBox(error.str(), buttons);
} }
} }
@ -274,7 +276,7 @@ void MWState::StateManager::saveGame(const std::string& description, const Slot*
Loading::Listener& listener = *MWBase::Environment::get().getWindowManager()->getLoadingScreen(); Loading::Listener& listener = *MWBase::Environment::get().getWindowManager()->getLoadingScreen();
// Using only Cells for progress information, since they typically have the largest records by far // Using only Cells for progress information, since they typically have the largest records by far
listener.setProgressRange(MWBase::Environment::get().getWorld()->countSavedGameCells()); listener.setProgressRange(MWBase::Environment::get().getWorld()->countSavedGameCells());
listener.setLabel("#{sNotifyMessage4}", true); listener.setLabel("#{OMWEngine:SavingInProgress}", true);
Loading::ScopedLoad load(&listener); Loading::ScopedLoad load(&listener);
@ -327,7 +329,7 @@ void MWState::StateManager::saveGame(const std::string& description, const Slot*
Log(Debug::Error) << error.str(); Log(Debug::Error) << error.str();
std::vector<std::string> buttons; std::vector<std::string> buttons;
buttons.emplace_back("#{sOk}"); buttons.emplace_back("#{Interface:OK}");
MWBase::Environment::get().getWindowManager()->interactiveMessageBox(error.str(), buttons); MWBase::Environment::get().getWindowManager()->interactiveMessageBox(error.str(), buttons);
// If no file was written, clean up the slot // If no file was written, clean up the slot
@ -346,7 +348,7 @@ void MWState::StateManager::quickSave(std::string name)
&& MWBase::Environment::get().getWindowManager()->isSavingAllowed())) && MWBase::Environment::get().getWindowManager()->isSavingAllowed()))
{ {
// You can not save your game right now // You can not save your game right now
MWBase::Environment::get().getWindowManager()->messageBox("#{sSaveGameDenied}"); MWBase::Environment::get().getWindowManager()->messageBox("#{OMWEngine:SaveGameDenied}");
return; return;
} }
@ -389,6 +391,11 @@ void MWState::StateManager::loadGame(const std::filesystem::path& filepath)
loadGame(character, filepath); loadGame(character, filepath);
} }
struct VersionMismatchError : public std::runtime_error
{
using std::runtime_error::runtime_error;
};
void MWState::StateManager::loadGame(const Character* character, const std::filesystem::path& filepath) void MWState::StateManager::loadGame(const Character* character, const std::filesystem::path& filepath)
{ {
try try
@ -401,7 +408,7 @@ void MWState::StateManager::loadGame(const Character* character, const std::file
reader.open(filepath); reader.open(filepath);
if (reader.getFormatVersion() > ESM::CurrentSaveGameFormatVersion) if (reader.getFormatVersion() > ESM::CurrentSaveGameFormatVersion)
throw std::runtime_error( throw VersionMismatchError(
"This save file was created using a newer version of OpenMW and is thus not supported. Please upgrade " "This save file was created using a newer version of OpenMW and is thus not supported. Please upgrade "
"to the newest OpenMW version to load this file."); "to the newest OpenMW version to load this file.");
@ -411,7 +418,7 @@ void MWState::StateManager::loadGame(const Character* character, const std::file
Loading::Listener& listener = *MWBase::Environment::get().getWindowManager()->getLoadingScreen(); Loading::Listener& listener = *MWBase::Environment::get().getWindowManager()->getLoadingScreen();
listener.setProgressRange(100); listener.setProgressRange(100);
listener.setLabel("#{sLoadingMessage14}"); listener.setLabel("#{OMWEngine:LoadingInProgress}");
Loading::ScopedLoad load(&listener); Loading::ScopedLoad load(&listener);
@ -584,17 +591,22 @@ void MWState::StateManager::loadGame(const Character* character, const std::file
} }
catch (const std::exception& e) catch (const std::exception& e)
{ {
std::stringstream error; Log(Debug::Error) << "Failed to load saved game: " << e.what();
error << "Failed to load saved game: " << e.what();
Log(Debug::Error) << error.str();
cleanup(true); cleanup(true);
MWBase::Environment::get().getWindowManager()->pushGuiMode(MWGui::GM_MainMenu); MWBase::Environment::get().getWindowManager()->pushGuiMode(MWGui::GM_MainMenu);
std::vector<std::string> buttons; std::vector<std::string> buttons;
buttons.emplace_back("#{sOk}"); buttons.emplace_back("#{Interface:OK}");
MWBase::Environment::get().getWindowManager()->interactiveMessageBox(error.str(), buttons);
std::string error;
if (typeid(e) == typeid(VersionMismatchError))
error = "#{OMWEngine:LoadingFailed}: #{OMWEngine:LoadingRequiresNewVersionError}";
else
error = "#{OMWEngine:LoadingFailed}: " + std::string(e.what());
MWBase::Environment::get().getWindowManager()->interactiveMessageBox(error, buttons);
} }
} }
@ -669,9 +681,10 @@ bool MWState::StateManager::verifyProfile(const ESM::SavedGame& profile) const
if (notFound) if (notFound)
{ {
std::vector<std::string> buttons; std::vector<std::string> buttons;
buttons.emplace_back("#{sYes}"); buttons.emplace_back("#{Interface:Yes}");
buttons.emplace_back("#{sNo}"); buttons.emplace_back("#{Interface:No}");
MWBase::Environment::get().getWindowManager()->interactiveMessageBox("#{sMissingMastersMsg}", buttons, true); MWBase::Environment::get().getWindowManager()->interactiveMessageBox(
"#{OMWEngine:MissingContentFilesConfirmation}", buttons, true);
int selectedButton = MWBase::Environment::get().getWindowManager()->readPressedButton(); int selectedButton = MWBase::Environment::get().getWindowManager()->readPressedButton();
if (selectedButton == 1 || selectedButton == -1) if (selectedButton == 1 || selectedButton == -1)
return false; return false;

@ -1,5 +1,7 @@
#include "datetimemanager.hpp" #include "datetimemanager.hpp"
#include <components/l10n/manager.hpp>
#include "../mwbase/environment.hpp" #include "../mwbase/environment.hpp"
#include "../mwbase/world.hpp" #include "../mwbase/world.hpp"
@ -152,22 +154,28 @@ namespace MWWorld
globalVariables[Globals::sYear].setInteger(mYear); globalVariables[Globals::sYear].setInteger(mYear);
} }
static std::vector<std::string> getMonthNames()
{
auto calendarL10n = MWBase::Environment::get().getL10nManager()->getContext("Calendar");
std::string prefix = "month";
std::vector<std::string> months;
int count = 12;
months.reserve(count);
for (int i = 1; i <= count; ++i)
months.push_back(calendarL10n->formatMessage(prefix + std::to_string(i), {}, {}));
return months;
}
std::string_view DateTimeManager::getMonthName(int month) const std::string_view DateTimeManager::getMonthName(int month) const
{ {
static std::vector<std::string> months = getMonthNames();
if (month == -1) if (month == -1)
month = mMonth; month = mMonth;
if (month < 0 || month >= static_cast<int>(months.size()))
const int months = 12;
if (month < 0 || month >= months)
return {}; return {};
else
static const std::string_view monthNames[months] = { "sMonthMorningstar", "sMonthSunsdawn", "sMonthFirstseed", return months[month];
"sMonthRainshand", "sMonthSecondseed", "sMonthMidyear", "sMonthSunsheight", "sMonthLastseed",
"sMonthHeartfire", "sMonthFrostfall", "sMonthSunsdusk", "sMonthEveningstar" };
const ESM::GameSetting* setting
= MWBase::Environment::get().getWorld()->getStore().get<ESM::GameSetting>().find(monthNames[month]);
return setting->mValue.getString();
} }
bool DateTimeManager::updateGlobalFloat(GlobalVariableName name, float value) bool DateTimeManager::updateGlobalFloat(GlobalVariableName name, float value)

@ -592,8 +592,7 @@ namespace MWWorld
Loading::Listener* loadingListener = MWBase::Environment::get().getWindowManager()->getLoadingScreen(); Loading::Listener* loadingListener = MWBase::Environment::get().getWindowManager()->getLoadingScreen();
Loading::ScopedLoad load(loadingListener); Loading::ScopedLoad load(loadingListener);
std::string loadingExteriorText = "#{sLoadingMessage3}"; loadingListener->setLabel("#{OMWEngine:LoadingExterior}");
loadingListener->setLabel(loadingExteriorText);
loadingListener->setProgressRange(refsToLoad); loadingListener->setProgressRange(refsToLoad);
const auto getDistanceToPlayerCell = [&](const std::pair<int, int>& cellPosition) { const auto getDistanceToPlayerCell = [&](const std::pair<int, int>& cellPosition) {
@ -862,8 +861,7 @@ namespace MWWorld
MWBase::Environment::get().getWindowManager()->fadeScreenOut(0.5); MWBase::Environment::get().getWindowManager()->fadeScreenOut(0.5);
Loading::Listener* loadingListener = MWBase::Environment::get().getWindowManager()->getLoadingScreen(); Loading::Listener* loadingListener = MWBase::Environment::get().getWindowManager()->getLoadingScreen();
std::string loadingInteriorText = "#{sLoadingMessage2}"; loadingListener->setLabel("#{OMWEngine:LoadingInterior}");
loadingListener->setLabel(loadingInteriorText);
Loading::ScopedLoad load(loadingListener); Loading::ScopedLoad load(loadingListener);
if (mCurrentCell != nullptr && *mCurrentCell == *cell) if (mCurrentCell != nullptr && *mCurrentCell == *cell)
@ -1222,7 +1220,7 @@ namespace MWWorld
Loading::Listener* loadingListener = MWBase::Environment::get().getWindowManager()->getLoadingScreen(); Loading::Listener* loadingListener = MWBase::Environment::get().getWindowManager()->getLoadingScreen();
Loading::ScopedLoad load(loadingListener); Loading::ScopedLoad load(loadingListener);
loadingListener->setLabel("#{sLoadingMessage4}"); loadingListener->setLabel("#{OMWEngine:InitializingData}");
while (!mPreloader->syncTerrainLoad(vec, mRendering.getReferenceTime(), *loadingListener)) while (!mPreloader->syncTerrainLoad(vec, mRendering.getReferenceTime(), *loadingListener))
{ {

@ -33,7 +33,7 @@ namespace fx
if (!uniform) if (!uniform)
return; return;
mCheckbutton->setCaptionWithReplacing(value ? "#{sOn}" : "#{sOff}"); mCheckbutton->setCaptionWithReplacing(value ? "#{Interface:On}" : "#{Interface:Off}");
mFill->setVisible(value); mFill->setVisible(value);
uniform->setValue<bool>(value); uniform->setValue<bool>(value);

@ -29,6 +29,11 @@ namespace l10n
std::shared_ptr<const MessageBundles> getContext( std::shared_ptr<const MessageBundles> getContext(
const std::string& contextName, const std::string& fallbackLocale = "en"); const std::string& contextName, const std::string& fallbackLocale = "en");
std::string getMessage(const std::string& contextName, std::string_view key)
{
return getContext(contextName)->formatMessage(key, {}, {});
}
private: private:
void readLangData(const std::string& name, MessageBundles& ctx, const icu::Locale& lang); void readLangData(const std::string& name, MessageBundles& ctx, const icu::Locale& lang);
void updateContext(const std::string& name, MessageBundles& ctx); void updateContext(const std::string& name, MessageBundles& ctx);

@ -6,6 +6,7 @@ set(BUILTIN_DATA_MW_FILES
# Month names and date formatting # Month names and date formatting
l10n/Calendar/de.yaml l10n/Calendar/de.yaml
l10n/Calendar/en.yaml l10n/Calendar/en.yaml
l10n/Calendar/gmst.yaml
l10n/Calendar/ru.yaml l10n/Calendar/ru.yaml
l10n/Calendar/sv.yaml l10n/Calendar/sv.yaml
l10n/Calendar/fr.yaml l10n/Calendar/fr.yaml
@ -15,6 +16,9 @@ set(BUILTIN_DATA_MW_FILES
# L10n for OpenMW menus and non-game-specific messages # L10n for OpenMW menus and non-game-specific messages
l10n/OMWEngine/gmst.yaml l10n/OMWEngine/gmst.yaml
# Game-specific settings for calendar.lua
openmw_aux/calendarconfig.lua
) )
foreach (f ${BUILTIN_DATA_MW_FILES}) foreach (f ${BUILTIN_DATA_MW_FILES})

@ -28,7 +28,7 @@ monthInGenitive10: "Eisherbst"
monthInGenitive11: "Abenddämmerung" monthInGenitive11: "Abenddämmerung"
monthInGenitive12: "Abendstern" monthInGenitive12: "Abendstern"
dateFormat: "tag {day} im {monthInGenitive} {year}" dateFormat: "tag {day} im {monthInGenitive} {year, number, :: group-off}"
weekday1: "Sundas" weekday1: "Sundas"
weekday2: "Morndas" weekday2: "Morndas"

@ -28,7 +28,7 @@ monthInGenitive10: "Frostfall"
monthInGenitive11: "Sun's Dusk" monthInGenitive11: "Sun's Dusk"
monthInGenitive12: "Evening Star" monthInGenitive12: "Evening Star"
dateFormat: "day {day} of {monthInGenitive} {year}" dateFormat: "day {day} of {monthInGenitive} {year, number, :: group-off}"
weekday1: "Sundas" weekday1: "Sundas"
weekday2: "Morndas" weekday2: "Morndas"

@ -31,7 +31,7 @@ monthInGenitive10: "Soufflegivre"
monthInGenitive11: "Sombreciel" monthInGenitive11: "Sombreciel"
monthInGenitive12: "Soirétoile" monthInGenitive12: "Soirétoile"
dateFormat: "Le {day} du {monthInGenitive} {year}" dateFormat: "Le {day} du {monthInGenitive} {year, number, :: group-off}"
weekday1: "Sundas" weekday1: "Sundas"
weekday2: "Morndas" weekday2: "Morndas"

@ -0,0 +1,16 @@
month1: "sMonthMorningstar"
month2: "sMonthSunsdawn"
month3: "sMonthFirstseed"
month4: "sMonthRainshand"
month5: "sMonthSecondseed"
month6: "sMonthMidyear"
month7: "sMonthSunsheight"
month8: "sMonthLastseed"
month9: "sMonthHeartfire"
month10: "sMonthFrostfall"
month11: "sMonthSunsdusk"
month12: "sMonthEveningstar"
am: "sSaveMenuHelp04"
pm: "sSaveMenuHelp05"
day: "sDay"

@ -29,7 +29,7 @@ monthInGenitive10: "Мороза"
monthInGenitive11: "Заката" monthInGenitive11: "Заката"
monthInGenitive12: "Вечерней Звезды" monthInGenitive12: "Вечерней Звезды"
dateFormat: "день {day} {monthInGenitive} {year}" dateFormat: "день {day} {monthInGenitive} {year, number, :: group-off}"
weekday1: "Сандас" weekday1: "Сандас"
weekday2: "Морндас" weekday2: "Морндас"

@ -4,4 +4,4 @@
# En: No use translating names on months and weekdays to Swedish when the game's content isn't in Swedish. It will probably just confuse people. Therefore, only dateFormat is present in this file. # En: No use translating names on months and weekdays to Swedish when the game's content isn't in Swedish. It will probably just confuse people. Therefore, only dateFormat is present in this file.
dateFormat: "dag {day} av {monthInGenitive} år {year}" dateFormat: "dag {day} av {monthInGenitive} år {year, number, :: group-off}"

@ -1,6 +1,9 @@
On: "sOn" Cancel: "sCancel"
Off: "sOff" Close: "sClose"
No: "sNo"
None: "sNone" None: "sNone"
OK: "sOK" OK: "sOK"
Off: "sOff"
On: "sOn"
Yes: "sYes" Yes: "sYes"
No: "sNo"

@ -1,4 +1,56 @@
AskLoadLastSave: "sLoadLastSaveMsg"
AudioEffects: "sEffects"
AudioFootsteps: "sFootsteps"
AudioMaster: "sMaster"
AudioMusic: "sMusic"
Audio: "sAudio"
AudioVoice: "sVoice"
ConfirmResetBindings: "sNotifyMessage66" ConfirmResetBindings: "sNotifyMessage66"
ConfirmResolution: "sNotifyMessage67" ConfirmResolution: "sNotifyMessage67"
ConsoleWindow: "sConsoleTitle"
Controls: "sControls"
DelayHigh: "sSlow"
DelayLow: "sFast"
DeleteGameConfirmation: "sMessage3"
DeleteGame: "sDeleteGame"
DetailLevel: "sDetail_Level"
DifficultyEasy: "sEasy"
DifficultyHard: "sHard"
Difficulty: "sDifficulty"
DistanceHigh: "sFar"
DistanceLow: "sNear"
EmptySaveNameError: "sNotifyMessage65"
EnableController: "sEnableJoystick"
FieldOfViewHigh: "sHigh"
FieldOfViewLow: "sLow"
GammaCorrection: "sGamma_Correction"
GammaDark: "sDark_Gamma"
GammaLight: "sLight_Gamma"
InitializingData: "sLoadingMessage4"
InvertYAxis: "sMouseFlip"
LoadGameConfirmation: "sMessage1"
LoadingExterior: "sLoadingMessage3"
LoadingInProgress: "sLoadingMessage12"
LoadingInterior: "sLoadingMessage2"
MenuHelpDelay: "sMenu_Help_Delay"
MenuTransparency: "sTransparency_Menu"
MissingContentFilesConfirmation: "sMissingMastersMsg"
NewGameConfirmation: "sNotifyMessage54"
OverwriteGameConfirmation: "sMessage4"
Preferences: "sPrefs"
QualityHigh: "sHigh"
QualityLow: "sLow"
QualityMedium: "sMedium"
QuitGameConfirmation: "sMessage2"
RebindAction: "sControlsMenu3" RebindAction: "sControlsMenu3"
ResetControls: "sControlsMenu1"
SaveGameDenied: "sSaveGameDenied"
SavingInProgress: "sNotifyMessage4"
SensitivityHigh: "sHigh"
SensitivityLow: "sLow"
SettingsWindow: "sOptions" SettingsWindow: "sOptions"
Subtitles: "sSubtitles"
TransparencyFull: "sFull"
TransparencyNone: "sNone"
Video: "sVideo"
ViewDistance: "sRender_Distance"

@ -0,0 +1,7 @@
return {
monthsDuration = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
daysInWeek = 7,
startingYear = 427,
startingYearDay = 227,
startingWeekDay = 1,
}

@ -58,6 +58,7 @@ set(BUILTIN_DATA_FILES
openmw_aux/util.lua openmw_aux/util.lua
openmw_aux/time.lua openmw_aux/time.lua
openmw_aux/calendar.lua openmw_aux/calendar.lua
openmw_aux/calendarconfig.lua
openmw_aux/ui.lua openmw_aux/ui.lua
builtin.omwscripts builtin.omwscripts

@ -26,7 +26,7 @@ monthInGenitive10: "October"
monthInGenitive11: "November" monthInGenitive11: "November"
monthInGenitive12: "December" monthInGenitive12: "December"
dateFormat: "day {day} of {monthInGenitive} {year}" dateFormat: "{day} {monthInGenitive} {year, number, :: group-off}"
weekday1: "Sunday" weekday1: "Sunday"
weekday2: "Monday" weekday2: "Monday"
@ -35,3 +35,7 @@ weekday4: "Wednesday"
weekday5: "Thursday" weekday5: "Thursday"
weekday6: "Friday" weekday6: "Friday"
weekday7: "Saturday" weekday7: "Saturday"
am: "am"
pm: "pm"
day: "day"

@ -2,3 +2,26 @@ No: "Nein"
NotAvailableShort: "N/A" NotAvailableShort: "N/A"
Reset: "Zurücksetzen" Reset: "Zurücksetzen"
Yes: "Ja" Yes: "Ja"
# To be translated:
#DurationDay: "{days} d "
#DurationHour: "{hours} h "
#DurationMinute: "{minutes} min "
#DurationMonth: |-
# {months, plural,
# one{{months} mo }
# other{{months} mos }
# }
#DurationSecond: "{seconds} s "
#DurationYear: |-
# {years, plural,
# one{{years} yr }
# other{{years} yrs }
# }
#Cancel: "Cancel"
#Close: "Close"
#None: "None"
#OK: "OK"
#Off: "Off"
#On: "On"

@ -20,4 +20,5 @@ On: "On"
Off: "Off" Off: "Off"
None: "None" None: "None"
OK: "OK" OK: "OK"
Cancel: "Cancel"
Close: "Close"

@ -16,3 +16,12 @@ No: "Non"
NotAvailableShort: "N/A" NotAvailableShort: "N/A"
Reset: "Réinitialiser" Reset: "Réinitialiser"
Yes: "Oui" Yes: "Oui"
# To be translated:
#Cancel: "Cancel"
#Close: "Close"
#None: "None"
#OK: "OK"
#Off: "Off"
#On: "On"

@ -1,3 +1,5 @@
Cancel: "Отмена"
Close: "Закрыть"
DurationDay: "{days} д " DurationDay: "{days} д "
DurationHour: "{hours} ч " DurationHour: "{hours} ч "
DurationMinute: "{minutes} мин " DurationMinute: "{minutes} мин "
@ -11,5 +13,9 @@ DurationYear: |-
} }
No: "Нет" No: "Нет"
NotAvailableShort: "Н/Д" NotAvailableShort: "Н/Д"
Reset: "Обнулить" None: "Нет"
OK: "OK"
Off: "Выкл"
On: "Вкл"
Reset: "Сбросить"
Yes: "Да" Yes: "Да"

@ -8,3 +8,12 @@ No: "Nej"
NotAvailableShort: "N/A" NotAvailableShort: "N/A"
Reset: "Återställ" Reset: "Återställ"
Yes: "Ja" Yes: "Ja"
# To be translated:
#Cancel: "Cancel"
#Close: "Close"
#None: "None"
#OK: "OK"
#Off: "Off"
#On: "On"

@ -1,3 +1,8 @@
# Console
#-- To be translated
#ConsoleWindow: "Console"
# Debug window # Debug window
DebugWindow: "Debug" DebugWindow: "Debug"
@ -10,12 +15,38 @@ PhysicsProfiler: "Physik-Profiler"
BuildingNavigationMesh: "Baue Navigationsgitter" BuildingNavigationMesh: "Baue Navigationsgitter"
#-- To be translated
#AskLoadLastSave: "The most recent save is '%s'. Do you want to load it?"
#InitializingData: "Initializing Data..."
#LoadingExterior: "Loading Area"
#LoadingFailed: "Failed to load saved game"
#LoadingInterior: "Loading Area"
#LoadingInProgress: "Loading Save Game"
#LoadingRequiresNewVersionError: |-
# This save file was created using a newer version of OpenMW and is thus not supported.
# Please upgrade to the newest OpenMW version to load this file.
#NewGameConfirmation: "Do you want to start a new game and lose the current one?"
#SaveGameDenied: "The game cannot be saved right now."
#SavingInProgress: "Saving..."
#QuitGameConfirmation: "Quit the game?"
# Save game menu # Save game menu
SelectCharacter: "Charakterauswahl..." SelectCharacter: "Charakterauswahl..."
TimePlayed: "Spielzeit" TimePlayed: "Spielzeit"
#-- To be translated
#DeleteGame: "Delete Game"
#DeleteGameConfirmation: "Are you sure you want to delete this saved game?"
#EmptySaveNameError: "Game can not be saved without a name!"
#LoadGameConfirmation: "Do you want to load a saved game and lose the current one?"
#MissingContentFilesConfirmation: |
# The currently selected content files do not match the ones used by this save game.
# Errors may occur during load or game play.
# Do you wish to continue?
#OverwriteGameConfirmation: "Are you sure you want to overwrite this saved game?"
# Settings menu # Settings menu
@ -84,3 +115,45 @@ WindowMode: "Fenstermodus"
WindowModeFullscreen: "Vollbild" WindowModeFullscreen: "Vollbild"
WindowModeWindowed: "Fenster" WindowModeWindowed: "Fenster"
WindowModeWindowedFullscreen: "Fenster Vollbild" WindowModeWindowedFullscreen: "Fenster Vollbild"
#-- To be translated
#Audio: "Audio"
#AudioMaster: "Master"
#AudioVoice: "Voice"
#AudioEffects: "Effects"
#AudioFootsteps: "Footsteps"
#AudioMusic: "Music"
#ConfirmResetBindings: "Reset all controls to the default?"
#ConfirmResolution: "New resolution will be applied immediately. Do you want to continue?"
#Controls: "Controls"
#DelayLow: "Fast"
#DelayHigh: "Slow"
#DetailLevel: "Detail Level"
#Difficulty: "Difficulty"
#DifficultyEasy: "Easy"
#DifficultyHard: "Hard"
#DistanceHigh: "Far"
#DistanceLow: "Near"
#EnableController: "Enable Controller"
#FieldOfViewLow: "Low"
#FieldOfViewHigh: "High"
#GammaCorrection: "Gamma Correction"
#GammaDark: "Dark"
#GammaLight: "Light"
#InvertYAxis: "Invert Y Axis"
#MenuHelpDelay: "Menu Help Delay"
#MenuTransparency: "Menu Transparency"
#Preferences: "Prefs"
#QualityHigh: "High"
#QualityLow: "Low"
#QualityMedium: "Medium"
#RebindAction: "Press a key or button to rebind this control."
#ResetControls: "Reset Controls"
#SensitivityHigh: "High"
#SensitivityLow: "Low"
#SettingsWindow: "Options"
#Subtitles: "Subtitles"
#TransparencyFull: "Full"
#TransparencyNone: "None"
#Video: "Video"
#ViewDistance: "View Distance"

@ -1,3 +1,7 @@
# Console
ConsoleWindow: "Console"
# Debug window # Debug window
DebugWindow: "Debug" DebugWindow: "Debug"
@ -8,11 +12,33 @@ PhysicsProfiler: "Physics Profiler"
# Messages # Messages
AskLoadLastSave: "The most recent save is '%s'. Do you want to load it?"
BuildingNavigationMesh: "Building navigation mesh" BuildingNavigationMesh: "Building navigation mesh"
InitializingData: "Initializing Data..."
LoadingExterior: "Loading Area"
LoadingFailed: "Failed to load saved game"
LoadingInterior: "Loading Area"
LoadingInProgress: "Loading Save Game"
LoadingRequiresNewVersionError: |-
This save file was created using a newer version of OpenMW and is thus not supported.
Please upgrade to the newest OpenMW version to load this file.
NewGameConfirmation: "Do you want to start a new game and lose the current one?"
SaveGameDenied: "The game cannot be saved right now."
SavingInProgress: "Saving..."
QuitGameConfirmation: "Quit the game?"
# Save game menu # Save game menu
DeleteGame: "Delete Game"
DeleteGameConfirmation: "Are you sure you want to delete this saved game?"
EmptySaveNameError: "Game can not be saved without a name!"
LoadGameConfirmation: "Do you want to load a saved game and lose the current one?"
MissingContentFilesConfirmation: |
The currently selected content files do not match the ones used by this save game.
Errors may occur during load or game play.
Do you wish to continue?
OverwriteGameConfirmation: "Are you sure you want to overwrite this saved game?"
SelectCharacter: "Select Character..." SelectCharacter: "Select Character..."
TimePlayed: "Time played" TimePlayed: "Time played"
@ -21,6 +47,12 @@ TimePlayed: "Time played"
ActorsProcessingRange: "Actors Processing Range" ActorsProcessingRange: "Actors Processing Range"
Anisotropy: "Anisotropy" Anisotropy: "Anisotropy"
Audio: "Audio"
AudioEffects: "Effects"
AudioFootsteps: "Footsteps"
AudioMaster: "Master"
AudioMusic: "Music"
AudioVoice: "Voice"
CameraSensitivity: "Camera Sensitivity" CameraSensitivity: "Camera Sensitivity"
CameraZoomIn: "Zoom Camera In" CameraZoomIn: "Zoom Camera In"
CameraZoomOut: "Zoom Camera Out" CameraZoomOut: "Zoom Camera Out"
@ -28,9 +60,25 @@ ChangeRequiresRestart: "This change requires a restart to take effect."
ConfirmResetBindings: "Reset all controls to the default?" ConfirmResetBindings: "Reset all controls to the default?"
ConfirmResolution: "New resolution will be applied immediately. Do you want to continue?" ConfirmResolution: "New resolution will be applied immediately. Do you want to continue?"
Controller: "Controller" Controller: "Controller"
Controls: "Controls"
DelayLow: "Fast"
DelayHigh: "Slow"
DetailLevel: "Detail Level"
Difficulty: "Difficulty"
DifficultyEasy: "Easy"
DifficultyHard: "Hard"
DistanceHigh: "Far"
DistanceLow: "Near"
EnableController: "Enable Controller"
FieldOfView: "Field of View" FieldOfView: "Field of View"
FieldOfViewHigh: "High"
FieldOfViewLow: "Low"
FrameRateHint: "Hint: press F3 to show\nthe current frame rate." FrameRateHint: "Hint: press F3 to show\nthe current frame rate."
GammaCorrection: "Gamma Correction"
GammaDark: "Dark"
GammaLight: "Light"
InvertXAxis: "Invert X Axis" InvertXAxis: "Invert X Axis"
InvertYAxis: "Invert Y Axis"
Language: "Language" Language: "Language"
LanguageNote: "Note: these settings do not affect strings from ESM files." LanguageNote: "Note: these settings do not affect strings from ESM files."
LightingMethod: "Lighting Method" LightingMethod: "Lighting Method"
@ -49,11 +97,17 @@ LightsMinimumInteriorBrightness: "Minimum Interior Brightness"
LightsMinimumInteriorBrightnessTooltip: "Default: 0.08\nMinimum ambient interior brightness.\n\nIncrease this if you feel interiors are too dark." LightsMinimumInteriorBrightnessTooltip: "Default: 0.08\nMinimum ambient interior brightness.\n\nIncrease this if you feel interiors are too dark."
MaxLights: "Max Lights" MaxLights: "Max Lights"
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." 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"
MouseAndKeyboard: "Mouse/Keyboard" MouseAndKeyboard: "Mouse/Keyboard"
PostProcessing: "Post Processing" PostProcessing: "Post Processing"
PostProcessingTooltip: "Tweaked via Post Processor HUD, see input bindings." PostProcessingTooltip: "Tweaked via Post Processor HUD, see input bindings."
Preferences: "Prefs"
PrimaryLanguage: "Primary Language" PrimaryLanguage: "Primary Language"
PrimaryLanguageTooltip: "Localization files for this language have the highest priority." PrimaryLanguageTooltip: "Localization files for this language have the highest priority."
QualityHigh: "High"
QualityLow: "Low"
QualityMedium: "Medium"
RainRippleDetail: "Rain ripple detail" RainRippleDetail: "Rain ripple detail"
RainRippleDetailDense: "Dense" RainRippleDetailDense: "Dense"
RainRippleDetailSimple: "Simple" RainRippleDetailSimple: "Simple"
@ -67,12 +121,16 @@ ReflectionShaderDetailSky: "Sky"
ReflectionShaderDetailTerrain: "Terrain" ReflectionShaderDetailTerrain: "Terrain"
ReflectionShaderDetailWorld: "World" ReflectionShaderDetailWorld: "World"
Refraction: "Refraction" Refraction: "Refraction"
ResetControls: "Reset Controls"
Screenshot: "Screenshot" Screenshot: "Screenshot"
Scripts: "Scripts" Scripts: "Scripts"
ScriptsDisabled: "Load a game to access script settings." ScriptsDisabled: "Load a game to access script settings."
SecondaryLanguage: "Secondary Language" SecondaryLanguage: "Secondary Language"
SecondaryLanguageTooltip: "Localization files for this language may be used if the primary language files lack the necessary lines." SecondaryLanguageTooltip: "Localization files for this language may be used if the primary language files lack the necessary lines."
SensitivityHigh: "High"
SensitivityLow: "Low"
SettingsWindow: "Options" SettingsWindow: "Options"
Subtitles: "Subtitles"
TextureFiltering: "Texture Filtering" TextureFiltering: "Texture Filtering"
TextureFilteringBilinear: "Bilinear" TextureFilteringBilinear: "Bilinear"
TextureFilteringDisabled: "None" TextureFilteringDisabled: "None"
@ -80,6 +138,10 @@ TextureFilteringOther: "Other"
TextureFilteringTrilinear: "Trilinear" TextureFilteringTrilinear: "Trilinear"
ToggleHUD: "Toggle HUD" ToggleHUD: "Toggle HUD"
TogglePostProcessorHUD: "Toggle Post Processor HUD" TogglePostProcessorHUD: "Toggle Post Processor HUD"
TransparencyFull: "Full"
TransparencyNone: "None"
Video: "Video"
ViewDistance: "View Distance"
VSync: "VSync" VSync: "VSync"
VSyncAdaptive: "Adaptive" VSyncAdaptive: "Adaptive"
Water: "Water" Water: "Water"

@ -1,3 +1,9 @@
# Console
#-- To be translated
#ConsoleWindow: "Console"
# Debug window # Debug window
DebugWindow: "Fenêtre de débogage" DebugWindow: "Fenêtre de débogage"
@ -9,12 +15,38 @@ PhysicsProfiler: "Profileur des performances de la physique"
BuildingNavigationMesh: "Construction du mesh de navigation" BuildingNavigationMesh: "Construction du mesh de navigation"
#-- To be translated
#AskLoadLastSave: "The most recent save is '%s'. Do you want to load it?"
#InitializingData: "Initializing Data..."
#LoadingExterior: "Loading Area"
#LoadingFailed: "Failed to load saved game"
#LoadingInterior: "Loading Area"
#LoadingInProgress: "Loading Save Game"
#LoadingRequiresNewVersionError: |-
# This save file was created using a newer version of OpenMW and is thus not supported.
# Please upgrade to the newest OpenMW version to load this file.
#NewGameConfirmation: "Do you want to start a new game and lose the current one?"
#SaveGameDenied: "The game cannot be saved right now."
#SavingInProgress: "Saving..."
#QuitGameConfirmation: "Quit the game?"
# Save game menu # Save game menu
SelectCharacter: "Sélection du personnage..." SelectCharacter: "Sélection du personnage..."
TimePlayed: "Temps de jeu" TimePlayed: "Temps de jeu"
#-- To be translated
#DeleteGame: "Delete Game"
#DeleteGameConfirmation: "Are you sure you want to delete this saved game?"
#EmptySaveNameError: "Game can not be saved without a name!"
#LoadGameConfirmation: "Do you want to load a saved game and lose the current one?"
#MissingContentFilesConfirmation: |
# The currently selected content files do not match the ones used by this save game.
# Errors may occur during load or game play.
# Do you wish to continue?
#OverwriteGameConfirmation: "Are you sure you want to overwrite this saved game?"
# Settings menu # Settings menu
@ -84,3 +116,45 @@ WindowMode: "Mode d'affichage"
WindowModeFullscreen: "Plein écran" WindowModeFullscreen: "Plein écran"
WindowModeWindowed: "Fenêtré" WindowModeWindowed: "Fenêtré"
WindowModeWindowedFullscreen: "Fenêtré plein écran" WindowModeWindowedFullscreen: "Fenêtré plein écran"
#-- To be translated
#Audio: "Audio"
#AudioMaster: "Master"
#AudioVoice: "Voice"
#AudioEffects: "Effects"
#AudioFootsteps: "Footsteps"
#AudioMusic: "Music"
#ConfirmResetBindings: "Reset all controls to the default?"
#ConfirmResolution: "New resolution will be applied immediately. Do you want to continue?"
#Controls: "Controls"
#DelayLow: "Fast"
#DelayHigh: "Slow"
#DetailLevel: "Detail Level"
#Difficulty: "Difficulty"
#DifficultyEasy: "Easy"
#DifficultyHard: "Hard"
#DistanceHigh: "Far"
#DistanceLow: "Near"
#EnableController: "Enable Controller"
#FieldOfViewLow: "Low"
#FieldOfViewHigh: "High"
#GammaCorrection: "Gamma Correction"
#GammaDark: "Dark"
#GammaLight: "Light"
#InvertYAxis: "Invert Y Axis"
#MenuHelpDelay: "Menu Help Delay"
#MenuTransparency: "Menu Transparency"
#Preferences: "Prefs"
#QualityHigh: "High"
#QualityLow: "Low"
#QualityMedium: "Medium"
#RebindAction: "Press a key or button to rebind this control."
#ResetControls: "Reset Controls"
#SensitivityHigh: "High"
#SensitivityLow: "Low"
#SettingsWindow: "Options"
#Subtitles: "Subtitles"
#TransparencyFull: "Full"
#TransparencyNone: "None"
#Video: "Video"
#ViewDistance: "View Distance"

@ -1,3 +1,7 @@
# Console
ConsoleWindow: "Консоль"
# Debug window # Debug window
DebugWindow: "Меню отладки" DebugWindow: "Меню отладки"
@ -8,11 +12,33 @@ PhysicsProfiler: "Профилировщик физики"
# Messages # Messages
AskLoadLastSave: "Последнее сохранение - '%s'. Загрузить?"
BuildingNavigationMesh: "Построение навигационной сетки" BuildingNavigationMesh: "Построение навигационной сетки"
InitializingData: "Загрузка..."
LoadingExterior: "Загрузка области"
LoadingFailed: "Не удалось загрузить сохраненную игру"
LoadingInterior: "Загрузка области"
LoadingInProgress: "Загрузка сохранения"
LoadingRequiresNewVersionError: |-
Это сохранение создано более новой версией OpenMW и поэтому не может быть загружено.
Обновите OpenMW до последней версии, чтобы загрузить этот файл.
NewGameConfirmation: "Вы хотите начать новую игру? Текущая игра будет потеряна."
SaveGameDenied: "В данный момент игру нельзя сохранить."
SavingInProgress: "Сохранение..."
QuitGameConfirmation: "Выйти из игры?"
# Save game menu # Save game menu
DeleteGame: "Удалить игру"
DeleteGameConfirmation: "Вы уверены, что хотите удалить это сохранение?"
EmptySaveNameError: "Имя сохранения не может быть пустым!"
LoadGameConfirmation: "Вы хотите загрузить сохранение? Текущая игра будет потеряна."
MissingContentFilesConfirmation: |
Выбранные ESM/ESP файлы не соответствуют тем, которые использовались для этого сохранения.
Во время загрузки или в процессе игры могут возникнуть ошибки.
Вы хотите продолжить?
OverwriteGameConfirmation: "Вы уверены, что хотите перезаписать это сохранение?"
SelectCharacter: "Выберите персонажа..." SelectCharacter: "Выберите персонажа..."
TimePlayed: "Время в игре" TimePlayed: "Время в игре"
@ -21,14 +47,38 @@ TimePlayed: "Время в игре"
ActorsProcessingRange: "Дальность обработки персонажей" ActorsProcessingRange: "Дальность обработки персонажей"
Anisotropy: "Анизотропная фильтрация" Anisotropy: "Анизотропная фильтрация"
Audio: "Звук"
AudioEffects: "Эффекты"
AudioFootsteps: "Шаги"
AudioMaster: "Общая громкость"
AudioMusic: "Музыка"
AudioVoice: "Голос"
CameraSensitivity: "Чувствительность камеры" CameraSensitivity: "Чувствительность камеры"
CameraZoomIn: "Приблизить камеру" CameraZoomIn: "Приблизить камеру"
CameraZoomOut: "Отдалить камеру" CameraZoomOut: "Отдалить камеру"
ChangeRequiresRestart: "Чтобы это изменение вступило в силу, нужно перезапустить приложение." ChangeRequiresRestart: "Чтобы это изменение вступило в силу, нужно перезапустить приложение."
ConfirmResetBindings: "Сбросить все настройки управления?"
ConfirmResolution: "Разрешение будет изменено немедленно. Продолжить?"
Controller: "Геймпад" Controller: "Геймпад"
Controls: "Управление"
DelayLow: "Маленькая"
DelayHigh: "Большая"
DetailLevel: "Уровень детализации"
Difficulty: "Сложность"
DifficultyEasy: "Легко"
DifficultyHard: "Сложно"
DistanceHigh: "Далеко"
DistanceLow: "Близко"
EnableController: "Геймпад"
FieldOfView: "Поле зрения" FieldOfView: "Поле зрения"
FieldOfViewLow: "Маленькое"
FieldOfViewHigh: "Большое"
FrameRateHint: "Подсказка: нажмите F3, чтобы показать\nтекущую частоту смены кадров." FrameRateHint: "Подсказка: нажмите F3, чтобы показать\nтекущую частоту смены кадров."
GammaCorrection: "Гамма-коррекция"
GammaDark: "Темно"
GammaLight: "Светло"
InvertXAxis: "Инвертировать ось X" InvertXAxis: "Инвертировать ось X"
InvertYAxis: "Инвертировать ось Y"
Language: "Язык" Language: "Язык"
LanguageNote: "Примечание: эти настройки не затрагивают строки из ESM-файлов." LanguageNote: "Примечание: эти настройки не затрагивают строки из ESM-файлов."
LightingMethod: "Способ освещения" LightingMethod: "Способ освещения"
@ -47,11 +97,17 @@ LightsMinimumInteriorBrightness: "Минимальный уровень осве
LightsMinimumInteriorBrightnessTooltip: "Значение по умолчанию: 0.08\nМинимальный уровень фонового освещения в помещениях.\n\nУвеличьте значение, если помещения в игре кажутся слишком темными." LightsMinimumInteriorBrightnessTooltip: "Значение по умолчанию: 0.08\nМинимальный уровень фонового освещения в помещениях.\n\nУвеличьте значение, если помещения в игре кажутся слишком темными."
MaxLights: "Макс. кол-во источников света" MaxLights: "Макс. кол-во источников света"
MaxLightsTooltip: "Значение по умолчанию: 8\nМаксимальное количество источников света для каждого объекта.\n\nНизкие числа (близкие к значению по умолчанию) приводят к резким перепадам освещения, как при устаревшем методе освещения." MaxLightsTooltip: "Значение по умолчанию: 8\nМаксимальное количество источников света для каждого объекта.\n\nНизкие числа (близкие к значению по умолчанию) приводят к резким перепадам освещения, как при устаревшем методе освещения."
MenuHelpDelay: "Задержка всплывающих подсказок"
MenuTransparency: "Прозрачность меню"
MouseAndKeyboard: "Мышь/Клавиатура" MouseAndKeyboard: "Мышь/Клавиатура"
PostProcessing: "Постобработка" PostProcessing: "Постобработка"
PostProcessingTooltip: "Настраивается через меню настроек постобработки, см. привязки клавиш." PostProcessingTooltip: "Настраивается через меню настроек постобработки, см. привязки клавиш."
Preferences: "Настройки"
PrimaryLanguage: "Основной язык" PrimaryLanguage: "Основной язык"
PrimaryLanguageTooltip: "Язык, строки на котором будут использоваться в первую очередь." PrimaryLanguageTooltip: "Язык, строки на котором будут использоваться в первую очередь."
QualityHigh: "Высокое"
QualityLow: "Низкое"
QualityMedium: "Среднее"
RainRippleDetail: "Капли дождя на воде" RainRippleDetail: "Капли дождя на воде"
RainRippleDetailDense: "Плотные" RainRippleDetailDense: "Плотные"
RainRippleDetailSimple: "Упрощенные" RainRippleDetailSimple: "Упрощенные"
@ -64,18 +120,28 @@ ReflectionShaderDetailSky: "Небо"
ReflectionShaderDetailTerrain: "Ландшафт" ReflectionShaderDetailTerrain: "Ландшафт"
ReflectionShaderDetailWorld: "Мир" ReflectionShaderDetailWorld: "Мир"
Refraction: "Рефракция" Refraction: "Рефракция"
RebindAction: "Нажмите клавишу, которую нужно назначить на это действие."
ResetControls: "Сбросить"
Screenshot: "Снимок экрана" Screenshot: "Снимок экрана"
Scripts: "Скрипты" Scripts: "Скрипты"
ScriptsDisabled: "Загрузите игру, чтобы получить доступ к настройкам скриптов." ScriptsDisabled: "Загрузите игру, чтобы получить доступ к настройкам скриптов."
SecondaryLanguage: "Дополнительный язык" SecondaryLanguage: "Дополнительный язык"
SecondaryLanguageTooltip: "Язык, строки на котором будут использоваться, если соответствующие строки на основном языке не найдены." SecondaryLanguageTooltip: "Язык, строки на котором будут использоваться, если соответствующие строки на основном языке не найдены."
SensitivityHigh: "Высокая"
SensitivityLow: "Низкая"
SettingsWindow: "Настройки"
Subtitles: "Субтитры"
TextureFiltering: "Фильтрация текстур" TextureFiltering: "Фильтрация текстур"
TextureFilteringBilinear: "Билинейная" TextureFilteringBilinear: "Билинейная"
TextureFilteringDisabled: "Отключена" TextureFilteringDisabled: "Отключена"
TextureFilteringOther: "Другая" TextureFilteringOther: "Другая"
TextureFilteringTrilinear: "Трилинейная" TextureFilteringTrilinear: "Трилинейная"
TransparencyFull: "Прозрачное"
TransparencyNone: "Непрозрачное"
ToggleHUD: "Переключить HUD" ToggleHUD: "Переключить HUD"
TogglePostProcessorHUD: "Меню настроек постобработки" TogglePostProcessorHUD: "Меню настроек постобработки"
ViewDistance: "Дальность обзора"
Video: "Видео"
VSync: "Вертикальная синхронизация" VSync: "Вертикальная синхронизация"
VSyncAdaptive: "Адаптивная" VSyncAdaptive: "Адаптивная"
Water: "Вода" Water: "Вода"

@ -1,3 +1,9 @@
# Console
#-- To be translated
#ConsoleWindow: "Console"
# Debug window # Debug window
DebugWindow: "Felsökning" DebugWindow: "Felsökning"
@ -9,6 +15,21 @@ PhysicsProfiler: "Fysikprofilerare"
BuildingNavigationMesh: "Bygger navigeringsmesh" BuildingNavigationMesh: "Bygger navigeringsmesh"
#-- To be translated
#AskLoadLastSave: "The most recent save is '%s'. Do you want to load it?"
#InitializingData: "Initializing Data..."
#LoadingExterior: "Loading Area"
#LoadingFailed: "Failed to load saved game"
#LoadingInterior: "Loading Area"
#LoadingInProgress: "Loading Save Game"
#LoadingRequiresNewVersionError: |-
# This save file was created using a newer version of OpenMW and is thus not supported.
# Please upgrade to the newest OpenMW version to load this file.
#NewGameConfirmation: "Do you want to start a new game and lose the current one?"
#SaveGameDenied: "The game cannot be saved right now."
#SavingInProgress: "Saving..."
#QuitGameConfirmation: "Quit the game?"
# Save game menu # Save game menu
@ -16,6 +37,18 @@ SelectCharacter: "Välj spelfigur..."
TimePlayed: "Speltid" TimePlayed: "Speltid"
#-- To be translated
#DeleteGame: "Delete Game"
#DeleteGameConfirmation: "Are you sure you want to delete this saved game?"
#EmptySaveNameError: "Game can not be saved without a name!"
#LoadGameConfirmation: "Do you want to load a saved game and lose the current one?"
#MissingContentFilesConfirmation: |
# The currently selected content files do not match the ones used by this save game.
# Errors may occur during load or game play.
# Do you wish to continue?
#OverwriteGameConfirmation: "Are you sure you want to overwrite this saved game?"
# Settings menu # Settings menu
ActorsProcessingRange: "Processavstånd för figurer" ActorsProcessingRange: "Processavstånd för figurer"
@ -86,3 +119,44 @@ WindowModeHint: "Notera: Fullskärm i fönsterläge\nanvänder alltid skärmens
WindowModeWindowed: "Fönster" WindowModeWindowed: "Fönster"
WindowModeWindowedFullscreen: "Fullskärm i fönsterläge" WindowModeWindowedFullscreen: "Fullskärm i fönsterläge"
#-- To be translated
#Audio: "Audio"
#AudioMaster: "Master"
#AudioVoice: "Voice"
#AudioEffects: "Effects"
#AudioFootsteps: "Footsteps"
#AudioMusic: "Music"
#ConfirmResetBindings: "Reset all controls to the default?"
#ConfirmResolution: "New resolution will be applied immediately. Do you want to continue?"
#Controls: "Controls"
#DelayLow: "Fast"
#DelayHigh: "Slow"
#DetailLevel: "Detail Level"
#Difficulty: "Difficulty"
#DifficultyEasy: "Easy"
#DifficultyHard: "Hard"
#DistanceHigh: "Far"
#DistanceLow: "Near"
#EnableController: "Enable Controller"
#FieldOfViewLow: "Low"
#FieldOfViewHigh: "High"
#GammaCorrection: "Gamma Correction"
#GammaDark: "Dark"
#GammaLight: "Light"
#InvertYAxis: "Invert Y Axis"
#MenuHelpDelay: "Menu Help Delay"
#MenuTransparency: "Menu Transparency"
#Preferences: "Prefs"
#QualityHigh: "High"
#QualityLow: "Low"
#QualityMedium: "Medium"
#RebindAction: "Press a key or button to rebind this control."
#ResetControls: "Reset Controls"
#SensitivityHigh: "High"
#SensitivityLow: "Low"
#SettingsWindow: "Options"
#Subtitles: "Subtitles"
#TransparencyFull: "Full"
#TransparencyNone: "None"
#Video: "Video"
#ViewDistance: "View Distance"

@ -110,7 +110,7 @@
</Widget> </Widget>
<Widget type="AutoSizedButton" skin="MW_Button" name="CancelButton"> <Widget type="AutoSizedButton" skin="MW_Button" name="CancelButton">
<Property key="Caption" value="#{sCancel}"/> <Property key="Caption" value="#{Interface:Cancel}"/>
</Widget> </Widget>
</Widget> </Widget>

@ -22,7 +22,7 @@
<Property key="Caption" value="#{sBack}"/> <Property key="Caption" value="#{sBack}"/>
</Widget> </Widget>
<Widget type="AutoSizedButton" skin="MW_Button" name="OKButton"> <Widget type="AutoSizedButton" skin="MW_Button" name="OKButton">
<Property key="Caption" value="#{sOk}"/> <Property key="Caption" value="#{Interface:OK}"/>
</Widget> </Widget>
</Widget> </Widget>

@ -79,7 +79,7 @@
<Property key="Caption" value="#{sBack}"/> <Property key="Caption" value="#{sBack}"/>
</Widget> </Widget>
<Widget type="AutoSizedButton" skin="MW_Button" name="OKButton"> <Widget type="AutoSizedButton" skin="MW_Button" name="OKButton">
<Property key="Caption" value="#{sOK}"/> <Property key="Caption" value="#{Interface:OK}"/>
</Widget> </Widget>
</Widget> </Widget>

@ -83,7 +83,7 @@
<Property key="Caption" value="#{sBack}"/> <Property key="Caption" value="#{sBack}"/>
</Widget> </Widget>
<Widget type="AutoSizedButton" skin="MW_Button" name="OKButton"> <Widget type="AutoSizedButton" skin="MW_Button" name="OKButton">
<Property key="Caption" value="#{sOK}"/> <Property key="Caption" value="#{Interface:OK}"/>
</Widget> </Widget>
</Widget> </Widget>

@ -29,7 +29,7 @@
<Property key="Caption" value="#{sBack}"/> <Property key="Caption" value="#{sBack}"/>
</Widget> </Widget>
<Widget type="AutoSizedButton" skin="MW_Button" name="OKButton"> <Widget type="AutoSizedButton" skin="MW_Button" name="OKButton">
<Property key="Caption" value="#{sOK}"/> <Property key="Caption" value="#{Interface:OK}"/>
</Widget> </Widget>
</Widget> </Widget>
</Widget> </Widget>

@ -82,7 +82,7 @@
<Property key="Caption" value="#{sBack}"/> <Property key="Caption" value="#{sBack}"/>
</Widget> </Widget>
<Widget type="AutoSizedButton" skin="MW_Button" position="532 397 42 23" name="OKButton"> <Widget type="AutoSizedButton" skin="MW_Button" position="532 397 42 23" name="OKButton">
<Property key="Caption" value="#{sOK}"/> <Property key="Caption" value="#{Interface:OK}"/>
</Widget> </Widget>
</Widget> </Widget>
</Widget> </Widget>

@ -117,7 +117,7 @@
<Property key="Caption" value="#{sBack}"/> <Property key="Caption" value="#{sBack}"/>
</Widget> </Widget>
<Widget type="AutoSizedButton" skin="MW_Button" name="OKButton"> <Widget type="AutoSizedButton" skin="MW_Button" name="OKButton">
<Property key="Caption" value="#{sOK}"/> <Property key="Caption" value="#{Interface:OK}"/>
</Widget> </Widget>
</Widget> </Widget>
</Widget> </Widget>

@ -24,7 +24,7 @@
<Widget type="Spacer" /> <Widget type="Spacer" />
<Widget type="AutoSizedButton" skin="MW_Button" align="Right Bottom" name="CancelButton"> <Widget type="AutoSizedButton" skin="MW_Button" align="Right Bottom" name="CancelButton">
<Property key="ExpandDirection" value="Left Up"/> <Property key="ExpandDirection" value="Left Up"/>
<Property key="Caption" value="#{sCancel}"/> <Property key="Caption" value="#{Interface:Cancel}"/>
</Widget> </Widget>
</Widget> </Widget>

@ -59,7 +59,7 @@
<Widget type="Spacer" /> <Widget type="Spacer" />
<Widget type="AutoSizedButton" skin="MW_Button" align="Right Bottom" name="CancelButton"> <Widget type="AutoSizedButton" skin="MW_Button" align="Right Bottom" name="CancelButton">
<Property key="ExpandDirection" value="Left Up"/> <Property key="ExpandDirection" value="Left Up"/>
<Property key="Caption" value="#{sCancel}"/> <Property key="Caption" value="#{Interface:Cancel}"/>
</Widget> </Widget>
</Widget> </Widget>

@ -26,7 +26,7 @@
<Widget type="Spacer" /> <Widget type="Spacer" />
<Widget type="AutoSizedButton" skin="MW_Button" align="Right Bottom" name="CancelButton"> <Widget type="AutoSizedButton" skin="MW_Button" align="Right Bottom" name="CancelButton">
<Property key="ExpandDirection" value="Left Up"/> <Property key="ExpandDirection" value="Left Up"/>
<Property key="Caption" value="#{sCancel}"/> <Property key="Caption" value="#{Interface:Cancel}"/>
</Widget> </Widget>
</Widget> </Widget>

@ -22,7 +22,7 @@
<Widget type="AutoSizedTextBox" skin="SandText" name="ProfitLabel"> <Widget type="AutoSizedTextBox" skin="SandText" name="ProfitLabel">
</Widget> </Widget>
<Widget type="AutoSizedButton" skin="MW_Button" name="CloseButton"> <Widget type="AutoSizedButton" skin="MW_Button" name="CloseButton">
<Property key="Caption" value="#{sClose}"/> <Property key="Caption" value="#{Interface:Close}"/>
</Widget> </Widget>
</Widget> </Widget>

@ -18,10 +18,10 @@
<Property key="Spacing" value="8"/> <Property key="Spacing" value="8"/>
<Widget type="AutoSizedButton" skin="MW_Button" name="OkButton" align="Center Bottom"> <Widget type="AutoSizedButton" skin="MW_Button" name="OkButton" align="Center Bottom">
<Property key="Caption" value="#{sYes}"/> <Property key="Caption" value="#{Interface:Yes}"/>
</Widget> </Widget>
<Widget type="AutoSizedButton" skin="MW_Button" name="CancelButton" align="Center Bottom"> <Widget type="AutoSizedButton" skin="MW_Button" name="CancelButton" align="Center Bottom">
<Property key="Caption" value="#{sNo}"/> <Property key="Caption" value="#{Interface:No}"/>
</Widget> </Widget>
</Widget> </Widget>

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<MyGUI type="Layout"> <MyGUI type="Layout">
<Widget type="Window" skin="MW_Window" position="0 0 400 400" layer="Console" name="_Main"> <Widget type="Window" skin="MW_Window" position="0 0 400 400" layer="Console" name="_Main">
<Property key="Caption" value="#{sConsoleTitle}"/> <Property key="Caption" value="#{OMWEngine:ConsoleWindow}"/>
<Property key="MinSize" value="40 40"/> <Property key="MinSize" value="40 40"/>
<Property key="Visible" value="false"/> <Property key="Visible" value="false"/>

@ -19,7 +19,7 @@
<Property key="Caption" value="#{sTakeAll}"/> <Property key="Caption" value="#{sTakeAll}"/>
</Widget> </Widget>
<Widget type="AutoSizedButton" skin="MW_Button" name="CloseButton" align="Right Bottom"> <Widget type="AutoSizedButton" skin="MW_Button" name="CloseButton" align="Right Bottom">
<Property key="Caption" value="#{sClose}"/> <Property key="Caption" value="#{Interface:Close}"/>
</Widget> </Widget>
</Widget> </Widget>

@ -19,10 +19,10 @@
<Widget type="HBox" skin="" position="0 91 592 28" align="Center Bottom HStretch"> <Widget type="HBox" skin="" position="0 91 592 28" align="Center Bottom HStretch">
<Widget type="Spacer" /> <Widget type="Spacer" />
<Widget type="AutoSizedButton" skin="MW_Button" position="0 0 53 28" align="Left Top" name="OkButton"> <Widget type="AutoSizedButton" skin="MW_Button" position="0 0 53 28" align="Left Top" name="OkButton">
<Property key="Caption" value="#{sOk}"/> <Property key="Caption" value="#{Interface:OK}"/>
</Widget> </Widget>
<Widget type="AutoSizedButton" skin="MW_Button" position="0 0 86 28" align="Right Top" name="CancelButton"> <Widget type="AutoSizedButton" skin="MW_Button" position="0 0 86 28" align="Right Top" name="CancelButton">
<Property key="Caption" value="#{sCancel}"/> <Property key="Caption" value="#{Interface:Cancel}"/>
</Widget> </Widget>
<Widget type="Spacer" /> <Widget type="Spacer" />
</Widget> </Widget>

@ -109,11 +109,11 @@
</Widget> </Widget>
<Widget type="AutoSizedButton" skin="MW_Button" name="OkButton"> <Widget type="AutoSizedButton" skin="MW_Button" name="OkButton">
<Property key="Caption" value="#{sOk}"/> <Property key="Caption" value="#{Interface:OK}"/>
</Widget> </Widget>
<Widget type="AutoSizedButton" skin="MW_Button" name="CancelButton"> <Widget type="AutoSizedButton" skin="MW_Button" name="CancelButton">
<Property key="Caption" value="#{sCancel}"/> <Property key="Caption" value="#{Interface:Cancel}"/>
</Widget> </Widget>
</Widget> </Widget>

@ -21,10 +21,10 @@
<Property key="Caption" value="#{sDelete}"/> <Property key="Caption" value="#{sDelete}"/>
</Widget> </Widget>
<Widget type="AutoSizedButton" skin="MW_Button" name="OkButton"> <Widget type="AutoSizedButton" skin="MW_Button" name="OkButton">
<Property key="Caption" value="#{sOk}"/> <Property key="Caption" value="#{Interface:OK}"/>
</Widget> </Widget>
<Widget type="AutoSizedButton" skin="MW_Button" name="CancelButton"> <Widget type="AutoSizedButton" skin="MW_Button" name="CancelButton">
<Property key="Caption" value="#{sCancel}"/> <Property key="Caption" value="#{Interface:Cancel}"/>
</Widget> </Widget>
</Widget> </Widget>

@ -156,7 +156,7 @@
</Widget> </Widget>
<Widget type="AutoSizedButton" skin="MW_Button" name="CancelButton"> <Widget type="AutoSizedButton" skin="MW_Button" name="CancelButton">
<Property key="Caption" value="#{sCancel}"/> <Property key="Caption" value="#{Interface:Cancel}"/>
</Widget> </Widget>
</Widget> </Widget>

@ -9,7 +9,7 @@
<Widget type="AutoSizedButton" skin="MW_Button" position="340 240 24 24" name="CancelButton"> <Widget type="AutoSizedButton" skin="MW_Button" position="340 240 24 24" name="CancelButton">
<Property key="ExpandDirection" value="Left"/> <Property key="ExpandDirection" value="Left"/>
<Property key="Caption" value="#{sCancel}"/> <Property key="Caption" value="#{Interface:Cancel}"/>
</Widget> </Widget>

@ -158,7 +158,7 @@
<UserString key="HStretch" value="true"/> <UserString key="HStretch" value="true"/>
<Widget type="Spacer"/> <Widget type="Spacer"/>
<Widget type="AutoSizedButton" skin="MW_Button" position="0 0 0 24" name="OkButton"> <Widget type="AutoSizedButton" skin="MW_Button" position="0 0 0 24" name="OkButton">
<Property key="Caption" value="#{sOk}"/> <Property key="Caption" value="#{Interface:OK}"/>
</Widget> </Widget>
</Widget> </Widget>

@ -11,7 +11,7 @@
<Widget type="AutoSizedButton" skin="MW_Button" name="CancelButton" position="284 330 32 24" align="Right Bottom"> <Widget type="AutoSizedButton" skin="MW_Button" name="CancelButton" position="284 330 32 24" align="Right Bottom">
<Property key="ExpandDirection" value="Left"/> <Property key="ExpandDirection" value="Left"/>
<Property key="Caption" value="#{sCancel}"/> <Property key="Caption" value="#{Interface:Cancel}"/>
</Widget> </Widget>
</Widget> </Widget>

@ -24,7 +24,7 @@
</Widget> </Widget>
<Widget type="AutoSizedButton" skin="MW_Button" position="343 209 56 24" name="OkButton" align="Right Top"> <Widget type="AutoSizedButton" skin="MW_Button" position="343 209 56 24" name="OkButton" align="Right Top">
<Property key="ExpandDirection" value="Left"/> <Property key="ExpandDirection" value="Left"/>
<Property key="Caption" value="#{sOK}"/> <Property key="Caption" value="#{Interface:OK}"/>
</Widget> </Widget>
</Widget> </Widget>

@ -41,7 +41,7 @@
<Widget type="AutoSizedButton" skin="MW_Button" position="204 154 0 24" align="Right Bottom" name="CancelButton"> <Widget type="AutoSizedButton" skin="MW_Button" position="204 154 0 24" align="Right Bottom" name="CancelButton">
<Property key="ExpandDirection" value="Left"/> <Property key="ExpandDirection" value="Left"/>
<Property key="Caption" value="#{sCancel}"/> <Property key="Caption" value="#{Interface:Cancel}"/>
</Widget> </Widget>
</Widget> </Widget>

@ -45,7 +45,7 @@
<UserString key="HStretch" value="true"/> <UserString key="HStretch" value="true"/>
<UserString key="VStretch" value="true"/> <UserString key="VStretch" value="true"/>
<Property key="TextAlign" value="Center"/> <Property key="TextAlign" value="Center"/>
<Property key="Caption" value="#{sOn}"/> <Property key="Caption" value="#{Interface:On}"/>
</Widget> </Widget>
</Widget> </Widget>
</Widget> </Widget>

@ -32,7 +32,7 @@
<Widget type="AutoSizedButton" skin="MW_Button" name="OKButton" position="315 190 32 24" align="Right Bottom"> <Widget type="AutoSizedButton" skin="MW_Button" name="OKButton" position="315 190 32 24" align="Right Bottom">
<Property key="ExpandDirection" value="Left"/> <Property key="ExpandDirection" value="Left"/>
<Property key="Caption" value="#{sOK}"/> <Property key="Caption" value="#{Interface:OK}"/>
</Widget> </Widget>
</Widget> </Widget>

@ -21,7 +21,7 @@
<Widget type="Button" skin="MW_Button" position="8 112 0 24" name="CancelButton"> <Widget type="Button" skin="MW_Button" position="8 112 0 24" name="CancelButton">
<Property key="Caption" value="#{sCancel}"/> <Property key="Caption" value="#{Interface:Cancel}"/>
</Widget> </Widget>
</Widget> </Widget>

@ -30,7 +30,7 @@
<Widget type="Spacer"/> <Widget type="Spacer"/>
<Widget type="AutoSizedButton" skin="MW_Button" name="CancelButton"> <Widget type="AutoSizedButton" skin="MW_Button" name="CancelButton">
<Property key="Caption" value="#{sCancel}"/> <Property key="Caption" value="#{Interface:Cancel}"/>
</Widget> </Widget>
</Widget> </Widget>
</Widget> </Widget>

@ -37,7 +37,7 @@
<Widget type="Spacer"/> <Widget type="Spacer"/>
<Widget type="AutoSizedButton" skin="MW_Button" name="CancelButton"> <Widget type="AutoSizedButton" skin="MW_Button" name="CancelButton">
<Property key="Caption" value="#{sCancel}"/> <Property key="Caption" value="#{Interface:Cancel}"/>
</Widget> </Widget>
</Widget> </Widget>
</Widget> </Widget>

@ -54,7 +54,7 @@
<UserString key="HStretch" value="true"/> <UserString key="HStretch" value="true"/>
<Widget type="AutoSizedButton" skin="MW_Button" name="DeleteButton"> <Widget type="AutoSizedButton" skin="MW_Button" name="DeleteButton">
<Property key="Caption" value="#{sDeleteGame}"/> <Property key="Caption" value="#{OMWEngine:DeleteGame}"/>
</Widget> </Widget>
<Widget type="EditBox" skin="MW_TextEdit" name="SaveNameEdit"> <Widget type="EditBox" skin="MW_TextEdit" name="SaveNameEdit">
@ -63,10 +63,10 @@
</Widget> </Widget>
<Widget type="AutoSizedButton" skin="MW_Button" name="OkButton"> <Widget type="AutoSizedButton" skin="MW_Button" name="OkButton">
<Property key="Caption" value="#{sOk}"/> <Property key="Caption" value="#{Interface:OK}"/>
</Widget> </Widget>
<Widget type="AutoSizedButton" skin="MW_Button" name="CancelButton"> <Widget type="AutoSizedButton" skin="MW_Button" name="CancelButton">
<Property key="Caption" value="#{sCancel}"/> <Property key="Caption" value="#{Interface:Cancel}"/>
</Widget> </Widget>
</Widget> </Widget>

@ -5,10 +5,10 @@
<Widget type="TabControl" skin="TabControl" position="8 8 368 405" align="Stretch" name="SettingsTab"> <Widget type="TabControl" skin="TabControl" position="8 8 368 405" align="Stretch" name="SettingsTab">
<Property key="ButtonAutoWidth" value="true"/> <Property key="ButtonAutoWidth" value="true"/>
<Widget type="TabItem"> <Widget type="TabItem">
<Property key="Caption" value=" #{sPrefs} "/> <Property key="Caption" value=" #{OMWEngine:Preferences} "/>
<Widget type="Widget" position="4 4 352 54" align="Left Top HStretch"> <Widget type="Widget" position="4 4 352 54" align="Left Top HStretch">
<Widget type="TextBox" skin="NormalText" position="0 0 352 16" align="Left Top"> <Widget type="TextBox" skin="NormalText" position="0 0 352 16" align="Left Top">
<Property key="Caption" value="#{sTransparency_Menu}"/> <Property key="Caption" value="#{OMWEngine:MenuTransparency}"/>
</Widget> </Widget>
<Widget type="ScrollBar" skin="MW_HScroll" position="0 20 352 14" align="Left Top HStretch"> <Widget type="ScrollBar" skin="MW_HScroll" position="0 20 352 14" align="Left Top HStretch">
<Property key="Range" value="10000"/> <Property key="Range" value="10000"/>
@ -19,17 +19,17 @@
<UserString key="SettingValueType" value="Float"/> <UserString key="SettingValueType" value="Float"/>
</Widget> </Widget>
<Widget type="TextBox" skin="SandText" position="0 38 352 16" align="Left Top"> <Widget type="TextBox" skin="SandText" position="0 38 352 16" align="Left Top">
<Property key="Caption" value="#{sFull}"/> <Property key="Caption" value="#{OMWEngine:TransparencyFull}"/>
<Property key="TextAlign" value="Left"/> <Property key="TextAlign" value="Left"/>
</Widget> </Widget>
<Widget type="TextBox" skin="SandText" position="0 38 352 16" align="Right Top"> <Widget type="TextBox" skin="SandText" position="0 38 352 16" align="Right Top">
<Property key="Caption" value="#{sNone}"/> <Property key="Caption" value="#{OMWEngine:TransparencyNone}"/>
<Property key="TextAlign" value="Right"/> <Property key="TextAlign" value="Right"/>
</Widget> </Widget>
</Widget> </Widget>
<Widget type="Widget" position="4 64 352 54" align="Left Top HStretch"> <Widget type="Widget" position="4 64 352 54" align="Left Top HStretch">
<Widget type="TextBox" skin="NormalText" position="0 0 352 16" align="Left Top"> <Widget type="TextBox" skin="NormalText" position="0 0 352 16" align="Left Top">
<Property key="Caption" value="#{sMenu_Help_Delay}"/> <Property key="Caption" value="#{OMWEngine:MenuHelpDelay}"/>
</Widget> </Widget>
<Widget type="ScrollBar" skin="MW_HScroll" position="0 20 352 14" align="Left Top HStretch"> <Widget type="ScrollBar" skin="MW_HScroll" position="0 20 352 14" align="Left Top HStretch">
<Property key="Range" value="10000"/> <Property key="Range" value="10000"/>
@ -40,17 +40,17 @@
<UserString key="SettingValueType" value="Float"/> <UserString key="SettingValueType" value="Float"/>
</Widget> </Widget>
<Widget type="TextBox" skin="SandText" position="0 38 352 16" align="Left Top"> <Widget type="TextBox" skin="SandText" position="0 38 352 16" align="Left Top">
<Property key="Caption" value="#{sFast}"/> <Property key="Caption" value="#{OMWEngine:DelayLow}"/>
<Property key="TextAlign" value="Left"/> <Property key="TextAlign" value="Left"/>
</Widget> </Widget>
<Widget type="TextBox" skin="SandText" position="0 38 352 16" align="Right Top"> <Widget type="TextBox" skin="SandText" position="0 38 352 16" align="Right Top">
<Property key="Caption" value="#{sSlow}"/> <Property key="Caption" value="#{OMWEngine:DelayHigh}"/>
<Property key="TextAlign" value="Right"/> <Property key="TextAlign" value="Right"/>
</Widget> </Widget>
</Widget> </Widget>
<Widget type="Widget" position="4 124 352 54" align="Left Top HStretch"> <Widget type="Widget" position="4 124 352 54" align="Left Top HStretch">
<Widget type="TextBox" skin="NormalText" position="0 0 352 16" align="Left Top" name="DifficultyText"> <Widget type="TextBox" skin="NormalText" position="0 0 352 16" align="Left Top" name="DifficultyText">
<Property key="Caption" value="#{sDifficulty}"/> <Property key="Caption" value="#{OMWEngine:Difficulty}"/>
</Widget> </Widget>
<Widget type="ScrollBar" skin="MW_HScroll" position="0 20 352 14" align="Left Top HStretch"> <Widget type="ScrollBar" skin="MW_HScroll" position="0 20 352 14" align="Left Top HStretch">
<Property key="Range" value="201"/> <Property key="Range" value="201"/>
@ -62,14 +62,14 @@
<UserString key="SettingMin" value="-100"/> <UserString key="SettingMin" value="-100"/>
<UserString key="SettingMax" value="100"/> <UserString key="SettingMax" value="100"/>
<UserString key="SettingLabelWidget" value="DifficultyText"/> <UserString key="SettingLabelWidget" value="DifficultyText"/>
<UserString key="SettingLabelCaption" value="#{sDifficulty} (%s)"/> <UserString key="SettingLabelCaption" value="#{OMWEngine:Difficulty} (%s)"/>
</Widget> </Widget>
<Widget type="TextBox" skin="SandText" position="0 38 352 16" align="Left Top"> <Widget type="TextBox" skin="SandText" position="0 38 352 16" align="Left Top">
<Property key="Caption" value="#{sEasy}"/> <Property key="Caption" value="#{OMWEngine:DifficultyEasy}"/>
<Property key="TextAlign" value="Left"/> <Property key="TextAlign" value="Left"/>
</Widget> </Widget>
<Widget type="TextBox" skin="SandText" position="0 38 352 16" align="Right Top"> <Widget type="TextBox" skin="SandText" position="0 38 352 16" align="Right Top">
<Property key="Caption" value="#{sHard}"/> <Property key="Caption" value="#{OMWEngine:DifficultyHard}"/>
<Property key="TextAlign" value="Right"/> <Property key="TextAlign" value="Right"/>
</Widget> </Widget>
</Widget> </Widget>
@ -90,11 +90,11 @@
<UserString key="SettingLabelCaption" value="#{OMWEngine:ActorsProcessingRange} (%s)"/> <UserString key="SettingLabelCaption" value="#{OMWEngine:ActorsProcessingRange} (%s)"/>
</Widget> </Widget>
<Widget type="TextBox" skin="SandText" position="0 38 352 16" align="Left Top"> <Widget type="TextBox" skin="SandText" position="0 38 352 16" align="Left Top">
<Property key="Caption" value="#{sLow}"/> <Property key="Caption" value="#{OMWEngine:DistanceLow}"/>
<Property key="TextAlign" value="Left"/> <Property key="TextAlign" value="Left"/>
</Widget> </Widget>
<Widget type="TextBox" skin="SandText" position="0 38 352 16" align="Right Top"> <Widget type="TextBox" skin="SandText" position="0 38 352 16" align="Right Top">
<Property key="Caption" value="#{sHigh}"/> <Property key="Caption" value="#{OMWEngine:DistanceHigh}"/>
<Property key="TextAlign" value="Right"/> <Property key="TextAlign" value="Right"/>
</Widget> </Widget>
</Widget> </Widget>
@ -125,7 +125,7 @@
<UserString key="SettingType" value="CheckButton"/> <UserString key="SettingType" value="CheckButton"/>
</Widget> </Widget>
<Widget type="AutoSizedTextBox" skin="SandText" position="28 4 71 16" align="Left Top"> <Widget type="AutoSizedTextBox" skin="SandText" position="28 4 71 16" align="Left Top">
<Property key="Caption" value="#{sSubtitles}"/> <Property key="Caption" value="#{OMWEngine:Subtitles}"/>
</Widget> </Widget>
</Widget> </Widget>
<Widget type="HBox" position="4 340 260 28"> <Widget type="HBox" position="4 340 260 28">
@ -140,9 +140,9 @@
</Widget> </Widget>
</Widget> </Widget>
<Widget type="TabItem"> <Widget type="TabItem">
<Property key="Caption" value=" #{sAudio} "/> <Property key="Caption" value=" #{OMWEngine:Audio} "/>
<Widget type="TextBox" skin="NormalText" position="4 4 352 18" align="Left Top"> <Widget type="TextBox" skin="NormalText" position="4 4 352 18" align="Left Top">
<Property key="Caption" value="#{sMaster}"/> <Property key="Caption" value="#{OMWEngine:AudioMaster}"/>
</Widget> </Widget>
<Widget type="ScrollBar" skin="MW_HScroll" position="4 28 352 18" align="HStretch Top"> <Widget type="ScrollBar" skin="MW_HScroll" position="4 28 352 18" align="HStretch Top">
<Property key="Range" value="10000"/> <Property key="Range" value="10000"/>
@ -153,7 +153,7 @@
<UserString key="SettingValueType" value="Float"/> <UserString key="SettingValueType" value="Float"/>
</Widget> </Widget>
<Widget type="TextBox" skin="NormalText" position="4 54 352 18" align="Left Top"> <Widget type="TextBox" skin="NormalText" position="4 54 352 18" align="Left Top">
<Property key="Caption" value="#{sVoice}"/> <Property key="Caption" value="#{OMWEngine:AudioVoice}"/>
</Widget> </Widget>
<Widget type="ScrollBar" skin="MW_HScroll" position="4 78 352 18" align="HStretch Top"> <Widget type="ScrollBar" skin="MW_HScroll" position="4 78 352 18" align="HStretch Top">
<Property key="Range" value="10000"/> <Property key="Range" value="10000"/>
@ -164,7 +164,7 @@
<UserString key="SettingValueType" value="Float"/> <UserString key="SettingValueType" value="Float"/>
</Widget> </Widget>
<Widget type="TextBox" skin="NormalText" position="4 104 352 18" align="Left Top"> <Widget type="TextBox" skin="NormalText" position="4 104 352 18" align="Left Top">
<Property key="Caption" value="#{sEffects}"/> <Property key="Caption" value="#{OMWEngine:AudioEffects}"/>
</Widget> </Widget>
<Widget type="ScrollBar" skin="MW_HScroll" position="4 128 352 18" align="HStretch Top"> <Widget type="ScrollBar" skin="MW_HScroll" position="4 128 352 18" align="HStretch Top">
<Property key="Range" value="10000"/> <Property key="Range" value="10000"/>
@ -175,7 +175,7 @@
<UserString key="SettingValueType" value="Float"/> <UserString key="SettingValueType" value="Float"/>
</Widget> </Widget>
<Widget type="TextBox" skin="NormalText" position="4 154 352 18" align="Left Top"> <Widget type="TextBox" skin="NormalText" position="4 154 352 18" align="Left Top">
<Property key="Caption" value="#{sFootsteps}"/> <Property key="Caption" value="#{OMWEngine:AudioFootsteps}"/>
</Widget> </Widget>
<Widget type="ScrollBar" skin="MW_HScroll" position="4 178 352 18" align="HStretch Top"> <Widget type="ScrollBar" skin="MW_HScroll" position="4 178 352 18" align="HStretch Top">
<Property key="Range" value="10000"/> <Property key="Range" value="10000"/>
@ -186,7 +186,7 @@
<UserString key="SettingValueType" value="Float"/> <UserString key="SettingValueType" value="Float"/>
</Widget> </Widget>
<Widget type="TextBox" skin="NormalText" position="4 204 352 18" align="Left Top"> <Widget type="TextBox" skin="NormalText" position="4 204 352 18" align="Left Top">
<Property key="Caption" value="#{sMusic}"/> <Property key="Caption" value="#{OMWEngine:AudioMusic}"/>
</Widget> </Widget>
<Widget type="ScrollBar" skin="MW_HScroll" position="4 228 352 18" align="HStretch Top"> <Widget type="ScrollBar" skin="MW_HScroll" position="4 228 352 18" align="HStretch Top">
<Property key="Range" value="10000"/> <Property key="Range" value="10000"/>
@ -198,7 +198,7 @@
</Widget> </Widget>
</Widget> </Widget>
<Widget type="TabItem"> <Widget type="TabItem">
<Property key="Caption" value=" #{sControls} "/> <Property key="Caption" value=" #{OMWEngine:Controls} "/>
<Widget type="HBox" position="4 4 360 28"> <Widget type="HBox" position="4 4 360 28">
<Property key="Padding" value="0"/> <Property key="Padding" value="0"/>
@ -217,7 +217,7 @@
</Widget> </Widget>
</Widget> </Widget>
<Widget type="AutoSizedButton" skin="MW_Button" position="4 198 137 24" align="Left Bottom" name="ResetControlsButton"> <Widget type="AutoSizedButton" skin="MW_Button" position="4 198 137 24" align="Left Bottom" name="ResetControlsButton">
<Property key="Caption" value="#{sControlsMenu1}"/> <Property key="Caption" value="#{OMWEngine:ResetControls}"/>
</Widget> </Widget>
<Widget type="HBox" position="4 228 600 28" align="Left Bottom"> <Widget type="HBox" position="4 228 600 28" align="Left Bottom">
<Widget type="AutoSizedButton" skin="MW_Button"> <Widget type="AutoSizedButton" skin="MW_Button">
@ -234,7 +234,7 @@
<UserString key="SettingType" value="CheckButton"/> <UserString key="SettingType" value="CheckButton"/>
</Widget> </Widget>
<Widget type="AutoSizedTextBox" skin="SandText" position="56 4 78 16" align="Left Bottom"> <Widget type="AutoSizedTextBox" skin="SandText" position="56 4 78 16" align="Left Bottom">
<Property key="Caption" value="#{sMouseFlip}"/> <Property key="Caption" value="#{OMWEngine:InvertYAxis}"/>
</Widget> </Widget>
</Widget> </Widget>
<Widget type="TextBox" skin="NormalText" position="4 258 352 18" align="Left Bottom"> <Widget type="TextBox" skin="NormalText" position="4 258 352 18" align="Left Bottom">
@ -251,11 +251,11 @@
<UserString key="SettingMax" value="5.0"/> <UserString key="SettingMax" value="5.0"/>
</Widget> </Widget>
<Widget type="TextBox" skin="SandText" position="4 306 352 18" align="Left Bottom"> <Widget type="TextBox" skin="SandText" position="4 306 352 18" align="Left Bottom">
<Property key="Caption" value="#{sLow}"/> <Property key="Caption" value="#{OMWEngine:SensitivityLow}"/>
<Property key="TextAlign" value="Left"/> <Property key="TextAlign" value="Left"/>
</Widget> </Widget>
<Widget type="TextBox" skin="SandText" position="4 306 352 18" align="Right Bottom"> <Widget type="TextBox" skin="SandText" position="4 306 352 18" align="Right Bottom">
<Property key="Caption" value="#{sHigh}"/> <Property key="Caption" value="#{OMWEngine:SensitivityHigh}"/>
<Property key="TextAlign" value="Right"/> <Property key="TextAlign" value="Right"/>
</Widget> </Widget>
<Widget type="HBox" position="4 328 352 28" align="Left Bottom"> <Widget type="HBox" position="4 328 352 28" align="Left Bottom">
@ -265,16 +265,16 @@
<UserString key="SettingType" value="CheckButton"/> <UserString key="SettingType" value="CheckButton"/>
</Widget> </Widget>
<Widget type="AutoSizedTextBox" skin="SandText" position="28 4 78 16" align="Left Bottom"> <Widget type="AutoSizedTextBox" skin="SandText" position="28 4 78 16" align="Left Bottom">
<Property key="Caption" value="#{sEnableJoystick}"/> <Property key="Caption" value="#{OMWEngine:EnableController}"/>
</Widget> </Widget>
</Widget> </Widget>
</Widget> </Widget>
<Widget type="TabItem"> <Widget type="TabItem">
<Property key="Caption" value=" #{sVideo} "/> <Property key="Caption" value=" #{OMWEngine:Video} "/>
<Widget type="TabControl" skin="TabControlInner" position="4 4 352 390" align="Stretch"> <Widget type="TabControl" skin="TabControlInner" position="4 4 352 390" align="Stretch">
<Property key="ButtonAutoWidth" value="true"/> <Property key="ButtonAutoWidth" value="true"/>
<Widget type="TabItem"> <Widget type="TabItem">
<Property key="Caption" value=" #{sVideo} "/> <Property key="Caption" value=" #{OMWEngine:Video} "/>
<Widget type="ListBox" skin="MW_List" position="0 4 195 225" align="Left Top" name="ResolutionList"/> <Widget type="ListBox" skin="MW_List" position="0 4 195 225" align="Left Top" name="ResolutionList"/>
<Widget type="TextBox" skin="NormalText" position="207 4 250 18" align="Left Top"> <Widget type="TextBox" skin="NormalText" position="207 4 250 18" align="Left Top">
<Property key="Caption" value="#{OMWEngine:WindowMode}"/> <Property key="Caption" value="#{OMWEngine:WindowMode}"/>
@ -291,8 +291,8 @@
</Widget> </Widget>
<Widget type="HBox" position="207 74 400 28"> <Widget type="HBox" position="207 74 400 28">
<Widget type="ComboBox" skin="MW_ComboBox" position="0 0 200 24" align="Left Top" name="VSyncModeList"> <Widget type="ComboBox" skin="MW_ComboBox" position="0 0 200 24" align="Left Top" name="VSyncModeList">
<Property key="AddItem" value="#{sOff}"/> <Property key="AddItem" value="#{Interface:Off}"/>
<Property key="AddItem" value="#{sOn}"/> <Property key="AddItem" value="#{Interface:On}"/>
<Property key="AddItem" value="#{OMWEngine:VSyncAdaptive}"/> <Property key="AddItem" value="#{OMWEngine:VSyncAdaptive}"/>
</Widget> </Widget>
</Widget> </Widget>
@ -342,15 +342,15 @@
<UserString key="SettingLabelCaption" value="#{OMWEngine:FieldOfView} (%s)"/> <UserString key="SettingLabelCaption" value="#{OMWEngine:FieldOfView} (%s)"/>
</Widget> </Widget>
<Widget type="TextBox" skin="SandText" position="0 286 352 18" align="Left Top"> <Widget type="TextBox" skin="SandText" position="0 286 352 18" align="Left Top">
<Property key="Caption" value="#{sLow}"/> <Property key="Caption" value="#{OMWEngine:FieldOfViewLow}"/>
<Property key="TextAlign" value="Left"/> <Property key="TextAlign" value="Left"/>
</Widget> </Widget>
<Widget type="TextBox" skin="SandText" position="0 286 352 18" align="Right Top"> <Widget type="TextBox" skin="SandText" position="0 286 352 18" align="Right Top">
<Property key="Caption" value="#{sHigh}"/> <Property key="Caption" value="#{OMWEngine:FieldOfViewHigh}"/>
<Property key="TextAlign" value="Right"/> <Property key="TextAlign" value="Right"/>
</Widget> </Widget>
<Widget type="TextBox" skin="NormalText" position="0 308 352 18" align="Left Top" name="GammaText"> <Widget type="TextBox" skin="NormalText" position="0 308 352 18" align="Left Top" name="GammaText">
<Property key="Caption" value="#{sGamma_Correction}"/> <Property key="Caption" value="#{OMWEngine:GammaCorrection}"/>
</Widget> </Widget>
<Widget type="ScrollBar" skin="MW_HScroll" position="0 332 352 18" align="HStretch Top" name="GammaSlider"> <Widget type="ScrollBar" skin="MW_HScroll" position="0 332 352 18" align="HStretch Top" name="GammaSlider">
<Property key="Range" value="10000"/> <Property key="Range" value="10000"/>
@ -363,16 +363,16 @@
<UserString key="SettingMax" value="3.0"/> <UserString key="SettingMax" value="3.0"/>
</Widget> </Widget>
<Widget type="TextBox" skin="SandText" position="0 356 352 18" align="Left Top" name="GammaTextDark"> <Widget type="TextBox" skin="SandText" position="0 356 352 18" align="Left Top" name="GammaTextDark">
<Property key="Caption" value="#{sDark_Gamma}"/> <Property key="Caption" value="#{OMWEngine:GammaDark}"/>
<Property key="TextAlign" value="Left"/> <Property key="TextAlign" value="Left"/>
</Widget> </Widget>
<Widget type="TextBox" skin="SandText" position="0 356 352 18" align="Right Top" name="GammaTextLight"> <Widget type="TextBox" skin="SandText" position="0 356 352 18" align="Right Top" name="GammaTextLight">
<Property key="Caption" value="#{sLight_Gamma}"/> <Property key="Caption" value="#{OMWEngine:GammaLight}"/>
<Property key="TextAlign" value="Right"/> <Property key="TextAlign" value="Right"/>
</Widget> </Widget>
</Widget> </Widget>
<Widget type="TabItem"> <Widget type="TabItem">
<Property key="Caption" value=" #{sDetail_Level} "/> <Property key="Caption" value=" #{OMWEngine:DetailLevel} "/>
<Widget type="AutoSizedTextBox" skin="NormalText" align="Left Top"> <Widget type="AutoSizedTextBox" skin="NormalText" align="Left Top">
<Property key="Caption" value="#{OMWEngine:TextureFiltering}"/> <Property key="Caption" value="#{OMWEngine:TextureFiltering}"/>
@ -398,7 +398,7 @@
</Widget> </Widget>
<Widget type="AutoSizedTextBox" skin="NormalText" position="0 104 0 18" align="Left Top" name="RenderDistanceLabel"> <Widget type="AutoSizedTextBox" skin="NormalText" position="0 104 0 18" align="Left Top" name="RenderDistanceLabel">
<Property key="Caption" value="#{sRender_Distance}"/> <Property key="Caption" value="#{OMWEngine:ViewDistance}"/>
</Widget> </Widget>
<Widget type="ScrollBar" skin="MW_HScroll" position="0 126 352 18" align="HStretch Top" name="RenderingDistanceSlider"> <Widget type="ScrollBar" skin="MW_HScroll" position="0 126 352 18" align="HStretch Top" name="RenderingDistanceSlider">
<Property key="Range" value="4669"/> <Property key="Range" value="4669"/>
@ -410,7 +410,7 @@
<UserString key="SettingMin" value="2500"/> <UserString key="SettingMin" value="2500"/>
<UserString key="SettingMax" value="7168"/> <UserString key="SettingMax" value="7168"/>
<UserString key="SettingLabelWidget" value="RenderDistanceLabel"/> <UserString key="SettingLabelWidget" value="RenderDistanceLabel"/>
<UserString key="SettingLabelCaption" value="#{sRender_Distance} (%s)"/> <UserString key="SettingLabelCaption" value="#{OMWEngine:ViewDistance} (%s)"/>
</Widget> </Widget>
<Widget type="ScrollBar" skin="MW_HScroll" position="0 126 352 18" align="HStretch Top" name="LargeRenderingDistanceSlider"> <Widget type="ScrollBar" skin="MW_HScroll" position="0 126 352 18" align="HStretch Top" name="LargeRenderingDistanceSlider">
<Property key="Range" value="79421"/> <Property key="Range" value="79421"/>
@ -422,14 +422,14 @@
<UserString key="SettingMin" value="2500"/> <UserString key="SettingMin" value="2500"/>
<UserString key="SettingMax" value="81920"/> <UserString key="SettingMax" value="81920"/>
<UserString key="SettingLabelWidget" value="RenderDistanceLabel"/> <UserString key="SettingLabelWidget" value="RenderDistanceLabel"/>
<UserString key="SettingLabelCaption" value="#{sRender_Distance} (x%s)"/> <UserString key="SettingLabelCaption" value="#{OMWEngine:ViewDistance} (x%s)"/>
</Widget> </Widget>
<Widget type="TextBox" skin="SandText" position="0 148 352 18" align="Left Top"> <Widget type="TextBox" skin="SandText" position="0 148 352 18" align="Left Top">
<Property key="Caption" value="#{sNear}"/> <Property key="Caption" value="#{OMWEngine:DistanceLow}"/>
<Property key="TextAlign" value="Left"/> <Property key="TextAlign" value="Left"/>
</Widget> </Widget>
<Widget type="TextBox" skin="SandText" position="0 148 352 18" align="Right Top"> <Widget type="TextBox" skin="SandText" position="0 148 352 18" align="Right Top">
<Property key="Caption" value="#{sFar}"/> <Property key="Caption" value="#{OMWEngine:DistanceHigh}"/>
<Property key="TextAlign" value="Right"/> <Property key="TextAlign" value="Right"/>
</Widget> </Widget>
@ -479,9 +479,9 @@
<UserString key="HStretch" value="true"/> <UserString key="HStretch" value="true"/>
<UserString key="VStretch" value="false"/> <UserString key="VStretch" value="false"/>
<Widget type="ComboBox" skin="MW_ComboBox" position="0 0 200 24" align="Left Top" name="WaterTextureSize"> <Widget type="ComboBox" skin="MW_ComboBox" position="0 0 200 24" align="Left Top" name="WaterTextureSize">
<Property key="AddItem" value="#{sLow}"/> <Property key="AddItem" value="#{OMWEngine:QualityLow}"/>
<Property key="AddItem" value="#{sMedium}"/> <Property key="AddItem" value="#{OMWEngine:QualityMedium}"/>
<Property key="AddItem" value="#{sHigh}"/> <Property key="AddItem" value="#{OMWEngine:QualityHigh}"/>
</Widget> </Widget>
<Widget type="Spacer" /> <Widget type="Spacer" />
</Widget> </Widget>
@ -634,7 +634,7 @@
<UserString key="SettingLabelCaption" value="#{OMWEngine:LightsMinimumInteriorBrightness} (%s)"/> <UserString key="SettingLabelCaption" value="#{OMWEngine:LightsMinimumInteriorBrightness} (%s)"/>
</Widget> </Widget>
<Widget type="AutoSizedButton" skin="MW_Button" position="0 290 0 0" align="Top Left" name="LightsResetButton"> <Widget type="AutoSizedButton" skin="MW_Button" position="0 290 0 0" align="Top Left" name="LightsResetButton">
<Property key="Caption" value="#{sControlsMenu1}"/> <Property key="Caption" value="#{Interface:Reset}"/>
</Widget> </Widget>
</Widget> </Widget>
</Widget> </Widget>
@ -705,7 +705,7 @@
</Widget> </Widget>
<Widget type="AutoSizedButton" skin="MW_Button" position="320 420 56 24" align="Right Bottom" name="OkButton"> <Widget type="AutoSizedButton" skin="MW_Button" position="320 420 56 24" align="Right Bottom" name="OkButton">
<Property key="ExpandDirection" value="Left"/> <Property key="ExpandDirection" value="Left"/>
<Property key="Caption" value="#{sOK}"/> <Property key="Caption" value="#{Interface:OK}"/>
</Widget> </Widget>
</Widget> </Widget>
<CodeGeneratorSettings/> <CodeGeneratorSettings/>

@ -24,7 +24,7 @@
</Widget> </Widget>
<Widget type="AutoSizedButton" skin="MW_Button" position="375 251 60 24" name="CancelButton" align="Right Top"> <Widget type="AutoSizedButton" skin="MW_Button" position="375 251 60 24" name="CancelButton" align="Right Top">
<Property key="ExpandDirection" value="Left"/> <Property key="ExpandDirection" value="Left"/>
<Property key="Caption" value="#{sOK}"/> <Property key="Caption" value="#{Interface:OK}"/>
</Widget> </Widget>
</Widget> </Widget>

@ -85,7 +85,7 @@
</Widget> </Widget>
<Widget type="AutoSizedButton" skin="MW_Button" name="CancelButton"> <Widget type="AutoSizedButton" skin="MW_Button" name="CancelButton">
<Property key="Caption" value="#{sCancel}"/> <Property key="Caption" value="#{Interface:Cancel}"/>
</Widget> </Widget>
</Widget> </Widget>

@ -12,7 +12,7 @@
<!-- Dialog buttons --> <!-- Dialog buttons -->
<Widget type="AutoSizedButton" skin="MW_Button" position="264 60 42 23" name="OKButton"> <Widget type="AutoSizedButton" skin="MW_Button" position="264 60 42 23" name="OKButton">
<Property key="ExpandDirection" value="Left"/> <Property key="ExpandDirection" value="Left"/>
<Property key="Caption" value="#{sOk}"/> <Property key="Caption" value="#{Interface:OK}"/>
</Widget> </Widget>
</Widget> </Widget>
</MyGUI> </MyGUI>

@ -76,7 +76,7 @@
<Property key="Caption" value="#{sBarterDialog8}"/> <Property key="Caption" value="#{sBarterDialog8}"/>
</Widget> </Widget>
<Widget type="AutoSizedButton" skin="MW_Button" name="CancelButton"> <Widget type="AutoSizedButton" skin="MW_Button" name="CancelButton">
<Property key="Caption" value="#{sCancel}"/> <Property key="Caption" value="#{Interface:Cancel}"/>
</Widget> </Widget>
</Widget> </Widget>

@ -22,7 +22,7 @@
</Widget> </Widget>
<Widget type="AutoSizedButton" skin="MW_Button" position="244 161 60 24" name="CancelButton" align="Right Top"> <Widget type="AutoSizedButton" skin="MW_Button" position="244 161 60 24" name="CancelButton" align="Right Top">
<Property key="ExpandDirection" value="Left"/> <Property key="ExpandDirection" value="Left"/>
<Property key="Caption" value="#{sCancel}"/> <Property key="Caption" value="#{Interface:Cancel}"/>
</Widget> </Widget>
</Widget> </Widget>

@ -25,7 +25,7 @@
</Widget> </Widget>
<Widget type="AutoSizedButton" skin="MW_Button" position="425 212 60 24" name="CancelButton" align="Right Top"> <Widget type="AutoSizedButton" skin="MW_Button" position="425 212 60 24" name="CancelButton" align="Right Top">
<Property key="ExpandDirection" value="Left"/> <Property key="ExpandDirection" value="Left"/>
<Property key="Caption" value="#{sCancel}"/> <Property key="Caption" value="#{Interface:Cancel}"/>
</Widget> </Widget>
</Widget> </Widget>

@ -35,7 +35,7 @@
<Property key="Caption" value="#{sRest}"/> <Property key="Caption" value="#{sRest}"/>
</Widget> </Widget>
<Widget type="AutoSizedButton" skin="MW_Button" name="CancelButton"> <Widget type="AutoSizedButton" skin="MW_Button" name="CancelButton">
<Property key="Caption" value="#{sCancel}"/> <Property key="Caption" value="#{Interface:Cancel}"/>
</Widget> </Widget>
</Widget> </Widget>
</Widget> </Widget>

@ -6,17 +6,13 @@
local core = require('openmw.core') local core = require('openmw.core')
local time = require('openmw_aux.time') local time = require('openmw_aux.time')
local conf = require('openmw_aux.calendarconfig')
local l10n = core.l10n('Calendar') local l10n = core.l10n('Calendar')
local monthsDuration = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31} local monthsDuration = conf.monthsDuration
local daysInWeek = 7
local daysInYear = 0 local daysInYear = 0
for _, d in ipairs(monthsDuration) do daysInYear = daysInYear + d end for _, d in ipairs(monthsDuration) do daysInYear = daysInYear + d end
local startingYear = 427
local startingYearDay = 227
local startingWeekDay = 1
local function gameTime(t) local function gameTime(t)
if not t then if not t then
return core.getGameTime() return core.getGameTime()
@ -43,10 +39,10 @@ local function formatGameTime(formatStr, timestamp)
timestamp = timestamp or core.getGameTime() timestamp = timestamp or core.getGameTime()
local t = {} local t = {}
local day = math.floor(timestamp / time.day) local day = math.floor(timestamp / time.day) + conf.startingYearDay - 1
t.year = math.floor(day / daysInYear) + startingYear t.year = math.floor(day / daysInYear) + conf.startingYear
t.yday = (day + startingYearDay - 1) % daysInYear + 1 t.yday = day % daysInYear + 1
t.wday = (day + startingWeekDay - 1) % daysInWeek + 1 t.wday = (day + conf.startingWeekDay - conf.startingYearDay) % conf.daysInWeek + 1
timestamp = timestamp % time.day timestamp = timestamp % time.day
t.hour = math.floor(timestamp / time.hour) t.hour = math.floor(timestamp / time.hour)
timestamp = timestamp % time.hour timestamp = timestamp % time.hour
@ -75,10 +71,10 @@ local function formatGameTime(formatStr, timestamp)
if tag == '%M' then return string.format('%02d', t.min) end if tag == '%M' then return string.format('%02d', t.min) end
if tag == '%m' then return string.format('%02d', t.month) end if tag == '%m' then return string.format('%02d', t.month) end
if tag == '%p' then if tag == '%p' then
if t.hour > 0 and t.hour <= 12 then if t.hour >= 0 and t.hour < 12 then
return 'am' return l10n('am')
else else
return 'pm' return l10n('pm')
end end
end end
if tag == '%S' then return string.format('%02d', t.sec) end if tag == '%S' then return string.format('%02d', t.sec) end
@ -122,7 +118,7 @@ return {
--- The number of days in a week --- The number of days in a week
-- @field [parent=#calendar] #number daysInWeek -- @field [parent=#calendar] #number daysInWeek
daysInWeek = daysInWeek, daysInWeek = conf.daysInWeek,
--- The number of days in a month --- The number of days in a month
-- @function [parent=#calendar] daysInMonth -- @function [parent=#calendar] daysInMonth
@ -153,7 +149,7 @@ return {
-- @param dayIndex -- @param dayIndex
-- @return #string -- @return #string
weekdayName = function(d) weekdayName = function(d)
return l10n('weekday' .. ((d-1) % daysInWeek + 1)) return l10n('weekday' .. ((d-1) % conf.daysInWeek + 1))
end, end,
} }

@ -0,0 +1,9 @@
return {
monthsDuration = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
daysInWeek = 7,
-- It is the day of OpenMW 0.1.0 release, we use it as default starting date
startingYear = 2008,
startingYearDay = 151,
startingWeekDay = 0,
}
Loading…
Cancel
Save