summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTannin <devnull@localhost>2014-04-05 15:36:42 +0200
committerTannin <devnull@localhost>2014-04-05 15:36:42 +0200
commitcabed9b268c9f095d5e3b98a6797b0bcdcd38b1f (patch)
tree454b03b0c5664e90fe586e7b39603e34a526d35b
parent98e5e57a845541acddf519a81957261f58008cb9 (diff)
parentc017f4a0d50b67a44e276bd5ae8929ed3990c62c (diff)
Merge with branch1.1
-rw-r--r--.hgignore7
-rw-r--r--README.txt190
-rw-r--r--src/ModOrganizer.pro24
-rw-r--r--src/aboutdialog.cpp83
-rw-r--r--src/aboutdialog.h69
-rw-r--r--src/aboutdialog.ui295
-rw-r--r--src/activatemodsdialog.cpp5
-rw-r--r--src/activatemodsdialog.h1
-rw-r--r--src/archivetree.cpp98
-rw-r--r--src/archivetree.h55
-rw-r--r--src/categories.cpp8
-rw-r--r--src/categories.h4
-rw-r--r--src/downloadlist.cpp17
-rw-r--r--src/downloadlistsortproxy.cpp22
-rw-r--r--src/downloadlistwidget.cpp187
-rw-r--r--src/downloadlistwidget.h5
-rw-r--r--src/downloadlistwidget.ui6
-rw-r--r--src/downloadlistwidgetcompact.cpp156
-rw-r--r--src/downloadlistwidgetcompact.h4
-rw-r--r--src/downloadmanager.cpp199
-rw-r--r--src/downloadmanager.h59
-rw-r--r--src/editexecutablesdialog.cpp133
-rw-r--r--src/editexecutablesdialog.h16
-rw-r--r--src/editexecutablesdialog.ui65
-rw-r--r--src/executableslist.cpp12
-rw-r--r--src/finddialog.h73
-rw-r--r--src/icondelegate.cpp49
-rw-r--r--src/icondelegate.h5
-rw-r--r--src/installationmanager.cpp109
-rw-r--r--src/installationmanager.h17
-rw-r--r--src/json.cpp1110
-rw-r--r--src/json.h298
-rw-r--r--src/lockeddialog.cpp104
-rw-r--r--src/lockeddialog.h96
-rw-r--r--src/lockeddialog.ui9
-rw-r--r--src/logbuffer.cpp15
-rw-r--r--src/logbuffer.h2
-rw-r--r--src/main.cpp213
-rw-r--r--src/mainwindow.cpp1120
-rw-r--r--src/mainwindow.h124
-rw-r--r--src/mainwindow.ui223
-rw-r--r--src/messagedialog.cpp10
-rw-r--r--src/messagedialog.h95
-rw-r--r--src/mo_icon.icobin298605 -> 96367 bytes
-rw-r--r--src/moapplication.cpp86
-rw-r--r--src/moapplication.h62
-rw-r--r--src/modflagicondelegate.cpp70
-rw-r--r--src/modflagicondelegate.h19
-rw-r--r--src/modinfo.cpp179
-rw-r--r--src/modinfo.h110
-rw-r--r--src/modinfodialog.cpp132
-rw-r--r--src/modinfodialog.h8
-rw-r--r--src/modinfodialog.ui53
-rw-r--r--src/modlist.cpp166
-rw-r--r--src/modlist.h46
-rw-r--r--src/modlistsortproxy.cpp77
-rw-r--r--src/modlistsortproxy.h9
-rw-r--r--src/modlistview.cpp4
-rw-r--r--src/nexusinterface.cpp126
-rw-r--r--src/nexusinterface.h15
-rw-r--r--src/noeditdelegate.cpp10
-rw-r--r--src/noeditdelegate.h12
-rw-r--r--src/nxmaccessmanager.cpp8
-rw-r--r--src/nxmaccessmanager.h2
-rw-r--r--src/organizer.en.qmbin23 -> 0 bytes
-rw-r--r--src/organizer.en.ts4652
-rw-r--r--src/organizer.pro162
-rw-r--r--src/organizer.qbs43
-rw-r--r--src/organizer_cs.qmbin137168 -> 0 bytes
-rw-r--r--src/organizer_cs.ts1780
-rw-r--r--src/organizer_de.qmbin140302 -> 0 bytes
-rw-r--r--src/organizer_de.ts1789
-rw-r--r--src/organizer_es.qmbin54680 -> 0 bytes
-rw-r--r--src/organizer_es.ts1794
-rw-r--r--src/organizer_fr.qmbin115943 -> 0 bytes
-rw-r--r--src/organizer_fr.ts1785
-rw-r--r--src/organizer_ru.qmbin53312 -> 0 bytes
-rw-r--r--src/organizer_ru.ts3718
-rw-r--r--src/organizer_tr.qmbin45452 -> 0 bytes
-rw-r--r--src/organizer_tr.ts1781
-rw-r--r--src/organizer_zh_CN.qmbin111361 -> 0 bytes
-rw-r--r--src/organizer_zh_CN.ts1788
-rw-r--r--src/organizer_zh_TW.qmbin111395 -> 0 bytes
-rw-r--r--src/organizer_zh_TW.ts1788
-rw-r--r--src/overwriteinfodialog.cpp5
-rw-r--r--src/overwriteinfodialog.h100
-rw-r--r--src/pdll.h402
-rw-r--r--src/pluginflagicondelegate.cpp26
-rw-r--r--src/pluginflagicondelegate.h17
-rw-r--r--src/pluginlist.cpp291
-rw-r--r--src/pluginlist.h87
-rw-r--r--src/pluginlistsortproxy.cpp5
-rw-r--r--src/previewdialog.cpp57
-rw-r--r--src/previewdialog.h36
-rw-r--r--src/previewdialog.ui90
-rw-r--r--src/previewgenerator.cpp55
-rw-r--r--src/previewgenerator.h53
-rw-r--r--src/problemsdialog.cpp31
-rw-r--r--src/problemsdialog.h4
-rw-r--r--src/problemsdialog.ui58
-rw-r--r--src/profile.cpp84
-rw-r--r--src/profile.h11
-rw-r--r--src/profileinputdialog.cpp55
-rw-r--r--src/profilesdialog.cpp45
-rw-r--r--src/questionboxmemory.cpp72
-rw-r--r--src/questionboxmemory.h63
-rw-r--r--src/questionboxmemory.ui139
-rw-r--r--src/resources.qrc6
-rw-r--r--src/resources/arrange-boxes.pngbin0 -> 1634 bytes
-rw-r--r--src/resources/document-save_32.pngbin0 -> 1971 bytes
-rw-r--r--src/resources/edit-undo.pngbin0 -> 1601 bytes
-rw-r--r--src/resources/emblem-favorite - 64.pngbin0 -> 3710 bytes
-rw-r--r--src/resources/mail-attachment.pngbin0 -> 649 bytes
-rw-r--r--src/safewritefile.cpp48
-rw-r--r--src/safewritefile.h (renamed from src/finddialog.cpp)89
-rw-r--r--src/selectiondialog.cpp123
-rw-r--r--src/selectiondialog.h96
-rw-r--r--src/selfupdater.cpp7
-rw-r--r--src/selfupdater.h2
-rw-r--r--src/settings.cpp112
-rw-r--r--src/settings.h59
-rw-r--r--src/settingsdialog.cpp18
-rw-r--r--src/settingsdialog.h4
-rw-r--r--src/settingsdialog.ui224
-rw-r--r--src/shared/appconfig.inc1
-rw-r--r--src/shared/directoryentry.cpp24
-rw-r--r--src/shared/directoryentry.h13
-rw-r--r--src/shared/fallout3info.cpp21
-rw-r--r--src/shared/fallout3info.h6
-rw-r--r--src/shared/falloutnvinfo.cpp12
-rw-r--r--src/shared/falloutnvinfo.h5
-rw-r--r--src/shared/gameinfo.cpp41
-rw-r--r--src/shared/gameinfo.h11
-rw-r--r--src/shared/leaktrace.cpp39
-rw-r--r--src/shared/leaktrace.h4
-rw-r--r--src/shared/oblivioninfo.cpp12
-rw-r--r--src/shared/oblivioninfo.h5
-rw-r--r--src/shared/shared.pro10
-rw-r--r--src/shared/shared.qbs20
-rw-r--r--src/shared/skyriminfo.cpp17
-rw-r--r--src/shared/skyriminfo.h7
-rw-r--r--src/shared/util.cpp3
-rw-r--r--src/spawn.cpp38
-rw-r--r--src/spawn.h12
-rw-r--r--src/splash.pngbin103422 -> 230138 bytes
-rw-r--r--src/transfersavesdialog.ui4
-rw-r--r--src/version.rc4
147 files changed, 16241 insertions, 14308 deletions
diff --git a/.hgignore b/.hgignore
index a74e95aa..0e3fc185 100644
--- a/.hgignore
+++ b/.hgignore
@@ -13,3 +13,10 @@ source - Copy/*
ModOrganizer-build-*
pdbs/*
source/NCC/BossDummy.x/*
+*.ts
+staging_prepare/*
+staging_trans/*
+tools/python_zip/*
+Makefile
+syntax: regexp
+Makefile\.(Debug|Release)
diff --git a/README.txt b/README.txt
index 119cf55f..d2c3e46b 100644
--- a/README.txt
+++ b/README.txt
@@ -1,53 +1,125 @@
HOW TO BUILD
============
+Intro:
+------
+
+Building Mod Organizer can be a rather daunting task especially if you're not very comfortable with C++ development under windows.
+Please note that if you only want to work on and build a plugin you can save yourself a lot of trouble
+
+Overview:
+---------
+
+As of December 2013 MO consists of the following subprojects:
+- organizer: The main userinterface. heavy usage of various libraries
+- hookdll: core library of the virtual file system
+- uibase: interop between plugins and the main application as well as some reusable functionality
+- shared: functionality shared between organizer and hookdll. I'm attempting to get rid of this library over time
+- nxmhandler: tool to pass handling of nxm links to MO or other applications
+- helper: tool for doing operations requiring elevated priviledges if MO doesn't have them
+- proxydll: dll used in the "proxy dll" load mechanism
+- esptk: small library containing functionality to work with esps/esms
+- bsatk: small library containing functionality to work with bsas. Requires zlib to extract files. Requires boost_thread to provide multi-threaded extraction
+- archive: small wrapper library around 7zip for dealing with mod archives. Requires 7zip
+- NCC: extension to NMM to provide a binary with command line interface for fomod installation. This is c# code and does not build with the rest of the project. Requires the rest of NMM
+- bossdummy: dummy dll that looks like the boss.dll. This is used instead of the real boss dlls in NCC to save some disk space
+- pythonrunner: library for embedding python code. Requires boost_python, python 2.7 and pyqt4
+
+And various plugins:
+- checkFNIS: Activates each time an application is started from MO and runs fnis if necessary
+- diagnoseBasic: Various diagnostic checks on the game
+- inieditor: minimalistic file editor for ini files
+- installerBain: handles non-scripted bain installers
+- installerBCF: no functionality. Supposed to eventually allow installations using bcfs (bain conversion file). python code
+- installerBundle: handles installation of archives wrapped in archives
+- installerFomod: handles installation of xml fomods
+- installerManual: handles installations of archives that aren't supported by any other plugin (or if the user chooses to do the installation manually)
+- installerNCC: handles installation of any fomod (requires NCC)
+- installerQuick: handles very simple one-click installations
+- NMMImport: importer from existing nmm installation
+- proxyPython: integrates pythonrunner as a plugin into MO
+- pyniEdit: more user-friendly ini editor. python code
+
+
Requirements:
-------------
Visual C++ compiler 2010 (VC 10.0) or up
-- Included in visual c++ express 2010 or windows sdk 7.0
+- Included in visual c++ express 2010 or windows sdk 7.x
+- Do install windows sdk too if only for the cdb debugger which is included in that package
+Note: If you're having trouble installing the windows sdk, you may be affected by this bug: http://support.microsoft.com/kb/2717426
-QtSDK 4.8.x (http://qt-project.org/downloads)
-- Qt5 is not yet supported but WIP
+Qt Libraries 4.8.x (http://qt-project.org/downloads)
+- i.e. "Qt libraries 4.8.5 for Windows (VS 2010, 235 MB)"
+- tested: 4.8.5
+- Qt5 is not yet supported but WIP. You will see a few conditional qt5 pathes
- Install according to instruction
boost libraries (http://www.boost.org/)
-- Compile according to their instructions (using vc++)
-- As of time of writing boost_thread is the only compiled boost library used, you can
- disable the others to safe yourself the compile time
+- tested: 1.49
+- Build according to their instructions (using vc++): http://www.boost.org/doc/libs/1_54_0/more/getting_started/windows.html
+- A few of the boost libraries need to be built (the rest is header-only). The only compiled libs MO needs (at the time of writing) are
+ boost_thread (for everything that links agains bsatk) and boost_python (for pythonrunner). You can disable the others to save yourself compile time (even on a modern system compiling boost can easily take an hour)
zlib (http://www.zlib.net/)
- Compile static library according to their instructions
-- You should have a "zlibstatic.lib" under "build" afterwards
+- Depending on the version of zlib and how you built you should have a file called zlibstatic.lib or zlibstat.lib in "build" or "x86\ZLibStatRelease".
+- Please copy that lib file to "build\zlibstatic.lib" (if it doesn't exist) so MO finds it.
+
+7z sourcecode (http://www.7-zip.org/download.html)
+- only for "archive" subproject
+- no need to compile, will be linked into project
+
+Python 2.7 (32-bit)
+- only for pythonrunner
+
+PyQt4 for Python 2.7
+- tested: 4.10
+- only for pythonrunner
-7z.dll (http://www.7-zip.org/download.html)
-- Part of the 7-zip program
-- Has to be the 32-bit dll! (approx. 893kb)
Recommended:
------------
Qt Creator
-- Included in QtSDK but there might be a newer version as a separate download
+- http://qt-project.org/downloads#qt-creator
+- I.e. "Qt Creator 2.8.1 for Windows (53 MB)"
+- With Qt Creator usually the rule is "the newer the better"
+- Start Qt Creator and check if things are set up correctly:
+ 1) Go to Tools > Options > Build & Run > Qt Versions
+ 2.1) If the QtSDK 4.8.x you installed earlier is not auto-detected, click "Add" to add it manually
+ 2.2) Navigate to your <your qt4 installation>\bin\qmake.exe
+ 2.3) Restart qt creator
+ 3) Go to Tools > Options > Build & Run > Kits
+ 3.1) If no Kit is auto-detected (or the auto-detected ones have picked up the wrong qt or vc++ installation) click "Add"
+ 3.2) Enter a Name (i.e. "Qt 4.8.5 MSVC2010 32bit")
+ 3.3) In Compiler select the visual studio compiler installed earlier (may show up as "Microsoft Windows SDK for Windows x). Make sure you select the x86 variant
+ 3.4) CDB should be auto-detected
+ 3.5) Select the qt version set up earlier
+ 4) Apply and close the options
Set up (using Qt Creator):
--------------------------
1. Using Qt Creator open source/ModOrganizer.pro from your working copy
2. Open the "Projects" tab, open the "Details" for "Build Environment"
-3. Click "Add" to add a variable called "BOOSTPATH" with the path of your boost installation as the value (i.e. C:\code\boost_1_52_0)
-4. Click "Add" to add a variable called "ZLIBPATH" with the path of your zlib installation as the value (i.e. C:\code\zlib-1.2.7)
-5. Switch the build configuration at the very top of the same page from "debug" to "release" (or vice versa) and repeat steps 3 and 4
-6. Compile the configuration(s) you want to use (debug and/or release) (Build All). This should compile correctly.
+3a. Click "Add" to add a variable called "BOOSTPATH" with the path of your boost installation as the value (i.e. C:\code\boost_1_49_0)
+3b. Click "Add" to add a variable called "ZLIBPATH" with the path of your zlib installation as the value (i.e. C:\code\zlib-1.2.7)
+3c. Click "Add" to add a variable called "7ZIPPATH" with the path of your zlib installation as the value (i.e. C:\code\7zip)
+3d. Click "Add" to add a variable called "PYTHONPATH" with the path of your zlib installation as the value (i.e. C:\code\python)
+4. Switch the build configuration at the very top of the same page from "debug" to "release" (or vice versa) and repeat step 3
+5. Compile the configuration(s) you want to use (debug and/or release) (Build All). This should compile correctly.
+6. <reserved for future use. Maybe grab a coffee?>
7. return to the "projects" tab and switch to "Run Settings"
+8. Determine the folder of the qt binaries in the package you downloaded. This could be "QtSDK\Desktop\Qt\4.8.5\msvc2010\bin" or "Qt4.8.5\bin"
For Release build:
-8r. Add a "Run configuration" that points to <your working copy>\output\ModOrganizer.exe
-9r. Copy "7z.dll" to <your working copy>\output\dlls
-10r. From QtSDK\Desktop\Qt\4.8.0\msvc2010\bin copy the following files to <your working copy>\output\dlls: QtCore4.dll, QtDeclarative4.dll, QtGui4.dll, QtNetwork4.dll, QtScript4.dll, QtSql4.dll, QtWebkit4.dll, QtXml4.dll, QtXmlPatterns4.dll
+9r. Add a "Run configuration" that points to <your working copy>\output\ModOrganizer.exe
+10r. Copy "7z.dll" to <your working copy>\output\dlls
+11r. From the qt binaries directory, copy the following files to <your working copy>\output\dlls: QtCore4.dll, QtDeclarative4.dll, QtGui4.dll, QtNetwork4.dll, QtScript4.dll, QtSql4.dll, QtWebkit4.dll, QtXml4.dll, QtXmlPatterns4.dll
For Debug build:
-8d. Add a "Run configuration" that points to <your working copy>\outputd\ModOrganizer.exe
-9d. Copy "7z.dll" to <your working copy>\outputd\dlls
-10d. From QtSDK\Desktop\Qt\4.8.0\msvc2010\bin copy the following files to <your working copy>\outputd\dlls: QtCored4.dll, QtDeclaratived4.dll, QtGuid4.dll, QtNetworkd4.dll, QtScriptd4.dll, QtSqld4.dll, QtWebkitd4.dll, QtXmld4.dll, QtXmlPatternsd4.dll
+9d. Add a "Run configuration" that points to <your working copy>\outputd\ModOrganizer.exe
+10d. Copy "7z.dll" to <your working copy>\outputd\dlls
+11d. From the qt binaries copy the following files to <your working copy>\outputd\dlls: QtCored4.dll, QtDeclaratived4.dll, QtGuid4.dll, QtNetworkd4.dll, QtScriptd4.dll, QtSqld4.dll, QtWebkitd4.dll, QtXmld4.dll, QtXmlPatternsd4.dll
Now you should be able to compile and run Mod Organizer.
Please note that when you change anything apart from the "organizer" subproject, qt creator may not pick up on the changes
@@ -65,4 +137,78 @@ Set up (without Qt Creator):
I'm not using this workflow so I can't give more detailed instructions.
Please note that the primary project format of MO remains qmake, if you work with visual studio and make changes to the project (like adding
-source files) you have to manually transfer those changes to the .pro file. \ No newline at end of file
+source files) you have to manually transfer those changes to the .pro file.
+
+
+
+-----------------
+Troubleshooting (thanks to Ross):
+-----------------
+
+1) When I try to build, I am seeing the error "error: LNK1104: cannot open file 'zlibstatic.lib'"
+
+ a) Make sure you have the following files
+ {ZLIBPATH}\build\zconf.h
+ {ZLIBPATH}\build\zlib.h
+ {ZLIBPATH}\build\zlibstatic.lib
+
+ b) make sure "zlibstat.lib" was renamed to "zlibstatic.lib"
+ c) currently, there are references to zlibstatic in the following 2 project files:
+ ./bsatk/bsatk.pro
+ ./hookdll/hookdll.pro
+
+2) After building, I try to open {MOPROJECTPATH}\outputd\ModOragnizer.exe and get this error
+ "The program can't start because QtDeclaratived4.dll is missing from your computer. Try reinstalling the program to fix this problem."
+
+ -> When setting up Qt4.8.x, make sure you copied the "d" (debug) versions of the dll files to {MOPROJECTPATH}\outputd\dlls
+ If you copied the release version or did not copy the dlls at all, you may see this error.
+ The *.dll files can be found in {QT48xPATH}\bin
+
+ Similiar:
+ http://stackoverflow.com/questions/11196416/cant-start-qt-exe-file-on-windows-7
+
+3) I am getting one or more of the the following compiler warnings...
+
+ "{MOPROJECTPATH}\source\bsatk\bsaexception.cpp:32: warning: C4996: 'vsnprintf': This function or variable may be unsafe.
+ Consider using vsnprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details."
+ -> Ignore/suppress warning like this and make be ultra-careful using printf-style functions. vsnprintf_s is a visual-c++ only function so using those would make porting (i.e. to mingw) harder
+
+ "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\stdio.h:354: see declaration of 'vsnprintf'"
+ -> see previous
+
+ "debug\bsaarchive.obj:-1: warning: LNK4042: object specified more than once; extras ignored"
+
+ -> This appears to be an issue when using VC++ 2010 as the compiler. There are some posts on StackOverflow
+ which suggest fixes when using VC++ as the IDE, but not sure how to apply them to Qt Creator.
+ http://stackoverflow.com/questions/3729515
+ http://stackoverflow.com/questions/3695174
+
+ -> Also, not sure if this affects VC++ 2012 / VC++ 2013 / GCC via cygwin/mingw.
+ Not even sure if the project would successfully compile on these.
+
+ "{MOPROJECTPATH}\source\organizer\mainwindow.cpp:3995: warning: C4428: universal-character-name encountered in source"
+
+ -> very pointless warning.
+ http://stackoverflow.com/questions/11589571
+ http://stackoverflow.com/questions/7078013
+
+ the best solution I saw was to just disable the warning altogether...
+ #pragma warning( disable : 4428 )
+
+ "warning: LNK4098: defaultlib 'LIBCMT' conflicts with use of other libs; use /NODEFAULTLIB:library"
+
+ -> You can always add a #pragma to ignore them :P
+ http://msdn.microsoft.com/en-us/library/2c8f766e%28v=vs.80%29.aspx
+
+4) I got the following error while building...
+ "error: LNK1201: error writing to program database
+ '{MOPROJECTPATH}\{whatever-your-build-directory-name-is}\organizer\debug\ModOrganizer.pdb';
+ check for insufficient disk space, invalid path, or insufficient privilege"
+
+ -> I had this happen after trying to look at something in memory via Process Explorer.
+ To resolve, I killed and restarted PE. Alternatively, you could probably use the
+ Unlocker utility. After unlocking, I manually deleted everything in the directory.
+
+ Unlocker: http://www.filehippo.com/download_unlocker/ or http://www.emptyloop.com/unlocker/
+ Warning: With Unlocker v1.9.2, you must select "Advanced" then uncheck everything to
+ avoid having some Delta toolbar garbage installed...
diff --git a/src/ModOrganizer.pro b/src/ModOrganizer.pro
index c8bfe6df..62de3f66 100644
--- a/src/ModOrganizer.pro
+++ b/src/ModOrganizer.pro
@@ -1,23 +1,25 @@
TEMPLATE = subdirs
-CONFIG += ordered
SUBDIRS = bsatk \
- shared \
- uibase \
- organizer \
- hookdll \
- archive \
- helper \
+ shared \
+ uibase \
+ organizer \
+ hookdll \
+ archive \
+ helper \
plugins \
proxydll \
nxmhandler \
- BossDummy \
- pythonRunner \
- esptk
+ BossDummy \
+ pythonRunner \
+ boss_modified \
+ esptk \
+ loot_cli
+plugins.depends = pythonRunner
hookdll.depends = shared
-organizer.depends = shared, uibase, plugins
+organizer.depends = shared uibase plugins boss_modified
CONFIG(debug, debug|release) {
DESTDIR = outputd
diff --git a/src/aboutdialog.cpp b/src/aboutdialog.cpp
new file mode 100644
index 00000000..a8f9b4db
--- /dev/null
+++ b/src/aboutdialog.cpp
@@ -0,0 +1,83 @@
+/*
+Copyright (C) 2014 Sebastian Herbord. All rights reserved.
+
+This file is part of Mod Organizer.
+
+Mod Organizer is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Mod Organizer is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+
+#include "aboutdialog.h"
+#include "ui_aboutdialog.h"
+#include <utility.h>
+
+
+AboutDialog::AboutDialog(const QString &version, QWidget *parent)
+ : QDialog(parent)
+ , ui(new Ui::AboutDialog)
+{
+ ui->setupUi(this);
+
+ m_LicenseFiles[LICENSE_LGPL3] = "lgpl-3.0.txt";
+ m_LicenseFiles[LICENSE_GPL3] = "gpl-3.0.txt";
+ m_LicenseFiles[LICENSE_BSD3] = "bsd3.txt";
+ m_LicenseFiles[LICENSE_BOOST] = "boost.txt";
+ m_LicenseFiles[LICENSE_CCBY3] = "by-sa3.txt";
+ m_LicenseFiles[LICENSE_ZLIB] = "zlib.txt";
+
+ addLicense("Qt 4.8.5", LICENSE_LGPL3);
+ addLicense("Qt Json", LICENSE_GPL3);
+ addLicense("Boost Library", LICENSE_BOOST);
+ addLicense("Tango Icon Theme", LICENSE_NONE);
+ addLicense("RRZE Icon Set", LICENSE_CCBY3);
+ addLicense("7-zip", LICENSE_LGPL3);
+ addLicense("ZLib", LICENSE_ZLIB);
+ addLicense("NIF File Format Library", LICENSE_BSD3);
+ addLicense("BOSS (modified)", LICENSE_GPL3);
+ addLicense("Alphanum Algorithm", LICENSE_ZLIB);
+
+ ui->nameLabel->setText(QString("<span style=\"font-size:12pt; font-weight:600;\">%1 %2</span>").arg(ui->nameLabel->text()).arg(version));
+#ifdef HGID
+ ui->revisionLabel->setText(ui->revisionLabel->text() + " " + HGID);
+#else
+ ui->revisionLabel->setText(ui->revisionLabel->text() + " unknown");
+#endif
+}
+
+
+AboutDialog::~AboutDialog()
+{
+ delete ui;
+}
+
+
+void AboutDialog::addLicense(const QString &name, Licenses license)
+{
+ QListWidgetItem *item = new QListWidgetItem(name);
+ item->setData(Qt::UserRole, license);
+ ui->creditsList->addItem(item);
+}
+
+
+void AboutDialog::on_creditsList_currentItemChanged(QListWidgetItem *current, QListWidgetItem*)
+{
+ auto iter = m_LicenseFiles.find(current->data(Qt::UserRole).toInt());
+ if (iter != m_LicenseFiles.end()) {
+ QString filePath = qApp->applicationDirPath() + "/license/" + iter->second;
+ QString text = MOBase::readFileText(filePath);
+ ui->licenseText->setText(text);
+ } else {
+ ui->licenseText->setText(tr("No license"));
+ }
+}
diff --git a/src/aboutdialog.h b/src/aboutdialog.h
new file mode 100644
index 00000000..9c0901a8
--- /dev/null
+++ b/src/aboutdialog.h
@@ -0,0 +1,69 @@
+#ifndef ABOUTDIALOG_H
+/*
+Copyright (C) 2014 Sebastian Herbord. All rights reserved.
+
+This file is part of Mod Organizer.
+
+Mod Organizer is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Mod Organizer is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+
+#define ABOUTDIALOG_H
+
+#include <QDialog>
+#include <QListWidgetItem>
+#include <map>
+#include <vector>
+#include <utility>
+
+namespace Ui {
+ class AboutDialog;
+}
+
+class AboutDialog : public QDialog
+{
+ Q_OBJECT
+
+public:
+ explicit AboutDialog(const QString &version, QWidget *parent = 0);
+ ~AboutDialog();
+
+private:
+
+ enum Licenses {
+ LICENSE_NONE,
+ LICENSE_LGPL3,
+ LICENSE_GPL3,
+ LICENSE_BSD3,
+ LICENSE_BOOST,
+ LICENSE_CCBY3,
+ LICENSE_ZLIB
+ };
+
+private:
+
+ void addLicense(const QString &name, Licenses license);
+
+private slots:
+ void on_creditsList_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous);
+
+private:
+
+ Ui::AboutDialog *ui;
+
+ std::map<int, QString> m_LicenseFiles;
+
+};
+
+#endif // ABOUTDIALOG_H
diff --git a/src/aboutdialog.ui b/src/aboutdialog.ui
new file mode 100644
index 00000000..985700db
--- /dev/null
+++ b/src/aboutdialog.ui
@@ -0,0 +1,295 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>AboutDialog</class>
+ <widget class="QDialog" name="AboutDialog">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>508</width>
+ <height>335</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>About</string>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_2">
+ <item>
+ <layout class="QVBoxLayout" name="verticalLayout_3">
+ <item>
+ <widget class="QLabel" name="iconLabel">
+ <property name="text">
+ <string/>
+ </property>
+ <property name="pixmap">
+ <pixmap resource="resources.qrc">:/MO/gui/mo_icon.ico</pixmap>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="verticalSpacer_2">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <widget class="QTabWidget" name="tabWidget">
+ <property name="currentIndex">
+ <number>0</number>
+ </property>
+ <widget class="QWidget" name="about">
+ <attribute name="title">
+ <string>About</string>
+ </attribute>
+ <layout class="QVBoxLayout" name="verticalLayout_2">
+ <item>
+ <widget class="QLabel" name="nameLabel">
+ <property name="text">
+ <string notr="true">Mod Organizer</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="revisionLabel">
+ <property name="text">
+ <string>Revision:</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="verticalSpacer">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QLabel" name="label_3">
+ <property name="text">
+ <string notr="true">Copyright 2011-2014 Sebastian Herbord</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="label_2">
+ <property name="text">
+ <string notr="true">&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.&lt;/p&gt;&lt;p&gt;See the GNU General Public License for more details.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ <property name="wordWrap">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <widget class="QWidget" name="software">
+ <attribute name="title">
+ <string>Used Software</string>
+ </attribute>
+ <layout class="QVBoxLayout" name="verticalLayout_4">
+ <item>
+ <widget class="QListWidget" name="creditsList"/>
+ </item>
+ <item>
+ <widget class="QTextBrowser" name="licenseText"/>
+ </item>
+ </layout>
+ </widget>
+ <widget class="QWidget" name="credits">
+ <attribute name="title">
+ <string>Credits</string>
+ </attribute>
+ <layout class="QHBoxLayout" name="horizontalLayout_3">
+ <item>
+ <widget class="QGroupBox" name="groupBox">
+ <property name="title">
+ <string>Translators</string>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout_6">
+ <item>
+ <widget class="QListWidget" name="listWidget_2">
+ <property name="selectionMode">
+ <enum>QAbstractItemView::NoSelection</enum>
+ </property>
+ <item>
+ <property name="text">
+ <string notr="true">pndrev (German)</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string notr="true">DaWul (Spanish)</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string notr="true">Fiama (Spanish)</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string notr="true">Alyndiar (French)</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string notr="true">Jlkawaii (French)</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string notr="true">Rigoletto (French)</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string notr="true">Scythe1912 (Chinese)</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string notr="true">yc0620shen (Chinese)</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string notr="true">miraclefreak (Czech)</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string notr="true">tokcdk (Russian)</string>
+ </property>
+ </item>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <widget class="QGroupBox" name="groupBox_2">
+ <property name="title">
+ <string>Others</string>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout_7">
+ <item>
+ <widget class="QListWidget" name="listWidget">
+ <property name="selectionMode">
+ <enum>QAbstractItemView::NoSelection</enum>
+ </property>
+ <item>
+ <property name="text">
+ <string notr="true">blacksol</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string notr="true">DoubleYou</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string notr="true">deathneko11</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string notr="true">Bridger</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string notr="true">GSDFan</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string notr="true">Uhuru</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string notr="true">Wolverine2710</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string notr="true">z929669</string>
+ </property>
+ </item>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <item>
+ <spacer name="horizontalSpacer">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QPushButton" name="closeButton">
+ <property name="text">
+ <string>Close</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ <resources>
+ <include location="resources.qrc"/>
+ </resources>
+ <connections>
+ <connection>
+ <sender>closeButton</sender>
+ <signal>clicked()</signal>
+ <receiver>AboutDialog</receiver>
+ <slot>accept()</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>460</x>
+ <y>313</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>253</x>
+ <y>167</y>
+ </hint>
+ </hints>
+ </connection>
+ </connections>
+</ui>
diff --git a/src/activatemodsdialog.cpp b/src/activatemodsdialog.cpp
index cf798189..8d463fba 100644
--- a/src/activatemodsdialog.cpp
+++ b/src/activatemodsdialog.cpp
@@ -65,11 +65,6 @@ ActivateModsDialog::~ActivateModsDialog()
}
-void ActivateModsDialog::on_buttonBox_accepted()
-{
-}
-
-
std::set<QString> ActivateModsDialog::getModsToActivate()
{
std::set<QString> result;
diff --git a/src/activatemodsdialog.h b/src/activatemodsdialog.h
index db0bf7fa..845167aa 100644
--- a/src/activatemodsdialog.h
+++ b/src/activatemodsdialog.h
@@ -62,7 +62,6 @@ public:
std::set<QString> getESPsToActivate();
private slots:
- void on_buttonBox_accepted();
private:
Ui::ActivateModsDialog *ui;
diff --git a/src/archivetree.cpp b/src/archivetree.cpp
deleted file mode 100644
index 0484b241..00000000
--- a/src/archivetree.cpp
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
-Copyright (C) 2012 Sebastian Herbord. All rights reserved.
-
-This file is part of Mod Organizer.
-
-Mod Organizer is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-Mod Organizer is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "archivetree.h"
-#include <QDragMoveEvent>
-
-ArchiveTree::ArchiveTree(QWidget *parent) :
- QTreeWidget(parent)
-{
-}
-
-
-bool ArchiveTree::testMovePossible(QTreeWidgetItem *source, QTreeWidgetItem *target)
-{
- if ((target == NULL) ||
- (source == NULL)) {
- return false;
- }
-
- if ((source == target) ||
- (source->parent() == target)) {
- return false;
- }
-
- return true;
-}
-
-void ArchiveTree::dragEnterEvent(QDragEnterEvent *event)
-{
- QTreeWidgetItem *source = this->currentItem();
- if ((source == NULL) || (source->parent() == NULL)) {
- // can't change top level
- event->ignore();
- return;
- } else {
- QTreeWidget::dragEnterEvent(event);
- }
-
-}
-
-void ArchiveTree::dragMoveEvent(QDragMoveEvent *event)
-{
- if (!testMovePossible(this->currentItem(), itemAt(event->pos()))) {
- event->ignore();
- } else {
- QTreeWidget::dragMoveEvent(event);
- }
-}
-
-
-void ArchiveTree::dropEvent(QDropEvent *event)
-{
- event->ignore();
-
- QTreeWidgetItem *target = itemAt(event->pos());
-
- QList<QTreeWidgetItem*> sourceItems = this->selectedItems();
- for (QList<QTreeWidgetItem*>::iterator iter = sourceItems.begin();
- iter != sourceItems.end(); ++iter) {
- QTreeWidgetItem *source = *iter;
- if ((source->parent() != NULL) &&
- testMovePossible(source, target)) {
- source->parent()->removeChild(source);
- if (target->data(0, Qt::UserRole).toInt() != 0) {
- // target is a file
- if (target->parent() == NULL) {
- // this should really not happen, how should a
- // file get to the top level?
- return;
- }
- int index = target->parent()->indexOfChild(target);
- target->parent()->insertChild(index, source);
- emit changed();
- } else {
- // target is a directory
- target->insertChild(target->childCount(), source);
- emit changed();
- }
- }
- }
-
-}
diff --git a/src/archivetree.h b/src/archivetree.h
deleted file mode 100644
index 775bf8b9..00000000
--- a/src/archivetree.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
-Copyright (C) 2012 Sebastian Herbord. All rights reserved.
-
-This file is part of Mod Organizer.
-
-Mod Organizer is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-Mod Organizer is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#ifndef ARCHIVETREE_H
-#define ARCHIVETREE_H
-
-#include <QTreeWidget>
-
-/**
- * @brief QT tree widget used to display the content of an archive in the manual installation dialog
- **/
-class ArchiveTree : public QTreeWidget
-{
-
- Q_OBJECT
-
-public:
-
- explicit ArchiveTree(QWidget *parent = 0);
-
-signals:
-
- void changed();
-
-public slots:
-
-protected:
-
- virtual void dragEnterEvent(QDragEnterEvent *event);
- virtual void dragMoveEvent(QDragMoveEvent *event);
- virtual void dropEvent(QDropEvent *event);
-
-private:
-
- bool testMovePossible(QTreeWidgetItem *source, QTreeWidgetItem *target);
-
-};
-
-#endif // ARCHIVETREE_H
diff --git a/src/categories.cpp b/src/categories.cpp
index 62ba3ca5..27720829 100644
--- a/src/categories.cpp
+++ b/src/categories.cpp
@@ -43,6 +43,7 @@ QString CategoryFactory::categoriesFilePath()
CategoryFactory::CategoryFactory()
{
+ atexit(&cleanup);
reset();
QFile categoryFile(categoriesFilePath());
@@ -102,6 +103,7 @@ CategoryFactory &CategoryFactory::instance()
void CategoryFactory::reset()
{
m_Categories.clear();
+ m_IDMap.clear();
addCategory(0, "None", MakeVector<int>(2, 28, 87), 0);
}
@@ -124,6 +126,12 @@ void CategoryFactory::setParents()
}
}
+void CategoryFactory::cleanup()
+{
+ delete s_Instance;
+ s_Instance = NULL;
+}
+
void CategoryFactory::saveCategories()
{
diff --git a/src/categories.h b/src/categories.h
index 75698149..31fccd6d 100644
--- a/src/categories.h
+++ b/src/categories.h
@@ -180,6 +180,8 @@ private:
void setParents();
+ static void cleanup();
+
private:
static CategoryFactory *s_Instance;
@@ -188,6 +190,8 @@ private:
std::map<int, unsigned int> m_IDMap;
std::map<int, unsigned int> m_NexusMap;
+private:
+
};
diff --git a/src/downloadlist.cpp b/src/downloadlist.cpp
index 549d186d..5248382b 100644
--- a/src/downloadlist.cpp
+++ b/src/downloadlist.cpp
@@ -34,9 +34,10 @@ DownloadList::DownloadList(DownloadManager *manager, QObject *parent)
int DownloadList::rowCount(const QModelIndex&) const
{
- return m_Manager->numTotalDownloads();
+ return m_Manager->numTotalDownloads() + m_Manager->numPendingDownloads();
}
+
int DownloadList::columnCount(const QModelIndex&) const
{
return 3;
@@ -75,11 +76,17 @@ QVariant DownloadList::data(const QModelIndex &index, int role) const
if (role == Qt::DisplayRole) {
return index.row();
} else if (role == Qt::ToolTipRole) {
- if (m_Manager->isInfoIncomplete(index.row())) {
- return tr("Information missing, please select \"Query Info\" from the context menu to re-retrieve.");
- } else {
+ if (index.row() < m_Manager->numTotalDownloads()) {
+ QString text = m_Manager->getFileName(index.row()) + "\n";
+ if (m_Manager->isInfoIncomplete(index.row())) {
+ text += tr("Information missing, please select \"Query Info\" from the context menu to re-retrieve.");
+ } else {
const MOBase::ModRepositoryFileInfo *info = m_Manager->getFileInfo(index.row());
- return QString("%1 (ID %2) %3\n%4").arg(info->modName).arg(m_Manager->getModID(index.row())).arg(info->version.canonicalString()).arg(info->description);
+ return QString("%1 (ID %2) %3").arg(info.m_ModName).arg(m_Manager->getModID(index.row())).arg(info.m_Version);
+ }
+ return text;
+ } else {
+ return tr("pending download");
}
} else {
return QVariant();
diff --git a/src/downloadlistsortproxy.cpp b/src/downloadlistsortproxy.cpp
index fc743574..7abe8579 100644
--- a/src/downloadlistsortproxy.cpp
+++ b/src/downloadlistsortproxy.cpp
@@ -37,13 +37,16 @@ bool DownloadListSortProxy::lessThan(const QModelIndex &left,
{
int leftIndex = sourceModel()->data(left).toInt();
int rightIndex = sourceModel()->data(right).toInt();
-
- if (left.column() == DownloadList::COL_NAME) {
- return m_Manager->getFileName(leftIndex).compare(m_Manager->getFileName(rightIndex), Qt::CaseInsensitive) < 0;
- } else if (left.column() == DownloadList::COL_FILETIME) {
- return m_Manager->getFileTime(leftIndex) < m_Manager->getFileTime(rightIndex);
- } else if (left.column() == DownloadList::COL_STATUS) {
- return m_Manager->getState(leftIndex) < m_Manager->getState(rightIndex);
+ if (leftIndex < m_Manager->numTotalDownloads()) {
+ if (left.column() == DownloadList::COL_NAME) {
+ return m_Manager->getFileName(leftIndex).compare(m_Manager->getFileName(rightIndex), Qt::CaseInsensitive) < 0;
+ } else if (left.column() == DownloadList::COL_FILETIME) {
+ return m_Manager->getFileTime(leftIndex) < m_Manager->getFileTime(rightIndex);
+ } else if (left.column() == DownloadList::COL_STATUS) {
+ return m_Manager->getState(leftIndex) < m_Manager->getState(rightIndex);
+ } else {
+ return leftIndex < rightIndex;
+ }
} else {
return leftIndex < rightIndex;
}
@@ -54,6 +57,9 @@ bool DownloadListSortProxy::filterAcceptsRow(int source_row, const QModelIndex&)
{
if (m_CurrentFilter.length() == 0) {
return true;
+ } else if (source_row < m_Manager->numTotalDownloads()) {
+ return m_Manager->getFileName(source_row).contains(m_CurrentFilter, Qt::CaseInsensitive);
+ } else {
+ return false;
}
- return m_Manager->getFileName(source_row).contains(m_CurrentFilter, Qt::CaseInsensitive);
}
diff --git a/src/downloadlistwidget.cpp b/src/downloadlistwidget.cpp
index b657ca69..68dd2adf 100644
--- a/src/downloadlistwidget.cpp
+++ b/src/downloadlistwidget.cpp
@@ -82,80 +82,100 @@ void DownloadListWidgetDelegate::drawCache(QPainter *painter, const QStyleOption
}
-void DownloadListWidgetDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
+void DownloadListWidgetDelegate::paintPendingDownload(int downloadIndex) const
{
- try {
- auto iter = m_Cache.find(index.row());
- if (iter != m_Cache.end()) {
- drawCache(painter, option, *iter);
- return;
- }
-
- m_ItemWidget->resize(QSize(m_View->columnWidth(0) + m_View->columnWidth(1) + m_View->columnWidth(2), option.rect.height()));
+ std::pair<int, int> nexusids = m_Manager->getPendingDownload(downloadIndex);
+ m_NameLabel->setText(tr("< mod %1 file %2 >").arg(nexusids.first).arg(nexusids.second));
+ m_SizeLabel->setText("???");
+ m_InstallLabel->setVisible(true);
+ m_InstallLabel->setText(tr("Pending"));
+ m_Progress->setVisible(false);
+}
- int downloadIndex = index.data().toInt();
- QString name = m_Manager->getFileName(downloadIndex);
- if (name.length() > 53) {
- name.truncate(50);
- name.append("...");
- }
- m_NameLabel->setText(name);
- m_SizeLabel->setText(QString::number(m_Manager->getFileSize(downloadIndex) / 1024));
- DownloadManager::DownloadState state = m_Manager->getState(downloadIndex);
- if ((state == DownloadManager::STATE_PAUSED) || (state == DownloadManager::STATE_ERROR)) {
- QPalette labelPalette;
- m_InstallLabel->setVisible(true);
- m_Progress->setVisible(false);
+void DownloadListWidgetDelegate::paintRegularDownload(int downloadIndex) const
+{
+ QString name = m_Manager->getFileName(downloadIndex);
+ if (name.length() > 53) {
+ name.truncate(50);
+ name.append("...");
+ }
+ m_NameLabel->setText(name);
+ m_SizeLabel->setText(QString::number(m_Manager->getFileSize(downloadIndex) / 1024));
+ DownloadManager::DownloadState state = m_Manager->getState(downloadIndex);
+ if ((state == DownloadManager::STATE_PAUSED) || (state == DownloadManager::STATE_ERROR)) {
+ QPalette labelPalette;
+ m_InstallLabel->setVisible(true);
+ m_Progress->setVisible(false);
#if QT_VERSION >= QT_VERSION_CHECK(5,0,0)
- m_InstallLabel->setText(QApplication::translate("DownloadListWidget", "Paused - Double Click to resume", 0));
+ m_InstallLabel->setText(QApplication::translate("DownloadListWidget", "Paused - Double Click to resume", 0));
#else
- m_InstallLabel->setText(QApplication::translate("DownloadListWidget", "Paused - Double Click to resume", 0, QApplication::UnicodeUTF8));
+ m_InstallLabel->setText(QApplication::translate("DownloadListWidget", "Paused - Double Click to resume", 0, QApplication::UnicodeUTF8));
#endif
- labelPalette.setColor(QPalette::WindowText, Qt::darkRed);
- m_InstallLabel->setPalette(labelPalette);
- } else if (state == DownloadManager::STATE_FETCHINGMODINFO) {
- m_InstallLabel->setText(tr("Fetching Info 1"));
- m_Progress->setVisible(false);
- } else if (state == DownloadManager::STATE_FETCHINGFILEINFO) {
- m_InstallLabel->setText(tr("Fetching Info 2"));
- m_Progress->setVisible(false);
- } else if (state >= DownloadManager::STATE_READY) {
- QPalette labelPalette;
- m_InstallLabel->setVisible(true);
- m_Progress->setVisible(false);
- if (state == DownloadManager::STATE_INSTALLED) {
- // the tr-macro doesn't work here, maybe because the translation is actually associated with DownloadListWidget instead
- // of DownloadListWidgetDelegate?
+ labelPalette.setColor(QPalette::WindowText, Qt::darkRed);
+ m_InstallLabel->setPalette(labelPalette);
+ } else if (state == DownloadManager::STATE_FETCHINGMODINFO) {
+ m_InstallLabel->setText(tr("Fetching Info 1"));
+ m_Progress->setVisible(false);
+ } else if (state == DownloadManager::STATE_FETCHINGFILEINFO) {
+ m_InstallLabel->setText(tr("Fetching Info 2"));
+ m_Progress->setVisible(false);
+ } else if (state >= DownloadManager::STATE_READY) {
+ QPalette labelPalette;
+ m_InstallLabel->setVisible(true);
+ m_Progress->setVisible(false);
+ if (state == DownloadManager::STATE_INSTALLED) {
+ // the tr-macro doesn't work here, maybe because the translation is actually associated with DownloadListWidget instead
+ // of DownloadListWidgetDelegate?
#if QT_VERSION >= QT_VERSION_CHECK(5,0,0)
- m_InstallLabel->setText(QApplication::translate("DownloadListWidget", "Installed - Double Click to re-install", 0));
+ m_InstallLabel->setText(QApplication::translate("DownloadListWidget", "Installed - Double Click to re-install", 0));
#else
- m_InstallLabel->setText(QApplication::translate("DownloadListWidget", "Installed - Double Click to re-install", 0, QApplication::UnicodeUTF8));
+ m_InstallLabel->setText(QApplication::translate("DownloadListWidget", "Installed - Double Click to re-install", 0, QApplication::UnicodeUTF8));
#endif
- labelPalette.setColor(QPalette::WindowText, Qt::darkGray);
- } else if (state == DownloadManager::STATE_UNINSTALLED) {
+ labelPalette.setColor(QPalette::WindowText, Qt::darkGray);
+ } else if (state == DownloadManager::STATE_UNINSTALLED) {
#if QT_VERSION >= QT_VERSION_CHECK(5,0,0)
- m_InstallLabel->setText(QApplication::translate("DownloadListWidget", "Uninstalled - Double Click to re-install", 0));
+ m_InstallLabel->setText(QApplication::translate("DownloadListWidget", "Uninstalled - Double Click to re-install", 0));
#else
- m_InstallLabel->setText(QApplication::translate("DownloadListWidget", "Uninstalled - Double Click to re-install", 0, QApplication::UnicodeUTF8));
+ m_InstallLabel->setText(QApplication::translate("DownloadListWidget", "Uninstalled - Double Click to re-install", 0, QApplication::UnicodeUTF8));
#endif
- labelPalette.setColor(QPalette::WindowText, Qt::lightGray);
- } else {
+ labelPalette.setColor(QPalette::WindowText, Qt::lightGray);
+ } else {
#if QT_VERSION >= QT_VERSION_CHECK(5,0,0)
- m_InstallLabel->setText(QApplication::translate("DownloadListWidget", "Done - Double Click to install", 0));
+ m_InstallLabel->setText(QApplication::translate("DownloadListWidget", "Done - Double Click to install", 0));
#else
- m_InstallLabel->setText(QApplication::translate("DownloadListWidget", "Done - Double Click to install", 0, QApplication::UnicodeUTF8));
+ m_InstallLabel->setText(QApplication::translate("DownloadListWidget", "Done - Double Click to install", 0, QApplication::UnicodeUTF8));
#endif
- labelPalette.setColor(QPalette::WindowText, Qt::darkGreen);
- }
- m_InstallLabel->setPalette(labelPalette);
- if (m_Manager->isInfoIncomplete(downloadIndex)) {
- m_NameLabel->setText("<img src=\":/MO/gui/warning_16\" /> " + m_NameLabel->text());
- }
+ labelPalette.setColor(QPalette::WindowText, Qt::darkGreen);
+ }
+ m_InstallLabel->setPalette(labelPalette);
+ if (m_Manager->isInfoIncomplete(downloadIndex)) {
+ m_NameLabel->setText("<img src=\":/MO/gui/warning_16\" /> " + m_NameLabel->text());
+ }
+ } else {
+ m_InstallLabel->setVisible(false);
+ m_Progress->setVisible(true);
+ m_Progress->setValue(m_Manager->getProgress(downloadIndex));
+ }
+}
+
+void DownloadListWidgetDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
+{
+ try {
+ auto iter = m_Cache.find(index.row());
+ if (iter != m_Cache.end()) {
+ drawCache(painter, option, *iter);
+ return;
+ }
+
+ m_ItemWidget->resize(QSize(m_View->columnWidth(0) + m_View->columnWidth(1) + m_View->columnWidth(2), option.rect.height()));
+
+ int downloadIndex = index.data().toInt();
+
+ if (downloadIndex >= m_Manager->numTotalDownloads()) {
+ paintPendingDownload(downloadIndex - m_Manager->numTotalDownloads());
} else {
- m_InstallLabel->setVisible(false);
- m_Progress->setVisible(true);
- m_Progress->setValue(m_Manager->getProgress(downloadIndex));
+ paintRegularDownload(downloadIndex);
}
#pragma message("caching disabled because changes in the list (including resorting) doesn't work correctly")
@@ -208,6 +228,11 @@ void DownloadListWidgetDelegate::issueRemoveFromView()
emit removeDownload(m_ContextRow, false);
}
+void DownloadListWidgetDelegate::issueRestoreToView()
+{
+ emit restoreDownload(m_ContextRow);
+}
+
void DownloadListWidgetDelegate::issueCancel()
{
emit cancelDownload(m_ContextRow);
@@ -275,29 +300,39 @@ bool DownloadListWidgetDelegate::editorEvent(QEvent *event, QAbstractItemModel *
QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event);
if (mouseEvent->button() == Qt::RightButton) {
QMenu menu(m_View);
+ bool hidden = false;
m_ContextRow = qobject_cast<QSortFilterProxyModel*>(model)->mapToSource(index).row();
- DownloadManager::DownloadState state = m_Manager->getState(m_ContextRow);
- if (state >= DownloadManager::STATE_READY) {
- menu.addAction(tr("Install"), this, SLOT(issueInstall()));
- if (m_Manager->isInfoIncomplete(m_ContextRow)) {
- menu.addAction(tr("Query Info"), this, SLOT(issueQueryInfo()));
+ if (m_ContextRow < m_Manager->numTotalDownloads()) {
+ DownloadManager::DownloadState state = m_Manager->getState(m_ContextRow);
+ hidden = m_Manager->isHidden(m_ContextRow);
+ if (state >= DownloadManager::STATE_READY) {
+ menu.addAction(tr("Install"), this, SLOT(issueInstall()));
+ if (m_Manager->isInfoIncomplete(m_ContextRow)) {
+ menu.addAction(tr("Query Info"), this, SLOT(issueQueryInfo()));
+ }
+ menu.addAction(tr("Delete"), this, SLOT(issueDelete()));
+ if (hidden) {
+ menu.addAction(tr("Un-Hide"), this, SLOT(issueRestoreToView()));
+ } else {
+ menu.addAction(tr("Remove from View"), this, SLOT(issueRemoveFromView()));
+ }
+ } else if (state == DownloadManager::STATE_DOWNLOADING){
+ menu.addAction(tr("Cancel"), this, SLOT(issueCancel()));
+ menu.addAction(tr("Pause"), this, SLOT(issuePause()));
+ } else if ((state == DownloadManager::STATE_PAUSED) || (state == DownloadManager::STATE_ERROR)) {
+ menu.addAction(tr("Remove"), this, SLOT(issueDelete()));
+ menu.addAction(tr("Resume"), this, SLOT(issueResume()));
}
- menu.addAction(tr("Delete"), this, SLOT(issueDelete()));
- menu.addAction(tr("Remove from View"), this, SLOT(issueRemoveFromView()));
- } else if (state == DownloadManager::STATE_DOWNLOADING){
- menu.addAction(tr("Cancel"), this, SLOT(issueCancel()));
- menu.addAction(tr("Pause"), this, SLOT(issuePause()));
- } else if ((state == DownloadManager::STATE_PAUSED) || (state == DownloadManager::STATE_ERROR)) {
- menu.addAction(tr("Remove"), this, SLOT(issueDelete()));
- menu.addAction(tr("Resume"), this, SLOT(issueResume()));
- }
- menu.addSeparator();
+ menu.addSeparator();
+ }
menu.addAction(tr("Delete Installed..."), this, SLOT(issueDeleteCompleted()));
menu.addAction(tr("Delete All..."), this, SLOT(issueDeleteAll()));
- menu.addSeparator();
- menu.addAction(tr("Remove Installed..."), this, SLOT(issueRemoveFromViewCompleted()));
- menu.addAction(tr("Remove All..."), this, SLOT(issueRemoveFromViewAll()));
+ if (!hidden) {
+ menu.addSeparator();
+ menu.addAction(tr("Remove Installed..."), this, SLOT(issueRemoveFromViewCompleted()));
+ menu.addAction(tr("Remove All..."), this, SLOT(issueRemoveFromViewAll()));
+ }
menu.exec(mouseEvent->globalPos());
event->accept();
diff --git a/src/downloadlistwidget.h b/src/downloadlistwidget.h
index c80200fb..80c4430a 100644
--- a/src/downloadlistwidget.h
+++ b/src/downloadlistwidget.h
@@ -60,11 +60,15 @@ public:
virtual void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const;
virtual QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const;
+ void paintPendingDownload(int downloadIndex) const;
+ void paintRegularDownload(int downloadIndex) const;
+
signals:
void installDownload(int index);
void queryInfo(int index);
void removeDownload(int index, bool deleteFile);
+ void restoreDownload(int index);
void cancelDownload(int index);
void pauseDownload(int index);
void resumeDownload(int index);
@@ -83,6 +87,7 @@ private slots:
void issueInstall();
void issueDelete();
void issueRemoveFromView();
+ void issueRestoreToView();
void issueCancel();
void issuePause();
void issueResume();
diff --git a/src/downloadlistwidget.ui b/src/downloadlistwidget.ui
index 01b2ee07..7a6ce8ba 100644
--- a/src/downloadlistwidget.ui
+++ b/src/downloadlistwidget.ui
@@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>315</width>
- <height>75</height>
+ <height>81</height>
</rect>
</property>
<property name="contextMenuPolicy">
@@ -78,14 +78,14 @@
<item>
<widget class="QLabel" name="sizeLabel">
<property name="text">
- <string>0</string>
+ <string notr="true">0</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_2">
<property name="text">
- <string>KB</string>
+ <string notr="true">KB</string>
</property>
</widget>
</item>
diff --git a/src/downloadlistwidgetcompact.cpp b/src/downloadlistwidgetcompact.cpp
index 8dd6e275..e2fbcd24 100644
--- a/src/downloadlistwidgetcompact.cpp
+++ b/src/downloadlistwidgetcompact.cpp
@@ -82,6 +82,66 @@ void DownloadListWidgetCompactDelegate::drawCache(QPainter *painter, const QStyl
}
+void DownloadListWidgetCompactDelegate::paintPendingDownload(int downloadIndex) const
+{
+ std::pair<int, int> nexusids = m_Manager->getPendingDownload(downloadIndex);
+ m_NameLabel->setText(tr("< mod %1 file %2 >").arg(nexusids.first).arg(nexusids.second));
+ if (m_SizeLabel != NULL) {
+ m_SizeLabel->setText("???");
+ }
+ m_DoneLabel->setVisible(true);
+ m_DoneLabel->setText(tr("Pending"));
+ m_Progress->setVisible(false);
+}
+
+
+void DownloadListWidgetCompactDelegate::paintRegularDownload(int downloadIndex) const
+{
+ QString name = m_Manager->getFileName(downloadIndex);
+ if (name.length() > 53) {
+ name.truncate(50);
+ name.append("...");
+ }
+ m_NameLabel->setText(name);
+
+ DownloadManager::DownloadState state = m_Manager->getState(downloadIndex);
+
+ if ((m_SizeLabel != NULL) && (state >= DownloadManager::STATE_READY)) {
+ m_SizeLabel->setText(QString::number(m_Manager->getFileSize(downloadIndex) / 1048576));
+ }
+
+ if ((state == DownloadManager::STATE_PAUSED) || (state == DownloadManager::STATE_ERROR)) {
+ m_DoneLabel->setVisible(true);
+ m_Progress->setVisible(false);
+ m_DoneLabel->setText(tr("Paused"));
+ m_DoneLabel->setForegroundRole(QPalette::Link);
+ } else if (state == DownloadManager::STATE_FETCHINGMODINFO) {
+ m_DoneLabel->setText(tr("Fetching Info 1"));
+ } else if (state == DownloadManager::STATE_FETCHINGFILEINFO) {
+ m_DoneLabel->setText(tr("Fetching Info 2"));
+ } else if (state >= DownloadManager::STATE_READY) {
+ m_DoneLabel->setVisible(true);
+ m_Progress->setVisible(false);
+ if (state == DownloadManager::STATE_INSTALLED) {
+ m_DoneLabel->setText(tr("Installed"));
+ m_DoneLabel->setForegroundRole(QPalette::Mid);
+ } else if (state == DownloadManager::STATE_UNINSTALLED) {
+ m_DoneLabel->setText(tr("Uninstalled"));
+ m_DoneLabel->setForegroundRole(QPalette::Dark);
+ } else {
+ m_DoneLabel->setText(tr("Done"));
+ m_DoneLabel->setForegroundRole(QPalette::WindowText);
+ }
+ if (m_Manager->isInfoIncomplete(downloadIndex)) {
+ m_NameLabel->setText("<img src=\":/MO/gui/warning_16\"/> " + m_NameLabel->text());
+ }
+ } else {
+ m_DoneLabel->setVisible(false);
+ m_Progress->setVisible(true);
+ m_Progress->setValue(m_Manager->getProgress(downloadIndex));
+ }
+}
+
void DownloadListWidgetCompactDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
#pragma message("This is quite costy - room for optimization?")
@@ -100,49 +160,10 @@ void DownloadListWidgetCompactDelegate::paint(QPainter *painter, const QStyleOpt
}
int downloadIndex = index.data().toInt();
-
- QString name = m_Manager->getFileName(downloadIndex);
- if (name.length() > 53) {
- name.truncate(50);
- name.append("...");
- }
- m_NameLabel->setText(name);
-
- DownloadManager::DownloadState state = m_Manager->getState(downloadIndex);
-
- if ((m_SizeLabel != NULL) && (state >= DownloadManager::STATE_READY)) {
- m_SizeLabel->setText(QString::number(m_Manager->getFileSize(downloadIndex) / 1048576));
- }
-
- if ((state == DownloadManager::STATE_PAUSED) || (state == DownloadManager::STATE_ERROR)) {
- m_DoneLabel->setVisible(true);
- m_Progress->setVisible(false);
- m_DoneLabel->setText(tr("Paused"));
- m_DoneLabel->setForegroundRole(QPalette::Link);
- } else if (state == DownloadManager::STATE_FETCHINGMODINFO) {
- m_DoneLabel->setText(tr("Fetching Info 1"));
- } else if (state == DownloadManager::STATE_FETCHINGFILEINFO) {
- m_DoneLabel->setText(tr("Fetching Info 2"));
- } else if (state >= DownloadManager::STATE_READY) {
- m_DoneLabel->setVisible(true);
- m_Progress->setVisible(false);
- if (state == DownloadManager::STATE_INSTALLED) {
- m_DoneLabel->setText(tr("Installed"));
- m_DoneLabel->setForegroundRole(QPalette::Mid);
- } else if (state == DownloadManager::STATE_UNINSTALLED) {
- m_DoneLabel->setText(tr("Uninstalled"));
- m_DoneLabel->setForegroundRole(QPalette::Dark);
- } else {
- m_DoneLabel->setText(tr("Done"));
- m_DoneLabel->setForegroundRole(QPalette::WindowText);
- }
- if (m_Manager->isInfoIncomplete(downloadIndex)) {
- m_NameLabel->setText("<img src=\":/MO/gui/warning_16\"/> " + m_NameLabel->text());
- }
+ if (downloadIndex >= m_Manager->numTotalDownloads()) {
+ paintPendingDownload(downloadIndex - m_Manager->numTotalDownloads());
} else {
- m_DoneLabel->setVisible(false);
- m_Progress->setVisible(true);
- m_Progress->setValue(m_Manager->getProgress(downloadIndex));
+ paintRegularDownload(downloadIndex);
}
#pragma message("caching disabled because changes in the list (including resorting) doesn't work correctly")
@@ -195,6 +216,11 @@ void DownloadListWidgetCompactDelegate::issueRemoveFromView()
emit removeDownload(m_ContextIndex.row(), false);
}
+void DownloadListWidgetCompactDelegate::issueRestoreToView()
+{
+ emit restoreDownload(m_ContextIndex.row());
+}
+
void DownloadListWidgetCompactDelegate::issueCancel()
{
emit cancelDownload(m_ContextIndex.row());
@@ -263,29 +289,39 @@ bool DownloadListWidgetCompactDelegate::editorEvent(QEvent *event, QAbstractItem
QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event);
if (mouseEvent->button() == Qt::RightButton) {
QMenu menu;
+ bool hidden = false;
m_ContextIndex = qobject_cast<QSortFilterProxyModel*>(model)->mapToSource(index);
- DownloadManager::DownloadState state = m_Manager->getState(m_ContextIndex.row());
- if (state >= DownloadManager::STATE_READY) {
- menu.addAction(tr("Install"), this, SLOT(issueInstall()));
- if (m_Manager->isInfoIncomplete(m_ContextIndex.row())) {
- menu.addAction(tr("Query Info"), this, SLOT(issueQueryInfo()));
+ if (m_ContextIndex.row() < m_Manager->numTotalDownloads()) {
+ DownloadManager::DownloadState state = m_Manager->getState(m_ContextIndex.row());
+ hidden = m_Manager->isHidden(m_ContextIndex.row());
+ if (state >= DownloadManager::STATE_READY) {
+ menu.addAction(tr("Install"), this, SLOT(issueInstall()));
+ if (m_Manager->isInfoIncomplete(m_ContextIndex.row())) {
+ menu.addAction(tr("Query Info"), this, SLOT(issueQueryInfo()));
+ }
+ menu.addAction(tr("Delete"), this, SLOT(issueDelete()));
+ if (hidden) {
+ menu.addAction(tr("Un-Hide"), this, SLOT(issueRestoreToView()));
+ } else {
+ menu.addAction(tr("Remove from View"), this, SLOT(issueRemoveFromView()));
+ }
+ } else if (state == DownloadManager::STATE_DOWNLOADING){
+ menu.addAction(tr("Cancel"), this, SLOT(issueCancel()));
+ menu.addAction(tr("Pause"), this, SLOT(issuePause()));
+ } else if ((state == DownloadManager::STATE_PAUSED) || (state == DownloadManager::STATE_ERROR)) {
+ menu.addAction(tr("Remove"), this, SLOT(issueDelete()));
+ menu.addAction(tr("Resume"), this, SLOT(issueResume()));
}
- menu.addAction(tr("Delete"), this, SLOT(issueDelete()));
- menu.addAction(tr("Remove from View"), this, SLOT(issueRemoveFromView()));
- } else if (state == DownloadManager::STATE_DOWNLOADING){
- menu.addAction(tr("Cancel"), this, SLOT(issueCancel()));
- menu.addAction(tr("Pause"), this, SLOT(issuePause()));
- } else if ((state == DownloadManager::STATE_PAUSED) || (state == DownloadManager::STATE_ERROR)) {
- menu.addAction(tr("Remove"), this, SLOT(issueDelete()));
- menu.addAction(tr("Resume"), this, SLOT(issueResume()));
- }
- menu.addSeparator();
+ menu.addSeparator();
+ }
menu.addAction(tr("Delete Installed..."), this, SLOT(issueDeleteCompleted()));
menu.addAction(tr("Delete All..."), this, SLOT(issueDeleteAll()));
- menu.addSeparator();
- menu.addAction(tr("Remove Installed..."), this, SLOT(issueRemoveFromViewCompleted()));
- menu.addAction(tr("Remove All..."), this, SLOT(issueRemoveFromViewAll()));
+ if (!hidden) {
+ menu.addSeparator();
+ menu.addAction(tr("Remove Installed..."), this, SLOT(issueRemoveFromViewCompleted()));
+ menu.addAction(tr("Remove All..."), this, SLOT(issueRemoveFromViewAll()));
+ }
menu.exec(mouseEvent->globalPos());
event->accept();
diff --git a/src/downloadlistwidgetcompact.h b/src/downloadlistwidgetcompact.h
index 78f51840..4d7f40de 100644
--- a/src/downloadlistwidgetcompact.h
+++ b/src/downloadlistwidgetcompact.h
@@ -65,6 +65,7 @@ signals:
void installDownload(int index);
void queryInfo(int index);
void removeDownload(int index, bool deleteFile);
+ void restoreDownload(int index);
void cancelDownload(int index);
void pauseDownload(int index);
void resumeDownload(int index);
@@ -77,12 +78,15 @@ protected:
private:
void drawCache(QPainter *painter, const QStyleOptionViewItem &option, const QPixmap &cache) const;
+ void paintPendingDownload(int downloadIndex) const;
+ void paintRegularDownload(int downloadIndex) const;
private slots:
void issueInstall();
void issueDelete();
void issueRemoveFromView();
+ void issueRestoreToView();
void issueCancel();
void issuePause();
void issueResume();
diff --git a/src/downloadmanager.cpp b/src/downloadmanager.cpp
index 676cd7ef..8c127511 100644
--- a/src/downloadmanager.cpp
+++ b/src/downloadmanager.cpp
@@ -22,21 +22,22 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
#include "nxmurl.h"
#include <gameinfo.h>
#include <nxmurl.h>
+#include <taskprogressmanager.h>
#include "utility.h"
#include "json.h"
#include "selectiondialog.h"
+#include <utility.h>
#include <QTimer>
#include <QFileInfo>
#include <QRegExp>
#include <QDirIterator>
#include <QInputDialog>
-#include <boost/bind.hpp>
-#include <regex>
#include <QMessageBox>
#include <QCoreApplication>
+#include <boost/bind.hpp>
+#include <regex>
-using QtJson::Json;
using namespace MOBase;
@@ -61,18 +62,21 @@ DownloadManager::DownloadInfo *DownloadManager::DownloadInfo::createNew(const Mo
info->m_CurrentUrl = 0;
info->m_Tries = AUTOMATIC_RETRIES;
info->m_State = STATE_STARTED;
+ info->m_TaskProgressId = TaskProgressManager::instance().getId();
return info;
}
-DownloadManager::DownloadInfo *DownloadManager::DownloadInfo::createFromMeta(const QString &filePath)
+DownloadManager::DownloadInfo *DownloadManager::DownloadInfo::createFromMeta(const QString &filePath, bool showHidden)
{
DownloadInfo *info = new DownloadInfo;
QString metaFileName = filePath + ".meta";
QSettings metaFile(metaFileName, QSettings::IniFormat);
- if (metaFile.value("removed", false).toBool()) {
+ if (!showHidden && metaFile.value("removed", false).toBool()) {
return NULL;
+ } else {
+ info->m_Hidden = metaFile.value("removed", false).toBool();
}
QString fileName = QFileInfo(filePath).fileName();
@@ -101,7 +105,7 @@ DownloadManager::DownloadInfo *DownloadManager::DownloadInfo::createFromMeta(con
info->m_CurrentUrl = 0;
info->m_Urls = metaFile.value("url", "").toString().split(";");
info->m_Tries = 0;
- info->m_FileInfo = new ModRepositoryFileInfo();
+ info->m_TaskProgressId = TaskProgressManager::instance().getId();
info->m_FileInfo->name = metaFile.value("name", "").toString();
info->m_FileInfo->modName = metaFile.value("modName", "").toString();
info->m_FileInfo->modID = metaFile.value("modID", 0).toInt();
@@ -151,7 +155,8 @@ QString DownloadManager::DownloadInfo::currentURL()
DownloadManager::DownloadManager(NexusInterface *nexusInterface, QObject *parent)
- : IDownloadManager(parent), m_NexusInterface(nexusInterface), m_DirWatcher()
+ : IDownloadManager(parent), m_NexusInterface(nexusInterface), m_DirWatcher(), m_ShowHidden(false),
+ m_DateExpression("/Date\\((\\d+)\\)/")
{
connect(&m_DirWatcher, SIGNAL(directoryChanged(QString)), this, SLOT(directoryChanged(QString)));
}
@@ -162,6 +167,7 @@ DownloadManager::~DownloadManager()
for (QVector<DownloadInfo*>::iterator iter = m_ActiveDownloads.begin(); iter != m_ActiveDownloads.end(); ++iter) {
delete *iter;
}
+ m_ActiveDownloads.clear();
}
@@ -187,23 +193,21 @@ void DownloadManager::pauseAll()
::Sleep(100);
bool done = false;
-
- int tries = 20;
-
+ QTime startTime = QTime::currentTime();
// further loops: busy waiting for all downloads to complete. This could be neater...
- while (!done && (tries > 0)) {
+ while (!done && (startTime.secsTo(QTime::currentTime()) < 5)) {
QCoreApplication::processEvents();
done = true;
foreach (DownloadInfo *info, m_ActiveDownloads) {
if ((info->m_State < STATE_CANCELED) ||
- (info->m_State != STATE_FETCHINGFILEINFO) || (info->m_State != STATE_FETCHINGMODINFO)) {
+ (info->m_State == STATE_FETCHINGFILEINFO) ||
+ (info->m_State == STATE_FETCHINGMODINFO)) {
done = false;
break;
}
}
if (!done) {
::Sleep(100);
- --tries;
}
}
}
@@ -216,8 +220,8 @@ void DownloadManager::setOutputDirectory(const QString &outputDirectory)
m_DirWatcher.removePaths(directories);
}
m_OutputDirectory = QDir::fromNativeSeparators(outputDirectory);
- m_DirWatcher.addPath(m_OutputDirectory);
refreshList();
+ m_DirWatcher.addPath(m_OutputDirectory);
}
@@ -233,11 +237,19 @@ void DownloadManager::setSupportedExtensions(const QStringList &extensions)
refreshList();
}
+void DownloadManager::setShowHidden(bool showHidden)
+{
+ m_ShowHidden = showHidden;
+ refreshList();
+}
+
void DownloadManager::refreshList()
{
+ int downloadsBefore = m_ActiveDownloads.size();
+
// remove finished downloads
for (QVector<DownloadInfo*>::iterator Iter = m_ActiveDownloads.begin(); Iter != m_ActiveDownloads.end();) {
- if (((*Iter)->m_State == STATE_READY) || ((*Iter)->m_State == STATE_INSTALLED)) {
+ if (((*Iter)->m_State == STATE_READY) || ((*Iter)->m_State == STATE_INSTALLED) || ((*Iter)->m_State == STATE_UNINSTALLED)) {
delete *Iter;
Iter = m_ActiveDownloads.erase(Iter);
} else {
@@ -251,9 +263,22 @@ void DownloadManager::refreshList()
}
nameFilters.append(QString("*").append(UNFINISHED));
-
QDir dir(QDir::fromNativeSeparators(m_OutputDirectory));
+ // find orphaned meta files and delete them (sounds cruel but it's better for everyone)
+ QStringList orphans;
+ QStringList metaFiles = dir.entryList(QStringList() << "*.meta");
+ foreach (const QString &metaFile, metaFiles) {
+ QString baseFile = metaFile.left(metaFile.length() - 5);
+ if (!QFile::exists(dir.absoluteFilePath(baseFile))) {
+ orphans.append(dir.absoluteFilePath(metaFile));
+ }
+ }
+ if (orphans.size() > 0) {
+ qDebug("%d orphaned meta files will be deleted", orphans.size());
+ shellDelete(orphans, true);
+ }
+
// add existing downloads to list
foreach (QString file, dir.entryList(nameFilters, QDir::Files, QDir::Time)) {
bool Exists = false;
@@ -265,17 +290,21 @@ void DownloadManager::refreshList()
}
}
if (Exists) {
+ qDebug("%s exists", qPrintable(file));
continue;
}
QString fileName = QDir::fromNativeSeparators(m_OutputDirectory) + "/" + file;
- DownloadInfo *info = DownloadInfo::createFromMeta(fileName);
+ DownloadInfo *info = DownloadInfo::createFromMeta(fileName, m_ShowHidden);
if (info != NULL) {
m_ActiveDownloads.push_front(info);
}
}
- qDebug("downloads after refresh: %d", m_ActiveDownloads.size());
+
+ if (m_ActiveDownloads.size() != downloadsBefore) {
+ qDebug("downloads after refresh: %d", m_ActiveDownloads.size());
+ }
emit update(-1);
}
@@ -324,6 +353,7 @@ bool DownloadManager::addDownload(QNetworkReply *reply, const QStringList &URLs,
(QMessageBox::question(NULL, tr("Download again?"), tr("A file with the same name has already been downloaded. "
"Do you want to download it again? The new file will receive a different name."),
QMessageBox::Yes | QMessageBox::No) == QMessageBox::No)) {
+ removePending(modID, fileID);
delete newDownload;
return false;
}
@@ -332,11 +362,24 @@ bool DownloadManager::addDownload(QNetworkReply *reply, const QStringList &URLs,
startDownload(reply, newDownload, false);
- emit update(-1);
+// emit update(-1);
return true;
}
+void DownloadManager::removePending(int modID, int fileID)
+{
+ emit aboutToUpdate();
+ for (auto iter = m_PendingDownloads.begin(); iter != m_PendingDownloads.end(); ++iter) {
+ if ((iter->first == modID) && (iter->second == fileID)) {
+ m_PendingDownloads.erase(iter);
+ break;
+ }
+ }
+ emit update(-1);
+}
+
+
void DownloadManager::startDownload(QNetworkReply *reply, DownloadInfo *newDownload, bool resume)
{
newDownload->m_Reply = reply;
@@ -366,11 +409,14 @@ void DownloadManager::startDownload(QNetworkReply *reply, DownloadInfo *newDownl
if (!resume) {
newDownload->m_PreResumeSize = newDownload->m_Output.size();
+ removePending(newDownload->m_ModID, newDownload->m_FileID);
+
emit aboutToUpdate();
m_ActiveDownloads.append(newDownload);
emit update(-1);
+ emit downloadAdded();
}
}
@@ -378,7 +424,23 @@ void DownloadManager::startDownload(QNetworkReply *reply, DownloadInfo *newDownl
void DownloadManager::addNXMDownload(const QString &url)
{
NXMUrl nxmInfo(url);
- m_RequestIDs.insert(m_NexusInterface->requestFileInfo(nxmInfo.getModId(), nxmInfo.getFileId(), this, QVariant()));
+
+ QString managedGame = ToQString(MOShared::GameInfo::instance().getGameShortName());
+ qDebug("add nxm download: %s", qPrintable(url));
+ if (nxmInfo.game().compare(managedGame, Qt::CaseInsensitive) != 0) {
+ qDebug("download requested for wrong game (game: %s, url: %s)", qPrintable(managedGame), qPrintable(nxmInfo.game()));
+ QMessageBox::information(NULL, tr("Wrong Game"), tr("The download link is for a mod for \"%1\" but this instance of MO "
+ "has been set up for \"%2\".").arg(nxmInfo.game()).arg(managedGame), QMessageBox::Ok);
+ return;
+ }
+
+ emit aboutToUpdate();
+
+ m_PendingDownloads.append(std::make_pair(nxmInfo.modId(), nxmInfo.fileId()));
+
+ emit update(-1);
+ emit downloadAdded();
+ m_RequestIDs.insert(m_NexusInterface->requestFileInfo(nxmInfo.modId(), nxmInfo.fileId(), this, nxmInfo.fileId()));
}
@@ -449,6 +511,22 @@ void DownloadManager::refreshAlphabeticalTranslation()
}
+void DownloadManager::restoreDownload(int index)
+{
+ if ((index < 0) || (index >= m_ActiveDownloads.size())) {
+ throw MyException(tr("invalid index"));
+ }
+
+ DownloadInfo *download = m_ActiveDownloads.at(index);
+ download->m_Hidden = false;
+
+ QString filePath = m_OutputDirectory + "/" + download->m_FileName;
+
+ QSettings metaSettings(filePath.append(".meta"), QSettings::IniFormat);
+ metaSettings.setValue("removed", false);
+}
+
+
void DownloadManager::removeDownload(int index, bool deleteFile)
{
try {
@@ -504,9 +582,13 @@ void DownloadManager::pauseDownload(int index)
return;
}
- if (m_ActiveDownloads.at(index)->m_State == STATE_DOWNLOADING) {
- setState(m_ActiveDownloads.at(index), STATE_PAUSING);
- qDebug("pausing %d - %s", index, m_ActiveDownloads[index]->m_FileName.toUtf8().constData());
+ DownloadInfo *info = m_ActiveDownloads.at(index);
+
+ if (info->m_State == STATE_DOWNLOADING) {
+ setState(info, STATE_PAUSING);
+ qDebug("pausing %d - %s", index, info->m_FileName.toUtf8().constData());
+ } else if ((info->m_State == STATE_FETCHINGMODINFO) || (info->m_State == STATE_FETCHINGFILEINFO)) {
+ setState(info, STATE_READY);
}
}
@@ -605,6 +687,19 @@ int DownloadManager::numTotalDownloads() const
return m_ActiveDownloads.size();
}
+int DownloadManager::numPendingDownloads() const
+{
+ return m_PendingDownloads.size();
+}
+
+std::pair<int, int> DownloadManager::getPendingDownload(int index)
+{
+ if ((index < 0) || (index >= m_PendingDownloads.size())) {
+ throw MyException(tr("invalid index"));
+ }
+
+ return m_PendingDownloads.at(index);
+}
QString DownloadManager::getFilePath(int index) const
{
@@ -692,6 +787,14 @@ int DownloadManager::getModID(int index) const
return m_ActiveDownloads.at(index)->m_FileInfo->modID;
}
+bool DownloadManager::isHidden(int index) const
+{
+ if ((index < 0) || (index >= m_ActiveDownloads.size())) {
+ throw MyException(tr("invalid index"));
+ }
+ return m_ActiveDownloads.at(index)->m_Hidden;
+}
+
const ModRepositoryFileInfo *DownloadManager::getFileInfo(int index) const
{
@@ -825,11 +928,11 @@ void DownloadManager::downloadProgress(qint64 bytesReceived, qint64 bytesTotal)
setState(info, STATE_PAUSED);
} else {
if (bytesTotal > info->m_TotalSize) {
- qDebug("file size %s: %lld", qPrintable(info->m_FileName), bytesTotal);
info->m_TotalSize = bytesTotal;
}
int oldProgress = info->m_Progress;
info->m_Progress = ((info->m_ResumePos + bytesReceived) * 100) / (info->m_ResumePos + bytesTotal);
+ TaskProgressManager::instance().updateProgress(info->m_TaskProgressId, bytesReceived, bytesTotal);
if (oldProgress != info->m_Progress) {
emit update(index);
}
@@ -858,6 +961,7 @@ void DownloadManager::createMetaFile(DownloadInfo *info)
metaFile.setValue("modName", info->m_FileInfo->modName);
metaFile.setValue("version", info->m_FileInfo->version.canonicalString());
metaFile.setValue("newestVersion", info->m_FileInfo->newestVersion.canonicalString());
+ metaFile.setValue("fileTime", info->m_FileInfo->m_FileTime);
metaFile.setValue("fileCategory", info->m_FileInfo->fileCategory);
metaFile.setValue("category", info->m_FileInfo->categoryID);
metaFile.setValue("repository", info->m_FileInfo->repository);
@@ -866,6 +970,7 @@ void DownloadManager::createMetaFile(DownloadInfo *info)
metaFile.setValue("uninstalled", info->m_State == DownloadManager::STATE_UNINSTALLED);
metaFile.setValue("paused", (info->m_State == DownloadManager::STATE_PAUSED) ||
(info->m_State == DownloadManager::STATE_ERROR));
+ metaFile.setValue("removed", info->m_Hidden);
// slightly hackish...
for (int i = 0; i < m_ActiveDownloads.size(); ++i) {
@@ -889,11 +994,9 @@ void DownloadManager::nxmDescriptionAvailable(int, QVariant userData, QVariant r
DownloadInfo *info = downloadInfoByID(userData.toInt());
if (info == NULL) return;
-
info->m_FileInfo->categoryID = result["category_id"].toInt();
info->m_FileInfo->modName = result["name"].toString().trimmed();
info->m_FileInfo->newestVersion.parse(result["version"].toString());
-
if (info->m_FileInfo->fileID != 0) {
setState(info, STATE_READY);
} else {
@@ -902,6 +1005,17 @@ void DownloadManager::nxmDescriptionAvailable(int, QVariant userData, QVariant r
}
+QDateTime DownloadManager::matchDate(const QString &timeString)
+{
+ if (m_DateExpression.exactMatch(timeString)) {
+ return QDateTime::fromMSecsSinceEpoch(m_DateExpression.cap(1).toLongLong());
+ } else {
+ qWarning("date not matched: %s", qPrintable(timeString));
+ return QDateTime::currentDateTime();
+ }
+}
+
+
EFileCategory convertFileCategory(int id)
{
// TODO: need to handle file categories in the mod page plugin
@@ -947,7 +1061,11 @@ void DownloadManager::nxmFilesAvailable(int, QVariant userData, QVariant resultD
(fileNameVariant == info->m_FileName) || (fileNameVariant == alternativeLocalName)) {
info->m_FileInfo->name = fileInfo["name"].toString();
info->m_FileInfo->version.parse(fileInfo["version"].toString());
+ if (info->m_FileInfo->version.isEmpty()) {
+ info->m_FileInfo->version = info->m_NexusInfo.m_NewestVersion;
+ }
info->m_FileInfo->fileCategory = convertFileCategory(fileInfo["category_id"].toInt());
+ info->m_FileInfo->fileTime = matchDate(fileInfo["date"].toString());
info->m_FileInfo->fileID = fileInfo["id"].toInt();
found = true;
break;
@@ -986,7 +1104,7 @@ void DownloadManager::nxmFilesAvailable(int, QVariant userData, QVariant resultD
}
-void DownloadManager::nxmFileInfoAvailable(int modID, int fileID, QVariant, QVariant resultData, int requestID)
+void DownloadManager::nxmFileInfoAvailable(int modID, int fileID, QVariant userData, QVariant resultData, int requestID)
{
std::set<int>::iterator idIter = m_RequestIDs.find(requestID);
if (idIter == m_RequestIDs.end()) {
@@ -998,11 +1116,15 @@ void DownloadManager::nxmFileInfoAvailable(int modID, int fileID, QVariant, QVar
ModRepositoryFileInfo *info = new ModRepositoryFileInfo();
QVariantMap result = resultData.toMap();
-
info->name = result["name"].toString();
+ qDebug("file info received for %s", qPrintable(info.m_Name));
info->version.parse(result["version"].toString());
+ if (info.m_Version.isEmpty()) {
+ info.m_Version = info.m_NewestVersion;
+ }
info->fileName = result["uri"].toString();
info->fileCategory = result["category_id"].toInt();
+ info->fileTime = matchDate(result["date"].toString());
info->description = result["description"].toString();
info->repository = "Nexus";
@@ -1010,7 +1132,7 @@ void DownloadManager::nxmFileInfoAvailable(int modID, int fileID, QVariant, QVar
info->fileID = fileID;
QObject *test = info;
- m_RequestIDs.insert(m_NexusInterface->requestDownloadURL(modID, fileID, this, qVariantFromValue(test)));
+ m_RequestIDs.insert(m_NexusInterface->requestDownloadURL(modID, fileID, this, qVariantFromValue(info)));
}
@@ -1096,6 +1218,7 @@ void DownloadManager::nxmDownloadURLsAvailable(int modID, int fileID, QVariant u
ModRepositoryFileInfo *info = qobject_cast<ModRepositoryFileInfo*>(qvariant_cast<QObject*>(userData));
QVariantList resultList = resultData.toList();
if (resultList.length() == 0) {
+ removePending(modID, fileID);
emit showMessage(tr("No download server available. Please try again later."));
return;
}
@@ -1114,7 +1237,7 @@ void DownloadManager::nxmDownloadURLsAvailable(int modID, int fileID, QVariant u
}
-void DownloadManager::nxmRequestFailed(int modID, QVariant, int requestID, const QString &errorString)
+void DownloadManager::nxmRequestFailed(int modID, int fileID, QVariant userData, int requestID, const QString &errorString)
{
std::set<int>::iterator idIter = m_RequestIDs.find(requestID);
if (idIter == m_RequestIDs.end()) {
@@ -1138,6 +1261,8 @@ void DownloadManager::nxmRequestFailed(int modID, QVariant, int requestID, const
break;
}
}
+
+ removePending(modID, fileID);
emit showMessage(tr("Failed to request file info from nexus: %1").arg(errorString));
}
@@ -1152,16 +1277,21 @@ void DownloadManager::downloadFinished()
QByteArray data = info->m_Reply->readAll();
info->m_Output.write(data);
info->m_Output.close();
+ TaskProgressManager::instance().forgetMe(info->m_TaskProgressId);
bool error = false;
-
if ((info->m_State != STATE_CANCELING) &&
(info->m_State != STATE_PAUSING)) {
+ bool textData = reply->header(QNetworkRequest::ContentTypeHeader).toString().startsWith("text", Qt::CaseInsensitive);
if ((info->m_Output.size() == 0) ||
((reply->error() != QNetworkReply::NoError) && (reply->error() != QNetworkReply::OperationCanceledError)) ||
- reply->header(QNetworkRequest::ContentTypeHeader).toString().startsWith("text", Qt::CaseInsensitive)) {
+ textData) {
if (info->m_Tries == 0) {
- emit showMessage(tr("Download failed: %1 (%2)").arg(reply->errorString()).arg(reply->error()));
+ if (textData && (reply->error() == QNetworkReply::NoError)) {
+ emit showMessage(tr("Download failed. Server reported: %1").arg(QString(data)));
+ } else {
+ emit showMessage(tr("Download failed: %1 (%2)").arg(reply->errorString()).arg(reply->error()));
+ }
}
error = true;
setState(info, STATE_PAUSING);
@@ -1233,7 +1363,7 @@ void DownloadManager::downloadFinished()
if ((info->m_Tries > 0) && error) {
--info->m_Tries;
- resumeDownload(index);
+ resumeDownloadInt(index);
}
} else {
qWarning("no download index %d", index);
@@ -1265,3 +1395,4 @@ void DownloadManager::directoryChanged(const QString&)
{
refreshList();
}
+
diff --git a/src/downloadmanager.h b/src/downloadmanager.h
index a5f7d5b8..4e8467ee 100644
--- a/src/downloadmanager.h
+++ b/src/downloadmanager.h
@@ -83,10 +83,14 @@ private:
int m_Tries;
bool m_ReQueried;
+ quint32 m_TaskProgressId;
+
MOBase::ModRepositoryFileInfo *m_FileInfo;
+ bool m_Hidden;
+
static DownloadInfo *createNew(const MOBase::ModRepositoryFileInfo *fileInfo, const QStringList &URLs);
- static DownloadInfo *createFromMeta(const QString &filePath);
+ static DownloadInfo *createFromMeta(const QString &filePath, bool showHidden);
/**
* @brief rename the file
@@ -106,7 +110,7 @@ private:
private:
static unsigned int s_NextDownloadID;
private:
- DownloadInfo() : m_TotalSize(0), m_ReQueried(false), m_FileInfo(NULL) {}
+ DownloadInfo() : m_TotalSize(0), m_ReQueried(false) {}
};
public:
@@ -152,6 +156,11 @@ public:
void setSupportedExtensions(const QStringList &extensions);
/**
+ * @brief sets whether hidden files are to be shown after all
+ */
+ void setShowHidden(bool showHidden);
+
+ /**
* @brief download from an already open network connection
*
* @param reply the network reply to download from
@@ -188,6 +197,19 @@ public:
int numTotalDownloads() const;
/**
+ * @brief retrieve number of pending downloads (nexus downloads for which we don't know the name and url yet)
+ * @return number of pending downloads
+ */
+ int numPendingDownloads() const;
+
+ /**
+ * @brief retrieve the info of a pending download
+ * @param index index of the pending download (index in the range [0, numPendingDownloads()[)
+ * @return pair of modid, fileid
+ */
+ std::pair<int, int> getPendingDownload(int index);
+
+ /**
* @brief retrieve the full path to the download specified by index
*
* @param index the index to look up
@@ -254,6 +276,13 @@ public:
int getModID(int index) const;
/**
+ * @brief determine if the specified file is supposed to be hidden
+ * @param index index of the file to look up
+ * @return true if the specified file is supposed to be hidden
+ */
+ bool isHidden(int index) const;
+
+ /**
* @brief retrieve all nexus info of the download specified by index
*
* @param index index of the file to look up
@@ -332,6 +361,11 @@ signals:
*/
void downloadSpeed(const QString &serverName, int bytesPerSecond);
+ /**
+ * @brief emitted whenever a new download is added to the list
+ */
+ void downloadAdded();
+
public slots:
/**
@@ -343,6 +377,12 @@ public slots:
void removeDownload(int index, bool deleteFile);
/**
+ * @brief restores the specified download to view (which was previously hidden
+ * @param index index of the download to restore
+ */
+ void restoreDownload(int index);
+
+ /**
* @brief cancel the specified download. This will lead to the corresponding file to be deleted
*
* @param index index of the download to cancel
@@ -363,7 +403,7 @@ public slots:
void nxmDownloadURLsAvailable(int modID, int fileID, QVariant userData, QVariant resultData, int requestID);
- void nxmRequestFailed(int modID, QVariant userData, int requestID, const QString &errorString);
+ void nxmRequestFailed(int modID, int fileID, QVariant userData, int requestID, const QString &errorString);
private slots:
@@ -405,6 +445,10 @@ private:
DownloadInfo *downloadInfoByID(unsigned int id);
+ QDateTime matchDate(const QString &timeString);
+
+ void removePending(int modID, int fileID);
+
private:
static const int AUTOMATIC_RETRIES = 3;
@@ -412,6 +456,9 @@ private:
private:
NexusInterface *m_NexusInterface;
+
+ QVector<std::pair<int, int> > m_PendingDownloads;
+
QVector<DownloadInfo*> m_ActiveDownloads;
QString m_OutputDirectory;
@@ -424,6 +471,12 @@ private:
std::map<QString, int> m_DownloadFails;
+ bool m_ShowHidden;
+
+ QRegExp m_DateExpression;
+
};
+
+
#endif // DOWNLOADMANAGER_H
diff --git a/src/editexecutablesdialog.cpp b/src/editexecutablesdialog.cpp
index e0d1994d..13223b68 100644
--- a/src/editexecutablesdialog.cpp
+++ b/src/editexecutablesdialog.cpp
@@ -30,7 +30,7 @@ using namespace MOShared;
EditExecutablesDialog::EditExecutablesDialog(const ExecutablesList &executablesList, QWidget *parent)
: TutorableDialog("EditExecutables", parent),
- ui(new Ui::EditExecutablesDialog), m_ExecutablesList(executablesList)
+ ui(new Ui::EditExecutablesDialog), m_CurrentItem(NULL), m_ExecutablesList(executablesList)
{
ui->setupUi(this);
@@ -68,21 +68,15 @@ void EditExecutablesDialog::refreshExecutablesWidget()
executablesWidget->addItem(newItem);
}
- QPushButton *addButton = findChild<QPushButton*>("addButton");
- QPushButton *removeButton = findChild<QPushButton*>("removeButton");
-
- addButton->setEnabled(false);
- removeButton->setEnabled(false);
+ ui->addButton->setEnabled(false);
+ ui->removeButton->setEnabled(false);
}
void EditExecutablesDialog::on_binaryEdit_textChanged(const QString &arg1)
{
- QPushButton *addButton = findChild<QPushButton*>("addButton");
-// QPushButton *removeButton = findChild<QPushButton*>("removeButton");
-
QFileInfo fileInfo(arg1);
- addButton->setEnabled(fileInfo.exists() && fileInfo.isFile());
+ ui->addButton->setEnabled(fileInfo.exists() && fileInfo.isFile());
}
void EditExecutablesDialog::resetInput()
@@ -91,23 +85,35 @@ void EditExecutablesDialog::resetInput()
ui->titleEdit->setText("");
ui->workingDirEdit->clear();
ui->argumentsEdit->setText("");
+ ui->appIDOverwriteEdit->clear();
+ ui->overwriteAppIDBox->setChecked(false);
ui->closeCheckBox->setChecked(false);
+ m_CurrentItem = NULL;
}
-void EditExecutablesDialog::on_addButton_clicked()
+void EditExecutablesDialog::saveExecutable()
{
- QLineEdit *titleEdit = findChild<QLineEdit*>("titleEdit");
- QLineEdit *binaryEdit = findChild<QLineEdit*>("binaryEdit");
- QLineEdit *argumentsEdit = findChild<QLineEdit*>("argumentsEdit");
- QLineEdit *workingDirEdit = findChild<QLineEdit*>("workingDirEdit");
- QCheckBox *closeCheckBox = findChild<QCheckBox*>("closeCheckBox");
-
- m_ExecutablesList.addExecutable(titleEdit->text(), QDir::fromNativeSeparators(binaryEdit->text()),
- argumentsEdit->text(), QDir::fromNativeSeparators(workingDirEdit->text()),
- (closeCheckBox->checkState() == Qt::Checked) ? DEFAULT_CLOSE : DEFAULT_STAY,
+ m_ExecutablesList.addExecutable(ui->titleEdit->text(), QDir::fromNativeSeparators(ui->binaryEdit->text()),
+ ui->argumentsEdit->text(), QDir::fromNativeSeparators(ui->workingDirEdit->text()),
+ (ui->closeCheckBox->checkState() == Qt::Checked) ? DEFAULT_CLOSE : DEFAULT_STAY,
ui->overwriteAppIDBox->isChecked() ? ui->appIDOverwriteEdit->text() : "",
true, false);
+}
+
+
+void EditExecutablesDialog::delayedRefresh()
+{
+ int index = ui->executablesListBox->currentIndex().row();
+ resetInput();
+ refreshExecutablesWidget();
+ ui->executablesListBox->setCurrentRow(index);
+}
+
+
+void EditExecutablesDialog::on_addButton_clicked()
+{
+ saveExecutable();
resetInput();
refreshExecutablesWidget();
@@ -196,37 +202,88 @@ void EditExecutablesDialog::on_titleEdit_textChanged(const QString &arg1)
}
}
-void EditExecutablesDialog::on_executablesListBox_itemClicked(QListWidgetItem *item)
+
+bool EditExecutablesDialog::executableChanged()
{
- QLineEdit *titleEdit = findChild<QLineEdit*>("titleEdit");
- QLineEdit *binaryEdit = findChild<QLineEdit*>("binaryEdit");
- QLineEdit *argumentsEdit = findChild<QLineEdit*>("argumentsEdit");
- QLineEdit *workingDirEdit = findChild<QLineEdit*>("workingDirEdit");
- QPushButton *removeButton = findChild<QPushButton*>("removeButton");
- QCheckBox *closeCheckBox = findChild<QCheckBox*>("closeCheckBox");
+ if (m_CurrentItem != NULL) {
+ const Executable &selectedExecutable = m_CurrentItem->data(Qt::UserRole).value<Executable>();
- const Executable &selectedExecutable = item->data(Qt::UserRole).value<Executable>();
+ return selectedExecutable.m_Arguments != ui->argumentsEdit->text()
+ || selectedExecutable.m_SteamAppID != ui->appIDOverwriteEdit->text()
+ || selectedExecutable.m_WorkingDirectory != QDir::fromNativeSeparators(ui->workingDirEdit->text())
+ || selectedExecutable.m_BinaryInfo.absoluteFilePath() != QDir::fromNativeSeparators(ui->binaryEdit->text())
+ || (selectedExecutable.m_CloseMO == DEFAULT_CLOSE) != ui->closeCheckBox->isChecked();
+ } else {
+ return false;
+ }
+}
+
+
+void EditExecutablesDialog::on_executablesListBox_currentItemChanged(QListWidgetItem *current, QListWidgetItem*)
+{
+ if (current == NULL) {
+ resetInput();
+ return;
+ }
+
+ if (executableChanged()) {
+ QMessageBox::StandardButton res = QMessageBox::question(this, tr("Save Changes?"),
+ tr("You made changes to the current executable, do you want to save them?"),
+ QMessageBox::Yes | QMessageBox::No | QMessageBox::Cancel);
+ if (res == QMessageBox::Cancel) {
+ return;
+ } else if (res == QMessageBox::Yes) {
+ // this invalidates the item passed as a a parameter
+ saveExecutable();
+
+ QTimer::singleShot(50, this, SLOT(delayedRefresh()));
+ return;
+ }
+ }
- titleEdit->setText(selectedExecutable.m_Title);
- binaryEdit->setText(QDir::toNativeSeparators(selectedExecutable.m_BinaryInfo.absoluteFilePath()));
- argumentsEdit->setText(selectedExecutable.m_Arguments);
- workingDirEdit->setText(QDir::toNativeSeparators(selectedExecutable.m_WorkingDirectory));
- closeCheckBox->setChecked(selectedExecutable.m_CloseMO == DEFAULT_CLOSE);
+ m_CurrentItem = current;
+
+ const Executable &selectedExecutable = current->data(Qt::UserRole).value<Executable>();
+
+ ui->titleEdit->setText(selectedExecutable.m_Title);
+ ui->binaryEdit->setText(QDir::toNativeSeparators(selectedExecutable.m_BinaryInfo.absoluteFilePath()));
+ ui->argumentsEdit->setText(selectedExecutable.m_Arguments);
+ ui->workingDirEdit->setText(QDir::toNativeSeparators(selectedExecutable.m_WorkingDirectory));
+ ui->closeCheckBox->setChecked(selectedExecutable.m_CloseMO == DEFAULT_CLOSE);
if (selectedExecutable.m_CloseMO == NEVER_CLOSE) {
- closeCheckBox->setEnabled(false);
- closeCheckBox->setToolTip(tr("MO must be kept running or this application will not work correctly."));
+ ui->closeCheckBox->setEnabled(false);
+ ui->closeCheckBox->setToolTip(tr("MO must be kept running or this application will not work correctly."));
} else {
- closeCheckBox->setEnabled(true);
- closeCheckBox->setToolTip(tr("If checked, MO will be closed once the specified executable is run."));
+ ui->closeCheckBox->setEnabled(true);
+ ui->closeCheckBox->setToolTip(tr("If checked, MO will be closed once the specified executable is run."));
}
- removeButton->setEnabled(selectedExecutable.m_Custom);
+ ui->removeButton->setEnabled(selectedExecutable.m_Custom);
ui->overwriteAppIDBox->setChecked(selectedExecutable.m_SteamAppID != 0);
if (selectedExecutable.m_SteamAppID != 0) {
ui->appIDOverwriteEdit->setText(selectedExecutable.m_SteamAppID);
+ } else {
+ ui->appIDOverwriteEdit->clear();
}
}
+
void EditExecutablesDialog::on_overwriteAppIDBox_toggled(bool checked)
{
ui->appIDOverwriteEdit->setEnabled(checked);
}
+
+void EditExecutablesDialog::on_closeButton_clicked()
+{
+ if (executableChanged()) {
+ QMessageBox::StandardButton res = QMessageBox::question(this, tr("Save Changes?"),
+ tr("You made changes to the current executable, do you want to save them?"),
+ QMessageBox::Yes | QMessageBox::No | QMessageBox::Cancel);
+ if (res == QMessageBox::Cancel) {
+ return;
+ } else if (res == QMessageBox::Yes) {
+ saveExecutable();
+ }
+ }
+ this->accept();
+}
+
diff --git a/src/editexecutablesdialog.h b/src/editexecutablesdialog.h
index da26b177..a90cbc59 100644
--- a/src/editexecutablesdialog.h
+++ b/src/editexecutablesdialog.h
@@ -22,6 +22,7 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
#include "tutorabledialog.h"
#include <QListWidgetItem>
+#include <QTimer>
#include "executableslist.h"
namespace Ui {
@@ -54,6 +55,7 @@ public:
**/
ExecutablesList getExecutablesList() const;
+ void saveExecutable();
private slots:
void on_binaryEdit_textChanged(const QString &arg1);
@@ -66,21 +68,31 @@ private slots:
void on_titleEdit_textChanged(const QString &arg1);
- void on_executablesListBox_itemClicked(QListWidgetItem *item);
-
void on_overwriteAppIDBox_toggled(bool checked);
void on_browseDirButton_clicked();
+ void on_closeButton_clicked();
+
+ void on_executablesListBox_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous);
+
+ void delayedRefresh();
+
private:
void resetInput();
void refreshExecutablesWidget();
+ bool executableChanged();
+
private:
Ui::EditExecutablesDialog *ui;
+
+ QListWidgetItem *m_CurrentItem;
+
ExecutablesList m_ExecutablesList;
+
};
#endif // EDITEXECUTABLESDIALOG_H
diff --git a/src/editexecutablesdialog.ui b/src/editexecutablesdialog.ui
index b417452a..4f0462db 100644
--- a/src/editexecutablesdialog.ui
+++ b/src/editexecutablesdialog.ui
@@ -213,50 +213,31 @@ Right now the only case I know of where this needs to be overwritten is for the
</layout>
</item>
<item>
- <widget class="QDialogButtonBox" name="buttonBox">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="standardButtons">
- <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
- </property>
- </widget>
+ <layout class="QHBoxLayout" name="horizontalLayout_7">
+ <item>
+ <spacer name="horizontalSpacer">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QPushButton" name="closeButton">
+ <property name="text">
+ <string>Close</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
</item>
</layout>
</widget>
<resources/>
- <connections>
- <connection>
- <sender>buttonBox</sender>
- <signal>accepted()</signal>
- <receiver>EditExecutablesDialog</receiver>
- <slot>accept()</slot>
- <hints>
- <hint type="sourcelabel">
- <x>248</x>
- <y>254</y>
- </hint>
- <hint type="destinationlabel">
- <x>157</x>
- <y>274</y>
- </hint>
- </hints>
- </connection>
- <connection>
- <sender>buttonBox</sender>
- <signal>rejected()</signal>
- <receiver>EditExecutablesDialog</receiver>
- <slot>reject()</slot>
- <hints>
- <hint type="sourcelabel">
- <x>316</x>
- <y>260</y>
- </hint>
- <hint type="destinationlabel">
- <x>286</x>
- <y>274</y>
- </hint>
- </hints>
- </connection>
- </connections>
+ <connections/>
</ui>
diff --git a/src/executableslist.cpp b/src/executableslist.cpp
index 4e39c1a3..8f2da051 100644
--- a/src/executableslist.cpp
+++ b/src/executableslist.cpp
@@ -106,7 +106,7 @@ const Executable &ExecutablesList::find(const QString &title) const
Executable &ExecutablesList::find(const QString &title)
{
for (std::vector<Executable>::iterator iter = m_Executables.begin(); iter != m_Executables.end(); ++iter) {
- if (iter->m_Title == title) {
+ if (QString::compare(iter->m_Title, title, Qt::CaseInsensitive) == 0) {
return *iter;
}
}
@@ -172,16 +172,6 @@ void ExecutablesList::addExecutable(const QString &title, const QString &executa
}
}
-/*void ExecutablesList::remove(const QString &executableName)
-{
- for (std::vector<Executable>::iterator iter = m_Executables.begin(); iter != m_Executables.end(); ++iter) {
- if (iter->m_Custom && (iter->m_BinaryInfo.absoluteFilePath() == executableName)) {
- m_Executables.erase(iter);
- break;
- }
- }
-}*/
-
void ExecutablesList::remove(const QString &title)
{
diff --git a/src/finddialog.h b/src/finddialog.h
deleted file mode 100644
index 70493654..00000000
--- a/src/finddialog.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
-Copyright (C) 2012 Sebastian Herbord. All rights reserved.
-
-This file is part of Mod Organizer.
-
-Mod Organizer is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-Mod Organizer is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#ifndef FINDDIALOG_H
-#define FINDDIALOG_H
-
-#include <QDialog>
-
-namespace Ui {
- class FindDialog;
-}
-
-/**
- * @brief Find dialog used in the TextView dialog
- **/
-class FindDialog : public QDialog
-{
-
- Q_OBJECT
-
-public:
-
- /**
- * @brief constructor
- *
- * @param parent parent widget
- **/
- explicit FindDialog(QWidget *parent = 0);
-
- ~FindDialog();
-
-signals:
-
- /**
- * @brief emitted when the user wants to jump to the next location matching the pattern
- **/
- void findNext();
-
- /**
- * @brief emitted when the user changes the pattern to search for
- *
- * @param pattern the new search pattern
- **/
- void patternChanged(const QString &pattern);
-
-private slots:
- void on_nextBtn_clicked();
-
- void on_patternEdit_textChanged(const QString &arg1);
-
- void on_closeBtn_clicked();
-
-private:
- Ui::FindDialog *ui;
-};
-
-#endif // FINDDIALOG_H
diff --git a/src/icondelegate.cpp b/src/icondelegate.cpp
index 2540e1d5..a0993add 100644
--- a/src/icondelegate.cpp
+++ b/src/icondelegate.cpp
@@ -21,6 +21,7 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
#include <QHBoxLayout>
#include <QLabel>
#include <QPainter>
+#include <QDebug>
IconDelegate::IconDelegate(QObject *parent)
@@ -29,53 +30,41 @@ IconDelegate::IconDelegate(QObject *parent)
}
-QIcon IconDelegate::getFlagIcon(ModInfo::EFlag flag) const
-{
- switch (flag) {
- case ModInfo::FLAG_BACKUP: return QIcon(":/MO/gui/emblem_backup");
- case ModInfo::FLAG_INVALID: return QIcon(":/MO/gui/emblem_problem");
- case ModInfo::FLAG_NOTENDORSED: return QIcon(":/MO/gui/emblem_notendorsed");
- case ModInfo::FLAG_NOTES: return QIcon(":/MO/gui/emblem_notes");
- case ModInfo::FLAG_CONFLICT_OVERWRITE: return QIcon(":/MO/gui/emblem_conflict_overwrite");
- case ModInfo::FLAG_CONFLICT_OVERWRITTEN: return QIcon(":/MO/gui/emblem_conflict_overwritten");
- case ModInfo::FLAG_CONFLICT_MIXED: return QIcon(":/MO/gui/emblem_conflict_mixed");
- case ModInfo::FLAG_CONFLICT_REDUNDANT: return QIcon(":MO/gui/emblem_conflict_redundant");
- default: return QIcon();
- }
-}
-
-
void IconDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
QStyledItemDelegate::paint(painter, option, index);
- QVariant modid = index.data(Qt::UserRole + 1);
- if (!modid.isValid()) {
- return;
- }
- ModInfo::Ptr info = ModInfo::getByIndex(modid.toInt());
- std::vector<ModInfo::EFlag> flags = info->getFlags();
+
+ QList<QIcon> icons = getIcons(index);
int x = 4;
painter->save();
+
+ int iconWidth = icons.size() > 0 ? ((option.rect.width() / icons.size()) - 4) : 16;
+ iconWidth = std::min(16, iconWidth);
+
painter->translate(option.rect.topLeft());
- for (auto iter = flags.begin(); iter != flags.end(); ++iter) {
- QIcon temp = getFlagIcon(*iter);
- painter->drawPixmap(x, 2, 16, 16, temp.pixmap(QSize(16, 16)));
- x += 20;
+ for (auto iter = icons.begin(); iter != icons.end(); ++iter) {
+ painter->drawPixmap(x, 2, iconWidth, iconWidth, iter->pixmap(QSize(iconWidth, iconWidth)));
+ x += iconWidth + 4;
}
painter->restore();
}
-QSize IconDelegate::sizeHint(const QStyleOptionViewItem&, const QModelIndex &modelIndex) const
+QSize IconDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &modelIndex) const
{
+ int count = getNumIcons(modelIndex);
unsigned int index = modelIndex.data(Qt::UserRole + 1).toInt();
+ QSize result;
if (index < ModInfo::getNumMods()) {
- ModInfo::Ptr info = ModInfo::getByIndex(index);
- return QSize(info->getFlags().size() * 20, 20);
+ result = QSize(count * 40, 20);
} else {
- return QSize(1, 20);
+ result = QSize(1, 20);
+ }
+ if (option.rect.width() > 0) {
+ result.setWidth(std::min(option.rect.width(), result.width()));
}
+ return result;
}
diff --git a/src/icondelegate.h b/src/icondelegate.h
index dd9f9dfc..cf292443 100644
--- a/src/icondelegate.h
+++ b/src/icondelegate.h
@@ -34,13 +34,16 @@ public:
virtual void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const;
virtual QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const;
+
signals:
public slots:
private:
- QIcon getFlagIcon(ModInfo::EFlag flag) const;
+ virtual QList<QIcon> getIcons(const QModelIndex &index) const = 0;
+ virtual size_t getNumIcons(const QModelIndex &index) const = 0;
+
private:
diff --git a/src/installationmanager.cpp b/src/installationmanager.cpp
index 378eb38a..7b8ed176 100644
--- a/src/installationmanager.cpp
+++ b/src/installationmanager.cpp
@@ -46,6 +46,7 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
#include <QDateTime>
#include <QDirIterator>
#include <boost/assign.hpp>
+#include <boost/scoped_ptr.hpp>
using namespace MOBase;
@@ -68,7 +69,7 @@ template <typename T> T resolveFunction(QLibrary &lib, const char *name)
InstallationManager::InstallationManager(QWidget *parent)
: QObject(parent), m_ParentWidget(parent),
- m_InstallationProgress(parent), m_SupportedExtensions(boost::assign::list_of("zip")("rar")("7z")("fomod"))
+ m_InstallationProgress(parent), m_SupportedExtensions(boost::assign::list_of("zip")("rar")("7z")("fomod")("001"))
{
QLibrary archiveLib("dlls\\archive.dll");
if (!archiveLib.load()) {
@@ -183,11 +184,7 @@ bool InstallationManager::unpackSingleFile(const QString &fileName)
QString InstallationManager::extractFile(const QString &fileName)
{
if (unpackSingleFile(fileName)) {
- QString tempFileName = QDir::tempPath().append("/").append(QFileInfo(fileName).fileName());
-
- m_FilesToDelete.insert(tempFileName);
-
- return tempFileName;
+ return QDir::tempPath().append("/").append(QFileInfo(fileName).fileName());
} else {
return QString();
}
@@ -429,7 +426,7 @@ QString InstallationManager::generateBackupName(const QString &directoryName) co
}
-bool InstallationManager::testOverwrite(GuessedValue<QString> &modName) const
+bool InstallationManager::testOverwrite(GuessedValue<QString> &modName, bool *merge) const
{
QString targetDirectory = QDir::fromNativeSeparators(m_ModsDirectory + "\\" + modName);
@@ -443,6 +440,9 @@ bool InstallationManager::testOverwrite(GuessedValue<QString> &modName) const
return false;
}
}
+ if (merge != nullptr) {
+ *merge = (overwriteDialog.action() == QueryOverwriteDialog::ACT_MERGE);
+ }
if (overwriteDialog.action() == QueryOverwriteDialog::ACT_RENAME) {
bool ok = false;
QString name = QInputDialog::getText(m_ParentWidget, tr("Mod Name"), tr("Name"),
@@ -509,7 +509,6 @@ bool InstallationManager::ensureValidModName(GuessedValue<QString> &name) const
return true;
}
-
bool InstallationManager::doInstall(GuessedValue<QString> &modName, int modID,
const QString &version, const QString &newestVersion, int categoryID)
{
@@ -517,8 +516,9 @@ bool InstallationManager::doInstall(GuessedValue<QString> &modName, int modID,
return false;
}
+ bool merge = false;
// determine target directory
- if (!testOverwrite(modName)) {
+ if (!testOverwrite(modName, &merge)) {
return false;
}
@@ -531,7 +531,6 @@ bool InstallationManager::doInstall(GuessedValue<QString> &modName, int modID,
m_InstallationProgress.setValue(0);
m_InstallationProgress.setWindowModality(Qt::WindowModal);
m_InstallationProgress.show();
-
if (!m_CurrentArchive->extract(ToWString(QDir::toNativeSeparators(targetDirectory)).c_str(),
new MethodCallback<InstallationManager, void, float>(this, &InstallationManager::updateProgress),
new MethodCallback<InstallationManager, void, LPCWSTR>(this, &InstallationManager::updateProgressFile),
@@ -554,7 +553,7 @@ bool InstallationManager::doInstall(GuessedValue<QString> &modName, int modID,
}
if (!settingsFile.contains("version") ||
(!version.isEmpty() &&
- (VersionInfo(version) >= VersionInfo(settingsFile.value("version").toString())))) {
+ (!merge || (VersionInfo(version) >= VersionInfo(settingsFile.value("version").toString()))))) {
settingsFile.setValue("version", version);
}
if (!newestVersion.isEmpty() || !settingsFile.contains("newestVersion")) {
@@ -570,49 +569,36 @@ bool InstallationManager::doInstall(GuessedValue<QString> &modName, int modID,
}
-void InstallationManager::openFile(const QString &fileName)
+bool InstallationManager::wasCancelled()
{
- unpackSingleFile(fileName);
+ return m_CurrentArchive->getLastError() == Archive::ERROR_EXTRACT_CANCELLED;
+}
- QString tempFileName = QDir::tempPath().append("/").append(QFileInfo(fileName).fileName());
- SHELLEXECUTEINFOW execInfo;
- memset(&execInfo, 0, sizeof(SHELLEXECUTEINFOW));
- execInfo.cbSize = sizeof(SHELLEXECUTEINFOW);
- execInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
- execInfo.lpVerb = L"open";
- std::wstring fileNameW = ToWString(tempFileName);
- execInfo.lpFile = fileNameW.c_str();
- execInfo.nShow = SW_SHOWNORMAL;
- if (!::ShellExecuteExW(&execInfo)) {
- qCritical("failed to spawn %s: %d", tempFileName.toUtf8().constData(), ::GetLastError());
- }
+void InstallationManager::postInstallCleanup() const
+{
+ m_CurrentArchive->close();
- m_FilesToDelete.insert(tempFileName);
-}
+ // directories we may want to remove. sorted from longest to shortest to ensure we remove subdirectories first.
+ auto longestFirst = [](const QString &LHS, const QString &RHS) -> bool {
+ if (LHS.size() != RHS.size()) return LHS.size() > RHS.size();
+ else return LHS < RHS;
+ };
+ std::set<QString, std::function<bool(const QString&, const QString&)>> directoriesToRemove(longestFirst);
-// copy and pasted from mo_dll
-bool EndsWith(LPCWSTR string, LPCWSTR subString)
-{
- size_t slen = wcslen(string);
- size_t len = wcslen(subString);
- if (slen < len) {
- return false;
+ // clean up temp files
+ // TODO: this doesn't yet remove directories. Also, the files may be left there if this point isn't reached
+ foreach (const QString &tempFile, m_TempFilesToDelete) {
+ QFileInfo fileInfo(QDir::tempPath() + "/" + tempFile);
+ QFile::remove(fileInfo.absoluteFilePath());
+ directoriesToRemove.insert(fileInfo.absolutePath());
}
- for (size_t i = 0; i < len; ++i) {
- if (towlower(string[slen - len + i]) != towlower(subString[i])) {
- return false;
- }
+ // try to delete each directory we had temporary files in. the call fails for non-empty directories which is ok
+ foreach (const QString &dir, directoriesToRemove) {
+ QDir().rmdir(dir);
}
- return true;
-}
-
-
-bool InstallationManager::wasCancelled()
-{
- return m_CurrentArchive->getLastError() == Archive::ERROR_EXTRACT_CANCELLED;
}
@@ -665,7 +651,7 @@ bool InstallationManager::install(const QString &fileName, GuessedValue<QString>
}
m_CurrentFile = fileInfo.absoluteFilePath();
- if (fileInfo.dir() == QDir(ToQString(GameInfo::instance().getDownloadDir()))) {
+ if (fileInfo.dir() == QDir(m_DownloadsDirectory)) {
m_CurrentFile = fileInfo.fileName();
}
qDebug("using mod name \"%s\" (id %d) -> %s", modName->toUtf8().constData(), modID, qPrintable(m_CurrentFile));
@@ -673,13 +659,12 @@ bool InstallationManager::install(const QString &fileName, GuessedValue<QString>
// open the archive and construct the directory tree the installers work on
bool archiveOpen = m_CurrentArchive->open(ToWString(QDir::toNativeSeparators(fileName)).c_str(),
new MethodCallback<InstallationManager, void, LPSTR>(this, &InstallationManager::queryPassword));
+ if (!archiveOpen) {
+ qDebug("integrated archiver can't open %s. errorcode %d", qPrintable(fileName), m_CurrentArchive->getLastError());
+ }
+ ON_BLOCK_EXIT(std::bind(&InstallationManager::postInstallCleanup, this));
- ON_BLOCK_EXIT([this] {
- this->m_CurrentArchive->close();
- });
-
- DirectoryTree *filesTree = archiveOpen ? createFilesTree() : NULL;
-
+ QScopedPointer<DirectoryTree> filesTree(archiveOpen ? createFilesTree() : NULL);
IPluginInstaller::EInstallResult installResult = IPluginInstaller::RESULT_NOTATTEMPTED;
std::sort(m_Installers.begin(), m_Installers.end(), [] (IPluginInstaller *LHS, IPluginInstaller *RHS) {
@@ -693,8 +678,12 @@ bool InstallationManager::install(const QString &fileName, GuessedValue<QString>
}
// try only manual installers if that was requested
- if ((installResult == IPluginInstaller::RESULT_MANUALREQUESTED) && !installer->isManualInstaller()) {
- continue;
+ if (installResult == IPluginInstaller::RESULT_MANUALREQUESTED) {
+ if (!installer->isManualInstaller()) {
+ continue;
+ }
+ } else if (installResult != IPluginInstaller::RESULT_NOTATTEMPTED) {
+ break;
}
try {
@@ -704,7 +693,7 @@ bool InstallationManager::install(const QString &fileName, GuessedValue<QString>
(filesTree != NULL) && (installer->isArchiveSupported(*filesTree))) {
installResult = installerSimple->install(modName, *filesTree, version, modID);
if (installResult == IPluginInstaller::RESULT_SUCCESS) {
- mapToArchive(filesTree);
+ mapToArchive(filesTree.data());
// the simple installer only prepares the installation, the rest works the same for all installers
if (!doInstall(modName, modID, version, newestVersion, categoryID)) {
installResult = IPluginInstaller::RESULT_FAILED;
@@ -729,13 +718,6 @@ bool InstallationManager::install(const QString &fileName, GuessedValue<QString>
qPrintable(installer->name()), e.what());
}
- // clean up temp files
- // TODO: this doesn't yet remove directories. Also, the files may be left there if this point isn't reached
- foreach (const QString &tempFile, m_TempFilesToDelete) {
- QFile::remove(QDir::tempPath() + "/" + tempFile);
- }
-
-
// act upon the installation result. at this point the files have already been
// extracted to the correct location
switch (installResult) {
@@ -743,7 +725,8 @@ bool InstallationManager::install(const QString &fileName, GuessedValue<QString>
case IPluginInstaller::RESULT_FAILED: {
return false;
} break;
- case IPluginInstaller::RESULT_SUCCESS: {
+ case IPluginInstaller::RESULT_SUCCESS:
+ case IPluginInstaller::RESULT_SUCCESSCANCEL: {
if (filesTree != NULL) {
DirectoryTree::node_iterator iniTweakNode = filesTree->nodeFind(DirectoryTreeInformation("INI Tweaks"));
hasIniTweaks = (iniTweakNode != filesTree->nodesEnd()) &&
diff --git a/src/installationmanager.h b/src/installationmanager.h
index 0e43a15d..3478fecf 100644
--- a/src/installationmanager.h
+++ b/src/installationmanager.h
@@ -65,6 +65,12 @@ public:
void setModsDirectory(const QString &modsDirectory) { m_ModsDirectory = modsDirectory; }
/**
+ * @brief update the directory where downloads are stored
+ * @param downloadDirectory the download directory
+ */
+ void setDownloadDirectory(const QString &downloadDirectory) { m_DownloadsDirectory = downloadDirectory; }
+
+ /**
* @brief install a mod from an archive
*
* @param fileName absolute file name of the archive to install
@@ -132,9 +138,10 @@ public:
/**
* @brief test if the specified mod name is free. If not, query the user how to proceed
* @param modName current possible names for the mod
+ * @param merge if this value is not null, the value will be set to whether the use chose to merge or replace
* @return true if we can proceed with the installation, false if the user canceled or in case of an unrecoverable error
*/
- virtual bool testOverwrite(MOBase::GuessedValue<QString> &modName) const;
+ virtual bool testOverwrite(MOBase::GuessedValue<QString> &modName, bool *merge = NULL) const;
private:
@@ -159,7 +166,7 @@ private:
bool isSimpleArchiveTopLayer(const MOBase::DirectoryTree::Node *node, bool bainStyle);
MOBase::DirectoryTree::Node *getSimpleArchiveBase(MOBase::DirectoryTree *dataTree);
- bool testOverwrite(const QString &modsDirectory, MOBase::GuessedValue<QString> &modName);
+ //bool testOverwrite(const QString &modsDirectory, MOBase::GuessedValue<QString> &modName, bool *merge = NULL);
bool doInstall(MOBase::GuessedValue<QString> &modName,
int modID, const QString &version, const QString &newestVersion, int categoryID);
@@ -168,9 +175,7 @@ private:
bool ensureValidModName(MOBase::GuessedValue<QString> &name) const;
-private slots:
-
- void openFile(const QString &fileName);
+ void postInstallCleanup() const;
private:
@@ -193,6 +198,7 @@ private:
QWidget *m_ParentWidget;
QString m_ModsDirectory;
+ QString m_DownloadsDirectory;
std::vector<MOBase::IPluginInstaller*> m_Installers;
std::set<QString, CaseInsensitive> m_SupportedExtensions;
@@ -202,7 +208,6 @@ private:
QProgressDialog m_InstallationProgress;
- std::set<QString> m_FilesToDelete;
std::set<QString> m_TempFilesToDelete;
};
diff --git a/src/json.cpp b/src/json.cpp
index 7bfaed39..ca2d728f 100644
--- a/src/json.cpp
+++ b/src/json.cpp
@@ -1,588 +1,522 @@
-/* Copyright 2011 Eeli Reilin. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY <COPYRIGHT HOLDER> ''AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
- * EVENT SHALL EELI REILIN OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
- * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * The views and conclusions contained in the software and documentation
- * are those of the authors and should not be interpreted as representing
- * official policies, either expressed or implied, of Eeli Reilin.
- */
-
-/**
- * \file json.cpp
- */
-
-#include "json.h"
-#include <iostream>
-
-namespace QtJson
-{
-
-
-static QString sanitizeString(QString str)
-{
- str.replace(QLatin1String("\\"), QLatin1String("\\\\"));
- str.replace(QLatin1String("\""), QLatin1String("\\\""));
- str.replace(QLatin1String("\b"), QLatin1String("\\b"));
- str.replace(QLatin1String("\f"), QLatin1String("\\f"));
- str.replace(QLatin1String("\n"), QLatin1String("\\n"));
- str.replace(QLatin1String("\r"), QLatin1String("\\r"));
- str.replace(QLatin1String("\t"), QLatin1String("\\t"));
- return QString(QLatin1String("\"%1\"")).arg(str);
-}
-
-static QByteArray join(const QList<QByteArray> &list, const QByteArray &sep)
-{
- QByteArray res;
- Q_FOREACH(const QByteArray &i, list)
- {
- if(!res.isEmpty())
- {
- res += sep;
- }
- res += i;
- }
- return res;
-}
-
-/**
- * parse
- */
-QVariant Json::parse(const QString &json)
-{
- bool success = true;
- return Json::parse(json, success);
-}
-
-/**
- * parse
- */
-QVariant Json::parse(const QString &json, bool &success)
-{
- success = true;
-
- //Return an empty QVariant if the JSON data is either null or empty
- if(!json.isNull() || !json.isEmpty())
- {
- QString data = json;
- //We'll start from index 0
- int index = 0;
-
- //Parse the first value
- QVariant value = Json::parseValue(data, index, success);
-
- //Return the parsed value
- return value;
- }
- else
- {
- //Return the empty QVariant
- return QVariant();
- }
-}
-
-QByteArray Json::serialize(const QVariant &data)
-{
- bool success = true;
- return Json::serialize(data, success);
-}
-
-QByteArray Json::serialize(const QVariant &data, bool &success)
-{
- QByteArray str;
- success = true;
-
- if(!data.isValid()) // invalid or null?
- {
- str = "null";
- }
- else if((data.type() == QVariant::List) || (data.type() == QVariant::StringList)) // variant is a list?
- {
- QList<QByteArray> values;
- const QVariantList list = data.toList();
- Q_FOREACH(const QVariant& v, list)
- {
- QByteArray serializedValue = serialize(v);
- if(serializedValue.isNull())
- {
- success = false;
- break;
- }
- values << serializedValue;
- }
-
- str = "[ " + join( values, ", " ) + " ]";
- }
- else if(data.type() == QVariant::Map) // variant is a map?
- {
- const QVariantMap vmap = data.toMap();
- QMapIterator<QString, QVariant> it( vmap );
- str = "{ ";
- QList<QByteArray> pairs;
- while(it.hasNext())
- {
- it.next();
- QByteArray serializedValue = serialize(it.value());
- if(serializedValue.isNull())
- {
- success = false;
- break;
- }
- pairs << sanitizeString(it.key()).toUtf8() + " : " + serializedValue;
- }
- str += join(pairs, ", ");
- str += " }";
- }
- else if((data.type() == QVariant::String) || (data.type() == QVariant::ByteArray)) // a string or a byte array?
- {
- str = sanitizeString(data.toString()).toUtf8();
- }
- else if(data.type() == QVariant::Double) // double?
- {
- str = QByteArray::number(data.toDouble());
- if(!str.contains(".") && ! str.contains("e"))
- {
- str += ".0";
- }
- }
- else if (data.type() == QVariant::Bool) // boolean value?
- {
- str = data.toBool() ? "true" : "false";
- }
- else if (data.type() == QVariant::ULongLong) // large unsigned number?
- {
- str = QByteArray::number(data.value<qulonglong>());
- }
- else if ( data.canConvert<qlonglong>() ) // any signed number?
- {
- str = QByteArray::number(data.value<qlonglong>());
- }
- else if (data.canConvert<long>())
- {
- str = sanitizeString(QString::number(data.value<long>())).toUtf8();
- }
- else if (data.canConvert<QString>()) // can value be converted to string?
- {
- // this will catch QDate, QDateTime, QUrl, ...
- str = sanitizeString(data.toString()).toUtf8();
- }
- else
- {
- success = false;
- }
- if (success)
- {
- return str;
- }
- else
- {
- return QByteArray();
- }
-}
-
-/**
- * parseValue
- */
-QVariant Json::parseValue(const QString &json, int &index, bool &success)
-{
- //Determine what kind of data we should parse by
- //checking out the upcoming token
- switch(Json::lookAhead(json, index))
- {
- case JsonTokenString:
- return Json::parseString(json, index, success);
- case JsonTokenNumber:
- return Json::parseNumber(json, index);
- case JsonTokenCurlyOpen:
- return Json::parseObject(json, index, success);
- case JsonTokenSquaredOpen:
- return Json::parseArray(json, index, success);
- case JsonTokenTrue:
- Json::nextToken(json, index);
- return QVariant(true);
- case JsonTokenFalse:
- Json::nextToken(json, index);
- return QVariant(false);
- case JsonTokenNull:
- Json::nextToken(json, index);
- return QVariant();
- case JsonTokenNone:
- break;
- }
-
- //If there were no tokens, flag the failure and return an empty QVariant
- success = false;
- return QVariant();
-}
-
-/**
- * parseObject
- */
-QVariant Json::parseObject(const QString &json, int &index, bool &success)
-{
- QVariantMap map;
- int token;
-
- //Get rid of the whitespace and increment index
- Json::nextToken(json, index);
-
- //Loop through all of the key/value pairs of the object
- bool done = false;
- while(!done)
- {
- //Get the upcoming token
- token = Json::lookAhead(json, index);
-
- if(token == JsonTokenNone)
- {
- success = false;
- return QVariantMap();
- }
- else if(token == JsonTokenComma)
- {
- Json::nextToken(json, index);
- }
- else if(token == JsonTokenCurlyClose)
- {
- Json::nextToken(json, index);
- return map;
- }
- else
- {
- //Parse the key/value pair's name
- QString name = Json::parseString(json, index, success).toString();
-
- if(!success)
- {
- return QVariantMap();
- }
-
- //Get the next token
- token = Json::nextToken(json, index);
-
- //If the next token is not a colon, flag the failure
- //return an empty QVariant
- if(token != JsonTokenColon)
- {
- success = false;
- return QVariant(QVariantMap());
- }
-
- //Parse the key/value pair's value
- QVariant value = Json::parseValue(json, index, success);
-
- if(!success)
- {
- return QVariantMap();
- }
-
- //Assign the value to the key in the map
- map[name] = value;
- }
- }
-
- //Return the map successfully
- return QVariant(map);
-}
-
-/**
- * parseArray
- */
-QVariant Json::parseArray(const QString &json, int &index, bool &success)
-{
- QVariantList list;
-
- Json::nextToken(json, index);
-
- bool done = false;
- while(!done)
- {
- int token = Json::lookAhead(json, index);
-
- if(token == JsonTokenNone)
- {
- success = false;
- return QVariantList();
- }
- else if(token == JsonTokenComma)
- {
- Json::nextToken(json, index);
- }
- else if(token == JsonTokenSquaredClose)
- {
- Json::nextToken(json, index);
- break;
- }
- else
- {
- QVariant value = Json::parseValue(json, index, success);
-
- if(!success)
- {
- return QVariantList();
- }
-
- list.push_back(value);
- }
- }
-
- return QVariant(list);
-}
-
-/**
- * parseString
- */
-QVariant Json::parseString(const QString &json, int &index, bool &success)
-{
- QString s;
- QChar c;
-
- Json::eatWhitespace(json, index);
-
- c = json[index++];
-
- bool complete = false;
- while(!complete)
- {
- if(index == json.size())
- {
- break;
- }
-
- c = json[index++];
-
- if(c == '\"')
- {
- complete = true;
- break;
- }
- else if(c == '\\')
- {
- if(index == json.size())
- {
- break;
- }
-
- c = json[index++];
-
- if(c == '\"')
- {
- s.append('\"');
- }
- else if(c == '\\')
- {
- s.append('\\');
- }
- else if(c == '/')
- {
- s.append('/');
- }
- else if(c == 'b')
- {
- s.append('\b');
- }
- else if(c == 'f')
- {
- s.append('\f');
- }
- else if(c == 'n')
- {
- s.append('\n');
- }
- else if(c == 'r')
- {
- s.append('\r');
- }
- else if(c == 't')
- {
- s.append('\t');
- }
- else if(c == 'u')
- {
- int remainingLength = json.size() - index;
-
- if(remainingLength >= 4)
- {
- QString unicodeStr = json.mid(index, 4);
-
- int symbol = unicodeStr.toInt(0, 16);
-
- s.append(QChar(symbol));
-
- index += 4;
- }
- else
- {
- break;
- }
- }
- }
- else
- {
- s.append(c);
- }
- }
-
- if(!complete)
- {
- success = false;
- return QVariant();
- }
-
- return QVariant(s);
-}
-
-/**
- * parseNumber
- */
-QVariant Json::parseNumber(const QString &json, int &index)
-{
- Json::eatWhitespace(json, index);
-
- int lastIndex = Json::lastIndexOfNumber(json, index);
- int charLength = (lastIndex - index) + 1;
- QString numberStr;
-
- numberStr = json.mid(index, charLength);
-
- index = lastIndex + 1;
-
- if (numberStr.contains('.')) {
- return QVariant(numberStr.toDouble(NULL));
- } else if (numberStr.startsWith('-')) {
- return QVariant(numberStr.toLongLong(NULL));
- } else {
- return QVariant(numberStr.toULongLong(NULL));
- }
-}
-
-/**
- * lastIndexOfNumber
- */
-int Json::lastIndexOfNumber(const QString &json, int index)
-{
- int lastIndex;
-
- for(lastIndex = index; lastIndex < json.size(); lastIndex++)
- {
- if(QString("0123456789+-.eE").indexOf(json[lastIndex]) == -1)
- {
- break;
- }
- }
-
- return lastIndex -1;
-}
-
-/**
- * eatWhitespace
- */
-void Json::eatWhitespace(const QString &json, int &index)
-{
- for(; index < json.size(); index++)
- {
- if(QString(" \t\n\r").indexOf(json[index]) == -1)
- {
- break;
- }
- }
-}
-
-/**
- * lookAhead
- */
-int Json::lookAhead(const QString &json, int index)
-{
- int saveIndex = index;
- return Json::nextToken(json, saveIndex);
-}
-
-/**
- * nextToken
- */
-int Json::nextToken(const QString &json, int &index)
-{
- Json::eatWhitespace(json, index);
-
- if(index == json.size())
- {
- return JsonTokenNone;
- }
-
- QChar c = json[index];
- index++;
- switch(c.toLatin1())
- {
- case '{': return JsonTokenCurlyOpen;
- case '}': return JsonTokenCurlyClose;
- case '[': return JsonTokenSquaredOpen;
- case ']': return JsonTokenSquaredClose;
- case ',': return JsonTokenComma;
- case '"': return JsonTokenString;
- case '0': case '1': case '2': case '3': case '4':
- case '5': case '6': case '7': case '8': case '9':
- case '-': return JsonTokenNumber;
- case ':': return JsonTokenColon;
- }
-
- index--;
-
- int remainingLength = json.size() - index;
-
- //True
- if(remainingLength >= 4)
- {
- if (json[index] == 't' && json[index + 1] == 'r' &&
- json[index + 2] == 'u' && json[index + 3] == 'e')
- {
- index += 4;
- return JsonTokenTrue;
- }
- }
-
- //False
- if (remainingLength >= 5)
- {
- if (json[index] == 'f' && json[index + 1] == 'a' &&
- json[index + 2] == 'l' && json[index + 3] == 's' &&
- json[index + 4] == 'e')
- {
- index += 5;
- return JsonTokenFalse;
- }
- }
-
- //Null
- if (remainingLength >= 4)
- {
- if (json[index] == 'n' && json[index + 1] == 'u' &&
- json[index + 2] == 'l' && json[index + 3] == 'l')
- {
- index += 4;
- return JsonTokenNull;
- }
- }
-
- return JsonTokenNone;
-}
-
-
-} //end namespace
+/**
+ * QtJson - A simple class for parsing JSON data into a QVariant hierarchies and vice-versa.
+ * Copyright (C) 2011 Eeli Reilin
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * \file json.cpp
+ */
+
+#include "json.h"
+
+namespace QtJson {
+ static QString sanitizeString(QString str);
+ static QByteArray join(const QList<QByteArray> &list, const QByteArray &sep);
+ static QVariant parseValue(const QString &json, int &index, bool &success);
+ static QVariant parseObject(const QString &json, int &index, bool &success);
+ static QVariant parseArray(const QString &json, int &index, bool &success);
+ static QVariant parseString(const QString &json, int &index, bool &success);
+ static QVariant parseNumber(const QString &json, int &index);
+ static int lastIndexOfNumber(const QString &json, int index);
+ static void eatWhitespace(const QString &json, int &index);
+ static int lookAhead(const QString &json, int index);
+ static int nextToken(const QString &json, int &index);
+
+ template<typename T>
+ QByteArray serializeMap(const T &map, bool &success) {
+ QByteArray str = "{ ";
+ QList<QByteArray> pairs;
+ for (typename T::const_iterator it = map.begin(), itend = map.end(); it != itend; ++it) {
+ QByteArray serializedValue = serialize(it.value());
+ if (serializedValue.isNull()) {
+ success = false;
+ break;
+ }
+ pairs << sanitizeString(it.key()).toUtf8() + " : " + serializedValue;
+ }
+
+ str += join(pairs, ", ");
+ str += " }";
+ return str;
+ }
+
+
+ /**
+ * parse
+ */
+ QVariant parse(const QString &json) {
+ bool success = true;
+ return parse(json, success);
+ }
+
+ /**
+ * parse
+ */
+ QVariant parse(const QString &json, bool &success) {
+ success = true;
+
+ // Return an empty QVariant if the JSON data is either null or empty
+ if (!json.isNull() || !json.isEmpty()) {
+ QString data = json;
+ // We'll start from index 0
+ int index = 0;
+
+ // Parse the first value
+ QVariant value = parseValue(data, index, success);
+
+ // Return the parsed value
+ return value;
+ } else {
+ // Return the empty QVariant
+ return QVariant();
+ }
+ }
+
+ QByteArray serialize(const QVariant &data) {
+ bool success = true;
+ return serialize(data, success);
+ }
+
+ QByteArray serialize(const QVariant &data, bool &success) {
+ QByteArray str;
+ success = true;
+
+ if (!data.isValid()) { // invalid or null?
+ str = "null";
+ } else if ((data.type() == QVariant::List) ||
+ (data.type() == QVariant::StringList)) { // variant is a list?
+ QList<QByteArray> values;
+ const QVariantList list = data.toList();
+ Q_FOREACH(const QVariant& v, list) {
+ QByteArray serializedValue = serialize(v);
+ if (serializedValue.isNull()) {
+ success = false;
+ break;
+ }
+ values << serializedValue;
+ }
+
+ str = "[ " + join( values, ", " ) + " ]";
+ } else if (data.type() == QVariant::Hash) { // variant is a hash?
+ str = serializeMap<>(data.toHash(), success);
+ } else if (data.type() == QVariant::Map) { // variant is a map?
+ str = serializeMap<>(data.toMap(), success);
+ } else if ((data.type() == QVariant::String) ||
+ (data.type() == QVariant::ByteArray)) {// a string or a byte array?
+ str = sanitizeString(data.toString()).toUtf8();
+ } else if (data.type() == QVariant::Double) { // double?
+ double value = data.toDouble();
+ if ((value - value) == 0.0) {
+ str = QByteArray::number(value, 'g');
+ if (!str.contains(".") && ! str.contains("e")) {
+ str += ".0";
+ }
+ } else {
+ success = false;
+ }
+ } else if (data.type() == QVariant::Bool) { // boolean value?
+ str = data.toBool() ? "true" : "false";
+ } else if (data.type() == QVariant::ULongLong) { // large unsigned number?
+ str = QByteArray::number(data.value<qulonglong>());
+ } else if (data.canConvert<qlonglong>()) { // any signed number?
+ str = QByteArray::number(data.value<qlonglong>());
+ } else if (data.canConvert<long>()) { //TODO: this code is never executed
+ str = QString::number(data.value<long>()).toUtf8();
+ } else if (data.canConvert<QString>()) { // can value be converted to string?
+ // this will catch QDate, QDateTime, QUrl, ...
+ str = sanitizeString(data.toString()).toUtf8();
+ } else {
+ success = false;
+ }
+
+ if (success) {
+ return str;
+ } else {
+ return QByteArray();
+ }
+ }
+
+ QString serializeStr(const QVariant &data) {
+ return QString::fromUtf8(serialize(data));
+ }
+
+ QString serializeStr(const QVariant &data, bool &success) {
+ return QString::fromUtf8(serialize(data, success));
+ }
+
+
+ /**
+ * \enum JsonToken
+ */
+ enum JsonToken {
+ JsonTokenNone = 0,
+ JsonTokenCurlyOpen = 1,
+ JsonTokenCurlyClose = 2,
+ JsonTokenSquaredOpen = 3,
+ JsonTokenSquaredClose = 4,
+ JsonTokenColon = 5,
+ JsonTokenComma = 6,
+ JsonTokenString = 7,
+ JsonTokenNumber = 8,
+ JsonTokenTrue = 9,
+ JsonTokenFalse = 10,
+ JsonTokenNull = 11
+ };
+
+ static QString sanitizeString(QString str) {
+ str.replace(QLatin1String("\\"), QLatin1String("\\\\"));
+ str.replace(QLatin1String("\""), QLatin1String("\\\""));
+ str.replace(QLatin1String("\b"), QLatin1String("\\b"));
+ str.replace(QLatin1String("\f"), QLatin1String("\\f"));
+ str.replace(QLatin1String("\n"), QLatin1String("\\n"));
+ str.replace(QLatin1String("\r"), QLatin1String("\\r"));
+ str.replace(QLatin1String("\t"), QLatin1String("\\t"));
+ return QString(QLatin1String("\"%1\"")).arg(str);
+ }
+
+ static QByteArray join(const QList<QByteArray> &list, const QByteArray &sep) {
+ QByteArray res;
+ Q_FOREACH(const QByteArray &i, list) {
+ if (!res.isEmpty()) {
+ res += sep;
+ }
+ res += i;
+ }
+ return res;
+ }
+
+ /**
+ * parseValue
+ */
+ static QVariant parseValue(const QString &json, int &index, bool &success) {
+ // Determine what kind of data we should parse by
+ // checking out the upcoming token
+ switch(lookAhead(json, index)) {
+ case JsonTokenString:
+ return parseString(json, index, success);
+ case JsonTokenNumber:
+ return parseNumber(json, index);
+ case JsonTokenCurlyOpen:
+ return parseObject(json, index, success);
+ case JsonTokenSquaredOpen:
+ return parseArray(json, index, success);
+ case JsonTokenTrue:
+ nextToken(json, index);
+ return QVariant(true);
+ case JsonTokenFalse:
+ nextToken(json, index);
+ return QVariant(false);
+ case JsonTokenNull:
+ nextToken(json, index);
+ return QVariant();
+ case JsonTokenNone:
+ break;
+ }
+
+ // If there were no tokens, flag the failure and return an empty QVariant
+ success = false;
+ return QVariant();
+ }
+
+ /**
+ * parseObject
+ */
+ static QVariant parseObject(const QString &json, int &index, bool &success) {
+ QVariantMap map;
+ int token;
+
+ // Get rid of the whitespace and increment index
+ nextToken(json, index);
+
+ // Loop through all of the key/value pairs of the object
+ bool done = false;
+ while (!done) {
+ // Get the upcoming token
+ token = lookAhead(json, index);
+
+ if (token == JsonTokenNone) {
+ success = false;
+ return QVariantMap();
+ } else if (token == JsonTokenComma) {
+ nextToken(json, index);
+ } else if (token == JsonTokenCurlyClose) {
+ nextToken(json, index);
+ return map;
+ } else {
+ // Parse the key/value pair's name
+ QString name = parseString(json, index, success).toString();
+
+ if (!success) {
+ return QVariantMap();
+ }
+
+ // Get the next token
+ token = nextToken(json, index);
+
+ // If the next token is not a colon, flag the failure
+ // return an empty QVariant
+ if (token != JsonTokenColon) {
+ success = false;
+ return QVariant(QVariantMap());
+ }
+
+ // Parse the key/value pair's value
+ QVariant value = parseValue(json, index, success);
+
+ if (!success) {
+ return QVariantMap();
+ }
+
+ // Assign the value to the key in the map
+ map[name] = value;
+ }
+ }
+
+ // Return the map successfully
+ return QVariant(map);
+ }
+
+ /**
+ * parseArray
+ */
+ static QVariant parseArray(const QString &json, int &index, bool &success) {
+ QVariantList list;
+
+ nextToken(json, index);
+
+ bool done = false;
+ while(!done) {
+ int token = lookAhead(json, index);
+
+ if (token == JsonTokenNone) {
+ success = false;
+ return QVariantList();
+ } else if (token == JsonTokenComma) {
+ nextToken(json, index);
+ } else if (token == JsonTokenSquaredClose) {
+ nextToken(json, index);
+ break;
+ } else {
+ QVariant value = parseValue(json, index, success);
+ if (!success) {
+ return QVariantList();
+ }
+ list.push_back(value);
+ }
+ }
+
+ return QVariant(list);
+ }
+
+ /**
+ * parseString
+ */
+ static QVariant parseString(const QString &json, int &index, bool &success) {
+ QString s;
+ QChar c;
+
+ eatWhitespace(json, index);
+
+ c = json[index++];
+
+ bool complete = false;
+ while(!complete) {
+ if (index == json.size()) {
+ break;
+ }
+
+ c = json[index++];
+
+ if (c == '\"') {
+ complete = true;
+ break;
+ } else if (c == '\\') {
+ if (index == json.size()) {
+ break;
+ }
+
+ c = json[index++];
+
+ if (c == '\"') {
+ s.append('\"');
+ } else if (c == '\\') {
+ s.append('\\');
+ } else if (c == '/') {
+ s.append('/');
+ } else if (c == 'b') {
+ s.append('\b');
+ } else if (c == 'f') {
+ s.append('\f');
+ } else if (c == 'n') {
+ s.append('\n');
+ } else if (c == 'r') {
+ s.append('\r');
+ } else if (c == 't') {
+ s.append('\t');
+ } else if (c == 'u') {
+ int remainingLength = json.size() - index;
+ if (remainingLength >= 4) {
+ QString unicodeStr = json.mid(index, 4);
+
+ int symbol = unicodeStr.toInt(0, 16);
+
+ s.append(QChar(symbol));
+
+ index += 4;
+ } else {
+ break;
+ }
+ }
+ } else {
+ s.append(c);
+ }
+ }
+
+ if (!complete) {
+ success = false;
+ return QVariant();
+ }
+
+ return QVariant(s);
+ }
+
+ /**
+ * parseNumber
+ */
+ static QVariant parseNumber(const QString &json, int &index) {
+ eatWhitespace(json, index);
+
+ int lastIndex = lastIndexOfNumber(json, index);
+ int charLength = (lastIndex - index) + 1;
+ QString numberStr;
+
+ numberStr = json.mid(index, charLength);
+
+ index = lastIndex + 1;
+ bool ok;
+
+ if (numberStr.contains('.')) {
+ return QVariant(numberStr.toDouble(NULL));
+ } else if (numberStr.startsWith('-')) {
+ int i = numberStr.toInt(&ok);
+ if (!ok) {
+ qlonglong ll = numberStr.toLongLong(&ok);
+ return ok ? ll : QVariant(numberStr);
+ }
+ return i;
+ } else {
+ uint u = numberStr.toUInt(&ok);
+ if (!ok) {
+ qulonglong ull = numberStr.toULongLong(&ok);
+ return ok ? ull : QVariant(numberStr);
+ }
+ return u;
+ }
+ }
+
+ /**
+ * lastIndexOfNumber
+ */
+ static int lastIndexOfNumber(const QString &json, int index) {
+ int lastIndex;
+
+ for(lastIndex = index; lastIndex < json.size(); lastIndex++) {
+ if (QString("0123456789+-.eE").indexOf(json[lastIndex]) == -1) {
+ break;
+ }
+ }
+
+ return lastIndex -1;
+ }
+
+ /**
+ * eatWhitespace
+ */
+ static void eatWhitespace(const QString &json, int &index) {
+ for(; index < json.size(); index++) {
+ if (QString(" \t\n\r").indexOf(json[index]) == -1) {
+ break;
+ }
+ }
+ }
+
+ /**
+ * lookAhead
+ */
+ static int lookAhead(const QString &json, int index) {
+ int saveIndex = index;
+ return nextToken(json, saveIndex);
+ }
+
+ /**
+ * nextToken
+ */
+ static int nextToken(const QString &json, int &index) {
+ eatWhitespace(json, index);
+
+ if (index == json.size()) {
+ return JsonTokenNone;
+ }
+
+ QChar c = json[index];
+ index++;
+ switch(c.toLatin1()) {
+ case '{': return JsonTokenCurlyOpen;
+ case '}': return JsonTokenCurlyClose;
+ case '[': return JsonTokenSquaredOpen;
+ case ']': return JsonTokenSquaredClose;
+ case ',': return JsonTokenComma;
+ case '"': return JsonTokenString;
+ case '0': case '1': case '2': case '3': case '4':
+ case '5': case '6': case '7': case '8': case '9':
+ case '-': return JsonTokenNumber;
+ case ':': return JsonTokenColon;
+ }
+ index--; // ^ WTF?
+
+ int remainingLength = json.size() - index;
+
+ // True
+ if (remainingLength >= 4) {
+ if (json[index] == 't' && json[index + 1] == 'r' &&
+ json[index + 2] == 'u' && json[index + 3] == 'e') {
+ index += 4;
+ return JsonTokenTrue;
+ }
+ }
+
+ // False
+ if (remainingLength >= 5) {
+ if (json[index] == 'f' && json[index + 1] == 'a' &&
+ json[index + 2] == 'l' && json[index + 3] == 's' &&
+ json[index + 4] == 'e') {
+ index += 5;
+ return JsonTokenFalse;
+ }
+ }
+
+ // Null
+ if (remainingLength >= 4) {
+ if (json[index] == 'n' && json[index + 1] == 'u' &&
+ json[index + 2] == 'l' && json[index + 3] == 'l') {
+ index += 4;
+ return JsonTokenNull;
+ }
+ }
+
+ return JsonTokenNone;
+ }
+} //end namespace
diff --git a/src/json.h b/src/json.h
index d2cfa9a8..a61f6c85 100644
--- a/src/json.h
+++ b/src/json.h
@@ -1,204 +1,94 @@
-/* Copyright 2011 Eeli Reilin. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY <COPYRIGHT HOLDER> ''AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
- * EVENT SHALL EELI REILIN OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
- * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * The views and conclusions contained in the software and documentation
- * are those of the authors and should not be interpreted as representing
- * official policies, either expressed or implied, of Eeli Reilin.
- */
-
-/**
- * \file json.h
- */
-
-#ifndef JSON_H
-#define JSON_H
-
-#include <QVariant>
-#include <QString>
-
-namespace QtJson
-{
-
-/**
- * \enum JsonToken
- */
-enum JsonToken
-{
- JsonTokenNone = 0,
- JsonTokenCurlyOpen = 1,
- JsonTokenCurlyClose = 2,
- JsonTokenSquaredOpen = 3,
- JsonTokenSquaredClose = 4,
- JsonTokenColon = 5,
- JsonTokenComma = 6,
- JsonTokenString = 7,
- JsonTokenNumber = 8,
- JsonTokenTrue = 9,
- JsonTokenFalse = 10,
- JsonTokenNull = 11
-};
-
-/**
- * \class Json
- * \brief A JSON data parser
- *
- * Json parses a JSON data into a QVariant hierarchy.
- */
-class Json
-{
- public:
- /**
- * Parse a JSON string
- *
- * \param json The JSON data
- */
- static QVariant parse(const QString &json);
-
- /**
- * Parse a JSON string
- *
- * \param json The JSON data
- * \param success The success of the parsing
- */
- static QVariant parse(const QString &json, bool &success);
-
- /**
- * This method generates a textual JSON representation
- *
- * \param data The JSON data generated by the parser.
- * \param success The success of the serialization
- */
- static QByteArray serialize(const QVariant &data);
-
- /**
- * This method generates a textual JSON representation
- *
- * \param data The JSON data generated by the parser.
- * \param success The success of the serialization
- *
- * \return QByteArray Textual JSON representation
- */
- static QByteArray serialize(const QVariant &data, bool &success);
-
- private:
- /**
- * Parses a value starting from index
- *
- * \param json The JSON data
- * \param index The start index
- * \param success The success of the parse process
- *
- * \return QVariant The parsed value
- */
- static QVariant parseValue(const QString &json, int &index,
- bool &success);
-
- /**
- * Parses an object starting from index
- *
- * \param json The JSON data
- * \param index The start index
- * \param success The success of the object parse
- *
- * \return QVariant The parsed object map
- */
- static QVariant parseObject(const QString &json, int &index,
- bool &success);
-
- /**
- * Parses an array starting from index
- *
- * \param json The JSON data
- * \param index The starting index
- * \param success The success of the array parse
- *
- * \return QVariant The parsed variant array
- */
- static QVariant parseArray(const QString &json, int &index,
- bool &success);
-
- /**
- * Parses a string starting from index
- *
- * \param json The JSON data
- * \param index The starting index
- * \param success The success of the string parse
- *
- * \return QVariant The parsed string
- */
- static QVariant parseString(const QString &json, int &index,
- bool &success);
-
- /**
- * Parses a number starting from index
- *
- * \param json The JSON data
- * \param index The starting index
- *
- * \return QVariant The parsed number
- */
- static QVariant parseNumber(const QString &json, int &index);
-
- /**
- * Get the last index of a number starting from index
- *
- * \param json The JSON data
- * \param index The starting index
- *
- * \return The last index of the number
- */
- static int lastIndexOfNumber(const QString &json, int index);
-
- /**
- * Skip unwanted whitespace symbols starting from index
- *
- * \param json The JSON data
- * \param index The start index
- */
- static void eatWhitespace(const QString &json, int &index);
-
- /**
- * Check what token lies ahead
- *
- * \param json The JSON data
- * \param index The starting index
- *
- * \return int The upcoming token
- */
- static int lookAhead(const QString &json, int index);
-
- /**
- * Get the next JSON token
- *
- * \param json The JSON data
- * \param index The starting index
- *
- * \return int The next JSON token
- */
- static int nextToken(const QString &json, int &index);
-};
-
-
-} //end namespace
-
-#endif //JSON_H
+/**
+ * QtJson - A simple class for parsing JSON data into a QVariant hierarchies and vice-versa.
+ * Copyright (C) 2011 Eeli Reilin
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * \file json.h
+ */
+
+#ifndef JSON_H
+#define JSON_H
+
+#include <QVariant>
+#include <QString>
+
+
+/**
+ * \namespace QtJson
+ * \brief A JSON data parser
+ *
+ * Json parses a JSON data into a QVariant hierarchy.
+ */
+namespace QtJson {
+ typedef QVariantMap JsonObject;
+ typedef QVariantList JsonArray;
+
+ /**
+ * Parse a JSON string
+ *
+ * \param json The JSON data
+ */
+ QVariant parse(const QString &json);
+
+ /**
+ * Parse a JSON string
+ *
+ * \param json The JSON data
+ * \param success The success of the parsing
+ */
+ QVariant parse(const QString &json, bool &success);
+
+ /**
+ * This method generates a textual JSON representation
+ *
+ * \param data The JSON data generated by the parser.
+ *
+ * \return QByteArray Textual JSON representation in UTF-8
+ */
+ QByteArray serialize(const QVariant &data);
+
+ /**
+ * This method generates a textual JSON representation
+ *
+ * \param data The JSON data generated by the parser.
+ * \param success The success of the serialization
+ *
+ * \return QByteArray Textual JSON representation in UTF-8
+ */
+ QByteArray serialize(const QVariant &data, bool &success);
+
+ /**
+ * This method generates a textual JSON representation
+ *
+ * \param data The JSON data generated by the parser.
+ *
+ * \return QString Textual JSON representation
+ */
+ QString serializeStr(const QVariant &data);
+
+ /**
+ * This method generates a textual JSON representation
+ *
+ * \param data The JSON data generated by the parser.
+ * \param success The success of the serialization
+ *
+ * \return QString Textual JSON representation
+ */
+ QString serializeStr(const QVariant &data, bool &success);
+}
+
+#endif //JSON_H
diff --git a/src/lockeddialog.cpp b/src/lockeddialog.cpp
index 4c19c615..065d9270 100644
--- a/src/lockeddialog.cpp
+++ b/src/lockeddialog.cpp
@@ -17,51 +17,59 @@ You should have received a copy of the GNU General Public License
along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "lockeddialog.h"
-#include "ui_lockeddialog.h"
-#include <QResizeEvent>
-
-
-LockedDialog::LockedDialog(QWidget *parent) :
- QDialog(parent),
- ui(new Ui::LockedDialog), m_UnlockClicked(false)
-{
- ui->setupUi(this);
-
- this->setWindowFlags(this->windowFlags() | Qt::ToolTip | Qt::FramelessWindowHint);
-
- if (parent != NULL) {
- QPoint position = parent->mapToGlobal(QPoint(parent->width() / 2, parent->height() / 2));
- position.rx() -= this->width() / 2;
- position.ry() -= this->height() / 2;
- move(position);
- }
-}
-
-LockedDialog::~LockedDialog()
-{
- delete ui;
-}
-
-
-void LockedDialog::setProcessName(const QString &name)
-{
- ui->processLabel->setText(name);
-}
-
-
-void LockedDialog::resizeEvent(QResizeEvent *event)
-{
- QWidget *par = parentWidget();
- if (par != NULL) {
- QPoint position = par->mapToGlobal(QPoint(par->width() / 2, par->height() / 2));
- position.rx() -= event->size().width() / 2;
- position.ry() -= event->size().height() / 2;
- move(position);
- }
-}
-
-void LockedDialog::on_unlockButton_clicked()
-{
- m_UnlockClicked = true;
-}
+#include "lockeddialog.h"
+#include "ui_lockeddialog.h"
+#include <QResizeEvent>
+
+
+LockedDialog::LockedDialog(QWidget *parent, const QString &text, bool unlockButton)
+ : QDialog(parent)
+ , ui(new Ui::LockedDialog)
+ , m_UnlockClicked(false)
+{
+ ui->setupUi(this);
+
+ this->setWindowFlags(this->windowFlags() | Qt::ToolTip | Qt::FramelessWindowHint);
+
+ if (parent != NULL) {
+ QPoint position = parent->mapToGlobal(QPoint(parent->width() / 2, parent->height() / 2));
+ position.rx() -= this->width() / 2;
+ position.ry() -= this->height() / 2;
+ move(position);
+ }
+
+ if (text.length() > 0) {
+ ui->label->setText(text);
+ }
+ if (!unlockButton) {
+ ui->unlockButton->hide();
+ }
+}
+
+LockedDialog::~LockedDialog()
+{
+ delete ui;
+}
+
+
+void LockedDialog::setProcessName(const QString &name)
+{
+ ui->processLabel->setText(name);
+}
+
+
+void LockedDialog::resizeEvent(QResizeEvent *event)
+{
+ QWidget *par = parentWidget();
+ if (par != NULL) {
+ QPoint position = par->mapToGlobal(QPoint(par->width() / 2, par->height() / 2));
+ position.rx() -= event->size().width() / 2;
+ position.ry() -= event->size().height() / 2;
+ move(position);
+ }
+}
+
+void LockedDialog::on_unlockButton_clicked()
+{
+ m_UnlockClicked = true;
+}
diff --git a/src/lockeddialog.h b/src/lockeddialog.h
index 5be398bc..0f3b29b0 100644
--- a/src/lockeddialog.h
+++ b/src/lockeddialog.h
@@ -17,51 +17,51 @@ You should have received a copy of the GNU General Public License
along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef LOCKEDDIALOG_H
-#define LOCKEDDIALOG_H
-
-#include <QDialog>
-
-namespace Ui {
- class LockedDialog;
-}
-
-/**
- * a small borderless dialog displayed while the Mod Organizer UI is locked
- * The dialog contains only a label and a button to force the UI to be unlocked
- *
- * The UI gets locked while running external applications since they may modify the
- * data on which Mod Organizer works. After the UI is unlocked (manually or after the
- * external application closed) MO will refresh all of its data sources
- **/
-class LockedDialog : public QDialog
-{
- Q_OBJECT
-
-public:
- explicit LockedDialog(QWidget *parent = 0);
- ~LockedDialog();
-
- /**
- * @brief see if the user clicked the unlock-button
- *
- * @return true if the user clicked the unlock button
- **/
- bool unlockClicked() const { return m_UnlockClicked; }
-
- void setProcessName(const QString &name);
-
-protected:
-
- virtual void resizeEvent(QResizeEvent *event);
-
-private slots:
-
- void on_unlockButton_clicked();
-
-private:
- Ui::LockedDialog *ui;
- bool m_UnlockClicked;
-};
-
-#endif // LOCKEDDIALOG_H
+#ifndef LOCKEDDIALOG_H
+#define LOCKEDDIALOG_H
+
+#include <QDialog>
+
+namespace Ui {
+ class LockedDialog;
+}
+
+/**
+ * a small borderless dialog displayed while the Mod Organizer UI is locked
+ * The dialog contains only a label and a button to force the UI to be unlocked
+ *
+ * The UI gets locked while running external applications since they may modify the
+ * data on which Mod Organizer works. After the UI is unlocked (manually or after the
+ * external application closed) MO will refresh all of its data sources
+ **/
+class LockedDialog : public QDialog
+{
+ Q_OBJECT
+
+public:
+ explicit LockedDialog(QWidget *parent = 0, const QString &text = "", bool unlockButton = true);
+ ~LockedDialog();
+
+ /**
+ * @brief see if the user clicked the unlock-button
+ *
+ * @return true if the user clicked the unlock button
+ **/
+ bool unlockClicked() const { return m_UnlockClicked; }
+
+ void setProcessName(const QString &name);
+
+protected:
+
+ virtual void resizeEvent(QResizeEvent *event);
+
+private slots:
+
+ void on_unlockButton_clicked();
+
+private:
+ Ui::LockedDialog *ui;
+ bool m_UnlockClicked;
+};
+
+#endif // LOCKEDDIALOG_H
diff --git a/src/lockeddialog.ui b/src/lockeddialog.ui
index 623e8da1..2175f8ac 100644
--- a/src/lockeddialog.ui
+++ b/src/lockeddialog.ui
@@ -6,14 +6,14 @@
<rect>
<x>0</x>
<y>0</y>
- <width>236</width>
- <height>110</height>
+ <width>317</width>
+ <height>151</height>
</rect>
</property>
<property name="windowTitle">
<string>Locked</string>
</property>
- <layout class="QVBoxLayout" name="verticalLayout">
+ <layout class="QVBoxLayout" name="verticalLayout" stretch="1,0,0">
<item>
<widget class="QLabel" name="label">
<property name="toolTip">
@@ -22,6 +22,9 @@
<property name="text">
<string>MO is locked while the executable is running.</string>
</property>
+ <property name="alignment">
+ <set>Qt::AlignCenter</set>
+ </property>
<property name="wordWrap">
<bool>true</bool>
</property>
diff --git a/src/logbuffer.cpp b/src/logbuffer.cpp
index a3b6f1b5..689d2b55 100644
--- a/src/logbuffer.cpp
+++ b/src/logbuffer.cpp
@@ -21,6 +21,7 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
#include "report.h"
#include <QMutexLocker>
#include <QFile>
+#include <QDateTime>
#include <Windows.h>
QScopedPointer<LogBuffer> LogBuffer::s_Instance;
@@ -112,13 +113,25 @@ void LogBuffer::log(QtMsgType type, const QMessageLogContext &context, const QSt
#else
+
+char LogBuffer::msgTypeID(QtMsgType type)
+{
+ switch (type) {
+ case QtDebugMsg: return 'D';
+ case QtWarningMsg: return 'W';
+ case QtCriticalMsg: return 'C';
+ case QtFatalMsg: return 'F';
+ default: return '?';
+ }
+}
+
void LogBuffer::log(QtMsgType type, const char *message)
{
QMutexLocker guard(&s_Mutex);
if (!s_Instance.isNull()) {
s_Instance->logMessage(type, message);
}
- fprintf(stdout, "%s\n", message);
+ fprintf(stdout, "%s [%c] %s\n", qPrintable(QTime::currentTime().toString()), msgTypeID(type), message);
fflush(stdout);
}
diff --git a/src/logbuffer.h b/src/logbuffer.h
index de5e887f..68753996 100644
--- a/src/logbuffer.h
+++ b/src/logbuffer.h
@@ -60,6 +60,8 @@ private:
void write() const;
+ static char msgTypeID(QtMsgType type);
+
private:
static QScopedPointer<LogBuffer> s_Instance;
diff --git a/src/main.cpp b/src/main.cpp
index 1d40dfeb..d1c5e263 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -18,6 +18,11 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
*/
+#ifdef LEAK_CHECK_WITH_VLD
+#include <wchar.h>
+#include <vld.h>
+#endif // LEAK_CHECK_WITH_VLD
+
#include <QApplication>
#include <QPushButton>
#include <QListWidget>
@@ -55,7 +60,6 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
#include "selectiondialog.h"
#include "moapplication.h"
#include "tutorialmanager.h"
-#include <QLibrary>
#include <iostream>
#include <QMessageBox>
#include <QSharedMemory>
@@ -63,6 +67,7 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
#include <QSplashScreen>
#include <QDirIterator>
#include <QDesktopServices>
+#include <ShellAPI.h>
#include <eh.h>
#include <windows_error.h>
#include <boost/scoped_array.hpp>
@@ -75,24 +80,6 @@ using namespace MOBase;
using namespace MOShared;
-void removeOldLogfiles()
-{
- QFileInfoList files = QDir(ToQString(GameInfo::instance().getLogDir())).entryInfoList(QStringList("ModOrganizer*.log"),
- QDir::Files, QDir::Name);
-
- if (files.count() > 5) {
- QStringList deleteFiles;
- for (int i = 0; i < files.count() - 5; ++i) {
- deleteFiles.append(files.at(i).absoluteFilePath());
- }
-
- if (!shellDelete(deleteFiles)) {
- qWarning("failed to remove log files: %s", qPrintable(windowsErrorString(::GetLastError())));
- }
- }
-}
-
-
// set up required folders (for a first install or after an update or to fix a broken installation)
bool bootstrap()
{
@@ -106,7 +93,7 @@ bool bootstrap()
}
// cycle logfile
- removeOldLogfiles();
+ removeOldFiles(ToQString(GameInfo::instance().getLogDir()), "ModOrganizer*.log", 5, QDir::Name);
// create organizer directories
QString dirNames[] = {
@@ -135,7 +122,7 @@ bool bootstrap()
QObject::tr("The current user account doesn't have the required access rights to run "
"Mod Organizer. The neccessary changes can be made automatically (the MO directory "
"will be made writable for the current user account). You will be asked to run "
- "\"helper.exe\" with administrative rights)."),
+ "\"helper.exe\" with administrative rights."),
QMessageBox::Yes | QMessageBox::Cancel) == QMessageBox::Yes) {
if (!Helper::init(GameInfo::instance().getOrganizerDirectory())) {
return false;
@@ -151,6 +138,7 @@ bool bootstrap()
// verify the hook-dll exists
QString dllName = qApp->applicationDirPath() + "/" + ToQString(AppConfig::hookDLLName());
+
HMODULE dllMod = ::LoadLibraryW(ToWString(dllName).c_str());
if (dllMod == NULL) {
throw windows_error("hook.dll is missing or invalid");
@@ -271,6 +259,59 @@ void registerMetaTypes()
registerExecutable();
}
+
+
+bool HaveWriteAccess(const std::wstring &path)
+{
+ bool writable = false;
+
+ const static SECURITY_INFORMATION requestedFileInformation = OWNER_SECURITY_INFORMATION | GROUP_SECURITY_INFORMATION | DACL_SECURITY_INFORMATION;
+
+ DWORD length = 0;
+ if (!::GetFileSecurityW(path.c_str(), requestedFileInformation, NULL, NULL, &length)
+ && (::GetLastError() == ERROR_INSUFFICIENT_BUFFER)) {
+ std::string tempBuffer;
+ tempBuffer.reserve(length);
+ PSECURITY_DESCRIPTOR security = (PSECURITY_DESCRIPTOR)tempBuffer.data();
+ if (security
+ && ::GetFileSecurity(path.c_str(), requestedFileInformation, security, length, &length)) {
+ HANDLE token = NULL;
+ const static DWORD tokenDesiredAccess = TOKEN_IMPERSONATE | TOKEN_QUERY | TOKEN_DUPLICATE | STANDARD_RIGHTS_READ;
+ if (!::OpenThreadToken(::GetCurrentThread(), tokenDesiredAccess, TRUE, &token)) {
+ if (!::OpenProcessToken(::GetCurrentProcess(), tokenDesiredAccess, &token)) {
+ throw std::runtime_error("Unable to get any thread or process token");
+ }
+ }
+
+ HANDLE impersonatedToken = NULL;
+ if (::DuplicateToken(token, SecurityImpersonation, &impersonatedToken)) {
+ GENERIC_MAPPING mapping = { 0xFFFFFFFF };
+ mapping.GenericRead = FILE_GENERIC_READ;
+ mapping.GenericWrite = FILE_GENERIC_WRITE;
+ mapping.GenericExecute = FILE_GENERIC_EXECUTE;
+ mapping.GenericAll = FILE_ALL_ACCESS;
+
+ DWORD genericAccessRights = FILE_GENERIC_WRITE;
+ ::MapGenericMask(&genericAccessRights, &mapping);
+
+ PRIVILEGE_SET privileges = { 0 };
+ DWORD grantedAccess = 0;
+ DWORD privilegesLength = sizeof(privileges);
+ BOOL result = 0;
+ if (::AccessCheck(security, impersonatedToken, genericAccessRights, &mapping, &privileges, &privilegesLength, &grantedAccess, &result)) {
+ writable = result != 0;
+ }
+ ::CloseHandle(impersonatedToken);
+ }
+
+ ::CloseHandle(token);
+ }
+ }
+ return writable;
+}
+
+
+
int main(int argc, char *argv[])
{
MOApplication application(argc, argv);
@@ -279,7 +320,17 @@ int main(int argc, char *argv[])
SetUnhandledExceptionFilter(MyUnhandledExceptionFilter);
- LogBuffer::init(20, QtDebugMsg, application.applicationDirPath() + "/logs/mo_interface.log");
+ if (!HaveWriteAccess(ToWString(application.applicationDirPath()))) {
+ QStringList arguments = application.arguments();
+ arguments.pop_front();
+ ::ShellExecuteW( NULL
+ , L"runas"
+ , ToWString(QString("\"%1\"").arg(QCoreApplication::applicationFilePath())).c_str()
+ , ToWString(arguments.join(" ")).c_str()
+ , ToWString(QDir::currentPath()).c_str(), SW_SHOWNORMAL);
+ return 1;
+ }
+ LogBuffer::init(200, QtDebugMsg, application.applicationDirPath() + "/logs/mo_interface.log");
qDebug("Working directory: %s", qPrintable(QDir::toNativeSeparators(QDir::currentPath())));
qDebug("MO at: %s", qPrintable(QDir::toNativeSeparators(application.applicationDirPath())));
@@ -343,7 +394,7 @@ int main(int argc, char *argv[])
bool done = false;
while (!done) {
- if (!GameInfo::init(moPath, ToWString(gamePath))) {
+ if (!GameInfo::init(moPath, ToWString(QDir::toNativeSeparators(gamePath)))) {
if (!gamePath.isEmpty()) {
reportError(QObject::tr("No game identified in \"%1\". The directory is required to contain "
"the game binary and its launcher.").arg(gamePath));
@@ -395,6 +446,27 @@ int main(int argc, char *argv[])
settings.setValue("gamePath", gamePath.toUtf8().constData());
}
+ int edition = 0;
+ if (settings.contains("game_edition")) {
+ edition = settings.value("game_edition").toInt();
+ } else {
+ std::vector<std::wstring> editions = GameInfo::instance().getSteamVariants();
+ if (editions.size() < 2) {
+ edition = 0;
+ } else {
+ SelectionDialog selection(QObject::tr("Please select the game edition you have (MO can't start the game correctly if this is set incorrectly!)"), NULL);
+ int index = 0;
+ for (auto iter = editions.begin(); iter != editions.end(); ++iter) {
+ selection.addChoice(ToQString(*iter), "", index++);
+ }
+ if (selection.exec() == QDialog::Rejected) {
+ return -1;
+ } else {
+ settings.setValue("game_edition", selection.getChoiceData().toInt());
+ }
+ }
+ }
+
qDebug("managing game at %s", qPrintable(QDir::toNativeSeparators(gamePath)));
ExecutablesList executablesList;
@@ -428,63 +500,70 @@ int main(int argc, char *argv[])
qDebug("initializing tutorials");
TutorialManager::init(QDir::fromNativeSeparators(ToQString(GameInfo::instance().getTutorialDir())).append("/"));
- application.setStyleFile(settings.value("Settings/style", "").toString());
+ if (!application.setStyleFile(settings.value("Settings/style", "").toString())) {
+ // disable invalid stylesheet
+ settings.setValue("Settings/style", "");
+ }
- // set up main window and its data structures
- MainWindow mainWindow(argv[0], settings);
- QObject::connect(&mainWindow, SIGNAL(styleChanged(QString)), &application, SLOT(setStyleFile(QString)));
- QObject::connect(&instance, SIGNAL(messageSent(QString)), &mainWindow, SLOT(externalMessage(QString)));
+ int res = 1;
+ { // scope to control lifetime of mainwindow
+ // set up main window and its data structures
+ MainWindow mainWindow(argv[0], settings);
+ QObject::connect(&mainWindow, SIGNAL(styleChanged(QString)), &application, SLOT(setStyleFile(QString)));
+ QObject::connect(&instance, SIGNAL(messageSent(QString)), &mainWindow, SLOT(externalMessage(QString)));
- mainWindow.setExecutablesList(executablesList);
- mainWindow.readSettings();
+ mainWindow.setExecutablesList(executablesList);
+ mainWindow.readSettings();
- QString selectedProfileName = QString::fromUtf8(settings.value("selected_profile", "").toByteArray());
+ QString selectedProfileName = QString::fromUtf8(settings.value("selected_profile", "").toByteArray());
- { // see if there is a profile on the command line
- int profileIndex = arguments.indexOf("-p", 1);
- if ((profileIndex != -1) && (profileIndex < arguments.size() - 1)) {
- qDebug("profile overwritten on command line");
- selectedProfileName = arguments.at(profileIndex + 1);
+ { // see if there is a profile on the command line
+ int profileIndex = arguments.indexOf("-p", 1);
+ if ((profileIndex != -1) && (profileIndex < arguments.size() - 1)) {
+ qDebug("profile overwritten on command line");
+ selectedProfileName = arguments.at(profileIndex + 1);
+ }
+ arguments.removeAt(profileIndex);
+ arguments.removeAt(profileIndex);
}
- arguments.removeAt(profileIndex);
- arguments.removeAt(profileIndex);
- }
- qDebug("configured profile: %s", qPrintable(selectedProfileName));
+ qDebug("configured profile: %s", qPrintable(selectedProfileName));
- // if we have a command line parameter, it is either a nxm link or
- // a binary to start
- if ((arguments.size() > 1) && (!isNxmLink(arguments.at(1)))) {
- QString exeName = arguments.at(1);
- qDebug("starting %s from command line", qPrintable(exeName));
- arguments.removeFirst(); // remove application name (ModOrganizer.exe)
- arguments.removeFirst(); // remove binary name
- // pass the remaining parameters to the binary
- mainWindow.spawnProgram(exeName, arguments.join(" "), selectedProfileName, QDir());
- return 0;
- }
+ // if we have a command line parameter, it is either a nxm link or
+ // a binary to start
+ if ((arguments.size() > 1) && (!isNxmLink(arguments.at(1)))) {
+ QString exeName = arguments.at(1);
+ qDebug("starting %s from command line", qPrintable(exeName));
+ arguments.removeFirst(); // remove application name (ModOrganizer.exe)
+ arguments.removeFirst(); // remove binary name
+ // pass the remaining parameters to the binary
+ mainWindow.startApplication(exeName, arguments, QString(), selectedProfileName);
+ return 0;
+ }
- mainWindow.createFirstProfile();
+ mainWindow.createFirstProfile();
- if (selectedProfileName.length() != 0) {
- if (!mainWindow.setCurrentProfile(selectedProfileName)) {
+ if (selectedProfileName.length() != 0) {
+ if (!mainWindow.setCurrentProfile(selectedProfileName)) {
+ mainWindow.setCurrentProfile(1);
+ qWarning("failed to set profile: %s",
+ selectedProfileName.toUtf8().constData());
+ }
+ } else {
mainWindow.setCurrentProfile(1);
- qWarning("failed to set profile: %s",
- selectedProfileName.toUtf8().constData());
}
- } else {
- mainWindow.setCurrentProfile(1);
- }
- qDebug("displaying main window");
- mainWindow.show();
+ qDebug("displaying main window");
+ mainWindow.show();
- if ((arguments.size() > 1) &&
- (isNxmLink(arguments.at(1)))) {
- qDebug("starting download from command line: %s", qPrintable(arguments.at(1)));
- mainWindow.externalMessage(arguments.at(1));
+ if ((arguments.size() > 1) &&
+ (isNxmLink(arguments.at(1)))) {
+ qDebug("starting download from command line: %s", qPrintable(arguments.at(1)));
+ mainWindow.externalMessage(arguments.at(1));
+ }
+ splash.finish(&mainWindow);
+ res = application.exec();
}
- splash.finish(&mainWindow);
- return application.exec();
+ return res;
} catch (const std::exception &e) {
reportError(e.what());
return 1;
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp
index d5030627..8f07aa20 100644
--- a/src/mainwindow.cpp
+++ b/src/mainwindow.cpp
@@ -48,26 +48,32 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
#include "filedialogmemory.h"
#include "questionboxmemory.h"
#include "tutorialmanager.h"
-#include "icondelegate.h"
+#include "modflagicondelegate.h"
+#include "pluginflagicondelegate.h"
#include "credentialsdialog.h"
#include "selectiondialog.h"
#include "csvbuilder.h"
#include "gameinfoimpl.h"
#include "savetextasdialog.h"
#include "problemsdialog.h"
+#include "previewdialog.h"
#include "browserdialog.h"
+#include "aboutdialog.h"
+#include "safewritefile.h"
#include <gameinfo.h>
#include <appconfig.h>
#include <utility.h>
#include <ipluginproxy.h>
+#include <questionboxmemory.h>
#include <map>
#include <ctime>
-#include <QTime>
#include <util.h>
+#include <wchar.h>
+#include <utility.h>
+#include <QTime>
#include <QInputDialog>
#include <QSettings>
#include <QWhatsThis>
-#include <wchar.h>
#include <sstream>
#include <QProcess>
#include <QMenu>
@@ -98,7 +104,16 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
#include <TlHelp32.h>
#include <QNetworkInterface>
#include <QNetworkProxy>
+#if QT_VERSION >= QT_VERSION_CHECK(5,0,0)
+#include <QtConcurrent/QtConcurrentRun>
+#else
#include <QtConcurrentRun>
+#endif
+#include <QCoreApplication>
+#include <QProgressDialog>
+#include <scopeguard.h>
+#include <boost/thread.hpp>
+#include <boost/algorithm/string.hpp>
#ifdef TEST_MODELS
@@ -111,6 +126,8 @@ using namespace MOBase;
using namespace MOShared;
+
+
static bool isOnline()
{
QList<QNetworkInterface> interfaces = QNetworkInterface::allInterfaces();
@@ -139,18 +156,16 @@ MainWindow::MainWindow(const QString &exeName, QSettings &initSettings, QWidget
: QMainWindow(parent), ui(new Ui::MainWindow), m_Tutorial(this, "MainWindow"),
m_ExeName(exeName), m_OldProfileIndex(-1),
m_DirectoryStructure(new DirectoryEntry(L"data", NULL, 0)),
- m_ModList(NexusInterface::instance()), m_ModListGroupingProxy(NULL), m_ModListSortProxy(NULL),
- m_OldExecutableIndex(-1), m_GamePath(ToQString(GameInfo::instance().getGameDirectory())),
- m_DownloadManager(NexusInterface::instance(), this),
- m_InstallationManager(this), m_Translator(NULL), m_TranslatorQt(NULL),
+ m_ModList(this), m_ModListGroupingProxy(NULL), m_ModListSortProxy(NULL),
+ m_PluginList(this), m_OldExecutableIndex(-1), m_GamePath(ToQString(GameInfo::instance().getGameDirectory())),
+ m_DownloadManager(NexusInterface::instance(), this), m_InstallationManager(this),
m_Updater(NexusInterface::instance(), this), m_CategoryFactory(CategoryFactory::instance()),
m_CurrentProfile(NULL), m_AskForNexusPW(false), m_LoginAttempted(false),
m_ArchivesInit(false), m_ContextItem(NULL), m_ContextAction(NULL), m_CurrentSaveView(NULL),
- m_GameInfo(new GameInfoImpl())
+ m_GameInfo(new GameInfoImpl()), m_AboutToRun()
{
ui->setupUi(this);
-
- this->setWindowTitle(ToQString(GameInfo::instance().getGameName()).append(" Mod Organizer v").append(m_Updater.getVersion().canonicalString()));
+ this->setWindowTitle(ToQString(GameInfo::instance().getGameName()) + " Mod Organizer v" + m_Updater.getVersion().displayString());
m_RefreshProgress = new QProgressBar(statusBar());
m_RefreshProgress->setTextVisible(true);
@@ -161,6 +176,8 @@ MainWindow::MainWindow(const QString &exeName, QSettings &initSettings, QWidget
ui->actionEndorseMO->setVisible(false);
+ MOBase::QuestionBoxMemory::init(initSettings.fileName());
+
updateProblemsButton();
updateToolBar();
@@ -179,13 +196,18 @@ MainWindow::MainWindow(const QString &exeName, QSettings &initSettings, QWidget
ui->modList->setModel(m_ModListSortProxy);
ui->modList->sortByColumn(ModList::COL_PRIORITY, Qt::AscendingOrder);
- ui->modList->setItemDelegateForColumn(ModList::COL_FLAGS, new IconDelegate(ui->modList));
+ ui->modList->setItemDelegateForColumn(ModList::COL_FLAGS, new ModFlagIconDelegate(ui->modList));
//ui->modList->setAcceptDrops(true);
ui->modList->header()->installEventFilter(&m_ModList);
if (initSettings.contains("mod_list_state")) {
ui->modList->header()->restoreState(initSettings.value("mod_list_state").toByteArray());
+ } else {
+ // hide these columns by default
+ ui->modList->header()->setSectionHidden(ModList::COL_MODID, true);
+ ui->modList->header()->setSectionHidden(ModList::COL_INSTALLTIME, true);
}
- ui->modList->header()->setSectionHidden(0, false); // prevent the name-column from being hidden
+
+ ui->modList->header()->setSectionHidden(ModList::COL_NAME, false); // prevent the name-column from being hidden
ui->modList->installEventFilter(&m_ModList);
// set up plugin list
@@ -194,13 +216,18 @@ MainWindow::MainWindow(const QString &exeName, QSettings &initSettings, QWidget
ui->espList->setModel(m_PluginListSortProxy);
ui->espList->sortByColumn(PluginList::COL_PRIORITY, Qt::AscendingOrder);
+ ui->espList->setItemDelegateForColumn(PluginList::COL_FLAGS, new PluginFlagIconDelegate(ui->espList));
if (initSettings.contains("plugin_list_state")) {
ui->espList->header()->restoreState(initSettings.value("plugin_list_state").toByteArray());
}
ui->espList->installEventFilter(&m_PluginList);
- resizeLists(initSettings.contains("mod_list_state"), initSettings.contains("plugin_list_state"));
+ ui->bsaList->setLocalMoveOnly(true);
+
+ ui->splitter->setStretchFactor(0, 3);
+ ui->splitter->setStretchFactor(1, 2);
+ resizeLists(initSettings.contains("mod_list_state"), initSettings.contains("plugin_list_state"));
QMenu *linkMenu = new QMenu(this);
linkMenu->addAction(QIcon(":/MO/gui/link"), tr("Toolbar"), this, SLOT(linkToolbar()));
@@ -215,14 +242,15 @@ MainWindow::MainWindow(const QString &exeName, QSettings &initSettings, QWidget
NexusInterface::instance()->setNMMVersion(m_Settings.getNMMVersion());
m_InstallationManager.setModsDirectory(m_Settings.getModDirectory());
+ m_InstallationManager.setDownloadDirectory(m_Settings.getDownloadDirectory());
updateDownloadListDelegate();
ui->savegameList->installEventFilter(this);
ui->savegameList->setMouseTracking(true);
-
connect(&m_DownloadManager, SIGNAL(showMessage(QString)), this, SLOT(showMessage(QString)));
connect(&m_DownloadManager, SIGNAL(downloadSpeed(QString,int)), this, SLOT(downloadSpeed(QString,int)));
+ connect(&m_DownloadManager, SIGNAL(downloadAdded()), ui->downloadView, SLOT(scrollToBottom()));
connect(ui->savegameList, SIGNAL(itemEntered(QListWidgetItem*)), this, SLOT(saveSelectionChanged(QListWidgetItem*)));
@@ -234,6 +262,7 @@ MainWindow::MainWindow(const QString &exeName, QSettings &initSettings, QWidget
connect(&m_ModList, SIGNAL(modlist_changed(QModelIndex, int)), this, SLOT(modlistChanged(QModelIndex, int)));
connect(&m_ModList, SIGNAL(removeSelectedMods()), this, SLOT(removeMod_clicked()));
connect(&m_ModList, SIGNAL(requestColumnSelect(QPoint)), this, SLOT(displayColumnSelection(QPoint)));
+ connect(&m_ModList, SIGNAL(fileMoved(QString, QString, QString)), this, SLOT(fileMoved(QString, QString, QString)));
connect(ui->modList, SIGNAL(dropModeUpdate(bool)), &m_ModList, SLOT(dropModeUpdate(bool)));
connect(m_ModListSortProxy, SIGNAL(filterActive(bool)), this, SLOT(modFilterActive(bool)));
connect(ui->modFilterEdit, SIGNAL(textChanged(QString)), m_ModListSortProxy, SLOT(updateFilter(QString)));
@@ -242,12 +271,17 @@ MainWindow::MainWindow(const QString &exeName, QSettings &initSettings, QWidget
connect(ui->espFilterEdit, SIGNAL(textChanged(QString)), this, SLOT(espFilterChanged(QString)));
connect(&m_PluginList, SIGNAL(saveTimer()), this, SLOT(savePluginList()));
+ connect(ui->bsaList, SIGNAL(itemsMoved()), this, SLOT(bsaList_itemMoved()));
connect(ui->bsaWarning, SIGNAL(linkActivated(QString)), this, SLOT(linkClicked(QString)));
+ connect(ui->dataTree, SIGNAL(itemExpanded(QTreeWidgetItem*)), this, SLOT(expandDataTreeItem(QTreeWidgetItem*)));
+
connect(&m_DirectoryRefresher, SIGNAL(refreshed()), this, SLOT(directory_refreshed()));
connect(&m_DirectoryRefresher, SIGNAL(progress(int)), this, SLOT(refresher_progress(int)));
connect(&m_DirectoryRefresher, SIGNAL(error(QString)), this, SLOT(showError(QString)));
+ connect(&m_SavesWatcher, SIGNAL(directoryChanged(QString)), this, SLOT(refreshSavesIfOpen()));
+
connect(&m_Settings, SIGNAL(languageChanged(QString)), this, SLOT(languageChange(QString)));
connect(&m_Settings, SIGNAL(styleChanged(QString)), this, SIGNAL(styleChanged(QString)));
@@ -255,7 +289,7 @@ MainWindow::MainWindow(const QString &exeName, QSettings &initSettings, QWidget
connect(&m_Updater, SIGNAL(updateAvailable()), this, SLOT(updateAvailable()));
connect(&m_Updater, SIGNAL(motdAvailable(QString)), this, SLOT(motdReceived(QString)));
- connect(ExitProxy::instance(), SIGNAL(exit()), this, SLOT(close()));
+// connect(ExitProxy::instance(), SIGNAL(exit()), this, SLOT(close()));
connect(NexusInterface::instance()->getAccessManager(), SIGNAL(loginSuccessful(bool)), this, SLOT(loginSuccessful(bool)));
connect(NexusInterface::instance()->getAccessManager(), SIGNAL(loginFailed(QString)), this, SLOT(loginFailed(QString)));
@@ -273,6 +307,10 @@ MainWindow::MainWindow(const QString &exeName, QSettings &initSettings, QWidget
m_CheckBSATimer.setSingleShot(true);
connect(&m_CheckBSATimer, SIGNAL(timeout()), this, SLOT(checkBSAList()));
+ m_SaveMetaTimer.setSingleShot(false);
+ connect(&m_SaveMetaTimer, SIGNAL(timeout()), this, SLOT(saveModMetas()));
+ m_SaveMetaTimer.start(5000);
+
m_DirectoryRefresher.moveToThread(&m_RefresherThread);
m_RefresherThread.start();
@@ -293,6 +331,9 @@ MainWindow::MainWindow(const QString &exeName, QSettings &initSettings, QWidget
m_Tutorial.expose("modList", &m_ModList);
m_Tutorial.expose("espList", &m_PluginList);
+
+ // before we start loading plugins we, add the dll path to the dll search order
+ ::SetDllDirectoryW(ToWString(QDir::toNativeSeparators(qApp->applicationDirPath() + "/dlls")).c_str());
loadPlugins();
}
@@ -415,7 +456,7 @@ void MainWindow::actionToToolButton(QAction *&sourceAction)
button->setToolButtonStyle(ui->toolBar->toolButtonStyle());
button->setToolTip(sourceAction->toolTip());
button->setShortcut(sourceAction->shortcut());
- QMenu *buttonMenu = new QMenu(sourceAction->text());
+ QMenu *buttonMenu = new QMenu(sourceAction->text(), button);
button->setMenu(buttonMenu);
QAction *newAction = ui->toolBar->insertWidget(sourceAction, button);
newAction->setObjectName(sourceAction->objectName());
@@ -484,6 +525,7 @@ void MainWindow::updateProblemsButton()
ui->actionProblems->setIconText(tr("Problems"));
ui->actionProblems->setToolTip(tr("There are potential problems with your setup"));
} else {
+ ui->actionProblems->setEnabled(false);
ui->actionProblems->setIconText(tr("No Problems"));
ui->actionProblems->setToolTip(tr("Everything seems to be in order"));
}
@@ -531,6 +573,12 @@ bool MainWindow::checkForProblems()
return false;
}
+void MainWindow::about()
+{
+ AboutDialog dialog(m_Updater.getVersion().displayString(), this);
+ dialog.exec();
+}
+
void MainWindow::createHelpWidget()
{
@@ -588,28 +636,26 @@ void MainWindow::createHelpWidget()
}
buttonMenu->addMenu(tutorialMenu);
+ buttonMenu->addAction(tr("About"), this, SLOT(about()));
+ buttonMenu->addAction(tr("About Qt"), qApp, SLOT(aboutQt()));
}
void MainWindow::saveArchiveList()
{
if (m_ArchivesInit) {
- QFile archiveFile(m_CurrentProfile->getArchivesFileName());
- if (archiveFile.open(QIODevice::WriteOnly | QIODevice::Truncate)) {
- for (int i = 0; i < ui->bsaList->topLevelItemCount(); ++i) {
- QTreeWidgetItem *tlItem = ui->bsaList->topLevelItem(i);
- for (int j = 0; j < tlItem->childCount(); ++j) {
- QTreeWidgetItem *item = tlItem->child(j);
- if (item->checkState(0) == Qt::Checked) {
- archiveFile.write(item->text(0).toUtf8().append("\r\n"));
- }
+ SafeWriteFile archiveFile(m_CurrentProfile->getArchivesFileName());
+ for (int i = 0; i < ui->bsaList->topLevelItemCount(); ++i) {
+ QTreeWidgetItem *tlItem = ui->bsaList->topLevelItem(i);
+ for (int j = 0; j < tlItem->childCount(); ++j) {
+ QTreeWidgetItem *item = tlItem->child(j);
+ if (item->checkState(0) == Qt::Checked) {
+ archiveFile->write(item->text(0).toUtf8().append("\r\n"));
}
}
- } else {
- reportError(tr("failed to save archives order, do you have write access "
- "to \"%1\"?").arg(m_CurrentProfile->getArchivesFileName()));
}
- archiveFile.close();
+ archiveFile.commit();
+ qDebug("%s saved", qPrintable(QDir::toNativeSeparators(m_CurrentProfile->getArchivesFileName())));
} else {
qWarning("archive list not initialised");
}
@@ -672,18 +718,13 @@ bool MainWindow::saveCurrentLists()
return false;
}
- // save plugin list
try {
savePluginList();
+ saveArchiveList();
} catch (const std::exception &e) {
reportError(tr("failed to save load order: %1").arg(e.what()));
}
- // ensure the archive list exists
- if (!QFile::exists(m_CurrentProfile->getArchivesFileName())) {
- saveArchiveList();
- }
-
return true;
}
@@ -769,6 +810,8 @@ void MainWindow::showEvent(QShowEvent *event)
ui->groupCombo->setCurrentIndex(grouping);
allowListResize();
+
+ m_Settings.registerAsNXMHandler(false);
}
@@ -889,8 +932,7 @@ void MainWindow::hideSaveGameInfo()
}
}
-
-bool MainWindow::eventFilter(QObject* object, QEvent *event)
+bool MainWindow::eventFilter(QObject *object, QEvent *event)
{
if ((object == ui->savegameList) &&
((event->type() == QEvent::Leave) || (event->type() == QEvent::WindowDeactivate))) {
@@ -1046,7 +1088,7 @@ void MainWindow::registerModPage(IPluginModPage *modPage)
}
-bool MainWindow::registerPlugin(QObject *plugin)
+bool MainWindow::registerPlugin(QObject *plugin, const QString &fileName)
{
{ // generic treatment for all plugins
IPlugin *pluginObj = qobject_cast<IPlugin*>(plugin);
@@ -1054,6 +1096,7 @@ bool MainWindow::registerPlugin(QObject *plugin)
qDebug("not an IPlugin");
return false;
}
+ plugin->setProperty("filename", fileName);
m_Settings.registerPlugin(pluginObj);
}
@@ -1061,6 +1104,7 @@ bool MainWindow::registerPlugin(QObject *plugin)
IPluginDiagnose *diagnose = qobject_cast<IPluginDiagnose*>(plugin);
if (diagnose != NULL) {
m_DiagnosisPlugins.push_back(diagnose);
+ diagnose->onInvalidated([&] () { this->updateProblemsButton(); });
}
}
{ // mod page plugin
@@ -1085,18 +1129,25 @@ bool MainWindow::registerPlugin(QObject *plugin)
return true;
}
}
+ { // preview plugins
+ IPluginPreview *preview = qobject_cast<IPluginPreview*>(plugin);
+ if (verifyPlugin(preview)) {
+ m_PreviewGenerator.registerPlugin(preview);
+ }
+ }
{ // proxy plugins
IPluginProxy *proxy = qobject_cast<IPluginProxy*>(plugin);
if (verifyPlugin(proxy)) {
+ proxy->setParentWidget(this);
QStringList pluginNames = proxy->pluginList(QCoreApplication::applicationDirPath() + "/" + ToQString(AppConfig::pluginPath()));
foreach (const QString &pluginName, pluginNames) {
try {
QObject *proxiedPlugin = proxy->instantiate(pluginName);
if (proxiedPlugin != NULL) {
- if (registerPlugin(proxiedPlugin)) {
- qDebug("loaded plugin \"%s\"", QDir::toNativeSeparators(pluginName).toUtf8().constData());
+ if (registerPlugin(proxiedPlugin, pluginName)) {
+ qDebug("loaded plugin \"%s\"", qPrintable(pluginName));
} else {
- qWarning("plugin \"%s\" failed to load", pluginName.toUtf8().constData());
+ qWarning("plugin \"%s\" failed to load", qPrintable(pluginName));
}
}
} catch (const std::exception &e) {
@@ -1128,32 +1179,62 @@ void MainWindow::loadPlugins()
m_Settings.clearPlugins();
foreach (QObject *plugin, QPluginLoader::staticInstances()) {
- registerPlugin(plugin);
+ registerPlugin(plugin, "");
}
+ QFile loadCheck(QCoreApplication::applicationDirPath() + "/plugin_loadcheck.tmp");
+ if (loadCheck.exists() && loadCheck.open(QIODevice::ReadOnly)) {
+ // oh, there was a failed plugin load last time. Find out which plugin was loaded last
+ QString fileName;
+ while (!loadCheck.atEnd()) {
+ fileName = QString::fromUtf8(loadCheck.readLine().constData()).trimmed();
+ }
+ if (QMessageBox::question(this, tr("Plugin error"),
+ tr("It appears the plugin \"%1\" failed to load last startup and caused MO to crash. Do you want to disable it?\n"
+ "(Please note: If this is the first time you see this message for this plugin you may want to give it another try. "
+ "The plugin may be able to recover from the problem)").arg(fileName),
+ QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes) == QMessageBox::Yes) {
+ m_Settings.addBlacklistPlugin(fileName);
+ }
+ loadCheck.close();
+ }
+
+ loadCheck.open(QIODevice::WriteOnly);
+
QString pluginPath = QDir::fromNativeSeparators(ToQString(GameInfo::instance().getOrganizerDirectory())) + "/" + ToQString(AppConfig::pluginPath());
qDebug("looking for plugins in %s", QDir::toNativeSeparators(pluginPath).toUtf8().constData());
QDirIterator iter(pluginPath, QDir::Files | QDir::NoDotAndDotDot);
+
while (iter.hasNext()) {
iter.next();
+ if (m_Settings.pluginBlacklisted(iter.fileName())) {
+ qDebug("plugin \"%s\" blacklisted", qPrintable(iter.fileName()));
+ continue;
+ }
+ loadCheck.write(iter.fileName().toUtf8());
+ loadCheck.write("\n");
+ loadCheck.flush();
QString pluginName = iter.filePath();
if (QLibrary::isLibrary(pluginName)) {
QPluginLoader pluginLoader(pluginName);
if (pluginLoader.instance() == NULL) {
m_UnloadedPlugins.push_back(pluginName);
qCritical("failed to load plugin %s: %s",
- pluginName.toUtf8().constData(), pluginLoader.errorString().toUtf8().constData());
+ qPrintable(pluginName), qPrintable(pluginLoader.errorString()));
} else {
- if (registerPlugin(pluginLoader.instance())) {
- qDebug("loaded plugin \"%s\"", QDir::toNativeSeparators(pluginName).toUtf8().constData());
+ if (registerPlugin(pluginLoader.instance(), pluginName)) {
+ qDebug("loaded plugin \"%s\"", qPrintable(pluginName));
} else {
m_UnloadedPlugins.push_back(pluginName);
- qWarning("plugin \"%s\" failed to load", pluginName.toUtf8().constData());
+ qWarning("plugin \"%s\" failed to load", qPrintable(pluginName));
}
}
}
}
+ // remove the load check file on success
+ loadCheck.remove();
+
m_DownloadManager.setSupportedExtensions(m_InstallationManager.getSupportedExtensions());
m_DiagnosisPlugins.push_back(this);
@@ -1234,10 +1315,10 @@ IModInterface *MainWindow::createMod(GuessedValue<QString> &name)
QSettings settingsFile(targetDirectory.mid(0).append("/meta.ini"), QSettings::IniFormat);
settingsFile.setValue("modid", 0);
- settingsFile.setValue("version", 0);
- settingsFile.setValue("newestVersion", 0);
+ settingsFile.setValue("version", "");
+ settingsFile.setValue("newestVersion", "");
settingsFile.setValue("category", 0);
- settingsFile.setValue("installationFile", 0);
+ settingsFile.setValue("installationFile", "");
return ModInfo::createFrom(QDir(targetDirectory), &m_DirectoryStructure).data();
// }
}
@@ -1263,6 +1344,21 @@ QVariant MainWindow::pluginSetting(const QString &pluginName, const QString &key
return m_Settings.pluginSetting(pluginName, key);
}
+void MainWindow::setPluginSetting(const QString &pluginName, const QString &key, const QVariant &value)
+{
+ m_Settings.setPluginSetting(pluginName, key, value);
+}
+
+QVariant MainWindow::persistent(const QString &pluginName, const QString &key, const QVariant &def) const
+{
+ return m_Settings.pluginPersistent(pluginName, key, def);
+}
+
+void MainWindow::setPersistent(const QString &pluginName, const QString &key, const QVariant &value, bool sync)
+{
+ m_Settings.setPluginPersistent(pluginName, key, value, sync);
+}
+
QString MainWindow::pluginDataPath() const
{
QString pluginPath = QDir::fromNativeSeparators(ToQString(GameInfo::instance().getOrganizerDirectory())) + "/" + ToQString(AppConfig::pluginPath());
@@ -1292,7 +1388,7 @@ HANDLE MainWindow::spawnBinaryDirect(const QFileInfo &binary, const QString &arg
storeSettings();
if (!binary.exists()) {
- reportError(tr("\"%1\" not found").arg(binary.fileName()));
+ reportError(tr("Executable \"%1\" not found").arg(binary.fileName()));
return INVALID_HANDLE_VALUE;
}
@@ -1306,7 +1402,7 @@ HANDLE MainWindow::spawnBinaryDirect(const QFileInfo &binary, const QString &arg
(m_Settings.getLoadMechanism() == LoadMechanism::LOAD_MODORGANIZER)) {
if (!testForSteam()) {
if (QuestionBoxMemory::query(this->isVisible() ? this : NULL,
- m_Settings.directInterface(), "steamQuery", tr("Start Steam?"),
+ "steamQuery", tr("Start Steam?"),
tr("Steam is required to be running already to correctly start the game. "
"Should MO try to start steam now?"),
QDialogButtonBox::Yes | QDialogButtonBox::No) == QDialogButtonBox::Yes) {
@@ -1315,10 +1411,25 @@ HANDLE MainWindow::spawnBinaryDirect(const QFileInfo &binary, const QString &arg
}
}
- return startBinary(binary, arguments, profileName, m_Settings.logLevel(), currentDirectory, true);
-}
+ while (m_RefreshProgress->isVisible()) {
+ ::Sleep(100);
+ QCoreApplication::processEvents();
+ }
+ if (m_CurrentProfile != nullptr) {
+ m_CurrentProfile->writeModlistNow(true);
+ }
+
+ // TODO: should also pass arguments
+ if (m_AboutToRun(binary.absoluteFilePath())) {
+ return startBinary(binary, arguments, profileName, m_Settings.logLevel(), currentDirectory, true);
+ } else {
+ qDebug("start of \"%s\" canceled by plugin", qPrintable(binary.absoluteFilePath()));
+ return INVALID_HANDLE_VALUE;
+ }
+}
+/*
void MainWindow::spawnProgram(const QString &fileName, const QString &argumentsArg,
const QString &profileName, const QDir &currentDirectory)
{
@@ -1338,25 +1449,29 @@ void MainWindow::spawnProgram(const QString &fileName, const QString &argumentsA
}
spawnBinaryDirect(binary, arguments, profileName, currentDirectory, steamAppID);
}
+*/
void MainWindow::spawnBinary(const QFileInfo &binary, const QString &arguments, const QDir &currentDirectory, bool closeAfterStart, const QString &steamAppID)
{
storeSettings();
+ LockedDialog *dialog = new LockedDialog(this);
+ dialog->show();
+ ON_BLOCK_EXIT([&] () { dialog->hide(); dialog->deleteLater(); });
+
HANDLE processHandle = spawnBinaryDirect(binary, arguments, m_CurrentProfile->getName(), currentDirectory, steamAppID);
if (processHandle != INVALID_HANDLE_VALUE) {
if (closeAfterStart) {
close();
} else {
this->setEnabled(false);
-
- LockedDialog *dialog = new LockedDialog(this);
- dialog->show();
+ // re-enable the locked dialog because what'd be the point otherwise?
+ dialog->setEnabled(true);
QCoreApplication::processEvents();
- while ((::WaitForSingleObject(processHandle, 1000) == WAIT_TIMEOUT) &&
+ while ((::WaitForSingleObject(processHandle, 100) == WAIT_TIMEOUT) &&
!dialog->unlockClicked()) {
// keep processing events so the app doesn't appear dead
QCoreApplication::processEvents();
@@ -1364,12 +1479,9 @@ void MainWindow::spawnBinary(const QFileInfo &binary, const QString &arguments,
this->setEnabled(true);
refreshDirectoryStructure();
- refreshDataTree();
if (GameInfo::instance().getLoadOrderMechanism() == GameInfo::TYPE_FILETIME) {
QFile::remove(m_CurrentProfile->getLoadOrderFileName());
}
- refreshLists();
- dialog->hide();
}
}
}
@@ -1392,10 +1504,12 @@ void MainWindow::startExeAction()
}
-void MainWindow::refreshModList()
+void MainWindow::refreshModList(bool saveChanges)
{
// don't lose changes!
- m_CurrentProfile->writeModlistNow(true);
+ if (saveChanges) {
+ m_CurrentProfile->writeModlistNow(true);
+ }
ModInfo::updateFromDisc(m_Settings.getModDirectory(), &m_DirectoryStructure);
m_CurrentProfile->refreshModStatus();
@@ -1456,6 +1570,12 @@ void MainWindow::on_profileBox_currentIndexChanged(int index)
saveCurrentLists();
}
+ // ensure the new index is valid
+ if (index < 0 || index >= ui->profileBox->count()) {
+ qDebug("invalid profile index, using last profile");
+ ui->profileBox->setCurrentIndex(ui->profileBox->count() - 1);
+ }
+
if (ui->profileBox->currentIndex() == 0) {
ProfilesDialog(m_GamePath).exec();
while (!refreshProfiles()) {
@@ -1533,18 +1653,61 @@ void MainWindow::updateTo(QTreeWidgetItem *subTree, const std::wstring &director
std::vector<DirectoryEntry*>::const_iterator current, end;
directoryEntry.getSubDirectories(current, end);
for (; current != end; ++current) {
- QStringList columns(ToQString((*current)->getName()));
+ QString pathName = ToQString((*current)->getName());
+ QStringList columns(pathName);
columns.append("");
- QTreeWidgetItem *directoryChild = new QTreeWidgetItem(columns);
- updateTo(directoryChild, temp.str(), **current, conflictsOnly);
- if (directoryChild->childCount() != 0) {
- subTree->addChild(directoryChild);
+ if (!(*current)->isEmpty()) {
+ QTreeWidgetItem *directoryChild = new QTreeWidgetItem(columns);
+ if (conflictsOnly) {
+ updateTo(directoryChild, temp.str(), **current, conflictsOnly);
+ if (directoryChild->childCount() != 0) {
+ subTree->addChild(directoryChild);
+ } else {
+ delete directoryChild;
+ }
+ } else {
+ QTreeWidgetItem *onDemandLoad = new QTreeWidgetItem(QStringList());
+ onDemandLoad->setData(0, Qt::UserRole + 0, "__loaded_on_demand__");
+ onDemandLoad->setData(0, Qt::UserRole + 1, ToQString(temp.str()));
+ onDemandLoad->setData(0, Qt::UserRole + 2, conflictsOnly);
+ directoryChild->addChild(onDemandLoad);
+ subTree->addChild(directoryChild);
+ }
}
}
}
+
subTree->sortChildren(0, Qt::AscendingOrder);
}
+void MainWindow::delayedRemove()
+{
+ foreach (QTreeWidgetItem *item, m_RemoveWidget) {
+ item->removeChild(item->child(0));
+ }
+ m_RemoveWidget.clear();
+}
+
+void MainWindow::expandDataTreeItem(QTreeWidgetItem *item)
+{
+ if ((item->childCount() == 1) && (item->child(0)->data(0, Qt::UserRole).toString() == "__loaded_on_demand__")) {
+ // read the data we need from the sub-item, then dispose of it
+ QTreeWidgetItem *onDemandDataItem = item->child(0);
+ std::wstring path = ToWString(onDemandDataItem->data(0, Qt::UserRole + 1).toString());
+ bool conflictsOnly = onDemandDataItem->data(0, Qt::UserRole + 2).toBool();
+
+ std::wstring virtualPath = (path + L"\\").substr(6) + ToWString(item->text(0));
+ DirectoryEntry *dir = m_DirectoryStructure->findSubDirectoryRecursive(virtualPath);
+ if (dir != NULL) {
+ updateTo(item, path, *dir, conflictsOnly);
+ } else {
+ qWarning("failed to update view of %ls", path.c_str());
+ }
+ m_RemoveWidget.push_back(item);
+ QTimer::singleShot(5, this, SLOT(delayedRemove()));
+ }
+}
+
bool MainWindow::refreshProfiles(bool selectProfile)
{
@@ -1670,6 +1833,14 @@ void MainWindow::refreshDataTree()
}
+void MainWindow::refreshSavesIfOpen()
+{
+ if (ui->tabWidget->currentIndex() == 3) {
+ refreshSaveList();
+ }
+}
+
+
void MainWindow::refreshSaveList()
{
ui->savegameList->clear();
@@ -1685,6 +1856,11 @@ void MainWindow::refreshSaveList()
savesDir.setPath(QDir::fromNativeSeparators(ToQString(GameInfo::instance().getDocumentsDir() + L"\\" + path)));
}
+ if (m_SavesWatcher.directories().length() > 0) {
+ m_SavesWatcher.removePaths(m_SavesWatcher.directories());
+ }
+ m_SavesWatcher.addPath(savesDir.absolutePath());
+
QStringList filters;
filters << ToQString(GameInfo::instance().getSaveGameExtension());
savesDir.setNameFilters(filters);
@@ -1701,7 +1877,7 @@ void MainWindow::refreshSaveList()
void MainWindow::refreshLists()
{
- if (m_DirectoryStructure->isPopulated()) {
+ if ((m_CurrentProfile != NULL) && m_DirectoryStructure->isPopulated()) {
refreshESPList();
refreshBSAList();
} // no point in refreshing lists if no files have been added to the directory tree
@@ -1713,11 +1889,15 @@ void MainWindow::refreshESPList()
m_CurrentProfile->writeModlist();
// clear list
- m_PluginList.refresh(m_CurrentProfile->getName(),
- *m_DirectoryStructure,
- m_CurrentProfile->getPluginsFileName(),
- m_CurrentProfile->getLoadOrderFileName(),
- m_CurrentProfile->getLockedOrderFileName());
+ try {
+ m_PluginList.refresh(m_CurrentProfile->getName(),
+ *m_DirectoryStructure,
+ m_CurrentProfile->getPluginsFileName(),
+ m_CurrentProfile->getLoadOrderFileName(),
+ m_CurrentProfile->getLockedOrderFileName());
+ } catch (const std::exception &e) {
+ reportError(tr("Failed to refresh list of esps: %1").arg(e.what()));
+ }
}
@@ -1798,8 +1978,8 @@ void MainWindow::refreshBSAList()
QTreeWidgetItem *newItem = new QTreeWidgetItem(strings);
newItem->setData(0, Qt::UserRole, index);
newItem->setData(1, Qt::UserRole, origin);
-// newItem->setFlags(newItem->flags() & ~Qt::ItemIsDropEnabled | Qt::ItemIsUserCheckable);
- newItem->setFlags(newItem->flags() | Qt::ItemIsUserCheckable);
+ newItem->setFlags(newItem->flags() & ~Qt::ItemIsDropEnabled | Qt::ItemIsUserCheckable);
+// newItem->setFlags(newItem->flags() | Qt::ItemIsUserCheckable);
newItem->setCheckState(0, (index != -1) ? Qt::Checked : Qt::Unchecked);
if (m_Settings.forceEnableCoreFiles() && m_DefaultArchives.contains(filename)) {
newItem->setCheckState(0, Qt::Checked);
@@ -1826,6 +2006,7 @@ void MainWindow::refreshBSAList()
subItem = items.at(0);
} else {
subItem = new QTreeWidgetItem(QStringList(ToQString(origin.getName())));
+ subItem->setFlags(subItem->flags() & ~Qt::ItemIsDragEnabled);
ui->bsaList->addTopLevelItem(subItem);
}
subItem->addChild(iter->second);
@@ -1885,6 +2066,15 @@ void MainWindow::checkBSAList()
}
+void MainWindow::saveModMetas()
+{
+ for (unsigned int i = 0; i < ModInfo::getNumMods(); ++i) {
+ ModInfo::Ptr modInfo = ModInfo::getByIndex(i);
+ modInfo->saveMeta();
+ }
+ }
+
+
void MainWindow::fixCategories()
{
for (unsigned int i = 0; i < ModInfo::getNumMods(); ++i) {
@@ -1929,7 +2119,6 @@ void MainWindow::activateProxy(bool activate)
busyDialog.hide();
}
-
void MainWindow::readSettings()
{
QSettings settings(ToQString(GameInfo::instance().getIniFilename()), QSettings::IniFormat);
@@ -2019,7 +2208,6 @@ void MainWindow::on_btnRefreshData_clicked()
{
if (!m_DirectoryUpdate) {
refreshDirectoryStructure();
- refreshDataTree();
} else {
qDebug("directory update");
}
@@ -2043,6 +2231,10 @@ void MainWindow::on_tabWidget_currentChanged(int index)
void MainWindow::installMod(const QString &fileName)
{
+ if (m_CurrentProfile == NULL) {
+ return;
+ }
+
bool hasIniTweaks = false;
GuessedValue<QString> modName;
m_CurrentProfile->writeModlistNow();
@@ -2086,17 +2278,131 @@ QString MainWindow::resolvePath(const QString &fileName) const
}
}
+QStringList MainWindow::listDirectories(const QString &directoryName) const
+{
+ QStringList result;
+ DirectoryEntry *dir = m_DirectoryStructure->findSubDirectoryRecursive(ToWString(directoryName));
+ if (dir != NULL) {
+ std::vector<DirectoryEntry*>::iterator current, end;
+ dir->getSubDirectories(current, end);
+ for (; current != end; ++current) {
+ result.append(ToQString((*current)->getName()));
+ }
+ }
+ return result;
+}
+
+QStringList MainWindow::findFiles(const QString &path, const std::function<bool(const QString&)> &filter) const
+{
+ QStringList result;
+ DirectoryEntry *dir = m_DirectoryStructure->findSubDirectoryRecursive(ToWString(path));
+ if (dir != NULL) {
+ std::vector<FileEntry::Ptr> files = dir->getFiles();
+ foreach (FileEntry::Ptr file, files) {
+ if (filter(ToQString(file->getFullPath()))) {
+ result.append(ToQString(file->getFullPath()));
+ }
+ }
+ } else {
+ qWarning("directory %s not found", qPrintable(path));
+ }
+ return result;
+}
+
+QList<IOrganizer::FileInfo> MainWindow::findFileInfos(const QString &path, const std::function<bool (const IOrganizer::FileInfo &)> &filter) const
+{
+ QList<IOrganizer::FileInfo> result;
+ DirectoryEntry *dir = m_DirectoryStructure->findSubDirectoryRecursive(ToWString(path));
+ if (dir != NULL) {
+ std::vector<FileEntry::Ptr> files = dir->getFiles();
+ foreach (FileEntry::Ptr file, files) {
+ FileInfo info;
+ info.filePath = ToQString(file->getFullPath());
+ bool fromArchive = false;
+ info.origins.append(ToQString(m_DirectoryStructure->getOriginByID(file->getOrigin(fromArchive)).getName()));
+ info.archive = fromArchive ? ToQString(file->getArchive()) : "";
+ foreach (int idx, file->getAlternatives()) {
+ info.origins.append(ToQString(m_DirectoryStructure->getOriginByID(idx).getName()));
+ }
+
+ if (filter(info)) {
+ result.append(info);
+ }
+ }
+ } else {
+ qWarning("directory %s not found", qPrintable(path));
+ }
+ return result;
+}
+
IDownloadManager *MainWindow::downloadManager()
{
return &m_DownloadManager;
}
+IPluginList *MainWindow::pluginList()
+{
+ return &m_PluginList;
+}
+
+IModList *MainWindow::modList()
+{
+ return &m_ModList;
+}
+
+HANDLE MainWindow::startApplication(const QString &executable, const QStringList &args, const QString &cwd, const QString &profile)
+{
+ QFileInfo binary;
+ QString arguments = args.join(" ");
+ QString currentDirectory = cwd;
+ QString profileName = (profile.length() > 0) ? profile : m_CurrentProfile->getName();
+ QString steamAppID;
+ if (executable.contains('\\') || executable.contains('/')) {
+ // file path
+ binary = QFileInfo(executable);
+ if (binary.isRelative()) {
+ // relative path, should be relative to game directory
+ binary = QFileInfo(QDir::fromNativeSeparators(ToQString(GameInfo::instance().getGameDirectory())) + "/" + executable);
+ }
+ if (cwd.length() == 0) {
+ currentDirectory = binary.absolutePath();
+ }
+ } else {
+ // only a file name, search executables list
+ try {
+ const Executable &exe = m_ExecutablesList.find(executable);
+ steamAppID = exe.m_SteamAppID;
+ if (arguments == "") {
+ arguments = exe.m_Arguments;
+ }
+ binary = exe.m_BinaryInfo;
+ if (cwd.length() == 0) {
+ currentDirectory = exe.m_WorkingDirectory;
+ }
+ } catch (const std::runtime_error&) {
+ qWarning("\"%s\" not set up as executable", executable.toUtf8().constData());
+ binary = QFileInfo(executable);
+ }
+ }
+
+ return spawnBinaryDirect(binary, arguments, profileName, currentDirectory, steamAppID);
+}
+
+bool MainWindow::onAboutToRun(const std::function<bool (const QString &)> &func)
+{
+ auto conn = m_AboutToRun.connect(func);
+ return conn.connected();
+}
+
std::vector<unsigned int> MainWindow::activeProblems() const
{
std::vector<unsigned int> problems;
if (m_UnloadedPlugins.size() != 0) {
problems.push_back(PROBLEM_PLUGINSNOTLOADED);
}
+ if (m_PluginList.enabledCount() > 255) {
+ problems.push_back(PROBLEM_TOOMANYPLUGINS);
+ }
return problems;
}
@@ -2106,6 +2412,9 @@ QString MainWindow::shortDescription(unsigned int key) const
case PROBLEM_PLUGINSNOTLOADED: {
return tr("Some plugins could not be loaded");
} break;
+ case PROBLEM_TOOMANYPLUGINS: {
+ return tr("Too many esps and esms enabled");
+ } break;
default: {
return tr("Description missing");
} break;
@@ -2116,13 +2425,17 @@ QString MainWindow::fullDescription(unsigned int key) const
{
switch (key) {
case PROBLEM_PLUGINSNOTLOADED: {
- QString result = tr("The following Plugins could not be loaded. The reason may be missing dependencies (i.e. python) or an outdated version:<ul>");
+ QString result = tr("The following plugins could not be loaded. The reason may be missing dependencies (i.e. python) or an outdated version:") + "<ul>";
foreach (const QString &plugin, m_UnloadedPlugins) {
result += "<li>" + plugin + "</li>";
}
result += "<ul>";
return result;
} break;
+ case PROBLEM_TOOMANYPLUGINS: {
+ return tr("The game doesn't allow more than 255 active plugins (including the official ones) to be loaded. You have to disable some unused plugins or "
+ "merge some plugins into one. You can find a guide here: <a href=\"http://wiki.step-project.com/Guide:Merging_Plugins\">http://wiki.step-project.com/Guide:Merging_Plugins</a>");
+ } break;
default: {
return tr("Description missing");
} break;
@@ -2422,10 +2735,15 @@ void MainWindow::refresher_progress(int percent)
void MainWindow::directory_refreshed()
{
+ statusBar()->hide();
+
DirectoryEntry *newStructure = m_DirectoryRefresher.getDirectoryStructure();
if (newStructure != NULL) {
- delete m_DirectoryStructure;
+ DirectoryEntry *oldStructure = m_DirectoryStructure;
m_DirectoryStructure = newStructure;
+ delete oldStructure;
+
+ refreshDataTree();
} else {
// TODO: don't know why this happens, this slot seems to get called twice with only one emit
return;
@@ -2435,11 +2753,15 @@ void MainWindow::directory_refreshed()
refreshLists();
}
// m_RefreshProgress->setVisible(false);
- statusBar()->hide();
// some problem-reports may rely on the virtual directory tree so they need to be updated
// now
updateProblemsButton();
+
+ for (int i = 0; i < m_ModList.rowCount(); ++i) {
+ ModInfo::Ptr modInfo = ModInfo::getByIndex(i);
+ modInfo->clearCaches();
+ }
}
@@ -2499,6 +2821,8 @@ void MainWindow::modorder_changed()
m_DirectoryStructure->getOriginByName(ToWString(modInfo->name())).setPriority(priority);
}
}
+ refreshBSAList();
+ saveArchiveList();
m_DirectoryStructure->getFileRegister()->sortOrigins();
}
@@ -2634,6 +2958,33 @@ void MainWindow::modlistChanged(int)
}
+void MainWindow::fileMoved(const QString &filePath, const QString &oldOriginName, const QString &newOriginName)
+{
+ const FileEntry::Ptr filePtr = m_DirectoryStructure->findFile(ToWString(filePath));
+ if (filePtr.get() != NULL) {
+ try {
+ if (m_DirectoryStructure->originExists(ToWString(newOriginName))) {
+ FilesOrigin &newOrigin = m_DirectoryStructure->getOriginByName(ToWString(newOriginName));
+
+ QString fullNewPath = ToQString(newOrigin.getPath()) + "\\" + filePath;
+ WIN32_FIND_DATAW findData;
+ ::FindFirstFileW(ToWString(fullNewPath).c_str(), &findData);
+
+ filePtr->addOrigin(newOrigin.getID(), findData.ftCreationTime, L"");
+ }
+ if (m_DirectoryStructure->originExists(ToWString(oldOriginName))) {
+ FilesOrigin &oldOrigin = m_DirectoryStructure->getOriginByName(ToWString(oldOriginName));
+ filePtr->removeOrigin(oldOrigin.getID());
+ }
+ } catch (const std::exception &e) {
+ reportError(tr("failed to move \"%1\" from mod \"%2\" to \"%3\": %4").arg(filePath).arg(oldOriginName).arg(newOriginName).arg(e.what()));
+ }
+ } else {
+ // this is probably not an error, the specified path is likely a directory
+ }
+}
+
+
QTreeWidgetItem *MainWindow::addFilterItem(QTreeWidgetItem *root, const QString &name, int categoryID)
{
QTreeWidgetItem *item = new QTreeWidgetItem(QStringList(name));
@@ -2766,8 +3117,9 @@ void MainWindow::modlistChanged(const QModelIndex &index, int role)
MessageDialog::showMessage(tr("Multiple esps activated, please check that they don't conflict."), this);
}
m_PluginList.refreshLoadOrder();
- // immediately save plugin list
+ // immediately save affected lists
savePluginList();
+ saveArchiveList();
}
}
}
@@ -2845,6 +3197,22 @@ void MainWindow::reinstallMod_clicked()
}
+void MainWindow::resumeDownload(int downloadIndex)
+{
+ if (NexusInterface::instance()->getAccessManager()->loggedIn()) {
+ m_DownloadManager.resumeDownload(downloadIndex);
+ } else {
+ QString username, password;
+ if (m_Settings.getNexusLogin(username, password)) {
+ m_PostLoginTasks.push_back(boost::bind(&MainWindow::resumeDownload, _1, downloadIndex));
+ NexusInterface::instance()->getAccessManager()->login(username, password);
+ } else {
+ MessageDialog::showMessage(tr("You need to be logged in with Nexus to resume a download"), this);
+ }
+ }
+}
+
+
void MainWindow::endorseMod(ModInfo::Ptr mod)
{
if (NexusInterface::instance()->getAccessManager()->loggedIn()) {
@@ -2888,8 +3256,19 @@ void MainWindow::unendorse_clicked()
}
+void MainWindow::overwriteClosed(int)
+{
+ OverwriteInfoDialog *dialog = this->findChild<OverwriteInfoDialog*>("__overwriteDialog");
+ if (dialog != NULL) {
+ m_ModList.modInfoChanged(dialog->modInfo());
+ dialog->deleteLater();
+ }
+}
+
+
void MainWindow::displayModInformation(ModInfo::Ptr modInfo, unsigned int index, int tab)
{
+ m_ModList.modInfoAboutToChange(modInfo);
std::vector<ModInfo::EFlag> flags = modInfo->getFlags();
if (std::find(flags.begin(), flags.end(), ModInfo::FLAG_OVERWRITE) != flags.end()) {
QDialog *dialog = this->findChild<QDialog*>("__overwriteDialog");
@@ -2900,7 +3279,9 @@ void MainWindow::displayModInformation(ModInfo::Ptr modInfo, unsigned int index,
dialog->show();
dialog->raise();
dialog->activateWindow();
+ connect(dialog, SIGNAL(finished(int)), this, SLOT(overwriteClosed(int)));
} else {
+ modInfo->saveMeta();
ModInfoDialog dialog(modInfo, m_DirectoryStructure, this);
connect(&dialog, SIGNAL(nexusLinkActivated(QString)), this, SLOT(nexusLinkActivated(QString)));
connect(&dialog, SIGNAL(downloadRequest(QString)), this, SLOT(downloadRequestedNXM(QString)));
@@ -2911,9 +3292,13 @@ void MainWindow::displayModInformation(ModInfo::Ptr modInfo, unsigned int index,
connect(&dialog, SIGNAL(endorseMod(ModInfo::Ptr)), this, SLOT(endorseMod(ModInfo::Ptr)));
dialog.openTab(tab);
+ dialog.restoreTabState(m_Settings.directInterface().value("mod_info_tabs").toByteArray());
dialog.exec();
+ m_Settings.directInterface().setValue("mod_info_tabs", dialog.saveTabState());
+
modInfo->saveMeta();
emit modInfoDisplayed();
+ m_ModList.modInfoChanged(modInfo);
}
if (m_CurrentProfile->modEnabled(index)) {
@@ -2998,7 +3383,7 @@ void MainWindow::testExtractBSA(int modIndex)
QFileInfoList archives = dir.entryInfoList(QStringList("*.bsa"));
if (archives.length() != 0 &&
- (QuestionBoxMemory::query(this, m_Settings.directInterface(), "unpackBSA", tr("Extract BSA"),
+ (QuestionBoxMemory::query(this, "unpackBSA", tr("Extract BSA"),
tr("This mod contains at least one BSA. Do you want to unpack it?\n"
"(This removes the BSA after completion. If you don't know about BSAs, just select no)"),
QDialogButtonBox::Yes | QDialogButtonBox::No, QDialogButtonBox::No) == QMessageBox::Yes)) {
@@ -3006,7 +3391,6 @@ void MainWindow::testExtractBSA(int modIndex)
foreach (QFileInfo archiveInfo, archives) {
BSA::Archive archive;
-
BSA::EErrorCode result = archive.read(archiveInfo.absoluteFilePath().toLocal8Bit().constData());
if ((result != BSA::ERROR_NONE) && (result != BSA::ERROR_INVALIDHASHES)) {
reportError(tr("failed to read %1: %2").arg(archiveInfo.fileName()).arg(result));
@@ -3018,8 +3402,9 @@ void MainWindow::testExtractBSA(int modIndex)
progress.setValue(0);
progress.show();
- archive.extractAll(modInfo->absolutePath().toUtf8().constData(),
- boost::bind(&MainWindow::extractProgress, this, boost::ref(progress), _1, _2));
+ archive.extractAll(modInfo->absolutePath().toLocal8Bit().constData(),
+ boost::bind(&MainWindow::extractProgress, this, boost::ref(progress), _1, _2),
+ false);
if (result == BSA::ERROR_INVALIDHASHES) {
reportError(tr("This archive contains invalid hashes. Some files may be broken."));
@@ -3054,7 +3439,7 @@ void MainWindow::visitOnNexus_clicked()
{
int modID = m_ModList.data(m_ModList.index(m_ContextRow, 0), Qt::UserRole).toInt();
if (modID > 0) {
- nexusLinkActivated(QString("%1/downloads/file.php?id=%2").arg(ToQString(GameInfo::instance().getNexusPage())).arg(modID));
+ nexusLinkActivated(QString("%1/mods/%2").arg(ToQString(GameInfo::instance().getNexusPage(false))).arg(modID));
} else {
MessageDialog::showMessage(tr("Nexus ID for this Mod is unknown"), this);
}
@@ -3067,7 +3452,6 @@ void MainWindow::openExplorer_clicked()
::ShellExecuteW(NULL, L"explore", ToWString(modInfo->absolutePath()).c_str(), NULL, NULL, SW_SHOWNORMAL);
}
-
void MainWindow::information_clicked()
{
try {
@@ -3077,7 +3461,6 @@ void MainWindow::information_clicked()
}
}
-
void MainWindow::syncOverwrite()
{
ModInfo::Ptr modInfo = ModInfo::getByIndex(m_ContextRow);
@@ -3087,8 +3470,8 @@ void MainWindow::syncOverwrite()
modInfo->testValid();
refreshDirectoryStructure();
}
-}
+}
void MainWindow::createModFromOverwrite()
{
@@ -3099,7 +3482,7 @@ void MainWindow::createModFromOverwrite()
bool ok;
name.update(QInputDialog::getText(this, tr("Create Mod..."),
tr("This will move all files from overwrite into a new, regular mod.\n"
- "Please enter a name: "), QLineEdit::Normal, "", &ok),
+ "Please enter a name:"), QLineEdit::Normal, "", &ok),
GUESS_USER);
if (!ok) {
return;
@@ -3117,20 +3500,18 @@ void MainWindow::createModFromOverwrite()
}
ModInfo::Ptr overwriteInfo = ModInfo::getByIndex(m_ContextRow);
-
- shellMove(QStringList(overwriteInfo->absolutePath() + "\\*"), QStringList(newMod->absolutePath()), this);
+ shellMove(QStringList(QDir::toNativeSeparators(overwriteInfo->absolutePath()) + "\\*"),
+ QStringList(QDir::toNativeSeparators(newMod->absolutePath())), this);
refreshModList();
}
-
void MainWindow::cancelModListEditor()
{
ui->modList->setEnabled(false);
ui->modList->setEnabled(true);
}
-
void MainWindow::on_modList_doubleClicked(const QModelIndex &index)
{
if (!index.isValid()) {
@@ -3153,8 +3534,7 @@ void MainWindow::on_modList_doubleClicked(const QModelIndex &index)
}
}
-
-bool MainWindow::addCategories(QMenu *menu, int targetID)
+bool MainWindow::populateMenuCategories(QMenu *menu, int targetID)
{
ModInfo::Ptr modInfo = ModInfo::getByIndex(m_ContextRow);
const std::set<int> &categories = modInfo->getCategories();
@@ -3183,7 +3563,7 @@ bool MainWindow::addCategories(QMenu *menu, int targetID)
targetMenu->addAction(checkableAction.take());
if (m_CategoryFactory.hasChildren(i)) {
- if (addCategories(targetMenu, m_CategoryFactory.getCategoryID(i)) || enabled) {
+ if (populateMenuCategories(targetMenu, m_CategoryFactory.getCategoryID(i)) || enabled) {
targetMenu->setIcon(QIcon(":/MO/gui/resources/check.png"));
}
}
@@ -3192,13 +3572,12 @@ bool MainWindow::addCategories(QMenu *menu, int targetID)
return childEnabled;
}
-
-void MainWindow::saveCategoriesFromMenu(QMenu *menu, int modRow)
+void MainWindow::replaceCategoriesFromMenu(QMenu *menu, int modRow)
{
ModInfo::Ptr modInfo = ModInfo::getByIndex(modRow);
foreach (QAction* action, menu->actions()) {
if (action->menu() != NULL) {
- saveCategoriesFromMenu(action->menu(), modRow);
+ replaceCategoriesFromMenu(action->menu(), modRow);
} else {
QWidgetAction *widgetAction = qobject_cast<QWidgetAction*>(action);
if (widgetAction != NULL) {
@@ -3209,32 +3588,88 @@ void MainWindow::saveCategoriesFromMenu(QMenu *menu, int modRow)
}
}
-
-void MainWindow::saveCategories()
+void MainWindow::addRemoveCategoriesFromMenu(QMenu *menu, int modRow, int referenceRow)
{
+ if (referenceRow != -1 && referenceRow != modRow) {
+ ModInfo::Ptr editedModInfo = ModInfo::getByIndex(referenceRow);
+ foreach (QAction* action, menu->actions()) {
+ if (action->menu() != NULL) {
+ addRemoveCategoriesFromMenu(action->menu(), modRow, referenceRow);
+ } else {
+ QWidgetAction *widgetAction = qobject_cast<QWidgetAction*>(action);
+ if (widgetAction != NULL) {
+ QCheckBox *checkbox = qobject_cast<QCheckBox*>(widgetAction->defaultWidget());
+ int categoryId = widgetAction->data().toInt();
+ bool checkedBefore = editedModInfo->categorySet(categoryId);
+ bool checkedAfter = checkbox->isChecked();
+
+ if (checkedBefore != checkedAfter) { // only update if the category was changed on the edited mod
+ ModInfo::Ptr currentModInfo = ModInfo::getByIndex(modRow);
+ currentModInfo->setCategory(categoryId, checkedAfter);
+ }
+ }
+ }
+ }
+ } else {
+ replaceCategoriesFromMenu(menu, modRow);
+ }
+}
+
+void MainWindow::addRemoveCategories_MenuHandler() {
QMenu *menu = qobject_cast<QMenu*>(sender());
if (menu == NULL) {
qCritical("not a menu?");
return;
}
- QModelIndexList selected = ui->modList->selectionModel()->selectedRows();
+ QModelIndexList selectedTemp = ui->modList->selectionModel()->selectedRows();
+ QList<QPersistentModelIndex> selected;
+ foreach (const QModelIndex &idx, selectedTemp) {
+ selected.append(QPersistentModelIndex(idx));
+ }
if (selected.size() > 0) {
- int min = INT_MAX;
- int max = INT_MIN;
+ foreach (const QPersistentModelIndex &idx, selected) {
+ qDebug("change categories on: %s (ref: %s)", qPrintable(idx.data().toString()), qPrintable(m_ContextIdx.data().toString()));
+ QModelIndex modIdx = mapToModel(&m_ModList, idx);
+ if (modIdx.row() != m_ContextIdx.row()) {
+ addRemoveCategoriesFromMenu(menu, modIdx.row(), m_ContextIdx.row());
+ }
+ }
+ replaceCategoriesFromMenu(menu, m_ContextIdx.row());
+
+ m_ModList.notifyChange(-1);
+
+ foreach (const QPersistentModelIndex &idx, selected) {
+ ui->modList->selectionModel()->select(idx, QItemSelectionModel::Select | QItemSelectionModel::Rows);
+ }
+ } else {
+ //For single mod selections, just do a replace
+ replaceCategoriesFromMenu(menu, m_ContextRow);
+ m_ModList.notifyChange(m_ContextRow);
+ }
+
+ refreshFilters();
+}
+
+void MainWindow::replaceCategories_MenuHandler() {
+ QMenu *menu = qobject_cast<QMenu*>(sender());
+ if (menu == NULL) {
+ qCritical("not a menu?");
+ return;
+ }
+
+ QModelIndexList selected = ui->modList->selectionModel()->selectedRows();
+ if (selected.size() > 0) {
QStringList selectedMods;
for (int i = 0; i < selected.size(); ++i) {
QModelIndex temp = mapToModel(&m_ModList, selected.at(i));
selectedMods.append(temp.data().toString());
- if (temp.row() < min) min = temp.row();
- if (temp.row() > max) max = temp.row();
- saveCategoriesFromMenu(menu, mapToModel(&m_ModList, selected.at(i)).row());
+ replaceCategoriesFromMenu(menu, mapToModel(&m_ModList, selected.at(i)).row());
}
- //m_ModList.notifyChange(min, max);
+
m_ModList.notifyChange(-1);
-// refreshModList();
// find mods by their name because indices are invalidated
QAbstractItemModel *model = ui->modList->model();
@@ -3246,15 +3681,14 @@ void MainWindow::saveCategories()
}
}
} else {
- saveCategoriesFromMenu(menu, m_ContextRow);
+ //For single mod selections, just do a replace
+ replaceCategoriesFromMenu(menu, m_ContextRow);
m_ModList.notifyChange(m_ContextRow);
}
refreshFilters();
}
-
-
void MainWindow::savePrimaryCategory()
{
QMenu *menu = qobject_cast<QMenu*>(sender());
@@ -3279,7 +3713,6 @@ void MainWindow::savePrimaryCategory()
}
}
-
void MainWindow::checkModsForUpdates()
{
statusBar()->show();
@@ -3297,6 +3730,45 @@ void MainWindow::checkModsForUpdates()
}
}
+void MainWindow::changeVersioningScheme() {
+ if (QMessageBox::question(this, tr("Continue?"),
+ tr("The versioning scheme decides which version is considered newer than another.\n"
+ "This function will guess the versioning scheme under the assumption that the installed version is outdated."),
+ QMessageBox::Yes | QMessageBox::Cancel) == QMessageBox::Yes) {
+
+ ModInfo::Ptr info = ModInfo::getByIndex(m_ContextRow);
+
+ bool success = false;
+
+ static VersionInfo::VersionScheme schemes[] = { VersionInfo::SCHEME_REGULAR, VersionInfo::SCHEME_DECIMALMARK, VersionInfo::SCHEME_NUMBERSANDLETTERS };
+
+ for (int i = 0; i < sizeof(schemes) / sizeof(VersionInfo::VersionScheme) && !success; ++i) {
+ VersionInfo verOld(info->getVersion().canonicalString(), schemes[i]);
+ VersionInfo verNew(info->getNewestVersion().canonicalString(), schemes[i]);
+ if (verOld < verNew) {
+ info->setVersion(verOld);
+ info->setNewestVersion(verNew);
+ success = true;
+ }
+ }
+ if (!success) {
+ QMessageBox::information(this, tr("Sorry"),
+ tr("I don't know a versioning scheme where %1 is newer than %2.").arg(info->getNewestVersion().canonicalString()).arg(info->getVersion().canonicalString()),
+ QMessageBox::Ok);
+ }
+ }
+}
+
+void MainWindow::ignoreUpdate() {
+ ModInfo::Ptr info = ModInfo::getByIndex(m_ContextRow);
+ info->ignoreUpdate(true);
+}
+
+void MainWindow::unignoreUpdate()
+{
+ ModInfo::Ptr info = ModInfo::getByIndex(m_ContextRow);
+ info->ignoreUpdate(false);
+}
void MainWindow::addPrimaryCategoryCandidates(QMenu *primaryCategoryMenu, ModInfo::Ptr info)
{
@@ -3318,7 +3790,6 @@ void MainWindow::addPrimaryCategoryCandidates(QMenu *primaryCategoryMenu, ModInf
}
}
-
void MainWindow::addPrimaryCategoryCandidates()
{
QMenu *menu = qobject_cast<QMenu*>(sender());
@@ -3332,7 +3803,6 @@ void MainWindow::addPrimaryCategoryCandidates()
addPrimaryCategoryCandidates(menu, modInfo);
}
-
void MainWindow::enableVisibleMods()
{
if (QMessageBox::question(NULL, tr("Confirm"), tr("Really enable all visible mods?"),
@@ -3341,7 +3811,6 @@ void MainWindow::enableVisibleMods()
}
}
-
void MainWindow::disableVisibleMods()
{
if (QMessageBox::question(NULL, tr("Confirm"), tr("Really disable all visible mods?"),
@@ -3350,7 +3819,6 @@ void MainWindow::disableVisibleMods()
}
}
-
void MainWindow::exportModListCSV()
{
SelectionDialog selection(tr("Choose what to export"));
@@ -3382,7 +3850,7 @@ void MainWindow::exportModListCSV()
bool enabled = m_CurrentProfile->modEnabled(i);
if ((selection.getChoiceData().toInt() == 1) && !enabled) {
continue;
- } else if ((selection.getChoiceData().toInt() == 2) && !m_ModListSortProxy->filterMatches(info, enabled)) {
+ } else if ((selection.getChoiceData().toInt() == 2) && !m_ModListSortProxy->filterMatchesMod(info, enabled)) {
continue;
}
std::vector<ModInfo::EFlag> flags = info->getFlags();
@@ -3405,7 +3873,6 @@ void MainWindow::exportModListCSV()
}
}
-
void addMenuAsPushButton(QMenu *menu, QMenu *subMenu)
{
QPushButton *pushBtn = new QPushButton(subMenu->title());
@@ -3415,13 +3882,13 @@ void addMenuAsPushButton(QMenu *menu, QMenu *subMenu)
menu->addAction(action);
}
-
void MainWindow::on_modList_customContextMenuRequested(const QPoint &pos)
{
try {
QTreeView *modList = findChild<QTreeView*>("modList");
- m_ContextRow = mapToModel(&m_ModList, modList->indexAt(pos)).row();
+ m_ContextIdx = mapToModel(&m_ModList, modList->indexAt(pos));
+ m_ContextRow = m_ContextIdx.row();
QMenu menu;
@@ -3449,17 +3916,34 @@ void MainWindow::on_modList_customContextMenuRequested(const QPoint &pos)
menu.addAction(tr("Restore Backup"), this, SLOT(restoreBackup_clicked()));
menu.addAction(tr("Remove Backup..."), this, SLOT(removeMod_clicked()));
} else {
- // Set categories is a separate menu connected to a push button. This way it doesn't simply close every time you hover the mouse outside
- QMenu *addCategoryMenu = new QMenu(tr("Set Category"));
- addCategories(addCategoryMenu, 0);
- connect(addCategoryMenu, SIGNAL(aboutToHide()), this, SLOT(saveCategories()));
- addMenuAsPushButton(&menu, addCategoryMenu);
+ QMenu *addRemoveCategoriesMenu = new QMenu(tr("Add/Remove Categories"));
+ populateMenuCategories(addRemoveCategoriesMenu, 0);
+ connect(addRemoveCategoriesMenu, SIGNAL(aboutToHide()), this, SLOT(addRemoveCategories_MenuHandler()));
+ addMenuAsPushButton(&menu, addRemoveCategoriesMenu);
+
+ QMenu *replaceCategoriesMenu = new QMenu(tr("Replace Categories"));
+ populateMenuCategories(replaceCategoriesMenu, 0);
+ connect(replaceCategoriesMenu, SIGNAL(aboutToHide()), this, SLOT(replaceCategories_MenuHandler()));
+ addMenuAsPushButton(&menu, replaceCategoriesMenu);
QMenu *primaryCategoryMenu = new QMenu(tr("Primary Category"));
connect(primaryCategoryMenu, SIGNAL(aboutToShow()), this, SLOT(addPrimaryCategoryCandidates()));
connect(primaryCategoryMenu, SIGNAL(aboutToHide()), this, SLOT(savePrimaryCategory()));
addMenuAsPushButton(&menu, primaryCategoryMenu);
+ menu.addSeparator();
+ if (info->downgradeAvailable()) {
+ menu.addAction(tr("Change versioning scheme"), this, SLOT(changeVersioningScheme()));
+ }
+ if (info->updateAvailable() || info->downgradeAvailable()) {
+ if (info->updateIgnored()) {
+ menu.addAction(tr("Un-ignore update"), this, SLOT(unignoreUpdate()));
+ } else {
+ menu.addAction(tr("Ignore update"), this, SLOT(ignoreUpdate()));
+ }
+ }
+ menu.addSeparator();
+
menu.addAction(tr("Rename Mod..."), this, SLOT(renameMod_clicked()));
menu.addAction(tr("Remove Mod..."), this, SLOT(removeMod_clicked()));
menu.addAction(tr("Reinstall Mod"), this, SLOT(reinstallMod_clicked()));
@@ -3527,6 +4011,22 @@ void MainWindow::on_categoriesList_itemSelectionChanged()
}
+void MainWindow::deleteSavegame_clicked()
+{
+ QListWidgetItem *selectedItem = ui->savegameList->item(m_SelectedSaveGame);
+ if (selectedItem == NULL) {
+ return;
+ }
+
+ QString fileName = selectedItem->data(Qt::UserRole).toString();
+
+ if (QMessageBox::question(this, tr("Confirm"), tr("Really delete \"%1\"?").arg(selectedItem->text()),
+ QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) {
+ shellDelete(QStringList() << fileName);
+ }
+}
+
+
void MainWindow::fixMods_clicked()
{
QListWidgetItem *selectedItem = ui->savegameList->item(m_SelectedSaveGame);
@@ -3632,6 +4132,7 @@ void MainWindow::on_savegameList_customContextMenuRequested(const QPoint &pos)
QMenu menu;
menu.addAction(tr("Fix Mods..."), this, SLOT(fixMods_clicked()));
+ menu.addAction(tr("Delete"), this, SLOT(deleteSavegame_clicked()));
menu.exec(ui->savegameList->mapToGlobal(pos));
}
@@ -3719,6 +4220,7 @@ void MainWindow::on_actionSettings_triggered()
bool proxy = m_Settings.useProxy();
m_Settings.query(this);
m_InstallationManager.setModsDirectory(m_Settings.getModDirectory());
+ m_InstallationManager.setDownloadDirectory(m_Settings.getDownloadDirectory());
fixCategories();
refreshFilters();
if (QDir::fromNativeSeparators(m_DownloadManager.getOutputDirectory()) != QDir::fromNativeSeparators(m_Settings.getDownloadDirectory())) {
@@ -3746,15 +4248,10 @@ void MainWindow::on_actionSettings_triggered()
NexusInterface::instance()->setNMMVersion(m_Settings.getNMMVersion());
}
+
void MainWindow::on_actionNexus_triggered()
{
- std::wstring nxmPath = ToWString(QApplication::applicationDirPath() + "/nxmhandler.exe");
- std::wstring executable = ToWString(QApplication::applicationFilePath());
- ::ShellExecuteW(NULL, L"open", nxmPath.c_str(),
- (std::wstring(L"reg ") + GameInfo::instance().getGameShortName() + L" \"" + executable + L"\"").c_str(), NULL, SW_SHOWNORMAL);
-
- ::ShellExecuteW(NULL, L"open", GameInfo::instance().getNexusPage().c_str(), NULL, NULL, SW_SHOWNORMAL);
- ui->tabWidget->setCurrentIndex(4);
+ ::ShellExecuteW(NULL, L"open", GameInfo::instance().getNexusPage(false).c_str(), NULL, NULL, SW_SHOWNORMAL);
}
@@ -3774,6 +4271,7 @@ void MainWindow::linkClicked(const QString &url)
void MainWindow::downloadRequestedNXM(const QString &url)
{
QString username, password;
+ qDebug("download requested: %s", qPrintable(url));
if (!m_LoginAttempted && !NexusInterface::instance()->getAccessManager()->loggedIn() &&
(m_Settings.getNexusLogin(username, password) ||
@@ -3800,35 +4298,40 @@ void MainWindow::downloadRequested(QNetworkReply *reply, int modID, const QStrin
}
-void MainWindow::languageChange(const QString &newLanguage)
+void MainWindow::installTranslator(const QString &name)
{
- if (m_Translator != NULL) {
- QCoreApplication::removeTranslator(m_Translator);
- delete m_Translator;
- m_Translator = NULL;
+ QTranslator *translator = new QTranslator(this);
+ QString fileName = name + "_" + m_CurrentLanguage;
+ if (!translator->load(fileName, qApp->applicationDirPath() + "/translations")) {
+ qWarning("localization file %s not found", qPrintable(fileName));
}
- if (m_TranslatorQt != NULL) {
- QCoreApplication::removeTranslator(m_TranslatorQt);
- delete m_TranslatorQt;
- m_TranslatorQt = NULL;
+ qApp->installTranslator(translator);
+ m_Translators.push_back(translator);
+}
+
+
+void MainWindow::languageChange(const QString &newLanguage)
+{
+ foreach (QTranslator *trans, m_Translators) {
+ qApp->removeTranslator(trans);
}
+ m_Translators.clear();
- if (newLanguage != "en_US") {
- // add our own translations
- m_Translator = new QTranslator(this);
- QString locFile = ToQString(AppConfig::translationPrefix()) + "_" + newLanguage;
- if (!m_Translator->load(locFile, QCoreApplication::applicationDirPath() + "/translations")) {
- qDebug("localization %s not found", locFile.toUtf8().constData());
- }
- QCoreApplication::installTranslator(m_Translator);
+ m_CurrentLanguage = newLanguage;
- // also add the translations for qt default strings
- m_TranslatorQt = new QTranslator(this);
- locFile = QString("qt_") + newLanguage;
- if (!m_TranslatorQt->load(locFile, QCoreApplication::applicationDirPath() + "/translations")) {
- qDebug("localization %s not found", locFile.toUtf8().constData());
+ if (newLanguage != "en_US") {
+ installTranslator("qt");
+ installTranslator(ToQString(AppConfig::translationPrefix()));
+ foreach(IPlugin *plugin, m_Settings.plugins()) {
+ QObject *pluginObj = dynamic_cast<QObject*>(plugin);
+ if (pluginObj != NULL) {
+ QVariant fileNameVariant = pluginObj->property("filename");
+ if (fileNameVariant.isValid()) {
+ QString fileName = QFileInfo(fileNameVariant.toString()).baseName();
+ installTranslator(fileName);
+ }
+ }
}
- QCoreApplication::installTranslator(m_TranslatorQt);
}
ui->retranslateUi(this);
ui->profileBox->setItemText(0, QObject::tr("<Manage...>"));
@@ -4089,6 +4592,51 @@ void MainWindow::unhideFile()
}
}
+void MainWindow::previewDataFile()
+{
+ QString fileName = QDir::fromNativeSeparators(m_ContextItem->data(0, Qt::UserRole).toString());
+
+ // what we have is an absolute path to the file in its actual location (for the primary origin)
+ // what we want is the path relative to the virtual data directory
+
+ // crude: we search for the next slash after the base mod directory to skip everything up to the data-relative directory
+ int offset = m_Settings.getModDirectory().size() + 1;
+ offset = fileName.indexOf("/", offset);
+ fileName = fileName.mid(offset + 1);
+
+ const FileEntry::Ptr file = m_DirectoryStructure->searchFile(ToWString(fileName), NULL);
+
+ if (file.get() == NULL) {
+ reportError(tr("file not found: %1").arg(fileName));
+ return;
+ }
+
+ // set up preview dialog
+ PreviewDialog preview(fileName);
+ auto addFunc = [&] (int originId) {
+ FilesOrigin &origin = m_DirectoryStructure->getOriginByID(originId);
+ QString filePath = QDir::fromNativeSeparators(ToQString(origin.getPath())) + "/" + fileName;
+ if (QFile::exists(filePath)) {
+ // it's very possible the file doesn't exist, because it's inside an archive. we don't support that
+ QWidget *wid = m_PreviewGenerator.genPreview(filePath);
+ if (wid == NULL) {
+ reportError(tr("failed to generate preview for %1").arg(filePath));
+ } else {
+ preview.addVariant(ToQString(origin.getName()), wid);
+ }
+ }
+ };
+
+ addFunc(file->getOrigin());
+ foreach (int i, file->getAlternatives()) {
+ addFunc(i);
+ }
+ if (preview.numVariants() > 0) {
+ preview.exec();
+ } else {
+ QMessageBox::information(this, tr("Sorry"), tr("Sorry, can't preview anything. This function currently does not support extracting from bsas."));
+ }
+}
void MainWindow::openDataFile()
{
@@ -4156,6 +4704,12 @@ void MainWindow::on_dataTree_customContextMenuRequested(const QPoint &pos)
if ((m_ContextItem != NULL) && (m_ContextItem->childCount() == 0)) {
menu.addAction(tr("Open/Execute"), this, SLOT(openDataFile()));
menu.addAction(tr("Add as Executable"), this, SLOT(addAsExecutable()));
+
+ QString fileName = m_ContextItem->text(0);
+ if (m_PreviewGenerator.previewSupported(QFileInfo(fileName).completeSuffix())) {
+ menu.addAction(tr("Preview"), this, SLOT(previewDataFile()));
+ }
+
// offer to hide/unhide file, but not for files from archives
if (!m_ContextItem->data(0, Qt::UserRole + 1).toBool()) {
if (m_ContextItem->text(0).endsWith(ModInfo::s_HiddenExt)) {
@@ -4164,6 +4718,7 @@ void MainWindow::on_dataTree_customContextMenuRequested(const QPoint &pos)
menu.addAction(tr("Hide"), this, SLOT(hideFile()));
}
}
+
menu.addSeparator();
}
menu.addAction(tr("Write To File..."), this, SLOT(writeDataToFile()));
@@ -4187,6 +4742,7 @@ void MainWindow::on_actionUpdate_triggered()
(m_AskForNexusPW && queryLogin(username, password)))) {
NexusInterface::instance()->getAccessManager()->login(username, password);
m_LoginAttempted = true;
+ m_PostLoginTasks.push_back([&](MainWindow*) { m_Updater.startUpdate(); });
} else {
m_Updater.startUpdate();
}
@@ -4206,9 +4762,9 @@ void MainWindow::on_actionEndorseMO_triggered()
void MainWindow::updateDownloadListDelegate()
{
if (ui->compactBox->isChecked()) {
- ui->downloadView->setItemDelegate(new DownloadListWidgetCompactDelegate(&m_DownloadManager, ui->downloadView));
+ ui->downloadView->setItemDelegate(new DownloadListWidgetCompactDelegate(&m_DownloadManager, ui->downloadView, ui->downloadView));
} else {
- ui->downloadView->setItemDelegate(new DownloadListWidgetDelegate(&m_DownloadManager, ui->downloadView));
+ ui->downloadView->setItemDelegate(new DownloadListWidgetDelegate(&m_DownloadManager, ui->downloadView, ui->downloadView));
}
DownloadListSortProxy *sortProxy = new DownloadListSortProxy(&m_DownloadManager, ui->downloadView);
@@ -4223,9 +4779,10 @@ void MainWindow::updateDownloadListDelegate()
connect(ui->downloadView->itemDelegate(), SIGNAL(installDownload(int)), this, SLOT(installDownload(int)));
connect(ui->downloadView->itemDelegate(), SIGNAL(queryInfo(int)), &m_DownloadManager, SLOT(queryInfo(int)));
connect(ui->downloadView->itemDelegate(), SIGNAL(removeDownload(int, bool)), &m_DownloadManager, SLOT(removeDownload(int, bool)));
+ connect(ui->downloadView->itemDelegate(), SIGNAL(restoreDownload(int)), &m_DownloadManager, SLOT(restoreDownload(int)));
connect(ui->downloadView->itemDelegate(), SIGNAL(cancelDownload(int)), &m_DownloadManager, SLOT(cancelDownload(int)));
connect(ui->downloadView->itemDelegate(), SIGNAL(pauseDownload(int)), &m_DownloadManager, SLOT(pauseDownload(int)));
- connect(ui->downloadView->itemDelegate(), SIGNAL(resumeDownload(int)), &m_DownloadManager, SLOT(resumeDownload(int)));
+ connect(ui->downloadView->itemDelegate(), SIGNAL(resumeDownload(int)), this, SLOT(resumeDownload(int)));
}
@@ -4266,7 +4823,7 @@ void MainWindow::nxmUpdatesAvailable(const std::vector<int> &modIDs, QVariant us
} else {
std::vector<ModInfo::Ptr> info = ModInfo::getByModID(result["id"].toInt());
for (auto iter = info.begin(); iter != info.end(); ++iter) {
- (*iter)->setNewestVersion(VersionInfo(result["version"].toString()));
+ (*iter)->setNewestVersion(result["version"].toString());
(*iter)->setNexusDescription(result["description"].toString());
if (NexusInterface::instance()->getAccessManager()->loggedIn() &&
result.contains("voted_by_user")) {
@@ -4291,19 +4848,6 @@ void MainWindow::nxmUpdatesAvailable(const std::vector<int> &modIDs, QVariant us
}
}
-/*
-void MainWindow::nxmEndorsementToggled(int, QVariant, QVariant resultData, int)
-{
- if (resultData.toBool()) {
- ui->actionEndorseMO->setVisible(false);
- QMessageBox::question(this, tr("Thank you!"), tr("Thank you for your endorsement!"));
- }
-
- if (!disconnect(sender(), SIGNAL(nxmEndorsementToggled(int, QVariant, QVariant, int)),
- this, SLOT(nxmEndorsementToggled(int, QVariant, QVariant, int)))) {
- qCritical("failed to disconnect endorsement slot");
- }
-}*/
void MainWindow::nxmDownloadURLs(int, int, QVariant, QVariant resultData, int)
{
@@ -4324,7 +4868,7 @@ void MainWindow::nxmDownloadURLs(int, int, QVariant, QVariant resultData, int)
}
-void MainWindow::nxmRequestFailed(int modID, QVariant, int, const QString &errorString)
+void MainWindow::nxmRequestFailed(int modID, int, QVariant, int, const QString &errorString)
{
if (modID == -1) {
// must be the update-check that failed
@@ -4459,7 +5003,7 @@ void MainWindow::extractBSATriggered()
progress.setMaximum(100);
progress.setValue(0);
progress.show();
- archive.extractAll(QDir::toNativeSeparators(targetFolder).toUtf8().constData(),
+ archive.extractAll(QDir::toNativeSeparators(targetFolder).toLocal8Bit().constData(),
boost::bind(&MainWindow::extractProgress, this, boost::ref(progress), _1, _2));
if (result == BSA::ERROR_INVALIDHASHES) {
reportError(tr("This archive contains invalid hashes. Some files may be broken."));
@@ -4512,13 +5056,19 @@ void MainWindow::on_bsaList_customContextMenuRequested(const QPoint &pos)
menu.exec(ui->bsaList->mapToGlobal(pos));
}
-void MainWindow::on_bsaList_itemChanged(QTreeWidgetItem*, int)
+void MainWindow::bsaList_itemMoved()
{
saveArchiveList();
m_CheckBSATimer.start(500);
}
+void MainWindow::on_bsaList_itemChanged(QTreeWidgetItem*, int)
+{
+ saveArchiveList();
+ m_CheckBSATimer.start(500);
+}
+
void MainWindow::on_actionProblems_triggered()
{
// QString problemDescription;
@@ -4693,3 +5243,219 @@ void MainWindow::on_linkButton_pressed()
ui->linkButton->menu()->actions().at(1)->setIcon(linkDesktopFile.exists() ? removeIcon : addIcon);
ui->linkButton->menu()->actions().at(2)->setIcon(linkMenuFile.exists() ? removeIcon : addIcon);
}
+
+void MainWindow::on_showHiddenBox_toggled(bool checked)
+{
+ m_DownloadManager.setShowHidden(checked);
+}
+
+
+void MainWindow::createStdoutPipe(HANDLE *stdOutRead, HANDLE *stdOutWrite)
+{
+ SECURITY_ATTRIBUTES secAttributes;
+ secAttributes.nLength = sizeof(SECURITY_ATTRIBUTES);
+ secAttributes.bInheritHandle = TRUE;
+ secAttributes.lpSecurityDescriptor = NULL;
+
+ if (!::CreatePipe(stdOutRead, stdOutWrite, &secAttributes, 0)) {
+ qCritical("failed to create stdout reroute");
+ }
+
+ if (!::SetHandleInformation(*stdOutRead, HANDLE_FLAG_INHERIT, 0)) {
+ qCritical("failed to correctly set up the stdout reroute");
+ *stdOutWrite = *stdOutRead = INVALID_HANDLE_VALUE;
+ }
+}
+
+std::string MainWindow::readFromPipe(HANDLE stdOutRead)
+{
+ static const int chunkSize = 128;
+ std::string result;
+
+ char buffer[chunkSize + 1];
+ buffer[chunkSize] = '\0';
+
+ DWORD read = 1;
+ while (read > 0) {
+ if (!::ReadFile(stdOutRead, buffer, chunkSize, &read, NULL)) {
+ break;
+ }
+ if (read > 0) {
+ result.append(buffer, read);
+ if (read < chunkSize) {
+ break;
+ }
+ }
+ }
+ return result;
+}
+
+void MainWindow::on_bossButton_clicked()
+{
+ try {
+ this->setEnabled(false);
+ ON_BLOCK_EXIT([&] () { this->setEnabled(true); });
+ QProgressDialog dialog(this);
+ dialog.setLabelText(tr("LOOT working"));
+ dialog.setMaximum(0);
+ dialog.show();
+
+ QStringList parameters;
+ parameters << "--game" << ToQString(GameInfo::instance().getGameName())
+ << "--gamePath" << ToQString(GameInfo::instance().getGameDirectory());
+
+ HANDLE stdOutWrite = INVALID_HANDLE_VALUE;
+ HANDLE stdOutRead = INVALID_HANDLE_VALUE;
+ createStdoutPipe(&stdOutRead, &stdOutWrite);
+
+ HANDLE loot = startBinary(QFileInfo(qApp->applicationDirPath() + "/lootcli.exe"),
+ parameters.join(" "),
+ m_CurrentProfile->getName(),
+ m_Settings.logLevel(),
+ qApp->applicationDirPath(),
+ true,
+ stdOutWrite);
+
+ // we don't use the write end
+ ::CloseHandle(stdOutWrite);
+
+ if (loot != INVALID_HANDLE_VALUE) {
+ while (::WaitForSingleObject(loot, 100) == WAIT_TIMEOUT) {
+ // keep processing events so the app doesn't appear dead
+ QCoreApplication::processEvents();
+ if (dialog.wasCanceled()) {
+ ::TerminateProcess(loot, 1);
+ }
+ std::string lootOut = readFromPipe(stdOutRead);
+ std::vector<std::string> lines;
+ boost::split(lines, lootOut, boost::is_any_of("\r\n"));
+ foreach (const std::string &line, lines) {
+ if (line.length() > 0) {
+ size_t progidx = line.find("[progress]");
+ size_t reportidx = line.find("[report]");
+ if (progidx != std::string::npos) {
+ dialog.setLabelText(line.substr(progidx + 11).c_str());
+ } else if (reportidx != std::string::npos) {
+ qDebug("report at %s", line.substr(reportidx + 9).c_str());
+ } else {
+ qDebug("%s", line.c_str());
+ }
+ }
+ }
+ }
+ std::string remainder = readFromPipe(stdOutRead).c_str();
+ if (remainder.length() > 0) {
+ qDebug("%s", remainder.c_str());
+ }
+
+ refreshESPList();
+
+ if (GameInfo::instance().getLoadOrderMechanism() == GameInfo::TYPE_FILETIME) {
+ QFile::remove(m_CurrentProfile->getLoadOrderFileName());
+ }
+ }
+
+ dialog.hide();
+ } catch (const std::exception &e) {
+ reportError(tr("failed to run boss: %1").arg(e.what()));
+ ui->bossButton->setEnabled(false);
+ }
+}
+
+
+const char *MainWindow::PATTERN_BACKUP_GLOB = ".????_??_??_??_??_??";
+const char *MainWindow::PATTERN_BACKUP_REGEX = "\\.(\\d\\d\\d\\d_\\d\\d_\\d\\d_\\d\\d_\\d\\d_\\d\\d)";
+const char *MainWindow::PATTERN_BACKUP_DATE = "yyyy_MM_dd_hh_mm_ss";
+
+
+bool MainWindow::createBackup(const QString &filePath, const QDateTime &time)
+{
+ QString outPath = filePath + "." + time.toString(PATTERN_BACKUP_DATE);
+ if (shellCopy(QStringList(filePath), QStringList(outPath), this)) {
+ QFileInfo fileInfo(filePath);
+ removeOldFiles(fileInfo.absolutePath(), fileInfo.fileName() + PATTERN_BACKUP_GLOB, 3, QDir::Name);
+ return true;
+ } else {
+ return false;
+ }
+}
+
+void MainWindow::on_saveButton_clicked()
+{
+ savePluginList();
+ QDateTime now = QDateTime::currentDateTime();
+ if (createBackup(m_CurrentProfile->getPluginsFileName(), now)
+ && createBackup(m_CurrentProfile->getLoadOrderFileName(), now)
+ && createBackup(m_CurrentProfile->getLockedOrderFileName(), now)) {
+ MessageDialog::showMessage(tr("Backup of load order created"), this);
+ }
+}
+
+QString MainWindow::queryRestore(const QString &filePath)
+{
+ QFileInfo pluginFileInfo(filePath);
+ QString pattern = pluginFileInfo.fileName() + ".*";
+ QFileInfoList files = pluginFileInfo.absoluteDir().entryInfoList(QStringList(pattern), QDir::Files, QDir::Name);
+
+ SelectionDialog dialog(tr("Choose backup to restore"), this);
+ QRegExp exp(pluginFileInfo.fileName() + PATTERN_BACKUP_REGEX);
+ QRegExp exp2(pluginFileInfo.fileName() + "\\.(.*)");
+ foreach(const QFileInfo &info, files) {
+ if (exp.exactMatch(info.fileName())) {
+ QDateTime time = QDateTime::fromString(exp.cap(1), PATTERN_BACKUP_DATE);
+ dialog.addChoice(time.toString(), "", exp.cap(1));
+ } else if (exp2.exactMatch(info.fileName())) {
+ dialog.addChoice(exp2.cap(1), "", exp2.cap(1));
+ }
+ }
+
+ if (dialog.numChoices() == 0) {
+ QMessageBox::information(this, tr("No Backups"), tr("There are no backups to restore"));
+ return QString();
+ }
+
+ if (dialog.exec() == QDialog::Accepted) {
+ return dialog.getChoiceData().toString();
+ } else {
+ return QString();
+ }
+}
+
+void MainWindow::on_restoreButton_clicked()
+{
+ QString pluginName = m_CurrentProfile->getPluginsFileName();
+ QString choice = queryRestore(pluginName);
+ if (!choice.isEmpty()) {
+ QString loadOrderName = m_CurrentProfile->getLoadOrderFileName();
+ QString lockedName = m_CurrentProfile->getLockedOrderFileName();
+ if (!shellCopy(pluginName + "." + choice, pluginName, true, this) ||
+ !shellCopy(loadOrderName + "." + choice, loadOrderName, true, this) ||
+ !shellCopy(lockedName + "." + choice, lockedName, true, this)) {
+ QMessageBox::critical(this, tr("Restore failed"),
+ tr("Failed to restore the backup. Errorcode: %1").arg(windowsErrorString(::GetLastError())));
+ }
+ refreshESPList();
+ }
+}
+
+void MainWindow::on_saveModsButton_clicked()
+{
+ m_CurrentProfile->writeModlistNow(true);
+ QDateTime now = QDateTime::currentDateTime();
+ if (createBackup(m_CurrentProfile->getModlistFileName(), now)) {
+ MessageDialog::showMessage(tr("Backup of modlist created"), this);
+ }
+}
+void MainWindow::on_restoreModsButton_clicked()
+{
+ QString modlistName = m_CurrentProfile->getModlistFileName();
+ QString choice = queryRestore(modlistName);
+ if (!choice.isEmpty()) {
+ if (!shellCopy(modlistName + "." + choice, modlistName, true, this)) {
+ QMessageBox::critical(this, tr("Restore failed"),
+ tr("Failed to restore the backup. Errorcode: %1").arg(windowsErrorString(::GetLastError())));
+ }
+ refreshModList(false);
+ }
+}
+
diff --git a/src/mainwindow.h b/src/mainwindow.h
index 6ce64cb2..6d4b0230 100644
--- a/src/mainwindow.h
+++ b/src/mainwindow.h
@@ -49,9 +49,11 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
#include "pluginlistsortproxy.h"
#include "tutorialcontrol.h"
#include "savegameinfowidgetgamebryo.h"
+#include "previewgenerator.h"
#include "browserdialog.h"
#include <guessedvalue.h>
#include <directoryentry.h>
+#include <boost/signals2.hpp>
namespace Ui {
class MainWindow;
@@ -61,11 +63,32 @@ class QToolButton;
class ModListSortProxy;
class ModListGroupCategoriesProxy;
+
class MainWindow : public QMainWindow, public MOBase::IOrganizer, public MOBase::IPluginDiagnose
{
Q_OBJECT
Q_INTERFACES(MOBase::IPluginDiagnose)
+private:
+
+ struct SignalCombinerAnd
+ {
+ typedef bool result_type;
+ template<typename InputIterator>
+ bool operator()(InputIterator first, InputIterator last) const
+ {
+ while (first != last) {
+ if (!(*first)) {
+ return false;
+ }
+ ++first;
+ }
+ return true;
+ }
+ };
+
+ typedef boost::signals2::signal<bool (const QString&), SignalCombinerAnd> SignalAboutToRunApplication;
+
public:
explicit MainWindow(const QString &exeName, QSettings &initSettings, QWidget *parent = 0);
~MainWindow();
@@ -78,7 +101,6 @@ public:
void refreshBSAList();
void refreshDataTree();
void refreshSaveList();
- void refreshModList();
void setExecutablesList(const ExecutablesList &executablesList);
@@ -91,8 +113,8 @@ public:
void createFirstProfile();
- void spawnProgram(const QString &fileName, const QString &argumentsArg,
- const QString &profileName, const QDir &currentDirectory);
+/* void spawnProgram(const QString &fileName, const QString &argumentsArg,
+ const QString &profileName, const QDir &currentDirectory);*/
void loadPlugins();
@@ -107,10 +129,22 @@ public:
virtual bool removeMod(MOBase::IModInterface *mod);
virtual void modDataChanged(MOBase::IModInterface *mod);
virtual QVariant pluginSetting(const QString &pluginName, const QString &key) const;
+ virtual void setPluginSetting(const QString &pluginName, const QString &key, const QVariant &value);
+ virtual QVariant persistent(const QString &pluginName, const QString &key, const QVariant &def = QVariant()) const;
+ virtual void setPersistent(const QString &pluginName, const QString &key, const QVariant &value, bool sync = true);
virtual QString pluginDataPath() const;
virtual void installMod(const QString &fileName);
virtual QString resolvePath(const QString &fileName) const;
+ virtual QStringList listDirectories(const QString &directoryName) const;
+ virtual QStringList findFiles(const QString &path, const std::function<bool(const QString &)> &filter) const;
+ virtual QList<FileInfo> findFileInfos(const QString &path, const std::function<bool(const FileInfo&)> &filter) const;
+
virtual MOBase::IDownloadManager *downloadManager();
+ virtual MOBase::IPluginList *pluginList();
+ virtual MOBase::IModList *modList();
+ virtual HANDLE startApplication(const QString &executable, const QStringList &args = QStringList(), const QString &cwd = "", const QString &profile = "");
+ virtual bool onAboutToRun(const std::function<bool(const QString&)> &func);
+ virtual void refreshModList(bool saveChanges = true);
virtual std::vector<unsigned int> activeProblems() const;
virtual QString shortDescription(unsigned int key) const;
@@ -122,6 +156,8 @@ public:
void saveArchiveList();
+ void createStdoutPipe(HANDLE *stdOutRead, HANDLE *stdOutWrite);
+ std::string readFromPipe(HANDLE stdOutRead);
public slots:
void displayColumnSelection(const QPoint &pos);
@@ -153,7 +189,6 @@ signals:
void styleChanged(const QString &styleFile);
-
void modListDataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight);
protected:
@@ -169,7 +204,7 @@ private:
bool verifyPlugin(MOBase::IPlugin *plugin);
void registerPluginTool(MOBase::IPluginTool *tool);
void registerModPage(MOBase::IPluginModPage *modPage);
- bool registerPlugin(QObject *pluginObj);
+ bool registerPlugin(QObject *pluginObj, const QString &fileName);
void updateToolBar();
void activateSelectedProfile();
@@ -178,8 +213,6 @@ private:
bool nexusLogin();
- void saveCurrentESPList();
-
bool testForSteam();
void startSteam();
@@ -202,9 +235,24 @@ private:
void refreshFilters();
- void saveCategoriesFromMenu(QMenu *menu, int modRow);
+ /**
+ * Sets category selections from menu; for multiple mods, this will only apply
+ * the changes made in the menu (which is the delta between the current menu selection and the reference mod)
+ * @param menu the menu after editing by the user
+ * @param modRow index of the mod to edit
+ * @param referenceRow row of the reference mod
+ */
+ void addRemoveCategoriesFromMenu(QMenu *menu, int modRow, int referenceRow);
- bool addCategories(QMenu *menu, int targetID);
+ /**
+ * Sets category selections from menu; for multiple mods, this will completely
+ * replace the current set of categories on each selected with those selected in the menu
+ * @param menu the menu after editing by the user
+ * @param modRow index of the mod to edit
+ */
+ void replaceCategoriesFromMenu(QMenu *menu, int modRow);
+
+ bool populateMenuCategories(QMenu *menu, int targetID);
void updateDownloadListDelegate();
@@ -244,12 +292,20 @@ private:
static void setupNetworkProxy(bool activate);
void activateProxy(bool activate);
-
+ void installTranslator(const QString &name);
void setBrowserGeometry(const QByteArray &geometry);
+ bool createBackup(const QString &filePath, const QDateTime &time);
+ QString queryRestore(const QString &filePath);
+
private:
static const unsigned int PROBLEM_PLUGINSNOTLOADED = 1;
+ static const unsigned int PROBLEM_TOOMANYPLUGINS = 2;
+
+ static const char *PATTERN_BACKUP_GLOB;
+ static const char *PATTERN_BACKUP_REGEX;
+ static const char *PATTERN_BACKUP_DATE;
private:
@@ -281,6 +337,7 @@ private:
QString m_GamePath;
int m_ContextRow;
+ QPersistentModelIndex m_ContextIdx;
QTreeWidgetItem *m_ContextItem;
QAction *m_ContextAction;
@@ -291,9 +348,6 @@ private:
DownloadManager m_DownloadManager;
InstallationManager m_InstallationManager;
- QTranslator *m_Translator;
- QTranslator *m_TranslatorQt;
-
SelfUpdater m_Updater;
CategoryFactory &m_CategoryFactory;
@@ -312,6 +366,7 @@ private:
bool m_DirectoryUpdate;
bool m_ArchivesInit;
QTimer m_CheckBSATimer;
+ QTimer m_SaveMetaTimer;
QTime m_StartTime;
SaveGameInfoWidget *m_CurrentSaveView;
@@ -322,8 +377,19 @@ private:
std::vector<MOBase::IPluginModPage*> m_ModPages;
std::vector<QString> m_UnloadedPlugins;
+ QFile m_PluginsCheck;
+
+ SignalAboutToRunApplication m_AboutToRun;
+
+ QString m_CurrentLanguage;
+ std::vector<QTranslator*> m_Translators;
+
BrowserDialog m_IntegratedBrowser;
+ QFileSystemWatcher m_SavesWatcher;
+
+ std::vector<QTreeWidgetItem*> m_RemoveWidget;
+
private slots:
void showMessage(const QString &message);
@@ -350,11 +416,13 @@ private slots:
void openExplorer_clicked();
void information_clicked();
// savegame context menu
+ void deleteSavegame_clicked();
void fixMods_clicked();
// data-tree context menu
void writeDataToFile();
void openDataFile();
void addAsExecutable();
+ void previewDataFile();
void hideFile();
void unhideFile();
@@ -403,7 +471,9 @@ private slots:
void originModified(int originID);
- void saveCategories();
+ void addRemoveCategories_MenuHandler();
+ void replaceCategories_MenuHandler();
+
void savePrimaryCategory();
void addPrimaryCategoryCandidates();
@@ -413,7 +483,7 @@ private slots:
void nxmUpdatesAvailable(const std::vector<int> &modIDs, QVariant userData, QVariant resultData, int requestID);
// void nxmEndorsementToggled(int, QVariant, QVariant resultData, int);
void nxmDownloadURLs(int modID, int fileID, QVariant userData, QVariant resultData, int requestID);
- void nxmRequestFailed(int modID, QVariant userData, int requestID, const QString &errorString);
+ void nxmRequestFailed(int modID, int fileID, QVariant userData, int requestID, const QString &errorString);
void editCategories();
@@ -428,6 +498,7 @@ private slots:
void hookUpWindowTutorials();
+ void resumeDownload(int downloadIndex);
void endorseMod(ModInfo::Ptr mod);
void cancelModListEditor();
@@ -441,9 +512,12 @@ private slots:
void startExeAction();
void checkBSAList();
+ void saveModMetas();
+
void updateStyle(const QString &style);
void modlistChanged(const QModelIndex &index, int role);
+ void fileMoved(const QString &filePath, const QString &oldOriginName, const QString &newOriginName);
void savePluginList();
@@ -467,6 +541,16 @@ private slots:
void toolBar_customContextMenuRequested(const QPoint &point);
void removeFromToolbar();
+ void overwriteClosed(int);
+
+ void changeVersioningScheme();
+ void ignoreUpdate();
+ void unignoreUpdate();
+
+ void refreshSavesIfOpen();
+ void expandDataTreeItem(QTreeWidgetItem *item);
+ void about();
+ void delayedRemove();
void requestDownload(const QUrl &url, QNetworkReply *reply);
@@ -482,7 +566,7 @@ private slots: // ui slots
void on_actionEndorseMO_triggered();
void on_bsaList_customContextMenuRequested(const QPoint &pos);
- void on_bsaList_itemChanged(QTreeWidgetItem *item, int column);
+ void bsaList_itemMoved();
void on_btnRefreshData_clicked();
void on_categoriesList_customContextMenuRequested(const QPoint &pos);
void on_compactBox_toggled(bool checked);
@@ -502,6 +586,14 @@ private slots: // ui slots
void on_groupCombo_currentIndexChanged(int index);
void on_categoriesList_itemSelectionChanged();
void on_linkButton_pressed();
+ void on_showHiddenBox_toggled(bool checked);
+ void on_bsaList_itemChanged(QTreeWidgetItem *item, int column);
+ void on_bossButton_clicked();
+
+ void on_saveButton_clicked();
+ void on_restoreButton_clicked();
+ void on_restoreModsButton_clicked();
+ void on_saveModsButton_clicked();
};
#endif // MAINWINDOW_H
diff --git a/src/mainwindow.ui b/src/mainwindow.ui
index 54611235..dc91121c 100644
--- a/src/mainwindow.ui
+++ b/src/mainwindow.ui
@@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
- <width>868</width>
- <height>701</height>
+ <width>926</width>
+ <height>710</height>
</rect>
</property>
<property name="windowTitle">
@@ -31,7 +31,16 @@
<property name="spacing">
<number>4</number>
</property>
- <property name="margin">
+ <property name="leftMargin">
+ <number>6</number>
+ </property>
+ <property name="topMargin">
+ <number>6</number>
+ </property>
+ <property name="rightMargin">
+ <number>6</number>
+ </property>
+ <property name="bottomMargin">
<number>6</number>
</property>
<item>
@@ -106,7 +115,7 @@
<number>2</number>
</property>
<item>
- <layout class="QHBoxLayout" name="horizontalLayout_6">
+ <layout class="QHBoxLayout" name="horizontalLayout_6" stretch="0,1,0,0,0,0">
<item>
<widget class="QLabel" name="label_3">
<property name="sizePolicy">
@@ -161,6 +170,47 @@ p, li { white-space: pre-wrap; }
</property>
</widget>
</item>
+ <item>
+ <spacer name="horizontalSpacer">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QPushButton" name="restoreModsButton">
+ <property name="toolTip">
+ <string>Restore Backup...</string>
+ </property>
+ <property name="text">
+ <string notr="true"/>
+ </property>
+ <property name="icon">
+ <iconset resource="resources.qrc">
+ <normaloff>:/MO/gui/restore</normaloff>:/MO/gui/restore</iconset>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="saveModsButton">
+ <property name="toolTip">
+ <string>Create Backup</string>
+ </property>
+ <property name="text">
+ <string notr="true"/>
+ </property>
+ <property name="icon">
+ <iconset resource="resources.qrc">
+ <normaloff>:/MO/gui/backup</normaloff>:/MO/gui/backup</iconset>
+ </property>
+ </widget>
+ </item>
</layout>
</item>
<item>
@@ -593,7 +643,7 @@ p, li { white-space: pre-wrap; }
</size>
</property>
<attribute name="title">
- <string notr="true">Plugins</string>
+ <string>Plugins</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_4">
<property name="leftMargin">
@@ -609,6 +659,68 @@ p, li { white-space: pre-wrap; }
<number>0</number>
</property>
<item>
+ <layout class="QHBoxLayout" name="horizontalLayout_7">
+ <item>
+ <widget class="QPushButton" name="bossButton">
+ <property name="text">
+ <string>Sort</string>
+ </property>
+ <property name="icon">
+ <iconset resource="resources.qrc">
+ <normaloff>:/MO/gui/sort</normaloff>:/MO/gui/sort</iconset>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer_2">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QPushButton" name="restoreButton">
+ <property name="toolTip">
+ <string>Restore Backup...</string>
+ </property>
+ <property name="text">
+ <string notr="true"/>
+ </property>
+ <property name="icon">
+ <iconset resource="resources.qrc">
+ <normaloff>:/MO/gui/restore</normaloff>:/MO/gui/restore</iconset>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>16</width>
+ <height>16</height>
+ </size>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="saveButton">
+ <property name="toolTip">
+ <string>Create Backup</string>
+ </property>
+ <property name="text">
+ <string notr="true"/>
+ </property>
+ <property name="icon">
+ <iconset resource="resources.qrc">
+ <normaloff>:/MO/gui/backup</normaloff>:/MO/gui/backup</iconset>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
<widget class="QTreeView" name="espList">
<property name="minimumSize">
<size>
@@ -705,27 +817,40 @@ p, li { white-space: pre-wrap; }
</widget>
</item>
<item>
- <widget class="MOBase::LineEditClear" name="espFilterEdit">
- <property name="text">
- <string/>
- </property>
- <property name="placeholderText">
- <string>Namefilter</string>
- </property>
- </widget>
+ <layout class="QHBoxLayout" name="horizontalLayout_3">
+ <item>
+ <widget class="MOBase::LineEditClear" name="espFilterEdit">
+ <property name="text">
+ <string/>
+ </property>
+ <property name="placeholderText">
+ <string>Namefilter</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
</item>
</layout>
</widget>
<widget class="QWidget" name="bsaTab">
<attribute name="title">
- <string notr="true">Archives</string>
+ <string>Archives</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_9">
- <property name="margin">
+ <property name="leftMargin">
+ <number>6</number>
+ </property>
+ <property name="topMargin">
+ <number>6</number>
+ </property>
+ <property name="rightMargin">
+ <number>6</number>
+ </property>
+ <property name="bottomMargin">
<number>6</number>
</property>
<item>
- <widget class="QTreeWidget" name="bsaList">
+ <widget class="MOBase::SortableTreeWidget" name="bsaList">
<property name="contextMenuPolicy">
<enum>Qt::CustomContextMenu</enum>
</property>
@@ -742,7 +867,7 @@ BSAs checked here are loaded in such a way that your installation order is obeye
<set>QAbstractItemView::NoEditTriggers</set>
</property>
<property name="showDropIndicator" stdset="0">
- <bool>false</bool>
+ <bool>true</bool>
</property>
<property name="dragEnabled">
<bool>false</bool>
@@ -751,10 +876,10 @@ BSAs checked here are loaded in such a way that your installation order is obeye
<bool>false</bool>
</property>
<property name="dragDropMode">
- <enum>QAbstractItemView::NoDragDrop</enum>
+ <enum>QAbstractItemView::DragDrop</enum>
</property>
<property name="defaultDropAction">
- <enum>Qt::IgnoreAction</enum>
+ <enum>Qt::MoveAction</enum>
</property>
<property name="selectionMode">
<enum>QAbstractItemView::SingleSelection</enum>
@@ -768,6 +893,12 @@ BSAs checked here are loaded in such a way that your installation order is obeye
<property name="itemsExpandable">
<bool>true</bool>
</property>
+ <property name="columnCount">
+ <number>1</number>
+ </property>
+ <attribute name="headerVisible">
+ <bool>false</bool>
+ </attribute>
<attribute name="headerDefaultSectionSize">
<number>200</number>
</attribute>
@@ -776,17 +907,12 @@ BSAs checked here are loaded in such a way that your installation order is obeye
<string>File</string>
</property>
</column>
- <column>
- <property name="text">
- <string>Mod</string>
- </property>
- </column>
</widget>
</item>
<item>
<widget class="QLabel" name="bsaWarning">
<property name="text">
- <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Marked Archives (&lt;img src=&quot;:/MO/gui/resources/dialog-warning_16.png&quot;/&gt;) are still loaded on Skyrim but the &lt;a href=&quot;http://forums.bethsoft.com/topic/1354395-update-bsas-and-you/&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;regular file override&lt;/span&gt;&lt;/a&gt; mechanism will apply: Loose files override BSAs, no matter the mod/plugin priority.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Marked Archives (&lt;img src=&quot;:/MO/gui/warning_16&quot;/&gt;) are still loaded on Skyrim but the &lt;a href=&quot;http://forums.bethsoft.com/topic/1354395-update-bsas-and-you/&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;regular file override&lt;/span&gt;&lt;/a&gt; mechanism will apply: Loose files override BSAs, no matter the mod/plugin priority.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="wordWrap">
<bool>true</bool>
@@ -800,7 +926,16 @@ BSAs checked here are loaded in such a way that your installation order is obeye
<string>Data</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_5">
- <property name="margin">
+ <property name="leftMargin">
+ <number>6</number>
+ </property>
+ <property name="topMargin">
+ <number>6</number>
+ </property>
+ <property name="rightMargin">
+ <number>6</number>
+ </property>
+ <property name="bottomMargin">
<number>6</number>
</property>
<item>
@@ -870,7 +1005,16 @@ BSAs checked here are loaded in such a way that your installation order is obeye
<string>Saves</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_3">
- <property name="margin">
+ <property name="leftMargin">
+ <number>6</number>
+ </property>
+ <property name="topMargin">
+ <number>6</number>
+ </property>
+ <property name="rightMargin">
+ <number>6</number>
+ </property>
+ <property name="bottomMargin">
<number>6</number>
</property>
<item>
@@ -899,7 +1043,16 @@ p, li { white-space: pre-wrap; }
<string>Downloads</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_7">
- <property name="margin">
+ <property name="leftMargin">
+ <number>2</number>
+ </property>
+ <property name="topMargin">
+ <number>2</number>
+ </property>
+ <property name="rightMargin">
+ <number>2</number>
+ </property>
+ <property name="bottomMargin">
<number>2</number>
</property>
<item>
@@ -968,7 +1121,7 @@ p, li { white-space: pre-wrap; }
</layout>
</item>
<item>
- <layout class="QHBoxLayout" name="horizontalLayout" stretch="1,2">
+ <layout class="QHBoxLayout" name="horizontalLayout" stretch="1,0,2">
<item>
<widget class="QCheckBox" name="compactBox">
<property name="text">
@@ -977,6 +1130,13 @@ p, li { white-space: pre-wrap; }
</widget>
</item>
<item>
+ <widget class="QCheckBox" name="showHiddenBox">
+ <property name="text">
+ <string>Show Hidden</string>
+ </property>
+ </widget>
+ </item>
+ <item>
<widget class="MOBase::LineEditClear" name="downloadFilterEdit">
<property name="placeholderText">
<string>Namefilter</string>
@@ -1217,6 +1377,11 @@ Right now this has very limited functionality</string>
<extends>QTreeView</extends>
<header>modlistview.h</header>
</customwidget>
+ <customwidget>
+ <class>MOBase::SortableTreeWidget</class>
+ <extends>QTreeWidget</extends>
+ <header>sortabletreewidget.h</header>
+ </customwidget>
</customwidgets>
<resources>
<include location="resources.qrc"/>
diff --git a/src/messagedialog.cpp b/src/messagedialog.cpp
index 4a1ef0d6..62696938 100644
--- a/src/messagedialog.cpp
+++ b/src/messagedialog.cpp
@@ -79,11 +79,13 @@ void MessageDialog::resizeEvent(QResizeEvent *event)
}
-void MessageDialog::showMessage(const QString &text, QWidget *reference)
+void MessageDialog::showMessage(const QString &text, QWidget *reference, bool bringToFront)
{
if (reference != NULL) {
- MessageDialog *dialog = new MessageDialog(text, reference);
- dialog->show();
- reference->activateWindow();
+ if (bringToFront || (qApp->activeWindow() != NULL)) {
+ MessageDialog *dialog = new MessageDialog(text, reference);
+ dialog->show();
+ reference->activateWindow();
+ }
}
}
diff --git a/src/messagedialog.h b/src/messagedialog.h
index 846448d6..0dbc0e6e 100644
--- a/src/messagedialog.h
+++ b/src/messagedialog.h
@@ -17,50 +17,51 @@ You should have received a copy of the GNU General Public License
along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef MESSAGEDIALOG_H
-#define MESSAGEDIALOG_H
-
-#include <QDialog>
-
-namespace Ui {
- class MessageDialog;
-}
-
-/**
- * borderless dialog used to display short messages that will automatically
- * vanish after a moment
- **/
-class MessageDialog : public QDialog
-{
- Q_OBJECT
-
-public:
- /**
- * @brief constructor
- *
- * @param text the message to display
- * @param reference parent widget. This will also be used to position the message at the bottom center of the dialog
- **/
-
- explicit MessageDialog(const QString &text, QWidget *reference);
-
- ~MessageDialog();
-
- /**
- * factory function for message dialogs. This can be used as a fire-and-forget. The message
- * will automatically positioned to the reference dialog and get a reasonable view time
- *
- * @param text the text to display. The length of this text is used to determine how long the dialog is to be shown
- * @param reference the reference widget on top of which the message should be displayed
- **/
- static void showMessage(const QString &text, QWidget *reference);
-
-protected:
-
- virtual void resizeEvent(QResizeEvent *event);
-
-private:
- Ui::MessageDialog *ui;
-};
-
-#endif // MESSAGEDIALOG_H
+#ifndef MESSAGEDIALOG_H
+#define MESSAGEDIALOG_H
+
+#include <QDialog>
+
+namespace Ui {
+ class MessageDialog;
+}
+
+/**
+ * borderless dialog used to display short messages that will automatically
+ * vanish after a moment
+ **/
+class MessageDialog : public QDialog
+{
+ Q_OBJECT
+
+public:
+ /**
+ * @brief constructor
+ *
+ * @param text the message to display
+ * @param reference parent widget. This will also be used to position the message at the bottom center of the dialog
+ **/
+
+ explicit MessageDialog(const QString &text, QWidget *reference);
+
+ ~MessageDialog();
+
+ /**
+ * factory function for message dialogs. This can be used as a fire-and-forget. The message
+ * will automatically positioned to the reference dialog and get a reasonable view time
+ *
+ * @param text the text to display. The length of this text is used to determine how long the dialog is to be shown
+ * @param reference the reference widget on top of which the message should be displayed
+ * @param true if the message should bring MO to front to ensure this message is visible
+ **/
+ static void showMessage(const QString &text, QWidget *reference, bool bringToFront = true);
+
+protected:
+
+ virtual void resizeEvent(QResizeEvent *event);
+
+private:
+ Ui::MessageDialog *ui;
+};
+
+#endif // MESSAGEDIALOG_H
diff --git a/src/mo_icon.ico b/src/mo_icon.ico
index b1105bb2..59da6c2d 100644
--- a/src/mo_icon.ico
+++ b/src/mo_icon.ico
Binary files differ
diff --git a/src/moapplication.cpp b/src/moapplication.cpp
index efb0b615..12ff713b 100644
--- a/src/moapplication.cpp
+++ b/src/moapplication.cpp
@@ -19,20 +19,70 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
#include "moapplication.h"
#include "report.h"
-#include "utility.h"
+#include <utility.h>
#include <appconfig.h>
#include <QFile>
#include <QStringList>
+#if QT_VERSION < QT_VERSION_CHECK(5,0,0)
+#include <QPlastiqueStyle>
+#include <QCleanlooksStyle>
+#endif
+#include <QProxyStyle>
+#include <QStyleFactory>
+#include <QPainter>
+#include <QStyleOption>
+
+
+#include <QDebug>
+
+
+class ProxyStyle : public QProxyStyle {
+public:
+ ProxyStyle(QStyle *baseStyle = 0)
+ : QProxyStyle(baseStyle)
+ {
+ }
+
+ void drawPrimitive(PrimitiveElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget) const {
+ if(element == QStyle::PE_IndicatorItemViewItemDrop) {
+ painter->setRenderHint(QPainter::Antialiasing, true);
+
+ QColor col(option->palette.foreground().color());
+ QPen pen(col);
+ pen.setWidth(2);
+ col.setAlpha(50);
+ QBrush brush(col);
+
+ painter->setPen(pen);
+ painter->setBrush(brush);
+ if(option->rect.height() == 0) {
+ QPoint tri[3] = {
+ option->rect.topLeft(),
+ option->rect.topLeft() + QPoint(-5, 5),
+ option->rect.topLeft() + QPoint(-5, -5)
+ };
+ painter->drawPolygon(tri, 3);
+ painter->drawLine(QPoint(option->rect.topLeft().x(), option->rect.topLeft().y()), option->rect.topRight());
+ } else {
+ painter->drawRoundedRect(option->rect, 5, 5);
+ }
+ } else {
+ QProxyStyle::drawPrimitive(element, option, painter, widget);
+ }
+ }
+};
MOApplication::MOApplication(int argc, char **argv)
: QApplication(argc, argv)
{
connect(&m_StyleWatcher, SIGNAL(fileChanged(QString)), SLOT(updateStyle(QString)));
+ m_DefaultStyle = style()->objectName();
+ setStyle(new ProxyStyle(style()));
}
-void MOApplication::setStyleFile(const QString &styleName)
+bool MOApplication::setStyleFile(const QString &styleName)
{
// remove all files from watch
QStringList currentWatch = m_StyleWatcher.files();
@@ -42,11 +92,16 @@ void MOApplication::setStyleFile(const QString &styleName)
// set new stylesheet or clear it
if (styleName.length() != 0) {
QString styleSheetName = applicationDirPath() + "/" + MOBase::ToQString(AppConfig::stylesheetsPath()) + "/" + styleName;
- m_StyleWatcher.addPath(styleSheetName);
- updateStyle(styleSheetName);
+ if (QFile::exists(styleSheetName)) {
+ m_StyleWatcher.addPath(styleSheetName);
+ updateStyle(styleSheetName);
+ } else {
+ updateStyle(styleName);
+ }
} else {
setStyleSheet("");
}
+ return true;
}
@@ -70,11 +125,24 @@ bool MOApplication::notify(QObject *receiver, QEvent *event)
void MOApplication::updateStyle(const QString &fileName)
{
- QFile file(fileName);
- if (file.open(QFile::ReadOnly)) {
- setStyleSheet(file.readAll());
+#if QT_VERSION >= QT_VERSION_CHECK(5,0,0)
+ if (fileName == "Fusion") {
+ setStyle(QStyleFactory::create("fusion"));
+ setStyleSheet("");
+#else
+ if (fileName == "Plastique") {
+ setStyle(new ProxyStyle(new QPlastiqueStyle));
+ setStyleSheet("");
+ } else if (fileName == "Cleanlooks") {
+ setStyle(new ProxyStyle(new QCleanlooksStyle));
+ setStyleSheet("");
+#endif
} else {
- qDebug("no stylesheet");
+ setStyle(new ProxyStyle(QStyleFactory::create(m_DefaultStyle)));
+ if (QFile::exists(fileName)) {
+ setStyleSheet(QString("file:///%1").arg(fileName));
+ } else {
+ qWarning("invalid stylesheet: %s", qPrintable(fileName));
+ }
}
- file.close();
}
diff --git a/src/moapplication.h b/src/moapplication.h
index 3d74031d..645b9144 100644
--- a/src/moapplication.h
+++ b/src/moapplication.h
@@ -17,33 +17,35 @@ You should have received a copy of the GNU General Public License
along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef MOAPPLICATION_H
-#define MOAPPLICATION_H
-
-#include <QApplication>
-#include <QFileSystemWatcher>
-
-
-class MOApplication : public QApplication {
-Q_OBJECT
-public:
-
- MOApplication(int argc, char **argv);
-
- virtual bool notify (QObject *receiver, QEvent *event);
-
-public slots:
-
- void setStyleFile(const QString &style);
-
-private slots:
-
- void updateStyle(const QString &fileName);
-
-private:
-
- QFileSystemWatcher m_StyleWatcher;
-};
-
-
-#endif // MOAPPLICATION_H
+#ifndef MOAPPLICATION_H
+#define MOAPPLICATION_H
+
+#include <QApplication>
+#include <QFileSystemWatcher>
+
+
+class MOApplication : public QApplication {
+Q_OBJECT
+public:
+
+ MOApplication(int argc, char **argv);
+
+ virtual bool notify (QObject *receiver, QEvent *event);
+
+public slots:
+
+ bool setStyleFile(const QString &style);
+
+private slots:
+
+ void updateStyle(const QString &fileName);
+
+private:
+
+ QFileSystemWatcher m_StyleWatcher;
+ QString m_DefaultStyle;
+
+};
+
+
+#endif // MOAPPLICATION_H
diff --git a/src/modflagicondelegate.cpp b/src/modflagicondelegate.cpp
new file mode 100644
index 00000000..914503a1
--- /dev/null
+++ b/src/modflagicondelegate.cpp
@@ -0,0 +1,70 @@
+#include "modflagicondelegate.h"
+#include <QList>
+
+
+ModInfo::EFlag ModFlagIconDelegate::m_ConflictFlags[4] = { ModInfo::FLAG_CONFLICT_MIXED
+ , ModInfo::FLAG_CONFLICT_OVERWRITE
+ , ModInfo::FLAG_CONFLICT_OVERWRITTEN
+ , ModInfo::FLAG_CONFLICT_REDUNDANT };
+
+ModFlagIconDelegate::ModFlagIconDelegate(QObject *parent)
+ : IconDelegate(parent)
+{
+}
+
+QList<QIcon> ModFlagIconDelegate::getIcons(const QModelIndex &index) const
+{
+ QList<QIcon> result;
+ QVariant modid = index.data(Qt::UserRole + 1);
+ if (modid.isValid()) {
+ ModInfo::Ptr info = ModInfo::getByIndex(modid.toInt());
+ std::vector<ModInfo::EFlag> flags = info->getFlags();
+
+ { // insert conflict icon first to provide nicer alignment
+ auto iter = std::find_first_of(flags.begin(), flags.end(), m_ConflictFlags, m_ConflictFlags + 4);
+ if (iter != flags.end()) {
+ result.append(getFlagIcon(*iter));
+ flags.erase(iter);
+ } else {
+ result.append(QIcon());
+ }
+ }
+
+ for (auto iter = flags.begin(); iter != flags.end(); ++iter) {
+ result.append(getFlagIcon(*iter));
+ }
+ }
+ return result;
+}
+
+QIcon ModFlagIconDelegate::getFlagIcon(ModInfo::EFlag flag) const
+{
+ switch (flag) {
+ case ModInfo::FLAG_BACKUP: return QIcon(":/MO/gui/emblem_backup");
+ case ModInfo::FLAG_INVALID: return QIcon(":/MO/gui/emblem_problem");
+ case ModInfo::FLAG_NOTENDORSED: return QIcon(":/MO/gui/emblem_notendorsed");
+ case ModInfo::FLAG_NOTES: return QIcon(":/MO/gui/emblem_notes");
+ case ModInfo::FLAG_CONFLICT_OVERWRITE: return QIcon(":/MO/gui/emblem_conflict_overwrite");
+ case ModInfo::FLAG_CONFLICT_OVERWRITTEN: return QIcon(":/MO/gui/emblem_conflict_overwritten");
+ case ModInfo::FLAG_CONFLICT_MIXED: return QIcon(":/MO/gui/emblem_conflict_mixed");
+ case ModInfo::FLAG_CONFLICT_REDUNDANT: return QIcon(":MO/gui/emblem_conflict_redundant");
+ default: return QIcon();
+ }
+}
+
+size_t ModFlagIconDelegate::getNumIcons(const QModelIndex &index) const
+{
+ unsigned int modIdx = index.data(Qt::UserRole + 1).toInt();
+ if (modIdx < ModInfo::getNumMods()) {
+ ModInfo::Ptr info = ModInfo::getByIndex(modIdx);
+ std::vector<ModInfo::EFlag> flags = info->getFlags();
+ int count = flags.size();
+ if (std::find_first_of(flags.begin(), flags.end(), m_ConflictFlags, m_ConflictFlags + 4) == flags.end()) {
+ ++count;
+ }
+ return count;
+ } else {
+ return 0;
+ }
+}
+
diff --git a/src/modflagicondelegate.h b/src/modflagicondelegate.h
new file mode 100644
index 00000000..b64ca08f
--- /dev/null
+++ b/src/modflagicondelegate.h
@@ -0,0 +1,19 @@
+#ifndef MODFLAGICONDELEGATE_H
+#define MODFLAGICONDELEGATE_H
+
+#include "icondelegate.h"
+
+class ModFlagIconDelegate : public IconDelegate
+{
+public:
+ explicit ModFlagIconDelegate(QObject *parent = 0);
+private:
+ virtual QList<QIcon> getIcons(const QModelIndex &index) const;
+ virtual size_t getNumIcons(const QModelIndex &index) const;
+
+ QIcon getFlagIcon(ModInfo::EFlag flag) const;
+private:
+ static ModInfo::EFlag m_ConflictFlags[4];
+};
+
+#endif // MODFLAGICONDELEGATE_H
diff --git a/src/modinfo.cpp b/src/modinfo.cpp
index 8372af55..bd244852 100644
--- a/src/modinfo.cpp
+++ b/src/modinfo.cpp
@@ -300,13 +300,43 @@ ModInfoRegular::ModInfoRegular(const QDir &path, DirectoryEntry **directoryStruc
testValid();
m_CreationTime = QFileInfo(path.absolutePath()).created();
// read out the meta-file for information
- QString metaFileName = path.absoluteFilePath("meta.ini");
- QSettings metaFile(metaFileName, QSettings::IniFormat);
+ readMeta();
- m_Notes = metaFile.value("notes", "").toString();
- m_NexusID = metaFile.value("modid", -1).toInt();
+ connect(&m_NexusBridge, SIGNAL(descriptionAvailable(int,QVariant,QVariant)), this, SLOT(nxmDescriptionAvailable(int,QVariant,QVariant)));
+ connect(&m_NexusBridge, SIGNAL(endorsementToggled(int,QVariant,QVariant)), this, SLOT(nxmEndorsementToggled(int,QVariant,QVariant)));
+ connect(&m_NexusBridge, SIGNAL(requestFailed(int,int,QVariant,QString)), this, SLOT(nxmRequestFailed(int,int,QVariant,QString)));
+}
+
+
+ModInfoRegular::~ModInfoRegular()
+{
+ try {
+ saveMeta();
+ } catch (const std::exception &e) {
+ qCritical("failed to save meta information for \"%s\": %s",
+ m_Name.toUtf8().constData(), e.what());
+ }
+}
+
+bool ModInfoRegular::isEmpty() const
+{
+ QDirIterator iter(m_Path, QDir::NoDotAndDotDot | QDir::Files | QDir::Dirs);
+ if (!iter.hasNext()) return true;
+ iter.next();
+ if ((iter.fileName() == "meta.ini") && !iter.hasNext()) return true;
+ return false;
+}
+
+
+void ModInfoRegular::readMeta()
+{
+ QSettings metaFile(m_Path + "/meta.ini", QSettings::IniFormat);
+
+ m_Notes = metaFile.value("notes", "").toString();
+ m_NexusID = metaFile.value("modid", -1).toInt();
m_Version.parse(metaFile.value("version", "").toString());
- m_NewestVersion = metaFile.value("newestVersion", "").toString();
+ m_NewestVersion = metaFile.value("newestVersion", "").toString();
+ m_IgnoredVersion = metaFile.value("ignoredVersion", "").toString();
m_InstallationFile = metaFile.value("installationFile", "").toString();
m_NexusDescription = metaFile.value("nexusDescription", "").toString();
m_LastNexusQuery = QDateTime::fromString(metaFile.value("lastNexusQuery", "").toString(), Qt::ISODate);
@@ -341,70 +371,62 @@ ModInfoRegular::ModInfoRegular(const QDir &path, DirectoryEntry **directoryStruc
}
}
- connect(&m_NexusBridge, SIGNAL(descriptionAvailable(int,QVariant,QVariant)), this, SLOT(nxmDescriptionAvailable(int,QVariant,QVariant)));
- connect(&m_NexusBridge, SIGNAL(endorsementToggled(int,QVariant,QVariant)), this, SLOT(nxmEndorsementToggled(int,QVariant,QVariant)));
- connect(&m_NexusBridge, SIGNAL(requestFailed(int,QVariant,QString)), this, SLOT(nxmRequestFailed(int,QVariant,QString)));
-}
-
-
-ModInfoRegular::~ModInfoRegular()
-{
- try {
- //TODO this may cause the meta-file and the directory to be
- // re-created after a remove
- saveMeta();
- } catch (const std::exception &e) {
- qCritical("failed to save meta information for \"%s\": %s",
- m_Name.toUtf8().constData(), e.what());
- }
-}
-
-bool ModInfoRegular::isEmpty() const
-{
- QDirIterator iter(m_Path, QDir::NoDotAndDotDot | QDir::Files | QDir::Dirs);
- if (!iter.hasNext()) return true;
- iter.next();
- if ((iter.fileName() == "meta.ini") && !iter.hasNext()) return true;
- return false;
+ m_MetaInfoChanged = false;
}
-
void ModInfoRegular::saveMeta()
{
- if (m_MetaInfoChanged) {
- if (QFile::exists(absolutePath().append("/meta.ini"))) {
- QSettings metaFile(absolutePath().append("/meta.ini"), QSettings::IniFormat);
- if (metaFile.status() == QSettings::NoError) {
- std::set<int> temp = m_Categories;
- temp.erase(m_PrimaryCategory);
- metaFile.setValue("category", QString("%1").arg(m_PrimaryCategory) + "," + SetJoin(temp, ","));
- metaFile.setValue("newestVersion", m_NewestVersion.canonicalString());
- metaFile.setValue("version", m_Version.canonicalString());
+ // only write meta data if the mod directory exists
+ if (m_MetaInfoChanged && QFile::exists(absolutePath())) {
+ QSettings metaFile(absolutePath().append("/meta.ini"), QSettings::IniFormat);
+ if (metaFile.status() == QSettings::NoError) {
+ std::set<int> temp = m_Categories;
+ temp.erase(m_PrimaryCategory);
+ metaFile.setValue("category", QString("%1").arg(m_PrimaryCategory) + "," + SetJoin(temp, ","));
+ metaFile.setValue("newestVersion", m_NewestVersion.canonicalString());
+ metaFile.setValue("ignoredVersion", m_IgnoredVersion.canonicalString());
+ metaFile.setValue("version", m_Version.canonicalString());
+ if (m_NexusID != -1) {
metaFile.setValue("modid", m_NexusID);
- metaFile.setValue("notes", m_Notes);
- metaFile.setValue("nexusDescription", m_NexusDescription);
- metaFile.setValue("lastNexusQuery", m_LastNexusQuery.toString(Qt::ISODate));
- if (m_EndorsedState != ENDORSED_UNKNOWN) {
- metaFile.setValue("endorsed", m_EndorsedState);
- }
+ }
+ metaFile.setValue("notes", m_Notes);
+ metaFile.setValue("nexusDescription", m_NexusDescription);
+ metaFile.setValue("lastNexusQuery", m_LastNexusQuery.toString(Qt::ISODate));
+ if (m_EndorsedState != ENDORSED_UNKNOWN) {
+ metaFile.setValue("endorsed", m_EndorsedState);
+ }
+ metaFile.sync(); // sync needs to be called to ensure the file is created
+ if (metaFile.status() == QSettings::NoError) {
+ m_MetaInfoChanged = false;
} else {
- reportError(tr("failed to write %1/meta.ini: %2").arg(absolutePath()).arg(metaFile.status()));
+ reportError(tr("failed to write %1/meta.ini: error %2").arg(absolutePath()).arg(metaFile.status()));
}
} else {
- qWarning("mod %s has no meta.ini at %s/meta.ini", m_Name.toUtf8().constData(), absolutePath().toUtf8().constData());
+ reportError(tr("failed to write %1/meta.ini: error %2").arg(absolutePath()).arg(metaFile.status()));
}
- m_MetaInfoChanged = false;
}
}
bool ModInfoRegular::updateAvailable() const
{
+ if (m_IgnoredVersion.isValid() && (m_IgnoredVersion == m_NewestVersion)) {
+ return false;
+ }
return m_NewestVersion.isValid() && (m_Version < m_NewestVersion);
}
+bool ModInfoRegular::downgradeAvailable() const
+{
+ if (m_IgnoredVersion.isValid() && (m_IgnoredVersion == m_NewestVersion)) {
+ return false;
+ }
+ return m_NewestVersion.isValid() && (m_NewestVersion < m_Version);
+}
+
+
void ModInfoRegular::nxmDescriptionAvailable(int, QVariant, QVariant resultData)
{
QVariantMap result = resultData.toMap();
@@ -429,7 +451,7 @@ void ModInfoRegular::nxmEndorsementToggled(int, QVariant, QVariant resultData)
}
-void ModInfoRegular::nxmRequestFailed(int, QVariant userData, const QString &errorMessage)
+void ModInfoRegular::nxmRequestFailed(int, int, QVariant userData, const QString &errorMessage)
{
QString fullMessage = errorMessage;
if (userData.canConvert<int>() && (userData.toInt() == 1)) {
@@ -531,6 +553,13 @@ bool ModInfoRegular::setName(const QString &name)
void ModInfoRegular::setNotes(const QString &notes)
{
m_Notes = notes;
+ m_MetaInfoChanged = true;
+}
+
+void ModInfoRegular::setNexusID(int modID)
+{
+ m_NexusID = modID;
+ m_MetaInfoChanged = true;
}
void ModInfoRegular::setVersion(const VersionInfo &version)
@@ -539,12 +568,20 @@ void ModInfoRegular::setVersion(const VersionInfo &version)
m_MetaInfoChanged = true;
}
+void ModInfoRegular::setNewestVersion(const VersionInfo &version) {
+ m_NewestVersion = version;
+}
+
void ModInfoRegular::setNexusDescription(const QString &description)
{
m_NexusDescription = description;
m_MetaInfoChanged = true;
}
+void ModInfoRegular::addNexusCategory(int categoryID)
+{
+ m_Categories.insert(CategoryFactory::instance().resolveNexusID(categoryID));
+}
void ModInfoRegular::setIsEndorsed(bool endorsed)
{
@@ -575,22 +612,31 @@ void ModInfoRegular::endorse(bool doEndorse)
}
}
+void ModInfoRegular::clearCaches()
+{
+ m_LastConflictCheck = QTime();
+}
+
QString ModInfoRegular::absolutePath() const
{
return m_Path;
}
+void ModInfoRegular::ignoreUpdate(bool ignore)
+{
+ if (ignore) {
+ m_IgnoredVersion = m_NewestVersion;
+ } else {
+ m_IgnoredVersion.clear();
+ }
+ m_MetaInfoChanged = true;
+}
+
std::vector<ModInfo::EFlag> ModInfoRegular::getFlags() const
{
std::vector<ModInfo::EFlag> result;
- if (!isValid()) {
- result.push_back(ModInfo::FLAG_INVALID);
- }
- if ((m_NexusID != -1) && (endorsedState() == ENDORSED_FALSE)) {
- result.push_back(ModInfo::FLAG_NOTENDORSED);
- }
switch (isConflicted()) {
case CONFLICT_MIXED: {
result.push_back(ModInfo::FLAG_CONFLICT_MIXED);
@@ -606,6 +652,12 @@ std::vector<ModInfo::EFlag> ModInfoRegular::getFlags() const
} break;
default: { /* NOP */ }
}
+ if ((m_NexusID != -1) && (endorsedState() == ENDORSED_FALSE)) {
+ result.push_back(ModInfo::FLAG_NOTENDORSED);
+ }
+ if (!isValid()) {
+ result.push_back(ModInfo::FLAG_INVALID);
+ }
if (m_Notes.length() != 0) {
result.push_back(ModInfo::FLAG_NOTES);
}
@@ -655,18 +707,16 @@ QString ModInfoRegular::getNexusDescription() const
return m_NexusDescription;
}
-
ModInfoRegular::EEndorsedState ModInfoRegular::endorsedState() const
{
return m_EndorsedState;
}
-
ModInfoRegular::EConflictType ModInfoRegular::isConflicted() const
{
// this is costy so cache the result
QTime now = QTime::currentTime();
- if (abs(m_LastConflictCheck.secsTo(now)) > 10) {
+ if (m_LastConflictCheck.isNull() || (m_LastConflictCheck.secsTo(now) > 10)) {
bool overwrite = false;
bool overwritten = false;
bool regular = false;
@@ -792,12 +842,21 @@ ModInfoBackup::ModInfoBackup(const QDir &path, DirectoryEntry **directoryStructu
ModInfoOverwrite::ModInfoOverwrite()
+ : m_StartupTime(QDateTime::currentDateTime())
{
testValid();
-
}
+bool ModInfoOverwrite::isEmpty() const
+{
+ QDirIterator iter(absolutePath(), QDir::NoDotAndDotDot | QDir::Files | QDir::Dirs);
+ if (!iter.hasNext()) return true;
+ iter.next();
+ if ((iter.fileName() == "meta.ini") && !iter.hasNext()) return true;
+ return false;
+}
+
QString ModInfoOverwrite::absolutePath() const
{
return QDir::fromNativeSeparators(ToQString(GameInfo::instance().getOverwriteDir()));
diff --git a/src/modinfo.h b/src/modinfo.h
index df948a76..8b37b915 100644
--- a/src/modinfo.h
+++ b/src/modinfo.h
@@ -80,23 +80,6 @@ public:
ENDORSED_UNKNOWN,
ENDORSED_NEVER
};
-/*
- struct NexusFileInfo {
- NexusFileInfo(const QString &data);
- NexusFileInfo(int id, const QString &name, const QString &url, const QString &version,
- const QString &description, int category, int size)
- : id(id), name(name), url(url), version(version), description(description),
- category(category), size(size) {}
- int id;
- QString name;
- QString url;
- QString version;
- QString description;
- int category;
- int size;
-
- QString toString() const;
- };*/
public:
@@ -193,6 +176,22 @@ public:
virtual bool updateAvailable() const = 0;
/**
+ * @return true if the update currently available is ignored
+ */
+ virtual bool updateIgnored() const = 0;
+
+ /**
+ * @brief test if the "newest" version of the mod is older than the installed version
+ *
+ * test if there is a newer version of the mod. This does NOT cause
+ * information to be retrieved from the nexus, it will only test version information already
+ * available locally. Use checkAllForUpdate() to update this version information
+ *
+ * @return true if the newest version is older than the installed one
+ **/
+ virtual bool downgradeAvailable() const = 0;
+
+ /**
* @brief request an update of nexus description for this mod.
*
* This requests mod information from the nexus. This is an asynchronous request,
@@ -252,6 +251,13 @@ public:
virtual void setNexusDescription(const QString &description) = 0;
/**
+ * @brief sets the category id from a nexus category id. Conversion to MO id happens internally
+ * @param categoryID the nexus category id
+ * @note if a mapping is not possible, the category is set to the default value
+ */
+ virtual void addNexusCategory(int categoryID) = 0;
+
+ /**
* update the endorsement state for the mod. This only changes the
* buffered state, it does not sync with Nexus
* @param endorsed the new endorsement state
@@ -277,6 +283,11 @@ public:
virtual void endorse(bool doEndorse) = 0;
/**
+ * @brief clear all caches held for this mod
+ */
+ virtual void clearCaches() {}
+
+ /**
* @brief getter for the mod name
*
* @return the mod name
@@ -310,6 +321,11 @@ public:
virtual MOBase::VersionInfo getNewestVersion() const = 0;
/**
+ * @brief ignore the newest version for updates
+ */
+ virtual void ignoreUpdate(bool ignore) = 0;
+
+ /**
* @brief getter for the nexus mod id
*
* @return the nexus mod id. may be 0 if the mod id isn't known or doesn't exist
@@ -416,6 +432,11 @@ public:
void testValid();
/**
+ * @brief reads meta information from disk
+ */
+ virtual void readMeta() {}
+
+ /**
* @brief stores meta information back to disk
*/
virtual void saveMeta() {}
@@ -495,6 +516,22 @@ public:
bool updateAvailable() const;
/**
+ * @return true if the current update is being ignored
+ */
+ virtual bool updateIgnored() const { return m_IgnoredVersion == m_NewestVersion; }
+
+ /**
+ * @brief test if there is a newer version of the mod
+ *
+ * test if there is a newer version of the mod. This does NOT cause
+ * information to be retrieved from the nexus, it will only test version information already
+ * available locally. Use checkAllForUpdate() to update this version information
+ *
+ * @return true if there is a newer version
+ **/
+ bool downgradeAvailable() const;
+
+ /**
* @brief request an update of nexus description for this mod.
*
* This requests mod information from the nexus. This is an asynchronous request,
@@ -538,7 +575,7 @@ public:
*
* @param modID the nexus mod id
**/
- void setNexusID(int modID) { m_NexusID = modID; }
+ void setNexusID(int modID);
/**
* @brief set the version of this mod
@@ -560,7 +597,7 @@ public:
* @todo this function should be made obsolete. All queries for mod information should go through
* this class so no public function for this change is required
**/
- void setNewestVersion(const MOBase::VersionInfo &version) { m_NewestVersion = version; }
+ void setNewestVersion(const MOBase::VersionInfo &version);
/**
* @brief changes/updates the nexus description text
@@ -569,6 +606,13 @@ public:
virtual void setNexusDescription(const QString &description);
/**
+ * @brief sets the category id from a nexus category id. Conversion to MO id happens internally
+ * @param categoryID the nexus category id
+ * @note if a mapping is not possible, the category is set to the default value
+ */
+ virtual void addNexusCategory(int categoryID);
+
+ /**
* @brief sets the new primary category of the mod
* @param categoryID the category to set
*/
@@ -600,6 +644,11 @@ public:
virtual void endorse(bool doEndorse);
/**
+ * @brief clear all caches held for this mod
+ */
+ virtual void clearCaches();
+
+ /**
* @brief getter for the mod name
*
* @return the mod name
@@ -621,6 +670,11 @@ public:
MOBase::VersionInfo getNewestVersion() const { return m_NewestVersion; }
/**
+ * @brief ignore the newest version for updates
+ */
+ void ignoreUpdate(bool ignore);
+
+ /**
* @brief getter for the installation file
*
* @return file used to install this mod from
@@ -699,6 +753,7 @@ public:
*/
virtual void saveMeta();
+ void readMeta();
private:
enum EConflictType {
@@ -713,7 +768,7 @@ private slots:
void nxmDescriptionAvailable(int modID, QVariant userData, QVariant resultData);
void nxmEndorsementToggled(int, QVariant userData, QVariant resultData);
- void nxmRequestFailed(int modID, QVariant userData, const QString &errorMessage);
+ void nxmRequestFailed(int modID, int fileID, QVariant userData, const QString &errorMessage);
private:
@@ -746,6 +801,7 @@ private:
bool m_MetaInfoChanged;
MOBase::VersionInfo m_NewestVersion;
+ MOBase::VersionInfo m_IgnoredVersion;
EEndorsedState m_EndorsedState;
@@ -767,10 +823,13 @@ class ModInfoBackup : public ModInfoRegular
public:
virtual bool updateAvailable() const { return false; }
+ virtual bool updateIgnored() const { return false; }
+ virtual bool downgradeAvailable() const { return false; }
virtual bool updateNXMInfo() { return false; }
virtual void setNexusID(int) {}
virtual void endorse(bool) {}
virtual int getFixedPriority() const { return -1; }
+ virtual void ignoreUpdate(bool) {}
virtual bool canBeUpdated() const { return false; }
virtual bool canBeEnabled() const { return false; }
virtual std::vector<QString> getIniTweaks() const { return std::vector<QString>(); }
@@ -798,20 +857,25 @@ class ModInfoOverwrite : public ModInfo
public:
virtual bool updateAvailable() const { return false; }
+ virtual bool updateIgnored() const { return false; }
+ virtual bool downgradeAvailable() const { return false; }
virtual bool updateNXMInfo() { return false; }
virtual void setCategory(int, bool) {}
virtual bool setName(const QString&) { return false; }
virtual void setNotes(const QString&) {}
virtual void setNexusID(int) {}
virtual void setNewestVersion(const MOBase::VersionInfo&) {}
+ virtual void ignoreUpdate(bool) {}
virtual void setNexusDescription(const QString&) {}
+ virtual void addNexusCategory(int) {}
virtual void setIsEndorsed(bool) {}
virtual void setNeverEndorse() {}
virtual bool remove() { return false; }
virtual void endorse(bool) {}
+ virtual bool isEmpty() const;
virtual QString name() const { return "Overwrite"; }
virtual QString notes() const { return ""; }
- virtual QDateTime creationTime() const { return QDateTime::currentDateTime(); }
+ virtual QDateTime creationTime() const { return m_StartupTime; }
virtual QString absolutePath() const;
virtual MOBase::VersionInfo getNewestVersion() const { return ""; }
virtual QString getInstallationFile() const { return ""; }
@@ -828,6 +892,10 @@ private:
ModInfoOverwrite();
+private:
+
+ QDateTime m_StartupTime;
+
};
#endif // MODINFO_H
diff --git a/src/modinfodialog.cpp b/src/modinfodialog.cpp
index 75e7e499..dae4cc18 100644
--- a/src/modinfodialog.cpp
+++ b/src/modinfodialog.cpp
@@ -22,7 +22,6 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
#include "report.h"
#include "utility.h"
-#include "json.h"
#include "messagedialog.h"
#include "bbcode.h"
#include "questionboxmemory.h"
@@ -41,8 +40,6 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
#include <QInputDialog>
-using QtJson::Json;
-
using namespace MOBase;
using namespace MOShared;
@@ -72,11 +69,9 @@ ModInfoDialog::ModInfoDialog(ModInfo::Ptr modInfo, const DirectoryEntry *directo
ui->setupUi(this);
this->setWindowTitle(modInfo->name());
this->setWindowModality(Qt::WindowModal);
-
m_UTF8Codec = QTextCodec::codecForName("utf-8");
QListWidget *textFileList = findChild<QListWidget*>("textFileList");
- QListWidget *iniFileList = findChild<QListWidget*>("iniFileList");
QListWidget *iniTweaksList = findChild<QListWidget*>("iniTweaksList");
QListWidget *activeESPList = findChild<QListWidget*>("activeESPList");
QListWidget *inactiveESPList = findChild<QListWidget*>("inactiveESPList");
@@ -147,7 +142,6 @@ ModInfoDialog::ModInfoDialog(ModInfo::Ptr modInfo, const DirectoryEntry *directo
QTabWidget *tabWidget = findChild<QTabWidget*>("tabWidget");
tabWidget->setTabEnabled(TAB_TEXTFILES, textFileList->count() != 0);
- //tabWidget->setTabEnabled(TAB_INIFILES, (iniFileList->count() != 0) || (iniTweaksList->count() != 0));
tabWidget->setTabEnabled(TAB_IMAGES, thumbnailArea->count() != 0);
tabWidget->setTabEnabled(TAB_ESPS, (inactiveESPList->count() != 0) || (activeESPList->count() != 0));
tabWidget->setTabEnabled(TAB_CONFLICTS, m_Origin != NULL);
@@ -164,14 +158,69 @@ ModInfoDialog::ModInfoDialog(ModInfo::Ptr modInfo, const DirectoryEntry *directo
ModInfoDialog::~ModInfoDialog()
{
m_ModInfo->setNotes(ui->notesEdit->toPlainText());
- saveIniTweaks();
saveCategories(ui->categoriesTree->invisibleRootItem());
-
+ saveIniTweaks(); // ini tweaks are written to the ini file directly. This is the only information not managed by ModInfo
delete ui;
delete m_Settings;
}
+int ModInfoDialog::tabIndex(const QString &tabId)
+{
+ for (int i = 0; i < ui->tabWidget->count(); ++i) {
+ if (ui->tabWidget->widget(i)->objectName() == tabId) {
+ return i;
+ }
+ }
+ return -1;
+}
+
+
+void ModInfoDialog::restoreTabState(const QByteArray &state)
+{
+ QDataStream stream(state);
+ int count = 0;
+ stream >> count;
+
+ QStringList tabIds;
+
+ // first, only determine the new mapping
+ for (int newPos = 0; newPos < count; ++newPos) {
+ QString tabId;
+ stream >> tabId;
+ tabIds.append(tabId);
+ int oldPos = tabIndex(tabId);
+ if (oldPos != -1) {
+ m_RealTabPos[newPos] = oldPos;
+ } else {
+ m_RealTabPos[newPos] = newPos;
+ }
+ }
+ // then actually move the tabs
+ QTabBar *tabBar = ui->tabWidget->findChild<QTabBar*>("qt_tabwidget_tabbar"); // magic name = bad
+ ui->tabWidget->blockSignals(true);
+ for (int newPos = 0; newPos < count; ++newPos) {
+ QString tabId = tabIds.at(newPos);
+ int oldPos = tabIndex(tabId);
+ tabBar->moveTab(oldPos, newPos);
+ }
+ ui->tabWidget->blockSignals(false);
+}
+
+
+QByteArray ModInfoDialog::saveTabState() const
+{
+ QByteArray result;
+ QDataStream stream(&result, QIODevice::WriteOnly);
+ stream << ui->tabWidget->count();
+ for (int i = 0; i < ui->tabWidget->count(); ++i) {
+ stream << ui->tabWidget->widget(i)->objectName();
+ }
+
+ return result;
+}
+
+
void ModInfoDialog::refreshLists()
{
int numNonConflicting = 0;
@@ -255,17 +304,19 @@ void ModInfoDialog::refreshLists()
} else if ((fileName.endsWith(".png", Qt::CaseInsensitive)) ||
(fileName.endsWith(".jpg", Qt::CaseInsensitive))) {
QImage image = QImage(fileName);
- if (static_cast<float>(image.width()) / static_cast<float>(image.height()) > 1.34) {
- image = image.scaledToWidth(128);
- } else {
- image = image.scaledToHeight(96);
- }
+ if (!image.isNull()) {
+ if (static_cast<float>(image.width()) / static_cast<float>(image.height()) > 1.34) {
+ image = image.scaledToWidth(128);
+ } else {
+ image = image.scaledToHeight(96);
+ }
- QPushButton *thumbnailButton = new QPushButton(QPixmap::fromImage(image), "");
- thumbnailButton->setIconSize(QSize(image.width(), image.height()));
- connect(thumbnailButton, SIGNAL(clicked()), &m_ThumbnailMapper, SLOT(map()));
- m_ThumbnailMapper.setMapping(thumbnailButton, fileName);
- ui->thumbnailArea->addWidget(thumbnailButton);
+ QPushButton *thumbnailButton = new QPushButton(QPixmap::fromImage(image), "");
+ thumbnailButton->setIconSize(QSize(image.width(), image.height()));
+ connect(thumbnailButton, SIGNAL(clicked()), &m_ThumbnailMapper, SLOT(map()));
+ m_ThumbnailMapper.setMapping(thumbnailButton, fileName);
+ ui->thumbnailArea->addWidget(thumbnailButton);
+ }
}
}
@@ -333,7 +384,6 @@ void ModInfoDialog::openTab(int tab)
}
}
-
void ModInfoDialog::thumbnailClicked(const QString &fileName)
{
QLabel *imageLabel = findChild<QLabel*>("imageLabel");
@@ -397,13 +447,10 @@ void ModInfoDialog::on_textFileList_currentItemChanged(QListWidgetItem *current,
void ModInfoDialog::openTextFile(const QString &fileName)
{
- QFile textFile(fileName);
- textFile.open(QIODevice::ReadOnly);
- QByteArray buffer = textFile.readAll();
- QTextCodec *codec = QTextCodec::codecForUtfText(buffer, m_UTF8Codec);
- ui->textFileView->setText(codec->toUnicode(buffer));
+ QString encoding;
+ ui->textFileView->setText(MOBase::readFileText(fileName, &encoding));
ui->textFileView->setProperty("currentFile", fileName);
- ui->textFileView->setProperty("encoding", codec->name());
+ ui->textFileView->setProperty("encoding", encoding);
ui->saveTXTButton->setEnabled(false);
}
@@ -426,18 +473,15 @@ void ModInfoDialog::openIniFile(const QString &fileName)
void ModInfoDialog::saveIniTweaks()
{
- QListWidget *iniTweaksList = findChild<QListWidget*>("iniTweaksList");
-
m_Settings->beginWriteArray("INI Tweaks");
int countEnabled = 0;
- for (int i = 0; i < iniTweaksList->count(); ++i) {
- if (iniTweaksList->item(i)->checkState() == Qt::Checked) {
+ for (int i = 0; i < ui->iniTweaksList->count(); ++i) {
+ if (ui->iniTweaksList->item(i)->checkState() == Qt::Checked) {
m_Settings->setArrayIndex(countEnabled++);
- m_Settings->setValue("name", iniTweaksList->item(i)->text());
+ m_Settings->setValue("name", ui->iniTweaksList->item(i)->text());
}
}
-
m_Settings->endArray();
}
@@ -624,7 +668,7 @@ void ModInfoDialog::on_visitNexusLabel_linkActivated(const QString &link)
void ModInfoDialog::linkClicked(const QUrl &url)
{
- if (url.toString().startsWith(ToQString(GameInfo::instance().getNexusPage()))) {
+ if (url.toString().startsWith(ToQString(GameInfo::instance().getNexusPage(false)))) {
this->close();
emit nexusLinkActivated(url.toString());
} else {
@@ -707,7 +751,7 @@ QString ModInfoDialog::getFileCategory(int categoryID)
void ModInfoDialog::updateVersionColor()
{
// QPalette versionColor;
- if (m_ModInfo->getVersion() < m_ModInfo->getNewestVersion()) {
+ if (m_ModInfo->getVersion() != m_ModInfo->getNewestVersion()) {
ui->versionEdit->setStyleSheet("color: red");
// versionColor.setColor(QPalette::Text, Qt::red);
ui->versionEdit->setToolTip(tr("Current Version: %1").arg(m_ModInfo->getNewestVersion().canonicalString()));
@@ -758,13 +802,7 @@ void ModInfoDialog::modDetailsUpdated(bool success)
ui->descriptionView->setHtml(tr("(description incomplete, please visit nexus)"));
}
- QString version = m_ModInfo->getNewestVersion().canonicalString();
-
- if (!version.isEmpty()) {
- m_ModInfo->setNewestVersion(version);
-
- updateVersionColor();
- }
+ updateVersionColor();
}
}
@@ -774,7 +812,7 @@ void ModInfoDialog::activateNexusTab()
QLineEdit *modIDEdit = findChild<QLineEdit*>("modIDEdit");
int modID = modIDEdit->text().toInt();
if (modID != 0) {
- QString nexusLink = QString("%1/downloads/file.php?id=%2").arg(ToQString(GameInfo::instance().getNexusPage())).arg(modID);
+ QString nexusLink = QString("%1/downloads/file.php?id=%2").arg(ToQString(GameInfo::instance().getNexusPage(false))).arg(modID);
QLabel *visitNexusLabel = findChild<QLabel*>("visitNexusLabel");
visitNexusLabel->setText(tr("<a href=\"%1\">Visit on Nexus</a>").arg(nexusLink));
visitNexusLabel->setToolTip(nexusLink);
@@ -795,7 +833,7 @@ void ModInfoDialog::activateNexusTab()
void ModInfoDialog::on_tabWidget_currentChanged(int index)
{
- if (index == TAB_NEXUS) {
+ if (m_RealTabPos[index] == TAB_NEXUS) {
activateNexusTab();
}
}
@@ -1176,18 +1214,20 @@ void ModInfoDialog::on_prevButton_clicked()
void ModInfoDialog::createTweak()
{
QString name = QInputDialog::getText(this, tr("Name"), tr("Please enter a name"));
- if (!fixDirectoryName(name)) {
- QMessageBox::critical(this, tr("Error"), tr("Invalid name. Must be a valid file name"));
+ if (name.isNull()) {
return;
- } else if (name.isEmpty()) {
+ } else if (!fixDirectoryName(name)) {
+ QMessageBox::critical(this, tr("Error"), tr("Invalid name. Must be a valid file name"));
return;
} else if (ui->iniTweaksList->findItems(name, Qt::MatchFixedString).count() != 0) {
QMessageBox::critical(this, tr("Error"), tr("A tweak by that name exists"));
return;
}
- QListWidgetItem *newTweak = new QListWidgetItem(name);
+ QListWidgetItem *newTweak = new QListWidgetItem(name + ".ini");
newTweak->setData(Qt::UserRole, "INI Tweaks/" + name + ".ini");
+ newTweak->setFlags(newTweak->flags() | Qt::ItemIsUserCheckable);
+ newTweak->setCheckState(Qt::Unchecked);
ui->iniTweaksList->addItem(newTweak);
}
diff --git a/src/modinfodialog.h b/src/modinfodialog.h
index b33b743e..edfe59cf 100644
--- a/src/modinfodialog.h
+++ b/src/modinfodialog.h
@@ -100,6 +100,10 @@ public:
**/
void openTab(int tab);
+ void restoreTabState(const QByteArray &state);
+
+ QByteArray saveTabState() const;
+
signals:
void thumbnailClickedSignal(const QString &filename);
@@ -142,6 +146,8 @@ private:
void addCheckedCategories(QTreeWidgetItem *tree);
void refreshPrimaryCategoriesBox();
+ int tabIndex(const QString &tabId);
+
private slots:
void hideConflictFile();
@@ -221,6 +227,8 @@ private:
MOShared::FilesOrigin *m_Origin;
QTextCodec *m_UTF8Codec;
+ std::map<int, int> m_RealTabPos;
+
};
#endif // MODINFODIALOG_H
diff --git a/src/modinfodialog.ui b/src/modinfodialog.ui
index 7e06745d..1d357f70 100644
--- a/src/modinfodialog.ui
+++ b/src/modinfodialog.ui
@@ -22,6 +22,9 @@
<property name="currentIndex">
<number>0</number>
</property>
+ <property name="movable">
+ <bool>true</bool>
+ </property>
<widget class="QWidget" name="tabText">
<attribute name="title">
<string>Textfiles</string>
@@ -217,17 +220,22 @@
<string>Images located in the mod.</string>
</property>
<property name="whatsThis">
- <string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
-&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
-p, li { white-space: pre-wrap; }
-&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;This lists all the images (.jpg and .png) in the mod directory, like screenshots and such. Click one to get a larger view.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ <string>This lists all the images (.jpg and .png) in the mod directory, like screenshots and such. Click one to get a larger view.</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<property name="spacing">
<number>0</number>
</property>
- <property name="margin">
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
<number>0</number>
</property>
<item>
@@ -254,14 +262,10 @@ p, li { white-space: pre-wrap; }
<string>List of esps and esms that can not be loaded by the game.</string>
</property>
<property name="whatsThis">
- <string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
-&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
-p, li { white-space: pre-wrap; }
-&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;List of esps and esms contained in this plugin that currently can not be loaded by the game. They will not even appear in the esp-list in the main MO-window.&lt;/span&gt;&lt;/p&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;They usually contain optional functionality, see the readme.&lt;/span&gt;&lt;/p&gt;
-&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;&quot;&gt;&lt;/p&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Most mods do not have optional esps, so chances are good you are looking at an empty list.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ <string>List of esps and esms contained in this plugin that currently can not be loaded by the game. They will not even appear in the esp-list in the main MO-window.
+They usually contain optional functionality, see the readme.
+
+Most mods do not have optional esps, so chances are good you are looking at an empty list.</string>
</property>
</widget>
</item>
@@ -403,6 +407,9 @@ p, li { white-space: pre-wrap; }
<property name="textElideMode">
<enum>Qt::ElideLeft</enum>
</property>
+ <property name="sortingEnabled">
+ <bool>true</bool>
+ </property>
<property name="animated">
<bool>true</bool>
</property>
@@ -413,13 +420,13 @@ p, li { white-space: pre-wrap; }
<number>2</number>
</property>
<attribute name="headerDefaultSectionSize">
- <number>500</number>
+ <number>365</number>
</attribute>
<attribute name="headerHighlightSections">
<bool>false</bool>
</attribute>
<attribute name="headerMinimumSectionSize">
- <number>300</number>
+ <number>200</number>
</attribute>
<column>
<property name="text">
@@ -459,14 +466,17 @@ p, li { white-space: pre-wrap; }
<property name="textElideMode">
<enum>Qt::ElideLeft</enum>
</property>
+ <property name="sortingEnabled">
+ <bool>true</bool>
+ </property>
<property name="animated">
<bool>true</bool>
</property>
<attribute name="headerDefaultSectionSize">
- <number>500</number>
+ <number>365</number>
</attribute>
<attribute name="headerMinimumSectionSize">
- <number>300</number>
+ <number>200</number>
</attribute>
<column>
<property name="text">
@@ -524,9 +534,9 @@ p, li { white-space: pre-wrap; }
</widget>
</item>
<item>
- <layout class="QHBoxLayout" name="horizontalLayout_8">
+ <layout class="QHBoxLayout" name="horizontalLayout_12">
<item>
- <widget class="QLabel" name="label_9">
+ <widget class="QLabel" name="label_12">
<property name="text">
<string>Primary Category</string>
</property>
@@ -539,7 +549,7 @@ p, li { white-space: pre-wrap; }
</item>
</layout>
</widget>
- <widget class="QWidget" name="tabNexus_2">
+ <widget class="QWidget" name="tabNexus">
<attribute name="icon">
<iconset resource="resources.qrc">
<normaloff>:/MO/gui/resources/internet-web-browser.png</normaloff>:/MO/gui/resources/internet-web-browser.png</iconset>
@@ -660,7 +670,6 @@ p, li { white-space: pre-wrap; }
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
-&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="textInteractionFlags">
diff --git a/src/modlist.cpp b/src/modlist.cpp
index 5aa8fbb9..836406e4 100644
--- a/src/modlist.cpp
+++ b/src/modlist.cpp
@@ -143,11 +143,12 @@ QVariant ModList::data(const QModelIndex &modelIndex, int role) const
} else if (column == COL_NAME) {
return modInfo->name();
} else if (column == COL_VERSION) {
- QString version = modInfo->getVersion().canonicalString();
- if (version.isEmpty() && modInfo->canBeUpdated()) {
- version = "?";
- } else if (version[0] == 'd') {
- version.remove(0, 1);
+ VersionInfo verInfo = modInfo->getVersion();
+ QString version = verInfo.displayString();
+ if (role != Qt::EditRole) {
+ if (version.isEmpty() && modInfo->canBeUpdated()) {
+ version = "?";
+ }
}
return version;
} else if (column == COL_PRIORITY) {
@@ -168,10 +169,17 @@ QVariant ModList::data(const QModelIndex &modelIndex, int role) const
int category = modInfo->getPrimaryCategory();
if (category != -1) {
CategoryFactory &categoryFactory = CategoryFactory::instance();
- try {
- return categoryFactory.getCategoryName(categoryFactory.getCategoryIndex(category));
- } catch (const std::exception &e) {
- qCritical("failed to retrieve category name: %s", e.what());
+ if (categoryFactory.categoryExists(category)) {
+ try {
+ int categoryIdx = categoryFactory.getCategoryIndex(category);
+ return categoryFactory.getCategoryName(categoryIdx);
+ } catch (const std::exception &e) {
+ qCritical("failed to retrieve category name: %s", e.what());
+ return QString();
+ }
+ } else {
+ qWarning("category %d doesn't exist (may have been removed)", category);
+ modInfo->setCategory(category, false);
return QString();
}
} else {
@@ -179,7 +187,12 @@ QVariant ModList::data(const QModelIndex &modelIndex, int role) const
return QVariant();
}
} else if (column == COL_INSTALLTIME) {
- return modInfo->creationTime();
+ // display installation time for mods that can be updated
+ if (modInfo->canBeUpdated()) {
+ return modInfo->creationTime();
+ } else {
+ return QVariant();
+ }
} else {
return tr("invalid");
}
@@ -241,17 +254,18 @@ QVariant ModList::data(const QModelIndex &modelIndex, int role) const
result.setItalic(true);
}
} else if (column == COL_VERSION) {
- if (modInfo->updateAvailable()) {
+ if (modInfo->updateAvailable() || modInfo->downgradeAvailable()) {
result.setWeight(QFont::Bold);
}
}
return result;
} else if (role == Qt::DecorationRole) {
if (column == COL_VERSION) {
- if (modInfo->updateAvailable() &&
- modInfo->getNewestVersion().isValid()) {
+ if (modInfo->updateAvailable()) {
return QIcon(":/MO/gui/update_available");
- } else if (modInfo->getVersion().isVersionDate()) {
+ } else if (modInfo->downgradeAvailable()) {
+ return QIcon(":/MO/gui/warning");
+ } else if (modInfo->getVersion().scheme() == VersionInfo::SCHEME_DATE) {
return QIcon(":/MO/gui/version_date");
}
}
@@ -264,7 +278,7 @@ QVariant ModList::data(const QModelIndex &modelIndex, int role) const
} else if (column == COL_VERSION) {
if (!modInfo->getNewestVersion().isValid()) {
return QVariant();
- } else if (modInfo->updateAvailable()) {
+ } else if (modInfo->updateAvailable() || modInfo->downgradeAvailable()) {
return QBrush(Qt::red);
} else {
return QBrush(Qt::darkGreen);
@@ -291,7 +305,13 @@ QVariant ModList::data(const QModelIndex &modelIndex, int role) const
return QString();
}
} else if (column == COL_VERSION) {
- return tr("installed version: %1, newest version: %2").arg(modInfo->getVersion().canonicalString()).arg(modInfo->getNewestVersion().canonicalString());
+ QString text = tr("installed version: \"%1\", newest version: \"%2\"").arg(modInfo->getVersion().displayString()).arg(modInfo->getNewestVersion().displayString());
+ if (modInfo->downgradeAvailable()) {
+ text += "<br>" + tr("The newest version on Nexus seems to be older than the one you have installed. This could either mean the version you have has been withdrawn "
+ "(i.e. due to a bug) or the author uses a non-standard versioning scheme and that newest version is actually newer. "
+ "Either way you may want to \"upgrade\".");
+ }
+ return text;
} else if (column == COL_CATEGORY) {
const std::set<int> &categories = modInfo->getCategories();
std::wostringstream categoryString;
@@ -365,9 +385,10 @@ bool ModList::setData(const QModelIndex &index, const QVariant &value, int role)
}
return true;
} else if (role == Qt::EditRole) {
+ bool res = false;
switch (index.column()) {
case COL_NAME: {
- return renameMod(modID, value.toString());
+ res = renameMod(modID, value.toString());
} break;
case COL_PRIORITY: {
bool ok = false;
@@ -376,9 +397,9 @@ bool ModList::setData(const QModelIndex &index, const QVariant &value, int role)
m_Profile->setModPriority(modID, newPriority);
emit modlist_changed(index, role);
- return true;
+ res = true;
} else {
- return false;
+ res = false;
}
} break;
case COL_MODID: {
@@ -388,27 +409,32 @@ bool ModList::setData(const QModelIndex &index, const QVariant &value, int role)
if (ok) {
info->setNexusID(newID);
emit modlist_changed(index, role);
- return true;
+ res = true;
} else {
- return false;
+ res = false;
}
} break;
case COL_VERSION: {
ModInfo::Ptr info = ModInfo::getByIndex(modID);
- VersionInfo version(value.toString());
+ VersionInfo::VersionScheme scheme = info->getVersion().scheme();
+ VersionInfo version(value.toString(), scheme);
if (version.isValid()) {
info->setVersion(version);
- return true;
+ res = true;
} else {
- return false;
+ res = false;
}
} break;
default: {
qWarning("edit on column \"%s\" not supported",
getColumnName(index.column()).toUtf8().constData());
- return false;
+ res = false;
} break;
}
+ if (res) {
+ emit dataChanged(index, index);
+ }
+ return res;
} else {
return false;
}
@@ -477,6 +503,7 @@ Qt::ItemFlags ModList::flags(const QModelIndex &modelIndex) const
return result;
}
+
QStringList ModList::mimeTypes() const
{
QStringList result = QAbstractItemModel::mimeTypes();
@@ -530,6 +557,86 @@ void ModList::changeModPriority(int sourceIndex, int newPriority)
emit modorder_changed();
}
+void ModList::modInfoAboutToChange(ModInfo::Ptr info)
+{
+ m_ChangeInfo.name = info->name();
+ m_ChangeInfo.state = state(info->name());
+}
+
+void ModList::modInfoChanged(ModInfo::Ptr info)
+{
+ if (info->name() == m_ChangeInfo.name) {
+ IModList::ModStates newState = state(info->name());
+ if (m_ChangeInfo.state != newState) {
+ m_ModStateChanged(info->name(), newState);
+ }
+ int row = ModInfo::getIndex(info->name());
+ info->testValid();
+ emit dataChanged(index(row, 0), index(row, columnCount()));
+ } else {
+ qCritical("modInfoChanged not called after modInfoAboutToChange");
+ }
+}
+
+IModList::ModStates ModList::state(const QString &name) const
+{
+ ModStates result;
+ unsigned int modIndex = ModInfo::getIndex(name);
+ if (modIndex != UINT_MAX) {
+ result |= IModList::STATE_EXISTS;
+ ModInfo::Ptr modInfo = ModInfo::getByIndex(modIndex);
+ if (modInfo->isEmpty()) {
+ result |= IModList::STATE_EMPTY;
+ }
+ if (modInfo->endorsedState() == ModInfo::ENDORSED_TRUE) {
+ result |= IModList::STATE_ENDORSED;
+ }
+ if (modInfo->isValid()) {
+ result |= IModList::STATE_VALID;
+ }
+ if (modInfo->canBeEnabled()) {
+ if (m_Profile->modEnabled(modIndex)) {
+ result |= IModList::STATE_ACTIVE;
+ }
+ } else {
+ result |= IModList::STATE_ESSENTIAL;
+ }
+ }
+ return result;
+}
+
+int ModList::priority(const QString &name) const
+{
+ unsigned int modIndex = ModInfo::getIndex(name);
+ if (modIndex == UINT_MAX) {
+ return -1;
+ } else {
+ return m_Profile->getModPriority(modIndex);
+ }
+}
+
+bool ModList::setPriority(const QString &name, int newPriority)
+{
+ if ((newPriority < 0) || (newPriority >= static_cast<int>(m_Profile->numRegularMods()))) {
+ return false;
+ }
+
+ unsigned int modIndex = ModInfo::getIndex(name);
+ if (modIndex == UINT_MAX) {
+ return false;
+ } else {
+ m_Profile->setModPriority(modIndex, newPriority);
+ notifyChange(modIndex);
+ return true;
+ }
+}
+
+
+bool ModList::onModStateChanged(const std::function<void (const QString &, IModList::ModStates)> &func)
+{
+ auto conn = m_ModStateChanged.connect(func);
+ return conn.connected();
+}
bool ModList::dropURLs(const QMimeData *mimeData, int row, const QModelIndex &parent)
{
@@ -544,6 +651,12 @@ bool ModList::dropURLs(const QMimeData *mimeData, int row, const QModelIndex &pa
QDir modDirectory(modInfo->absolutePath());
QDir gameDirectory(QDir::fromNativeSeparators(ToQString(MOShared::GameInfo::instance().getOverwriteDir())));
+ unsigned int overwriteIndex = ModInfo::findMod([](ModInfo::Ptr mod) -> bool {
+ std::vector<ModInfo::EFlag> flags = mod->getFlags();
+ return std::find(flags.begin(), flags.end(), ModInfo::FLAG_OVERWRITE) != flags.end(); });
+
+ QString overwriteName = ModInfo::getByIndex(overwriteIndex)->name();
+
foreach (const QUrl &url, mimeData->urls()) {
QString relativePath = gameDirectory.relativeFilePath(url.toLocalFile());
if (relativePath.startsWith("..")) {
@@ -552,10 +665,11 @@ bool ModList::dropURLs(const QMimeData *mimeData, int row, const QModelIndex &pa
}
source.append(url.toLocalFile());
target.append(modDirectory.absoluteFilePath(relativePath));
+ emit fileMoved(relativePath, overwriteName, modInfo->name());
}
if (source.count() != 0) {
- shellMove(source, target, NULL);
+ shellMove(source, target);
}
return true;
diff --git a/src/modlist.h b/src/modlist.h
index 069de40b..cc5955d0 100644
--- a/src/modlist.h
+++ b/src/modlist.h
@@ -26,11 +26,13 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
#include "modinfo.h"
#include "profile.h"
+#include <imodlist.h>
+
#include <QFile>
#include <QListWidget>
#include <QNetworkReply>
#include <QNetworkAccessManager>
-
+#include <boost/signals2.hpp>
#include <set>
#include <vector>
#include <QVector>
@@ -41,7 +43,7 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
* This is used in a view in the main window of MO. It combines general information about
* the mods from ModInfo with status information from the Profile
**/
-class ModList : public QAbstractItemModel
+class ModList : public QAbstractItemModel, public MOBase::IModList
{
Q_OBJECT
@@ -59,6 +61,8 @@ public:
COL_LASTCOLUMN = COL_PRIORITY
};
+ typedef boost::signals2::signal<void (const QString &, ModStates)> SignalModStateChanged;
+
public:
/**
@@ -92,6 +96,23 @@ public:
void changeModPriority(int sourceIndex, int newPriority);
+ void modInfoAboutToChange(ModInfo::Ptr info);
+ void modInfoChanged(ModInfo::Ptr info);
+
+public:
+
+ /// \copydoc MOBase::IModList::state
+ virtual ModStates state(const QString &name) const;
+
+ /// \copydoc MOBase::IModList::priority
+ virtual int priority(const QString &name) const;
+
+ /// \copydoc MOBase::IModList::setPriority
+ virtual bool setPriority(const QString &name, int newPriority);
+
+ /// \copydoc MOBase::IModList::onModStateChanged
+ virtual bool onModStateChanged(const std::function<void (const QString &, ModStates)> &func);
+
public: // implementation of virtual functions of QAbstractItemModel
virtual int rowCount(const QModelIndex &parent = QModelIndex()) const;
@@ -182,6 +203,14 @@ signals:
*/
void removeSelectedMods();
+ /**
+ * @brief fileMoved emitted when a file is moved from one mod to another
+ * @param relativePath relative path of the file moved
+ * @param oldOriginName name of the origin that previously contained the file
+ * @param newOriginName name of the origin that now contains the file
+ */
+ void fileMoved(const QString &relativePath, const QString &oldOriginName, const QString &newOriginName);
+
protected:
// event filter, handles event from the header and the tree view itself
@@ -224,6 +253,11 @@ private:
unsigned int categoryOrder;
};
+ struct TModInfoChange {
+ QString name;
+ QFlags<IModList::ModStates> state;
+ };
+
private:
Profile *m_Profile;
@@ -237,6 +271,14 @@ private:
bool m_DropOnItems;
+ TModInfoChange m_ChangeInfo;
+
+ SignalModStateChanged m_ModStateChanged;
+
+
+ // QAbstractItemModel interface
+
+ // IModList interface
};
#endif // MODLIST_H
diff --git a/src/modlistsortproxy.cpp b/src/modlistsortproxy.cpp
index 53c03c6a..4d767230 100644
--- a/src/modlistsortproxy.cpp
+++ b/src/modlistsortproxy.cpp
@@ -137,10 +137,30 @@ bool ModListSortProxy::lessThan(const QModelIndex &left,
ModInfo::Ptr rightMod = ModInfo::getByIndex(rightIndex);
bool lt = false;
+
+ {
+ QModelIndex leftPrioIdx = left.sibling(left.row(), ModList::COL_PRIORITY);
+ QVariant leftPrio = leftPrioIdx.data();
+ if (!leftPrio.isValid()) leftPrio = left.data(Qt::UserRole);
+ QModelIndex rightPrioIdx = right.sibling(right.row(), ModList::COL_PRIORITY);
+ QVariant rightPrio = rightPrioIdx.data();
+ if (!rightPrio.isValid()) rightPrio = right.data(Qt::UserRole);
+
+ lt = leftPrio.toInt() < rightPrio.toInt();
+ }
+
switch (left.column()) {
- case ModList::COL_FLAGS: lt = leftMod->getFlags().size() < rightMod->getFlags().size(); break;
- case ModList::COL_NAME: lt = QString::compare(leftMod->name(), rightMod->name(), Qt::CaseInsensitive) < 0; break;
+ case ModList::COL_FLAGS: {
+ if (leftMod->getFlags().size() != rightMod->getFlags().size())
+ lt = leftMod->getFlags().size() < rightMod->getFlags().size();
+ } break;
+ case ModList::COL_NAME: {
+ int comp = QString::compare(leftMod->name(), rightMod->name(), Qt::CaseInsensitive);
+ if (comp != 0)
+ lt = comp < 0;
+ } break;
case ModList::COL_CATEGORY: {
+ if (leftMod->getPrimaryCategory() != rightMod->getPrimaryCategory()) {
if (leftMod->getPrimaryCategory() < 0) lt = false;
else if (rightMod->getPrimaryCategory() < 0) lt = true;
else {
@@ -153,19 +173,24 @@ bool ModListSortProxy::lessThan(const QModelIndex &left,
qCritical("failed to compare categories: %s", e.what());
}
}
- } break;
- case ModList::COL_MODID: lt = leftMod->getNexusID() < rightMod->getNexusID(); break;
- case ModList::COL_VERSION: lt = leftMod->getVersion() < rightMod->getVersion(); break;
- case ModList::COL_PRIORITY: {
- QVariant leftPrio = left.data();
- if (!leftPrio.isValid()) leftPrio = left.data(Qt::UserRole);
- QVariant rightPrio = right.data();
- if (!rightPrio.isValid()) rightPrio = right.data(Qt::UserRole);
-
- return leftPrio.toInt() < rightPrio.toInt();
+ }
+ } break;
+ case ModList::COL_MODID: {
+ if (leftMod->getNexusID() != rightMod->getNexusID())
+ lt = leftMod->getNexusID() < rightMod->getNexusID();
+ } break;
+ case ModList::COL_VERSION: {
+ if (leftMod->getVersion() != rightMod->getVersion())
+ lt = leftMod->getVersion() < rightMod->getVersion();
} break;
case ModList::COL_INSTALLTIME: {
- return left.data().toDateTime() < right.data().toDateTime();
+ QDateTime leftTime = left.data().toDateTime();
+ QDateTime rightTime = right.data().toDateTime();
+ if (leftTime != rightTime)
+ return leftTime < rightTime;
+ } break;
+ case ModList::COL_PRIORITY: {
+ // nop, already compared by priority
} break;
}
return lt;
@@ -195,7 +220,7 @@ bool ModListSortProxy::hasConflictFlag(const std::vector<ModInfo::EFlag> &flags)
}
-bool ModListSortProxy::filterMatches(ModInfo::Ptr info, bool enabled) const
+bool ModListSortProxy::filterMatchesMod(ModInfo::Ptr info, bool enabled) const
{
if (!m_CurrentFilter.isEmpty() &&
!info->name().contains(m_CurrentFilter, Qt::CaseInsensitive)) {
@@ -211,7 +236,7 @@ bool ModListSortProxy::filterMatches(ModInfo::Ptr info, bool enabled) const
if (enabled) return false;
} break;
case CategoryFactory::CATEGORY_SPECIAL_UPDATEAVAILABLE: {
- if (!info->updateAvailable()) return false;
+ if (!info->updateAvailable() && !info->downgradeAvailable()) return false;
} break;
case CategoryFactory::CATEGORY_SPECIAL_NOCATEGORY: {
if (info->getCategories().size() > 0) return false;
@@ -233,7 +258,7 @@ bool ModListSortProxy::filterMatches(ModInfo::Ptr info, bool enabled) const
}
-bool ModListSortProxy::filterAcceptsRow(int row, const QModelIndex&) const
+bool ModListSortProxy::filterAcceptsRow(int row, const QModelIndex &parent) const
{
if (m_Profile == NULL) {
return false;
@@ -243,9 +268,25 @@ bool ModListSortProxy::filterAcceptsRow(int row, const QModelIndex&) const
qWarning("invalid row idx %d", row);
return false;
}
- bool modEnabled = m_Profile->modEnabled(row);
- return filterMatches(ModInfo::getByIndex(row), modEnabled);
+ QModelIndex idx = sourceModel()->index(row, 0, parent);
+ if (!idx.isValid()) {
+ qDebug("invalid index");
+ return false;
+ }
+ if (idx.isValid() && sourceModel()->hasChildren(idx)) {
+ for (int i = 0; i < sourceModel()->rowCount(idx); ++i) {
+ if (filterAcceptsRow(i, idx)) {
+ return true;
+ }
+ }
+
+ return false;
+ } else {
+ bool modEnabled = idx.sibling(row, 0).data(Qt::CheckStateRole).toInt() == Qt::Checked;
+ unsigned int index = idx.data(Qt::UserRole + 1).toInt();
+ return filterMatchesMod(ModInfo::getByIndex(index), modEnabled);
+ }
}
diff --git a/src/modlistsortproxy.h b/src/modlistsortproxy.h
index dd968b9e..3e18ea4e 100644
--- a/src/modlistsortproxy.h
+++ b/src/modlistsortproxy.h
@@ -52,14 +52,7 @@ public:
**/
void disableAllVisible();
- bool filterMatches(ModInfo::Ptr info, bool enabled) const;
-
-/*
- virtual int rowCount( const QModelIndex & parent = QModelIndex() ) const {
- int rc = QSortFilterProxyModel::rowCount(parent);
- qDebug() << parent << " - " << rc;
- return rc;
- }*/
+ bool filterMatchesMod(ModInfo::Ptr info, bool enabled) const;
virtual bool hasChildren ( const QModelIndex & parent = QModelIndex() ) const {
return rowCount(parent) > 0;
diff --git a/src/modlistview.cpp b/src/modlistview.cpp
index 44228d5b..1a4f6266 100644
--- a/src/modlistview.cpp
+++ b/src/modlistview.cpp
@@ -4,7 +4,7 @@
#include <QProxyStyle>
-class ModListViewStyle: public QProxyStyle{
+class ModListViewStyle: public QProxyStyle {
public:
ModListViewStyle(QStyle *style, int indentation);
@@ -37,7 +37,7 @@ void ModListViewStyle::drawPrimitive(PrimitiveElement element, const QStyleOptio
ModListView::ModListView(QWidget *parent)
: QTreeView(parent)
{
- setStyle(new ModListViewStyle(style(), indentation()));
+// setStyle(new ModListViewStyle(style(), indentation()));
}
void ModListView::dragEnterEvent(QDragEnterEvent *event)
diff --git a/src/nexusinterface.cpp b/src/nexusinterface.cpp
index 44bf03ef..ba2d5754 100644
--- a/src/nexusinterface.cpp
+++ b/src/nexusinterface.cpp
@@ -20,12 +20,13 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
#include "nexusinterface.h"
#include "nxmaccessmanager.h"
#include "utility.h"
-#include "json.h"
+#include <json.h>
#include "selectiondialog.h"
+#include <QApplication>
#include <utility.h>
#include <regex>
+#include <util.h>
-using QtJson::Json;
using namespace MOBase;
using namespace MOShared;
@@ -68,6 +69,7 @@ void NexusBridge::nxmDescriptionAvailable(int modID, QVariant userData, QVariant
std::set<int>::iterator iter = m_RequestIDs.find(requestID);
if (iter != m_RequestIDs.end()) {
m_RequestIDs.erase(iter);
+
emit descriptionAvailable(modID, userData, resultData);
}
}
@@ -126,12 +128,12 @@ void NexusBridge::nxmEndorsementToggled(int modID, QVariant userData, QVariant r
}
}
-void NexusBridge::nxmRequestFailed(int modID, QVariant userData, int requestID, const QString &errorMessage)
+void NexusBridge::nxmRequestFailed(int modID, int fileID, QVariant userData, int requestID, const QString &errorMessage)
{
std::set<int>::iterator iter = m_RequestIDs.find(requestID);
if (iter != m_RequestIDs.end()) {
m_RequestIDs.erase(iter);
- emit requestFailed(modID, userData, errorMessage);
+ emit requestFailed(modID, fileID, userData, errorMessage);
}
}
@@ -142,10 +144,25 @@ QAtomicInt NexusInterface::NXMRequestInfo::s_NextID(0);
NexusInterface::NexusInterface()
: m_NMMVersion()
{
+ atexit(&cleanup);
m_AccessManager = new NXMAccessManager(this);
m_DiskCache = new QNetworkDiskCache(this);
connect(m_AccessManager, SIGNAL(requestNXMDownload(QString)), this, SLOT(downloadRequestedNXM(QString)));
+
+
+ VS_FIXEDFILEINFO version = GetFileVersion(ToWString(QApplication::applicationFilePath()));
+
+ m_MOVersion = VersionInfo(version.dwFileVersionMS >> 16,
+ version.dwFileVersionMS & 0xFFFF,
+ version.dwFileVersionLS >> 16);
+}
+
+
+void NexusInterface::cleanup()
+{
+ delete NexusInterface::s_Instance;
+ NexusInterface::s_Instance = NULL;
}
@@ -241,8 +258,8 @@ int NexusInterface::requestDescription(int modID, QObject *receiver, QVariant us
connect(this, SIGNAL(nxmDescriptionAvailable(int,QVariant,QVariant,int)),
receiver, SLOT(nxmDescriptionAvailable(int,QVariant,QVariant,int)), Qt::UniqueConnection);
- connect(this, SIGNAL(nxmRequestFailed(int,QVariant,int,QString)),
- receiver, SLOT(nxmRequestFailed(int,QVariant,int,QString)), Qt::UniqueConnection);
+ connect(this, SIGNAL(nxmRequestFailed(int,int,QVariant,int,QString)),
+ receiver, SLOT(nxmRequestFailed(int,int,QVariant,int,QString)), Qt::UniqueConnection);
nextRequest();
return requestInfo.m_ID;
@@ -257,8 +274,8 @@ int NexusInterface::requestUpdates(const std::vector<int> &modIDs, QObject *rece
connect(this, SIGNAL(nxmUpdatesAvailable(std::vector<int>,QVariant,QVariant,int)),
receiver, SLOT(nxmUpdatesAvailable(std::vector<int>,QVariant,QVariant,int)), Qt::UniqueConnection);
- connect(this, SIGNAL(nxmRequestFailed(int,QVariant,int,QString)),
- receiver, SLOT(nxmRequestFailed(int,QVariant,int,QString)), Qt::UniqueConnection);
+ connect(this, SIGNAL(nxmRequestFailed(int,int,QVariant,int,QString)),
+ receiver, SLOT(nxmRequestFailed(int,int,QVariant,int,QString)), Qt::UniqueConnection);
nextRequest();
return requestInfo.m_ID;
@@ -291,8 +308,8 @@ int NexusInterface::requestFiles(int modID, QObject *receiver, QVariant userData
connect(this, SIGNAL(nxmFilesAvailable(int,QVariant,QVariant,int)),
receiver, SLOT(nxmFilesAvailable(int,QVariant,QVariant,int)), Qt::UniqueConnection);
- connect(this, SIGNAL(nxmRequestFailed(int,QVariant,int,QString)),
- receiver, SLOT(nxmRequestFailed(int,QVariant,int,QString)), Qt::UniqueConnection);
+ connect(this, SIGNAL(nxmRequestFailed(int,int,QVariant,int,QString)),
+ receiver, SLOT(nxmRequestFailed(int,int,QVariant,int,QString)), Qt::UniqueConnection);
// QTimer::singleShot(1000, this, SLOT(fakeFiles()));
// static int fID = 42;
@@ -311,8 +328,8 @@ int NexusInterface::requestFileInfo(int modID, int fileID, QObject *receiver, QV
connect(this, SIGNAL(nxmFileInfoAvailable(int,int,QVariant,QVariant,int)),
receiver, SLOT(nxmFileInfoAvailable(int,int,QVariant,QVariant,int)), Qt::UniqueConnection);
- connect(this, SIGNAL(nxmRequestFailed(int,QVariant,int,QString)),
- receiver, SLOT(nxmRequestFailed(int,QVariant,int,QString)), Qt::UniqueConnection);
+ connect(this, SIGNAL(nxmRequestFailed(int,int,QVariant,int,QString)),
+ receiver, SLOT(nxmRequestFailed(int,int,QVariant,int,QString)), Qt::UniqueConnection);
nextRequest();
return requestInfo.m_ID;
@@ -327,8 +344,8 @@ int NexusInterface::requestDownloadURL(int modID, int fileID, QObject *receiver,
connect(this, SIGNAL(nxmDownloadURLsAvailable(int,int,QVariant,QVariant,int)),
receiver, SLOT(nxmDownloadURLsAvailable(int,int,QVariant,QVariant,int)), Qt::UniqueConnection);
- connect(this, SIGNAL(nxmRequestFailed(int,QVariant,int,QString)),
- receiver, SLOT(nxmRequestFailed(int,QVariant,int,QString)), Qt::UniqueConnection);
+ connect(this, SIGNAL(nxmRequestFailed(int,int,QVariant,int,QString)),
+ receiver, SLOT(nxmRequestFailed(int,int,QVariant,int,QString)), Qt::UniqueConnection);
nextRequest();
return requestInfo.m_ID;
@@ -344,8 +361,8 @@ int NexusInterface::requestToggleEndorsement(int modID, bool endorse, QObject *r
connect(this, SIGNAL(nxmEndorsementToggled(int,QVariant,QVariant,int)),
receiver, SLOT(nxmEndorsementToggled(int,QVariant,QVariant,int)), Qt::UniqueConnection);
- connect(this, SIGNAL(nxmRequestFailed(int,QVariant,int,QString)),
- receiver, SLOT(nxmRequestFailed(int,QVariant,int,QString)), Qt::UniqueConnection);
+ connect(this, SIGNAL(nxmRequestFailed(int,int,QVariant,int,QString)),
+ receiver, SLOT(nxmRequestFailed(int,int,QVariant,int,QString)), Qt::UniqueConnection);
nextRequest();
return requestInfo.m_ID;
@@ -363,33 +380,42 @@ void NexusInterface::nextRequest()
info.m_Timeout->setInterval(60000);
QString url;
- switch (info.m_Type) {
- case NXMRequestInfo::TYPE_DESCRIPTION: {
- url = QString("%1/Mods/%2/").arg(info.m_URL).arg(info.m_ModID);
- } break;
- case NXMRequestInfo::TYPE_FILES: {
- url = QString("%1/Files/indexfrommod/%2/").arg(info.m_URL).arg(info.m_ModID);
- } break;
- case NXMRequestInfo::TYPE_FILEINFO: {
- url = QString("%1/Files/%2/").arg(info.m_URL).arg(info.m_FileID);
- } break;
- case NXMRequestInfo::TYPE_DOWNLOADURL: {
- url = QString("%1/Files/download/%2").arg(info.m_URL).arg(info.m_FileID);
- } break;
- case NXMRequestInfo::TYPE_TOGGLEENDORSEMENT: {
- url = QString("%1/Mods/toggleendorsement/%2?lvote=%3").arg(info.m_URL).arg(info.m_ModID).arg(!info.m_Endorse);
- } break;
- case NXMRequestInfo::TYPE_GETUPDATES: {
- QString modIDList = VectorJoin<int>(info.m_ModIDList, ",");
- modIDList = "[" + modIDList + "]";
- url = QString("%1/Mods/GetUpdates?ModList=%2").arg(info.m_URL).arg(modIDList);
- } break;
+ if (!info.m_Reroute) {
+ bool hasParams = false;
+ switch (info.m_Type) {
+ case NXMRequestInfo::TYPE_DESCRIPTION: {
+ url = QString("%1/Mods/%2/").arg(info.m_URL).arg(info.m_ModID);
+ } break;
+ case NXMRequestInfo::TYPE_FILES: {
+ url = QString("%1/Files/indexfrommod/%2/").arg(info.m_URL).arg(info.m_ModID);
+ } break;
+ case NXMRequestInfo::TYPE_FILEINFO: {
+ url = QString("%1/Files/%2/").arg(info.m_URL).arg(info.m_FileID);
+ } break;
+ case NXMRequestInfo::TYPE_DOWNLOADURL: {
+ url = QString("%1/Files/download/%2").arg(info.m_URL).arg(info.m_FileID);
+ } break;
+ case NXMRequestInfo::TYPE_TOGGLEENDORSEMENT: {
+ url = QString("%1/Mods/toggleendorsement/%2?lvote=%3").arg(info.m_URL).arg(info.m_ModID).arg(!info.m_Endorse);
+ hasParams = true;
+ } break;
+ case NXMRequestInfo::TYPE_GETUPDATES: {
+ QString modIDList = VectorJoin<int>(info.m_ModIDList, ",");
+ modIDList = "[" + modIDList + "]";
+ url = QString("%1/Mods/GetUpdates?ModList=%2").arg(info.m_URL).arg(modIDList);
+ hasParams = true;
+ } break;
+ }
+ url.append(QString("%1game_id=%2").arg(hasParams ? '&' : '?').arg(GameInfo::instance().getNexusGameID()));
+ } else {
+ url = info.m_URL;
}
-
QNetworkRequest request(url);
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/xml");
-#pragma message("automatically insert the correct version number")
- request.setRawHeader("User-Agent", QString("Mod Organizer v0.99.0 (compatible to Nexus Client v%1)").arg(m_NMMVersion).toUtf8());
+ request.setRawHeader("User-Agent",
+ QString("Mod Organizer v%1 (compatible to Nexus Client v%2)")
+ .arg(m_MOVersion.displayString())
+ .arg(m_NMMVersion).toUtf8());
info.m_Reply = m_AccessManager->get(request);
@@ -406,26 +432,33 @@ void NexusInterface::downloadRequestedNXM(const QString &url)
emit requestNXMDownload(url);
}
-
void NexusInterface::requestFinished(std::list<NXMRequestInfo>::iterator iter)
{
QNetworkReply *reply = iter->m_Reply;
if (reply->error() != QNetworkReply::NoError) {
qWarning("request failed: %s", reply->errorString().toUtf8().constData());
- emit nxmRequestFailed(iter->m_ModID, iter->m_UserData, iter->m_ID, reply->errorString());
+ emit nxmRequestFailed(iter->m_ModID, iter->m_FileID, iter->m_UserData, iter->m_ID, reply->errorString());
} else {
+ int statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
+ if (statusCode == 301) {
+ // redirect request, return request to queue
+ iter->m_URL = reply->attribute(QNetworkRequest::RedirectionTargetAttribute).toString();
+ iter->m_Reroute = true;
+ m_RequestQueue.enqueue(*iter);
+ nextRequest();
+ return;
+ }
QByteArray data = reply->readAll();
if (data.isNull() || data.isEmpty() || (strcmp(data.constData(), "null") == 0)) {
QString nexusError(reply->rawHeader("NexusErrorInfo"));
if (nexusError.length() == 0) {
nexusError = tr("empty response");
}
-
- emit nxmRequestFailed(iter->m_ModID, iter->m_UserData, iter->m_ID, nexusError);
+ emit nxmRequestFailed(iter->m_ModID, iter->m_FileID, iter->m_UserData, iter->m_ID, nexusError);
} else {
bool ok;
- QVariant result = Json::parse(data, ok);
+ QVariant result = QtJson::parse(data, ok);
if (result.isValid() && ok) {
switch (iter->m_Type) {
case NXMRequestInfo::TYPE_DESCRIPTION: {
@@ -448,7 +481,7 @@ void NexusInterface::requestFinished(std::list<NXMRequestInfo>::iterator iter)
} break;
}
} else {
- emit nxmRequestFailed(iter->m_ModID, iter->m_UserData, iter->m_ID, tr("invalid response"));
+ emit nxmRequestFailed(iter->m_ModID, iter->m_FileID, iter->m_UserData, iter->m_ID, tr("invalid response"));
}
}
}
@@ -491,7 +524,6 @@ void NexusInterface::requestTimeout()
qWarning("invalid sender type");
return;
}
- qWarning("request timeout");
for (std::list<NXMRequestInfo>::iterator iter = m_ActiveRequest.begin(); iter != m_ActiveRequest.end(); ++iter) {
if (iter->m_Timeout == timer) {
// this abort causes a "request failed" which cleans up the rest
diff --git a/src/nexusinterface.h b/src/nexusinterface.h
index ba2ee3cd..6067d027 100644
--- a/src/nexusinterface.h
+++ b/src/nexusinterface.h
@@ -23,7 +23,7 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
#include "nxmaccessmanager.h"
-#include "utility.h"
+#include <utility.h>
#include <gameinfo.h>
#include <versioninfo.h>
#include <imodrepositorybridge.h>
@@ -105,7 +105,7 @@ public slots:
void nxmFileInfoAvailable(int modID, int fileID, QVariant userData, QVariant resultData, int requestID);
void nxmDownloadURLsAvailable(int modID, int fileID, QVariant userData, QVariant resultData, int requestID);
void nxmEndorsementToggled(int modID, QVariant userData, QVariant resultData, int requestID);
- void nxmRequestFailed(int modID, QVariant userData, int requestID, const QString &errorMessage);
+ void nxmRequestFailed(int modID, int fileID, QVariant userData, int requestID, const QString &errorMessage);
private:
@@ -240,7 +240,7 @@ signals:
void nxmFileInfoAvailable(int modID, int fileID, QVariant userData, QVariant resultData, int requestID);
void nxmDownloadURLsAvailable(int modID, int fileID, QVariant userData, QVariant resultData, int requestID);
void nxmEndorsementToggled(int modID, QVariant userData, QVariant resultData, int requestID);
- void nxmRequestFailed(int modID, QVariant userData, int requestID, const QString &errorString);
+ void nxmRequestFailed(int modID, int fileID, QVariant userData, int requestID, const QString &errorString);
private slots:
@@ -270,18 +270,19 @@ private:
QVariant m_UserData;
QTimer *m_Timeout;
QString m_URL;
+ bool m_Reroute;
int m_ID;
int m_Endorse;
NXMRequestInfo(int modID, Type type, QVariant userData, const QString &url)
: m_ModID(modID), m_FileID(0), m_Reply(NULL), m_Type(type), m_UserData(userData),
- m_Timeout(NULL), m_ID(s_NextID.fetchAndAddAcquire(1)), m_URL(url) {}
+ m_Timeout(NULL), m_Reroute(false), m_ID(s_NextID.fetchAndAddAcquire(1)), m_URL(url) {}
NXMRequestInfo(std::vector<int> modIDList, Type type, QVariant userData, const QString &url)
: m_ModID(-1), m_ModIDList(modIDList), m_FileID(0), m_Reply(NULL), m_Type(type), m_UserData(userData),
- m_Timeout(NULL), m_ID(s_NextID.fetchAndAddAcquire(1)), m_URL(url) {}
+ m_Timeout(NULL), m_Reroute(false), m_ID(s_NextID.fetchAndAddAcquire(1)), m_URL(url) {}
NXMRequestInfo(int modID, int fileID, Type type, QVariant userData, const QString &url)
: m_ModID(modID), m_FileID(fileID), m_Reply(NULL), m_Type(type), m_UserData(userData),
- m_Timeout(NULL), m_ID(s_NextID.fetchAndAddAcquire(1)), m_URL(url) {}
+ m_Timeout(NULL), m_Reroute(false), m_ID(s_NextID.fetchAndAddAcquire(1)), m_URL(url) {}
private:
static QAtomicInt s_NextID;
@@ -294,6 +295,7 @@ private:
NexusInterface();
void nextRequest();
void requestFinished(std::list<NXMRequestInfo>::iterator iter);
+ static void cleanup();
private:
@@ -306,6 +308,7 @@ private:
std::list<NXMRequestInfo> m_ActiveRequest;
QQueue<NXMRequestInfo> m_RequestQueue;
+ MOBase::VersionInfo m_MOVersion;
QString m_NMMVersion;
};
diff --git a/src/noeditdelegate.cpp b/src/noeditdelegate.cpp
new file mode 100644
index 00000000..ab8a4880
--- /dev/null
+++ b/src/noeditdelegate.cpp
@@ -0,0 +1,10 @@
+#include "noeditdelegate.h"
+
+NoEditDelegate::NoEditDelegate(QObject *parent)
+ : QStyledItemDelegate(parent)
+{
+}
+
+QWidget *NoEditDelegate::createEditor(QWidget*, const QStyleOptionViewItem&, const QModelIndex&) const {
+ return NULL;
+}
diff --git a/src/noeditdelegate.h b/src/noeditdelegate.h
new file mode 100644
index 00000000..d0ba2f68
--- /dev/null
+++ b/src/noeditdelegate.h
@@ -0,0 +1,12 @@
+#ifndef NOEDITDELEGATE_H
+#define NOEDITDELEGATE_H
+
+#include <QStyledItemDelegate>
+
+class NoEditDelegate: public QStyledItemDelegate {
+public:
+ NoEditDelegate(QObject *parent = NULL);
+ virtual QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const;
+};
+
+#endif // NOEDITDELEGATE_H
diff --git a/src/nxmaccessmanager.cpp b/src/nxmaccessmanager.cpp
index 30a8bb06..3df34de1 100644
--- a/src/nxmaccessmanager.cpp
+++ b/src/nxmaccessmanager.cpp
@@ -48,6 +48,14 @@ NXMAccessManager::NXMAccessManager(QObject *parent)
QDir::fromNativeSeparators(MOBase::ToQString(MOShared::GameInfo::instance().getCacheDir())) + "/nexus_cookies.dat", this));
}
+NXMAccessManager::~NXMAccessManager()
+{
+ if (m_LoginReply != NULL) {
+ m_LoginReply->deleteLater();
+ m_LoginReply = NULL;
+ }
+}
+
QNetworkReply *NXMAccessManager::createRequest(
QNetworkAccessManager::Operation operation, const QNetworkRequest &request,
diff --git a/src/nxmaccessmanager.h b/src/nxmaccessmanager.h
index b0c43978..1d8d36ab 100644
--- a/src/nxmaccessmanager.h
+++ b/src/nxmaccessmanager.h
@@ -37,6 +37,8 @@ public:
explicit NXMAccessManager(QObject *parent);
+ ~NXMAccessManager();
+
bool loggedIn() const;
void login(const QString &username, const QString &password);
diff --git a/src/organizer.en.qm b/src/organizer.en.qm
deleted file mode 100644
index 9dad8dff..00000000
--- a/src/organizer.en.qm
+++ /dev/null
Binary files differ
diff --git a/src/organizer.en.ts b/src/organizer.en.ts
deleted file mode 100644
index 3423891a..00000000
--- a/src/organizer.en.ts
+++ /dev/null
@@ -1,4652 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS>
-<TS version="2.0" language="en_US">
-<context>
- <name>ActivateModsDialog</name>
- <message>
- <location filename="activatemodsdialog.ui" line="14"/>
- <source>Activate Mods</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="activatemodsdialog.ui" line="20"/>
- <source>This is a list of esps and esms that were active when the save game was created.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="activatemodsdialog.ui" line="23"/>
- <source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
-&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
-p, li { white-space: pre-wrap; }
-&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;This is a list of esps and esms that were active when the save game was created.&lt;/span&gt;&lt;/p&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;For each esp, the right column contains the mod (or mods) that can be enabled to make the missing esps/esms available.&lt;/span&gt;&lt;/p&gt;
-&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;/p&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;If you hit Ok, all the mods selected in the right columns and all missing esps that have become available will be activated.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="activatemodsdialog.ui" line="37"/>
- <source>Missing ESP</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="activatemodsdialog.ui" line="42"/>
- <source>Mod</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="activatemodsdialog.cpp" line="49"/>
- <source>not found</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>BainComplexInstallerDialog</name>
- <message>
- <location filename="baincomplexinstallerdialog.ui" line="14"/>
- <source>BAIN Package Installer</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="baincomplexinstallerdialog.ui" line="22"/>
- <source>Name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="baincomplexinstallerdialog.ui" line="34"/>
- <source>This looks like a Package prepared for Installation through BAIN. You can select options from the list below. If there is a package.txt file, it should contain detailed information about the options.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="baincomplexinstallerdialog.ui" line="44"/>
- <source>Components of this package.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="baincomplexinstallerdialog.ui" line="47"/>
- <source>Components of this package.
-If there is a component called &quot;00 Core&quot; it is usually required. Options are ordered by priority as set up by the author.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="baincomplexinstallerdialog.ui" line="57"/>
- <location filename="baincomplexinstallerdialog.ui" line="60"/>
- <source>The package.txt is often part of BAIN packages and contains details about the options available.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="baincomplexinstallerdialog.ui" line="63"/>
- <source>Package.txt</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="baincomplexinstallerdialog.ui" line="83"/>
- <location filename="baincomplexinstallerdialog.ui" line="86"/>
- <source>Opens a Dialog that allows custom modifications.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="baincomplexinstallerdialog.ui" line="89"/>
- <source>Manual</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="baincomplexinstallerdialog.ui" line="96"/>
- <source>Ok</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="baincomplexinstallerdialog.ui" line="103"/>
- <source>Cancel</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>CategoriesDialog</name>
- <message>
- <location filename="categoriesdialog.ui" line="14"/>
- <source>Categories</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="categoriesdialog.ui" line="66"/>
- <source>ID</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="categoriesdialog.ui" line="69"/>
- <source>Internal ID for the category.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="categoriesdialog.ui" line="72"/>
- <source>Internal ID for the category. The categories a mod belongs to are stored by this ID. It is recommended you use new IDs for categories you add instead of re-using existing ones.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="categoriesdialog.ui" line="77"/>
- <source>Name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="categoriesdialog.ui" line="80"/>
- <location filename="categoriesdialog.ui" line="83"/>
- <source>Name of the Categorie used for display.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="categoriesdialog.ui" line="88"/>
- <source>Nexus IDs</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="categoriesdialog.ui" line="91"/>
- <source>Comma-Separated list of Nexus IDs to be matched to the internal ID.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="categoriesdialog.ui" line="94"/>
- <source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
-&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
-p, li { white-space: pre-wrap; }
-&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;You can match one or multiple nexus categories to a internal ID. Whenever you download a mod from a Nexus Page, Mod Organizer will try to resolve the category defined on the Nexus to one available in MO.&lt;/span&gt;&lt;/p&gt;
-&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;&quot;&gt;&lt;/p&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;To find out a category id used by the nexus, visit the categories list of the nexus page and hover over the links there.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="categoriesdialog.ui" line="105"/>
- <source>Parent ID</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="categoriesdialog.ui" line="108"/>
- <source>If set, the category is defined as a sub-category of another one. Parent ID needs to be a valid category ID.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="categoriesdialog.cpp" line="239"/>
- <source>Add</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="categoriesdialog.cpp" line="240"/>
- <source>Remove</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>CredentialsDialog</name>
- <message>
- <location filename="credentialsdialog.ui" line="14"/>
- <source>Login</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="credentialsdialog.ui" line="20"/>
- <source>This feature may not work unless you&apos;re logged in with Nexus</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="credentialsdialog.ui" line="32"/>
- <source>Username</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="credentialsdialog.ui" line="46"/>
- <source>Password</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="credentialsdialog.ui" line="64"/>
- <source>Remember</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="credentialsdialog.ui" line="75"/>
- <source>Never ask again</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>DirectoryRefresher</name>
- <message>
- <location filename="directoryrefresher.cpp" line="99"/>
- <source>failed to read bsa: %1</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>DownloadList</name>
- <message>
- <location filename="downloadlist.cpp" line="63"/>
- <source>Name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="downloadlist.cpp" line="64"/>
- <source>Filetime</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="downloadlist.cpp" line="65"/>
- <source>Done</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="downloadlist.cpp" line="79"/>
- <source>Information missing, please select &quot;Query Info&quot; from the context menu to re-retrieve.</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>DownloadListWidget</name>
- <message>
- <location filename="downloadlistwidget.ui" line="17"/>
- <location filename="downloadlistwidget.ui" line="61"/>
- <source>Placeholder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="downloadlistwidget.ui" line="81"/>
- <source>0</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="downloadlistwidget.ui" line="88"/>
- <source>KB</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="downloadlistwidget.ui" line="99"/>
- <location filename="downloadlistwidget.cpp" line="145"/>
- <location filename="downloadlistwidget.cpp" line="147"/>
- <source>Done - Double Click to install</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="downloadlistwidget.cpp" line="111"/>
- <location filename="downloadlistwidget.cpp" line="113"/>
- <source>Paused - Double Click to resume</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="downloadlistwidget.cpp" line="131"/>
- <location filename="downloadlistwidget.cpp" line="133"/>
- <source>Installed - Double Click to re-install</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="downloadlistwidget.cpp" line="138"/>
- <location filename="downloadlistwidget.cpp" line="140"/>
- <source>Uninstalled - Double Click to re-install</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>DownloadListWidgetCompact</name>
- <message>
- <location filename="downloadlistwidgetcompact.ui" line="17"/>
- <location filename="downloadlistwidgetcompact.ui" line="56"/>
- <source>Placeholder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="downloadlistwidgetcompact.ui" line="122"/>
- <source>Done</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>DownloadListWidgetCompactDelegate</name>
- <message>
- <location filename="downloadlistwidgetcompact.cpp" line="120"/>
- <source>Paused</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="downloadlistwidgetcompact.cpp" line="123"/>
- <source>Fetching Info 1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="downloadlistwidgetcompact.cpp" line="125"/>
- <source>Fetching Info 2</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="downloadlistwidgetcompact.cpp" line="130"/>
- <source>Installed</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="downloadlistwidgetcompact.cpp" line="133"/>
- <source>Uninstalled</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="downloadlistwidgetcompact.cpp" line="136"/>
- <source>Done</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="downloadlistwidgetcompact.cpp" line="215"/>
- <location filename="downloadlistwidgetcompact.cpp" line="224"/>
- <location filename="downloadlistwidgetcompact.cpp" line="233"/>
- <location filename="downloadlistwidgetcompact.cpp" line="242"/>
- <source>Are you sure?</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="downloadlistwidgetcompact.cpp" line="216"/>
- <source>This will remove all finished downloads from this list and from disk.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="downloadlistwidgetcompact.cpp" line="225"/>
- <source>This will remove all installed downloads from this list and from disk.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="downloadlistwidgetcompact.cpp" line="234"/>
- <source>This will permanently remove all finished downloads from this list (but NOT from disk).</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="downloadlistwidgetcompact.cpp" line="243"/>
- <source>This will permanently remove all installed downloads from this list (but NOT from disk).</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="downloadlistwidgetcompact.cpp" line="269"/>
- <source>Install</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="downloadlistwidgetcompact.cpp" line="271"/>
- <source>Query Info</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="downloadlistwidgetcompact.cpp" line="273"/>
- <source>Delete</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="downloadlistwidgetcompact.cpp" line="274"/>
- <source>Remove from View</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="downloadlistwidgetcompact.cpp" line="276"/>
- <source>Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="downloadlistwidgetcompact.cpp" line="277"/>
- <source>Pause</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="downloadlistwidgetcompact.cpp" line="279"/>
- <source>Remove</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="downloadlistwidgetcompact.cpp" line="280"/>
- <source>Resume</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="downloadlistwidgetcompact.cpp" line="284"/>
- <source>Delete Installed...</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="downloadlistwidgetcompact.cpp" line="285"/>
- <source>Delete All...</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="downloadlistwidgetcompact.cpp" line="287"/>
- <source>Remove Installed...</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="downloadlistwidgetcompact.cpp" line="288"/>
- <source>Remove All...</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>DownloadListWidgetDelegate</name>
- <message>
- <location filename="downloadlistwidget.cpp" line="118"/>
- <source>Fetching Info 1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="downloadlistwidget.cpp" line="121"/>
- <source>Fetching Info 2</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="downloadlistwidget.cpp" line="228"/>
- <location filename="downloadlistwidget.cpp" line="237"/>
- <location filename="downloadlistwidget.cpp" line="246"/>
- <location filename="downloadlistwidget.cpp" line="255"/>
- <source>Are you sure?</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="downloadlistwidget.cpp" line="229"/>
- <source>This will remove all finished downloads from this list and from disk.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="downloadlistwidget.cpp" line="238"/>
- <source>This will remove all installed downloads from this list and from disk.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="downloadlistwidget.cpp" line="247"/>
- <source>This will remove all finished downloads from this list (but NOT from disk).</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="downloadlistwidget.cpp" line="256"/>
- <source>This will remove all installed downloads from this list (but NOT from disk).</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="downloadlistwidget.cpp" line="281"/>
- <source>Install</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="downloadlistwidget.cpp" line="283"/>
- <source>Query Info</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="downloadlistwidget.cpp" line="285"/>
- <source>Delete</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="downloadlistwidget.cpp" line="286"/>
- <source>Remove from View</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="downloadlistwidget.cpp" line="288"/>
- <source>Cancel</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="downloadlistwidget.cpp" line="289"/>
- <source>Pause</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="downloadlistwidget.cpp" line="291"/>
- <source>Remove</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="downloadlistwidget.cpp" line="292"/>
- <source>Resume</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="downloadlistwidget.cpp" line="296"/>
- <source>Delete Installed...</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="downloadlistwidget.cpp" line="297"/>
- <source>Delete All...</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="downloadlistwidget.cpp" line="299"/>
- <source>Remove Installed...</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="downloadlistwidget.cpp" line="300"/>
- <source>Remove All...</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>DownloadManager</name>
- <message>
- <location filename="downloadmanager.cpp" line="125"/>
- <source>failed to rename &quot;%1&quot; to &quot;%2&quot;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="downloadmanager.cpp" line="306"/>
- <source>Download again?</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="downloadmanager.cpp" line="306"/>
- <source>A file with the same name has already been downloaded. Do you want to download it again? The new file will receive a different name.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="downloadmanager.cpp" line="336"/>
- <source>failed to download %1: could not open output file: %2</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="downloadmanager.cpp" line="366"/>
- <location filename="downloadmanager.cpp" line="585"/>
- <location filename="downloadmanager.cpp" line="595"/>
- <location filename="downloadmanager.cpp" line="604"/>
- <location filename="downloadmanager.cpp" line="614"/>
- <location filename="downloadmanager.cpp" line="624"/>
- <location filename="downloadmanager.cpp" line="634"/>
- <location filename="downloadmanager.cpp" line="645"/>
- <location filename="downloadmanager.cpp" line="654"/>
- <location filename="downloadmanager.cpp" line="664"/>
- <location filename="downloadmanager.cpp" line="679"/>
- <source>invalid index</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="downloadmanager.cpp" line="384"/>
- <source>failed to delete %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="downloadmanager.cpp" line="390"/>
- <source>failed to delete meta file for %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="downloadmanager.cpp" line="450"/>
- <location filename="downloadmanager.cpp" line="468"/>
- <location filename="downloadmanager.cpp" line="481"/>
- <location filename="downloadmanager.cpp" line="494"/>
- <location filename="downloadmanager.cpp" line="505"/>
- <location filename="downloadmanager.cpp" line="540"/>
- <source>invalid index %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="downloadmanager.cpp" line="557"/>
- <source>Please enter the nexus mod id</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="downloadmanager.cpp" line="557"/>
- <source>Mod ID:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="downloadmanager.cpp" line="899"/>
- <source>Information updated</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="downloadmanager.cpp" line="901"/>
- <location filename="downloadmanager.cpp" line="915"/>
- <source>No matching file found on Nexus! Maybe this file is no longer available or it was renamed?</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="downloadmanager.cpp" line="903"/>
- <source>No file on Nexus matches the selected file by name. Please manually choose the correct one.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="downloadmanager.cpp" line="1032"/>
- <source>No download server available. Please try again later.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="downloadmanager.cpp" line="1074"/>
- <source>Failed to request file info from nexus: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="downloadmanager.cpp" line="1097"/>
- <source>Download failed: %1 (%2)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="downloadmanager.cpp" line="1174"/>
- <source>failed to re-open %1</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>EditExecutablesDialog</name>
- <message>
- <location filename="editexecutablesdialog.ui" line="14"/>
- <source>Modify Executables</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="editexecutablesdialog.ui" line="20"/>
- <source>List of configured executables</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="editexecutablesdialog.ui" line="23"/>
- <source>This is a list of your configured executables. Executables in grey are automatically recognised and can not be modified.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="editexecutablesdialog.ui" line="38"/>
- <source>Title</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="editexecutablesdialog.ui" line="45"/>
- <location filename="editexecutablesdialog.ui" line="48"/>
- <source>Name of the executable. This is only for display purposes.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="editexecutablesdialog.ui" line="59"/>
- <source>Binary</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="editexecutablesdialog.ui" line="66"/>
- <location filename="editexecutablesdialog.ui" line="69"/>
- <source>Binary to run</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="editexecutablesdialog.ui" line="76"/>
- <source>Browse filesystem</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="editexecutablesdialog.ui" line="79"/>
- <source>Browse filesystem for the executable to run.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="editexecutablesdialog.ui" line="82"/>
- <location filename="editexecutablesdialog.ui" line="103"/>
- <source>...</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="editexecutablesdialog.ui" line="93"/>
- <source>Start in</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="editexecutablesdialog.ui" line="114"/>
- <source>Arguments</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="editexecutablesdialog.ui" line="121"/>
- <location filename="editexecutablesdialog.ui" line="124"/>
- <source>Arguments to pass to the application</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="editexecutablesdialog.ui" line="135"/>
- <source>Allow the Steam AppID to be used for this executable to be changed.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="editexecutablesdialog.ui" line="138"/>
- <source>Allow the Steam AppID to be used for this executable to be changed.
-Every game/tool distributed through Steam has a unique ID. MO needs to know this ID to start those programs directly, otherwise the program is started by steam and then MO will not work. By default, MO will use the AppID for the game.
-Right now the only case I know of where this needs to be overwritten is for the Skyrim Creation Kit which has its own AppID. This overwrite is already preconfigured.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="editexecutablesdialog.ui" line="143"/>
- <source>Overwrite Steam AppID</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="editexecutablesdialog.ui" line="153"/>
- <source>Steam AppID to use for this executable that differs from the games AppID.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="editexecutablesdialog.ui" line="156"/>
- <source>Steam AppID to use for this executable that differs from the games AppID.
-Every game/tool distributed through Steam has a unique ID. MO needs to know this ID to start those programs directly, otherwise the program is started by steam and then MO will not work. By default, MO will use the AppID for the game (usually 72850).
-Right now the only case I know of where this needs to be overwritten is for the Skyrim Creation Kit which has its own AppID (usually 202480). This overwrite is already preconfigured.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="editexecutablesdialog.ui" line="169"/>
- <location filename="editexecutablesdialog.ui" line="172"/>
- <location filename="editexecutablesdialog.cpp" line="220"/>
- <source>If checked, MO will be closed once the specified executable is run.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="editexecutablesdialog.ui" line="175"/>
- <source>Close MO when started</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="editexecutablesdialog.ui" line="182"/>
- <location filename="editexecutablesdialog.ui" line="185"/>
- <source>Add an executable</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="editexecutablesdialog.ui" line="188"/>
- <location filename="editexecutablesdialog.cpp" line="190"/>
- <source>Add</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="editexecutablesdialog.ui" line="199"/>
- <location filename="editexecutablesdialog.ui" line="202"/>
- <source>Remove the selected executable</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="editexecutablesdialog.ui" line="205"/>
- <source>Remove</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="editexecutablesdialog.cpp" line="119"/>
- <source>Select a binary</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="editexecutablesdialog.cpp" line="119"/>
- <source>Executable (%1)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="editexecutablesdialog.cpp" line="143"/>
- <source>Java (32-bit) required</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="editexecutablesdialog.cpp" line="144"/>
- <source>MO requires 32-bit java to run this application. If you already have it installed, select javaw.exe from that installation as the binary.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="editexecutablesdialog.cpp" line="160"/>
- <source>Select a directory</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="editexecutablesdialog.cpp" line="169"/>
- <source>Confirm</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="editexecutablesdialog.cpp" line="169"/>
- <source>Really remove &quot;%1&quot; from executables?</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="editexecutablesdialog.cpp" line="194"/>
- <source>Modify</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="editexecutablesdialog.cpp" line="217"/>
- <source>MO must be kept running or this application will not work correctly.</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>FindDialog</name>
- <message>
- <location filename="finddialog.ui" line="14"/>
- <source>Find</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="finddialog.ui" line="24"/>
- <source>Find what:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="finddialog.ui" line="31"/>
- <location filename="finddialog.ui" line="34"/>
- <source>Search term</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="finddialog.ui" line="47"/>
- <location filename="finddialog.ui" line="50"/>
- <source>Find next occurence from current file position.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="finddialog.ui" line="53"/>
- <source>&amp;Find Next</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="finddialog.ui" line="60"/>
- <location filename="finddialog.ui" line="63"/>
- <location filename="finddialog.ui" line="66"/>
- <source>Close</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>FomodInstallerDialog</name>
- <message>
- <location filename="fomodinstallerdialog.ui" line="14"/>
- <source>FOMOD Installation Dialog</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="fomodinstallerdialog.ui" line="22"/>
- <source>Name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="fomodinstallerdialog.ui" line="46"/>
- <source>Author</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="fomodinstallerdialog.ui" line="60"/>
- <source>Version</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="fomodinstallerdialog.ui" line="74"/>
- <source>Website</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="fomodinstallerdialog.ui" line="81"/>
- <source>&lt;a href=&quot;#&quot;&gt;Link&lt;/a&gt;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="fomodinstallerdialog.ui" line="160"/>
- <source>Manual</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="fomodinstallerdialog.ui" line="170"/>
- <source>Back</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="fomodinstallerdialog.ui" line="177"/>
- <source>Next</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="fomodinstallerdialog.ui" line="184"/>
- <source>Cancel</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>InstallDialog</name>
- <message>
- <location filename="installdialog.ui" line="20"/>
- <source>Install Mods</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="installdialog.ui" line="32"/>
- <source>New Mod</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="installdialog.ui" line="46"/>
- <source>Name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="installdialog.ui" line="53"/>
- <source>Pick a name for the mod</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="installdialog.ui" line="56"/>
- <source>Pick a name for the mod. This is also used as a directory name, so please don&apos;t use characters that are illegal in file names.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="installdialog.ui" line="65"/>
- <source>Content</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="installdialog.ui" line="75"/>
- <source>Content of the archive. You can change the directory structure by using drag&amp;drop. Hint: Also try right clicking...</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="installdialog.ui" line="78"/>
- <source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
-&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
-p, li { white-space: pre-wrap; }
-&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;This displays the content of the archive. &amp;lt;data&amp;gt; represents the base directory which will map to the game&apos;s data directory. You can change the base directory via the right-click context menu and you can move around files via drag&amp;amp;drop&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="installdialog.ui" line="121"/>
- <source>Placeholder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="installdialog.ui" line="141"/>
- <source>OK</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="installdialog.ui" line="148"/>
- <source>Cancel</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>InstallationManager</name>
- <message>
- <location filename="installationmanager.cpp" line="75"/>
- <source>archive.dll not loaded: &quot;%1&quot;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="installationmanager.cpp" line="97"/>
- <source>Password required</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="installationmanager.cpp" line="97"/>
- <source>Password</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="installationmanager.cpp" line="164"/>
- <location filename="installationmanager.cpp" line="252"/>
- <location filename="installationmanager.cpp" line="530"/>
- <source>Extracting files</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="installationmanager.cpp" line="443"/>
- <source>failed to create backup</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="installationmanager.cpp" line="449"/>
- <source>Mod Name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="installationmanager.cpp" line="449"/>
- <source>Name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="installationmanager.cpp" line="502"/>
- <source>Invalid name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="installationmanager.cpp" line="503"/>
- <source>The name you entered is invalid, please enter a different one.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="installationmanager.cpp" line="624"/>
- <source>File format &quot;%1&quot; not supported</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="installationmanager.cpp" line="750"/>
- <source>None of the available installer plugins were able to handle that archive</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="installationmanager.cpp" line="760"/>
- <source>no error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="installationmanager.cpp" line="763"/>
- <source>7z.dll not found</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="installationmanager.cpp" line="766"/>
- <source>7z.dll isn&apos;t valid</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="installationmanager.cpp" line="769"/>
- <source>archive not found</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="installationmanager.cpp" line="772"/>
- <source>failed to open archive</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="installationmanager.cpp" line="775"/>
- <source>unsupported archive type</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="installationmanager.cpp" line="778"/>
- <source>internal library error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="installationmanager.cpp" line="781"/>
- <source>archive invalid</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="installationmanager.cpp" line="785"/>
- <source>unknown archive error</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>LockedDialog</name>
- <message>
- <location filename="lockeddialog.ui" line="14"/>
- <source>Locked</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="lockeddialog.ui" line="20"/>
- <source>This dialog should disappear automatically if the application/game is done. Click unlock if it didn&apos;t.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="lockeddialog.ui" line="23"/>
- <source>MO is locked while the executable is running.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="lockeddialog.ui" line="51"/>
- <source>Unlock</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>LogBuffer</name>
- <message>
- <location filename="logbuffer.cpp" line="72"/>
- <source>failed to write log to %1: %2</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>MOApplication</name>
- <message>
- <location filename="moapplication.cpp" line="60"/>
- <source>an error occured: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="moapplication.cpp" line="65"/>
- <source>an error occured</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>MainWindow</name>
- <message>
- <location filename="mainwindow.ui" line="51"/>
- <location filename="mainwindow.ui" line="392"/>
- <source>Categories</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.ui" line="128"/>
- <source>Profile</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.ui" line="138"/>
- <source>Pick a module collection</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.ui" line="141"/>
- <source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
-&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
-p, li { white-space: pre-wrap; }
-&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Create profiles here. Each profile contains its own list of active mods and esps. This way you can quickly switch between setups for different play throughs.&lt;/span&gt;&lt;/p&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Please note that right now your esp load order is not kept seperate for different profiles.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.ui" line="159"/>
- <source>Refresh list</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.ui" line="162"/>
- <source>Refresh list. This is usually not necessary unless you modified data outside the program.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.ui" line="278"/>
- <source>List of available mods.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.ui" line="281"/>
- <source>This is a list of installed mods. Use the checkboxes to activate/deactivate mods and drag &amp; drop mods to change their &quot;installation&quot; orders.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.ui" line="366"/>
- <source>Filter</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.ui" line="387"/>
- <source>No groups</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.ui" line="397"/>
- <source>Nexus IDs</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.ui" line="405"/>
- <location filename="mainwindow.ui" line="722"/>
- <location filename="mainwindow.ui" line="1027"/>
- <source>Namefilter</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.ui" line="440"/>
- <source>Pick a program to run.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.ui" line="443"/>
- <source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
-&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
-p, li { white-space: pre-wrap; }
-&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Choose the program to run. Once you start using ModOrganizer, you should always run your game and tools from here or through shortcuts created here, otherwise mods installed through MO will not be visible.&lt;/span&gt;&lt;/p&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;You can add new Tools to this list, but I can&apos;t promise tools I haven&apos;t tested will work.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.ui" line="491"/>
- <source>Run program</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.ui" line="494"/>
- <source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
-&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
-p, li { white-space: pre-wrap; }
-&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Run the selected program with ModOrganizer enabled.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.ui" line="504"/>
- <source>Run</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.ui" line="545"/>
- <source>Create a shortcut in your start menu or on the desktop to the specified program</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.ui" line="548"/>
- <source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
-&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
-p, li { white-space: pre-wrap; }
-&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;This creates a start menu shortcut that directly starts the selected program with the MO active.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.ui" line="555"/>
- <source>Shortcut</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.ui" line="669"/>
- <source>List of available esp/esm files</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.ui" line="672"/>
- <source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
-&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
-p, li { white-space: pre-wrap; }
-&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;This list contains the esps and esms contained in the active mods. These require their own load order. Use drag&amp;amp;drop to modify this load order. Please note that MO will only save the load order for mods that are active/checked.&lt;br /&gt;There is a great tool named &amp;quot;BOSS&amp;quot; to automatically sort these files.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.ui" line="751"/>
- <source>List of available BS Archives. Archives not checked here are not managed by MO and ignore installation order.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.ui" line="754"/>
- <source>BSA files are archives (comparable to .zip files) that contain data assets (meshes, textures, ...) to be used by the game. As such they &quot;compete&quot; with loose files in your data directory over which is loaded.
-By default, BSAs that share their base name with an enabled ESP (i.e. plugin.esp and plugin.bsa) are automatically loaded and will have precedence over all loose files, the installation order you set up to the left is then ignored!
-
-BSAs checked here are loaded in such a way that your installation order is obeyed properly.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.ui" line="794"/>
- <location filename="mainwindow.ui" line="868"/>
- <source>File</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.ui" line="799"/>
- <location filename="mainwindow.ui" line="873"/>
- <source>Mod</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.ui" line="807"/>
- <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Marked Archives (&lt;img src=&quot;:/MO/gui/resources/dialog-warning_16.png&quot;/&gt;) are still loaded on Skyrim but the &lt;a href=&quot;http://forums.bethsoft.com/topic/1354395-update-bsas-and-you/&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;regular file override&lt;/span&gt;&lt;/a&gt; mechanism will apply: Loose files override BSAs, no matter the mod/plugin priority.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.ui" line="818"/>
- <source>Data</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.ui" line="836"/>
- <source>refresh data-directory overview</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.ui" line="839"/>
- <source>Refresh the overview. This may take a moment.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.ui" line="842"/>
- <location filename="mainwindow.cpp" line="3328"/>
- <location filename="mainwindow.cpp" line="4059"/>
- <source>Refresh</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.ui" line="858"/>
- <source>This is an overview of your data directory as visible to the game (and tools). </source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.ui" line="883"/>
- <location filename="mainwindow.ui" line="886"/>
- <source>Filter the above list so that only conflicts are displayed.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.ui" line="889"/>
- <source>Show only conflicts</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.ui" line="897"/>
- <source>Saves</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.ui" line="921"/>
- <source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
-&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
-p, li { white-space: pre-wrap; }
-&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;This is a list of all savegames for this game. Hover over a list entry to get detailed information about the save including a list of esps/esms that were used at the time this save was created but aren&apos;t active now.&lt;/span&gt;&lt;/p&gt;
-&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;&quot;&gt;&lt;/p&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;If you click &amp;quot;Fix Mods...&amp;quot; in the context menu, MO will try to activate all mods and esps to fix those missing esps. It will not disable anything!&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.ui" line="935"/>
- <source>Downloads</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.ui" line="967"/>
- <source>This is a list of mods you downloaded from Nexus. Double click one to install it.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.ui" line="1020"/>
- <source>Compact</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.ui" line="1051"/>
- <source>Tool Bar</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.ui" line="1093"/>
- <source>Install Mod</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.ui" line="1096"/>
- <source>Install &amp;Mod</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.ui" line="1099"/>
- <source>Install a new mod from an archive</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.ui" line="1102"/>
- <source>Ctrl+M</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.ui" line="1111"/>
- <source>Profiles</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.ui" line="1114"/>
- <source>&amp;Profiles</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.ui" line="1117"/>
- <source>Configure Profiles</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.ui" line="1120"/>
- <source>Ctrl+P</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.ui" line="1129"/>
- <source>Executables</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.ui" line="1132"/>
- <source>&amp;Executables</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.ui" line="1135"/>
- <source>Configure the executables that can be started through Mod Organizer</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.ui" line="1138"/>
- <source>Ctrl+E</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.ui" line="1147"/>
- <location filename="mainwindow.ui" line="1153"/>
- <source>Tools</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.ui" line="1150"/>
- <source>&amp;Tools</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.ui" line="1156"/>
- <source>Ctrl+I</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.ui" line="1165"/>
- <source>Settings</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.ui" line="1168"/>
- <source>&amp;Settings</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.ui" line="1171"/>
- <source>Configure settings and workarounds</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.ui" line="1174"/>
- <source>Ctrl+S</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.ui" line="1183"/>
- <source>Nexus</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.ui" line="1186"/>
- <source>Search nexus network for more mods</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.ui" line="1189"/>
- <source>Ctrl+N</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.ui" line="1201"/>
- <location filename="mainwindow.cpp" line="4007"/>
- <source>Update</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.ui" line="1204"/>
- <source>Mod Organizer is up-to-date</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.ui" line="1216"/>
- <location filename="mainwindow.cpp" line="478"/>
- <source>No Problems</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.ui" line="1219"/>
- <source>This button will be highlighted if MO discovered potential problems in your setup and provide tips on how to fix them.
-
-!Work in progress!
-Right now this has very limited functionality</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.ui" line="1231"/>
- <location filename="mainwindow.ui" line="1234"/>
- <source>Help</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.ui" line="1237"/>
- <source>Ctrl+H</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.ui" line="1246"/>
- <source>Endorse MO</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.ui" line="1249"/>
- <location filename="mainwindow.cpp" line="4087"/>
- <source>Endorse Mod Organizer</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="204"/>
- <source>Toolbar</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="205"/>
- <source>Desktop</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="206"/>
- <source>Start Menu</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="475"/>
- <source>Problems</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="476"/>
- <source>There are potential problems with your setup</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="479"/>
- <source>Everything seems to be in order</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="531"/>
- <source>Help on UI</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="535"/>
- <source>Documentation Wiki</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="539"/>
- <source>Report Issue</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="543"/>
- <source>Tutorials</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="600"/>
- <source>failed to save archives order, do you have write access to &quot;%1&quot;?</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="670"/>
- <source>failed to save load order: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="687"/>
- <source>Name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="688"/>
- <source>Please enter a name for the new profile</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="696"/>
- <source>failed to create profile: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="739"/>
- <source>Show tutorial?</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="740"/>
- <source>You are starting Mod Organizer for the first time. Do you want to show a tutorial of its basic features? If you choose no you can always start the tutorial from the &quot;Help&quot;-menu.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="769"/>
- <source>Downloads in progress</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="770"/>
- <source>There are still downloads in progress, do you really want to quit?</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="816"/>
- <source>failed to read savegame: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="941"/>
- <source>Plugin &quot;%1&quot; failed: %2</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="943"/>
- <source>Plugin &quot;%1&quot; failed</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="1007"/>
- <source>failed to init plugin %1: %2</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="1183"/>
- <source>Failed to start &quot;%1&quot;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="1185"/>
- <source>Waiting</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="1185"/>
- <source>Please press OK once you&apos;re logged into steam.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="1197"/>
- <source>&quot;%1&quot; not found</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="1211"/>
- <source>Start Steam?</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="1212"/>
- <source>Steam is required to be running already to correctly start the game. Should MO try to start steam now?</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="1426"/>
- <source>Also in: &lt;br&gt;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="1437"/>
- <source>No conflict</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="1552"/>
- <source>&lt;Edit...&gt;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="1771"/>
- <source>This bsa is enabled in the ini file so it may be required!</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="1778"/>
- <source>This archive will still be loaded since there is a plugin of the same name but its files will not follow installation order!</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="1833"/>
- <source>Activating Network Proxy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="1962"/>
- <location filename="mainwindow.cpp" line="3755"/>
- <source>Installation successful</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="1973"/>
- <location filename="mainwindow.cpp" line="3768"/>
- <source>Configure Mod</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="1974"/>
- <location filename="mainwindow.cpp" line="3769"/>
- <source>This mod contains ini tweaks. Do you want to configure them now?</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="1980"/>
- <location filename="mainwindow.cpp" line="3775"/>
- <source>mod &quot;%1&quot; not found</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="1983"/>
- <location filename="mainwindow.cpp" line="3781"/>
- <source>Installation cancelled</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="1983"/>
- <location filename="mainwindow.cpp" line="3781"/>
- <source>The mod was not installed completely.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="2018"/>
- <source>Some plugins could not be loaded</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="2021"/>
- <location filename="mainwindow.cpp" line="2038"/>
- <source>Description missing</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="2030"/>
- <source>The following Plugins could not be loaded. The reason may be missing dependencies (i.e. python) or an outdated version:&lt;ul&gt;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="2060"/>
- <source>Choose Mod</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="2061"/>
- <source>Mod Archive</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="2214"/>
- <source>Start Tutorial?</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="2215"/>
- <source>You&apos;re about to start a tutorial. For technical reasons it&apos;s not possible to end the tutorial early. Continue?</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="2360"/>
- <location filename="mainwindow.cpp" line="3683"/>
- <source>Download started</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="2391"/>
- <source>failed to update mod list: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="2418"/>
- <source>failed to spawn notepad.exe: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="2459"/>
- <source>failed to open %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="2537"/>
- <source>failed to change origin name: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="2589"/>
- <source>&lt;Checked&gt;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="2590"/>
- <source>&lt;Unchecked&gt;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="2591"/>
- <source>&lt;Update&gt;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="2592"/>
- <source>&lt;No category&gt;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="2593"/>
- <source>&lt;Conflicted&gt;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="2626"/>
- <source>failed to rename mod: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="2639"/>
- <source>Overwrite?</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="2640"/>
- <source>This will replace the existing mod &quot;%1&quot;. Continue?</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="2643"/>
- <source>failed to remove mod &quot;%1&quot;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="2647"/>
- <location filename="mainwindow.cpp" line="3953"/>
- <location filename="mainwindow.cpp" line="3977"/>
- <source>failed to rename &quot;%1&quot; to &quot;%2&quot;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="2676"/>
- <source>Multiple esps activated, please check that they don&apos;t conflict.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="2702"/>
- <location filename="mainwindow.cpp" line="3243"/>
- <location filename="mainwindow.cpp" line="3252"/>
- <source>Confirm</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="2703"/>
- <source>Remove the following mods?&lt;br&gt;&lt;ul&gt;%1&lt;/ul&gt;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="2714"/>
- <source>failed to remove mod: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="2744"/>
- <location filename="mainwindow.cpp" line="2747"/>
- <source>Failed</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="2744"/>
- <source>Installation file no longer exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="2748"/>
- <source>Mods installed with old versions of MO can&apos;t be reinstalled in this way.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="2763"/>
- <location filename="mainwindow.cpp" line="2790"/>
- <source>You need to be logged in with Nexus to endorse</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="2906"/>
- <location filename="mainwindow.cpp" line="4335"/>
- <source>Extract BSA</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="2907"/>
- <source>This mod contains at least one BSA. Do you want to unpack it?
-(This removes the BSA after completion. If you don&apos;t know about BSAs, just select no)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="2917"/>
- <location filename="mainwindow.cpp" line="4292"/>
- <location filename="mainwindow.cpp" line="4343"/>
- <source>failed to read %1: %2</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="2930"/>
- <location filename="mainwindow.cpp" line="4354"/>
- <source>This archive contains invalid hashes. Some files may be broken.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="2964"/>
- <source>Nexus ID for this Mod is unknown</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="3005"/>
- <location filename="mainwindow.cpp" line="3339"/>
- <source>Create Mod...</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="3006"/>
- <source>This will move all files from overwrite into a new, regular mod.
-Please enter a name: </source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="3015"/>
- <source>A mod with this name already exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="3243"/>
- <source>Really enable all visible mods?</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="3252"/>
- <source>Really disable all visible mods?</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="3261"/>
- <source>Choose what to export</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="3263"/>
- <source>Everything</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="3263"/>
- <source>All installed mods are included in the list</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="3264"/>
- <source>Active Mods</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="3264"/>
- <source>Only active (checked) mods from your current profile are included</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="3265"/>
- <source>Visible</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="3265"/>
- <source>All mods visible in the mod list are included</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="3308"/>
- <source>export failed: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="3321"/>
- <source>Install Mod...</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="3323"/>
- <source>Enable all visible</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="3324"/>
- <source>Disable all visible</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="3326"/>
- <source>Check all for update</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="3330"/>
- <source>Export to csv...</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="3338"/>
- <source>Sync to Mods...</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="3342"/>
- <source>Restore Backup</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="3343"/>
- <source>Remove Backup...</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="3345"/>
- <source>Set Category</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="3349"/>
- <source>Primary Category</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="3353"/>
- <source>Rename Mod...</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="3354"/>
- <source>Remove Mod...</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="3355"/>
- <source>Reinstall Mod</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="3358"/>
- <source>Un-Endorse</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="3361"/>
- <location filename="mainwindow.cpp" line="3365"/>
- <source>Endorse</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="3362"/>
- <source>Won&apos;t endorse</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="3368"/>
- <source>Endorsement state unknown</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="3375"/>
- <source>Ignore missing data</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="3378"/>
- <source>Visit on Nexus</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="3379"/>
- <source>Open in explorer</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="3382"/>
- <source>Information...</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="3388"/>
- <location filename="mainwindow.cpp" line="4514"/>
- <source>Exception: </source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="3390"/>
- <location filename="mainwindow.cpp" line="4516"/>
- <source>Unknown exception</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="3410"/>
- <source>&lt;All&gt;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="3412"/>
- <source>&lt;Multiple&gt;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="3524"/>
- <source>Fix Mods...</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="3548"/>
- <location filename="mainwindow.cpp" line="3579"/>
- <source>failed to remove %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="3563"/>
- <location filename="mainwindow.cpp" line="3594"/>
- <source>failed to create %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="3615"/>
- <source>Can&apos;t change download directory while downloads are in progress!</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="3686"/>
- <source>Download failed</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="3830"/>
- <source>failed to write to file %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="3836"/>
- <source>%1 written</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="3875"/>
- <source>Select binary</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="3875"/>
- <source>Binary</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="3901"/>
- <source>Enter Name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="3902"/>
- <source>Please enter a name for the executable</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="3913"/>
- <source>Not an executable</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="3913"/>
- <source>This is not a recognized executable.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="3938"/>
- <location filename="mainwindow.cpp" line="3963"/>
- <source>Replace file?</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="3938"/>
- <source>There already is a hidden version of this file. Replace it?</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="3941"/>
- <location filename="mainwindow.cpp" line="3966"/>
- <source>File operation failed</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="3941"/>
- <location filename="mainwindow.cpp" line="3966"/>
- <source>Failed to remove &quot;%1&quot;. Maybe you lack the required file permissions?</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="3963"/>
- <source>There already is a visible version of this file. Replace it?</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="4009"/>
- <source>Update available</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="4046"/>
- <source>Open/Execute</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="4047"/>
- <source>Add as Executable</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="4051"/>
- <source>Un-Hide</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="4053"/>
- <source>Hide</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="4058"/>
- <source>Write To File...</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="4088"/>
- <source>Do you want to endorse Mod Organizer on %1 now?</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="4223"/>
- <source>Request to Nexus failed: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="4230"/>
- <location filename="mainwindow.cpp" line="4247"/>
- <source>login successful</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="4256"/>
- <source>login failed: %1. Trying to download anyway</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="4262"/>
- <source>login failed: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="4271"/>
- <source>login failed: %1. You need to log-in with Nexus to update MO.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="4304"/>
- <source>Error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="4304"/>
- <source>failed to extract %1 (errorcode %2)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="4399"/>
- <source>Extract...</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="4449"/>
- <source>Edit Categories...</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="4485"/>
- <source>Enable all</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="4486"/>
- <source>Disable all</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="4505"/>
- <source>Unlock load order</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="4508"/>
- <source>Lock load order</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>MessageDialog</name>
- <message>
- <location filename="messagedialog.ui" line="150"/>
- <location filename="messagedialog.ui" line="180"/>
- <source>Placeholder</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>ModInfo</name>
- <message>
- <location filename="modinfo.cpp" line="96"/>
- <location filename="modinfo.cpp" line="125"/>
- <source>invalid index %1</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>ModInfoBackup</name>
- <message>
- <location filename="modinfo.cpp" line="784"/>
- <source>This is the backup of a mod</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>ModInfoDialog</name>
- <message>
- <location filename="modinfodialog.ui" line="14"/>
- <source>Mod Info</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.ui" line="27"/>
- <source>Textfiles</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.ui" line="39"/>
- <source>A list of text-files in the mod directory.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.ui" line="42"/>
- <source>A list of text-files in the mod directory like readmes. </source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.ui" line="64"/>
- <location filename="modinfodialog.ui" line="149"/>
- <source>Save</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.ui" line="74"/>
- <source>INI-Files</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.ui" line="94"/>
- <source>This is a list of .ini files in the mod.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.ui" line="97"/>
- <source>This is a list of .ini files in the mod. These are usually used to configure the behaviour of mods if there are configurable parameters.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.ui" line="143"/>
- <source>Save changes to the file.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.ui" line="146"/>
- <source>Save changes to the file. This overwrites the original. There is no automatic backup!</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.ui" line="159"/>
- <source>Images</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.ui" line="214"/>
- <source>Images located in the mod.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.ui" line="217"/>
- <source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
-&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
-p, li { white-space: pre-wrap; }
-&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;This lists all the images (.jpg and .png) in the mod directory, like screenshots and such. Click one to get a larger view.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.ui" line="254"/>
- <location filename="modinfodialog.ui" line="277"/>
- <source>Optional ESPs</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.ui" line="260"/>
- <source>List of esps and esms that can not be loaded by the game.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.ui" line="263"/>
- <source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
-&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
-p, li { white-space: pre-wrap; }
-&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;List of esps and esms contained in this plugin that currently can not be loaded by the game. They will not even appear in the esp-list in the main MO-window.&lt;/span&gt;&lt;/p&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;They usually contain optional functionality, see the readme.&lt;/span&gt;&lt;/p&gt;
-&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;&quot;&gt;&lt;/p&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Most mods do not have optional esps, so chances are good you are looking at an empty list.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.ui" line="292"/>
- <source>Make the selected mod in the lower list unavailable.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.ui" line="295"/>
- <source>The selected esp (in the lower list) will be pushed into a subdirectory of the mod and will thus become &quot;invisible&quot; to the game. It can then no longer be activated.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.ui" line="321"/>
- <source>Move a file to the data directory.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.ui" line="324"/>
- <source>This moves a esp to the esp directory so it can be enabled in the main window. Please note that the ESP merely becomes &quot;available&quot;, it will not necessarily be loaded! That is configured in the main window of omo.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.ui" line="359"/>
- <source>ESPs in the data directory and thus visible to the game.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.ui" line="362"/>
- <source>These are the mod files that are in the (virtual) data directory of your game and will thus be selecteable in the esp list in the main window.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.ui" line="369"/>
- <source>Available ESPs</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.ui" line="377"/>
- <source>Conflicts</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.ui" line="385"/>
- <source>The following conflicted files are provided by this mod</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.ui" line="432"/>
- <location filename="modinfodialog.ui" line="479"/>
- <source>File</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.ui" line="437"/>
- <source>Overwritten Mods</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.ui" line="447"/>
- <source>The following conflicted files are provided by other mods</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.ui" line="484"/>
- <source>Providing Mod</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.ui" line="494"/>
- <source>Non-Conflicted files</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.ui" line="514"/>
- <source>Categories</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.ui" line="537"/>
- <source>Primary Category</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.ui" line="554"/>
- <source>Nexus Info</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.ui" line="562"/>
- <source>Mod ID</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.ui" line="569"/>
- <source>Mod ID for this mod on Nexus.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.ui" line="572"/>
- <source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
-&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
-p, li { white-space: pre-wrap; }
-&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Mod ID for this mod on Nexus. This is filled in automatically if you downloaded and installed the mod from inside MO. Otherwise you can enter it manually. To find the correct id, find the mod on nexus. The URL will look like this: &lt;/span&gt;&lt;a href=&quot; http://www.skyrimnexus.com/downloads/file.php?id=1334&quot;&gt;&lt;span style=&quot; font-size:8pt; text-decoration: underline; color:#0000ff;&quot;&gt;http://skyrim.nexusmods.com/downloads/file.php?id=1334&lt;/span&gt;&lt;/a&gt;&lt;a href=&quot;http://www.skyrimnexus.com/downloads/file.php?id=1334&quot;&gt;&lt;span style=&quot; font-size:8pt; color:#000000;&quot;&gt;. In this example, 1334 is the id you&apos;re looking for. Besides: The above is the link to Mod Organizer on the Nexus. Why not go there now and endorse?&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.ui" line="596"/>
- <source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
-&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
-p, li { white-space: pre-wrap; }
-&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Installed Version of the Mod. The tooltip will contain the current version available on nexus. The installed version is only set if you installed the mod through MO.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.ui" line="603"/>
- <source>Version</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.ui" line="633"/>
- <source>Refresh</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.ui" line="636"/>
- <source>Refresh all information from Nexus.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.ui" line="650"/>
- <source>Description</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.ui" line="665"/>
- <source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
-&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
-p, li { white-space: pre-wrap; }
-&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
-&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
-&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.ui" line="701"/>
- <source>Endorse</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.ui" line="715"/>
- <source>Notes</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.ui" line="725"/>
- <source>Filetree</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.ui" line="734"/>
- <source>A directory view of this mod</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.ui" line="737"/>
- <source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
-&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
-p, li { white-space: pre-wrap; }
-&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;This is a modifiable directory view of the mod directory. You can move around files using drag &amp;amp; drop and rename them (double click).&lt;/span&gt;&lt;/p&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Changes happen immediately on disc, so do&lt;/span&gt;&lt;span style=&quot; font-size:8pt; font-weight:600;&quot;&gt; be careful&lt;/span&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.ui" line="764"/>
- <source>Previous</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.ui" line="771"/>
- <source>Next</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.ui" line="791"/>
- <source>Close</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.cpp" line="108"/>
- <source>&amp;Delete</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.cpp" line="109"/>
- <source>&amp;Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.cpp" line="110"/>
- <source>&amp;Hide</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.cpp" line="111"/>
- <source>&amp;Unhide</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.cpp" line="112"/>
- <source>&amp;Open</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.cpp" line="113"/>
- <source>&amp;New Folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.cpp" line="352"/>
- <location filename="modinfodialog.cpp" line="367"/>
- <source>Save changes?</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.cpp" line="352"/>
- <location filename="modinfodialog.cpp" line="367"/>
- <source>Save changes to &quot;%1&quot;?</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.cpp" line="563"/>
- <source>File Exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.cpp" line="563"/>
- <source>A file with that name exists, please enter a new one</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.cpp" line="580"/>
- <source>failed to move file</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.cpp" line="605"/>
- <source>failed to create directory &quot;optional&quot;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.cpp" line="643"/>
- <location filename="modinfodialog.cpp" line="1155"/>
- <source>Info requested, please wait</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.cpp" line="697"/>
- <source>Main</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.cpp" line="698"/>
- <source>Update</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.cpp" line="699"/>
- <source>Optional</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.cpp" line="700"/>
- <source>Old</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.cpp" line="701"/>
- <source>Misc</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.cpp" line="702"/>
- <source>Unknown</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.cpp" line="713"/>
- <source>Current Version: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.cpp" line="717"/>
- <source>No update available</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.cpp" line="758"/>
- <source>(description incomplete, please visit nexus)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.cpp" line="779"/>
- <source>&lt;a href=&quot;%1&quot;&gt;Visit on Nexus&lt;/a&gt;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.cpp" line="858"/>
- <source>Failed to delete %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.cpp" line="869"/>
- <location filename="modinfodialog.cpp" line="874"/>
- <source>Confirm</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.cpp" line="869"/>
- <source>Are sure you want to delete &quot;%1&quot;?</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.cpp" line="874"/>
- <source>Are sure you want to delete the selected files?</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.cpp" line="948"/>
- <location filename="modinfodialog.cpp" line="954"/>
- <source>New Folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.cpp" line="960"/>
- <source>Failed to create &quot;%1&quot;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.cpp" line="1064"/>
- <location filename="modinfodialog.cpp" line="1088"/>
- <source>Replace file?</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.cpp" line="1064"/>
- <source>There already is a hidden version of this file. Replace it?</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.cpp" line="1067"/>
- <location filename="modinfodialog.cpp" line="1091"/>
- <source>File operation failed</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.cpp" line="1067"/>
- <location filename="modinfodialog.cpp" line="1091"/>
- <source>Failed to remove &quot;%1&quot;. Maybe you lack the required file permissions?</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.cpp" line="1078"/>
- <location filename="modinfodialog.cpp" line="1101"/>
- <source>failed to rename %1 to %2</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.cpp" line="1088"/>
- <source>There already is a visible version of this file. Replace it?</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.cpp" line="1135"/>
- <source>Un-Hide</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.cpp" line="1137"/>
- <source>Hide</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>ModInfoOverwrite</name>
- <message>
- <location filename="modinfo.cpp" line="821"/>
- <source>This pseudo mod contains files from the virtual data tree that got modified (i.e. by the construction kit)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfo.h" line="812"/>
- <source>Overwrite</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>ModInfoRegular</name>
- <message>
- <location filename="modinfo.cpp" line="392"/>
- <source>failed to write %1/meta.ini: %2</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfo.cpp" line="625"/>
- <source>%1 contains no esp/esm and no asset (textures, meshes, interface, ...) directory</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfo.cpp" line="629"/>
- <source>Categories: &lt;br&gt;</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>ModList</name>
- <message>
- <location filename="modlist.cpp" line="94"/>
- <source>Overwrite</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modlist.cpp" line="109"/>
- <source>This entry contains files that have been created inside the virtual data tree (i.e. by the construction kit)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modlist.cpp" line="118"/>
- <source>Backup</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modlist.cpp" line="119"/>
- <source>No valid game data</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modlist.cpp" line="120"/>
- <source>Not endorsed yet</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modlist.cpp" line="122"/>
- <source>Overwrites files</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modlist.cpp" line="123"/>
- <source>Overwritten files</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modlist.cpp" line="124"/>
- <source>Overwrites &amp; Overwritten</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modlist.cpp" line="125"/>
- <source>Redundant</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modlist.cpp" line="184"/>
- <source>invalid</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modlist.cpp" line="294"/>
- <source>installed version: %1, newest version: %2</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modlist.cpp" line="298"/>
- <source>Categories: &lt;br&gt;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modlist.cpp" line="327"/>
- <source>Invalid name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modlist.cpp" line="603"/>
- <source>drag&amp;drop failed: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modlist.cpp" line="662"/>
- <source>Confirm</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modlist.cpp" line="662"/>
- <source>Are you sure you want to remove &quot;%1&quot;?</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modlist.cpp" line="717"/>
- <source>Flags</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modlist.cpp" line="718"/>
- <source>Mod Name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modlist.cpp" line="719"/>
- <source>Version</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modlist.cpp" line="720"/>
- <source>Priority</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modlist.cpp" line="721"/>
- <source>Category</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modlist.cpp" line="722"/>
- <source>Nexus ID</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modlist.cpp" line="723"/>
- <source>Installation</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modlist.cpp" line="724"/>
- <location filename="modlist.cpp" line="740"/>
- <source>unknown</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modlist.cpp" line="732"/>
- <source>Name of your mods</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modlist.cpp" line="733"/>
- <source>Version of the mod (if available)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modlist.cpp" line="734"/>
- <source>Installation priority of your mod. The higher, the more &quot;important&quot; it is and thus overwrites files from mods with lower priority.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modlist.cpp" line="736"/>
- <source>Category of the mod.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modlist.cpp" line="737"/>
- <source>Id of the mod as used on Nexus.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modlist.cpp" line="738"/>
- <source>Emblemes to highlight things that might require attention.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modlist.cpp" line="739"/>
- <source>Time this mod was installed</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>MotDDialog</name>
- <message>
- <location filename="motddialog.ui" line="14"/>
- <source>Message of the Day</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="motddialog.ui" line="42"/>
- <source>OK</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>MyFileSystemModel</name>
- <message>
- <location filename="overwriteinfodialog.cpp" line="48"/>
- <source>Overwrites</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="overwriteinfodialog.cpp" line="60"/>
- <source>not implemented</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>NXMAccessManager</name>
- <message>
- <location filename="nxmaccessmanager.cpp" line="130"/>
- <source>timeout</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="nxmaccessmanager.cpp" line="168"/>
- <source>Please check your password</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>NexusInterface</name>
- <message>
- <location filename="nexusinterface.cpp" line="201"/>
- <source>Failed to guess mod id for &quot;%1&quot;, please pick the correct one</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="nexusinterface.cpp" line="421"/>
- <source>empty response</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="nexusinterface.cpp" line="450"/>
- <source>invalid response</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>OverwriteInfoDialog</name>
- <message>
- <location filename="overwriteinfodialog.ui" line="14"/>
- <source>Overwrite</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="overwriteinfodialog.ui" line="39"/>
- <source>You can use drag&amp;drop to move files and directories to regular mods.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="overwriteinfodialog.cpp" line="90"/>
- <source>&amp;Delete</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="overwriteinfodialog.cpp" line="91"/>
- <source>&amp;Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="overwriteinfodialog.cpp" line="92"/>
- <source>&amp;Open</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="overwriteinfodialog.cpp" line="93"/>
- <source>&amp;New Folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="overwriteinfodialog.cpp" line="137"/>
- <source>Failed to delete &quot;%1&quot;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="overwriteinfodialog.cpp" line="148"/>
- <location filename="overwriteinfodialog.cpp" line="153"/>
- <source>Confirm</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="overwriteinfodialog.cpp" line="148"/>
- <source>Are sure you want to delete &quot;%1&quot;?</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="overwriteinfodialog.cpp" line="153"/>
- <source>Are sure you want to delete the selected files?</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="overwriteinfodialog.cpp" line="203"/>
- <location filename="overwriteinfodialog.cpp" line="209"/>
- <source>New Folder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="overwriteinfodialog.cpp" line="215"/>
- <source>Failed to create &quot;%1&quot;</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>PluginList</name>
- <message>
- <location filename="pluginlist.cpp" line="96"/>
- <source>Name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="pluginlist.cpp" line="97"/>
- <source>Priority</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="pluginlist.cpp" line="98"/>
- <source>Mod Index</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="pluginlist.cpp" line="99"/>
- <location filename="pluginlist.cpp" line="111"/>
- <source>unknown</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="pluginlist.cpp" line="107"/>
- <source>Name of your mods</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="pluginlist.cpp" line="108"/>
- <source>Load priority of your mod. The higher, the more &quot;important&quot; it is and thus overwrites data from plugins with lower priority.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="pluginlist.cpp" line="110"/>
- <source>The modindex determins the formids of objects originating from this mods.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="pluginlist.cpp" line="208"/>
- <source>esp not found: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="pluginlist.cpp" line="215"/>
- <location filename="pluginlist.cpp" line="227"/>
- <source>Confirm</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="pluginlist.cpp" line="215"/>
- <source>Really enable all plugins?</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="pluginlist.cpp" line="227"/>
- <source>Really disable all plugins?</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="pluginlist.cpp" line="353"/>
- <source>The file containing locked plugin indices is broken</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="pluginlist.cpp" line="366"/>
- <location filename="pluginlist.cpp" line="405"/>
- <source>failed to open output file: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="pluginlist.cpp" line="393"/>
- <source>Some of your plugins have invalid names! These plugins can not be loaded by the game. Please see mo_interface.log for a list of affected plugins and rename them.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="pluginlist.cpp" line="631"/>
- <source>This plugin can&apos;t be disabled (enforced by the game)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="pluginlist.cpp" line="633"/>
- <source>Origin: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="pluginlist.cpp" line="737"/>
- <source>failed to restore load order for %1</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>ProblemsDialog</name>
- <message>
- <location filename="problemsdialog.ui" line="14"/>
- <source>Problems</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="problemsdialog.ui" line="49"/>
- <source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
-&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
-p, li { white-space: pre-wrap; }
-&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:7.8pt; font-weight:400; font-style:normal;&quot;&gt;
-&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="problemsdialog.cpp" line="29"/>
- <source>fix</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="problemsdialog.cpp" line="30"/>
- <source>Fix</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="problemsdialog.cpp" line="34"/>
- <source>No guided fix</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>Profile</name>
- <message>
- <location filename="profile.cpp" line="56"/>
- <source>invalid profile name %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="profile.cpp" line="60"/>
- <source>failed to create %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="profile.cpp" line="152"/>
- <source>failed to open &quot;%1&quot; for writing</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="profile.cpp" line="189"/>
- <source>failed to update tweaked ini file, wrong settings may be used: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="profile.cpp" line="219"/>
- <source>failed to create tweaked ini: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="profile.cpp" line="271"/>
- <location filename="profile.cpp" line="300"/>
- <location filename="profile.cpp" line="384"/>
- <location filename="profile.cpp" line="402"/>
- <location filename="profile.cpp" line="412"/>
- <source>invalid index %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="profile.cpp" line="365"/>
- <source>Overwrite directory couldn&apos;t be parsed</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="profile.cpp" line="374"/>
- <source>invalid priority %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="profile.cpp" line="561"/>
- <source>failed to parse ini file (%1)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="profile.cpp" line="589"/>
- <source>failed to parse ini file (%1): %2</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="profile.cpp" line="613"/>
- <location filename="profile.cpp" line="650"/>
- <source>failed to modify &quot;%1&quot;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="profile.cpp" line="678"/>
- <source>Delete savegames?</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="profile.cpp" line="679"/>
- <source>Do you want to delete local savegames? (If you select &quot;No&quot;, the save games will show up again if you re-enable local savegames)</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>ProfileInputDialog</name>
- <message>
- <location filename="profileinputdialog.ui" line="14"/>
- <source>Dialog</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="profileinputdialog.ui" line="20"/>
- <source>Please enter a name for the new profile</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="profileinputdialog.ui" line="30"/>
- <source>If checked, the new profile will use the default game settings.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="profileinputdialog.ui" line="33"/>
- <source>If checked, the new profile will use the default game settings instead of the &quot;global&quot; settings. Global settings are the settings you configure when running the game launcher directly, without MO.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="profileinputdialog.ui" line="36"/>
- <source>Default Game Settings</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>ProfilesDialog</name>
- <message>
- <location filename="profilesdialog.ui" line="14"/>
- <source>Profiles</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="profilesdialog.ui" line="22"/>
- <source>List of Profiles</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="profilesdialog.ui" line="25"/>
- <source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
-&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
-p, li { white-space: pre-wrap; }
-&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;This is the list of profiles. Each Profile contains its own list and installation order of enabled mods (from a shared pool), a configuration of enabled esps/esms, a copy of the games ini-file and an optional savegame filter.&lt;/p&gt;
-&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;/p&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;Note&lt;/span&gt; For technical reasons it&apos;s currently not possible to have seperate load-orders for esps. This means you can&apos;t load moda.esp before modb.esp in one profile and the other way around in another.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="profilesdialog.ui" line="38"/>
- <location filename="profilesdialog.ui" line="41"/>
- <source>If checked, savegames are local to this profile and will not appear when starting with a different profile.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="profilesdialog.ui" line="44"/>
- <source>Local Savegames</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="profilesdialog.ui" line="51"/>
- <source>This ensures data files from mods are actually used. You want to enable this unless you use a different tool for Archive Invalidation.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="profilesdialog.ui" line="54"/>
- <source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
-&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
-p, li { white-space: pre-wrap; }
-&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;The games Oblivion, Fallout 3 and Fallout NV contain a bug which prevents texture and mesh replacers (that is: all modifications to meshes and textures already in game) from working.&lt;/span&gt;&lt;/p&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;The Mod Organizer uses a workaround called &amp;quot;BSA redirection&amp;quot; (google is your friend) to fix this issue reliably and without further work. Simply activate and forget.&lt;/span&gt;&lt;/p&gt;
-&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;&quot;&gt;&lt;/p&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;With Skyrim this bug seems to be fixed to a degree but whether a mod becomes active still depends on file dates. Therefore, it still makes sense to activate this.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="profilesdialog.ui" line="64"/>
- <source>Automatic Archive Invalidation</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="profilesdialog.ui" line="75"/>
- <location filename="profilesdialog.ui" line="78"/>
- <source>Create a new profile from scratch</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="profilesdialog.ui" line="81"/>
- <source>Create</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="profilesdialog.ui" line="91"/>
- <source>Clone the selected profile</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="profilesdialog.ui" line="94"/>
- <source>This creates a new profile with the same settings and active mods as the selected one.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="profilesdialog.ui" line="97"/>
- <source>Copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="profilesdialog.ui" line="107"/>
- <location filename="profilesdialog.ui" line="110"/>
- <source>Delete the selected Profile. This can not be un-done!</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="profilesdialog.ui" line="113"/>
- <source>Remove</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="profilesdialog.ui" line="123"/>
- <source>Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="profilesdialog.ui" line="133"/>
- <location filename="profilesdialog.ui" line="136"/>
- <source>Transfer save games to the selected profile.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="profilesdialog.ui" line="139"/>
- <source>Transfer Saves</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="profilesdialog.ui" line="162"/>
- <source>Close</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="profilesdialog.cpp" line="61"/>
- <source>Archive invalidation isn&apos;t required for this game.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="profilesdialog.cpp" line="99"/>
- <location filename="profilesdialog.cpp" line="144"/>
- <source>failed to create profile: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="profilesdialog.cpp" line="152"/>
- <source>Name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="profilesdialog.cpp" line="152"/>
- <source>Please enter a name for the new profile</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="profilesdialog.cpp" line="160"/>
- <source>failed to copy profile: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="profilesdialog.cpp" line="167"/>
- <source>Confirm</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="profilesdialog.cpp" line="167"/>
- <source>Are you sure you want to remove this profile?</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="profilesdialog.cpp" line="196"/>
- <source>Rename Profile</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="profilesdialog.cpp" line="196"/>
- <source>New Name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="profilesdialog.cpp" line="233"/>
- <source>failed to change archive invalidation state: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="profilesdialog.cpp" line="270"/>
- <source>failed to determine if invalidation is active: %1</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>QObject</name>
- <message>
- <location filename="categories.cpp" line="133"/>
- <source>Failed to save custom categories</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="categories.cpp" line="210"/>
- <location filename="categories.cpp" line="245"/>
- <location filename="categories.cpp" line="255"/>
- <location filename="categories.cpp" line="265"/>
- <source>invalid index %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="categories.cpp" line="276"/>
- <source>invalid category id %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="csvbuilder.cpp" line="70"/>
- <source>invalid field name &quot;%1&quot;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="csvbuilder.cpp" line="76"/>
- <source>invalid type for &quot;%1&quot; (should be integer)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="csvbuilder.cpp" line="81"/>
- <source>invalid type for &quot;%1&quot; (should be string)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="csvbuilder.cpp" line="86"/>
- <source>invalid type for &quot;%1&quot; (should be float)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="csvbuilder.cpp" line="103"/>
- <source>no fields set up yet!</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="csvbuilder.cpp" line="140"/>
- <source>field not set &quot;%1&quot;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="csvbuilder.cpp" line="237"/>
- <source>invalid character in field &quot;%1&quot;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="csvbuilder.cpp" line="240"/>
- <source>empty field name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="gameinfoimpl.cpp" line="41"/>
- <source>invalid game type %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="helper.cpp" line="53"/>
- <source>helper failed</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="helper.cpp" line="69"/>
- <location filename="helper.cpp" line="90"/>
- <source>failed to determine account name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="installationmanager.cpp" line="63"/>
- <location filename="selfupdater.cpp" line="52"/>
- <source>invalid 7-zip32.dll: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="loadmechanism.cpp" line="50"/>
- <source>failed to open %1: %2</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="loadmechanism.cpp" line="104"/>
- <location filename="loadmechanism.cpp" line="113"/>
- <source>%1 not found</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="loadmechanism.cpp" line="138"/>
- <source>Failed to delete %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="loadmechanism.cpp" line="144"/>
- <source>Failed to deactivate script extender loading</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="loadmechanism.cpp" line="165"/>
- <source>Failed to remove %1: %2</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="loadmechanism.cpp" line="167"/>
- <location filename="loadmechanism.cpp" line="260"/>
- <source>Failed to rename %1 to %2</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="loadmechanism.cpp" line="175"/>
- <source>Failed to deactivate proxy-dll loading</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="loadmechanism.cpp" line="209"/>
- <location filename="loadmechanism.cpp" line="243"/>
- <location filename="loadmechanism.cpp" line="263"/>
- <source>Failed to copy %1 to %2</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="loadmechanism.cpp" line="214"/>
- <source>Failed to set up script extender loading</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="loadmechanism.cpp" line="240"/>
- <source>Failed to delete old proxy-dll %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="loadmechanism.cpp" line="256"/>
- <source>Failed to overwrite %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="loadmechanism.cpp" line="268"/>
- <source>Failed to set up proxy-dll loading</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="main.cpp" line="134"/>
- <source>Permissions required</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="main.cpp" line="135"/>
- <source>The current user account doesn&apos;t have the required access rights to run Mod Organizer. The neccessary changes can be made automatically (the MO directory will be made writable for the current user account). You will be asked to run &quot;helper.exe&quot; with administrative rights).</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="main.cpp" line="234"/>
- <location filename="main.cpp" line="272"/>
- <source>Woops</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="main.cpp" line="235"/>
- <source>ModOrganizer has crashed! Should a diagnostic file be created? If you send me this file (%1) to sherb@gmx.net, the bug is a lot more likely to be fixed. Please include a short description of what you were doing when the crash happened</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="main.cpp" line="273"/>
- <source>ModOrganizer has crashed! Unfortunately I was not able to write a diagnostic file: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="main.cpp" line="335"/>
- <location filename="settings.cpp" line="462"/>
- <source>Mod Organizer</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="main.cpp" line="335"/>
- <source>An instance of Mod Organizer is already running</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="main.cpp" line="357"/>
- <source>No game identified in &quot;%1&quot;. The directory is required to contain the game binary and its launcher.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="main.cpp" line="360"/>
- <location filename="main.cpp" line="389"/>
- <source>Please select the game to manage</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="752"/>
- <source>Please use &quot;Help&quot; from the toolbar to get usage instructions to all elements</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="1470"/>
- <location filename="mainwindow.cpp" line="3723"/>
- <source>&lt;Manage...&gt;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="1488"/>
- <source>failed to parse profile %1: %2</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="pluginlist.cpp" line="310"/>
- <location filename="profile.cpp" line="228"/>
- <source>failed to find &quot;%1&quot;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="pluginlist.cpp" line="467"/>
- <source>failed to access %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="pluginlist.cpp" line="481"/>
- <source>failed to set file time %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="profile.cpp" line="67"/>
- <source>failed to create %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="profile.cpp" line="93"/>
- <source>&quot;%1&quot; is missing</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="profilesdialog.cpp" line="80"/>
- <source>Before you can use ModOrganizer, you need to create at least one profile. ATTENTION: Run the game at least once before creating a profile!</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="report.cpp" line="33"/>
- <location filename="report.cpp" line="36"/>
- <source>Error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="savegamegamebryo.cpp" line="139"/>
- <location filename="savegamegamebryo.cpp" line="198"/>
- <location filename="savegamegamebryo.cpp" line="240"/>
- <source>wrong file format</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="savegamegamebryo.cpp" line="326"/>
- <source>failed to open %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settings.cpp" line="469"/>
- <source>Script Extender</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settings.cpp" line="476"/>
- <source>Proxy DLL</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="spawn.cpp" line="106"/>
- <source>failed to spawn &quot;%1&quot;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="spawn.cpp" line="113"/>
- <source>Elevation required</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="spawn.cpp" line="114"/>
- <source>This process requires elevation to run.
-This is a potential security risk so I highly advice you to investigate if
-&quot;%1&quot;
-can be installed to work without elevation.
-
-Start elevated anyway? (you will be asked if you want to allow ModOrganizer.exe to make changes to the system)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="spawn.cpp" line="128"/>
- <source>failed to spawn &quot;%1&quot;: %2</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="spawn.cpp" line="137"/>
- <source>&quot;%1&quot; doesn&apos;t exist</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="spawn.cpp" line="144"/>
- <source>failed to inject dll into &quot;%1&quot;: %2</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="spawn.cpp" line="152"/>
- <source>failed to run &quot;%1&quot;</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>QueryOverwriteDialog</name>
- <message>
- <location filename="queryoverwritedialog.ui" line="14"/>
- <source>Mod Exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="queryoverwritedialog.ui" line="45"/>
- <source>This mod seems to be installed already. Do you want to add files from this archive (overwriting existing ones) or do you want to completely replace the existing files (old files are deleted)? Alternatively you can install this mod under a different name.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="queryoverwritedialog.ui" line="63"/>
- <source>Keep Backup</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="queryoverwritedialog.ui" line="70"/>
- <source>Merge</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="queryoverwritedialog.ui" line="77"/>
- <source>Replace</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="queryoverwritedialog.ui" line="84"/>
- <source>Rename</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="queryoverwritedialog.ui" line="91"/>
- <source>Cancel</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>QuestionBoxMemory</name>
- <message>
- <location filename="questionboxmemory.ui" line="86"/>
- <source>Remember selection</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>SaveGameInfoWidget</name>
- <message>
- <location filename="savegameinfowidget.ui" line="39"/>
- <source>Save #</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="savegameinfowidget.ui" line="51"/>
- <source>Character</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="savegameinfowidget.ui" line="63"/>
- <source>Level</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="savegameinfowidget.ui" line="75"/>
- <source>Location</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="savegameinfowidget.ui" line="87"/>
- <source>Date</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>SaveGameInfoWidgetGamebryo</name>
- <message>
- <location filename="savegameinfowidgetgamebryo.cpp" line="41"/>
- <source>Missing ESPs</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>SaveTextAsDialog</name>
- <message>
- <location filename="savetextasdialog.ui" line="14"/>
- <source>Dialog</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="savetextasdialog.ui" line="32"/>
- <source>Copy To Clipboard</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="savetextasdialog.ui" line="39"/>
- <source>Save As...</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="savetextasdialog.ui" line="59"/>
- <source>Close</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="savetextasdialog.cpp" line="36"/>
- <source>Save CSV</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="savetextasdialog.cpp" line="36"/>
- <source>Text Files</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="savetextasdialog.cpp" line="40"/>
- <source>failed to open &quot;%1&quot; for writing</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>SelectionDialog</name>
- <message>
- <location filename="selectiondialog.ui" line="14"/>
- <source>Select</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="selectiondialog.ui" line="23"/>
- <source>Placeholder</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="selectiondialog.ui" line="77"/>
- <source>Cancel</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>SelfUpdater</name>
- <message>
- <location filename="selfupdater.cpp" line="66"/>
- <source>archive.dll not loaded: &quot;%1&quot;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="selfupdater.cpp" line="116"/>
- <location filename="selfupdater.cpp" line="140"/>
- <location filename="selfupdater.cpp" line="269"/>
- <location filename="selfupdater.cpp" line="417"/>
- <source>Update</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="selfupdater.cpp" line="117"/>
- <source>An update is available (newest version: %1), do you want to install it?</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="selfupdater.cpp" line="141"/>
- <source>Download in progress</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="selfupdater.cpp" line="196"/>
- <source>Download failed: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="selfupdater.cpp" line="207"/>
- <source>Failed to install update: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="selfupdater.cpp" line="228"/>
- <source>failed to open archive &quot;%1&quot;: %2</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="selfupdater.cpp" line="251"/>
- <source>failed to move outdated files: %1. Please update manually.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="selfupdater.cpp" line="269"/>
- <source>Update installed, Mod Organizer will now be restarted.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="selfupdater.cpp" line="297"/>
- <source>Error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="selfupdater.cpp" line="353"/>
- <source>Failed to parse response. Please report this as a bug and include the file mo_interface.log.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="selfupdater.cpp" line="418"/>
- <source>No incremental update available for this version, the complete package needs to be downloaded (%1 kB)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="selfupdater.cpp" line="427"/>
- <source>no file for update found. Please update manually.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="selfupdater.cpp" line="441"/>
- <source>Failed to retrieve update information: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="selfupdater.cpp" line="461"/>
- <source>No download server available. Please try again later.</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>Settings</name>
- <message>
- <location filename="settings.cpp" line="278"/>
- <source>setting for invalid plugin &quot;%1&quot; requested</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settings.cpp" line="282"/>
- <source>invalid setting &quot;%1&quot; requested for plugin &quot;%2&quot;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settings.cpp" line="573"/>
- <source>Confirm</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settings.cpp" line="573"/>
- <source>Changing the mod directory affects all your profiles! Mods not present (or named differently) in the new location will be disabled in all profiles. There is no way to undo this unless you backed up your profiles manually. Proceed?</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>SettingsDialog</name>
- <message>
- <location filename="settingsdialog.ui" line="14"/>
- <source>Settings</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settingsdialog.ui" line="24"/>
- <source>General</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settingsdialog.ui" line="32"/>
- <source>Language</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settingsdialog.ui" line="39"/>
- <source>The display language</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settingsdialog.ui" line="42"/>
- <source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
-&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
-p, li { white-space: pre-wrap; }
-&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;The display language. This will only displaye languages for which you have a translation installed.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settingsdialog.ui" line="57"/>
- <source>Style</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settingsdialog.ui" line="64"/>
- <source>graphical style</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settingsdialog.ui" line="67"/>
- <source>graphical style of the MO user interface</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settingsdialog.ui" line="78"/>
- <source>Log Level</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settingsdialog.ui" line="85"/>
- <source>Decides the amount of data printed to &quot;ModOrganizer.log&quot;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settingsdialog.ui" line="88"/>
- <source>Decides the amount of data printed to &quot;ModOrganizer.log&quot;.
-&quot;Debug&quot; produces very useful information for finding problems. There is usually no noteworthy performance impact but the file may become rather large. If this is a problem you may prefer the &quot;Info&quot; level for regluar use. On the &quot;Error&quot; level the log file usually remains empty.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settingsdialog.ui" line="93"/>
- <source>Debug</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settingsdialog.ui" line="98"/>
- <source>Info</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settingsdialog.ui" line="103"/>
- <source>Error</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settingsdialog.ui" line="113"/>
- <source>Advanced</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settingsdialog.ui" line="125"/>
- <location filename="settingsdialog.ui" line="128"/>
- <source>Directory where downloads are stored.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settingsdialog.ui" line="148"/>
- <source>Mod Directory</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settingsdialog.ui" line="155"/>
- <source>Directory where mods are stored.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settingsdialog.ui" line="158"/>
- <source>Directory where mods are stored. Please note that changing this will break all associations of profiles with mods that don&apos;t exist in the new location (with the same name).</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settingsdialog.ui" line="172"/>
- <source>Download Directory</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settingsdialog.ui" line="179"/>
- <source>Cache Directory</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settingsdialog.ui" line="205"/>
- <source>Reset stored information from dialogs.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settingsdialog.ui" line="208"/>
- <source>This will make all dialogs show up again where you checked the &quot;Remember selection&quot;-box.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settingsdialog.ui" line="211"/>
- <source>Reset Dialogs</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settingsdialog.ui" line="231"/>
- <location filename="settingsdialog.ui" line="234"/>
- <source>Modify the categories available to arrange your mods.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settingsdialog.ui" line="237"/>
- <source>Configure Mod Categories</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settingsdialog.ui" line="245"/>
- <location filename="settingsdialog.ui" line="261"/>
- <source>Nexus</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settingsdialog.ui" line="251"/>
- <source>Allows automatic log-in when the Nexus-Page for the game is clicked.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settingsdialog.ui" line="254"/>
- <source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
-&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
-p, li { white-space: pre-wrap; }
-&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Allows automatic log-in when the Nexus-Page for the game is clicked. Please note that the obfuscation with which the password is stored in modorganizer.ini is not very strong. If you&apos;re worried someone might steal your password, don&apos;t store it here.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settingsdialog.ui" line="270"/>
- <source>If checked and if correct credentials are entered below, log-in to Nexus (for browsing and downloading) is automatic.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settingsdialog.ui" line="273"/>
- <source>Automatically Log-In to Nexus</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settingsdialog.ui" line="285"/>
- <source>Username</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settingsdialog.ui" line="299"/>
- <source>Password</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settingsdialog.ui" line="321"/>
- <source>Disable automatic internet features</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settingsdialog.ui" line="324"/>
- <source>Disable automatic internet features. This does not affect features that are explicitly invoked by the user (like checking mods for updates, endorsing, opening the web browser)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settingsdialog.ui" line="327"/>
- <source>Offline Mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settingsdialog.ui" line="334"/>
- <source>Use a proxy for network connections.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settingsdialog.ui" line="337"/>
- <source>Use a proxy for network connections. This uses the system-wide settings which can be configured in Internet Explorer. Please note that MO will start up a few seconds slower on some systems when using a proxy.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settingsdialog.ui" line="340"/>
- <source>Use HTTP Proxy (Uses System Settings)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settingsdialog.ui" line="351"/>
- <source>Known Servers (Dynamically updated every download)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settingsdialog.ui" line="372"/>
- <source>Preferred Servers (Drag &amp; Drop)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settingsdialog.ui" line="407"/>
- <source>Plugins</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settingsdialog.ui" line="427"/>
- <source>Author:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settingsdialog.ui" line="441"/>
- <source>Version:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settingsdialog.ui" line="455"/>
- <source>Description:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settingsdialog.ui" line="493"/>
- <source>Key</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settingsdialog.ui" line="498"/>
- <source>Value</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settingsdialog.ui" line="509"/>
- <source>Workarounds</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settingsdialog.ui" line="517"/>
- <source>Steam App ID</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settingsdialog.ui" line="537"/>
- <source>The Steam AppID for your game</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settingsdialog.ui" line="540"/>
- <source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
-&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
-p, li { white-space: pre-wrap; }
-&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;The Steam App ID is required to directly start some games. For Skyrim, if this is not set or wrong, the &amp;quot;Mod Organizer&amp;quot; load mechanism may not work properly.&lt;/span&gt;&lt;/p&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;The preset for this is the App ID of the &amp;quot;regular&amp;quot; version so in most cases, you should be set.&lt;/span&gt;&lt;/p&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;If you think you have a different version (GotY or something), follow these steps to get to the id:&lt;/span&gt;&lt;/p&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;1. Navigate to the game library in steam&lt;/span&gt;&lt;/p&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;2. right-click on the game you need the id for and choose &lt;/span&gt;&lt;span style=&quot; font-size:8pt; font-weight:600;&quot;&gt;Create desktop shortcut&lt;/span&gt;&lt;/p&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;3. right-click on the newly created shortcut on your desktop and select &lt;/span&gt;&lt;span style=&quot; font-size:8pt; font-weight:600;&quot;&gt;Properties&lt;/span&gt;&lt;/p&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;4. in the URL-field you should see something like this: &lt;/span&gt;&lt;span style=&quot; font-size:8pt; font-style:italic;&quot;&gt;steam://rungameid/22380&lt;/span&gt;&lt;/p&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;22380 is the id you&apos;re looking for.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settingsdialog.ui" line="571"/>
- <source>Load Mechanism</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settingsdialog.ui" line="591"/>
- <source>Select loading mechanism. See help for details.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settingsdialog.ui" line="594"/>
- <source>Mod Organizer needs a dll to be injected into the game so all mods are visible to it.
-There are several means to do this:
-*Mod Organizer* (default) In this mode the Mod Organizer itself injects the dll. The disadvantage is that you always have to start the game through MO or a link created by it.
-*Script Extender* In this mode, MO is installed as a Script Extender (obse, fose, nvse, skse) plugin.
-*Proxy DLL* In this mode, MO replaces one of the game&apos;s dlls with one that loads MO (and the original dll of course). This will ONLY work with Steam games and it has only been tested with Skyrim. Please use this only if the other mechanisms don&apos;t work.
-
-If you use the Steam version of Oblivion the default will NOT work. In this case, please install obse and use &quot;Script Extender&quot; as the load mechanism. Also you can then not start Oblivion from MO. Instead, use MO only to set up your mods, then quit and start Oblivion through Steam.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settingsdialog.ui" line="611"/>
- <source>NMM Version</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settingsdialog.ui" line="631"/>
- <source>The Version of Nexus Mod Manager to impersonate.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settingsdialog.ui" line="634"/>
- <source>Mod Organizer uses an API provided by the Nexus to provide features like checking for updates and downloading files. Unfortunately this API has not been made available officially to third party tools like MO so we have to impersonate the Nexus Mod Manager to be allowed in.
-On top of this Nexus has used the client identification to lock out outdated versions of NMM to force users to update. This means that MO also needs to impersonate the new version of NMM even if MO doesn&apos;t need an update. Therefore you can configure the version to identify as here.
-Please note that MO does identify itself as MO to the webserver, it&apos;s not lying about what it is. It is merely adding a &quot;compatible&quot; NMM version to the user agent.
-
-tl;dr-version: If Nexus-features don&apos;t work, insert the current version number of NMM here and try again.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settingsdialog.ui" line="656"/>
- <source>Enforces that inactive ESPs and ESMs are never loaded.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settingsdialog.ui" line="659"/>
- <source>It seems that the Games occasionally load ESP or ESM files even if they haven&apos;t been activated as plugins.
-I don&apos;t yet know what the circumstances are, but user reports imply it is in some cases unwanted. If this is checked, ESPs and ESMs not checked in the List are invisible to the game and can not be loaded.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settingsdialog.ui" line="663"/>
- <source>Hide inactive ESPs/ESMs</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settingsdialog.ui" line="670"/>
- <source>If checked, files (i.e. esps, esms and bsas) belonging to the core game can not be disabled in the UI. (default: on)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settingsdialog.ui" line="673"/>
- <source>If checked, files (i.e. esps, esms and bsas) belonging to the core game can not be disabled in the UI. (default: on)
-Uncheck this if you want to use Mod Organizer with total conversions (like Nehrim) but be aware that the game will crash if required files are not enabled.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settingsdialog.ui" line="677"/>
- <source>Force-enable game files</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settingsdialog.ui" line="687"/>
- <location filename="settingsdialog.ui" line="691"/>
- <source>For Skyrim, this can be used instead of Archive Invalidation. It should make AI redundant for all Profiles.
-For the other games this is not a sufficient replacement for AI!</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settingsdialog.ui" line="695"/>
- <source>Back-date BSAs</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settingsdialog.ui" line="719"/>
- <source>These are workarounds for problems with Mod Organizer. Please make sure you read the help text before changing anything here.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settingsdialog.cpp" line="89"/>
- <source>Select download directory</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settingsdialog.cpp" line="97"/>
- <source>Select mod directory</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settingsdialog.cpp" line="105"/>
- <source>Select cache directory</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settingsdialog.cpp" line="113"/>
- <source>Confirm?</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settingsdialog.cpp" line="114"/>
- <source>This will make all dialogs show up again where you checked the &quot;Remember selection&quot;-box. Continue?</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>SimpleInstallDialog</name>
- <message>
- <location filename="simpleinstalldialog.ui" line="14"/>
- <source>Quick Install</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="simpleinstalldialog.ui" line="22"/>
- <source>Name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="simpleinstalldialog.ui" line="49"/>
- <location filename="simpleinstalldialog.ui" line="52"/>
- <source>Opens a Dialog that allows custom modifications.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="simpleinstalldialog.ui" line="55"/>
- <source>Manual</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="simpleinstalldialog.ui" line="62"/>
- <source>OK</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="simpleinstalldialog.ui" line="72"/>
- <source>Cancel</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>SingleInstance</name>
- <message>
- <location filename="singleinstance.cpp" line="50"/>
- <source>SHM error: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="singleinstance.cpp" line="82"/>
- <location filename="singleinstance.cpp" line="88"/>
- <source>failed to connect to running instance: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="singleinstance.cpp" line="100"/>
- <source>failed to receive data from secondary instance: %1</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>SyncOverwriteDialog</name>
- <message>
- <location filename="syncoverwritedialog.ui" line="14"/>
- <source>Sync Overwrite</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="syncoverwritedialog.ui" line="27"/>
- <source>Name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="syncoverwritedialog.ui" line="32"/>
- <source>Sync To</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="syncoverwritedialog.cpp" line="95"/>
- <source>&lt;don&apos;t sync&gt;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="syncoverwritedialog.cpp" line="147"/>
- <source>failed to remove %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="syncoverwritedialog.cpp" line="149"/>
- <source>failed to move %1 to %2</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
- <name>TransferSavesDialog</name>
- <message>
- <location filename="transfersavesdialog.ui" line="14"/>
- <source>Dialog</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="transfersavesdialog.ui" line="22"/>
- <source>Global Characters</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="transfersavesdialog.ui" line="29"/>
- <source>This is a list of characters in the global location.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="transfersavesdialog.ui" line="32"/>
- <source>This is a list of characters in the global location.
-
-On Windows Vista/Windows 7:
- C:\Users\[UserName]\Documents\My Games\Skyrim\Saves
-
-On Windows XP:
- C:\Documents and Settings[UserName]\My Documents\My Games\Skyrim\Saves
-</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="transfersavesdialog.ui" line="46"/>
- <source>This is a list of save games for the selected character in the global location.
-
-On Windows Vista/Windows 7:
- C:\Users\[UserName]\Documents\My Games\Skyrim\Saves
-
-On Windows XP:
- C:\Documents and Settings[UserName]\My Documents\My Games\Skyrim\Saves
-
-</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="transfersavesdialog.ui" line="87"/>
- <source>Move -&gt;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="transfersavesdialog.ui" line="97"/>
- <source>Copy -&gt;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="transfersavesdialog.ui" line="123"/>
- <source>&lt;- Move</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="transfersavesdialog.ui" line="133"/>
- <source>&lt;- Copy</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="transfersavesdialog.ui" line="156"/>
- <source>Done</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="transfersavesdialog.ui" line="167"/>
- <source>Profile Characters</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="transfersavesdialog.cpp" line="140"/>
- <source>Overwrite</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="transfersavesdialog.cpp" line="141"/>
- <source>Overwrite the file &quot;%1&quot;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="transfersavesdialog.cpp" line="164"/>
- <location filename="transfersavesdialog.cpp" line="202"/>
- <location filename="transfersavesdialog.cpp" line="237"/>
- <location filename="transfersavesdialog.cpp" line="276"/>
- <source>Confirm</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="transfersavesdialog.cpp" line="165"/>
- <location filename="transfersavesdialog.cpp" line="203"/>
- <source>Copy all save games of character &quot;%1&quot; to the profile?</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="transfersavesdialog.cpp" line="238"/>
- <source>Move all save games of character &quot;%1&quot; to the global location? Please be aware that this will mess up the running number of save games.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="transfersavesdialog.cpp" line="277"/>
- <source>Copy all save games of character &quot;%1&quot; to the global location? Please be aware that this will mess up the running number of save games.</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-</TS>
diff --git a/src/organizer.pro b/src/organizer.pro
index 6b8036e5..d93cd51f 100644
--- a/src/organizer.pro
+++ b/src/organizer.pro
@@ -4,8 +4,9 @@
#
#-------------------------------------------------
+
contains(QT_VERSION, "^5.*") {
- QT += core gui widgets network declarative script xml sql xmlpatterns webkit
+ QT += core gui widgets network xml sql xmlpatterns qml quick script webkit
} else {
QT += core gui network xml declarative script sql xmlpatterns webkit
}
@@ -27,7 +28,6 @@ SOURCES += \
savegamegamebryo.cpp \
savegame.cpp \
report.cpp \
- questionboxmemory.cpp \
queryoverwritedialog.cpp \
profilesdialog.cpp \
profile.cpp \
@@ -48,10 +48,8 @@ SOURCES += \
logbuffer.cpp \
lockeddialog.cpp \
loadmechanism.cpp \
- json.cpp \
installationmanager.cpp \
helper.cpp \
- finddialog.cpp \
filedialogmemory.cpp \
executableslist.cpp \
editexecutablesdialog.cpp \
@@ -66,7 +64,6 @@ SOURCES += \
categoriesdialog.cpp \
categories.cpp \
bbcode.cpp \
- archivetree.cpp \
activatemodsdialog.cpp \
moapplication.cpp \
profileinputdialog.cpp \
@@ -83,7 +80,16 @@ SOURCES += \
../esptk/subrecord.cpp \
browserview.cpp \
browserdialog.cpp \
- persistentcookiejar.cpp
+ persistentcookiejar.cpp \
+ noeditdelegate.cpp \
+ previewgenerator.cpp \
+ previewdialog.cpp \
+ aboutdialog.cpp \
+ json.cpp \
+ safewritefile.cpp \
+ modflagicondelegate.cpp \
+ pluginflagicondelegate.cpp
+
HEADERS += \
transfersavesdialog.h \
@@ -93,13 +99,12 @@ HEADERS += \
settingsdialog.h \
settings.h \
selfupdater.h \
- selectiondialog.h \
+ selectiondialog.h \
savegameinfowidgetgamebryo.h \
savegameinfowidget.h \
savegamegamebyro.h \
savegame.h \
report.h \
- questionboxmemory.h \
queryoverwritedialog.h \
profilesdialog.h \
profile.h \
@@ -119,10 +124,8 @@ HEADERS += \
logbuffer.h \
lockeddialog.h \
loadmechanism.h \
- json.h \
installationmanager.h \
helper.h \
- finddialog.h \
filedialogmemory.h \
executableslist.h \
editexecutablesdialog.h \
@@ -137,7 +140,6 @@ HEADERS += \
categoriesdialog.h \
categories.h \
bbcode.h \
- archivetree.h \
activatemodsdialog.h \
moapplication.h \
profileinputdialog.h \
@@ -152,18 +154,27 @@ HEADERS += \
../esptk/record.h \
../esptk/espfile.h \
../esptk/subrecord.h \
+ ../esptk/espexceptions.h \
browserview.h \
browserdialog.h \
persistentcookiejar.h
+ noeditdelegate.h \
+ previewgenerator.h \
+ previewdialog.h \
+ aboutdialog.h \
+ json.h \
+ safewritefile.h\
+ pdll.h \
+ modflagicondelegate.h \
+ pluginflagicondelegate.h
FORMS += \
transfersavesdialog.ui \
syncoverwritedialog.ui \
simpleinstalldialog.ui \
settingsdialog.ui \
- selectiondialog.ui \
+ selectiondialog.ui \
savegameinfowidget.ui \
- questionboxmemory.ui \
queryoverwritedialog.ui \
profilesdialog.ui \
overwriteinfodialog.ui \
@@ -185,31 +196,36 @@ FORMS += \
profileinputdialog.ui \
savetextasdialog.ui \
problemsdialog.ui \
- browserdialog.ui
+ previewdialog.ui \
+ browserdialog.ui \
+ aboutdialog.ui
-INCLUDEPATH += ../shared ../archive ../uibase ../bsatk ../esptk "$(BOOSTPATH)"
+INCLUDEPATH += ../shared ../archive ../uibase ../bsatk ../esptk ../boss_modified/boss-api "$(BOOSTPATH)"
LIBS += -L"$(BOOSTPATH)/stage/lib"
-
CONFIG(debug, debug|release) {
- OUTDIR = $$OUT_PWD/debug
- DSTDIR = $$PWD/../../outputd
- LIBS += -L$$OUT_PWD/../shared/debug -L$$OUT_PWD/../bsatk/debug
- LIBS += -L$$OUT_PWD/../uibase/debug
- LIBS += -lDbgHelp
+ OUTDIR = $$OUT_PWD/debug
+ DSTDIR = $$PWD/../../outputd
+ LIBS += -L$$OUT_PWD/../shared/debug
+ LIBS += -L$$OUT_PWD/../bsatk/debug
+ LIBS += -L$$OUT_PWD/../uibase/debug
+ LIBS += -L$$OUT_PWD/../boss_modified/debug
+ LIBS += -lDbgHelp
} else {
- OUTDIR = $$OUT_PWD/release
- DSTDIR = $$PWD/../../output
- LIBS += -L$$OUT_PWD/../shared/release -L$$OUT_PWD/../bsatk/release
+ OUTDIR = $$OUT_PWD/release
+ DSTDIR = $$PWD/../../output
+ LIBS += -L$$OUT_PWD/../shared/release
+ LIBS += -L$$OUT_PWD/../bsatk/release
LIBS += -L$$OUT_PWD/../uibase/release
- QMAKE_CXXFLAGS += /Zi
-# QMAKE_CXXFLAGS -= -O2
- QMAKE_LFLAGS += /DEBUG
+ LIBS += -L$$OUT_PWD/../boss_modified/release
+ QMAKE_CXXFLAGS += /Zi /GL
+# QMAKE_CXXFLAGS -= -O2
+ QMAKE_LFLAGS += /DEBUG /LTCG /OPT:REF /OPT:ICF
}
-QMAKE_CXXFLAGS_WARN_ON -= -W3
-QMAKE_CXXFLAGS_WARN_ON += -W4
+#QMAKE_CXXFLAGS_WARN_ON -= -W3
+#QMAKE_CXXFLAGS_WARN_ON += -W4
QMAKE_CXXFLAGS += -wd4127 -wd4512 -wd4189
CONFIG += embed_manifest_exe
@@ -219,31 +235,31 @@ CONFIG += embed_manifest_exe
# QMAKE_LFLAGS += /MANIFESTUAC:\"level=\'highestAvailable\' uiAccess=\'false\'\"
TRANSLATIONS = organizer_de.ts \
- organizer_es.ts \
- organizer_fr.ts \
- organizer_zh_TW.ts \
+ organizer_es.ts \
+ organizer_fr.ts \
+ organizer_zh_TW.ts \
organizer_zh_CN.ts \
organizer_cs.ts \
organizer_tr.ts \
- organizer_ru.ts \
- organizer.en.ts
-
-!isEmpty(TRANSLATIONS) {
- isEmpty(QMAKE_LRELEASE) {
- win32:QMAKE_LRELEASE = $$[QT_INSTALL_BINS]/lrelease.exe
- else:QMAKE_LRELEASE = $$[QT_INSTALL_BINS]/lrelease
- }
+ organizer_en.ts \
+ organizer_ru.ts
- isEmpty(TS_DIR):TS_DIR = Translations
-
- TSQM.name = lrelease ${QMAKE_FILE_IN}
- TSQM.input = TRANSLATIONS
- TSQM.output = $$TS_DIR/${QMAKE_FILE_BASE}.qm
- TSQM.commands = $$QMAKE_LRELEASE ${QMAKE_FILE_IN}
- TSQM.CONFIG = no_link
- QMAKE_EXTRA_COMPILERS += TSQM
- PRE_TARGETDEPS += compiler_TSQM_make_all
-} else:message(No translation files in project)
+#!isEmpty(TRANSLATIONS) {
+# isEmpty(QMAKE_LRELEASE) {
+# win32:QMAKE_LRELEASE = $$[QT_INSTALL_BINS]/lrelease.exe
+# else:QMAKE_LRELEASE = $$[QT_INSTALL_BINS]/lrelease
+# }
+#
+# isEmpty(TS_DIR):TS_DIR = Translations
+#
+# TSQM.name = lrelease ${QMAKE_FILE_IN}
+# TSQM.input = TRANSLATIONS
+# TSQM.output = $$TS_DIR/${QMAKE_FILE_BASE}.qm
+# TSQM.commands = $$QMAKE_LRELEASE ${QMAKE_FILE_IN}
+# TSQM.CONFIG = no_link
+# QMAKE_EXTRA_COMPILERS += TSQM
+# PRE_TARGETDEPS += compiler_TSQM_make_all
+#} else:message(No translation files in project)
LIBS += -lmo_shared -luibase -lshell32 -lole32 -luser32 -ladvapi32 -lgdi32 -lPsapi -lVersion -lbsatk -lshlwapi
@@ -252,6 +268,9 @@ DEFINES += UNICODE _UNICODE _CRT_SECURE_NO_WARNINGS NOMINMAX
DEFINES += BOOST_DISABLE_ASSERTS NDEBUG
#DEFINES += QMLJSDEBUGGER
+HGID = $$system(hg id -i)
+DEFINES += HGID=\\\"$${HGID}\\\"
+
SRCDIR = $$PWD
SRCDIR ~= s,/,$$QMAKE_DIR_SEP,g
OUTDIR ~= s,/,$$QMAKE_DIR_SEP,g
@@ -272,7 +291,7 @@ CONFIG(debug, debug|release) {
}
RESOURCES += \
- resources.qrc \
+ resources.qrc \
stylesheet_resource.qrc
RC_FILE += \
@@ -292,15 +311,50 @@ OTHER_FILES += \
tutorials/tutorials_modinfodialog.qml \
tutorials/tutorial_firststeps_modinfo.js \
tutorials/tutorial_conflictresolution_main.js \
- tutorials/tutorial_conflictresolution_modinfo.js \
+ tutorials/tutorial_conflictresolution_modinfo.js \
app_icon.rc \
dark.qss \
stylesheets/dark.qss \
tutorials/tutorial_window_installer.js \
tutorials/tutorials_installdialog.qml
-INCLUDEPATH += "$(ZLIBPATH)" "$(ZLIBPATH)/build" "$(BOOSTPATH)"
-LIBS += -L"$(ZLIBPATH)/build" -lzlibstatic
+
+load(moc)
+
+# for each Boost header you include...
+QMAKE_MOC += \
+ -DBOOST_MPL_IF_HPP_INCLUDED \
+ -DBOOST_TT_TYPE_WITH_ALIGNMENT_INCLUDED \
+ -DBOOST_MPL_VOID_HPP_INCLUDED \
+ -DBOOST_MPL_NOT_HPP_INCLUDED \
+ -DBOOST_MPL_IDENTITY_HPP_INCLUDED \
+ -DBOOST_VARIANT_VARIANT_FWD_HPP \
+ -DBOOST_MPL_NEXT_PRIOR_HPP_INCLUDED \
+ -DBOOST_MPL_O1_SIZE_HPP_INCLUDED \
+ -DBOOST_MPL_DEREF_HPP_INCLUDED \
+ -DBOOST_MPL_PAIR_HPP_INCLUDED \
+ -DBOOST_MPL_ITER_FOLD_HPP_INCLUDED \
+ -DBOOST_MPL_PROTECT_HPP_INCLUDED \
+ -DBOOST_MPL_EVAL_IF_HPP_INCLUDED \
+ -DBOOST_MPL_SEQUENCE_TAG_HPP_INCLUDED \
+ -DBOOST_MPL_EMPTY_HPP_INCLUDED \
+ -DBOOST_MPL_ALWAYS_HPP_INCLUDED \
+ -DBOOST_MPL_TRANSFORM_HPP_INCLUDED \
+ -DBOOST_MPL_CLEAR_HPP_INCLUDED \
+ -DBOOST_MPL_BEGIN_END_HPP_INCLUDED \
+ -DBOOST_MPL_FOLD_HPP_INCLUDED \
+ -DBOOST_MPL_FRONT_HPP_INCLUDED \
+ -DBOOST_MPL_IS_SEQUENCE_HPP_INCLUDED \
+ -DBOOST_MPL_ITERATOR_RANGE_HPP_INCLUDED \
+ -DBOOST_MPL_MAX_ELEMENT_HPP_INCLUDED \
+ -DBOOST_MPL_PUSH_FRONT_HPP_INCLUDED \
+ -DBOOST_RESULT_OF_HPP \
+ -DBOOST_MPL_ITER_FOLD_IF_HPP_INCLUDED
+
+# leak detection with vld
+#INCLUDEPATH += "E:/Visual Leak Detector/include"
+#LIBS += -L"E:/Visual Leak Detector/lib/Win32"
+#DEFINES += LEAK_CHECK_WITH_VLD
#SOURCES += modeltest.cpp
#HEADERS += modeltest.h
diff --git a/src/organizer.qbs b/src/organizer.qbs
new file mode 100644
index 00000000..2b7f45fc
--- /dev/null
+++ b/src/organizer.qbs
@@ -0,0 +1,43 @@
+import qbs.base 1.0
+
+Application {
+ name: 'Organizer'
+
+ Depends { name: "Qt"; submodules: ["core", "gui", "network", "declarative"] }
+ Depends { name: 'Shared' }
+ Depends { name: 'UIBase' }
+ Depends { name: 'cpp' }
+
+ cpp.defines: [ 'UNICODE', '_UNICODE' ]
+ cpp.libraryPaths: [ qbs.getenv('BOOSTPATH') + '/stage/lib' ]
+ cpp.includePaths: [ '../shared', '../archive', '../bsatk', '../esptk', '../uibase', qbs.getenv("BOOSTPATH") ]
+ // '../bsatk', '../esptk',
+
+ cpp.staticLibraries: [ 'shell32', 'user32', 'Version', 'shlwapi' ]
+ //LIBS += -lmo_shared -luibase -lshell32 -lole32 -luser32 -ladvapi32 -lgdi32 -lPsapi -lVersion -lbsatk -lshlwapi
+
+ Group {
+ name: 'Headers'
+ files: [ '*.h' ]
+ }
+
+ Group {
+ name: 'Sources'
+ files: [ '*.cpp' ]
+ }
+
+ Group {
+ name: 'UI Files'
+ files: [ '*.ui' ]
+ }
+
+ Group {
+ name: 'ESP Toolkit'
+ files: [ '../esptk/*.h', '../esptk/*.cpp' ]
+ }
+}
+
+// /nologo /c
+
+
+// /Zi -GR -W3
diff --git a/src/organizer_cs.qm b/src/organizer_cs.qm
deleted file mode 100644
index 8bdf0b55..00000000
--- a/src/organizer_cs.qm
+++ /dev/null
Binary files differ
diff --git a/src/organizer_cs.ts b/src/organizer_cs.ts
index 1b5b3fca..654ca00c 100644
--- a/src/organizer_cs.ts
+++ b/src/organizer_cs.ts
@@ -2,6 +2,50 @@
<!DOCTYPE TS>
<TS version="2.0" language="cs">
<context>
+ <name>AboutDialog</name>
+ <message>
+ <location filename="aboutdialog.ui" line="14"/>
+ <location filename="aboutdialog.ui" line="53"/>
+ <source>About</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="aboutdialog.ui" line="66"/>
+ <source>Revision:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="aboutdialog.ui" line="104"/>
+ <source>Used Software</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="aboutdialog.ui" line="117"/>
+ <source>Credits</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="aboutdialog.ui" line="123"/>
+ <source>Translators</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="aboutdialog.ui" line="189"/>
+ <source>Others</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="aboutdialog.ui" line="266"/>
+ <source>Close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="aboutdialog.cpp" line="81"/>
+ <source>No license</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>ActivateModsDialog</name>
<message>
<location filename="activatemodsdialog.ui" line="14"/>
@@ -239,25 +283,30 @@ p, li { white-space: pre-wrap; }
<context>
<name>DownloadList</name>
<message>
- <location filename="downloadlist.cpp" line="63"/>
+ <location filename="downloadlist.cpp" line="64"/>
<source>Name</source>
<translation>Jméno</translation>
</message>
<message>
- <location filename="downloadlist.cpp" line="64"/>
+ <location filename="downloadlist.cpp" line="65"/>
<source>Filetime</source>
<translation>Čas stáhnutí</translation>
</message>
<message>
- <location filename="downloadlist.cpp" line="65"/>
+ <location filename="downloadlist.cpp" line="66"/>
<source>Done</source>
<translation type="unfinished">Hotovo</translation>
</message>
<message>
- <location filename="downloadlist.cpp" line="79"/>
+ <location filename="downloadlist.cpp" line="82"/>
<source>Information missing, please select &quot;Query Info&quot; from the context menu to re-retrieve.</source>
<translation>Info chybí, označte &quot;Získat Info&quot; z kontextového menu pro pokus načtení z Nexusu.</translation>
</message>
+ <message>
+ <location filename="downloadlist.cpp" line="89"/>
+ <source>pending download</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>DownloadListWidget</name>
@@ -268,16 +317,6 @@ p, li { white-space: pre-wrap; }
<translation>#Placeholder</translation>
</message>
<message>
- <location filename="downloadlistwidget.ui" line="81"/>
- <source>0</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="downloadlistwidget.ui" line="88"/>
- <source>KB</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<location filename="downloadlistwidget.ui" line="99"/>
<location filename="downloadlistwidget.cpp" line="145"/>
<location filename="downloadlistwidget.cpp" line="147"/>
@@ -320,120 +359,135 @@ p, li { white-space: pre-wrap; }
<context>
<name>DownloadListWidgetCompactDelegate</name>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="130"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="126"/>
<source>Installed</source>
<translation>Nainstalované</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="133"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="129"/>
<source>Uninstalled</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="136"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="132"/>
<source>Done</source>
<translation>Hotovo</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="215"/>
- <location filename="downloadlistwidgetcompact.cpp" line="224"/>
- <location filename="downloadlistwidgetcompact.cpp" line="233"/>
- <location filename="downloadlistwidgetcompact.cpp" line="242"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="241"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="250"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="259"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="268"/>
<source>Are you sure?</source>
<translation>Jsi si jistý?</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="216"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="242"/>
<source>This will remove all finished downloads from this list and from disk.</source>
<translation>Tímto vymažeš všechny dokončené stáhnutí se seznamu i z disku.</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="225"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="251"/>
<source>This will remove all installed downloads from this list and from disk.</source>
<translation>Tímto vymažeš jenom nainstalované stáhnutí se seznamu i z disku.</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="234"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="260"/>
<source>This will permanently remove all finished downloads from this list (but NOT from disk).</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="243"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="269"/>
<source>This will permanently remove all installed downloads from this list (but NOT from disk).</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="269"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="298"/>
<source>Install</source>
<translation>Instaluj</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="271"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="300"/>
<source>Query Info</source>
<translation>Získej Info</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="273"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="302"/>
<source>Delete</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="274"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="304"/>
+ <source>Un-Hide</source>
+ <translation type="unfinished">Odekrýt</translation>
+ </message>
+ <message>
+ <location filename="downloadlistwidgetcompact.cpp" line="306"/>
<source>Remove from View</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="279"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="312"/>
<source>Remove</source>
<translation>Odstranit</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="276"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="309"/>
<source>Cancel</source>
<translation>Zrušit</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="120"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="88"/>
+ <source>&lt; mod %1 file %2 &gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="downloadlistwidgetcompact.cpp" line="93"/>
+ <source>Pending</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="downloadlistwidgetcompact.cpp" line="116"/>
<source>Paused</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="123"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="119"/>
<source>Fetching Info 1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="125"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="121"/>
<source>Fetching Info 2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="277"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="310"/>
<source>Pause</source>
<translation>Pauza</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="280"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="313"/>
<source>Resume</source>
<translation>Pokračuj</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="284"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="318"/>
<source>Delete Installed...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="285"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="319"/>
<source>Delete All...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="287"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="322"/>
<source>Remove Installed...</source>
<translation>Odstraň už nainstalované...</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="288"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="323"/>
<source>Remove All...</source>
<translation>Odstraň všechny...</translation>
</message>
@@ -441,64 +495,79 @@ p, li { white-space: pre-wrap; }
<context>
<name>DownloadListWidgetDelegate</name>
<message>
- <location filename="downloadlistwidget.cpp" line="228"/>
- <location filename="downloadlistwidget.cpp" line="237"/>
- <location filename="downloadlistwidget.cpp" line="246"/>
- <location filename="downloadlistwidget.cpp" line="255"/>
+ <location filename="downloadlistwidget.cpp" line="253"/>
+ <location filename="downloadlistwidget.cpp" line="262"/>
+ <location filename="downloadlistwidget.cpp" line="271"/>
+ <location filename="downloadlistwidget.cpp" line="280"/>
<source>Are you sure?</source>
<translation>Jsi si jistý?</translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="229"/>
+ <location filename="downloadlistwidget.cpp" line="254"/>
<source>This will remove all finished downloads from this list and from disk.</source>
<translation>Tímto vymažeš všechny dokončené stáhnutí se seznamu i z disku.</translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="238"/>
+ <location filename="downloadlistwidget.cpp" line="263"/>
<source>This will remove all installed downloads from this list and from disk.</source>
<translation>Tímto vymažeš jenom nainstalované stáhnutí se seznamu i z disku.</translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="247"/>
+ <location filename="downloadlistwidget.cpp" line="272"/>
<source>This will remove all finished downloads from this list (but NOT from disk).</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="256"/>
+ <location filename="downloadlistwidget.cpp" line="281"/>
<source>This will remove all installed downloads from this list (but NOT from disk).</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="281"/>
+ <location filename="downloadlistwidget.cpp" line="309"/>
<source>Install</source>
<translation>Instaluj</translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="283"/>
+ <location filename="downloadlistwidget.cpp" line="311"/>
<source>Query Info</source>
<translation>Získej Info</translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="285"/>
+ <location filename="downloadlistwidget.cpp" line="313"/>
<source>Delete</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="286"/>
+ <location filename="downloadlistwidget.cpp" line="315"/>
+ <source>Un-Hide</source>
+ <translation type="unfinished">Odekrýt</translation>
+ </message>
+ <message>
+ <location filename="downloadlistwidget.cpp" line="317"/>
<source>Remove from View</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="291"/>
+ <location filename="downloadlistwidget.cpp" line="323"/>
<source>Remove</source>
<translation>Odstraniť</translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="288"/>
+ <location filename="downloadlistwidget.cpp" line="320"/>
<source>Cancel</source>
<translation>Zrušit</translation>
</message>
<message>
+ <location filename="downloadlistwidget.cpp" line="88"/>
+ <source>&lt; mod %1 file %2 &gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="downloadlistwidget.cpp" line="91"/>
+ <source>Pending</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="downloadlistwidget.cpp" line="118"/>
<source>Fetching Info 1</source>
<translation type="unfinished"></translation>
@@ -509,32 +578,32 @@ p, li { white-space: pre-wrap; }
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="289"/>
+ <location filename="downloadlistwidget.cpp" line="321"/>
<source>Pause</source>
<translation>Pauza</translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="292"/>
+ <location filename="downloadlistwidget.cpp" line="324"/>
<source>Resume</source>
<translation>Pokračuj</translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="296"/>
+ <location filename="downloadlistwidget.cpp" line="329"/>
<source>Delete Installed...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="297"/>
+ <location filename="downloadlistwidget.cpp" line="330"/>
<source>Delete All...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="299"/>
+ <location filename="downloadlistwidget.cpp" line="333"/>
<source>Remove Installed...</source>
<translation>Odstranit už nainstalované...</translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="300"/>
+ <location filename="downloadlistwidget.cpp" line="334"/>
<source>Remove All...</source>
<translation>Odstranit všechny...</translation>
</message>
@@ -542,67 +611,81 @@ p, li { white-space: pre-wrap; }
<context>
<name>DownloadManager</name>
<message>
- <location filename="downloadmanager.cpp" line="125"/>
+ <location filename="downloadmanager.cpp" line="132"/>
<source>failed to rename &quot;%1&quot; to &quot;%2&quot;</source>
<translation>Nezdařilo se přejmenovat &quot;%1&quot; na &quot;%2&quot;</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="306"/>
+ <location filename="downloadmanager.cpp" line="342"/>
<source>Download again?</source>
<translation>Stáhnout znovu?</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="306"/>
+ <location filename="downloadmanager.cpp" line="342"/>
<source>A file with the same name has already been downloaded. Do you want to download it again? The new file will receive a different name.</source>
<translation>Soubor se stejným jménem už byl stáhnutý. Chcete ho stáhnout znovu? Nový soubor bude pojmenován jinak.</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="336"/>
+ <location filename="downloadmanager.cpp" line="388"/>
<source>failed to download %1: could not open output file: %2</source>
<translation>Stahování zlyhalo %1: nemožno otevřít výslední soubor: %2</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="366"/>
- <location filename="downloadmanager.cpp" line="585"/>
- <location filename="downloadmanager.cpp" line="595"/>
- <location filename="downloadmanager.cpp" line="604"/>
- <location filename="downloadmanager.cpp" line="614"/>
- <location filename="downloadmanager.cpp" line="624"/>
- <location filename="downloadmanager.cpp" line="634"/>
- <location filename="downloadmanager.cpp" line="645"/>
- <location filename="downloadmanager.cpp" line="654"/>
- <location filename="downloadmanager.cpp" line="664"/>
- <location filename="downloadmanager.cpp" line="679"/>
+ <location filename="downloadmanager.cpp" line="421"/>
+ <source>Wrong Game</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="downloadmanager.cpp" line="421"/>
+ <source>The download link is for a mod for &quot;%1&quot; but this instance of MO has been set up for &quot;%2&quot;.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="downloadmanager.cpp" line="439"/>
+ <location filename="downloadmanager.cpp" line="506"/>
+ <location filename="downloadmanager.cpp" line="682"/>
+ <location filename="downloadmanager.cpp" line="691"/>
+ <location filename="downloadmanager.cpp" line="701"/>
+ <location filename="downloadmanager.cpp" line="710"/>
+ <location filename="downloadmanager.cpp" line="724"/>
+ <location filename="downloadmanager.cpp" line="734"/>
+ <location filename="downloadmanager.cpp" line="744"/>
+ <location filename="downloadmanager.cpp" line="754"/>
+ <location filename="downloadmanager.cpp" line="765"/>
+ <location filename="downloadmanager.cpp" line="773"/>
+ <location filename="downloadmanager.cpp" line="782"/>
+ <location filename="downloadmanager.cpp" line="792"/>
+ <location filename="downloadmanager.cpp" line="807"/>
<source>invalid index</source>
<translation>neplatný index</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="384"/>
+ <location filename="downloadmanager.cpp" line="457"/>
<source>failed to delete %1</source>
<translation>odstránění zlyhalo %1</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="390"/>
+ <location filename="downloadmanager.cpp" line="463"/>
<source>failed to delete meta file for %1</source>
<translation>odstránění meta souboru zlyhalo pro %1</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="450"/>
- <location filename="downloadmanager.cpp" line="468"/>
- <location filename="downloadmanager.cpp" line="481"/>
- <location filename="downloadmanager.cpp" line="494"/>
- <location filename="downloadmanager.cpp" line="505"/>
- <location filename="downloadmanager.cpp" line="540"/>
+ <location filename="downloadmanager.cpp" line="539"/>
+ <location filename="downloadmanager.cpp" line="557"/>
+ <location filename="downloadmanager.cpp" line="570"/>
+ <location filename="downloadmanager.cpp" line="587"/>
+ <location filename="downloadmanager.cpp" line="598"/>
+ <location filename="downloadmanager.cpp" line="633"/>
<source>invalid index %1</source>
<translation>neplatný index %1</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="557"/>
+ <location filename="downloadmanager.cpp" line="650"/>
<source>Please enter the nexus mod id</source>
<translation>Prosím zadej Nexus mod ID</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="557"/>
+ <location filename="downloadmanager.cpp" line="650"/>
<source>Mod ID:</source>
<translation>Mod ID:</translation>
</message>
@@ -611,38 +694,43 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">neplatný alfabetický index %1</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="899"/>
+ <location filename="downloadmanager.cpp" line="1042"/>
<source>Information updated</source>
<translation>Info aktualizované</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="901"/>
- <location filename="downloadmanager.cpp" line="915"/>
+ <location filename="downloadmanager.cpp" line="1044"/>
+ <location filename="downloadmanager.cpp" line="1058"/>
<source>No matching file found on Nexus! Maybe this file is no longer available or it was renamed?</source>
<translation>Žádný přislouchající soubor nenalezen na Nexusu! Možná už není k dispozici nebo byl přejmenovaný?</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="903"/>
+ <location filename="downloadmanager.cpp" line="1046"/>
<source>No file on Nexus matches the selected file by name. Please manually choose the correct one.</source>
<translation>Žádný soubor na Nexusu nezodpovedá přesnému jménu. Zvolte ručne ten správný.</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="1032"/>
+ <location filename="downloadmanager.cpp" line="1180"/>
<source>No download server available. Please try again later.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="1074"/>
+ <location filename="downloadmanager.cpp" line="1224"/>
<source>Failed to request file info from nexus: %1</source>
<translation>Zlyhalo získání info z Nexusu %1</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="1097"/>
+ <location filename="downloadmanager.cpp" line="1249"/>
+ <source>Download failed. Server reported: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="downloadmanager.cpp" line="1251"/>
<source>Download failed: %1 (%2)</source>
<translation>Stahování zlyhalo: %1 (%2)</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="1174"/>
+ <location filename="downloadmanager.cpp" line="1331"/>
<source>failed to re-open %1</source>
<translation>zlyhalo znovu-otevření %1</translation>
</message>
@@ -752,7 +840,7 @@ Každá hra/aplikace distribuovaná skrz Steammá unikátní ID. MO potřebuje v
<message>
<location filename="editexecutablesdialog.ui" line="169"/>
<location filename="editexecutablesdialog.ui" line="172"/>
- <location filename="editexecutablesdialog.cpp" line="220"/>
+ <location filename="editexecutablesdialog.cpp" line="258"/>
<source>If checked, MO will be closed once the specified executable is run.</source>
<translation>Pokud je zaškrtnuté, MO se ukončí hned po spuštění Spouštěče.</translation>
</message>
@@ -769,7 +857,7 @@ Každá hra/aplikace distribuovaná skrz Steammá unikátní ID. MO potřebuje v
</message>
<message>
<location filename="editexecutablesdialog.ui" line="188"/>
- <location filename="editexecutablesdialog.cpp" line="190"/>
+ <location filename="editexecutablesdialog.cpp" line="196"/>
<source>Add</source>
<translation>Přidat</translation>
</message>
@@ -785,47 +873,64 @@ Každá hra/aplikace distribuovaná skrz Steammá unikátní ID. MO potřebuje v
<translation>Odstranit</translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="119"/>
+ <location filename="editexecutablesdialog.ui" line="233"/>
+ <source>Close</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="editexecutablesdialog.cpp" line="125"/>
<source>Select a binary</source>
<translation>Vyber binární soubor</translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="119"/>
+ <location filename="editexecutablesdialog.cpp" line="125"/>
<source>Executable (%1)</source>
<translation>Spuštění (%1)</translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="143"/>
+ <location filename="editexecutablesdialog.cpp" line="149"/>
<source>Java (32-bit) required</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="144"/>
+ <location filename="editexecutablesdialog.cpp" line="150"/>
<source>MO requires 32-bit java to run this application. If you already have it installed, select javaw.exe from that installation as the binary.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="160"/>
+ <location filename="editexecutablesdialog.cpp" line="166"/>
<source>Select a directory</source>
<translation>Vyber Zložku</translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="169"/>
+ <location filename="editexecutablesdialog.cpp" line="175"/>
<source>Confirm</source>
<translation>Potvrdit</translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="169"/>
+ <location filename="editexecutablesdialog.cpp" line="175"/>
<source>Really remove &quot;%1&quot; from executables?</source>
<translation>Opravdu odstranit &quot;%1&quot; ze seznamu Spouštění?</translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="194"/>
+ <location filename="editexecutablesdialog.cpp" line="200"/>
<source>Modify</source>
<translation>Ulož</translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="217"/>
+ <location filename="editexecutablesdialog.cpp" line="230"/>
+ <location filename="editexecutablesdialog.cpp" line="278"/>
+ <source>Save Changes?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="editexecutablesdialog.cpp" line="231"/>
+ <location filename="editexecutablesdialog.cpp" line="279"/>
+ <source>You made changes to the current executable, do you want to save them?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="editexecutablesdialog.cpp" line="255"/>
<source>MO must be kept running or this application will not work correctly.</source>
<translation>MO musí bežet, aby tahle aplikace pracovala správně.</translation>
</message>
@@ -1089,12 +1194,12 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">mo_archive.dll nenačteno: &quot;%1&quot;</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="97"/>
+ <location filename="installationmanager.cpp" line="98"/>
<source>Password required</source>
<translation>Heslo požadováno</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="97"/>
+ <location filename="installationmanager.cpp" line="98"/>
<source>Password</source>
<translation>Heslo</translation>
</message>
@@ -1116,8 +1221,8 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="installationmanager.cpp" line="164"/>
- <location filename="installationmanager.cpp" line="252"/>
- <location filename="installationmanager.cpp" line="530"/>
+ <location filename="installationmanager.cpp" line="248"/>
+ <location filename="installationmanager.cpp" line="529"/>
<source>Extracting files</source>
<translation>Rozbalují se soubory</translation>
</message>
@@ -1150,7 +1255,7 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">instalace zlyhala (errorcode %1)</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="624"/>
+ <location filename="installationmanager.cpp" line="609"/>
<source>File format &quot;%1&quot; not supported</source>
<translation>Formát souboru &quot;%1&quot; nepodporován</translation>
</message>
@@ -1171,32 +1276,32 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">Tenhle mod je zdá se už nainstalován. Chcete do nej jenom přidat (a možná přepsat rovnaké) soubory nebo chcete kompletne nahradit celý mod (předchozí se úplne vymaže)?</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="75"/>
+ <location filename="installationmanager.cpp" line="76"/>
<source>archive.dll not loaded: &quot;%1&quot;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="443"/>
+ <location filename="installationmanager.cpp" line="439"/>
<source>failed to create backup</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="449"/>
+ <location filename="installationmanager.cpp" line="448"/>
<source>Mod Name</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="449"/>
+ <location filename="installationmanager.cpp" line="448"/>
<source>Name</source>
<translation type="unfinished">Jméno</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="502"/>
+ <location filename="installationmanager.cpp" line="501"/>
<source>Invalid name</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="503"/>
+ <location filename="installationmanager.cpp" line="502"/>
<source>The name you entered is invalid, please enter a different one.</source>
<translation type="unfinished"></translation>
</message>
@@ -1215,52 +1320,52 @@ Poznámka: Instalátor nerozpoznává už nainstalované mody!</translation>
<translation type="obsolete">Prosím nainstalujte doplněk NCC</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="750"/>
+ <location filename="installationmanager.cpp" line="735"/>
<source>None of the available installer plugins were able to handle that archive</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="760"/>
+ <location filename="installationmanager.cpp" line="745"/>
<source>no error</source>
<translation>žádná chyba</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="763"/>
+ <location filename="installationmanager.cpp" line="748"/>
<source>7z.dll not found</source>
<translation>7z.dll nenalezeno</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="766"/>
+ <location filename="installationmanager.cpp" line="751"/>
<source>7z.dll isn&apos;t valid</source>
<translation>7z.dll je neplatný</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="769"/>
+ <location filename="installationmanager.cpp" line="754"/>
<source>archive not found</source>
<translation>archív nenalezen</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="772"/>
+ <location filename="installationmanager.cpp" line="757"/>
<source>failed to open archive</source>
<translation>nemožno otevřít archív</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="775"/>
+ <location filename="installationmanager.cpp" line="760"/>
<source>unsupported archive type</source>
<translation>nepodporovaný typ archívu</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="778"/>
+ <location filename="installationmanager.cpp" line="763"/>
<source>internal library error</source>
<translation>chyba internal library </translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="781"/>
+ <location filename="installationmanager.cpp" line="766"/>
<source>archive invalid</source>
<translation>archív je neplatný</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="785"/>
+ <location filename="installationmanager.cpp" line="770"/>
<source>unknown archive error</source>
<translation>neznáma chyba archívu</translation>
</message>
@@ -1283,7 +1388,7 @@ Poznámka: Instalátor nerozpoznává už nainstalované mody!</translation>
<translation>MO je uzamčený pokud aplikace/hra běží.</translation>
</message>
<message>
- <location filename="lockeddialog.ui" line="51"/>
+ <location filename="lockeddialog.ui" line="54"/>
<source>Unlock</source>
<translation>Odemkni</translation>
</message>
@@ -1291,7 +1396,7 @@ Poznámka: Instalátor nerozpoznává už nainstalované mody!</translation>
<context>
<name>LogBuffer</name>
<message>
- <location filename="logbuffer.cpp" line="72"/>
+ <location filename="logbuffer.cpp" line="73"/>
<source>failed to write log to %1: %2</source>
<translation>nezdařil se zápis do logu %1: %2</translation>
</message>
@@ -1299,12 +1404,12 @@ Poznámka: Instalátor nerozpoznává už nainstalované mody!</translation>
<context>
<name>MOApplication</name>
<message>
- <location filename="moapplication.cpp" line="60"/>
+ <location filename="moapplication.cpp" line="68"/>
<source>an error occured: %1</source>
<translation type="unfinished">vyskytla se chyba: %1</translation>
</message>
<message>
- <location filename="moapplication.cpp" line="65"/>
+ <location filename="moapplication.cpp" line="73"/>
<source>an error occured</source>
<translation type="unfinished">vyskytla se chyba</translation>
</message>
@@ -1379,8 +1484,8 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="mainwindow.ui" line="405"/>
- <location filename="mainwindow.ui" line="722"/>
- <location filename="mainwindow.ui" line="1027"/>
+ <location filename="mainwindow.ui" line="724"/>
+ <location filename="mainwindow.ui" line="1046"/>
<source>Namefilter</source>
<translation type="unfinished"></translation>
</message>
@@ -1497,12 +1602,12 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">DŮLEŽITÉ: Můžete měnit pořadí BSA souborů tady, ale soubory modů ako takých má vyšší prioritu a přepíše konflikty, které by vznikly zde!</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="751"/>
+ <location filename="mainwindow.ui" line="762"/>
<source>List of available BS Archives. Archives not checked here are not managed by MO and ignore installation order.</source>
<translation type="unfinished">Seznam BS archivů, které jsou k dispozici. Archivy, které jsou zde neni označeny nebudou načteny do hry.</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="754"/>
+ <location filename="mainwindow.ui" line="765"/>
<source>BSA files are archives (comparable to .zip files) that contain data assets (meshes, textures, ...) to be used by the game. As such they &quot;compete&quot; with loose files in your data directory over which is loaded.
By default, BSAs that share their base name with an enabled ESP (i.e. plugin.esp and plugin.bsa) are automatically loaded and will have precedence over all loose files, the installation order you set up to the left is then ignored!
@@ -1513,67 +1618,81 @@ By default, BSAs that share their base name with an enabled ESP (i.e. plugin.esp
BSAs checked here are loaded in such a way that your installation order is obeyed properly.</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="794"/>
- <location filename="mainwindow.ui" line="868"/>
+ <location filename="mainwindow.ui" line="811"/>
+ <location filename="mainwindow.ui" line="880"/>
<source>File</source>
<translation type="unfinished">Soubor</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="799"/>
- <location filename="mainwindow.ui" line="873"/>
+ <location filename="mainwindow.ui" line="819"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Marked Archives (&lt;img src=&quot;:/MO/gui/warning_16&quot;/&gt;) are still loaded on Skyrim but the &lt;a href=&quot;http://forums.bethsoft.com/topic/1354395-update-bsas-and-you/&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;regular file override&lt;/span&gt;&lt;/a&gt; mechanism will apply: Loose files override BSAs, no matter the mod/plugin priority.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.ui" line="885"/>
<source>Mod</source>
<translation type="unfinished">Mod</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="807"/>
- <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Marked Archives (&lt;img src=&quot;:/MO/gui/resources/dialog-warning_16.png&quot;/&gt;) are still loaded on Skyrim but the &lt;a href=&quot;http://forums.bethsoft.com/topic/1354395-update-bsas-and-you/&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;regular file override&lt;/span&gt;&lt;/a&gt; mechanism will apply: Loose files override BSAs, no matter the mod/plugin priority.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <location filename="mainwindow.ui" line="830"/>
+ <source>Data</source>
+ <translation type="unfinished">Data</translation>
+ </message>
+ <message>
+ <location filename="mainwindow.ui" line="605"/>
+ <source>Plugins</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="818"/>
- <source>Data</source>
- <translation type="unfinished">Data</translation>
+ <location filename="mainwindow.ui" line="731"/>
+ <source>Sort</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.ui" line="741"/>
+ <source>Archives</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="836"/>
+ <location filename="mainwindow.ui" line="848"/>
<source>refresh data-directory overview</source>
<translation type="unfinished">znovunačti data</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="839"/>
+ <location filename="mainwindow.ui" line="851"/>
<source>Refresh the overview. This may take a moment.</source>
<translation type="unfinished">Obnov náhled. Tohle může chvíli trvat.</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="842"/>
- <location filename="mainwindow.cpp" line="3328"/>
- <location filename="mainwindow.cpp" line="4059"/>
+ <location filename="mainwindow.ui" line="854"/>
+ <location filename="mainwindow.cpp" line="3781"/>
+ <location filename="mainwindow.cpp" line="4604"/>
<source>Refresh</source>
<translation type="unfinished">Znovunačíst</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="858"/>
+ <location filename="mainwindow.ui" line="870"/>
<source>This is an overview of your data directory as visible to the game (and tools). </source>
<translation type="unfinished">Tohle je náhled tvé data struktury, kterou načte hra (i nástroje).</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="883"/>
- <location filename="mainwindow.ui" line="886"/>
+ <location filename="mainwindow.ui" line="895"/>
+ <location filename="mainwindow.ui" line="898"/>
<source>Filter the above list so that only conflicts are displayed.</source>
<translation type="unfinished">Přefiltruje seznam nahoře tak, že budou zobrazeny pouze konflikty.</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="889"/>
+ <location filename="mainwindow.ui" line="901"/>
<source>Show only conflicts</source>
<translation type="unfinished">Ukaž jenom konflikty</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="897"/>
+ <location filename="mainwindow.ui" line="909"/>
<source>Saves</source>
<translation type="unfinished">Uložené pozice</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="921"/>
+ <location filename="mainwindow.ui" line="933"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
@@ -1590,155 +1709,160 @@ p, li { white-space: pre-wrap; }
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Pokud kliknete &amp;quot;Fixni Mody...&amp;quot; v kontext menu, MO se pokusí aktivovat všechny mody a esp soubory, které byli v pozici používány. Nic se však nevypne!&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="935"/>
+ <location filename="mainwindow.ui" line="947"/>
<source>Downloads</source>
<translation type="unfinished">Stáhnuté</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="967"/>
+ <location filename="mainwindow.ui" line="979"/>
<source>This is a list of mods you downloaded from Nexus. Double click one to install it.</source>
<translation type="unfinished">Tohle je seznam modů, které jsi stánul z Nexusu. Dvojklik nainstaluje mod.</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1020"/>
+ <location filename="mainwindow.ui" line="1032"/>
<source>Compact</source>
<translation type="unfinished">Kompaktní</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1051"/>
+ <location filename="mainwindow.ui" line="1039"/>
+ <source>Show Hidden</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.ui" line="1070"/>
<source>Tool Bar</source>
<translation type="unfinished">Panel nástrojú</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1093"/>
+ <location filename="mainwindow.ui" line="1112"/>
<source>Install Mod</source>
<translation type="unfinished">Instaluj mod</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1096"/>
+ <location filename="mainwindow.ui" line="1115"/>
<source>Install &amp;Mod</source>
<translation type="unfinished">Instaluj &amp;Mod</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1099"/>
+ <location filename="mainwindow.ui" line="1118"/>
<source>Install a new mod from an archive</source>
<translation type="unfinished">Instaluj nový mod z archívu</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1102"/>
+ <location filename="mainwindow.ui" line="1121"/>
<source>Ctrl+M</source>
<translation type="unfinished">Ctrl+M</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1111"/>
+ <location filename="mainwindow.ui" line="1130"/>
<source>Profiles</source>
<translation type="unfinished">Profily</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1114"/>
+ <location filename="mainwindow.ui" line="1133"/>
<source>&amp;Profiles</source>
<translation type="unfinished">&amp;Profily</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1117"/>
+ <location filename="mainwindow.ui" line="1136"/>
<source>Configure Profiles</source>
<translation type="unfinished">Nastav profily</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1120"/>
+ <location filename="mainwindow.ui" line="1139"/>
<source>Ctrl+P</source>
<translation type="unfinished">Ctrl+P</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1129"/>
+ <location filename="mainwindow.ui" line="1148"/>
<source>Executables</source>
<translation type="unfinished">Spouštění</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1132"/>
+ <location filename="mainwindow.ui" line="1151"/>
<source>&amp;Executables</source>
<translation type="unfinished">&amp;Spouštění</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1135"/>
+ <location filename="mainwindow.ui" line="1154"/>
<source>Configure the executables that can be started through Mod Organizer</source>
<translation type="unfinished">Konfigurace spouštění, které lze použít pro načtení modů z MO</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1138"/>
+ <location filename="mainwindow.ui" line="1157"/>
<source>Ctrl+E</source>
<translation type="unfinished">Ctrl+E</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1147"/>
- <location filename="mainwindow.ui" line="1153"/>
+ <location filename="mainwindow.ui" line="1166"/>
+ <location filename="mainwindow.ui" line="1172"/>
<source>Tools</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1150"/>
+ <location filename="mainwindow.ui" line="1169"/>
<source>&amp;Tools</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1156"/>
+ <location filename="mainwindow.ui" line="1175"/>
<source>Ctrl+I</source>
<translation type="unfinished">Ctrl+I</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1165"/>
+ <location filename="mainwindow.ui" line="1184"/>
<source>Settings</source>
<translation type="unfinished">Nastavení</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1168"/>
+ <location filename="mainwindow.ui" line="1187"/>
<source>&amp;Settings</source>
<translation type="unfinished">&amp;Nastavení</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1171"/>
+ <location filename="mainwindow.ui" line="1190"/>
<source>Configure settings and workarounds</source>
<translation type="unfinished">Konfigurace a nastavení programu a různých řešení</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1174"/>
+ <location filename="mainwindow.ui" line="1193"/>
<source>Ctrl+S</source>
<translation type="unfinished">Ctrl+S</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1183"/>
+ <location filename="mainwindow.ui" line="1202"/>
<source>Nexus</source>
<translation type="unfinished">Nexus</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1186"/>
+ <location filename="mainwindow.ui" line="1205"/>
<source>Search nexus network for more mods</source>
<translation type="unfinished">Prohledat mody na nexusu</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1189"/>
+ <location filename="mainwindow.ui" line="1208"/>
<source>Ctrl+N</source>
<translation type="unfinished">Ctrl+N</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1201"/>
- <location filename="mainwindow.cpp" line="4007"/>
+ <location filename="mainwindow.ui" line="1220"/>
+ <location filename="mainwindow.cpp" line="4545"/>
<source>Update</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1204"/>
+ <location filename="mainwindow.ui" line="1223"/>
<source>Mod Organizer is up-to-date</source>
<translation type="unfinished">Verze Mod Organizer u je aktuální</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1216"/>
- <location filename="mainwindow.cpp" line="478"/>
+ <location filename="mainwindow.ui" line="1235"/>
+ <location filename="mainwindow.cpp" line="509"/>
<source>No Problems</source>
<translation type="unfinished">Žádné problémy</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1219"/>
+ <location filename="mainwindow.ui" line="1238"/>
<source>This button will be highlighted if MO discovered potential problems in your setup and provide tips on how to fix them.
!Work in progress!
@@ -1749,54 +1873,54 @@ Right now this has very limited functionality</source>
V současnosti má omezenou funkcionalitu</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1231"/>
- <location filename="mainwindow.ui" line="1234"/>
+ <location filename="mainwindow.ui" line="1250"/>
+ <location filename="mainwindow.ui" line="1253"/>
<source>Help</source>
<translation type="unfinished">Pomoc</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1237"/>
+ <location filename="mainwindow.ui" line="1256"/>
<source>Ctrl+H</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1246"/>
+ <location filename="mainwindow.ui" line="1265"/>
<source>Endorse MO</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1249"/>
- <location filename="mainwindow.cpp" line="4087"/>
+ <location filename="mainwindow.ui" line="1268"/>
+ <location filename="mainwindow.cpp" line="4633"/>
<source>Endorse Mod Organizer</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="204"/>
+ <location filename="mainwindow.cpp" line="223"/>
<source>Toolbar</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="205"/>
+ <location filename="mainwindow.cpp" line="224"/>
<source>Desktop</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="206"/>
+ <location filename="mainwindow.cpp" line="225"/>
<source>Start Menu</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="475"/>
+ <location filename="mainwindow.cpp" line="505"/>
<source>Problems</source>
<translation type="unfinished">Problémy</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="476"/>
+ <location filename="mainwindow.cpp" line="506"/>
<source>There are potential problems with your setup</source>
<translation type="unfinished">Existují potenciální problémy s programem</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="479"/>
+ <location filename="mainwindow.cpp" line="510"/>
<source>Everything seems to be in order</source>
<translation type="unfinished">Všechno se jeví v pořádku</translation>
</message>
@@ -1813,22 +1937,22 @@ V současnosti má omezenou funkcionalitu</translation>
<translation type="obsolete">&lt;li&gt;dotNet není nainstalován nebo je neaktuální. Tohle vyžaduje NCC. Najděte ho zde: &lt;a href=&quot;%1&quot;&gt;%1&lt;/a&gt;&lt;/li&gt;</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="531"/>
+ <location filename="mainwindow.cpp" line="568"/>
<source>Help on UI</source>
<translation type="unfinished">Pomoc s programem</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="535"/>
+ <location filename="mainwindow.cpp" line="572"/>
<source>Documentation Wiki</source>
<translation type="unfinished">Dokumentace wiki</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="539"/>
+ <location filename="mainwindow.cpp" line="576"/>
<source>Report Issue</source>
<translation type="unfinished">Nahlásit chybu</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="543"/>
+ <location filename="mainwindow.cpp" line="580"/>
<source>Tutorials</source>
<translation type="unfinished"></translation>
</message>
@@ -1837,374 +1961,430 @@ V současnosti má omezenou funkcionalitu</translation>
<translation type="obsolete">pořadí načtení se nezdařilo uložit</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="670"/>
+ <location filename="mainwindow.cpp" line="705"/>
<source>failed to save load order: %1</source>
<translation type="unfinished">zlyhalo uložení pořadí načtení: %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="600"/>
<source>failed to save archives order, do you have write access to &quot;%1&quot;?</source>
- <translation type="unfinished">zlyhal zápis pořadí archivů, máte administrátorsky povoleno zapisovat na &quot;%1&quot;?</translation>
+ <translation type="obsolete">zlyhal zápis pořadí archivů, máte administrátorsky povoleno zapisovat na &quot;%1&quot;?</translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="619"/>
+ <source>About</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="620"/>
+ <source>About Qt</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="687"/>
+ <location filename="mainwindow.cpp" line="717"/>
<source>Name</source>
<translation type="unfinished">Jméno</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="688"/>
+ <location filename="mainwindow.cpp" line="718"/>
<source>Please enter a name for the new profile</source>
<translation type="unfinished">Prosím zadej jméno pro nový profil</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="696"/>
+ <location filename="mainwindow.cpp" line="726"/>
<source>failed to create profile: %1</source>
<translation type="unfinished">Zlyhalo vytvoření profilu: %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="739"/>
+ <location filename="mainwindow.cpp" line="769"/>
<source>Show tutorial?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="740"/>
+ <location filename="mainwindow.cpp" line="770"/>
<source>You are starting Mod Organizer for the first time. Do you want to show a tutorial of its basic features? If you choose no you can always start the tutorial from the &quot;Help&quot;-menu.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="769"/>
+ <location filename="mainwindow.cpp" line="801"/>
<source>Downloads in progress</source>
<translation type="unfinished">Probíhá stahování</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="770"/>
+ <location filename="mainwindow.cpp" line="802"/>
<source>There are still downloads in progress, do you really want to quit?</source>
<translation type="unfinished">Pořád probíhá stahování, určitě chcete skončit (zruší stahování)?</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="816"/>
+ <location filename="mainwindow.cpp" line="848"/>
<source>failed to read savegame: %1</source>
<translation type="unfinished">nezdařilo se načíst pozici: %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="941"/>
+ <location filename="mainwindow.cpp" line="972"/>
<source>Plugin &quot;%1&quot; failed: %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1183"/>
+ <location filename="mainwindow.cpp" line="1085"/>
+ <source>Plugin error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="1086"/>
+ <source>It appears the plugin &quot;%1&quot; failed to load last startup and caused MO to crash. Do you want to disable it?
+(Please note: If this is the first time you see this message for this plugin you may want to give it another try. The plugin may be able to recover from the problem)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="1270"/>
<source>Failed to start &quot;%1&quot;</source>
<translation type="unfinished">Zlyhal start &quot;%1&quot;</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1185"/>
+ <location filename="mainwindow.cpp" line="1272"/>
<source>Waiting</source>
<translation type="unfinished">Čekání</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1185"/>
+ <location filename="mainwindow.cpp" line="1272"/>
<source>Please press OK once you&apos;re logged into steam.</source>
<translation type="unfinished">Stiskni OK až budeš přihlášen do Steamu.</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1197"/>
<source>&quot;%1&quot; not found</source>
- <translation type="unfinished">&quot;%1&quot; nenalezeno</translation>
+ <translation type="obsolete">&quot;%1&quot; nenalezeno</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1211"/>
+ <location filename="mainwindow.cpp" line="1298"/>
<source>Start Steam?</source>
<translation type="unfinished">Spustit Steam?</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1212"/>
+ <location filename="mainwindow.cpp" line="1299"/>
<source>Steam is required to be running already to correctly start the game. Should MO try to start steam now?</source>
<translation type="unfinished">Steam by měl běžet aby se podařilo spustit hru. Má se MO pokusit spustit steam teď?</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1426"/>
+ <location filename="mainwindow.cpp" line="1526"/>
<source>Also in: &lt;br&gt;</source>
<translation type="unfinished">Také v: &lt;br&gt;</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1437"/>
+ <location filename="mainwindow.cpp" line="1537"/>
<source>No conflict</source>
<translation type="unfinished">Žádné konflikty</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1552"/>
+ <location filename="mainwindow.cpp" line="1692"/>
<source>&lt;Edit...&gt;</source>
<translation type="unfinished">&lt;Edit...&gt;</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1771"/>
+ <location filename="mainwindow.cpp" line="1929"/>
<source>This bsa is enabled in the ini file so it may be required!</source>
<translation type="unfinished">Tenhle BSA soubor je aktivován v ini souboru, tak zřejmě je vyžadován!</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1778"/>
+ <location filename="mainwindow.cpp" line="1936"/>
<source>This archive will still be loaded since there is a plugin of the same name but its files will not follow installation order!</source>
<translation type="unfinished">Tento archív se stejně načte, protože existuje plugin se stejným jménem ale jeho soubory nebudou zodpovídat pořadí nainstalování!</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1833"/>
+ <location filename="mainwindow.cpp" line="1991"/>
<source>Activating Network Proxy</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1962"/>
- <location filename="mainwindow.cpp" line="3755"/>
+ <location filename="mainwindow.cpp" line="2122"/>
+ <location filename="mainwindow.cpp" line="4248"/>
<source>Installation successful</source>
<translation type="unfinished">Instalace úspěšná</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1973"/>
- <location filename="mainwindow.cpp" line="3768"/>
+ <location filename="mainwindow.cpp" line="2133"/>
+ <location filename="mainwindow.cpp" line="4261"/>
<source>Configure Mod</source>
<translation type="unfinished">Konfigurace Modu</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1974"/>
- <location filename="mainwindow.cpp" line="3769"/>
+ <location filename="mainwindow.cpp" line="2134"/>
+ <location filename="mainwindow.cpp" line="4262"/>
<source>This mod contains ini tweaks. Do you want to configure them now?</source>
<translation type="unfinished">Tenhle mod obsahuje ini úpravy. Chcete je nastavovat teď?</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1980"/>
- <location filename="mainwindow.cpp" line="3775"/>
+ <location filename="mainwindow.cpp" line="2140"/>
+ <location filename="mainwindow.cpp" line="4268"/>
<source>mod &quot;%1&quot; not found</source>
<translation type="unfinished">mod &quot;%1&quot; nenalezen</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1983"/>
- <location filename="mainwindow.cpp" line="3781"/>
+ <location filename="mainwindow.cpp" line="2143"/>
+ <location filename="mainwindow.cpp" line="4274"/>
<source>Installation cancelled</source>
<translation type="unfinished">Instalace zrušena</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1983"/>
- <location filename="mainwindow.cpp" line="3781"/>
+ <location filename="mainwindow.cpp" line="2143"/>
+ <location filename="mainwindow.cpp" line="4274"/>
<source>The mod was not installed completely.</source>
<translation type="unfinished">Tento mod se nenainstaloval úplne.</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2018"/>
+ <location filename="mainwindow.cpp" line="2292"/>
<source>Some plugins could not be loaded</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2021"/>
- <location filename="mainwindow.cpp" line="2038"/>
+ <location filename="mainwindow.cpp" line="2295"/>
+ <source>Too many esps and esms enabled</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="2298"/>
+ <location filename="mainwindow.cpp" line="2319"/>
<source>Description missing</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2030"/>
- <source>The following Plugins could not be loaded. The reason may be missing dependencies (i.e. python) or an outdated version:&lt;ul&gt;</source>
+ <location filename="mainwindow.cpp" line="2315"/>
+ <source>The game doesn&apos;t allow more than 255 active plugins (including the official ones) to be loaded. You have to disable some unused plugins or merge some plugins into one. You can find a guide here: &lt;a href=&quot;http://wiki.step-project.com/Guide:Merging_Plugins&quot;&gt;http://wiki.step-project.com/Guide:Merging_Plugins&lt;/a&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2060"/>
+ <location filename="mainwindow.cpp" line="2341"/>
<source>Choose Mod</source>
<translation type="unfinished">Vyber Mod</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2061"/>
+ <location filename="mainwindow.cpp" line="2342"/>
<source>Mod Archive</source>
<translation type="unfinished">Archív Modu</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2214"/>
+ <location filename="mainwindow.cpp" line="2495"/>
<source>Start Tutorial?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2215"/>
+ <location filename="mainwindow.cpp" line="2496"/>
<source>You&apos;re about to start a tutorial. For technical reasons it&apos;s not possible to end the tutorial early. Continue?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2360"/>
- <location filename="mainwindow.cpp" line="3683"/>
+ <location filename="mainwindow.cpp" line="2651"/>
+ <location filename="mainwindow.cpp" line="4171"/>
<source>Download started</source>
<translation type="unfinished">Stahování začalo</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2391"/>
+ <location filename="mainwindow.cpp" line="2682"/>
<source>failed to update mod list: %1</source>
<translation type="unfinished">nezdařilo se aktualizovat seznam modů: %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2418"/>
+ <location filename="mainwindow.cpp" line="2711"/>
<source>failed to spawn notepad.exe: %1</source>
<translation type="unfinished">zlyhalo otevření notepad.exe: %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2459"/>
+ <location filename="mainwindow.cpp" line="2752"/>
<source>failed to open %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2537"/>
+ <location filename="mainwindow.cpp" line="2830"/>
<source>failed to change origin name: %1</source>
<translation type="unfinished">Nezdařilo se změnit původní jméno: %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2676"/>
+ <location filename="mainwindow.cpp" line="2860"/>
+ <source>failed to move &quot;%1&quot; from mod &quot;%2&quot; to &quot;%3&quot;: %4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="2997"/>
<source>Multiple esps activated, please check that they don&apos;t conflict.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3005"/>
- <location filename="mainwindow.cpp" line="3339"/>
+ <location filename="mainwindow.cpp" line="3345"/>
+ <location filename="mainwindow.cpp" line="3792"/>
<source>Create Mod...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3006"/>
- <source>This will move all files from overwrite into a new, regular mod.
-Please enter a name: </source>
+ <location filename="mainwindow.cpp" line="3355"/>
+ <source>A mod with this name already exists</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3015"/>
- <source>A mod with this name already exists</source>
+ <location filename="mainwindow.cpp" line="3613"/>
+ <source>Continue?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="3614"/>
+ <source>The versioning scheme decides which version is considered newer than another.
+This function will guess the versioning scheme under the assumption that the installed version is outdated.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3410"/>
+ <location filename="mainwindow.cpp" line="3634"/>
+ <location filename="mainwindow.cpp" line="4516"/>
+ <source>Sorry</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="3635"/>
+ <source>I don&apos;t know a versioning scheme where %1 is newer than %2.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="3883"/>
<source>&lt;All&gt;</source>
<translation type="unfinished">&lt;Všechny&gt;</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2589"/>
+ <location filename="mainwindow.cpp" line="2909"/>
<source>&lt;Checked&gt;</source>
<translation type="unfinished">&lt;Aktivované&gt;</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="943"/>
+ <location filename="mainwindow.cpp" line="974"/>
<source>Plugin &quot;%1&quot; failed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1007"/>
+ <location filename="mainwindow.cpp" line="1047"/>
<source>failed to init plugin %1: %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2590"/>
+ <location filename="mainwindow.cpp" line="2307"/>
+ <source>The following plugins could not be loaded. The reason may be missing dependencies (i.e. python) or an outdated version:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="2910"/>
<source>&lt;Unchecked&gt;</source>
<translation type="unfinished">&lt;Neaktivované&gt;</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2591"/>
+ <location filename="mainwindow.cpp" line="2911"/>
<source>&lt;Update&gt;</source>
<translation type="unfinished">&lt;Aktualizace&gt;</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2592"/>
+ <location filename="mainwindow.cpp" line="2912"/>
<source>&lt;No category&gt;</source>
<translation type="unfinished">&lt;Bez kategorie&gt;</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2593"/>
+ <location filename="mainwindow.cpp" line="2913"/>
<source>&lt;Conflicted&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2626"/>
+ <location filename="mainwindow.cpp" line="2914"/>
+ <source>&lt;Not Endorsed&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="2947"/>
<source>failed to rename mod: %1</source>
<translation type="unfinished">Nezdařilo se přejmenovat mod: %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2639"/>
+ <location filename="mainwindow.cpp" line="2960"/>
<source>Overwrite?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2640"/>
+ <location filename="mainwindow.cpp" line="2961"/>
<source>This will replace the existing mod &quot;%1&quot;. Continue?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2643"/>
+ <location filename="mainwindow.cpp" line="2964"/>
<source>failed to remove mod &quot;%1&quot;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2647"/>
- <location filename="mainwindow.cpp" line="3953"/>
- <location filename="mainwindow.cpp" line="3977"/>
+ <location filename="mainwindow.cpp" line="2968"/>
+ <location filename="mainwindow.cpp" line="4446"/>
+ <location filename="mainwindow.cpp" line="4470"/>
<source>failed to rename &quot;%1&quot; to &quot;%2&quot;</source>
<translation type="unfinished">Nezdařilo se přejmenovat &quot;%1&quot; na &quot;%2&quot;</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2702"/>
- <location filename="mainwindow.cpp" line="3243"/>
- <location filename="mainwindow.cpp" line="3252"/>
+ <location filename="mainwindow.cpp" line="3024"/>
+ <location filename="mainwindow.cpp" line="3687"/>
+ <location filename="mainwindow.cpp" line="3695"/>
+ <location filename="mainwindow.cpp" line="3902"/>
<source>Confirm</source>
<translation type="unfinished">Potvrdit</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2703"/>
+ <location filename="mainwindow.cpp" line="3025"/>
<source>Remove the following mods?&lt;br&gt;&lt;ul&gt;%1&lt;/ul&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2714"/>
+ <location filename="mainwindow.cpp" line="3036"/>
<source>failed to remove mod: %1</source>
<translation type="unfinished">Nezdařilo se odstranit mod: %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2744"/>
- <location filename="mainwindow.cpp" line="2747"/>
+ <location filename="mainwindow.cpp" line="3071"/>
+ <location filename="mainwindow.cpp" line="3074"/>
<source>Failed</source>
<translation type="unfinished">Zlyhání</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2744"/>
+ <location filename="mainwindow.cpp" line="3071"/>
<source>Installation file no longer exists</source>
<translation type="unfinished">Instalační soubor již neexistuje</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2748"/>
+ <location filename="mainwindow.cpp" line="3075"/>
<source>Mods installed with old versions of MO can&apos;t be reinstalled in this way.</source>
<translation type="unfinished">Mody nainstalovány staršími verzemi MO nemůžou být přeinstalovány tímto spůsobem.</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2763"/>
- <location filename="mainwindow.cpp" line="2790"/>
+ <location filename="mainwindow.cpp" line="3090"/>
+ <location filename="mainwindow.cpp" line="3117"/>
<source>You need to be logged in with Nexus to endorse</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2906"/>
- <location filename="mainwindow.cpp" line="4335"/>
+ <location filename="mainwindow.cpp" line="3249"/>
+ <location filename="mainwindow.cpp" line="4882"/>
<source>Extract BSA</source>
<translation type="unfinished">Extrakce BSA</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2907"/>
+ <location filename="mainwindow.cpp" line="3250"/>
<source>This mod contains at least one BSA. Do you want to unpack it?
(This removes the BSA after completion. If you don&apos;t know about BSAs, just select no)</source>
<translation type="unfinished">Tento mod obsahuje alespoň jeden BSA soubor. Chcete rozpakovat i jeho obsah?
(BSA se po úspěšném rozpakování odstrání. Pokud nevíte, co je BSA, zvolte možnost Ne)</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2917"/>
- <location filename="mainwindow.cpp" line="4292"/>
- <location filename="mainwindow.cpp" line="4343"/>
+ <location filename="mainwindow.cpp" line="3259"/>
+ <location filename="mainwindow.cpp" line="4839"/>
+ <location filename="mainwindow.cpp" line="4890"/>
<source>failed to read %1: %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2930"/>
- <location filename="mainwindow.cpp" line="4354"/>
+ <location filename="mainwindow.cpp" line="3272"/>
+ <location filename="mainwindow.cpp" line="4901"/>
<source>This archive contains invalid hashes. Some files may be broken.</source>
<translation type="unfinished">Tento archiv má neplatné identifikační součty. Nekteré soubory mohou být poškozeny.</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2964"/>
+ <location filename="mainwindow.cpp" line="3306"/>
<source>Nexus ID for this Mod is unknown</source>
<translation type="unfinished">Nexus ID pro tento Mod není známo</translation>
</message>
@@ -2217,371 +2397,456 @@ Please enter a name: </source>
<translation type="obsolete">Zvol Prioritu</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3243"/>
+ <location filename="mainwindow.cpp" line="3687"/>
<source>Really enable all visible mods?</source>
<translation type="unfinished">Opravdu aktivovat všechny zobrazené mody?</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3252"/>
+ <location filename="mainwindow.cpp" line="3695"/>
<source>Really disable all visible mods?</source>
<translation type="unfinished">Opravdu deaktivovat všechny zobrazené mody?</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3261"/>
+ <location filename="mainwindow.cpp" line="3703"/>
<source>Choose what to export</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3263"/>
+ <location filename="mainwindow.cpp" line="3705"/>
<source>Everything</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3263"/>
+ <location filename="mainwindow.cpp" line="3705"/>
<source>All installed mods are included in the list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3264"/>
+ <location filename="mainwindow.cpp" line="3706"/>
<source>Active Mods</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3264"/>
+ <location filename="mainwindow.cpp" line="3706"/>
<source>Only active (checked) mods from your current profile are included</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3265"/>
+ <location filename="mainwindow.cpp" line="3707"/>
<source>Visible</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3265"/>
+ <location filename="mainwindow.cpp" line="3707"/>
<source>All mods visible in the mod list are included</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3308"/>
+ <location filename="mainwindow.cpp" line="3750"/>
<source>export failed: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3321"/>
+ <location filename="mainwindow.cpp" line="3774"/>
<source>Install Mod...</source>
<translation type="unfinished">Instaluj Mod...</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3323"/>
+ <location filename="mainwindow.cpp" line="3776"/>
<source>Enable all visible</source>
<translation type="unfinished">Aktivuj všechny v seznamu</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3324"/>
+ <location filename="mainwindow.cpp" line="3777"/>
<source>Disable all visible</source>
<translation type="unfinished">Deaktivuj všechny v seznamu</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3326"/>
+ <location filename="mainwindow.cpp" line="3779"/>
<source>Check all for update</source>
<translation type="unfinished">Skontroluj všechny pro aktualizaci</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3330"/>
+ <location filename="mainwindow.cpp" line="3783"/>
<source>Export to csv...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3338"/>
+ <location filename="mainwindow.cpp" line="3791"/>
<source>Sync to Mods...</source>
<translation type="unfinished">Synchronizuj s Mody...</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3342"/>
+ <location filename="mainwindow.cpp" line="3795"/>
<source>Restore Backup</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3343"/>
+ <location filename="mainwindow.cpp" line="3796"/>
<source>Remove Backup...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3345"/>
<source>Set Category</source>
- <translation type="unfinished">Označ Kategorii</translation>
+ <translation type="obsolete">Označ Kategorii</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3349"/>
+ <location filename="mainwindow.cpp" line="3808"/>
<source>Primary Category</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3353"/>
+ <location filename="mainwindow.cpp" line="3815"/>
+ <source>Change versioning scheme</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="3819"/>
+ <source>Un-ignore update</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="3821"/>
+ <source>Ignore update</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="3826"/>
<source>Rename Mod...</source>
<translation type="unfinished">Přejmenuj Mod...</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3354"/>
+ <location filename="mainwindow.cpp" line="3827"/>
<source>Remove Mod...</source>
<translation type="unfinished">Odstranit Mod...</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3355"/>
+ <location filename="mainwindow.cpp" line="3828"/>
<source>Reinstall Mod</source>
<translation type="unfinished">Přeinstaluj Mod</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3358"/>
+ <location filename="mainwindow.cpp" line="3831"/>
<source>Un-Endorse</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3361"/>
- <location filename="mainwindow.cpp" line="3365"/>
+ <location filename="mainwindow.cpp" line="3834"/>
+ <location filename="mainwindow.cpp" line="3838"/>
<source>Endorse</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3362"/>
+ <location filename="mainwindow.cpp" line="3835"/>
<source>Won&apos;t endorse</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3368"/>
+ <location filename="mainwindow.cpp" line="3841"/>
<source>Endorsement state unknown</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3375"/>
+ <location filename="mainwindow.cpp" line="3848"/>
<source>Ignore missing data</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3378"/>
+ <location filename="mainwindow.cpp" line="3851"/>
<source>Visit on Nexus</source>
<translation type="unfinished">Navštiv na Nexusu</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3379"/>
+ <location filename="mainwindow.cpp" line="3852"/>
<source>Open in explorer</source>
<translation type="unfinished">Otevři v prohlížeči</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3382"/>
+ <location filename="mainwindow.cpp" line="3855"/>
<source>Information...</source>
<translation type="unfinished">Informace...</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3388"/>
- <location filename="mainwindow.cpp" line="4514"/>
+ <location filename="mainwindow.cpp" line="3861"/>
+ <location filename="mainwindow.cpp" line="5086"/>
<source>Exception: </source>
<translation type="unfinished">Výnimky:</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3390"/>
- <location filename="mainwindow.cpp" line="4516"/>
+ <location filename="mainwindow.cpp" line="3863"/>
+ <location filename="mainwindow.cpp" line="5088"/>
<source>Unknown exception</source>
<translation type="unfinished">Neznámá výnimka</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3412"/>
+ <location filename="mainwindow.cpp" line="3885"/>
<source>&lt;Multiple&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3524"/>
+ <location filename="mainwindow.cpp" line="3902"/>
+ <source>Really delete &quot;%1&quot;?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="4013"/>
<source>Fix Mods...</source>
<translation type="unfinished">Oprav Mody...</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3548"/>
- <location filename="mainwindow.cpp" line="3579"/>
+ <location filename="mainwindow.cpp" line="4014"/>
+ <source>Delete</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="4038"/>
+ <location filename="mainwindow.cpp" line="4069"/>
<source>failed to remove %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3563"/>
- <location filename="mainwindow.cpp" line="3594"/>
+ <location filename="mainwindow.cpp" line="4053"/>
+ <location filename="mainwindow.cpp" line="4084"/>
<source>failed to create %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3615"/>
+ <location filename="mainwindow.cpp" line="4107"/>
<source>Can&apos;t change download directory while downloads are in progress!</source>
<translation type="unfinished">Není možné změnit cíl pro stahování když probíhá stahování!</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3686"/>
+ <location filename="mainwindow.cpp" line="4174"/>
<source>Download failed</source>
<translation type="unfinished">Stahování zlyhalo</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3830"/>
+ <location filename="mainwindow.cpp" line="4323"/>
<source>failed to write to file %1</source>
<translation type="unfinished">Nezdařil se zápis do souboru %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3836"/>
+ <location filename="mainwindow.cpp" line="4329"/>
<source>%1 written</source>
<translation type="unfinished">%1 zapsáno</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3875"/>
+ <location filename="mainwindow.cpp" line="4368"/>
<source>Select binary</source>
<translation type="unfinished">Vyber binární soubor</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3875"/>
+ <location filename="mainwindow.cpp" line="4368"/>
<source>Binary</source>
<translation type="unfinished">Soubor</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3901"/>
+ <location filename="mainwindow.cpp" line="4394"/>
<source>Enter Name</source>
<translation type="unfinished">Zadej jméno</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3902"/>
+ <location filename="mainwindow.cpp" line="4395"/>
<source>Please enter a name for the executable</source>
<translation type="unfinished">Prosím zadej jméno pro spouštění</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3913"/>
+ <location filename="mainwindow.cpp" line="4406"/>
<source>Not an executable</source>
<translation type="unfinished">Není spustitelný</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3913"/>
+ <location filename="mainwindow.cpp" line="4406"/>
<source>This is not a recognized executable.</source>
<translation type="unfinished">Tenhle soubor není rozpoznán jako spustitelný.</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3938"/>
- <location filename="mainwindow.cpp" line="3963"/>
+ <location filename="mainwindow.cpp" line="4431"/>
+ <location filename="mainwindow.cpp" line="4456"/>
<source>Replace file?</source>
<translation type="unfinished">Nahradit soubor?</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3938"/>
+ <location filename="mainwindow.cpp" line="4431"/>
<source>There already is a hidden version of this file. Replace it?</source>
<translation type="unfinished">Už existuje skrytá verze tohto souboru. Nahradit?</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3941"/>
- <location filename="mainwindow.cpp" line="3966"/>
+ <location filename="mainwindow.cpp" line="4434"/>
+ <location filename="mainwindow.cpp" line="4459"/>
<source>File operation failed</source>
<translation type="unfinished">Operace se souborem zlyhala</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3941"/>
- <location filename="mainwindow.cpp" line="3966"/>
+ <location filename="mainwindow.cpp" line="4434"/>
+ <location filename="mainwindow.cpp" line="4459"/>
<source>Failed to remove &quot;%1&quot;. Maybe you lack the required file permissions?</source>
<translation type="unfinished">Nepodařilo se odstranit &quot;%1&quot;. Možná nejsou k dispozici požadována práva?</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3963"/>
+ <location filename="mainwindow.cpp" line="4456"/>
<source>There already is a visible version of this file. Replace it?</source>
<translation type="unfinished">Už existuje viditelná verze tohto souboru. Nahradit?</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4009"/>
+ <location filename="mainwindow.cpp" line="4489"/>
+ <source>file not found: %1</source>
+ <translation type="unfinished">soubor nenalezen: %1</translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="4502"/>
+ <source>failed to generate preview for %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="4516"/>
+ <source>Sorry, can&apos;t preview anything. This function currently does not support extracting from bsas.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="4547"/>
<source>Update available</source>
<translation type="unfinished">Aktualizace k dispozici</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4046"/>
+ <location filename="mainwindow.cpp" line="4584"/>
<source>Open/Execute</source>
<translation type="unfinished">Otevřít/Spustit</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4047"/>
+ <location filename="mainwindow.cpp" line="4585"/>
<source>Add as Executable</source>
<translation type="unfinished">Přidat Spouštení</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4051"/>
+ <location filename="mainwindow.cpp" line="4589"/>
+ <source>Preview</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="4595"/>
<source>Un-Hide</source>
<translation type="unfinished">Odekrýt</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4053"/>
+ <location filename="mainwindow.cpp" line="4597"/>
<source>Hide</source>
<translation type="unfinished">Skrýt</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4058"/>
+ <location filename="mainwindow.cpp" line="4603"/>
<source>Write To File...</source>
<translation type="unfinished">Zápis do souboru...</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4088"/>
+ <location filename="mainwindow.cpp" line="4634"/>
<source>Do you want to endorse Mod Organizer on %1 now?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4505"/>
+ <location filename="mainwindow.cpp" line="5047"/>
+ <source>Remove</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="5077"/>
<source>Unlock load order</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4508"/>
+ <location filename="mainwindow.cpp" line="5080"/>
<source>Lock load order</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4223"/>
+ <location filename="mainwindow.cpp" line="5149"/>
+ <source>BOSS working</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="5157"/>
+ <source>failed to run boss: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="4770"/>
<source>Request to Nexus failed: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4230"/>
- <location filename="mainwindow.cpp" line="4247"/>
+ <location filename="mainwindow.cpp" line="1284"/>
+ <source>Executable &quot;%1&quot; not found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="1789"/>
+ <source>Failed to refresh list of esps: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="3346"/>
+ <source>This will move all files from overwrite into a new, regular mod.
+Please enter a name:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="3798"/>
+ <source>Add/Remove Categories</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="3803"/>
+ <source>Replace Categories</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="4777"/>
+ <location filename="mainwindow.cpp" line="4794"/>
<source>login successful</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4256"/>
+ <location filename="mainwindow.cpp" line="4803"/>
<source>login failed: %1. Trying to download anyway</source>
<translation type="unfinished">přihlášení zlyhalo: %1. Pokouším se beztak stahovat</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4262"/>
+ <location filename="mainwindow.cpp" line="4809"/>
<source>login failed: %1</source>
<translation type="unfinished">přihlášení zlyhalo: %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4271"/>
+ <location filename="mainwindow.cpp" line="4818"/>
<source>login failed: %1. You need to log-in with Nexus to update MO.</source>
<translation type="unfinished">přihlášení zlyhalo: %1. Na aktualizaci MO je potřebné přihlášení k Nexusu.</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4304"/>
+ <location filename="mainwindow.cpp" line="4851"/>
<source>Error</source>
<translation type="unfinished">Chyba</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4304"/>
+ <location filename="mainwindow.cpp" line="4851"/>
<source>failed to extract %1 (errorcode %2)</source>
<translation type="unfinished">zlyhala extrakce %1 (errorcode %2)</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4399"/>
+ <location filename="mainwindow.cpp" line="4946"/>
<source>Extract...</source>
<translation type="unfinished">Extrakce...</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4449"/>
+ <location filename="mainwindow.cpp" line="5002"/>
<source>Edit Categories...</source>
<translation type="unfinished">Editovat Kategorie...</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4485"/>
+ <location filename="mainwindow.cpp" line="5057"/>
<source>Enable all</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4486"/>
+ <location filename="mainwindow.cpp" line="5058"/>
<source>Disable all</source>
<translation type="unfinished"></translation>
</message>
@@ -2615,7 +2880,7 @@ Please enter a name: </source>
<context>
<name>ModInfoBackup</name>
<message>
- <location filename="modinfo.cpp" line="784"/>
+ <location filename="modinfo.cpp" line="820"/>
<source>This is the backup of a mod</source>
<translation type="unfinished"></translation>
</message>
@@ -2628,87 +2893,85 @@ Please enter a name: </source>
<translation>Informace o modu</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="27"/>
+ <location filename="modinfodialog.ui" line="30"/>
<source>Textfiles</source>
<translation>Textové soubory</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="39"/>
+ <location filename="modinfodialog.ui" line="42"/>
<source>A list of text-files in the mod directory.</source>
<translation>Seznam textových souborů obsažených v modu.</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="42"/>
+ <location filename="modinfodialog.ui" line="45"/>
<source>A list of text-files in the mod directory like readmes. </source>
<translation>Seznam textových souborů obsažených v modu, například readme.</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="64"/>
- <location filename="modinfodialog.ui" line="149"/>
+ <location filename="modinfodialog.ui" line="67"/>
+ <location filename="modinfodialog.ui" line="155"/>
<source>Save</source>
<translation>Uložit</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="74"/>
+ <location filename="modinfodialog.ui" line="77"/>
<source>INI-Files</source>
<translation>INI soubory</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="94"/>
+ <location filename="modinfodialog.ui" line="97"/>
<source>This is a list of .ini files in the mod.</source>
<translation>Tohle je seznam .ini souborů v modu.</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="97"/>
+ <location filename="modinfodialog.ui" line="100"/>
<source>This is a list of .ini files in the mod. These are usually used to configure the behaviour of mods if there are configurable parameters.</source>
<translation>Tohle je seznam .ini souborů v modu. Dají se upravovat pro zmenu konfigurace a chování modu, pokud umožňuje takové parametry.</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="143"/>
+ <location filename="modinfodialog.ui" line="149"/>
<source>Save changes to the file.</source>
<translation>Uložit změny do souboru.</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="146"/>
+ <location filename="modinfodialog.ui" line="152"/>
<source>Save changes to the file. This overwrites the original. There is no automatic backup!</source>
<translation>Uložit změny do souboru.Tohle přepíše původní soubor. Nevytváří se žádná automatická záloha!</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="159"/>
+ <location filename="modinfodialog.ui" line="165"/>
<source>Images</source>
<translation>Obrázky</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="214"/>
+ <location filename="modinfodialog.ui" line="220"/>
<source>Images located in the mod.</source>
<translation>Obrázky obsažené v modu.</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="217"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;This lists all the images (.jpg and .png) in the mod directory, like screenshots and such. Click one to get a larger view.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <translation>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+ <translation type="obsolete">&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Tohle je seznam všech obrázků (.jpg a.png) obsažených v modu, jako naříklad screenshoty. Kliknutím na jeden ho zvětšíš.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="254"/>
- <location filename="modinfodialog.ui" line="277"/>
+ <location filename="modinfodialog.ui" line="256"/>
+ <location filename="modinfodialog.ui" line="275"/>
<source>Optional ESPs</source>
<translation>Volitelné ESP</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="260"/>
+ <location filename="modinfodialog.ui" line="262"/>
<source>List of esps and esms that can not be loaded by the game.</source>
<translation>Seznam souborů .esp a .esm, které nebudou načteni do hry. </translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="263"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
@@ -2717,7 +2980,7 @@ p, li { white-space: pre-wrap; }
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;They usually contain optional functionality, see the readme.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;&quot;&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Most mods do not have optional esps, so chances are good you are looking at an empty list.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <translation>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+ <translation type="obsolete">&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
@@ -2727,103 +2990,116 @@ p, li { white-space: pre-wrap; }
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Většina modů nemá volitelné esp, tak s nejvyšší pravděpodobností býva tenhle seznam prázdný.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="292"/>
+ <location filename="modinfodialog.ui" line="223"/>
+ <source>This lists all the images (.jpg and .png) in the mod directory, like screenshots and such. Click one to get a larger view.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="modinfodialog.ui" line="265"/>
+ <source>List of esps and esms contained in this plugin that currently can not be loaded by the game. They will not even appear in the esp-list in the main MO-window.
+They usually contain optional functionality, see the readme.
+
+Most mods do not have optional esps, so chances are good you are looking at an empty list.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="modinfodialog.ui" line="290"/>
<source>Make the selected mod in the lower list unavailable.</source>
<translation>Znepřístupni označený mod v seznamu dolů.</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="295"/>
+ <location filename="modinfodialog.ui" line="293"/>
<source>The selected esp (in the lower list) will be pushed into a subdirectory of the mod and will thus become &quot;invisible&quot; to the game. It can then no longer be activated.</source>
<translation>Označený soubor esp (v seznamu dolů) bude přemístěn do podadresáře modu a tak se stane &quot;neviditelným&quot; pro hru. V takovem stavu se nedá aktivovat.</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="321"/>
+ <location filename="modinfodialog.ui" line="319"/>
<source>Move a file to the data directory.</source>
<translation>Přesuň soubor mezi Data.</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="324"/>
+ <location filename="modinfodialog.ui" line="322"/>
<source>This moves a esp to the esp directory so it can be enabled in the main window. Please note that the ESP merely becomes &quot;available&quot;, it will not necessarily be loaded! That is configured in the main window of omo.</source>
<translation>Přesune soubor esp do adresáře, kde má být, aby mohl být aktivován. Prosím berte na vědomí, že tato akce jenom soubor &quot;zpřistupní&quot;, nedělá ho automaticky aktivním. To se pak aktivuje v hlavním oknu mezi esp.</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="359"/>
+ <location filename="modinfodialog.ui" line="357"/>
<source>ESPs in the data directory and thus visible to the game.</source>
<translation>ESP soubory mezi Data a tedy přístupné pro hru.</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="362"/>
+ <location filename="modinfodialog.ui" line="360"/>
<source>These are the mod files that are in the (virtual) data directory of your game and will thus be selecteable in the esp list in the main window.</source>
<translation>Tady jsou soubory modu, které se nacházejí ve (virtuálním) data adresáři hry a proto je bude možné aktivovat v seznamu esp v hlavním okně.</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="369"/>
+ <location filename="modinfodialog.ui" line="367"/>
<source>Available ESPs</source>
<translation>ESP k dispozici</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="377"/>
+ <location filename="modinfodialog.ui" line="375"/>
<source>Conflicts</source>
<translation>Konflikty</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="385"/>
+ <location filename="modinfodialog.ui" line="383"/>
<source>The following conflicted files are provided by this mod</source>
<translation>Konfliktní soubory, které budou přebity tímhle modem</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="432"/>
- <location filename="modinfodialog.ui" line="479"/>
+ <location filename="modinfodialog.ui" line="433"/>
+ <location filename="modinfodialog.ui" line="483"/>
<source>File</source>
<translation>Soubor</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="437"/>
+ <location filename="modinfodialog.ui" line="438"/>
<source>Overwritten Mods</source>
<translation>Přepsané mody</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="447"/>
+ <location filename="modinfodialog.ui" line="448"/>
<source>The following conflicted files are provided by other mods</source>
<translation>Konfliktní soubory, které další mody přebijou</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="484"/>
+ <location filename="modinfodialog.ui" line="488"/>
<source>Providing Mod</source>
<translation>Mod původu</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="494"/>
+ <location filename="modinfodialog.ui" line="498"/>
<source>Non-Conflicted files</source>
<translation>Nekonfliktní soubory</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="514"/>
+ <location filename="modinfodialog.ui" line="518"/>
<source>Categories</source>
<translation>Kategorie</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="537"/>
+ <location filename="modinfodialog.ui" line="541"/>
<source>Primary Category</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="554"/>
+ <location filename="modinfodialog.ui" line="558"/>
<source>Nexus Info</source>
<translation>Nexus Info</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="562"/>
+ <location filename="modinfodialog.ui" line="566"/>
<source>Mod ID</source>
<translation>Mod ID</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="569"/>
+ <location filename="modinfodialog.ui" line="573"/>
<source>Mod ID for this mod on Nexus.</source>
<translation>Mod ID tohodle modu na Nexusu.</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="572"/>
+ <location filename="modinfodialog.ui" line="576"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
@@ -2836,7 +3112,7 @@ p, li { white-space: pre-wrap; }
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Mod ID pro tenhle mod na Nexusu. Vyplňuje se automaticky pokud ste soubor i stáhli i nainstalovali přímo skrz MO. Jinak ho můžete zadat ručne. Správne ID naleznete u modu na Nexusu. Adresa bude vypadat takhle: &lt;/span&gt;&lt;a href=&quot; http://www.skyrimnexus.com/downloads/file.php?id=1334&quot;&gt;&lt;span style=&quot; font-size:8pt; text-decoration: underline; color:#0000ff;&quot;&gt;http://skyrim.nexusmods.com/downloads/file.php?id=1334&lt;/span&gt;&lt;/a&gt;&lt;a href=&quot;http://www.skyrimnexus.com/downloads/file.php?id=1334&quot;&gt;&lt;span style=&quot; font-size:8pt; color:#000000;&quot;&gt;. V takovem případe 1334 je Mod ID. Mimo jiné odkaz je přímo na Mod Organizer tak proč rovnou nejít zadat Endorse?&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="596"/>
+ <location filename="modinfodialog.ui" line="600"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
@@ -2849,32 +3125,31 @@ p, li { white-space: pre-wrap; }
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Nainstalovaná verze modu. Bublina ukáže číslo nejaktuálnější verzi modu na Nexusu. Číslo verze se nastaví samo jenom pokud byl mod nainstalován skrz MO.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="603"/>
+ <location filename="modinfodialog.ui" line="607"/>
<source>Version</source>
<translation>Verze</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="633"/>
+ <location filename="modinfodialog.ui" line="637"/>
<source>Refresh</source>
<translation type="unfinished">Znovunačíst</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="636"/>
+ <location filename="modinfodialog.ui" line="640"/>
<source>Refresh all information from Nexus.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="650"/>
+ <location filename="modinfodialog.ui" line="654"/>
<source>Description</source>
<translation>Popis</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="665"/>
+ <location filename="modinfodialog.ui" line="669"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
-&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
@@ -2895,20 +3170,21 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">Druh</translation>
</message>
<message>
+ <location filename="modinfodialog.cpp" line="1221"/>
<source>Name</source>
- <translation type="obsolete">Jméno</translation>
+ <translation type="unfinished">Jméno</translation>
</message>
<message>
<source>Size (kB)</source>
<translation type="obsolete">Velikost (kB)</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="701"/>
+ <location filename="modinfodialog.ui" line="704"/>
<source>Endorse</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="715"/>
+ <location filename="modinfodialog.ui" line="718"/>
<source>Notes</source>
<translation type="unfinished"></translation>
</message>
@@ -2921,17 +3197,17 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">Už jste tenhle mod endorsovali?</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="725"/>
+ <location filename="modinfodialog.ui" line="728"/>
<source>Filetree</source>
<translation>Struktura souborů</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="734"/>
+ <location filename="modinfodialog.ui" line="737"/>
<source>A directory view of this mod</source>
<translation>Zložkový náhled na mod</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="737"/>
+ <location filename="modinfodialog.ui" line="740"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
@@ -2946,53 +3222,53 @@ p, li { white-space: pre-wrap; }
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Zmeny se okamžite dejí přimo na disku, takže&lt;/span&gt;&lt;span style=&quot; font-size:8pt; font-weight:600;&quot;&gt;buďte opatrní&lt;/span&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="764"/>
+ <location filename="modinfodialog.ui" line="767"/>
<source>Previous</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="771"/>
+ <location filename="modinfodialog.ui" line="774"/>
<source>Next</source>
<translation type="unfinished">Další</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="791"/>
+ <location filename="modinfodialog.ui" line="794"/>
<source>Close</source>
<translation>Zavřít</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="108"/>
+ <location filename="modinfodialog.cpp" line="104"/>
<source>&amp;Delete</source>
<translation>&amp;Smazat</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="109"/>
+ <location filename="modinfodialog.cpp" line="105"/>
<source>&amp;Rename</source>
<translation>&amp;Přejmenovat</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="110"/>
+ <location filename="modinfodialog.cpp" line="106"/>
<source>&amp;Hide</source>
<translation>&amp;Skrýt</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="111"/>
+ <location filename="modinfodialog.cpp" line="107"/>
<source>&amp;Unhide</source>
<translation>&amp;Odekrýt</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="112"/>
+ <location filename="modinfodialog.cpp" line="108"/>
<source>&amp;Open</source>
<translation>&amp;Otevřít</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="113"/>
+ <location filename="modinfodialog.cpp" line="109"/>
<source>&amp;New Folder</source>
<translation>&amp;Nová Složka</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="352"/>
- <location filename="modinfodialog.cpp" line="367"/>
+ <location filename="modinfodialog.cpp" line="405"/>
+ <location filename="modinfodialog.cpp" line="420"/>
<source>Save changes?</source>
<translation>Uložit změny?</translation>
</message>
@@ -3001,28 +3277,28 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">Uložit změny v &quot;%1&quot;?</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="563"/>
+ <location filename="modinfodialog.cpp" line="612"/>
<source>File Exists</source>
<translation>Soubor existuje</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="563"/>
+ <location filename="modinfodialog.cpp" line="612"/>
<source>A file with that name exists, please enter a new one</source>
<translation>Soubor s rovnakým názvem existuje, prosím zadejte jiné jméno</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="580"/>
+ <location filename="modinfodialog.cpp" line="629"/>
<source>failed to move file</source>
<translation>zlyhalo přesunutí souboru</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="605"/>
+ <location filename="modinfodialog.cpp" line="654"/>
<source>failed to create directory &quot;optional&quot;</source>
<translation>zlyhalo vytvoření zložky &quot;optional&quot;</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="643"/>
- <location filename="modinfodialog.cpp" line="1155"/>
+ <location filename="modinfodialog.cpp" line="692"/>
+ <location filename="modinfodialog.cpp" line="1198"/>
<source>Info requested, please wait</source>
<translation>Info vyžádáno, prosím počkejte</translation>
</message>
@@ -3032,53 +3308,53 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">(popis chybí, prosím navštivte nexus pro kompletní zobrazení)</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="758"/>
+ <location filename="modinfodialog.cpp" line="807"/>
<source>(description incomplete, please visit nexus)</source>
<translation>(popis chybí, prosím navštivte nexus pro kompletní zobrazení)</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="713"/>
+ <location filename="modinfodialog.cpp" line="762"/>
<source>Current Version: %1</source>
<translation>Současná verze: %1</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="717"/>
+ <location filename="modinfodialog.cpp" line="766"/>
<source>No update available</source>
<translation>Žádný update není k dispozici</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="697"/>
+ <location filename="modinfodialog.cpp" line="746"/>
<source>Main</source>
<translation>Hlavní</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="352"/>
- <location filename="modinfodialog.cpp" line="367"/>
+ <location filename="modinfodialog.cpp" line="405"/>
+ <location filename="modinfodialog.cpp" line="420"/>
<source>Save changes to &quot;%1&quot;?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="698"/>
+ <location filename="modinfodialog.cpp" line="747"/>
<source>Update</source>
<translation>Update</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="699"/>
+ <location filename="modinfodialog.cpp" line="748"/>
<source>Optional</source>
<translation>Volitelné</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="700"/>
+ <location filename="modinfodialog.cpp" line="749"/>
<source>Old</source>
<translation>Staré</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="701"/>
+ <location filename="modinfodialog.cpp" line="750"/>
<source>Misc</source>
<translation>Jiné</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="702"/>
+ <location filename="modinfodialog.cpp" line="751"/>
<source>Unknown</source>
<translation>Neznámé</translation>
</message>
@@ -3087,13 +3363,13 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">požadavka zlyhala: %1</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="779"/>
+ <location filename="modinfodialog.cpp" line="822"/>
<source>&lt;a href=&quot;%1&quot;&gt;Visit on Nexus&lt;/a&gt;</source>
<translation>&lt;a href=&quot;%1&quot;&gt;Navštivte na Nexusu&lt;/a&gt;</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="869"/>
- <location filename="modinfodialog.cpp" line="874"/>
+ <location filename="modinfodialog.cpp" line="912"/>
+ <location filename="modinfodialog.cpp" line="917"/>
<source>Confirm</source>
<translation>Potvrdit</translation>
</message>
@@ -3110,85 +3386,110 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">Výnimka: %1</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="858"/>
+ <location filename="modinfodialog.cpp" line="901"/>
<source>Failed to delete %1</source>
<translation>Zlyhalo vymazání %1</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="869"/>
+ <location filename="modinfodialog.cpp" line="912"/>
<source>Are sure you want to delete &quot;%1&quot;?</source>
<translation>Jsi si jistý, že chceš vymazat &quot;%1&quot;?</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="874"/>
+ <location filename="modinfodialog.cpp" line="917"/>
<source>Are sure you want to delete the selected files?</source>
<translation>Jsi si jistý, že chceš vymazat označené soubory?</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="948"/>
- <location filename="modinfodialog.cpp" line="954"/>
+ <location filename="modinfodialog.cpp" line="991"/>
+ <location filename="modinfodialog.cpp" line="997"/>
<source>New Folder</source>
<translation>Nová zložka</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="960"/>
+ <location filename="modinfodialog.cpp" line="1003"/>
<source>Failed to create &quot;%1&quot;</source>
<translation>Zlyhalo vytvoření &quot;%1&quot;</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="1064"/>
- <location filename="modinfodialog.cpp" line="1088"/>
+ <location filename="modinfodialog.cpp" line="1107"/>
+ <location filename="modinfodialog.cpp" line="1131"/>
<source>Replace file?</source>
<translation>Nahradit soubor?</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="1064"/>
+ <location filename="modinfodialog.cpp" line="1107"/>
<source>There already is a hidden version of this file. Replace it?</source>
<translation>Už existuje skrytá verze tohto souboru. Nahradit?</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="1067"/>
- <location filename="modinfodialog.cpp" line="1091"/>
+ <location filename="modinfodialog.cpp" line="1110"/>
+ <location filename="modinfodialog.cpp" line="1134"/>
<source>File operation failed</source>
<translation>Operace se souborem zlyhala</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="1067"/>
- <location filename="modinfodialog.cpp" line="1091"/>
+ <location filename="modinfodialog.cpp" line="1110"/>
+ <location filename="modinfodialog.cpp" line="1134"/>
<source>Failed to remove &quot;%1&quot;. Maybe you lack the required file permissions?</source>
<translation>Nepodařilo se odstranit &quot;%1&quot;. Možná nejsou k dispozici požadována práva?</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="1078"/>
- <location filename="modinfodialog.cpp" line="1101"/>
+ <location filename="modinfodialog.cpp" line="1121"/>
+ <location filename="modinfodialog.cpp" line="1144"/>
<source>failed to rename %1 to %2</source>
<translation>Nezdařilo se přejmenovat %1 na %2</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="1088"/>
+ <location filename="modinfodialog.cpp" line="1131"/>
<source>There already is a visible version of this file. Replace it?</source>
<translation>Už existuje viditelná verze tohto souboru. Nahradit?</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="1135"/>
+ <location filename="modinfodialog.cpp" line="1178"/>
<source>Un-Hide</source>
<translation>Odekrýt</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="1137"/>
+ <location filename="modinfodialog.cpp" line="1180"/>
<source>Hide</source>
<translation>Skrýt</translation>
</message>
+ <message>
+ <location filename="modinfodialog.cpp" line="1221"/>
+ <source>Please enter a name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="modinfodialog.cpp" line="1225"/>
+ <location filename="modinfodialog.cpp" line="1228"/>
+ <source>Error</source>
+ <translation type="unfinished">Chyba</translation>
+ </message>
+ <message>
+ <location filename="modinfodialog.cpp" line="1225"/>
+ <source>Invalid name. Must be a valid file name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="modinfodialog.cpp" line="1228"/>
+ <source>A tweak by that name exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="modinfodialog.cpp" line="1240"/>
+ <source>Create Tweak</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>ModInfoOverwrite</name>
<message>
- <location filename="modinfo.h" line="812"/>
<source>Overwrite</source>
- <translation>Přepsat</translation>
+ <translation type="obsolete">Přepsat</translation>
</message>
<message>
- <location filename="modinfo.cpp" line="821"/>
+ <location filename="modinfo.cpp" line="866"/>
<source>This pseudo mod contains files from the virtual data tree that got modified (i.e. by the construction kit)</source>
<translation type="unfinished">Tenhle kvázi mod obsahuje soubory, které byli vytvořeny nebo změněny během spuštení, tzn. ve virtuálním Data stromě (ku příkladu Construction Kit je sem vytváří&apos;)</translation>
</message>
@@ -3196,17 +3497,17 @@ p, li { white-space: pre-wrap; }
<context>
<name>ModInfoRegular</name>
<message>
- <location filename="modinfo.cpp" line="392"/>
+ <location filename="modinfo.cpp" line="393"/>
<source>failed to write %1/meta.ini: %2</source>
<translation>zlyhal zápis %1/meta.ini: %2</translation>
</message>
<message>
- <location filename="modinfo.cpp" line="625"/>
+ <location filename="modinfo.cpp" line="661"/>
<source>%1 contains no esp/esm and no asset (textures, meshes, interface, ...) directory</source>
<translation type="unfinished">%1 neobsahuje žádné esp/esm ani jiné použitelné struktury (textures, meshes, interface,...)</translation>
</message>
<message>
- <location filename="modinfo.cpp" line="629"/>
+ <location filename="modinfo.cpp" line="665"/>
<source>Categories: &lt;br&gt;</source>
<translation type="unfinished">Kategorie: &lt;br&gt;</translation>
</message>
@@ -3214,7 +3515,7 @@ p, li { white-space: pre-wrap; }
<context>
<name>ModList</name>
<message>
- <location filename="modlist.cpp" line="662"/>
+ <location filename="modlist.cpp" line="776"/>
<source>Confirm</source>
<translation>Potvrdit</translation>
</message>
@@ -3231,9 +3532,8 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">neplatný index řádku %1</translation>
</message>
<message>
- <location filename="modlist.cpp" line="94"/>
<source>Overwrite</source>
- <translation>Přepsat</translation>
+ <translation type="obsolete">Přepsat</translation>
</message>
<message>
<location filename="modlist.cpp" line="109"/>
@@ -3284,17 +3584,17 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">max</translation>
</message>
<message>
- <location filename="modlist.cpp" line="736"/>
+ <location filename="modlist.cpp" line="850"/>
<source>Category of the mod.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="737"/>
+ <location filename="modlist.cpp" line="851"/>
<source>Id of the mod as used on Nexus.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="738"/>
+ <location filename="modlist.cpp" line="852"/>
<source>Emblemes to highlight things that might require attention.</source>
<translation type="unfinished"></translation>
</message>
@@ -3303,7 +3603,7 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">%1 neobsahuje žádné esp/esm ani jiné použitelné struktury (textures, meshes, interface,...)</translation>
</message>
<message>
- <location filename="modlist.cpp" line="298"/>
+ <location filename="modlist.cpp" line="318"/>
<source>Categories: &lt;br&gt;</source>
<translation>Kategorie: &lt;br&gt;</translation>
</message>
@@ -3312,9 +3612,10 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">Tenhle kvázi mod obsahuje soubory, které byli vytvořeny nebo změněny během spuštení, tzn. ve virtuálním Data stromě (ku příkladu Construction Kit je sem vytváří&apos;)</translation>
</message>
<message>
- <location filename="modlist.cpp" line="294"/>
- <source>installed version: %1, newest version: %2</source>
- <translation>nainstalovaná verze: %1, nejnovjší verze: %2</translation>
+ <location filename="modlist.cpp" line="308"/>
+ <source>installed version: &quot;%1&quot;, newest version: &quot;%2&quot;</source>
+ <oldsource>installed version: %1, newest version: %2</oldsource>
+ <translation type="unfinished">nainstalovaná verze: %1, nejnovjší verze: %2</translation>
</message>
<message>
<source>Name</source>
@@ -3325,83 +3626,88 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">Jména vašich modů</translation>
</message>
<message>
- <location filename="modlist.cpp" line="719"/>
+ <location filename="modlist.cpp" line="833"/>
<source>Version</source>
<translation>Verze</translation>
</message>
<message>
- <location filename="modlist.cpp" line="733"/>
+ <location filename="modlist.cpp" line="847"/>
<source>Version of the mod (if available)</source>
<translation>Verze modu (pokud je k dispozici)</translation>
</message>
<message>
- <location filename="modlist.cpp" line="720"/>
+ <location filename="modlist.cpp" line="834"/>
<source>Priority</source>
<translation>Priorita</translation>
</message>
<message>
- <location filename="modlist.cpp" line="184"/>
+ <location filename="modlist.cpp" line="197"/>
<source>invalid</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="327"/>
+ <location filename="modlist.cpp" line="310"/>
+ <source>The newest version on Nexus seems to be older than the one you have installed. This could either mean the version you have has been withdrawn (i.e. due to a bug) or the author uses a non-standard versioning scheme and that newest version is actually newer. Either way you may want to &quot;upgrade&quot;.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="modlist.cpp" line="347"/>
<source>Invalid name</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="603"/>
+ <location filename="modlist.cpp" line="717"/>
<source>drag&amp;drop failed: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="717"/>
+ <location filename="modlist.cpp" line="831"/>
<source>Flags</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="718"/>
+ <location filename="modlist.cpp" line="832"/>
<source>Mod Name</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="721"/>
+ <location filename="modlist.cpp" line="835"/>
<source>Category</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="722"/>
+ <location filename="modlist.cpp" line="836"/>
<source>Nexus ID</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="723"/>
+ <location filename="modlist.cpp" line="837"/>
<source>Installation</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="724"/>
- <location filename="modlist.cpp" line="740"/>
+ <location filename="modlist.cpp" line="838"/>
+ <location filename="modlist.cpp" line="854"/>
<source>unknown</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="732"/>
+ <location filename="modlist.cpp" line="846"/>
<source>Name of your mods</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="734"/>
+ <location filename="modlist.cpp" line="848"/>
<source>Installation priority of your mod. The higher, the more &quot;important&quot; it is and thus overwrites files from mods with lower priority.</source>
<translation>Priorita aplikace modu. Čím větší, tím &quot;důležitější&quot; je mod a proto může přebít mody s nižší prioritou. </translation>
</message>
<message>
- <location filename="modlist.cpp" line="739"/>
+ <location filename="modlist.cpp" line="853"/>
<source>Time this mod was installed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="662"/>
+ <location filename="modlist.cpp" line="776"/>
<source>Are you sure you want to remove &quot;%1&quot;?</source>
<translation>Určitě chcete odstranit &quot;%1&quot;?</translation>
</message>
@@ -3437,12 +3743,12 @@ p, li { white-space: pre-wrap; }
<context>
<name>MyFileSystemModel</name>
<message>
- <location filename="overwriteinfodialog.cpp" line="48"/>
+ <location filename="overwriteinfodialog.cpp" line="47"/>
<source>Overwrites</source>
<translation>Přepisuje</translation>
</message>
<message>
- <location filename="overwriteinfodialog.cpp" line="60"/>
+ <location filename="overwriteinfodialog.cpp" line="59"/>
<source>not implemented</source>
<translation>není implementováno</translation>
</message>
@@ -3451,11 +3757,16 @@ p, li { white-space: pre-wrap; }
<name>NXMAccessManager</name>
<message>
<location filename="nxmaccessmanager.cpp" line="130"/>
+ <source>Logging into Nexus</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="nxmaccessmanager.cpp" line="145"/>
<source>timeout</source>
<translation>Překročen časový limit</translation>
</message>
<message>
- <location filename="nxmaccessmanager.cpp" line="168"/>
+ <location filename="nxmaccessmanager.cpp" line="185"/>
<source>Please check your password</source>
<translation>Oveřte heslo</translation>
</message>
@@ -3505,17 +3816,17 @@ p, li { white-space: pre-wrap; }
<context>
<name>NexusInterface</name>
<message>
- <location filename="nexusinterface.cpp" line="201"/>
+ <location filename="nexusinterface.cpp" line="218"/>
<source>Failed to guess mod id for &quot;%1&quot;, please pick the correct one</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="nexusinterface.cpp" line="421"/>
+ <location filename="nexusinterface.cpp" line="455"/>
<source>empty response</source>
<translation>prázdná odozva</translation>
</message>
<message>
- <location filename="nexusinterface.cpp" line="450"/>
+ <location filename="nexusinterface.cpp" line="483"/>
<source>invalid response</source>
<translation>neplatná odozva</translation>
</message>
@@ -4474,34 +4785,34 @@ V současnosti má omezenou funkcionalitu</translation>
<translation type="obsolete">Zlyhalo vymazání %1</translation>
</message>
<message>
- <location filename="overwriteinfodialog.cpp" line="137"/>
+ <location filename="overwriteinfodialog.cpp" line="136"/>
<source>Failed to delete &quot;%1&quot;</source>
<translation>odstránění zlyhalo &quot;%1&quot;</translation>
</message>
<message>
- <location filename="overwriteinfodialog.cpp" line="148"/>
- <location filename="overwriteinfodialog.cpp" line="153"/>
+ <location filename="overwriteinfodialog.cpp" line="147"/>
+ <location filename="overwriteinfodialog.cpp" line="152"/>
<source>Confirm</source>
<translation>Potvrdit</translation>
</message>
<message>
- <location filename="overwriteinfodialog.cpp" line="148"/>
+ <location filename="overwriteinfodialog.cpp" line="147"/>
<source>Are sure you want to delete &quot;%1&quot;?</source>
<translation>Jsi si jistý, že chceš vymazat &quot;%1&quot;?</translation>
</message>
<message>
- <location filename="overwriteinfodialog.cpp" line="153"/>
+ <location filename="overwriteinfodialog.cpp" line="152"/>
<source>Are sure you want to delete the selected files?</source>
<translation>Jsi si jistý, že chceš vymazat označené soubory?</translation>
</message>
<message>
- <location filename="overwriteinfodialog.cpp" line="203"/>
- <location filename="overwriteinfodialog.cpp" line="209"/>
+ <location filename="overwriteinfodialog.cpp" line="202"/>
+ <location filename="overwriteinfodialog.cpp" line="208"/>
<source>New Folder</source>
<translation>Nová Zložka</translation>
</message>
<message>
- <location filename="overwriteinfodialog.cpp" line="215"/>
+ <location filename="overwriteinfodialog.cpp" line="214"/>
<source>Failed to create &quot;%1&quot;</source>
<translation>Zlyhalo vytvoření &quot;%1&quot;</translation>
</message>
@@ -4514,70 +4825,93 @@ V současnosti má omezenou funkcionalitu</translation>
<translation type="obsolete">esp nenalezeno: %1</translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="98"/>
+ <location filename="pluginlist.cpp" line="111"/>
<source>Mod Index</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="99"/>
- <location filename="pluginlist.cpp" line="111"/>
+ <location filename="pluginlist.cpp" line="112"/>
+ <source>Flags</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="pluginlist.cpp" line="113"/>
+ <location filename="pluginlist.cpp" line="125"/>
<source>unknown</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="107"/>
+ <location filename="pluginlist.cpp" line="121"/>
<source>Name of your mods</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="108"/>
+ <location filename="pluginlist.cpp" line="122"/>
<source>Load priority of your mod. The higher, the more &quot;important&quot; it is and thus overwrites data from plugins with lower priority.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="110"/>
+ <location filename="pluginlist.cpp" line="124"/>
<source>The modindex determins the formids of objects originating from this mods.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="208"/>
+ <location filename="pluginlist.cpp" line="165"/>
+ <source>failed to update esp info for file %1 (source id: %2), error: %3</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="pluginlist.cpp" line="233"/>
<source>esp not found: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="215"/>
- <location filename="pluginlist.cpp" line="227"/>
+ <location filename="pluginlist.cpp" line="240"/>
+ <location filename="pluginlist.cpp" line="252"/>
<source>Confirm</source>
<translation type="unfinished">Potvrdit</translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="215"/>
+ <location filename="pluginlist.cpp" line="240"/>
<source>Really enable all plugins?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="227"/>
+ <location filename="pluginlist.cpp" line="252"/>
<source>Really disable all plugins?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="353"/>
+ <location filename="pluginlist.cpp" line="380"/>
<source>The file containing locked plugin indices is broken</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="366"/>
- <location filename="pluginlist.cpp" line="405"/>
<source>failed to open output file: %1</source>
- <translation>zlyhalo otevření výstupního souboru: %1</translation>
+ <translation type="obsolete">zlyhalo otevření výstupního souboru: %1</translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="393"/>
+ <location filename="pluginlist.cpp" line="418"/>
<source>Some of your plugins have invalid names! These plugins can not be loaded by the game. Please see mo_interface.log for a list of affected plugins and rename them.</source>
<translation>Některé vaše pluginy mají neplatné názvy! Tyhle pluginy nemůžou být načteny hrou. Prosím nahlédněte do souboru mo_interface.log pro kompletní seznam pluginů a přejmenujte je.</translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="737"/>
+ <location filename="pluginlist.cpp" line="644"/>
+ <source>BOSS dll incompatible</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="pluginlist.cpp" line="987"/>
+ <source>Missing Masters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="pluginlist.cpp" line="993"/>
+ <source>Enabled Masters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="pluginlist.cpp" line="1134"/>
<source>failed to restore load order for %1</source>
<translation type="unfinished"></translation>
</message>
@@ -4590,17 +4924,17 @@ V současnosti má omezenou funkcionalitu</translation>
<translation type="obsolete">max</translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="631"/>
+ <location filename="pluginlist.cpp" line="983"/>
<source>This plugin can&apos;t be disabled (enforced by the game)</source>
<translation>Tenhle plugin nemůže být deaktivován (vyžaduje to hra)</translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="633"/>
+ <location filename="pluginlist.cpp" line="985"/>
<source>Origin: %1</source>
<translation>Původní mod: %1</translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="96"/>
+ <location filename="pluginlist.cpp" line="109"/>
<source>Name</source>
<translation>Jméno</translation>
</message>
@@ -4609,7 +4943,7 @@ V současnosti má omezenou funkcionalitu</translation>
<translation type="obsolete">Jména vašich modů</translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="97"/>
+ <location filename="pluginlist.cpp" line="110"/>
<source>Priority</source>
<translation>Priorita</translation>
</message>
@@ -4627,6 +4961,19 @@ V současnosti má omezenou funkcionalitu</translation>
</message>
</context>
<context>
+ <name>PreviewDialog</name>
+ <message>
+ <location filename="previewdialog.ui" line="14"/>
+ <source>Preview</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="previewdialog.ui" line="78"/>
+ <source>Close</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>ProblemsDialog</name>
<message>
<location filename="problemsdialog.ui" line="14"/>
@@ -4639,21 +4986,27 @@ V současnosti má omezenou funkcionalitu</translation>
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:7.8pt; font-weight:400; font-style:normal;&quot;&gt;
-&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <oldsource>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
+p, li { white-space: pre-wrap; }
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</oldsource>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="problemsdialog.cpp" line="29"/>
- <source>fix</source>
+ <location filename="problemsdialog.ui" line="75"/>
+ <source>Close</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="problemsdialog.cpp" line="30"/>
+ <location filename="problemsdialog.cpp" line="44"/>
+ <location filename="problemsdialog.cpp" line="45"/>
<source>Fix</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="problemsdialog.cpp" line="34"/>
+ <location filename="problemsdialog.cpp" line="49"/>
<source>No guided fix</source>
<translation type="unfinished"></translation>
</message>
@@ -4665,72 +5018,72 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">Zlyhalo uplatnění změn v ini</translation>
</message>
<message>
- <location filename="profile.cpp" line="56"/>
+ <location filename="profile.cpp" line="59"/>
<source>invalid profile name %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="60"/>
+ <location filename="profile.cpp" line="63"/>
<source>failed to create %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="152"/>
- <source>failed to open &quot;%1&quot; for writing</source>
+ <location filename="profile.cpp" line="182"/>
+ <source>failed to write mod list: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="189"/>
+ <location filename="profile.cpp" line="193"/>
<source>failed to update tweaked ini file, wrong settings may be used: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="219"/>
+ <location filename="profile.cpp" line="223"/>
<source>failed to create tweaked ini: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="271"/>
- <location filename="profile.cpp" line="300"/>
- <location filename="profile.cpp" line="384"/>
- <location filename="profile.cpp" line="402"/>
- <location filename="profile.cpp" line="412"/>
+ <location filename="profile.cpp" line="276"/>
+ <location filename="profile.cpp" line="305"/>
+ <location filename="profile.cpp" line="390"/>
+ <location filename="profile.cpp" line="408"/>
+ <location filename="profile.cpp" line="418"/>
<source>invalid index %1</source>
<translation>Neplatný index %1</translation>
</message>
<message>
- <location filename="profile.cpp" line="365"/>
+ <location filename="profile.cpp" line="371"/>
<source>Overwrite directory couldn&apos;t be parsed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="374"/>
+ <location filename="profile.cpp" line="380"/>
<source>invalid priority %1</source>
<translation>neplatná priorita %1</translation>
</message>
<message>
- <location filename="profile.cpp" line="561"/>
+ <location filename="profile.cpp" line="568"/>
<source>failed to parse ini file (%1)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="589"/>
+ <location filename="profile.cpp" line="596"/>
<source>failed to parse ini file (%1): %2</source>
<translation>zlyhalo rozebrání ini souboru (%1): %2</translation>
</message>
<message>
- <location filename="profile.cpp" line="613"/>
- <location filename="profile.cpp" line="650"/>
+ <location filename="profile.cpp" line="620"/>
+ <location filename="profile.cpp" line="657"/>
<source>failed to modify &quot;%1&quot;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="678"/>
+ <location filename="profile.cpp" line="685"/>
<source>Delete savegames?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="679"/>
+ <location filename="profile.cpp" line="686"/>
<source>Do you want to delete local savegames? (If you select &quot;No&quot;, the save games will show up again if you re-enable local savegames)</source>
<translation type="unfinished"></translation>
</message>
@@ -4946,37 +5299,61 @@ p, li { white-space: pre-wrap; }
<translation>Prosím zadej jméno pro nový profil</translation>
</message>
<message>
- <location filename="profilesdialog.cpp" line="160"/>
+ <location filename="profilesdialog.cpp" line="162"/>
<source>failed to copy profile: %1</source>
<translation>zlyhalo kopírování profilu: %1</translation>
</message>
<message>
- <location filename="profilesdialog.cpp" line="167"/>
+ <location filename="profilesdialog.cpp" line="165"/>
+ <source>Invalid name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="profilesdialog.cpp" line="165"/>
+ <source>Invalid profile name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="profilesdialog.cpp" line="172"/>
<source>Confirm</source>
<translation>Potvrdit</translation>
</message>
<message>
- <location filename="profilesdialog.cpp" line="167"/>
+ <location filename="profilesdialog.cpp" line="172"/>
+ <source>Are you sure you want to remove this profile (including local savegames if any)?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="profilesdialog.cpp" line="182"/>
+ <source>Profile broken</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="profilesdialog.cpp" line="183"/>
+ <source>This profile you&apos;re about to delete seems to be broken or the path is invalid. I&apos;m about to delete the following folder: &quot;%1&quot;. Proceed?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<source>Are you sure you want to remove this profile?</source>
- <translation>Jsi si jistý, že chceš odstranit tento profil?</translation>
+ <translation type="obsolete">Jsi si jistý, že chceš odstranit tento profil?</translation>
</message>
<message>
- <location filename="profilesdialog.cpp" line="196"/>
+ <location filename="profilesdialog.cpp" line="215"/>
<source>Rename Profile</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profilesdialog.cpp" line="196"/>
+ <location filename="profilesdialog.cpp" line="215"/>
<source>New Name</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profilesdialog.cpp" line="233"/>
+ <location filename="profilesdialog.cpp" line="252"/>
<source>failed to change archive invalidation state: %1</source>
<translation>Zlyhala změna stavu invalidace archívu: %1</translation>
</message>
<message>
- <location filename="profilesdialog.cpp" line="270"/>
+ <location filename="profilesdialog.cpp" line="289"/>
<source>failed to determine if invalidation is active: %1</source>
<translation>Nepodařilo se zjistit jestli je invalidace aktivní: %1</translation>
</message>
@@ -4984,20 +5361,20 @@ p, li { white-space: pre-wrap; }
<context>
<name>QObject</name>
<message>
- <location filename="categories.cpp" line="133"/>
+ <location filename="categories.cpp" line="141"/>
<source>Failed to save custom categories</source>
<translation>Nezdařilo se uložit uživatelské kategorie</translation>
</message>
<message>
- <location filename="categories.cpp" line="210"/>
- <location filename="categories.cpp" line="245"/>
- <location filename="categories.cpp" line="255"/>
- <location filename="categories.cpp" line="265"/>
+ <location filename="categories.cpp" line="218"/>
+ <location filename="categories.cpp" line="253"/>
+ <location filename="categories.cpp" line="263"/>
+ <location filename="categories.cpp" line="273"/>
<source>invalid index %1</source>
<translation>neplatný index %1</translation>
</message>
<message>
- <location filename="categories.cpp" line="276"/>
+ <location filename="categories.cpp" line="284"/>
<source>invalid category id %1</source>
<translation>neplatné id kategorie %1</translation>
</message>
@@ -5013,7 +5390,7 @@ p, li { white-space: pre-wrap; }
<translation>Jméno účtu nebylo rozpoznáno</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="63"/>
+ <location filename="installationmanager.cpp" line="64"/>
<location filename="selfupdater.cpp" line="52"/>
<source>invalid 7-zip32.dll: %1</source>
<translation>neplatný 7-zip32.dll: %1</translation>
@@ -5083,12 +5460,12 @@ p, li { white-space: pre-wrap; }
<translation>Zlyhalo nastavení proxy-dll načítání</translation>
</message>
<message>
- <location filename="profile.cpp" line="93"/>
+ <location filename="profile.cpp" line="96"/>
<source>&quot;%1&quot; is missing</source>
<translation>&quot;%1&quot; chybí</translation>
</message>
<message>
- <location filename="main.cpp" line="134"/>
+ <location filename="main.cpp" line="139"/>
<source>Permissions required</source>
<translation>Chybí oprávnění</translation>
</message>
@@ -5097,8 +5474,8 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">Uživatelský účet nemá dostatečná oprávnění pro spuštění Mod Organizeru. Nevyhnutné zmeny se můžou udělat automaticky (adresář MO se nastaví ako přepisovatelný pro současného uživatele). Budete požádáni spustit &quot;mo_helper.exe&quot; s administrátorskými právami).</translation>
</message>
<message>
- <location filename="main.cpp" line="234"/>
- <location filename="main.cpp" line="272"/>
+ <location filename="main.cpp" line="231"/>
+ <location filename="main.cpp" line="269"/>
<source>Woops</source>
<translation>Hups</translation>
</message>
@@ -5107,61 +5484,66 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">ModOrganizer havaroval! Má se vytvořit diagnostický soubor? Pokud mi tento soubor pošlete (sherb@gmx.net), bude omnoho vyšší šance, že chybu opravím.</translation>
</message>
<message>
- <location filename="main.cpp" line="135"/>
- <source>The current user account doesn&apos;t have the required access rights to run Mod Organizer. The neccessary changes can be made automatically (the MO directory will be made writable for the current user account). You will be asked to run &quot;helper.exe&quot; with administrative rights).</source>
+ <location filename="main.cpp" line="140"/>
+ <source>The current user account doesn&apos;t have the required access rights to run Mod Organizer. The neccessary changes can be made automatically (the MO directory will be made writable for the current user account). You will be asked to run &quot;helper.exe&quot; with administrative rights.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="main.cpp" line="235"/>
+ <location filename="main.cpp" line="232"/>
<source>ModOrganizer has crashed! Should a diagnostic file be created? If you send me this file (%1) to sherb@gmx.net, the bug is a lot more likely to be fixed. Please include a short description of what you were doing when the crash happened</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="main.cpp" line="273"/>
+ <location filename="main.cpp" line="270"/>
<source>ModOrganizer has crashed! Unfortunately I was not able to write a diagnostic file: %1</source>
<translation>ModOrganizer havaroval! Naneštěstí, nezdařilo se ani vytvořit diagnostický soubor: %1</translation>
</message>
<message>
- <location filename="main.cpp" line="335"/>
- <location filename="settings.cpp" line="462"/>
+ <location filename="main.cpp" line="332"/>
+ <location filename="settings.cpp" line="542"/>
<source>Mod Organizer</source>
<translation>Mod Organizer</translation>
</message>
<message>
- <location filename="main.cpp" line="335"/>
+ <location filename="main.cpp" line="332"/>
<source>An instance of Mod Organizer is already running</source>
<translation>Jedna instance Mod Organizeru už běží</translation>
</message>
<message>
- <location filename="main.cpp" line="357"/>
+ <location filename="main.cpp" line="354"/>
<source>No game identified in &quot;%1&quot;. The directory is required to contain the game binary and its launcher.</source>
<translation>Žádná hra nebyla nalezena v &quot;%1&quot;. Je potřebné, aby adresář obsahoval binár hry a spouštěč.</translation>
</message>
<message>
- <location filename="main.cpp" line="360"/>
- <location filename="main.cpp" line="389"/>
+ <location filename="main.cpp" line="357"/>
+ <location filename="main.cpp" line="386"/>
<source>Please select the game to manage</source>
<translation>Prosím vyberte hru, kterou chcete spravovat</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="752"/>
+ <location filename="main.cpp" line="412"/>
+ <source>Please select the game edition you have (MO can&apos;t start the game correctly if this is set incorrectly!)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="782"/>
<source>Please use &quot;Help&quot; from the toolbar to get usage instructions to all elements</source>
<translation>Prosím použijte &quot;Pomoc&quot; z panelu nástrojú pro instrukce ke všem elementům</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1470"/>
- <location filename="mainwindow.cpp" line="3723"/>
+ <location filename="mainwindow.cpp" line="1610"/>
+ <location filename="mainwindow.cpp" line="4216"/>
<source>&lt;Manage...&gt;</source>
<translation>&lt;Manage...&gt;</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1488"/>
+ <location filename="mainwindow.cpp" line="1628"/>
<source>failed to parse profile %1: %2</source>
<translation>Nezdařilo se rozebrat profil %1: %2</translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="310"/>
- <location filename="profile.cpp" line="228"/>
+ <location filename="pluginlist.cpp" line="335"/>
+ <location filename="profile.cpp" line="233"/>
<source>failed to find &quot;%1&quot;</source>
<translation>Nepodařilo sa najít &quot;%1&quot;</translation>
</message>
@@ -5170,17 +5552,17 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">Chyba kódování, prosím nahlaste tuto chybu a poskytněte záznamový soubor mo_interface.log!</translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="467"/>
+ <location filename="pluginlist.cpp" line="491"/>
<source>failed to access %1</source>
<translation>zlyhal přístup k %1</translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="481"/>
+ <location filename="pluginlist.cpp" line="505"/>
<source>failed to set file time %1</source>
<translation>nepodařilo se nastavit čas souboru %1</translation>
</message>
<message>
- <location filename="profile.cpp" line="67"/>
+ <location filename="profile.cpp" line="70"/>
<source>failed to create %1</source>
<translation>Nepodařilo se vytvořit %1</translation>
</message>
@@ -5216,12 +5598,12 @@ p, li { white-space: pre-wrap; }
<translation>nepodařilo se otevřít %1</translation>
</message>
<message>
- <location filename="settings.cpp" line="469"/>
+ <location filename="settings.cpp" line="549"/>
<source>Script Extender</source>
<translation>Skript Extender</translation>
</message>
<message>
- <location filename="settings.cpp" line="476"/>
+ <location filename="settings.cpp" line="556"/>
<source>Proxy DLL</source>
<translation>Proxy DLL</translation>
</message>
@@ -5246,22 +5628,22 @@ Start elevated anyway? (you will be asked if you want to allow ModOrganizer.exe
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="spawn.cpp" line="128"/>
+ <location filename="spawn.cpp" line="129"/>
<source>failed to spawn &quot;%1&quot;: %2</source>
<translation>nepodařilo se vytvořit &quot;%1&quot;: %2</translation>
</message>
<message>
- <location filename="spawn.cpp" line="137"/>
+ <location filename="spawn.cpp" line="138"/>
<source>&quot;%1&quot; doesn&apos;t exist</source>
<translation>&quot;%1&quot; neexistuje</translation>
</message>
<message>
- <location filename="spawn.cpp" line="144"/>
+ <location filename="spawn.cpp" line="145"/>
<source>failed to inject dll into &quot;%1&quot;: %2</source>
<translation>nepodařilo se vsunout dll do &quot;%1&quot;: %2</translation>
</message>
<message>
- <location filename="spawn.cpp" line="152"/>
+ <location filename="spawn.cpp" line="153"/>
<source>failed to run &quot;%1&quot;</source>
<translation>nepodařilo se spustit &quot;%1&quot;</translation>
</message>
@@ -5322,6 +5704,11 @@ Start elevated anyway? (you will be asked if you want to allow ModOrganizer.exe
<source>invalid game type %1</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <location filename="safewritefile.cpp" line="32"/>
+ <source>failed to open temporary file</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>QueryOverwriteDialog</name>
@@ -5364,9 +5751,8 @@ Start elevated anyway? (you will be asked if you want to allow ModOrganizer.exe
<context>
<name>QuestionBoxMemory</name>
<message>
- <location filename="questionboxmemory.ui" line="86"/>
<source>Remember selection</source>
- <translation>pamatovat si výběr</translation>
+ <translation type="obsolete">pamatovat si výběr</translation>
</message>
</context>
<context>
@@ -5474,9 +5860,9 @@ Start elevated anyway? (you will be asked if you want to allow ModOrganizer.exe
</message>
<message>
<location filename="selfupdater.cpp" line="116"/>
- <location filename="selfupdater.cpp" line="140"/>
- <location filename="selfupdater.cpp" line="269"/>
- <location filename="selfupdater.cpp" line="417"/>
+ <location filename="selfupdater.cpp" line="139"/>
+ <location filename="selfupdater.cpp" line="268"/>
+ <location filename="selfupdater.cpp" line="415"/>
<source>Update</source>
<translation>Aktualizace</translation>
</message>
@@ -5486,57 +5872,57 @@ Start elevated anyway? (you will be asked if you want to allow ModOrganizer.exe
<translation>Je k dispozici Aktualizace (nejnovší verze: %1), chcete nainstalovat?</translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="141"/>
+ <location filename="selfupdater.cpp" line="140"/>
<source>Download in progress</source>
<translation>Stahování probíhá</translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="196"/>
+ <location filename="selfupdater.cpp" line="195"/>
<source>Download failed: %1</source>
<translation>Stahování zlyhalo: %1</translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="207"/>
+ <location filename="selfupdater.cpp" line="206"/>
<source>Failed to install update: %1</source>
<translation>Zlyhala instalace aktualizace: %1</translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="228"/>
+ <location filename="selfupdater.cpp" line="227"/>
<source>failed to open archive &quot;%1&quot;: %2</source>
<translation>nepodařilo se otevřít archív &quot;%1&quot;: %2</translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="251"/>
+ <location filename="selfupdater.cpp" line="250"/>
<source>failed to move outdated files: %1. Please update manually.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="269"/>
+ <location filename="selfupdater.cpp" line="268"/>
<source>Update installed, Mod Organizer will now be restarted.</source>
<translation>Aktualizace nainstalována, Mod Organizer se teď restartuje.</translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="297"/>
+ <location filename="selfupdater.cpp" line="296"/>
<source>Error</source>
<translation>Chyba</translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="353"/>
+ <location filename="selfupdater.cpp" line="351"/>
<source>Failed to parse response. Please report this as a bug and include the file mo_interface.log.</source>
<translation>Zlyhala odozva. Prosím nahlaste tuto chybu autorovi a přiložte soubor mo_interface.log.</translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="418"/>
+ <location filename="selfupdater.cpp" line="416"/>
<source>No incremental update available for this version, the complete package needs to be downloaded (%1 kB)</source>
<translation>Inkrementální aktualizace není k dispozici, je potřebné stáhnout celý nový balík (%1 kB)</translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="427"/>
+ <location filename="selfupdater.cpp" line="425"/>
<source>no file for update found. Please update manually.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="461"/>
+ <location filename="selfupdater.cpp" line="460"/>
<source>No download server available. Please try again later.</source>
<translation type="unfinished"></translation>
</message>
@@ -5545,7 +5931,7 @@ Start elevated anyway? (you will be asked if you want to allow ModOrganizer.exe
<translation type="obsolete">Nenalezen soubor pro aktualizaci</translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="441"/>
+ <location filename="selfupdater.cpp" line="440"/>
<source>Failed to retrieve update information: %1</source>
<translation>Nepodařilo se získat informace o aktualizaci: %1</translation>
</message>
@@ -5553,26 +5939,22 @@ Start elevated anyway? (you will be asked if you want to allow ModOrganizer.exe
<context>
<name>Settings</name>
<message>
- <location filename="settings.cpp" line="278"/>
- <source>setting for invalid plugin &quot;%1&quot; requested</source>
- <translation type="unfinished"></translation>
+ <source>Administrative rights required to change this.</source>
+ <translation type="obsolete">Administrátorské práva jsou požadovány na tuhle změnu.</translation>
</message>
<message>
- <location filename="settings.cpp" line="282"/>
- <source>invalid setting &quot;%1&quot; requested for plugin &quot;%2&quot;</source>
+ <location filename="settings.cpp" line="320"/>
+ <location filename="settings.cpp" line="339"/>
+ <source>attempt to store setting for unknown plugin &quot;%1&quot;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Administrative rights required to change this.</source>
- <translation type="obsolete">Administrátorské práva jsou požadovány na tuhle změnu.</translation>
- </message>
- <message>
- <location filename="settings.cpp" line="573"/>
+ <location filename="settings.cpp" line="660"/>
<source>Confirm</source>
<translation>Potvrdit</translation>
</message>
<message>
- <location filename="settings.cpp" line="573"/>
+ <location filename="settings.cpp" line="660"/>
<source>Changing the mod directory affects all your profiles! Mods not present (or named differently) in the new location will be disabled in all profiles. There is no way to undo this unless you backed up your profiles manually. Proceed?</source>
<translation>Zmena adresáře modu změní všechny tvoje profily! Nenalezené mody (nebo přejmenované) v nové lokaci budou deaktivovány ve všech profilech. Není možnosť návratu pokud si nezazálohujete profily ručně. Pokračovat?</translation>
</message>
@@ -5745,47 +6127,57 @@ p, li { white-space: pre-wrap; }
<translation>Konfigurovat Kategorie Modů</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="321"/>
+ <location filename="settingsdialog.ui" line="318"/>
<source>Disable automatic internet features</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="324"/>
+ <location filename="settingsdialog.ui" line="321"/>
<source>Disable automatic internet features. This does not affect features that are explicitly invoked by the user (like checking mods for updates, endorsing, opening the web browser)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="327"/>
+ <location filename="settingsdialog.ui" line="324"/>
<source>Offline Mode</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="334"/>
+ <location filename="settingsdialog.ui" line="331"/>
<source>Use a proxy for network connections.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="337"/>
+ <location filename="settingsdialog.ui" line="334"/>
<source>Use a proxy for network connections. This uses the system-wide settings which can be configured in Internet Explorer. Please note that MO will start up a few seconds slower on some systems when using a proxy.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="340"/>
+ <location filename="settingsdialog.ui" line="337"/>
<source>Use HTTP Proxy (Uses System Settings)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="351"/>
- <source>Known Servers (Dynamically updated every download)</source>
+ <location filename="settingsdialog.ui" line="346"/>
+ <source>Associate with &quot;Download with manager&quot; links</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="settingsdialog.ui" line="375"/>
+ <source>Known Servers (updated on download)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="372"/>
+ <location filename="settingsdialog.ui" line="396"/>
<source>Preferred Servers (Drag &amp; Drop)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="594"/>
+ <location filename="settingsdialog.ui" line="536"/>
+ <source>Blacklisted Plugins (use &lt;del&gt; to remove):</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="settingsdialog.ui" line="632"/>
<source>Mod Organizer needs a dll to be injected into the game so all mods are visible to it.
There are several means to do this:
*Mod Organizer* (default) In this mode the Mod Organizer itself injects the dll. The disadvantage is that you always have to start the game through MO or a link created by it.
@@ -5834,12 +6226,12 @@ p, li { white-space: pre-wrap; }
<translation>Automaticky přihlásit do Nexusu</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="285"/>
+ <location filename="settingsdialog.ui" line="282"/>
<source>Username</source>
<translation>Přihlasovací jméno</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="299"/>
+ <location filename="settingsdialog.ui" line="296"/>
<source>Password</source>
<translation>Heslo</translation>
</message>
@@ -5856,52 +6248,52 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">Preferuj externí prohlížeč</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="407"/>
+ <location filename="settingsdialog.ui" line="431"/>
<source>Plugins</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="427"/>
+ <location filename="settingsdialog.ui" line="453"/>
<source>Author:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="441"/>
+ <location filename="settingsdialog.ui" line="467"/>
<source>Version:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="455"/>
+ <location filename="settingsdialog.ui" line="481"/>
<source>Description:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="493"/>
+ <location filename="settingsdialog.ui" line="519"/>
<source>Key</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="498"/>
+ <location filename="settingsdialog.ui" line="524"/>
<source>Value</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="509"/>
+ <location filename="settingsdialog.ui" line="547"/>
<source>Workarounds</source>
<translation>Řešení</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="517"/>
+ <location filename="settingsdialog.ui" line="555"/>
<source>Steam App ID</source>
<translation>Steam App ID</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="537"/>
+ <location filename="settingsdialog.ui" line="575"/>
<source>The Steam AppID for your game</source>
<translation>Steam AppID pro vaši hru</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="540"/>
+ <location filename="settingsdialog.ui" line="578"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
@@ -5928,12 +6320,12 @@ p, li { white-space: pre-wrap; }
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;22380 je id, které hledáte.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="571"/>
+ <location filename="settingsdialog.ui" line="609"/>
<source>Load Mechanism</source>
<translation>Mechanizmus spuštění</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="591"/>
+ <location filename="settingsdialog.ui" line="629"/>
<source>Select loading mechanism. See help for details.</source>
<translation>Vyberte mechanizmus použit pro spuštění. Pro víc detailů čti Nápovědu.</translation>
</message>
@@ -5958,17 +6350,17 @@ p, li { white-space: pre-wrap; }
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt; font-weight:600;&quot;&gt;Proxy DLL&lt;/span&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt; V tomhle módu, MO nahradí jedno dll samotné hry takovým, které načte MO (a také původní obsah dll samozřejmě). Tohle bude fungovat POUZE pro Steamové verze her a bylo testováno pouze u Skyrimu. Vyhněte se téhle metóde pokud funguje jedna z předchozích.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="611"/>
+ <location filename="settingsdialog.ui" line="649"/>
<source>NMM Version</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="631"/>
+ <location filename="settingsdialog.ui" line="669"/>
<source>The Version of Nexus Mod Manager to impersonate.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="634"/>
+ <location filename="settingsdialog.ui" line="672"/>
<source>Mod Organizer uses an API provided by the Nexus to provide features like checking for updates and downloading files. Unfortunately this API has not been made available officially to third party tools like MO so we have to impersonate the Nexus Mod Manager to be allowed in.
On top of this Nexus has used the client identification to lock out outdated versions of NMM to force users to update. This means that MO also needs to impersonate the new version of NMM even if MO doesn&apos;t need an update. Therefore you can configure the version to identify as here.
Please note that MO does identify itself as MO to the webserver, it&apos;s not lying about what it is. It is merely adding a &quot;compatible&quot; NMM version to the user agent.
@@ -5977,53 +6369,53 @@ tl;dr-version: If Nexus-features don&apos;t work, insert the current version num
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="656"/>
+ <location filename="settingsdialog.ui" line="694"/>
<source>Enforces that inactive ESPs and ESMs are never loaded.</source>
<translation>Zabezpečí, aby se neaktivní ESP a ESM vůbec nezobrazovali.</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="659"/>
+ <location filename="settingsdialog.ui" line="697"/>
<source>It seems that the Games occasionally load ESP or ESM files even if they haven&apos;t been activated as plugins.
I don&apos;t yet know what the circumstances are, but user reports imply it is in some cases unwanted. If this is checked, ESPs and ESMs not checked in the List are invisible to the game and can not be loaded.</source>
<translation>Zdá se, že hry občasně načtou ESP nebo ESM soubory i když nebyli označeny ako aktivní pluginy.
Nevím za jakých podmínek se to stává, ale uživatelé říkaj, že v některých případech je to neželané. Pokud je tohle označeno, ESP a ESM soubory které v seznamu nejsou označeny, nemůžou být za žádných okolností načtené ve hře.</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="663"/>
+ <location filename="settingsdialog.ui" line="701"/>
<source>Hide inactive ESPs/ESMs</source>
<translation>Skrýt neaktivní ESP/ESM</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="670"/>
+ <location filename="settingsdialog.ui" line="708"/>
<source>If checked, files (i.e. esps, esms and bsas) belonging to the core game can not be disabled in the UI. (default: on)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="673"/>
+ <location filename="settingsdialog.ui" line="711"/>
<source>If checked, files (i.e. esps, esms and bsas) belonging to the core game can not be disabled in the UI. (default: on)
Uncheck this if you want to use Mod Organizer with total conversions (like Nehrim) but be aware that the game will crash if required files are not enabled.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="677"/>
+ <location filename="settingsdialog.ui" line="715"/>
<source>Force-enable game files</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="687"/>
- <location filename="settingsdialog.ui" line="691"/>
+ <location filename="settingsdialog.ui" line="725"/>
+ <location filename="settingsdialog.ui" line="729"/>
<source>For Skyrim, this can be used instead of Archive Invalidation. It should make AI redundant for all Profiles.
For the other games this is not a sufficient replacement for AI!</source>
<translation>Pro Skyrim, tohle je možné použít místo Invalidace Archívu. Pro všechny profily bude IA nepotřebná.
Pro ostatné hry tohle není dostatečná náhrada Invalidace Archívu! </translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="695"/>
+ <location filename="settingsdialog.ui" line="733"/>
<source>Back-date BSAs</source>
<translation>Uprav dátumy BSA</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="719"/>
+ <location filename="settingsdialog.ui" line="757"/>
<source>These are workarounds for problems with Mod Organizer. Please make sure you read the help text before changing anything here.</source>
<translation type="unfinished"></translation>
</message>
@@ -6032,27 +6424,27 @@ Pro ostatné hry tohle není dostatečná náhrada Invalidace Archívu! </trans
<translation type="obsolete">Tohle jsou různé náhradné řešení problému s používaním modů. Obvykle nejsou potřebné. Prosím určite si projděte Nápovědu předtím než zde neco poměníte.</translation>
</message>
<message>
- <location filename="settingsdialog.cpp" line="89"/>
+ <location filename="settingsdialog.cpp" line="95"/>
<source>Select download directory</source>
<translation>Vyber adresář pro stahování</translation>
</message>
<message>
- <location filename="settingsdialog.cpp" line="97"/>
+ <location filename="settingsdialog.cpp" line="103"/>
<source>Select mod directory</source>
<translation>Vyber adresář pro mody</translation>
</message>
<message>
- <location filename="settingsdialog.cpp" line="105"/>
+ <location filename="settingsdialog.cpp" line="111"/>
<source>Select cache directory</source>
<translation>Vyber adresář pro cache </translation>
</message>
<message>
- <location filename="settingsdialog.cpp" line="113"/>
+ <location filename="settingsdialog.cpp" line="119"/>
<source>Confirm?</source>
<translation>Potvrdit?</translation>
</message>
<message>
- <location filename="settingsdialog.cpp" line="114"/>
+ <location filename="settingsdialog.cpp" line="120"/>
<source>This will make all dialogs show up again where you checked the &quot;Remember selection&quot;-box. Continue?</source>
<translation>Znovu se budou zobrazovat všechny výzvy, u kterých jste označili &quot;Zapamatovat tuto odpověd provždy&quot;. Pokračovat?</translation>
</message>
@@ -6182,7 +6574,7 @@ Pro ostatné hry tohle není dostatečná náhrada Invalidace Archívu! </trans
<name>TransferSavesDialog</name>
<message>
<location filename="transfersavesdialog.ui" line="14"/>
- <source>Dialog</source>
+ <source>Transfer Savegames</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -6203,8 +6595,16 @@ On Windows Vista/Windows 7:
C:\Users\[UserName]\Documents\My Games\Skyrim\Saves
On Windows XP:
- C:\Documents and Settings[UserName]\My Documents\My Games\Skyrim\Saves
+ C:\Documents and Settings\[UserName]\My Documents\My Games\Skyrim\Saves
</source>
+ <oldsource>This is a list of characters in the global location.
+
+On Windows Vista/Windows 7:
+ C:\Users\[UserName]\Documents\My Games\Skyrim\Saves
+
+On Windows XP:
+ C:\Documents and Settings[UserName]\My Documents\My Games\Skyrim\Saves
+</oldsource>
<translation type="unfinished"></translation>
</message>
<message>
diff --git a/src/organizer_de.qm b/src/organizer_de.qm
deleted file mode 100644
index 71baf743..00000000
--- a/src/organizer_de.qm
+++ /dev/null
Binary files differ
diff --git a/src/organizer_de.ts b/src/organizer_de.ts
index e47e557f..16d4521f 100644
--- a/src/organizer_de.ts
+++ b/src/organizer_de.ts
@@ -2,6 +2,50 @@
<!DOCTYPE TS>
<TS version="2.0" language="de">
<context>
+ <name>AboutDialog</name>
+ <message>
+ <location filename="aboutdialog.ui" line="14"/>
+ <location filename="aboutdialog.ui" line="53"/>
+ <source>About</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="aboutdialog.ui" line="66"/>
+ <source>Revision:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="aboutdialog.ui" line="104"/>
+ <source>Used Software</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="aboutdialog.ui" line="117"/>
+ <source>Credits</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="aboutdialog.ui" line="123"/>
+ <source>Translators</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="aboutdialog.ui" line="189"/>
+ <source>Others</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="aboutdialog.ui" line="266"/>
+ <source>Close</source>
+ <translation type="unfinished">Schliessen</translation>
+ </message>
+ <message>
+ <location filename="aboutdialog.cpp" line="81"/>
+ <source>No license</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>ActivateModsDialog</name>
<message>
<location filename="activatemodsdialog.ui" line="14"/>
@@ -239,25 +283,30 @@ p, li { white-space: pre-wrap; }
<context>
<name>DownloadList</name>
<message>
- <location filename="downloadlist.cpp" line="63"/>
+ <location filename="downloadlist.cpp" line="64"/>
<source>Name</source>
<translation>Name</translation>
</message>
<message>
- <location filename="downloadlist.cpp" line="64"/>
+ <location filename="downloadlist.cpp" line="65"/>
<source>Filetime</source>
<translation>Änderungsdatum</translation>
</message>
<message>
- <location filename="downloadlist.cpp" line="65"/>
+ <location filename="downloadlist.cpp" line="66"/>
<source>Done</source>
<translation type="unfinished">Fertig</translation>
</message>
<message>
- <location filename="downloadlist.cpp" line="79"/>
+ <location filename="downloadlist.cpp" line="82"/>
<source>Information missing, please select &quot;Query Info&quot; from the context menu to re-retrieve.</source>
<translation>Informationen unvollständig, bitte clicke im Kontextmenü &quot;Info abfragen&quot; um diese erneut abzurufen.</translation>
</message>
+ <message>
+ <location filename="downloadlist.cpp" line="89"/>
+ <source>pending download</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>DownloadListWidget</name>
@@ -268,16 +317,6 @@ p, li { white-space: pre-wrap; }
<translation>Platzhalter</translation>
</message>
<message>
- <location filename="downloadlistwidget.ui" line="81"/>
- <source>0</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="downloadlistwidget.ui" line="88"/>
- <source>KB</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<location filename="downloadlistwidget.ui" line="99"/>
<location filename="downloadlistwidget.cpp" line="145"/>
<location filename="downloadlistwidget.cpp" line="147"/>
@@ -320,120 +359,135 @@ p, li { white-space: pre-wrap; }
<context>
<name>DownloadListWidgetCompactDelegate</name>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="215"/>
- <location filename="downloadlistwidgetcompact.cpp" line="224"/>
- <location filename="downloadlistwidgetcompact.cpp" line="233"/>
- <location filename="downloadlistwidgetcompact.cpp" line="242"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="241"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="250"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="259"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="268"/>
<source>Are you sure?</source>
<translation>Sind sie sicher?</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="216"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="242"/>
<source>This will remove all finished downloads from this list and from disk.</source>
<translation>Entfernt alle abgeschlossenen Downloads aus der Liste und von der Festplatte.</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="225"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="251"/>
<source>This will remove all installed downloads from this list and from disk.</source>
<translation>Entfernt alle installierten Downloads aus der Liste und von der Festplatte.</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="269"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="298"/>
<source>Install</source>
<translation>Installieren</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="271"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="300"/>
<source>Query Info</source>
<translation>Info abfragen</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="279"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="312"/>
<source>Remove</source>
<translation>Entfernen</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="276"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="309"/>
<source>Cancel</source>
<translation>Abbrechen</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="120"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="88"/>
+ <source>&lt; mod %1 file %2 &gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="downloadlistwidgetcompact.cpp" line="93"/>
+ <source>Pending</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="downloadlistwidgetcompact.cpp" line="116"/>
<source>Paused</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="123"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="119"/>
<source>Fetching Info 1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="125"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="121"/>
<source>Fetching Info 2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="130"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="126"/>
<source>Installed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="133"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="129"/>
<source>Uninstalled</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="136"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="132"/>
<source>Done</source>
<translation type="unfinished">Fertig</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="234"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="260"/>
<source>This will permanently remove all finished downloads from this list (but NOT from disk).</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="243"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="269"/>
<source>This will permanently remove all installed downloads from this list (but NOT from disk).</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="273"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="302"/>
<source>Delete</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="274"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="304"/>
+ <source>Un-Hide</source>
+ <translation type="unfinished">Sichtbar machen</translation>
+ </message>
+ <message>
+ <location filename="downloadlistwidgetcompact.cpp" line="306"/>
<source>Remove from View</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="277"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="310"/>
<source>Pause</source>
<translation>Pausieren</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="280"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="313"/>
<source>Resume</source>
<translation>Fortsetzen</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="284"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="318"/>
<source>Delete Installed...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="285"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="319"/>
<source>Delete All...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="287"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="322"/>
<source>Remove Installed...</source>
<translation>Installierte entfernen...</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="288"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="323"/>
<source>Remove All...</source>
<translation>Alle löschen...</translation>
</message>
@@ -441,64 +495,79 @@ p, li { white-space: pre-wrap; }
<context>
<name>DownloadListWidgetDelegate</name>
<message>
- <location filename="downloadlistwidget.cpp" line="228"/>
- <location filename="downloadlistwidget.cpp" line="237"/>
- <location filename="downloadlistwidget.cpp" line="246"/>
- <location filename="downloadlistwidget.cpp" line="255"/>
+ <location filename="downloadlistwidget.cpp" line="253"/>
+ <location filename="downloadlistwidget.cpp" line="262"/>
+ <location filename="downloadlistwidget.cpp" line="271"/>
+ <location filename="downloadlistwidget.cpp" line="280"/>
<source>Are you sure?</source>
<translation>Sind sie sicher?</translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="229"/>
+ <location filename="downloadlistwidget.cpp" line="254"/>
<source>This will remove all finished downloads from this list and from disk.</source>
<translation>Entfernt alle abgeschlossenen Downloads aus der Liste und von der Festplatte.</translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="238"/>
+ <location filename="downloadlistwidget.cpp" line="263"/>
<source>This will remove all installed downloads from this list and from disk.</source>
<translation>Entfernt alle installierten Downloads aus der Liste und von der Festplatte.</translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="247"/>
+ <location filename="downloadlistwidget.cpp" line="272"/>
<source>This will remove all finished downloads from this list (but NOT from disk).</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="256"/>
+ <location filename="downloadlistwidget.cpp" line="281"/>
<source>This will remove all installed downloads from this list (but NOT from disk).</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="281"/>
+ <location filename="downloadlistwidget.cpp" line="309"/>
<source>Install</source>
<translation>Installieren</translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="283"/>
+ <location filename="downloadlistwidget.cpp" line="311"/>
<source>Query Info</source>
<translation>Info abfragen</translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="285"/>
+ <location filename="downloadlistwidget.cpp" line="313"/>
<source>Delete</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="286"/>
+ <location filename="downloadlistwidget.cpp" line="315"/>
+ <source>Un-Hide</source>
+ <translation type="unfinished">Sichtbar machen</translation>
+ </message>
+ <message>
+ <location filename="downloadlistwidget.cpp" line="317"/>
<source>Remove from View</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="291"/>
+ <location filename="downloadlistwidget.cpp" line="323"/>
<source>Remove</source>
<translation>Entfernen</translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="288"/>
+ <location filename="downloadlistwidget.cpp" line="320"/>
<source>Cancel</source>
<translation>Abbrechen</translation>
</message>
<message>
+ <location filename="downloadlistwidget.cpp" line="88"/>
+ <source>&lt; mod %1 file %2 &gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="downloadlistwidget.cpp" line="91"/>
+ <source>Pending</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="downloadlistwidget.cpp" line="118"/>
<source>Fetching Info 1</source>
<translation type="unfinished"></translation>
@@ -509,32 +578,32 @@ p, li { white-space: pre-wrap; }
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="289"/>
+ <location filename="downloadlistwidget.cpp" line="321"/>
<source>Pause</source>
<translation>Pausieren</translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="292"/>
+ <location filename="downloadlistwidget.cpp" line="324"/>
<source>Resume</source>
<translation>Fortsetzen</translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="296"/>
+ <location filename="downloadlistwidget.cpp" line="329"/>
<source>Delete Installed...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="297"/>
+ <location filename="downloadlistwidget.cpp" line="330"/>
<source>Delete All...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="299"/>
+ <location filename="downloadlistwidget.cpp" line="333"/>
<source>Remove Installed...</source>
<translation>Installierte entfernen...</translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="300"/>
+ <location filename="downloadlistwidget.cpp" line="334"/>
<source>Remove All...</source>
<translation>Alle löschen...</translation>
</message>
@@ -542,12 +611,12 @@ p, li { white-space: pre-wrap; }
<context>
<name>DownloadManager</name>
<message>
- <location filename="downloadmanager.cpp" line="450"/>
- <location filename="downloadmanager.cpp" line="468"/>
- <location filename="downloadmanager.cpp" line="481"/>
- <location filename="downloadmanager.cpp" line="494"/>
- <location filename="downloadmanager.cpp" line="505"/>
- <location filename="downloadmanager.cpp" line="540"/>
+ <location filename="downloadmanager.cpp" line="539"/>
+ <location filename="downloadmanager.cpp" line="557"/>
+ <location filename="downloadmanager.cpp" line="570"/>
+ <location filename="downloadmanager.cpp" line="587"/>
+ <location filename="downloadmanager.cpp" line="598"/>
+ <location filename="downloadmanager.cpp" line="633"/>
<source>invalid index %1</source>
<translation>ungültiger index %1</translation>
</message>
@@ -556,52 +625,66 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">Löschen der Datei ist fehlgeschlagen</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="384"/>
+ <location filename="downloadmanager.cpp" line="457"/>
<source>failed to delete %1</source>
<translation>konnte %1 nicht löschen</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="390"/>
+ <location filename="downloadmanager.cpp" line="463"/>
<source>failed to delete meta file for %1</source>
<translation>konnte meta-informationen für %1 nicht löschen</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="366"/>
- <location filename="downloadmanager.cpp" line="585"/>
- <location filename="downloadmanager.cpp" line="595"/>
- <location filename="downloadmanager.cpp" line="604"/>
- <location filename="downloadmanager.cpp" line="614"/>
- <location filename="downloadmanager.cpp" line="624"/>
- <location filename="downloadmanager.cpp" line="634"/>
- <location filename="downloadmanager.cpp" line="645"/>
- <location filename="downloadmanager.cpp" line="654"/>
- <location filename="downloadmanager.cpp" line="664"/>
- <location filename="downloadmanager.cpp" line="679"/>
+ <location filename="downloadmanager.cpp" line="439"/>
+ <location filename="downloadmanager.cpp" line="506"/>
+ <location filename="downloadmanager.cpp" line="682"/>
+ <location filename="downloadmanager.cpp" line="691"/>
+ <location filename="downloadmanager.cpp" line="701"/>
+ <location filename="downloadmanager.cpp" line="710"/>
+ <location filename="downloadmanager.cpp" line="724"/>
+ <location filename="downloadmanager.cpp" line="734"/>
+ <location filename="downloadmanager.cpp" line="744"/>
+ <location filename="downloadmanager.cpp" line="754"/>
+ <location filename="downloadmanager.cpp" line="765"/>
+ <location filename="downloadmanager.cpp" line="773"/>
+ <location filename="downloadmanager.cpp" line="782"/>
+ <location filename="downloadmanager.cpp" line="792"/>
+ <location filename="downloadmanager.cpp" line="807"/>
<source>invalid index</source>
<translation>ungültiger Index</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="125"/>
+ <location filename="downloadmanager.cpp" line="132"/>
<source>failed to rename &quot;%1&quot; to &quot;%2&quot;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="306"/>
+ <location filename="downloadmanager.cpp" line="342"/>
<source>Download again?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="306"/>
+ <location filename="downloadmanager.cpp" line="342"/>
<source>A file with the same name has already been downloaded. Do you want to download it again? The new file will receive a different name.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="557"/>
+ <location filename="downloadmanager.cpp" line="421"/>
+ <source>Wrong Game</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="downloadmanager.cpp" line="421"/>
+ <source>The download link is for a mod for &quot;%1&quot; but this instance of MO has been set up for &quot;%2&quot;.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="downloadmanager.cpp" line="650"/>
<source>Please enter the nexus mod id</source>
<translation>Bitte gib die Nexus Mod ID ein</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="557"/>
+ <location filename="downloadmanager.cpp" line="650"/>
<source>Mod ID:</source>
<translation>Mod ID:</translation>
</message>
@@ -610,33 +693,38 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">ungültiger alphabetischer index %1</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="899"/>
+ <location filename="downloadmanager.cpp" line="1042"/>
<source>Information updated</source>
<translation>Informationen aktualisiert</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="901"/>
- <location filename="downloadmanager.cpp" line="915"/>
+ <location filename="downloadmanager.cpp" line="1044"/>
+ <location filename="downloadmanager.cpp" line="1058"/>
<source>No matching file found on Nexus! Maybe this file is no longer available or it was renamed?</source>
<translation>Keine passende Datei auf Nexus gefunden! Ist die Datei vielleicht nicht mehr verfügbar?</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="903"/>
+ <location filename="downloadmanager.cpp" line="1046"/>
<source>No file on Nexus matches the selected file by name. Please manually choose the correct one.</source>
<translation>Keine Datei mit diesem Namen auf Nexus gefunden. Bitte wähle die passende händisch aus.</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="1032"/>
+ <location filename="downloadmanager.cpp" line="1180"/>
<source>No download server available. Please try again later.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="1074"/>
+ <location filename="downloadmanager.cpp" line="1224"/>
<source>Failed to request file info from nexus: %1</source>
<translation>Konnte Datei-Informationen nicht von Nexus abrufen: %1</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="1097"/>
+ <location filename="downloadmanager.cpp" line="1249"/>
+ <source>Download failed. Server reported: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="downloadmanager.cpp" line="1251"/>
<source>Download failed: %1 (%2)</source>
<translation>Download fehlgeschlagen: %1 (%2)</translation>
</message>
@@ -645,7 +733,7 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">Abfrage von Dateiinformationen von Nexus fehlgeschlagen!</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="1174"/>
+ <location filename="downloadmanager.cpp" line="1331"/>
<source>failed to re-open %1</source>
<translation>Öffnen von %1 fehlgeschlagen</translation>
</message>
@@ -654,7 +742,7 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">konnte Antwort von Nexus nicht interpretieren</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="336"/>
+ <location filename="downloadmanager.cpp" line="388"/>
<source>failed to download %1: could not open output file: %2</source>
<translation>Download von %1 fehlgeschlagen: Konnte Ausgabedatei %2 nicht öffnen</translation>
</message>
@@ -768,7 +856,7 @@ Momentan ist der einzige bekannte Fall in dem dies benötigt wird der Skyrim Cre
<message>
<location filename="editexecutablesdialog.ui" line="169"/>
<location filename="editexecutablesdialog.ui" line="172"/>
- <location filename="editexecutablesdialog.cpp" line="220"/>
+ <location filename="editexecutablesdialog.cpp" line="258"/>
<source>If checked, MO will be closed once the specified executable is run.</source>
<translation>Wenn ausgewählt, wird MO geschlossen sobald das Programm gestartet wird.</translation>
</message>
@@ -785,7 +873,7 @@ Momentan ist der einzige bekannte Fall in dem dies benötigt wird der Skyrim Cre
</message>
<message>
<location filename="editexecutablesdialog.ui" line="188"/>
- <location filename="editexecutablesdialog.cpp" line="190"/>
+ <location filename="editexecutablesdialog.cpp" line="196"/>
<source>Add</source>
<translation>Neu</translation>
</message>
@@ -801,42 +889,59 @@ Momentan ist der einzige bekannte Fall in dem dies benötigt wird der Skyrim Cre
<translation>Entfernen</translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="119"/>
+ <location filename="editexecutablesdialog.ui" line="233"/>
+ <source>Close</source>
+ <translation type="unfinished">Schliessen</translation>
+ </message>
+ <message>
+ <location filename="editexecutablesdialog.cpp" line="125"/>
<source>Select a binary</source>
<translation>Ausführbare Datei wählen</translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="119"/>
+ <location filename="editexecutablesdialog.cpp" line="125"/>
<source>Executable (%1)</source>
<translation>Ausführbare Datei (%1)</translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="143"/>
+ <location filename="editexecutablesdialog.cpp" line="149"/>
<source>Java (32-bit) required</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="144"/>
+ <location filename="editexecutablesdialog.cpp" line="150"/>
<source>MO requires 32-bit java to run this application. If you already have it installed, select javaw.exe from that installation as the binary.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="160"/>
+ <location filename="editexecutablesdialog.cpp" line="166"/>
<source>Select a directory</source>
<translation>Wähle ein Verzeichnis</translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="169"/>
+ <location filename="editexecutablesdialog.cpp" line="175"/>
<source>Confirm</source>
<translation>Bestätigen</translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="169"/>
+ <location filename="editexecutablesdialog.cpp" line="175"/>
<source>Really remove &quot;%1&quot; from executables?</source>
<translation>Die ausführbare Datei &quot;%1&quot; löschen?</translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="217"/>
+ <location filename="editexecutablesdialog.cpp" line="230"/>
+ <location filename="editexecutablesdialog.cpp" line="278"/>
+ <source>Save Changes?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="editexecutablesdialog.cpp" line="231"/>
+ <location filename="editexecutablesdialog.cpp" line="279"/>
+ <source>You made changes to the current executable, do you want to save them?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="editexecutablesdialog.cpp" line="255"/>
<source>MO must be kept running or this application will not work correctly.</source>
<translation>MO muss aktiv bleiben sonst funktioniert diese Anwendung nicht korrekt.</translation>
</message>
@@ -845,7 +950,7 @@ Momentan ist der einzige bekannte Fall in dem dies benötigt wird der Skyrim Cre
<translation type="obsolete">Ausführbare Datei (*.exe, *.bat)</translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="194"/>
+ <location filename="editexecutablesdialog.cpp" line="200"/>
<source>Modify</source>
<translation>Ändern</translation>
</message>
@@ -1110,12 +1215,12 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">mo_archive.dll nicht geladen: %1</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="97"/>
+ <location filename="installationmanager.cpp" line="98"/>
<source>Password required</source>
<translation>Kennwort benötigt</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="97"/>
+ <location filename="installationmanager.cpp" line="98"/>
<source>Password</source>
<translation>Kennwort</translation>
</message>
@@ -1129,18 +1234,18 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="installationmanager.cpp" line="164"/>
- <location filename="installationmanager.cpp" line="252"/>
- <location filename="installationmanager.cpp" line="530"/>
+ <location filename="installationmanager.cpp" line="248"/>
+ <location filename="installationmanager.cpp" line="529"/>
<source>Extracting files</source>
<translation>Extrahiere Dateien</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="772"/>
+ <location filename="installationmanager.cpp" line="757"/>
<source>failed to open archive</source>
<translation>Öffnen des Archivs fehlgeschlagen</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="624"/>
+ <location filename="installationmanager.cpp" line="609"/>
<source>File format &quot;%1&quot; not supported</source>
<translation>Dateiformat &quot;%1&quot; wird nicht unterstützt</translation>
</message>
@@ -1189,32 +1294,32 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">Installation fehlgeschlagen (Fehlercode %1)</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="75"/>
+ <location filename="installationmanager.cpp" line="76"/>
<source>archive.dll not loaded: &quot;%1&quot;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="443"/>
+ <location filename="installationmanager.cpp" line="439"/>
<source>failed to create backup</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="449"/>
+ <location filename="installationmanager.cpp" line="448"/>
<source>Mod Name</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="449"/>
+ <location filename="installationmanager.cpp" line="448"/>
<source>Name</source>
<translation type="unfinished">Name</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="502"/>
+ <location filename="installationmanager.cpp" line="501"/>
<source>Invalid name</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="503"/>
+ <location filename="installationmanager.cpp" line="502"/>
<source>The name you entered is invalid, please enter a different one.</source>
<translation type="unfinished"></translation>
</message>
@@ -1227,47 +1332,47 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">Dieses Archive enthält einen geskripteten Installer. Um diesen zu nutzen wird das Optionale Paket &quot;NCC&quot; und die .net Runtime benötigt. Willst du jetzt mit einer manuellen Installation fortfahren?</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="750"/>
+ <location filename="installationmanager.cpp" line="735"/>
<source>None of the available installer plugins were able to handle that archive</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="760"/>
+ <location filename="installationmanager.cpp" line="745"/>
<source>no error</source>
<translation>Kein Fehler</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="763"/>
+ <location filename="installationmanager.cpp" line="748"/>
<source>7z.dll not found</source>
<translation>7z.dll nicht gefunden</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="766"/>
+ <location filename="installationmanager.cpp" line="751"/>
<source>7z.dll isn&apos;t valid</source>
<translation>7z.dll ist ungültig</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="769"/>
+ <location filename="installationmanager.cpp" line="754"/>
<source>archive not found</source>
<translation>Archiv nicht gefunden</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="775"/>
+ <location filename="installationmanager.cpp" line="760"/>
<source>unsupported archive type</source>
<translation>Archivtyp wird nicht unterstützt</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="778"/>
+ <location filename="installationmanager.cpp" line="763"/>
<source>internal library error</source>
<translation>Interner Fehler in der Bibliothek</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="781"/>
+ <location filename="installationmanager.cpp" line="766"/>
<source>archive invalid</source>
<translation>Ungültiges Archiv</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="785"/>
+ <location filename="installationmanager.cpp" line="770"/>
<source>unknown archive error</source>
<translation>Unbekannter Fehler im Archiv</translation>
</message>
@@ -1290,7 +1395,7 @@ p, li { white-space: pre-wrap; }
<translation>MO ist gesperrt während das Programm ausgeführt wird.</translation>
</message>
<message>
- <location filename="lockeddialog.ui" line="51"/>
+ <location filename="lockeddialog.ui" line="54"/>
<source>Unlock</source>
<translation>Entsperren</translation>
</message>
@@ -1298,7 +1403,7 @@ p, li { white-space: pre-wrap; }
<context>
<name>LogBuffer</name>
<message>
- <location filename="logbuffer.cpp" line="72"/>
+ <location filename="logbuffer.cpp" line="73"/>
<source>failed to write log to %1: %2</source>
<translation>konnte Protokoll nicht nach %1 schreiben: %2</translation>
</message>
@@ -1306,12 +1411,12 @@ p, li { white-space: pre-wrap; }
<context>
<name>MOApplication</name>
<message>
- <location filename="moapplication.cpp" line="60"/>
+ <location filename="moapplication.cpp" line="68"/>
<source>an error occured: %1</source>
<translation type="unfinished">ein Fehler ist aufgetreten: %1</translation>
</message>
<message>
- <location filename="moapplication.cpp" line="65"/>
+ <location filename="moapplication.cpp" line="73"/>
<source>an error occured</source>
<translation type="unfinished">ein Fehler ist aufgetreten</translation>
</message>
@@ -1386,8 +1491,8 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="mainwindow.ui" line="405"/>
- <location filename="mainwindow.ui" line="722"/>
- <location filename="mainwindow.ui" line="1027"/>
+ <location filename="mainwindow.ui" line="724"/>
+ <location filename="mainwindow.ui" line="1046"/>
<source>Namefilter</source>
<translation type="unfinished"></translation>
</message>
@@ -1504,12 +1609,12 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">WICHTIG: Sie können die Ladereihenfolge der BSAs hier ändern aber die Installationsreihenfolge hat Vorrang vor der Reihenfolge hier!</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="751"/>
+ <location filename="mainwindow.ui" line="762"/>
<source>List of available BS Archives. Archives not checked here are not managed by MO and ignore installation order.</source>
<translation type="unfinished">Liste der BS Archive. Archive die hier nicht markiert sind werden nicht von MO verwaltet und beachten daher nicht die gewählte Installationsreihenfolge.</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="754"/>
+ <location filename="mainwindow.ui" line="765"/>
<source>BSA files are archives (comparable to .zip files) that contain data assets (meshes, textures, ...) to be used by the game. As such they &quot;compete&quot; with loose files in your data directory over which is loaded.
By default, BSAs that share their base name with an enabled ESP (i.e. plugin.esp and plugin.bsa) are automatically loaded and will have precedence over all loose files, the installation order you set up to the left is then ignored!
@@ -1517,67 +1622,81 @@ BSAs checked here are loaded in such a way that your installation order is obeye
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="794"/>
- <location filename="mainwindow.ui" line="868"/>
+ <location filename="mainwindow.ui" line="811"/>
+ <location filename="mainwindow.ui" line="880"/>
<source>File</source>
<translation type="unfinished">Datei</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="799"/>
- <location filename="mainwindow.ui" line="873"/>
+ <location filename="mainwindow.ui" line="819"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Marked Archives (&lt;img src=&quot;:/MO/gui/warning_16&quot;/&gt;) are still loaded on Skyrim but the &lt;a href=&quot;http://forums.bethsoft.com/topic/1354395-update-bsas-and-you/&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;regular file override&lt;/span&gt;&lt;/a&gt; mechanism will apply: Loose files override BSAs, no matter the mod/plugin priority.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.ui" line="885"/>
<source>Mod</source>
<translation type="unfinished">Mod</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="807"/>
- <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Marked Archives (&lt;img src=&quot;:/MO/gui/resources/dialog-warning_16.png&quot;/&gt;) are still loaded on Skyrim but the &lt;a href=&quot;http://forums.bethsoft.com/topic/1354395-update-bsas-and-you/&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;regular file override&lt;/span&gt;&lt;/a&gt; mechanism will apply: Loose files override BSAs, no matter the mod/plugin priority.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <location filename="mainwindow.ui" line="830"/>
+ <source>Data</source>
+ <translation type="unfinished">Data</translation>
+ </message>
+ <message>
+ <location filename="mainwindow.ui" line="605"/>
+ <source>Plugins</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="818"/>
- <source>Data</source>
- <translation type="unfinished">Data</translation>
+ <location filename="mainwindow.ui" line="731"/>
+ <source>Sort</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="836"/>
+ <location filename="mainwindow.ui" line="741"/>
+ <source>Archives</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.ui" line="848"/>
<source>refresh data-directory overview</source>
<translation type="unfinished">Data-Verzeichnis übersicht neu laden</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="839"/>
+ <location filename="mainwindow.ui" line="851"/>
<source>Refresh the overview. This may take a moment.</source>
<translation type="unfinished">Lädt die Übersicht neu. Dies kann einen Augenblick dauern.</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="842"/>
- <location filename="mainwindow.cpp" line="3328"/>
- <location filename="mainwindow.cpp" line="4059"/>
+ <location filename="mainwindow.ui" line="854"/>
+ <location filename="mainwindow.cpp" line="3781"/>
+ <location filename="mainwindow.cpp" line="4604"/>
<source>Refresh</source>
<translation type="unfinished">Neu laden</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="858"/>
+ <location filename="mainwindow.ui" line="870"/>
<source>This is an overview of your data directory as visible to the game (and tools). </source>
<translation type="unfinished">Dies ist eine Übersicht des &quot;data&quot;-verzeichnisses so wie es das Spiel zu sehen bekommt.</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="883"/>
- <location filename="mainwindow.ui" line="886"/>
+ <location filename="mainwindow.ui" line="895"/>
+ <location filename="mainwindow.ui" line="898"/>
<source>Filter the above list so that only conflicts are displayed.</source>
<translation type="unfinished">Obere Liste filtern um nur Konflikte anzuzeigen.</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="889"/>
+ <location filename="mainwindow.ui" line="901"/>
<source>Show only conflicts</source>
<translation type="unfinished">Nur Konflikte anzeigen</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="897"/>
+ <location filename="mainwindow.ui" line="909"/>
<source>Saves</source>
<translation type="unfinished">Spielstände</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="921"/>
+ <location filename="mainwindow.ui" line="933"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
@@ -1594,155 +1713,160 @@ p, li { white-space: pre-wrap; }
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Wenn Sie im Kontextmenü auf &amp;quot;Mods reparieren...&amp;quot; klicken, wird Mod Organiser versuchen die entsprechenden Mods und ESPs zu aktivieren. Es werden dabei kein Eintrag deaktiviert!&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="935"/>
+ <location filename="mainwindow.ui" line="947"/>
<source>Downloads</source>
<translation type="unfinished">Downloads</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="967"/>
+ <location filename="mainwindow.ui" line="979"/>
<source>This is a list of mods you downloaded from Nexus. Double click one to install it.</source>
<translation type="unfinished">Dies ist eine Liste der Mods die von Nexus heruntergeladen wurden. Doppelklicken Sie um zu installieren.</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1020"/>
+ <location filename="mainwindow.ui" line="1032"/>
<source>Compact</source>
<translation type="unfinished">Kompakt</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1051"/>
+ <location filename="mainwindow.ui" line="1039"/>
+ <source>Show Hidden</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.ui" line="1070"/>
<source>Tool Bar</source>
<translation type="unfinished">Werkzeugleiste</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1093"/>
+ <location filename="mainwindow.ui" line="1112"/>
<source>Install Mod</source>
<translation type="unfinished">Mod installieren</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1096"/>
+ <location filename="mainwindow.ui" line="1115"/>
<source>Install &amp;Mod</source>
<translation type="unfinished">&amp;Mod installieren</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1099"/>
+ <location filename="mainwindow.ui" line="1118"/>
<source>Install a new mod from an archive</source>
<translation type="unfinished">Installiert eine Mod aus einem Archiv</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1102"/>
+ <location filename="mainwindow.ui" line="1121"/>
<source>Ctrl+M</source>
<translation type="unfinished">Ctrl+M</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1111"/>
+ <location filename="mainwindow.ui" line="1130"/>
<source>Profiles</source>
<translation type="unfinished">Profile</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1114"/>
+ <location filename="mainwindow.ui" line="1133"/>
<source>&amp;Profiles</source>
<translation type="unfinished">&amp;Profile</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1117"/>
+ <location filename="mainwindow.ui" line="1136"/>
<source>Configure Profiles</source>
<translation type="unfinished">Profile konfigurieren</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1120"/>
+ <location filename="mainwindow.ui" line="1139"/>
<source>Ctrl+P</source>
<translation type="unfinished">Ctrl+P</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1129"/>
+ <location filename="mainwindow.ui" line="1148"/>
<source>Executables</source>
<translation type="unfinished">Programme</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1132"/>
+ <location filename="mainwindow.ui" line="1151"/>
<source>&amp;Executables</source>
<translation type="unfinished">Programm&amp;e</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1135"/>
+ <location filename="mainwindow.ui" line="1154"/>
<source>Configure the executables that can be started through Mod Organizer</source>
<translation type="unfinished">Konfigurieren der Programme die von Mod Organiser gestartet werden können</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1138"/>
+ <location filename="mainwindow.ui" line="1157"/>
<source>Ctrl+E</source>
<translation type="unfinished">Ctrl+E</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1147"/>
- <location filename="mainwindow.ui" line="1153"/>
+ <location filename="mainwindow.ui" line="1166"/>
+ <location filename="mainwindow.ui" line="1172"/>
<source>Tools</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1150"/>
+ <location filename="mainwindow.ui" line="1169"/>
<source>&amp;Tools</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1156"/>
+ <location filename="mainwindow.ui" line="1175"/>
<source>Ctrl+I</source>
<translation type="unfinished">Ctrl+I</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1165"/>
+ <location filename="mainwindow.ui" line="1184"/>
<source>Settings</source>
<translation type="unfinished">Einstellungen</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1168"/>
+ <location filename="mainwindow.ui" line="1187"/>
<source>&amp;Settings</source>
<translation type="unfinished">Ein&amp;stellungen</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1171"/>
+ <location filename="mainwindow.ui" line="1190"/>
<source>Configure settings and workarounds</source>
<translation type="unfinished">Einstellungen und Workarounds verwalten</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1174"/>
+ <location filename="mainwindow.ui" line="1193"/>
<source>Ctrl+S</source>
<translation type="unfinished">Ctrl+S</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1183"/>
+ <location filename="mainwindow.ui" line="1202"/>
<source>Nexus</source>
<translation type="unfinished">Nexus</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1186"/>
+ <location filename="mainwindow.ui" line="1205"/>
<source>Search nexus network for more mods</source>
<translation type="unfinished">Durchsuche die passende Seite des Nexus-Netzwerks nach weiteren Mods</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1189"/>
+ <location filename="mainwindow.ui" line="1208"/>
<source>Ctrl+N</source>
<translation type="unfinished">Ctrl+N</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1201"/>
- <location filename="mainwindow.cpp" line="4007"/>
+ <location filename="mainwindow.ui" line="1220"/>
+ <location filename="mainwindow.cpp" line="4545"/>
<source>Update</source>
<translation type="unfinished">Aktualisierung</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1204"/>
+ <location filename="mainwindow.ui" line="1223"/>
<source>Mod Organizer is up-to-date</source>
<translation type="unfinished">Mod Organizer ist auf dem neuesten Stand</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1216"/>
- <location filename="mainwindow.cpp" line="478"/>
+ <location filename="mainwindow.ui" line="1235"/>
+ <location filename="mainwindow.cpp" line="509"/>
<source>No Problems</source>
<translation type="unfinished">Keine Probleme</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1219"/>
+ <location filename="mainwindow.ui" line="1238"/>
<source>This button will be highlighted if MO discovered potential problems in your setup and provide tips on how to fix them.
!Work in progress!
@@ -1751,54 +1875,54 @@ Right now this has very limited functionality</source>
Diese Funktion ist noch in arbeit und ist sehr eingeschränkt.</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1231"/>
- <location filename="mainwindow.ui" line="1234"/>
+ <location filename="mainwindow.ui" line="1250"/>
+ <location filename="mainwindow.ui" line="1253"/>
<source>Help</source>
<translation type="unfinished">Hilfe</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1237"/>
+ <location filename="mainwindow.ui" line="1256"/>
<source>Ctrl+H</source>
<translation type="unfinished">Ctrl+H</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1246"/>
+ <location filename="mainwindow.ui" line="1265"/>
<source>Endorse MO</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1249"/>
- <location filename="mainwindow.cpp" line="4087"/>
+ <location filename="mainwindow.ui" line="1268"/>
+ <location filename="mainwindow.cpp" line="4633"/>
<source>Endorse Mod Organizer</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="204"/>
+ <location filename="mainwindow.cpp" line="223"/>
<source>Toolbar</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="205"/>
+ <location filename="mainwindow.cpp" line="224"/>
<source>Desktop</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="206"/>
+ <location filename="mainwindow.cpp" line="225"/>
<source>Start Menu</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="475"/>
+ <location filename="mainwindow.cpp" line="505"/>
<source>Problems</source>
<translation type="unfinished">Probleme</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="476"/>
+ <location filename="mainwindow.cpp" line="506"/>
<source>There are potential problems with your setup</source>
<translation type="unfinished">Es bestehen möglicherweise Probleme mit Ihrer Konfiguration</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="479"/>
+ <location filename="mainwindow.cpp" line="510"/>
<source>Everything seems to be in order</source>
<translation type="unfinished">Alles in bester Ordnung</translation>
</message>
@@ -1815,22 +1939,22 @@ Diese Funktion ist noch in arbeit und ist sehr eingeschränkt.</translation>
<translation type="obsolete">&lt;li&gt;dotNet ist nicht installiert oder veraltet. Dies wird benötigt um NCC nutzen zu können. Laden Sie die korrekte Version von &lt;a href=&quot;%1&quot;&gt;%1&lt;/a&gt; herunter&lt;/li&gt;</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="531"/>
+ <location filename="mainwindow.cpp" line="568"/>
<source>Help on UI</source>
<translation type="unfinished">Hilfe zur Oberfläche</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="535"/>
+ <location filename="mainwindow.cpp" line="572"/>
<source>Documentation Wiki</source>
<translation type="unfinished">Wiki Dokumentation</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="539"/>
+ <location filename="mainwindow.cpp" line="576"/>
<source>Report Issue</source>
<translation type="unfinished">Fehler melden</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="543"/>
+ <location filename="mainwindow.cpp" line="580"/>
<source>Tutorials</source>
<translation type="unfinished"></translation>
</message>
@@ -1839,374 +1963,426 @@ Diese Funktion ist noch in arbeit und ist sehr eingeschränkt.</translation>
<translation type="obsolete">Ladereihenfolge konnte nicht gespeichert werden</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="670"/>
+ <location filename="mainwindow.cpp" line="705"/>
<source>failed to save load order: %1</source>
<translation type="unfinished">Reihenfolge konnt nicht gespeichert werden: %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="600"/>
- <source>failed to save archives order, do you have write access to &quot;%1&quot;?</source>
+ <location filename="mainwindow.cpp" line="619"/>
+ <source>About</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="620"/>
+ <source>About Qt</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="687"/>
+ <location filename="mainwindow.cpp" line="717"/>
<source>Name</source>
<translation type="unfinished">Name</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="688"/>
+ <location filename="mainwindow.cpp" line="718"/>
<source>Please enter a name for the new profile</source>
<translation type="unfinished">Bitte geben Sie einen Namen für das neue Profil an</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="696"/>
+ <location filename="mainwindow.cpp" line="726"/>
<source>failed to create profile: %1</source>
<translation type="unfinished">Erstellen des Profils fehlgeschlagen: %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="739"/>
+ <location filename="mainwindow.cpp" line="769"/>
<source>Show tutorial?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="740"/>
+ <location filename="mainwindow.cpp" line="770"/>
<source>You are starting Mod Organizer for the first time. Do you want to show a tutorial of its basic features? If you choose no you can always start the tutorial from the &quot;Help&quot;-menu.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="769"/>
+ <location filename="mainwindow.cpp" line="801"/>
<source>Downloads in progress</source>
<translation type="unfinished">Download in Bearbeitung</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="770"/>
+ <location filename="mainwindow.cpp" line="802"/>
<source>There are still downloads in progress, do you really want to quit?</source>
<translation type="unfinished">Es gibt noch unfertige Downloads, wollen Sie wirklich das Programm beenden?</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="816"/>
+ <location filename="mainwindow.cpp" line="848"/>
<source>failed to read savegame: %1</source>
<translation type="unfinished">Spielstand konnte nicht gelesen werden: %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="941"/>
+ <location filename="mainwindow.cpp" line="972"/>
<source>Plugin &quot;%1&quot; failed: %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1183"/>
+ <location filename="mainwindow.cpp" line="1085"/>
+ <source>Plugin error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="1086"/>
+ <source>It appears the plugin &quot;%1&quot; failed to load last startup and caused MO to crash. Do you want to disable it?
+(Please note: If this is the first time you see this message for this plugin you may want to give it another try. The plugin may be able to recover from the problem)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="1270"/>
<source>Failed to start &quot;%1&quot;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1185"/>
+ <location filename="mainwindow.cpp" line="1272"/>
<source>Waiting</source>
<translation type="unfinished">Warte</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1185"/>
+ <location filename="mainwindow.cpp" line="1272"/>
<source>Please press OK once you&apos;re logged into steam.</source>
<translation type="unfinished">Bitte drücken sie OK sobald sie bei Steam angemeldet sind.</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1197"/>
<source>&quot;%1&quot; not found</source>
- <translation type="unfinished">&quot;%1&quot; nicht gefunden</translation>
+ <translation type="obsolete">&quot;%1&quot; nicht gefunden</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1211"/>
+ <location filename="mainwindow.cpp" line="1298"/>
<source>Start Steam?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1212"/>
+ <location filename="mainwindow.cpp" line="1299"/>
<source>Steam is required to be running already to correctly start the game. Should MO try to start steam now?</source>
<translation type="unfinished">Steam muss laufen um das Spiel korrekt zu starten. Soll MO versuchen Steam zu starten?</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1426"/>
+ <location filename="mainwindow.cpp" line="1526"/>
<source>Also in: &lt;br&gt;</source>
<translation type="unfinished">Auch in: &lt;br&gt;</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1437"/>
+ <location filename="mainwindow.cpp" line="1537"/>
<source>No conflict</source>
<translation type="unfinished">Keine Konflikte</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1552"/>
+ <location filename="mainwindow.cpp" line="1692"/>
<source>&lt;Edit...&gt;</source>
<translation type="unfinished">&lt;Bearbeiten...&gt;</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1771"/>
+ <location filename="mainwindow.cpp" line="1929"/>
<source>This bsa is enabled in the ini file so it may be required!</source>
<translation type="unfinished">Dieses Archiv ist in der ini Konfiguration gelistet, daher ist es möglicherweise erforderlich!</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1778"/>
+ <location filename="mainwindow.cpp" line="1936"/>
<source>This archive will still be loaded since there is a plugin of the same name but its files will not follow installation order!</source>
<translation type="unfinished">Dieses Archiv wird vom Spiel geladen werden da ein Plugin mit dem selben Namen aktiv ist aber die enthaltenen Dateien werden sich nicht an Ihre Installations-Reihenfolge halten!</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1833"/>
+ <location filename="mainwindow.cpp" line="1991"/>
<source>Activating Network Proxy</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1962"/>
- <location filename="mainwindow.cpp" line="3755"/>
+ <location filename="mainwindow.cpp" line="2122"/>
+ <location filename="mainwindow.cpp" line="4248"/>
<source>Installation successful</source>
<translation type="unfinished">Installation erfolgreich</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1973"/>
- <location filename="mainwindow.cpp" line="3768"/>
+ <location filename="mainwindow.cpp" line="2133"/>
+ <location filename="mainwindow.cpp" line="4261"/>
<source>Configure Mod</source>
<translation type="unfinished">Mod konfigurieren</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1974"/>
- <location filename="mainwindow.cpp" line="3769"/>
+ <location filename="mainwindow.cpp" line="2134"/>
+ <location filename="mainwindow.cpp" line="4262"/>
<source>This mod contains ini tweaks. Do you want to configure them now?</source>
<translation type="unfinished">Diese Mod enthält Anpassungen für die Ini datei. Wollen Sie diese nun konfigurieren?</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1980"/>
- <location filename="mainwindow.cpp" line="3775"/>
+ <location filename="mainwindow.cpp" line="2140"/>
+ <location filename="mainwindow.cpp" line="4268"/>
<source>mod &quot;%1&quot; not found</source>
<translation type="unfinished">mod &quot;%1&quot; nicht gefunden</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1983"/>
- <location filename="mainwindow.cpp" line="3781"/>
+ <location filename="mainwindow.cpp" line="2143"/>
+ <location filename="mainwindow.cpp" line="4274"/>
<source>Installation cancelled</source>
<translation type="unfinished">Installation abgebrochen</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1983"/>
- <location filename="mainwindow.cpp" line="3781"/>
+ <location filename="mainwindow.cpp" line="2143"/>
+ <location filename="mainwindow.cpp" line="4274"/>
<source>The mod was not installed completely.</source>
<translation type="unfinished">Die mod wurde nicht erfolgreich installiert.</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2018"/>
+ <location filename="mainwindow.cpp" line="2292"/>
<source>Some plugins could not be loaded</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2021"/>
- <location filename="mainwindow.cpp" line="2038"/>
+ <location filename="mainwindow.cpp" line="2295"/>
+ <source>Too many esps and esms enabled</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="2298"/>
+ <location filename="mainwindow.cpp" line="2319"/>
<source>Description missing</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2030"/>
- <source>The following Plugins could not be loaded. The reason may be missing dependencies (i.e. python) or an outdated version:&lt;ul&gt;</source>
+ <location filename="mainwindow.cpp" line="2315"/>
+ <source>The game doesn&apos;t allow more than 255 active plugins (including the official ones) to be loaded. You have to disable some unused plugins or merge some plugins into one. You can find a guide here: &lt;a href=&quot;http://wiki.step-project.com/Guide:Merging_Plugins&quot;&gt;http://wiki.step-project.com/Guide:Merging_Plugins&lt;/a&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2060"/>
+ <location filename="mainwindow.cpp" line="2341"/>
<source>Choose Mod</source>
<translation type="unfinished">Mod wählen</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2061"/>
+ <location filename="mainwindow.cpp" line="2342"/>
<source>Mod Archive</source>
<translation type="unfinished">Mod Archiv</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2214"/>
+ <location filename="mainwindow.cpp" line="2495"/>
<source>Start Tutorial?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2215"/>
+ <location filename="mainwindow.cpp" line="2496"/>
<source>You&apos;re about to start a tutorial. For technical reasons it&apos;s not possible to end the tutorial early. Continue?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2360"/>
- <location filename="mainwindow.cpp" line="3683"/>
+ <location filename="mainwindow.cpp" line="2651"/>
+ <location filename="mainwindow.cpp" line="4171"/>
<source>Download started</source>
<translation type="unfinished">Download gestartet</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2391"/>
+ <location filename="mainwindow.cpp" line="2682"/>
<source>failed to update mod list: %1</source>
<translation type="unfinished">Aktualisieren der Modliste fehlgeschlagen: %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2418"/>
+ <location filename="mainwindow.cpp" line="2711"/>
<source>failed to spawn notepad.exe: %1</source>
<translation type="unfinished">notepad.exe konnte nicht aufgerufen werden: %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2459"/>
+ <location filename="mainwindow.cpp" line="2752"/>
<source>failed to open %1</source>
<translation type="unfinished">%1 konnte nicht geöffnet werden</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2537"/>
+ <location filename="mainwindow.cpp" line="2830"/>
<source>failed to change origin name: %1</source>
<translation type="unfinished">konnte den Namen der Dateiquelle nicht ändern: %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2676"/>
+ <location filename="mainwindow.cpp" line="2860"/>
+ <source>failed to move &quot;%1&quot; from mod &quot;%2&quot; to &quot;%3&quot;: %4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="2997"/>
<source>Multiple esps activated, please check that they don&apos;t conflict.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3005"/>
- <location filename="mainwindow.cpp" line="3339"/>
+ <location filename="mainwindow.cpp" line="3345"/>
+ <location filename="mainwindow.cpp" line="3792"/>
<source>Create Mod...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3006"/>
- <source>This will move all files from overwrite into a new, regular mod.
-Please enter a name: </source>
+ <location filename="mainwindow.cpp" line="3355"/>
+ <source>A mod with this name already exists</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3015"/>
- <source>A mod with this name already exists</source>
+ <location filename="mainwindow.cpp" line="3613"/>
+ <source>Continue?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3410"/>
+ <location filename="mainwindow.cpp" line="3614"/>
+ <source>The versioning scheme decides which version is considered newer than another.
+This function will guess the versioning scheme under the assumption that the installed version is outdated.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="3634"/>
+ <location filename="mainwindow.cpp" line="4516"/>
+ <source>Sorry</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="3635"/>
+ <source>I don&apos;t know a versioning scheme where %1 is newer than %2.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="3883"/>
<source>&lt;All&gt;</source>
<translation type="unfinished">&lt;Alle&gt;</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2589"/>
+ <location filename="mainwindow.cpp" line="2909"/>
<source>&lt;Checked&gt;</source>
<translation type="unfinished">&lt;Markierte&gt;</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="943"/>
+ <location filename="mainwindow.cpp" line="974"/>
<source>Plugin &quot;%1&quot; failed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1007"/>
+ <location filename="mainwindow.cpp" line="1047"/>
<source>failed to init plugin %1: %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2590"/>
+ <location filename="mainwindow.cpp" line="2307"/>
+ <source>The following plugins could not be loaded. The reason may be missing dependencies (i.e. python) or an outdated version:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="2910"/>
<source>&lt;Unchecked&gt;</source>
<translation type="unfinished">&lt;Nicht markierte&gt;</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2591"/>
+ <location filename="mainwindow.cpp" line="2911"/>
<source>&lt;Update&gt;</source>
<translation type="unfinished">&lt;Update&gt;</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2592"/>
+ <location filename="mainwindow.cpp" line="2912"/>
<source>&lt;No category&gt;</source>
<translation type="unfinished">&lt;Ohne Kategorie&gt;</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2593"/>
+ <location filename="mainwindow.cpp" line="2913"/>
<source>&lt;Conflicted&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2626"/>
+ <location filename="mainwindow.cpp" line="2914"/>
+ <source>&lt;Not Endorsed&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="2947"/>
<source>failed to rename mod: %1</source>
<translation type="unfinished">konnte die Mod nicht umbenennen: %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2639"/>
+ <location filename="mainwindow.cpp" line="2960"/>
<source>Overwrite?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2640"/>
+ <location filename="mainwindow.cpp" line="2961"/>
<source>This will replace the existing mod &quot;%1&quot;. Continue?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2643"/>
+ <location filename="mainwindow.cpp" line="2964"/>
<source>failed to remove mod &quot;%1&quot;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2647"/>
- <location filename="mainwindow.cpp" line="3953"/>
- <location filename="mainwindow.cpp" line="3977"/>
+ <location filename="mainwindow.cpp" line="2968"/>
+ <location filename="mainwindow.cpp" line="4446"/>
+ <location filename="mainwindow.cpp" line="4470"/>
<source>failed to rename &quot;%1&quot; to &quot;%2&quot;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2702"/>
- <location filename="mainwindow.cpp" line="3243"/>
- <location filename="mainwindow.cpp" line="3252"/>
+ <location filename="mainwindow.cpp" line="3024"/>
+ <location filename="mainwindow.cpp" line="3687"/>
+ <location filename="mainwindow.cpp" line="3695"/>
+ <location filename="mainwindow.cpp" line="3902"/>
<source>Confirm</source>
<translation type="unfinished">Bestätigen</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2703"/>
+ <location filename="mainwindow.cpp" line="3025"/>
<source>Remove the following mods?&lt;br&gt;&lt;ul&gt;%1&lt;/ul&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2714"/>
+ <location filename="mainwindow.cpp" line="3036"/>
<source>failed to remove mod: %1</source>
<translation type="unfinished">konnte die mod nicht entfernen: %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2744"/>
- <location filename="mainwindow.cpp" line="2747"/>
+ <location filename="mainwindow.cpp" line="3071"/>
+ <location filename="mainwindow.cpp" line="3074"/>
<source>Failed</source>
<translation type="unfinished">Fehlgeschlagen</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2744"/>
+ <location filename="mainwindow.cpp" line="3071"/>
<source>Installation file no longer exists</source>
<translation type="unfinished">Installationsdatei existiert nicht mehr</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2748"/>
+ <location filename="mainwindow.cpp" line="3075"/>
<source>Mods installed with old versions of MO can&apos;t be reinstalled in this way.</source>
<translation type="unfinished">Mods die mit alten Versionen von MO installiert wurden können nicht auf diese Weise neu-installiert werden.</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2763"/>
- <location filename="mainwindow.cpp" line="2790"/>
+ <location filename="mainwindow.cpp" line="3090"/>
+ <location filename="mainwindow.cpp" line="3117"/>
<source>You need to be logged in with Nexus to endorse</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2906"/>
- <location filename="mainwindow.cpp" line="4335"/>
+ <location filename="mainwindow.cpp" line="3249"/>
+ <location filename="mainwindow.cpp" line="4882"/>
<source>Extract BSA</source>
<translation type="unfinished">BSA extrahieren</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2907"/>
+ <location filename="mainwindow.cpp" line="3250"/>
<source>This mod contains at least one BSA. Do you want to unpack it?
(This removes the BSA after completion. If you don&apos;t know about BSAs, just select no)</source>
<translation type="unfinished">Diese mod enthält mindestens eine BSA datei. Soll sie entpackt werden?
(Das BSA wird danach gelöscht. Wenn Sie nicht wissen was BSAs sind wählen Sie am besten \&quot;nein\&quot;)</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2917"/>
- <location filename="mainwindow.cpp" line="4292"/>
- <location filename="mainwindow.cpp" line="4343"/>
+ <location filename="mainwindow.cpp" line="3259"/>
+ <location filename="mainwindow.cpp" line="4839"/>
+ <location filename="mainwindow.cpp" line="4890"/>
<source>failed to read %1: %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2930"/>
- <location filename="mainwindow.cpp" line="4354"/>
+ <location filename="mainwindow.cpp" line="3272"/>
+ <location filename="mainwindow.cpp" line="4901"/>
<source>This archive contains invalid hashes. Some files may be broken.</source>
<translation type="unfinished">Dieses Archiv enthält ungültige Prüfsummen. Einige Dateien sind evtl. defekt.</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2964"/>
+ <location filename="mainwindow.cpp" line="3306"/>
<source>Nexus ID for this Mod is unknown</source>
<translation type="unfinished">Nexus ID für diese Mod unbekannt</translation>
</message>
@@ -2219,371 +2395,456 @@ Please enter a name: </source>
<translation type="obsolete">Priorität wählen</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3243"/>
+ <location filename="mainwindow.cpp" line="3687"/>
<source>Really enable all visible mods?</source>
<translation type="unfinished">Alle angezeigten Mods aktivieren?</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3252"/>
+ <location filename="mainwindow.cpp" line="3695"/>
<source>Really disable all visible mods?</source>
<translation type="unfinished">Alle angezeigten Mods deaktivieren?</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3261"/>
+ <location filename="mainwindow.cpp" line="3703"/>
<source>Choose what to export</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3263"/>
+ <location filename="mainwindow.cpp" line="3705"/>
<source>Everything</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3263"/>
+ <location filename="mainwindow.cpp" line="3705"/>
<source>All installed mods are included in the list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3264"/>
+ <location filename="mainwindow.cpp" line="3706"/>
<source>Active Mods</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3264"/>
+ <location filename="mainwindow.cpp" line="3706"/>
<source>Only active (checked) mods from your current profile are included</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3265"/>
+ <location filename="mainwindow.cpp" line="3707"/>
<source>Visible</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3265"/>
+ <location filename="mainwindow.cpp" line="3707"/>
<source>All mods visible in the mod list are included</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3308"/>
+ <location filename="mainwindow.cpp" line="3750"/>
<source>export failed: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3321"/>
+ <location filename="mainwindow.cpp" line="3774"/>
<source>Install Mod...</source>
<translation type="unfinished">Mod installieren...</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3323"/>
+ <location filename="mainwindow.cpp" line="3776"/>
<source>Enable all visible</source>
<translation type="unfinished">Alle sichtbaren aktvieren</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3324"/>
+ <location filename="mainwindow.cpp" line="3777"/>
<source>Disable all visible</source>
<translation type="unfinished">Alle sichtbaren deaktvieren</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3326"/>
+ <location filename="mainwindow.cpp" line="3779"/>
<source>Check all for update</source>
<translation type="unfinished">Alle auf Aktualisierungen überprüfen</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3330"/>
+ <location filename="mainwindow.cpp" line="3783"/>
<source>Export to csv...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3338"/>
+ <location filename="mainwindow.cpp" line="3791"/>
<source>Sync to Mods...</source>
<translation type="unfinished">Mods synchronisieren...</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3342"/>
+ <location filename="mainwindow.cpp" line="3795"/>
<source>Restore Backup</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3343"/>
+ <location filename="mainwindow.cpp" line="3796"/>
<source>Remove Backup...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3345"/>
<source>Set Category</source>
- <translation type="unfinished">Kategorie festlegen</translation>
+ <translation type="obsolete">Kategorie festlegen</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3349"/>
+ <location filename="mainwindow.cpp" line="3808"/>
<source>Primary Category</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3353"/>
+ <location filename="mainwindow.cpp" line="3815"/>
+ <source>Change versioning scheme</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="3819"/>
+ <source>Un-ignore update</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="3821"/>
+ <source>Ignore update</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="3826"/>
<source>Rename Mod...</source>
<translation type="unfinished">Mod umbenennen...</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3354"/>
+ <location filename="mainwindow.cpp" line="3827"/>
<source>Remove Mod...</source>
<translation type="unfinished">Mod entfernen...</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3355"/>
+ <location filename="mainwindow.cpp" line="3828"/>
<source>Reinstall Mod</source>
<translation type="unfinished">Mod neu installieren</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3358"/>
+ <location filename="mainwindow.cpp" line="3831"/>
<source>Un-Endorse</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3361"/>
- <location filename="mainwindow.cpp" line="3365"/>
+ <location filename="mainwindow.cpp" line="3834"/>
+ <location filename="mainwindow.cpp" line="3838"/>
<source>Endorse</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3362"/>
+ <location filename="mainwindow.cpp" line="3835"/>
<source>Won&apos;t endorse</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3368"/>
+ <location filename="mainwindow.cpp" line="3841"/>
<source>Endorsement state unknown</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3375"/>
+ <location filename="mainwindow.cpp" line="3848"/>
<source>Ignore missing data</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3378"/>
+ <location filename="mainwindow.cpp" line="3851"/>
<source>Visit on Nexus</source>
<translation type="unfinished">Auf Nexus besuchen</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3379"/>
+ <location filename="mainwindow.cpp" line="3852"/>
<source>Open in explorer</source>
<translation type="unfinished">In Explorer öffnen</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3382"/>
+ <location filename="mainwindow.cpp" line="3855"/>
<source>Information...</source>
<translation type="unfinished">Informationen...</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3388"/>
- <location filename="mainwindow.cpp" line="4514"/>
+ <location filename="mainwindow.cpp" line="3861"/>
+ <location filename="mainwindow.cpp" line="5086"/>
<source>Exception: </source>
<translation type="unfinished">Ausnahme:</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3390"/>
- <location filename="mainwindow.cpp" line="4516"/>
+ <location filename="mainwindow.cpp" line="3863"/>
+ <location filename="mainwindow.cpp" line="5088"/>
<source>Unknown exception</source>
<translation type="unfinished">Unbekannte Ausnahme</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3412"/>
+ <location filename="mainwindow.cpp" line="3885"/>
<source>&lt;Multiple&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3524"/>
+ <location filename="mainwindow.cpp" line="3902"/>
+ <source>Really delete &quot;%1&quot;?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="4013"/>
<source>Fix Mods...</source>
<translation type="unfinished">Mods reparieren...</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3548"/>
- <location filename="mainwindow.cpp" line="3579"/>
+ <location filename="mainwindow.cpp" line="4014"/>
+ <source>Delete</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="4038"/>
+ <location filename="mainwindow.cpp" line="4069"/>
<source>failed to remove %1</source>
<translation type="unfinished">%1 konnte nicht entfernt werden</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3563"/>
- <location filename="mainwindow.cpp" line="3594"/>
+ <location filename="mainwindow.cpp" line="4053"/>
+ <location filename="mainwindow.cpp" line="4084"/>
<source>failed to create %1</source>
<translation type="unfinished">%1 konnte nicht erstellt werden</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3615"/>
+ <location filename="mainwindow.cpp" line="4107"/>
<source>Can&apos;t change download directory while downloads are in progress!</source>
<translation type="unfinished">Das download verzeichnis kann nicht geändert werden solange Downloads laufen!</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3686"/>
+ <location filename="mainwindow.cpp" line="4174"/>
<source>Download failed</source>
<translation type="unfinished">Download fehlgeschlagen</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3830"/>
+ <location filename="mainwindow.cpp" line="4323"/>
<source>failed to write to file %1</source>
<translation type="unfinished">Speichern in Datei &quot;%1&quot; fehlgeschlagen</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3836"/>
+ <location filename="mainwindow.cpp" line="4329"/>
<source>%1 written</source>
<translation type="unfinished">&quot;%1&quot; gespeichert</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3875"/>
+ <location filename="mainwindow.cpp" line="4368"/>
<source>Select binary</source>
<translation type="unfinished">Binary wählen</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3875"/>
+ <location filename="mainwindow.cpp" line="4368"/>
<source>Binary</source>
<translation type="unfinished">Ausführbare Datei</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3901"/>
+ <location filename="mainwindow.cpp" line="4394"/>
<source>Enter Name</source>
<translation type="unfinished">Namen eingeben</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3902"/>
+ <location filename="mainwindow.cpp" line="4395"/>
<source>Please enter a name for the executable</source>
<translation type="unfinished">Bitte geben Sie einen Namen für die Anwendungsdatei ein</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3913"/>
+ <location filename="mainwindow.cpp" line="4406"/>
<source>Not an executable</source>
<translation type="unfinished">Datei ist nicht ausführbar</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3913"/>
+ <location filename="mainwindow.cpp" line="4406"/>
<source>This is not a recognized executable.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3938"/>
- <location filename="mainwindow.cpp" line="3963"/>
+ <location filename="mainwindow.cpp" line="4431"/>
+ <location filename="mainwindow.cpp" line="4456"/>
<source>Replace file?</source>
<translation type="unfinished">Datei ersetzen?</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3938"/>
+ <location filename="mainwindow.cpp" line="4431"/>
<source>There already is a hidden version of this file. Replace it?</source>
<translation type="unfinished">Es existiert bereits eine versteckte Variante von dieser Datei. Soll diese ersetzt werden?</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3941"/>
- <location filename="mainwindow.cpp" line="3966"/>
+ <location filename="mainwindow.cpp" line="4434"/>
+ <location filename="mainwindow.cpp" line="4459"/>
<source>File operation failed</source>
<translation type="unfinished">Dateioperation fehlgeschlagen</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3941"/>
- <location filename="mainwindow.cpp" line="3966"/>
+ <location filename="mainwindow.cpp" line="4434"/>
+ <location filename="mainwindow.cpp" line="4459"/>
<source>Failed to remove &quot;%1&quot;. Maybe you lack the required file permissions?</source>
<translation type="unfinished">Konnte &quot;%1&quot; nicht löschen. Fehlen Ihnen evtl. die nötigen Berechtigungen?</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3963"/>
+ <location filename="mainwindow.cpp" line="4456"/>
<source>There already is a visible version of this file. Replace it?</source>
<translation type="unfinished">Es existiert bereits eine sichtbare Variante dieser Datei. Soll diese ersetzt werden?</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4009"/>
+ <location filename="mainwindow.cpp" line="4489"/>
+ <source>file not found: %1</source>
+ <translation type="unfinished">Datei nicht gefunden: %1</translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="4502"/>
+ <source>failed to generate preview for %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="4516"/>
+ <source>Sorry, can&apos;t preview anything. This function currently does not support extracting from bsas.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="4547"/>
<source>Update available</source>
<translation type="unfinished">Aktualisierung verfügbar</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4046"/>
+ <location filename="mainwindow.cpp" line="4584"/>
<source>Open/Execute</source>
<translation type="unfinished">Öffnen/Ausführen</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4047"/>
+ <location filename="mainwindow.cpp" line="4585"/>
<source>Add as Executable</source>
<translation type="unfinished">Als Anwendung hinzufügen</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4051"/>
+ <location filename="mainwindow.cpp" line="4589"/>
+ <source>Preview</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="4595"/>
<source>Un-Hide</source>
<translation type="unfinished">Sichtbar machen</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4053"/>
+ <location filename="mainwindow.cpp" line="4597"/>
<source>Hide</source>
<translation type="unfinished">Verstecken</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4058"/>
+ <location filename="mainwindow.cpp" line="4603"/>
<source>Write To File...</source>
<translation type="unfinished">In Datei speichern...</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4088"/>
+ <location filename="mainwindow.cpp" line="4634"/>
<source>Do you want to endorse Mod Organizer on %1 now?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4505"/>
+ <location filename="mainwindow.cpp" line="5047"/>
+ <source>Remove</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="5077"/>
<source>Unlock load order</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4508"/>
+ <location filename="mainwindow.cpp" line="5080"/>
<source>Lock load order</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4223"/>
+ <location filename="mainwindow.cpp" line="5149"/>
+ <source>BOSS working</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="5157"/>
+ <source>failed to run boss: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="4770"/>
<source>Request to Nexus failed: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4230"/>
- <location filename="mainwindow.cpp" line="4247"/>
+ <location filename="mainwindow.cpp" line="1284"/>
+ <source>Executable &quot;%1&quot; not found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="1789"/>
+ <source>Failed to refresh list of esps: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="3346"/>
+ <source>This will move all files from overwrite into a new, regular mod.
+Please enter a name:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="3798"/>
+ <source>Add/Remove Categories</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="3803"/>
+ <source>Replace Categories</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="4777"/>
+ <location filename="mainwindow.cpp" line="4794"/>
<source>login successful</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4256"/>
+ <location filename="mainwindow.cpp" line="4803"/>
<source>login failed: %1. Trying to download anyway</source>
<translation type="unfinished">login fehlgeschlagen: %1. Der Download scheitert vermutlich</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4262"/>
+ <location filename="mainwindow.cpp" line="4809"/>
<source>login failed: %1</source>
<translation type="unfinished">login fehlgeschlagen: %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4271"/>
+ <location filename="mainwindow.cpp" line="4818"/>
<source>login failed: %1. You need to log-in with Nexus to update MO.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4304"/>
+ <location filename="mainwindow.cpp" line="4851"/>
<source>Error</source>
<translation type="unfinished">Fehler</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4304"/>
+ <location filename="mainwindow.cpp" line="4851"/>
<source>failed to extract %1 (errorcode %2)</source>
<translation type="unfinished">konnte &quot;%1&quot; nicht extrahieren (fehlercode %2)</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4399"/>
+ <location filename="mainwindow.cpp" line="4946"/>
<source>Extract...</source>
<translation type="unfinished">Extrahieren...</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4449"/>
+ <location filename="mainwindow.cpp" line="5002"/>
<source>Edit Categories...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4485"/>
+ <location filename="mainwindow.cpp" line="5057"/>
<source>Enable all</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4486"/>
+ <location filename="mainwindow.cpp" line="5058"/>
<source>Disable all</source>
<translation type="unfinished"></translation>
</message>
@@ -2613,7 +2874,7 @@ Please enter a name: </source>
<context>
<name>ModInfoBackup</name>
<message>
- <location filename="modinfo.cpp" line="784"/>
+ <location filename="modinfo.cpp" line="820"/>
<source>This is the backup of a mod</source>
<translation type="unfinished"></translation>
</message>
@@ -2626,87 +2887,85 @@ Please enter a name: </source>
<translation>Mod Informationen</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="27"/>
+ <location filename="modinfodialog.ui" line="30"/>
<source>Textfiles</source>
<translation>Textdateien</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="39"/>
+ <location filename="modinfodialog.ui" line="42"/>
<source>A list of text-files in the mod directory.</source>
<translation>Liste mit Textdateien im Modverzeichnis.</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="42"/>
+ <location filename="modinfodialog.ui" line="45"/>
<source>A list of text-files in the mod directory like readmes. </source>
<translation>Eine Liste mit Textdateien im Modverzeichnis, z.B. Readme.</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="74"/>
+ <location filename="modinfodialog.ui" line="77"/>
<source>INI-Files</source>
<translation>INI Dateien</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="94"/>
+ <location filename="modinfodialog.ui" line="97"/>
<source>This is a list of .ini files in the mod.</source>
<translation>Liste mit .ini Dateien im Mod.</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="97"/>
+ <location filename="modinfodialog.ui" line="100"/>
<source>This is a list of .ini files in the mod. These are usually used to configure the behaviour of mods if there are configurable parameters.</source>
<translation>Eine Liste mit Textdateien im Modverzeichnis. Die Dateien werden üblicherweise dazu verwendet um das Verhalten und Parameter der mods zu konfigurieren.</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="143"/>
+ <location filename="modinfodialog.ui" line="149"/>
<source>Save changes to the file.</source>
<translation>Änderungen an der Datei speichern.</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="146"/>
+ <location filename="modinfodialog.ui" line="152"/>
<source>Save changes to the file. This overwrites the original. There is no automatic backup!</source>
<translation>Änderungen der Datei speichern. Dies überschreibt das Original - es gibt keine automatische Sicherung!</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="64"/>
- <location filename="modinfodialog.ui" line="149"/>
+ <location filename="modinfodialog.ui" line="67"/>
+ <location filename="modinfodialog.ui" line="155"/>
<source>Save</source>
<translation>Speichern</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="159"/>
+ <location filename="modinfodialog.ui" line="165"/>
<source>Images</source>
<translation>Bilder</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="214"/>
+ <location filename="modinfodialog.ui" line="220"/>
<source>Images located in the mod.</source>
<translation>Bilder im Modverzeichnis.</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="217"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;This lists all the images (.jpg and .png) in the mod directory, like screenshots and such. Click one to get a larger view.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <translation>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+ <translation type="obsolete">&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Listet alle Bilder (*.jpg, *.png) im Modverzeichnis auf, bspw. Screenshots. Klicken für eine größere Ansicht.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="254"/>
- <location filename="modinfodialog.ui" line="277"/>
+ <location filename="modinfodialog.ui" line="256"/>
+ <location filename="modinfodialog.ui" line="275"/>
<source>Optional ESPs</source>
<translation>Optionale ESPs</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="260"/>
+ <location filename="modinfodialog.ui" line="262"/>
<source>List of esps and esms that can not be loaded by the game.</source>
<translation>Liste mit ESP und ESM Dateien die vom Spiel nicht geladen werden können.</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="263"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
@@ -2715,7 +2974,7 @@ p, li { white-space: pre-wrap; }
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;They usually contain optional functionality, see the readme.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;&quot;&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Most mods do not have optional esps, so chances are good you are looking at an empty list.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <translation>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+ <translation type="obsolete">&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
@@ -2725,103 +2984,116 @@ p, li { white-space: pre-wrap; }
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Die meisten Mods haben keine optionalen ESPs, wahrscheinlich sehen Sie also eine leere Liste vor sich..&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="292"/>
+ <location filename="modinfodialog.ui" line="223"/>
+ <source>This lists all the images (.jpg and .png) in the mod directory, like screenshots and such. Click one to get a larger view.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="modinfodialog.ui" line="265"/>
+ <source>List of esps and esms contained in this plugin that currently can not be loaded by the game. They will not even appear in the esp-list in the main MO-window.
+They usually contain optional functionality, see the readme.
+
+Most mods do not have optional esps, so chances are good you are looking at an empty list.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="modinfodialog.ui" line="290"/>
<source>Make the selected mod in the lower list unavailable.</source>
<translation>Den unten ausgewählten Mod als nicht verfügbar markieren.</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="295"/>
+ <location filename="modinfodialog.ui" line="293"/>
<source>The selected esp (in the lower list) will be pushed into a subdirectory of the mod and will thus become &quot;invisible&quot; to the game. It can then no longer be activated.</source>
<translation>Die in der unteren Liste ausgewählte ESP wird in ein Unterverzeichnis des Mods verschoben und so für das Spiel unsichtbar. Sie kann nicht mehr im Spiel aktiviert werden.</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="321"/>
+ <location filename="modinfodialog.ui" line="319"/>
<source>Move a file to the data directory.</source>
<translation>Datei in das Datenverzeichnis verschieben.</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="324"/>
+ <location filename="modinfodialog.ui" line="322"/>
<source>This moves a esp to the esp directory so it can be enabled in the main window. Please note that the ESP merely becomes &quot;available&quot;, it will not necessarily be loaded! That is configured in the main window of omo.</source>
<translation>Verschiebt ein ESP in das ESP Verzeichnis damit es im Hauptfenster aktiviert werden kann. Bitte beachten Sie, dass das ESP nur &quot;verfügbar&quot; wird, es wird nicht zwangsläufig geladen! Das Laden der ESP wird im Hauptfenster von MO eingestellt.</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="359"/>
+ <location filename="modinfodialog.ui" line="357"/>
<source>ESPs in the data directory and thus visible to the game.</source>
<translation>ESPs im Datenverzeichnis und für das Spiel sichtbar.</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="362"/>
+ <location filename="modinfodialog.ui" line="360"/>
<source>These are the mod files that are in the (virtual) data directory of your game and will thus be selecteable in the esp list in the main window.</source>
<translation>Dies Mod Dateien sind im (virtuellen) Datenverzeichnis des Spiels und somit in der ESP Liste des Hauptfenster auswählbar.</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="369"/>
+ <location filename="modinfodialog.ui" line="367"/>
<source>Available ESPs</source>
<translation>Verfügbare ESPs</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="377"/>
+ <location filename="modinfodialog.ui" line="375"/>
<source>Conflicts</source>
<translation>Konflikte</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="385"/>
+ <location filename="modinfodialog.ui" line="383"/>
<source>The following conflicted files are provided by this mod</source>
<translation>Die folgenden konfliktbehafteten Dateien werden von dieser Mod bereitgestellt</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="432"/>
- <location filename="modinfodialog.ui" line="479"/>
+ <location filename="modinfodialog.ui" line="433"/>
+ <location filename="modinfodialog.ui" line="483"/>
<source>File</source>
<translation>Datei</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="437"/>
+ <location filename="modinfodialog.ui" line="438"/>
<source>Overwritten Mods</source>
<translation>Überschriebene Mods</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="447"/>
+ <location filename="modinfodialog.ui" line="448"/>
<source>The following conflicted files are provided by other mods</source>
<translation>Die folgenden konfliktbehafteten Dateien werden von anderen Mods bereitgestellt</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="484"/>
+ <location filename="modinfodialog.ui" line="488"/>
<source>Providing Mod</source>
<translation>Bereitstellende Mod</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="494"/>
+ <location filename="modinfodialog.ui" line="498"/>
<source>Non-Conflicted files</source>
<translation>Konfliktfreie Dateien</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="514"/>
+ <location filename="modinfodialog.ui" line="518"/>
<source>Categories</source>
<translation>Kategorien</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="537"/>
+ <location filename="modinfodialog.ui" line="541"/>
<source>Primary Category</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="554"/>
+ <location filename="modinfodialog.ui" line="558"/>
<source>Nexus Info</source>
<translation>Nexus Info</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="562"/>
+ <location filename="modinfodialog.ui" line="566"/>
<source>Mod ID</source>
<translation>Mod ID</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="569"/>
+ <location filename="modinfodialog.ui" line="573"/>
<source>Mod ID for this mod on Nexus.</source>
<translation>ID dieser mod auf Nexus.</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="572"/>
+ <location filename="modinfodialog.ui" line="576"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
@@ -2839,7 +3111,7 @@ p, li { white-space: pre-wrap; }
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;ModID für den Mod auf Nexus. Um die korrekte Id zu finden, einfach den Mod auf Nexus aufrufen. Die URL sieht so aus:&lt;a href=&quot; http://www.skyrimnexus.com/downloads/file.php?id=1334&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;http://www.skyrimnexus.com/downloads/file.php?id=1334&lt;/span&gt;&lt;/a&gt;&lt;a href=&quot;http://www.skyrimnexus.com/downloads/file.php?id=1334&quot;&gt;&lt;span style=&quot; color:#000000;&quot;&gt;. In diesem Beispiel ist 1334 die gesuchte Id. Zufällig ist das genau der Link zu Mod Organiser im Nexus. Warum nicht einfach mal anklicken und ein Endorsement hinzufügen?&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="596"/>
+ <location filename="modinfodialog.ui" line="600"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
@@ -2852,32 +3124,31 @@ p, li { white-space: pre-wrap; }
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Installierte Version des Mods. Der Tooltip zeigt die auf Nexus verfügbare Version. Die installierte Versionsnummer kann nur angezeigt werden wenn der Mod durch MO installiert wurde.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="603"/>
+ <location filename="modinfodialog.ui" line="607"/>
<source>Version</source>
<translation>Version</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="633"/>
+ <location filename="modinfodialog.ui" line="637"/>
<source>Refresh</source>
<translation type="unfinished">Neu laden</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="636"/>
+ <location filename="modinfodialog.ui" line="640"/>
<source>Refresh all information from Nexus.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="650"/>
+ <location filename="modinfodialog.ui" line="654"/>
<source>Description</source>
<translation>Beschreibung</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="665"/>
+ <location filename="modinfodialog.ui" line="669"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
-&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
@@ -2886,12 +3157,12 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">about:blank</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="701"/>
+ <location filename="modinfodialog.ui" line="704"/>
<source>Endorse</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="715"/>
+ <location filename="modinfodialog.ui" line="718"/>
<source>Notes</source>
<translation type="unfinished"></translation>
</message>
@@ -2912,8 +3183,9 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">Typ</translation>
</message>
<message>
+ <location filename="modinfodialog.cpp" line="1221"/>
<source>Name</source>
- <translation type="obsolete">Name</translation>
+ <translation type="unfinished">Name</translation>
</message>
<message>
<source>Size (kB)</source>
@@ -2932,17 +3204,17 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">Schon ein &quot;endorsement&quot; vergeben?</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="725"/>
+ <location filename="modinfodialog.ui" line="728"/>
<source>Filetree</source>
<translation>Verzeichnisbaum</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="734"/>
+ <location filename="modinfodialog.ui" line="737"/>
<source>A directory view of this mod</source>
<translation>Verzeichnisansicht des Mods</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="737"/>
+ <location filename="modinfodialog.ui" line="740"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
@@ -2957,53 +3229,53 @@ p, li { white-space: pre-wrap; }
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Veränderungen werden sofort auf der Platte ausgeführt, also&lt;/span&gt;&lt;span style=&quot; font-size:8pt; font-weight:600;&quot;&gt; vorsichtig sein!&lt;/span&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="764"/>
+ <location filename="modinfodialog.ui" line="767"/>
<source>Previous</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="771"/>
+ <location filename="modinfodialog.ui" line="774"/>
<source>Next</source>
<translation type="unfinished">Weiter</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="791"/>
+ <location filename="modinfodialog.ui" line="794"/>
<source>Close</source>
<translation>Schliessen</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="108"/>
+ <location filename="modinfodialog.cpp" line="104"/>
<source>&amp;Delete</source>
<translation>&amp;Löschen</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="109"/>
+ <location filename="modinfodialog.cpp" line="105"/>
<source>&amp;Rename</source>
<translation>&amp;Umbenennen</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="110"/>
+ <location filename="modinfodialog.cpp" line="106"/>
<source>&amp;Hide</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="111"/>
+ <location filename="modinfodialog.cpp" line="107"/>
<source>&amp;Unhide</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="112"/>
+ <location filename="modinfodialog.cpp" line="108"/>
<source>&amp;Open</source>
<translation>&amp;Öffnen</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="113"/>
+ <location filename="modinfodialog.cpp" line="109"/>
<source>&amp;New Folder</source>
<translation>&amp;Neuer Ordner</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="352"/>
- <location filename="modinfodialog.cpp" line="367"/>
+ <location filename="modinfodialog.cpp" line="405"/>
+ <location filename="modinfodialog.cpp" line="420"/>
<source>Save changes?</source>
<translation>Änderungen speichern?</translation>
</message>
@@ -3012,28 +3284,28 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">Änderungen an &quot;%1&quot; speichern?</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="563"/>
+ <location filename="modinfodialog.cpp" line="612"/>
<source>File Exists</source>
<translation>Datei existiert bereits</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="563"/>
+ <location filename="modinfodialog.cpp" line="612"/>
<source>A file with that name exists, please enter a new one</source>
<translation>Eine Datei mit diesem Namen existiert bereits, bitte wählen Sie einen anderen Namen</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="580"/>
+ <location filename="modinfodialog.cpp" line="629"/>
<source>failed to move file</source>
<translation>Verschieben der Datei fehlgeschlagen</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="605"/>
+ <location filename="modinfodialog.cpp" line="654"/>
<source>failed to create directory &quot;optional&quot;</source>
<translation>Erstellen des Verzeichnis &quot;optional&quot; fehlgeschlagen</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="643"/>
- <location filename="modinfodialog.cpp" line="1155"/>
+ <location filename="modinfodialog.cpp" line="692"/>
+ <location filename="modinfodialog.cpp" line="1198"/>
<source>Info requested, please wait</source>
<translation>Information wird abgerufen, bitte warten</translation>
</message>
@@ -3050,32 +3322,32 @@ p, li { white-space: pre-wrap; }
(Beschreibung unvollständig. Bitte besuche die Nexus-Seite)</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="697"/>
+ <location filename="modinfodialog.cpp" line="746"/>
<source>Main</source>
<translation>Primär</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="698"/>
+ <location filename="modinfodialog.cpp" line="747"/>
<source>Update</source>
<translation>Aktualisierung</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="699"/>
+ <location filename="modinfodialog.cpp" line="748"/>
<source>Optional</source>
<translation>Optional</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="700"/>
+ <location filename="modinfodialog.cpp" line="749"/>
<source>Old</source>
<translation>Alt</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="701"/>
+ <location filename="modinfodialog.cpp" line="750"/>
<source>Misc</source>
<translation>Sonstiges</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="702"/>
+ <location filename="modinfodialog.cpp" line="751"/>
<source>Unknown</source>
<translation>Unbekannt</translation>
</message>
@@ -3084,18 +3356,18 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">Anfrage fehlgeschlagen</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="758"/>
+ <location filename="modinfodialog.cpp" line="807"/>
<source>(description incomplete, please visit nexus)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="779"/>
+ <location filename="modinfodialog.cpp" line="822"/>
<source>&lt;a href=&quot;%1&quot;&gt;Visit on Nexus&lt;/a&gt;</source>
<translation>&lt;a href=&quot;%1&quot;&gt;Auf Nexus öffnen&lt;/a&gt;</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="869"/>
- <location filename="modinfodialog.cpp" line="874"/>
+ <location filename="modinfodialog.cpp" line="912"/>
+ <location filename="modinfodialog.cpp" line="917"/>
<source>Confirm</source>
<translation>Bestätigen</translation>
</message>
@@ -3108,88 +3380,114 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">Download gestartet</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="858"/>
+ <location filename="modinfodialog.cpp" line="901"/>
<source>Failed to delete %1</source>
<translation>&quot;%1&quot; konnte nicht gelöscht werden</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="869"/>
+ <location filename="modinfodialog.cpp" line="912"/>
<source>Are sure you want to delete &quot;%1&quot;?</source>
<translation>Sind Sie sicher, dass Sie &quot;%1&quot; löschen wollen?</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="874"/>
+ <location filename="modinfodialog.cpp" line="917"/>
<source>Are sure you want to delete the selected files?</source>
<translation>Sind Sie sicher, dass Sie die ausgewählten Dateien löschen wollen?</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="948"/>
- <location filename="modinfodialog.cpp" line="954"/>
+ <location filename="modinfodialog.cpp" line="991"/>
+ <location filename="modinfodialog.cpp" line="997"/>
<source>New Folder</source>
<translation>Neuer Ordner</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="960"/>
+ <location filename="modinfodialog.cpp" line="1003"/>
<source>Failed to create &quot;%1&quot;</source>
<translation>&quot;%1&quot; konnte nicht erstellt werden</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="1064"/>
- <location filename="modinfodialog.cpp" line="1088"/>
+ <location filename="modinfodialog.cpp" line="1107"/>
+ <location filename="modinfodialog.cpp" line="1131"/>
<source>Replace file?</source>
<translation type="unfinished">Datei ersetzen?</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="1064"/>
+ <location filename="modinfodialog.cpp" line="1107"/>
<source>There already is a hidden version of this file. Replace it?</source>
<translation type="unfinished">Es existiert bereits eine versteckte Variante von dieser Datei. Soll diese ersetzt werden?</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="1067"/>
- <location filename="modinfodialog.cpp" line="1091"/>
+ <location filename="modinfodialog.cpp" line="1110"/>
+ <location filename="modinfodialog.cpp" line="1134"/>
<source>File operation failed</source>
<translation type="unfinished">Dateioperation fehlgeschlagen</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="1067"/>
- <location filename="modinfodialog.cpp" line="1091"/>
+ <location filename="modinfodialog.cpp" line="1110"/>
+ <location filename="modinfodialog.cpp" line="1134"/>
<source>Failed to remove &quot;%1&quot;. Maybe you lack the required file permissions?</source>
<translation type="unfinished">Konnte &quot;%1&quot; nicht löschen. Fehlen Ihnen evtl. die nötigen Berechtigungen?</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="1078"/>
- <location filename="modinfodialog.cpp" line="1101"/>
+ <location filename="modinfodialog.cpp" line="1121"/>
+ <location filename="modinfodialog.cpp" line="1144"/>
<source>failed to rename %1 to %2</source>
<translation type="unfinished">konnte &quot;%1&quot; nicht in &quot;%2&quot; umbenennen</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="1088"/>
+ <location filename="modinfodialog.cpp" line="1131"/>
<source>There already is a visible version of this file. Replace it?</source>
<translation type="unfinished">Es existiert bereits eine sichtbare Variante dieser Datei. Soll diese ersetzt werden?</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="1135"/>
+ <location filename="modinfodialog.cpp" line="1178"/>
<source>Un-Hide</source>
<translation type="unfinished">Sichtbar machen</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="1137"/>
+ <location filename="modinfodialog.cpp" line="1180"/>
<source>Hide</source>
<translation type="unfinished">Verstecken</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="713"/>
+ <location filename="modinfodialog.cpp" line="1221"/>
+ <source>Please enter a name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="modinfodialog.cpp" line="1225"/>
+ <location filename="modinfodialog.cpp" line="1228"/>
+ <source>Error</source>
+ <translation type="unfinished">Fehler</translation>
+ </message>
+ <message>
+ <location filename="modinfodialog.cpp" line="1225"/>
+ <source>Invalid name. Must be a valid file name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="modinfodialog.cpp" line="1228"/>
+ <source>A tweak by that name exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="modinfodialog.cpp" line="1240"/>
+ <source>Create Tweak</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="modinfodialog.cpp" line="762"/>
<source>Current Version: %1</source>
<translation>Aktuelle Version: %1</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="352"/>
- <location filename="modinfodialog.cpp" line="367"/>
+ <location filename="modinfodialog.cpp" line="405"/>
+ <location filename="modinfodialog.cpp" line="420"/>
<source>Save changes to &quot;%1&quot;?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="717"/>
+ <location filename="modinfodialog.cpp" line="766"/>
<source>No update available</source>
<translation>Keine neue Version verfügbar</translation>
</message>
@@ -3197,12 +3495,11 @@ p, li { white-space: pre-wrap; }
<context>
<name>ModInfoOverwrite</name>
<message>
- <location filename="modinfo.h" line="812"/>
<source>Overwrite</source>
- <translation>Overwrite</translation>
+ <translation type="obsolete">Overwrite</translation>
</message>
<message>
- <location filename="modinfo.cpp" line="821"/>
+ <location filename="modinfo.cpp" line="866"/>
<source>This pseudo mod contains files from the virtual data tree that got modified (i.e. by the construction kit)</source>
<translation type="unfinished">Diese Pseudo-Mod enthält Dateien des virtuellen Verzeichnisses die modifiziert wurden (z.B. durch den Construction Kit)</translation>
</message>
@@ -3210,17 +3507,17 @@ p, li { white-space: pre-wrap; }
<context>
<name>ModInfoRegular</name>
<message>
- <location filename="modinfo.cpp" line="392"/>
+ <location filename="modinfo.cpp" line="393"/>
<source>failed to write %1/meta.ini: %2</source>
<translation>konnte %1/meta.ini nicht schreiben: %2</translation>
</message>
<message>
- <location filename="modinfo.cpp" line="625"/>
+ <location filename="modinfo.cpp" line="661"/>
<source>%1 contains no esp/esm and no asset (textures, meshes, interface, ...) directory</source>
<translation type="unfinished">%1 enthält keine esp / esm Dateien und keine Resourcen (Texturen, Netze, Oberfläche...)</translation>
</message>
<message>
- <location filename="modinfo.cpp" line="629"/>
+ <location filename="modinfo.cpp" line="665"/>
<source>Categories: &lt;br&gt;</source>
<translation type="unfinished">Kategorien: &lt;br&gt;</translation>
</message>
@@ -3236,7 +3533,7 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">aÜberprüfung gestartet</translation>
</message>
<message>
- <location filename="modlist.cpp" line="662"/>
+ <location filename="modlist.cpp" line="776"/>
<source>Confirm</source>
<translation>Bestätigen</translation>
</message>
@@ -3261,9 +3558,10 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">Max</translation>
</message>
<message>
- <location filename="modlist.cpp" line="294"/>
- <source>installed version: %1, newest version: %2</source>
- <translation>installierte Version: %1, neueste Version: %2</translation>
+ <location filename="modlist.cpp" line="308"/>
+ <source>installed version: &quot;%1&quot;, newest version: &quot;%2&quot;</source>
+ <oldsource>installed version: %1, newest version: %2</oldsource>
+ <translation type="unfinished">installierte Version: %1, neueste Version: %2</translation>
</message>
<message>
<source>%1 contains no esp/esm and no asset (textures, meshes, interface, ...) directory</source>
@@ -3278,9 +3576,8 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">Alle angezeigten Mods deaktivieren?</translation>
</message>
<message>
- <location filename="modlist.cpp" line="94"/>
<source>Overwrite</source>
- <translation>Overwrite</translation>
+ <translation type="obsolete">Overwrite</translation>
</message>
<message>
<location filename="modlist.cpp" line="109"/>
@@ -3323,47 +3620,52 @@ p, li { white-space: pre-wrap; }
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="184"/>
+ <location filename="modlist.cpp" line="197"/>
<source>invalid</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="298"/>
+ <location filename="modlist.cpp" line="310"/>
+ <source>The newest version on Nexus seems to be older than the one you have installed. This could either mean the version you have has been withdrawn (i.e. due to a bug) or the author uses a non-standard versioning scheme and that newest version is actually newer. Either way you may want to &quot;upgrade&quot;.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="modlist.cpp" line="318"/>
<source>Categories: &lt;br&gt;</source>
<translation>Kategorien: &lt;br&gt;</translation>
</message>
<message>
- <location filename="modlist.cpp" line="327"/>
+ <location filename="modlist.cpp" line="347"/>
<source>Invalid name</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="718"/>
+ <location filename="modlist.cpp" line="832"/>
<source>Mod Name</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="723"/>
+ <location filename="modlist.cpp" line="837"/>
<source>Installation</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="736"/>
+ <location filename="modlist.cpp" line="850"/>
<source>Category of the mod.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="737"/>
+ <location filename="modlist.cpp" line="851"/>
<source>Id of the mod as used on Nexus.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="738"/>
+ <location filename="modlist.cpp" line="852"/>
<source>Emblemes to highlight things that might require attention.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="739"/>
+ <location filename="modlist.cpp" line="853"/>
<source>Time this mod was installed</source>
<translation type="unfinished"></translation>
</message>
@@ -3380,59 +3682,59 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">Namen Ihrer Mods</translation>
</message>
<message>
- <location filename="modlist.cpp" line="719"/>
+ <location filename="modlist.cpp" line="833"/>
<source>Version</source>
<translation>Version</translation>
</message>
<message>
- <location filename="modlist.cpp" line="733"/>
+ <location filename="modlist.cpp" line="847"/>
<source>Version of the mod (if available)</source>
<translation>Version des Mod (wenn verfügbar)</translation>
</message>
<message>
- <location filename="modlist.cpp" line="720"/>
+ <location filename="modlist.cpp" line="834"/>
<source>Priority</source>
<translation>Priorität</translation>
</message>
<message>
- <location filename="modlist.cpp" line="603"/>
+ <location filename="modlist.cpp" line="717"/>
<source>drag&amp;drop failed: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="717"/>
+ <location filename="modlist.cpp" line="831"/>
<source>Flags</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="721"/>
+ <location filename="modlist.cpp" line="835"/>
<source>Category</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="722"/>
+ <location filename="modlist.cpp" line="836"/>
<source>Nexus ID</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="724"/>
- <location filename="modlist.cpp" line="740"/>
+ <location filename="modlist.cpp" line="838"/>
+ <location filename="modlist.cpp" line="854"/>
<source>unknown</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="732"/>
+ <location filename="modlist.cpp" line="846"/>
<source>Name of your mods</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="734"/>
+ <location filename="modlist.cpp" line="848"/>
<source>Installation priority of your mod. The higher, the more &quot;important&quot; it is and thus overwrites files from mods with lower priority.</source>
<oldsource>Installation priority of your mod. The higher, the more &quot;important&quot; it is and thus overwrites files from mods with lower priority</oldsource>
<translation>Installations-Priorität Ihres Mods. Je höher, desto wichtiger ist dieser Mod und überschreibt damit Dateien von Mods mit niedrigerer Priorität.</translation>
</message>
<message>
- <location filename="modlist.cpp" line="662"/>
+ <location filename="modlist.cpp" line="776"/>
<source>Are you sure you want to remove &quot;%1&quot;?</source>
<translation>Bist du sicher dass du &quot;%1&quot; löschen willst?</translation>
</message>
@@ -3468,12 +3770,12 @@ p, li { white-space: pre-wrap; }
<context>
<name>MyFileSystemModel</name>
<message>
- <location filename="overwriteinfodialog.cpp" line="48"/>
+ <location filename="overwriteinfodialog.cpp" line="47"/>
<source>Overwrites</source>
<translation>Overwrites</translation>
</message>
<message>
- <location filename="overwriteinfodialog.cpp" line="60"/>
+ <location filename="overwriteinfodialog.cpp" line="59"/>
<source>not implemented</source>
<translation>nicht implementiert</translation>
</message>
@@ -3482,11 +3784,16 @@ p, li { white-space: pre-wrap; }
<name>NXMAccessManager</name>
<message>
<location filename="nxmaccessmanager.cpp" line="130"/>
+ <source>Logging into Nexus</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="nxmaccessmanager.cpp" line="145"/>
<source>timeout</source>
<translation>Zeitüberschreitung</translation>
</message>
<message>
- <location filename="nxmaccessmanager.cpp" line="168"/>
+ <location filename="nxmaccessmanager.cpp" line="185"/>
<source>Please check your password</source>
<translation>Bitte das Passwort überprüfen</translation>
</message>
@@ -3576,17 +3883,17 @@ p, li { white-space: pre-wrap; }
<context>
<name>NexusInterface</name>
<message>
- <location filename="nexusinterface.cpp" line="201"/>
+ <location filename="nexusinterface.cpp" line="218"/>
<source>Failed to guess mod id for &quot;%1&quot;, please pick the correct one</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="nexusinterface.cpp" line="421"/>
+ <location filename="nexusinterface.cpp" line="455"/>
<source>empty response</source>
<translation>leere Antwort</translation>
</message>
<message>
- <location filename="nexusinterface.cpp" line="450"/>
+ <location filename="nexusinterface.cpp" line="483"/>
<source>invalid response</source>
<translation>ungültige Antwort</translation>
</message>
@@ -4576,34 +4883,34 @@ Diese Funktion ist noch in arbeit und ist sehr eingeschränkt.</translation>
<translation type="obsolete">&quot;%1&quot; konnte nicht gelöscht werden</translation>
</message>
<message>
- <location filename="overwriteinfodialog.cpp" line="137"/>
+ <location filename="overwriteinfodialog.cpp" line="136"/>
<source>Failed to delete &quot;%1&quot;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="overwriteinfodialog.cpp" line="148"/>
- <location filename="overwriteinfodialog.cpp" line="153"/>
+ <location filename="overwriteinfodialog.cpp" line="147"/>
+ <location filename="overwriteinfodialog.cpp" line="152"/>
<source>Confirm</source>
<translation>Bestätigen</translation>
</message>
<message>
- <location filename="overwriteinfodialog.cpp" line="148"/>
+ <location filename="overwriteinfodialog.cpp" line="147"/>
<source>Are sure you want to delete &quot;%1&quot;?</source>
<translation>Sind Sie sicher, dass Sie &quot;%1&quot; löschen wollen?</translation>
</message>
<message>
- <location filename="overwriteinfodialog.cpp" line="153"/>
+ <location filename="overwriteinfodialog.cpp" line="152"/>
<source>Are sure you want to delete the selected files?</source>
<translation>Sind Sie sicher, dass Sie die ausgewählten Dateien löschen wollen?</translation>
</message>
<message>
- <location filename="overwriteinfodialog.cpp" line="203"/>
- <location filename="overwriteinfodialog.cpp" line="209"/>
+ <location filename="overwriteinfodialog.cpp" line="202"/>
+ <location filename="overwriteinfodialog.cpp" line="208"/>
<source>New Folder</source>
<translation>Neuer Ordner</translation>
</message>
<message>
- <location filename="overwriteinfodialog.cpp" line="215"/>
+ <location filename="overwriteinfodialog.cpp" line="214"/>
<source>Failed to create &quot;%1&quot;</source>
<translation>&quot;%1&quot; konnte nicht erstellt werden</translation>
</message>
@@ -4611,70 +4918,93 @@ Diese Funktion ist noch in arbeit und ist sehr eingeschränkt.</translation>
<context>
<name>PluginList</name>
<message>
- <location filename="pluginlist.cpp" line="98"/>
+ <location filename="pluginlist.cpp" line="111"/>
<source>Mod Index</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="99"/>
- <location filename="pluginlist.cpp" line="111"/>
+ <location filename="pluginlist.cpp" line="112"/>
+ <source>Flags</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="pluginlist.cpp" line="113"/>
+ <location filename="pluginlist.cpp" line="125"/>
<source>unknown</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="107"/>
+ <location filename="pluginlist.cpp" line="121"/>
<source>Name of your mods</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="108"/>
+ <location filename="pluginlist.cpp" line="122"/>
<source>Load priority of your mod. The higher, the more &quot;important&quot; it is and thus overwrites data from plugins with lower priority.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="110"/>
+ <location filename="pluginlist.cpp" line="124"/>
<source>The modindex determins the formids of objects originating from this mods.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="208"/>
+ <location filename="pluginlist.cpp" line="165"/>
+ <source>failed to update esp info for file %1 (source id: %2), error: %3</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="pluginlist.cpp" line="233"/>
<source>esp not found: %1</source>
<translation>ESP nicht gefunden: %1</translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="215"/>
- <location filename="pluginlist.cpp" line="227"/>
+ <location filename="pluginlist.cpp" line="240"/>
+ <location filename="pluginlist.cpp" line="252"/>
<source>Confirm</source>
<translation type="unfinished">Bestätigen</translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="215"/>
+ <location filename="pluginlist.cpp" line="240"/>
<source>Really enable all plugins?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="227"/>
+ <location filename="pluginlist.cpp" line="252"/>
<source>Really disable all plugins?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="353"/>
+ <location filename="pluginlist.cpp" line="380"/>
<source>The file containing locked plugin indices is broken</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="366"/>
- <location filename="pluginlist.cpp" line="405"/>
<source>failed to open output file: %1</source>
- <translation>konnte die Ausgabedatei nicht öffnen: %1</translation>
+ <translation type="obsolete">konnte die Ausgabedatei nicht öffnen: %1</translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="393"/>
+ <location filename="pluginlist.cpp" line="418"/>
<source>Some of your plugins have invalid names! These plugins can not be loaded by the game. Please see mo_interface.log for a list of affected plugins and rename them.</source>
<translation>Einige Ihrer Plugins haben ungültige Namen! Diese Plugins können nicht vom Spiel geladen werden. Die Datei mo_interface.log enthält eine Liste der betroffenen Plugins. Bitte benennen Sie diese um.</translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="737"/>
+ <location filename="pluginlist.cpp" line="644"/>
+ <source>BOSS dll incompatible</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="pluginlist.cpp" line="987"/>
+ <source>Missing Masters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="pluginlist.cpp" line="993"/>
+ <source>Enabled Masters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="pluginlist.cpp" line="1134"/>
<source>failed to restore load order for %1</source>
<translation type="unfinished"></translation>
</message>
@@ -4687,17 +5017,17 @@ Diese Funktion ist noch in arbeit und ist sehr eingeschränkt.</translation>
<translation type="obsolete">max</translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="631"/>
+ <location filename="pluginlist.cpp" line="983"/>
<source>This plugin can&apos;t be disabled (enforced by the game)</source>
<translation>Dieses Plugin kann nicht deaktiviert werden (vom Spiel benötigt)</translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="633"/>
+ <location filename="pluginlist.cpp" line="985"/>
<source>Origin: %1</source>
<translation>Ursprung: %1</translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="96"/>
+ <location filename="pluginlist.cpp" line="109"/>
<source>Name</source>
<translation>Name</translation>
</message>
@@ -4706,7 +5036,7 @@ Diese Funktion ist noch in arbeit und ist sehr eingeschränkt.</translation>
<translation type="obsolete">Namen Ihrer Mods</translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="97"/>
+ <location filename="pluginlist.cpp" line="110"/>
<source>Priority</source>
<translation>Priorität</translation>
</message>
@@ -4726,6 +5056,19 @@ Diese Funktion ist noch in arbeit und ist sehr eingeschränkt.</translation>
</message>
</context>
<context>
+ <name>PreviewDialog</name>
+ <message>
+ <location filename="previewdialog.ui" line="14"/>
+ <source>Preview</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="previewdialog.ui" line="78"/>
+ <source>Close</source>
+ <translation type="unfinished">Schliessen</translation>
+ </message>
+</context>
+<context>
<name>ProblemsDialog</name>
<message>
<location filename="problemsdialog.ui" line="14"/>
@@ -4738,21 +5081,27 @@ Diese Funktion ist noch in arbeit und ist sehr eingeschränkt.</translation>
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:7.8pt; font-weight:400; font-style:normal;&quot;&gt;
-&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <oldsource>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
+p, li { white-space: pre-wrap; }
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</oldsource>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="problemsdialog.cpp" line="29"/>
- <source>fix</source>
- <translation type="unfinished"></translation>
+ <location filename="problemsdialog.ui" line="75"/>
+ <source>Close</source>
+ <translation type="unfinished">Schliessen</translation>
</message>
<message>
- <location filename="problemsdialog.cpp" line="30"/>
+ <location filename="problemsdialog.cpp" line="44"/>
+ <location filename="problemsdialog.cpp" line="45"/>
<source>Fix</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="problemsdialog.cpp" line="34"/>
+ <location filename="problemsdialog.cpp" line="49"/>
<source>No guided fix</source>
<translation type="unfinished"></translation>
</message>
@@ -4764,72 +5113,72 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">konnte Ini Anpassungen nicht anwenden</translation>
</message>
<message>
- <location filename="profile.cpp" line="56"/>
+ <location filename="profile.cpp" line="59"/>
<source>invalid profile name %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="60"/>
+ <location filename="profile.cpp" line="63"/>
<source>failed to create %1</source>
<translation type="unfinished">%1 konnte nicht erstellt werden</translation>
</message>
<message>
- <location filename="profile.cpp" line="152"/>
- <source>failed to open &quot;%1&quot; for writing</source>
+ <location filename="profile.cpp" line="182"/>
+ <source>failed to write mod list: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="189"/>
+ <location filename="profile.cpp" line="193"/>
<source>failed to update tweaked ini file, wrong settings may be used: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="219"/>
+ <location filename="profile.cpp" line="223"/>
<source>failed to create tweaked ini: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="365"/>
+ <location filename="profile.cpp" line="371"/>
<source>Overwrite directory couldn&apos;t be parsed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="374"/>
+ <location filename="profile.cpp" line="380"/>
<source>invalid priority %1</source>
<translation>Ungültige Priorität %1</translation>
</message>
<message>
- <location filename="profile.cpp" line="561"/>
+ <location filename="profile.cpp" line="568"/>
<source>failed to parse ini file (%1)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="589"/>
+ <location filename="profile.cpp" line="596"/>
<source>failed to parse ini file (%1): %2</source>
<translation>Konnte ini-datei (%1) nicht auslesen: %2</translation>
</message>
<message>
- <location filename="profile.cpp" line="613"/>
- <location filename="profile.cpp" line="650"/>
+ <location filename="profile.cpp" line="620"/>
+ <location filename="profile.cpp" line="657"/>
<source>failed to modify &quot;%1&quot;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="678"/>
+ <location filename="profile.cpp" line="685"/>
<source>Delete savegames?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="679"/>
+ <location filename="profile.cpp" line="686"/>
<source>Do you want to delete local savegames? (If you select &quot;No&quot;, the save games will show up again if you re-enable local savegames)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="271"/>
- <location filename="profile.cpp" line="300"/>
- <location filename="profile.cpp" line="384"/>
- <location filename="profile.cpp" line="402"/>
- <location filename="profile.cpp" line="412"/>
+ <location filename="profile.cpp" line="276"/>
+ <location filename="profile.cpp" line="305"/>
+ <location filename="profile.cpp" line="390"/>
+ <location filename="profile.cpp" line="408"/>
+ <location filename="profile.cpp" line="418"/>
<source>invalid index %1</source>
<translation>ungültiger index %1</translation>
</message>
@@ -5054,37 +5403,61 @@ p, li { white-space: pre-wrap; }
<translation>Bitte geben Sie einen Namen für das neue Profil an</translation>
</message>
<message>
- <location filename="profilesdialog.cpp" line="160"/>
+ <location filename="profilesdialog.cpp" line="162"/>
<source>failed to copy profile: %1</source>
<translation>Kopieren des Profils fehlgeschlagen: %1</translation>
</message>
<message>
- <location filename="profilesdialog.cpp" line="167"/>
+ <location filename="profilesdialog.cpp" line="165"/>
+ <source>Invalid name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="profilesdialog.cpp" line="165"/>
+ <source>Invalid profile name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="profilesdialog.cpp" line="172"/>
<source>Confirm</source>
<translation>Bestätigen</translation>
</message>
<message>
- <location filename="profilesdialog.cpp" line="167"/>
+ <location filename="profilesdialog.cpp" line="172"/>
+ <source>Are you sure you want to remove this profile (including local savegames if any)?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="profilesdialog.cpp" line="182"/>
+ <source>Profile broken</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="profilesdialog.cpp" line="183"/>
+ <source>This profile you&apos;re about to delete seems to be broken or the path is invalid. I&apos;m about to delete the following folder: &quot;%1&quot;. Proceed?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<source>Are you sure you want to remove this profile?</source>
- <translation>Sind Sie sicher, dass Sie dieses Profil löschen wollen?</translation>
+ <translation type="obsolete">Sind Sie sicher, dass Sie dieses Profil löschen wollen?</translation>
</message>
<message>
- <location filename="profilesdialog.cpp" line="196"/>
+ <location filename="profilesdialog.cpp" line="215"/>
<source>Rename Profile</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profilesdialog.cpp" line="196"/>
+ <location filename="profilesdialog.cpp" line="215"/>
<source>New Name</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profilesdialog.cpp" line="233"/>
+ <location filename="profilesdialog.cpp" line="252"/>
<source>failed to change archive invalidation state: %1</source>
<translation>Ändern der Archiv Invalidierung fehlgeschlagen: %1</translation>
</message>
<message>
- <location filename="profilesdialog.cpp" line="270"/>
+ <location filename="profilesdialog.cpp" line="289"/>
<source>failed to determine if invalidation is active: %1</source>
<translation>MO konnte nicht feststellen ob Invalidierung aktiv ist: %1</translation>
</message>
@@ -5176,13 +5549,13 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">Waffen</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="63"/>
+ <location filename="installationmanager.cpp" line="64"/>
<location filename="selfupdater.cpp" line="52"/>
<source>invalid 7-zip32.dll: %1</source>
<translation>Ungültige 7-zip32.dll: %1</translation>
</message>
<message>
- <location filename="profile.cpp" line="93"/>
+ <location filename="profile.cpp" line="96"/>
<source>&quot;%1&quot; is missing</source>
<translation>&quot;%1&quot; fehlt</translation>
</message>
@@ -5191,8 +5564,8 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">&quot;%1&quot; konnte nicht erstellt werden, haben Sie die nötigen Schreibrechte für das Installations Verzeichnis?</translation>
</message>
<message>
- <location filename="main.cpp" line="360"/>
- <location filename="main.cpp" line="389"/>
+ <location filename="main.cpp" line="357"/>
+ <location filename="main.cpp" line="386"/>
<source>Please select the game to manage</source>
<translation>Bitte wählen Sie ein Spiel zum Verwalten aus</translation>
</message>
@@ -5201,7 +5574,7 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">Ungültiges Profil %1</translation>
</message>
<message>
- <location filename="main.cpp" line="134"/>
+ <location filename="main.cpp" line="139"/>
<source>Permissions required</source>
<translation>Berechtigungen erforderlich</translation>
</message>
@@ -5210,8 +5583,8 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">Der aktuelle Benutzeraccount hat die erforderlichen Berechtigungen nicht um Mod Organizer auszuführen. The notwendigen Änderungen können automatisch durchgeführt werden (der aktuelle Benutzeraccount erhält Schreibzugriff auf das ModOrganizer Verzeichnis). Sie werden aufgefordert werden &quot;mo_helper.exe&quot; mit erhöhten Privilegien auszuführen.</translation>
</message>
<message>
- <location filename="main.cpp" line="234"/>
- <location filename="main.cpp" line="272"/>
+ <location filename="main.cpp" line="231"/>
+ <location filename="main.cpp" line="269"/>
<source>Woops</source>
<translation>Oha</translation>
</message>
@@ -5220,36 +5593,41 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">ModOrganizer ist abgestürzt! Soll eine Diagnosedatei geschrieben werden? Wenn sie mir diese Datei per eMail (sherb@gmx.net) schicken kann dieser Fehler vermutlich eher behoben werden.</translation>
</message>
<message>
- <location filename="main.cpp" line="135"/>
- <source>The current user account doesn&apos;t have the required access rights to run Mod Organizer. The neccessary changes can be made automatically (the MO directory will be made writable for the current user account). You will be asked to run &quot;helper.exe&quot; with administrative rights).</source>
+ <location filename="main.cpp" line="140"/>
+ <source>The current user account doesn&apos;t have the required access rights to run Mod Organizer. The neccessary changes can be made automatically (the MO directory will be made writable for the current user account). You will be asked to run &quot;helper.exe&quot; with administrative rights.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="main.cpp" line="235"/>
+ <location filename="main.cpp" line="232"/>
<source>ModOrganizer has crashed! Should a diagnostic file be created? If you send me this file (%1) to sherb@gmx.net, the bug is a lot more likely to be fixed. Please include a short description of what you were doing when the crash happened</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="main.cpp" line="273"/>
+ <location filename="main.cpp" line="270"/>
<source>ModOrganizer has crashed! Unfortunately I was not able to write a diagnostic file: %1</source>
<translation>ModOrganizer ist abgestürzt! Leider konnte keine Diagnosedatei geschrieben werden: %1</translation>
</message>
<message>
- <location filename="main.cpp" line="335"/>
+ <location filename="main.cpp" line="332"/>
<source>An instance of Mod Organizer is already running</source>
<translation>Mod Organizer läuft bereits</translation>
</message>
<message>
- <location filename="main.cpp" line="357"/>
+ <location filename="main.cpp" line="354"/>
<source>No game identified in &quot;%1&quot;. The directory is required to contain the game binary and its launcher.</source>
<translation>Es wurde kein Spiel in &quot;%1&quot; gefunden. Das Verzeichnis muss das Anwendungsdatei des Spiels und des Launchers enthalten.</translation>
</message>
<message>
+ <location filename="main.cpp" line="412"/>
+ <source>Please select the game edition you have (MO can&apos;t start the game correctly if this is set incorrectly!)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<source>&quot;%1&quot; not found</source>
<translation type="obsolete">&quot;%1&quot; nicht gefunden</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="752"/>
+ <location filename="mainwindow.cpp" line="782"/>
<source>Please use &quot;Help&quot; from the toolbar to get usage instructions to all elements</source>
<translation>Bitte verwenden Sie die &quot;Hilfe&quot; Funktion um Hinweise zu Nutzung aller Elemete zu bekommen</translation>
</message>
@@ -5262,19 +5640,19 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">Ungültige Priorität %1</translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="310"/>
- <location filename="profile.cpp" line="228"/>
+ <location filename="pluginlist.cpp" line="335"/>
+ <location filename="profile.cpp" line="233"/>
<source>failed to find &quot;%1&quot;</source>
<translation>Konnte &quot;%1&quot; nicht finden</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1470"/>
- <location filename="mainwindow.cpp" line="3723"/>
+ <location filename="mainwindow.cpp" line="1610"/>
+ <location filename="mainwindow.cpp" line="4216"/>
<source>&lt;Manage...&gt;</source>
<translation>&lt;Verwalten...&gt;</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1488"/>
+ <location filename="mainwindow.cpp" line="1628"/>
<source>failed to parse profile %1: %2</source>
<translation>Konnte Profil %1 nicht verarbeiten: %2</translation>
</message>
@@ -5283,17 +5661,17 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">Kodierungsfehler! Bitte melden Sie dies als Bug und fügen Sie die Datei mo_interface.log bei!</translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="467"/>
+ <location filename="pluginlist.cpp" line="491"/>
<source>failed to access %1</source>
<translation>Auf %1 konnte nicht zugegriffen werden</translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="481"/>
+ <location filename="pluginlist.cpp" line="505"/>
<source>failed to set file time %1</source>
<translation>Konnte Dateizeit nicht setzen %1</translation>
</message>
<message>
- <location filename="profile.cpp" line="67"/>
+ <location filename="profile.cpp" line="70"/>
<source>failed to create %1</source>
<translation>%1 konnte nicht erstellt werden</translation>
</message>
@@ -5348,22 +5726,22 @@ Start elevated anyway? (you will be asked if you want to allow ModOrganizer.exe
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="spawn.cpp" line="128"/>
+ <location filename="spawn.cpp" line="129"/>
<source>failed to spawn &quot;%1&quot;: %2</source>
<translation>&quot;%1&quot; konnte nicht erzeugt werden: %2</translation>
</message>
<message>
- <location filename="spawn.cpp" line="137"/>
+ <location filename="spawn.cpp" line="138"/>
<source>&quot;%1&quot; doesn&apos;t exist</source>
<translation>&quot;%1&quot; existiert nicht</translation>
</message>
<message>
- <location filename="spawn.cpp" line="144"/>
+ <location filename="spawn.cpp" line="145"/>
<source>failed to inject dll into &quot;%1&quot;: %2</source>
<translation>Konnte dll nicht in &quot;%1&quot; einspeisen: %2</translation>
</message>
<message>
- <location filename="spawn.cpp" line="152"/>
+ <location filename="spawn.cpp" line="153"/>
<source>failed to run &quot;%1&quot;</source>
<translation>&quot;%1&quot; konnte nicht ausgeführt werden</translation>
</message>
@@ -5449,18 +5827,18 @@ Start elevated anyway? (you will be asked if you want to allow ModOrganizer.exe
<translation type="obsolete">Englisch</translation>
</message>
<message>
- <location filename="main.cpp" line="335"/>
- <location filename="settings.cpp" line="462"/>
+ <location filename="main.cpp" line="332"/>
+ <location filename="settings.cpp" line="542"/>
<source>Mod Organizer</source>
<translation>Mod Organizer</translation>
</message>
<message>
- <location filename="settings.cpp" line="469"/>
+ <location filename="settings.cpp" line="549"/>
<source>Script Extender</source>
<translation>Script Extender</translation>
</message>
<message>
- <location filename="settings.cpp" line="476"/>
+ <location filename="settings.cpp" line="556"/>
<source>Proxy DLL</source>
<translation>Proxy DLL</translation>
</message>
@@ -5476,20 +5854,20 @@ Start elevated anyway? (you will be asked if you want to allow ModOrganizer.exe
<translation>konnte den Accountnamen nicht bestimmen</translation>
</message>
<message>
- <location filename="categories.cpp" line="133"/>
+ <location filename="categories.cpp" line="141"/>
<source>Failed to save custom categories</source>
<translation>Konnte die modifizierten Kategorien nicht speichern</translation>
</message>
<message>
- <location filename="categories.cpp" line="210"/>
- <location filename="categories.cpp" line="245"/>
- <location filename="categories.cpp" line="255"/>
- <location filename="categories.cpp" line="265"/>
+ <location filename="categories.cpp" line="218"/>
+ <location filename="categories.cpp" line="253"/>
+ <location filename="categories.cpp" line="263"/>
+ <location filename="categories.cpp" line="273"/>
<source>invalid index %1</source>
<translation>ungültiger index %1</translation>
</message>
<message>
- <location filename="categories.cpp" line="276"/>
+ <location filename="categories.cpp" line="284"/>
<source>invalid category id %1</source>
<translation>ungültige Kategorie %1</translation>
</message>
@@ -5543,6 +5921,11 @@ Start elevated anyway? (you will be asked if you want to allow ModOrganizer.exe
<source>invalid game type %1</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <location filename="safewritefile.cpp" line="32"/>
+ <source>failed to open temporary file</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>QueryOverwriteDialog</name>
@@ -5583,14 +5966,6 @@ Start elevated anyway? (you will be asked if you want to allow ModOrganizer.exe
</message>
</context>
<context>
- <name>QuestionBoxMemory</name>
- <message>
- <location filename="questionboxmemory.ui" line="86"/>
- <source>Remember selection</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
<name>SaveGameInfoWidget</name>
<message>
<location filename="savegameinfowidget.ui" line="39"/>
@@ -5695,9 +6070,9 @@ Start elevated anyway? (you will be asked if you want to allow ModOrganizer.exe
</message>
<message>
<location filename="selfupdater.cpp" line="116"/>
- <location filename="selfupdater.cpp" line="140"/>
- <location filename="selfupdater.cpp" line="269"/>
- <location filename="selfupdater.cpp" line="417"/>
+ <location filename="selfupdater.cpp" line="139"/>
+ <location filename="selfupdater.cpp" line="268"/>
+ <location filename="selfupdater.cpp" line="415"/>
<source>Update</source>
<translation>Aktualisierung</translation>
</message>
@@ -5707,57 +6082,57 @@ Start elevated anyway? (you will be asked if you want to allow ModOrganizer.exe
<translation>Eine Aktualisierung ist verfügbar (neueste Version: %1). Soll sie installiert werden?</translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="141"/>
+ <location filename="selfupdater.cpp" line="140"/>
<source>Download in progress</source>
<translation>Download läuft</translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="196"/>
+ <location filename="selfupdater.cpp" line="195"/>
<source>Download failed: %1</source>
<translation>Download fehlgeschlagen: %1</translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="207"/>
+ <location filename="selfupdater.cpp" line="206"/>
<source>Failed to install update: %1</source>
<translation>Konnte das update nicht installieren: %1</translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="228"/>
+ <location filename="selfupdater.cpp" line="227"/>
<source>failed to open archive &quot;%1&quot;: %2</source>
<translation>konnte das Archiv &quot;%1&quot; nicht öffnen: %2</translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="251"/>
+ <location filename="selfupdater.cpp" line="250"/>
<source>failed to move outdated files: %1. Please update manually.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="269"/>
+ <location filename="selfupdater.cpp" line="268"/>
<source>Update installed, Mod Organizer will now be restarted.</source>
<translation>Aktualisierung installiert. Mod Organizer wird sich nun neu starten.</translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="297"/>
+ <location filename="selfupdater.cpp" line="296"/>
<source>Error</source>
<translation>Fehler</translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="353"/>
+ <location filename="selfupdater.cpp" line="351"/>
<source>Failed to parse response. Please report this as a bug and include the file mo_interface.log.</source>
<translation>Konnte Antwort nicht auslesen. Bitte melden Sie dies als Bug und fügen Sie die Datei mo_interface.log bei.</translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="418"/>
+ <location filename="selfupdater.cpp" line="416"/>
<source>No incremental update available for this version, the complete package needs to be downloaded (%1 kB)</source>
<translation>Es existiert keine inkrementelle Aktualisierung für diese Version, Sie müssen das vollständige Archiv herunterladen (%1 kB)</translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="427"/>
+ <location filename="selfupdater.cpp" line="425"/>
<source>no file for update found. Please update manually.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="461"/>
+ <location filename="selfupdater.cpp" line="460"/>
<source>No download server available. Please try again later.</source>
<translation type="unfinished"></translation>
</message>
@@ -5766,7 +6141,7 @@ Start elevated anyway? (you will be asked if you want to allow ModOrganizer.exe
<translation type="obsolete">kein Update gefunden</translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="441"/>
+ <location filename="selfupdater.cpp" line="440"/>
<source>Failed to retrieve update information: %1</source>
<translation>Konnte update informationen nicht abrufen: %1</translation>
</message>
@@ -5782,26 +6157,22 @@ Start elevated anyway? (you will be asked if you want to allow ModOrganizer.exe
<context>
<name>Settings</name>
<message>
- <location filename="settings.cpp" line="278"/>
- <source>setting for invalid plugin &quot;%1&quot; requested</source>
- <translation type="unfinished"></translation>
+ <source>Administrative rights required to change this.</source>
+ <translation type="obsolete">Admistratorrechte sind erforderlich um dies zu ändern.</translation>
</message>
<message>
- <location filename="settings.cpp" line="282"/>
- <source>invalid setting &quot;%1&quot; requested for plugin &quot;%2&quot;</source>
+ <location filename="settings.cpp" line="320"/>
+ <location filename="settings.cpp" line="339"/>
+ <source>attempt to store setting for unknown plugin &quot;%1&quot;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Administrative rights required to change this.</source>
- <translation type="obsolete">Admistratorrechte sind erforderlich um dies zu ändern.</translation>
- </message>
- <message>
- <location filename="settings.cpp" line="573"/>
+ <location filename="settings.cpp" line="660"/>
<source>Confirm</source>
<translation>Bestätigen</translation>
</message>
<message>
- <location filename="settings.cpp" line="573"/>
+ <location filename="settings.cpp" line="660"/>
<source>Changing the mod directory affects all your profiles! Mods not present (or named differently) in the new location will be disabled in all profiles. There is no way to undo this unless you backed up your profiles manually. Proceed?</source>
<translation type="unfinished"></translation>
</message>
@@ -5928,42 +6299,47 @@ p, li { white-space: pre-wrap; }
<translation>Cache-Verzeichnis</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="321"/>
+ <location filename="settingsdialog.ui" line="318"/>
<source>Disable automatic internet features</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="324"/>
+ <location filename="settingsdialog.ui" line="321"/>
<source>Disable automatic internet features. This does not affect features that are explicitly invoked by the user (like checking mods for updates, endorsing, opening the web browser)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="327"/>
+ <location filename="settingsdialog.ui" line="324"/>
<source>Offline Mode</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="334"/>
+ <location filename="settingsdialog.ui" line="331"/>
<source>Use a proxy for network connections.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="337"/>
+ <location filename="settingsdialog.ui" line="334"/>
<source>Use a proxy for network connections. This uses the system-wide settings which can be configured in Internet Explorer. Please note that MO will start up a few seconds slower on some systems when using a proxy.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="340"/>
+ <location filename="settingsdialog.ui" line="337"/>
<source>Use HTTP Proxy (Uses System Settings)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="351"/>
- <source>Known Servers (Dynamically updated every download)</source>
+ <location filename="settingsdialog.ui" line="346"/>
+ <source>Associate with &quot;Download with manager&quot; links</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="settingsdialog.ui" line="375"/>
+ <source>Known Servers (updated on download)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="372"/>
+ <location filename="settingsdialog.ui" line="396"/>
<source>Preferred Servers (Drag &amp; Drop)</source>
<translation type="unfinished"></translation>
</message>
@@ -6035,47 +6411,52 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">Standardbrowser vorziehen</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="407"/>
+ <location filename="settingsdialog.ui" line="431"/>
<source>Plugins</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="427"/>
+ <location filename="settingsdialog.ui" line="453"/>
<source>Author:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="441"/>
+ <location filename="settingsdialog.ui" line="467"/>
<source>Version:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="455"/>
+ <location filename="settingsdialog.ui" line="481"/>
<source>Description:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="493"/>
+ <location filename="settingsdialog.ui" line="519"/>
<source>Key</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="498"/>
+ <location filename="settingsdialog.ui" line="524"/>
<source>Value</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="509"/>
+ <location filename="settingsdialog.ui" line="536"/>
+ <source>Blacklisted Plugins (use &lt;del&gt; to remove):</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="settingsdialog.ui" line="547"/>
<source>Workarounds</source>
<translation>Workarounds</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="571"/>
+ <location filename="settingsdialog.ui" line="609"/>
<source>Load Mechanism</source>
<translation>Lademechanismus</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="594"/>
+ <location filename="settingsdialog.ui" line="632"/>
<source>Mod Organizer needs a dll to be injected into the game so all mods are visible to it.
There are several means to do this:
*Mod Organizer* (default) In this mode the Mod Organizer itself injects the dll. The disadvantage is that you always have to start the game through MO or a link created by it.
@@ -6086,17 +6467,17 @@ If you use the Steam version of Oblivion the default will NOT work. In this case
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="611"/>
+ <location filename="settingsdialog.ui" line="649"/>
<source>NMM Version</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="631"/>
+ <location filename="settingsdialog.ui" line="669"/>
<source>The Version of Nexus Mod Manager to impersonate.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="634"/>
+ <location filename="settingsdialog.ui" line="672"/>
<source>Mod Organizer uses an API provided by the Nexus to provide features like checking for updates and downloading files. Unfortunately this API has not been made available officially to third party tools like MO so we have to impersonate the Nexus Mod Manager to be allowed in.
On top of this Nexus has used the client identification to lock out outdated versions of NMM to force users to update. This means that MO also needs to impersonate the new version of NMM even if MO doesn&apos;t need an update. Therefore you can configure the version to identify as here.
Please note that MO does identify itself as MO to the webserver, it&apos;s not lying about what it is. It is merely adding a &quot;compatible&quot; NMM version to the user agent.
@@ -6105,53 +6486,53 @@ tl;dr-version: If Nexus-features don&apos;t work, insert the current version num
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="656"/>
+ <location filename="settingsdialog.ui" line="694"/>
<source>Enforces that inactive ESPs and ESMs are never loaded.</source>
<translation>Stellt sicher, dass inaktive ESP und ESM Dateien nie geladen werden.</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="659"/>
+ <location filename="settingsdialog.ui" line="697"/>
<source>It seems that the Games occasionally load ESP or ESM files even if they haven&apos;t been activated as plugins.
I don&apos;t yet know what the circumstances are, but user reports imply it is in some cases unwanted. If this is checked, ESPs and ESMs not checked in the List are invisible to the game and can not be loaded.</source>
<translation>Manche Spiele scheinen gelegentlich ESP oder ESM Dateien zu laden auch wenn sie nicht als Plugins aktiviert wurden.
Wenn der Haken aktiviert wurde, sind ESP und ESM Dateien die nicht ausgewählt wurden für das Spiel unsichtbar und können nicht geladen werden.</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="663"/>
+ <location filename="settingsdialog.ui" line="701"/>
<source>Hide inactive ESPs/ESMs</source>
<translation>Inaktive ESP / ESM ausblenden</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="670"/>
+ <location filename="settingsdialog.ui" line="708"/>
<source>If checked, files (i.e. esps, esms and bsas) belonging to the core game can not be disabled in the UI. (default: on)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="673"/>
+ <location filename="settingsdialog.ui" line="711"/>
<source>If checked, files (i.e. esps, esms and bsas) belonging to the core game can not be disabled in the UI. (default: on)
Uncheck this if you want to use Mod Organizer with total conversions (like Nehrim) but be aware that the game will crash if required files are not enabled.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="677"/>
+ <location filename="settingsdialog.ui" line="715"/>
<source>Force-enable game files</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="687"/>
- <location filename="settingsdialog.ui" line="691"/>
+ <location filename="settingsdialog.ui" line="725"/>
+ <location filename="settingsdialog.ui" line="729"/>
<source>For Skyrim, this can be used instead of Archive Invalidation. It should make AI redundant for all Profiles.
For the other games this is not a sufficient replacement for AI!</source>
<translation>Für Skyrim kann dies als Alternative zur Archiv Invalidierung verwendet werden. Damit erübrigt sich AI für alle Profile.
Für die anderen Spiele ist dies KEIN hinreichender Ersatz für AI!</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="695"/>
+ <location filename="settingsdialog.ui" line="733"/>
<source>Back-date BSAs</source>
<translation>BSAs zurückdatieren</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="719"/>
+ <location filename="settingsdialog.ui" line="757"/>
<source>These are workarounds for problems with Mod Organizer. Please make sure you read the help text before changing anything here.</source>
<translation type="unfinished"></translation>
</message>
@@ -6164,7 +6545,7 @@ Für die anderen Spiele ist dies KEIN hinreichender Ersatz für AI!</translation
<translation type="obsolete">Lade-Methode</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="591"/>
+ <location filename="settingsdialog.ui" line="629"/>
<source>Select loading mechanism. See help for details.</source>
<translation>Lade-Mechanismus auswählen. Siehe Hilfe für mehr Details.</translation>
</message>
@@ -6189,17 +6570,17 @@ p, li { white-space: pre-wrap; }
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt; font-weight:600;&quot;&gt;Proxy DLL&lt;/span&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt; In diesem Modus ersetzt MO eine der dll Dateien des Spiels mit einer eigenen Version, die MO lädt (und die originale dll natürlich). Dies funktioniert NUR mit Steam Versionen und wurde bisher nur mit Skyrim getestet. Bitte verwenden Sie diesen Modus nur, wenn keine der anderen Varianten funktioniert.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="517"/>
+ <location filename="settingsdialog.ui" line="555"/>
<source>Steam App ID</source>
<translation>Steam AppID</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="537"/>
+ <location filename="settingsdialog.ui" line="575"/>
<source>The Steam AppID for your game</source>
<translation>Die Steam AppID für Ihr Spiel</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="540"/>
+ <location filename="settingsdialog.ui" line="578"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
@@ -6268,37 +6649,37 @@ p, li { white-space: pre-wrap; }
<translation>Automatisch in Nexus anmelden</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="285"/>
+ <location filename="settingsdialog.ui" line="282"/>
<source>Username</source>
<translation>Nutzername</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="299"/>
+ <location filename="settingsdialog.ui" line="296"/>
<source>Password</source>
<translation>Kennwort</translation>
</message>
<message>
- <location filename="settingsdialog.cpp" line="89"/>
+ <location filename="settingsdialog.cpp" line="95"/>
<source>Select download directory</source>
<translation>Download-Verzeichnis wählen</translation>
</message>
<message>
- <location filename="settingsdialog.cpp" line="97"/>
+ <location filename="settingsdialog.cpp" line="103"/>
<source>Select mod directory</source>
<translation>Mod-Verzeichnis wählen</translation>
</message>
<message>
- <location filename="settingsdialog.cpp" line="105"/>
+ <location filename="settingsdialog.cpp" line="111"/>
<source>Select cache directory</source>
<translation>Cache-Verzeichnis wählen</translation>
</message>
<message>
- <location filename="settingsdialog.cpp" line="113"/>
+ <location filename="settingsdialog.cpp" line="119"/>
<source>Confirm?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.cpp" line="114"/>
+ <location filename="settingsdialog.cpp" line="120"/>
<source>This will make all dialogs show up again where you checked the &quot;Remember selection&quot;-box. Continue?</source>
<translation type="unfinished"></translation>
</message>
@@ -6428,9 +6809,13 @@ p, li { white-space: pre-wrap; }
<context>
<name>TransferSavesDialog</name>
<message>
- <location filename="transfersavesdialog.ui" line="14"/>
<source>Dialog</source>
- <translation type="unfinished">Dialog</translation>
+ <translation type="obsolete">Dialog</translation>
+ </message>
+ <message>
+ <location filename="transfersavesdialog.ui" line="14"/>
+ <source>Transfer Savegames</source>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="transfersavesdialog.ui" line="22"/>
@@ -6450,8 +6835,16 @@ On Windows Vista/Windows 7:
C:\Users\[UserName]\Documents\My Games\Skyrim\Saves
On Windows XP:
- C:\Documents and Settings[UserName]\My Documents\My Games\Skyrim\Saves
+ C:\Documents and Settings\[UserName]\My Documents\My Games\Skyrim\Saves
</source>
+ <oldsource>This is a list of characters in the global location.
+
+On Windows Vista/Windows 7:
+ C:\Users\[UserName]\Documents\My Games\Skyrim\Saves
+
+On Windows XP:
+ C:\Documents and Settings[UserName]\My Documents\My Games\Skyrim\Saves
+</oldsource>
<translation type="unfinished"></translation>
</message>
<message>
diff --git a/src/organizer_es.qm b/src/organizer_es.qm
deleted file mode 100644
index 94abcb00..00000000
--- a/src/organizer_es.qm
+++ /dev/null
Binary files differ
diff --git a/src/organizer_es.ts b/src/organizer_es.ts
index acdff666..1dcb62c3 100644
--- a/src/organizer_es.ts
+++ b/src/organizer_es.ts
@@ -2,6 +2,50 @@
<!DOCTYPE TS>
<TS version="2.0" language="es">
<context>
+ <name>AboutDialog</name>
+ <message>
+ <location filename="aboutdialog.ui" line="14"/>
+ <location filename="aboutdialog.ui" line="53"/>
+ <source>About</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="aboutdialog.ui" line="66"/>
+ <source>Revision:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="aboutdialog.ui" line="104"/>
+ <source>Used Software</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="aboutdialog.ui" line="117"/>
+ <source>Credits</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="aboutdialog.ui" line="123"/>
+ <source>Translators</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="aboutdialog.ui" line="189"/>
+ <source>Others</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="aboutdialog.ui" line="266"/>
+ <source>Close</source>
+ <translation type="unfinished">Cerrar</translation>
+ </message>
+ <message>
+ <location filename="aboutdialog.cpp" line="81"/>
+ <source>No license</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>ActivateModsDialog</name>
<message>
<location filename="activatemodsdialog.ui" line="14"/>
@@ -232,25 +276,30 @@ p, li { white-space: pre-wrap; }
<context>
<name>DownloadList</name>
<message>
- <location filename="downloadlist.cpp" line="63"/>
+ <location filename="downloadlist.cpp" line="64"/>
<source>Name</source>
<translation type="unfinished">Nombre</translation>
</message>
<message>
- <location filename="downloadlist.cpp" line="64"/>
+ <location filename="downloadlist.cpp" line="65"/>
<source>Filetime</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlist.cpp" line="65"/>
+ <location filename="downloadlist.cpp" line="66"/>
<source>Done</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlist.cpp" line="79"/>
+ <location filename="downloadlist.cpp" line="82"/>
<source>Information missing, please select &quot;Query Info&quot; from the context menu to re-retrieve.</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <location filename="downloadlist.cpp" line="89"/>
+ <source>pending download</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>DownloadListWidget</name>
@@ -261,16 +310,6 @@ p, li { white-space: pre-wrap; }
<translation>Marcador de posicion</translation>
</message>
<message>
- <location filename="downloadlistwidget.ui" line="81"/>
- <source>0</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="downloadlistwidget.ui" line="88"/>
- <source>KB</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<location filename="downloadlistwidget.ui" line="99"/>
<location filename="downloadlistwidget.cpp" line="145"/>
<location filename="downloadlistwidget.cpp" line="147"/>
@@ -313,120 +352,135 @@ p, li { white-space: pre-wrap; }
<context>
<name>DownloadListWidgetCompactDelegate</name>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="215"/>
- <location filename="downloadlistwidgetcompact.cpp" line="224"/>
- <location filename="downloadlistwidgetcompact.cpp" line="233"/>
- <location filename="downloadlistwidgetcompact.cpp" line="242"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="241"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="250"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="259"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="268"/>
<source>Are you sure?</source>
<translation type="unfinished">Estas seguro?</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="216"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="242"/>
<source>This will remove all finished downloads from this list and from disk.</source>
<translation type="unfinished">Esto limpiara todas las descargas finalizadas del disco y la lista.</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="225"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="251"/>
<source>This will remove all installed downloads from this list and from disk.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="269"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="298"/>
<source>Install</source>
<translation type="unfinished">Instalar</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="271"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="300"/>
<source>Query Info</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="279"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="312"/>
<source>Remove</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="276"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="309"/>
<source>Cancel</source>
<translation type="unfinished">Cancelar</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="120"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="88"/>
+ <source>&lt; mod %1 file %2 &gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="downloadlistwidgetcompact.cpp" line="93"/>
+ <source>Pending</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="downloadlistwidgetcompact.cpp" line="116"/>
<source>Paused</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="123"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="119"/>
<source>Fetching Info 1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="125"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="121"/>
<source>Fetching Info 2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="130"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="126"/>
<source>Installed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="133"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="129"/>
<source>Uninstalled</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="136"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="132"/>
<source>Done</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="234"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="260"/>
<source>This will permanently remove all finished downloads from this list (but NOT from disk).</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="243"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="269"/>
<source>This will permanently remove all installed downloads from this list (but NOT from disk).</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="273"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="302"/>
<source>Delete</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="274"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="304"/>
+ <source>Un-Hide</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="downloadlistwidgetcompact.cpp" line="306"/>
<source>Remove from View</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="277"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="310"/>
<source>Pause</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="280"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="313"/>
<source>Resume</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="284"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="318"/>
<source>Delete Installed...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="285"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="319"/>
<source>Delete All...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="287"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="322"/>
<source>Remove Installed...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="288"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="323"/>
<source>Remove All...</source>
<translation type="unfinished">Quitar todos...</translation>
</message>
@@ -434,64 +488,79 @@ p, li { white-space: pre-wrap; }
<context>
<name>DownloadListWidgetDelegate</name>
<message>
- <location filename="downloadlistwidget.cpp" line="228"/>
- <location filename="downloadlistwidget.cpp" line="237"/>
- <location filename="downloadlistwidget.cpp" line="246"/>
- <location filename="downloadlistwidget.cpp" line="255"/>
+ <location filename="downloadlistwidget.cpp" line="253"/>
+ <location filename="downloadlistwidget.cpp" line="262"/>
+ <location filename="downloadlistwidget.cpp" line="271"/>
+ <location filename="downloadlistwidget.cpp" line="280"/>
<source>Are you sure?</source>
<translation>Estas seguro?</translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="229"/>
+ <location filename="downloadlistwidget.cpp" line="254"/>
<source>This will remove all finished downloads from this list and from disk.</source>
<translation>Esto limpiara todas las descargas finalizadas del disco y la lista.</translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="238"/>
+ <location filename="downloadlistwidget.cpp" line="263"/>
<source>This will remove all installed downloads from this list and from disk.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="247"/>
+ <location filename="downloadlistwidget.cpp" line="272"/>
<source>This will remove all finished downloads from this list (but NOT from disk).</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="256"/>
+ <location filename="downloadlistwidget.cpp" line="281"/>
<source>This will remove all installed downloads from this list (but NOT from disk).</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="281"/>
+ <location filename="downloadlistwidget.cpp" line="309"/>
<source>Install</source>
<translation>Instalar</translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="283"/>
+ <location filename="downloadlistwidget.cpp" line="311"/>
<source>Query Info</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="285"/>
+ <location filename="downloadlistwidget.cpp" line="313"/>
<source>Delete</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="286"/>
+ <location filename="downloadlistwidget.cpp" line="315"/>
+ <source>Un-Hide</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="downloadlistwidget.cpp" line="317"/>
<source>Remove from View</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="291"/>
+ <location filename="downloadlistwidget.cpp" line="323"/>
<source>Remove</source>
<translation>Quitar</translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="288"/>
+ <location filename="downloadlistwidget.cpp" line="320"/>
<source>Cancel</source>
<translation>Cancelar</translation>
</message>
<message>
+ <location filename="downloadlistwidget.cpp" line="88"/>
+ <source>&lt; mod %1 file %2 &gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="downloadlistwidget.cpp" line="91"/>
+ <source>Pending</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="downloadlistwidget.cpp" line="118"/>
<source>Fetching Info 1</source>
<translation type="unfinished"></translation>
@@ -502,32 +571,32 @@ p, li { white-space: pre-wrap; }
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="289"/>
+ <location filename="downloadlistwidget.cpp" line="321"/>
<source>Pause</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="292"/>
+ <location filename="downloadlistwidget.cpp" line="324"/>
<source>Resume</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="296"/>
+ <location filename="downloadlistwidget.cpp" line="329"/>
<source>Delete Installed...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="297"/>
+ <location filename="downloadlistwidget.cpp" line="330"/>
<source>Delete All...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="299"/>
+ <location filename="downloadlistwidget.cpp" line="333"/>
<source>Remove Installed...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="300"/>
+ <location filename="downloadlistwidget.cpp" line="334"/>
<source>Remove All...</source>
<translation>Quitar todos...</translation>
</message>
@@ -535,73 +604,88 @@ p, li { white-space: pre-wrap; }
<context>
<name>DownloadManager</name>
<message>
- <location filename="downloadmanager.cpp" line="125"/>
+ <location filename="downloadmanager.cpp" line="132"/>
<source>failed to rename &quot;%1&quot; to &quot;%2&quot;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="306"/>
+ <location filename="downloadmanager.cpp" line="342"/>
<source>Download again?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="306"/>
+ <location filename="downloadmanager.cpp" line="342"/>
<source>A file with the same name has already been downloaded. Do you want to download it again? The new file will receive a different name.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="336"/>
+ <location filename="downloadmanager.cpp" line="388"/>
<source>failed to download %1: could not open output file: %2</source>
<translation>error en la descarga %1: no se puede abrir el fichero de destino: %2</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="384"/>
+ <location filename="downloadmanager.cpp" line="421"/>
+ <source>Wrong Game</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="downloadmanager.cpp" line="421"/>
+ <source>The download link is for a mod for &quot;%1&quot; but this instance of MO has been set up for &quot;%2&quot;.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="downloadmanager.cpp" line="457"/>
<source>failed to delete %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="390"/>
+ <location filename="downloadmanager.cpp" line="463"/>
<source>failed to delete meta file for %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="450"/>
- <location filename="downloadmanager.cpp" line="468"/>
- <location filename="downloadmanager.cpp" line="481"/>
- <location filename="downloadmanager.cpp" line="494"/>
- <location filename="downloadmanager.cpp" line="505"/>
- <location filename="downloadmanager.cpp" line="540"/>
+ <location filename="downloadmanager.cpp" line="539"/>
+ <location filename="downloadmanager.cpp" line="557"/>
+ <location filename="downloadmanager.cpp" line="570"/>
+ <location filename="downloadmanager.cpp" line="587"/>
+ <location filename="downloadmanager.cpp" line="598"/>
+ <location filename="downloadmanager.cpp" line="633"/>
<source>invalid index %1</source>
<translation>indice invalido %1</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="899"/>
+ <location filename="downloadmanager.cpp" line="1042"/>
<source>Information updated</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="901"/>
- <location filename="downloadmanager.cpp" line="915"/>
+ <location filename="downloadmanager.cpp" line="1044"/>
+ <location filename="downloadmanager.cpp" line="1058"/>
<source>No matching file found on Nexus! Maybe this file is no longer available or it was renamed?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="903"/>
+ <location filename="downloadmanager.cpp" line="1046"/>
<source>No file on Nexus matches the selected file by name. Please manually choose the correct one.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="1032"/>
+ <location filename="downloadmanager.cpp" line="1180"/>
<source>No download server available. Please try again later.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="1074"/>
+ <location filename="downloadmanager.cpp" line="1224"/>
<source>Failed to request file info from nexus: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="1097"/>
+ <location filename="downloadmanager.cpp" line="1249"/>
+ <source>Download failed. Server reported: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="downloadmanager.cpp" line="1251"/>
<source>Download failed: %1 (%2)</source>
<translation type="unfinished"></translation>
</message>
@@ -610,27 +694,31 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">error borrando el fichero</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="366"/>
- <location filename="downloadmanager.cpp" line="585"/>
- <location filename="downloadmanager.cpp" line="595"/>
- <location filename="downloadmanager.cpp" line="604"/>
- <location filename="downloadmanager.cpp" line="614"/>
- <location filename="downloadmanager.cpp" line="624"/>
- <location filename="downloadmanager.cpp" line="634"/>
- <location filename="downloadmanager.cpp" line="645"/>
- <location filename="downloadmanager.cpp" line="654"/>
- <location filename="downloadmanager.cpp" line="664"/>
- <location filename="downloadmanager.cpp" line="679"/>
+ <location filename="downloadmanager.cpp" line="439"/>
+ <location filename="downloadmanager.cpp" line="506"/>
+ <location filename="downloadmanager.cpp" line="682"/>
+ <location filename="downloadmanager.cpp" line="691"/>
+ <location filename="downloadmanager.cpp" line="701"/>
+ <location filename="downloadmanager.cpp" line="710"/>
+ <location filename="downloadmanager.cpp" line="724"/>
+ <location filename="downloadmanager.cpp" line="734"/>
+ <location filename="downloadmanager.cpp" line="744"/>
+ <location filename="downloadmanager.cpp" line="754"/>
+ <location filename="downloadmanager.cpp" line="765"/>
+ <location filename="downloadmanager.cpp" line="773"/>
+ <location filename="downloadmanager.cpp" line="782"/>
+ <location filename="downloadmanager.cpp" line="792"/>
+ <location filename="downloadmanager.cpp" line="807"/>
<source>invalid index</source>
<translation>indice invalido</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="557"/>
+ <location filename="downloadmanager.cpp" line="650"/>
<source>Please enter the nexus mod id</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="557"/>
+ <location filename="downloadmanager.cpp" line="650"/>
<source>Mod ID:</source>
<translation type="unfinished"></translation>
</message>
@@ -639,7 +727,7 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">Fallo la peticion de fichero de Nexus!</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="1174"/>
+ <location filename="downloadmanager.cpp" line="1331"/>
<source>failed to re-open %1</source>
<translation>error reabriendo %1</translation>
</message>
@@ -751,7 +839,7 @@ Right now the only case I know of where this needs to be overwritten is for the
<message>
<location filename="editexecutablesdialog.ui" line="169"/>
<location filename="editexecutablesdialog.ui" line="172"/>
- <location filename="editexecutablesdialog.cpp" line="220"/>
+ <location filename="editexecutablesdialog.cpp" line="258"/>
<source>If checked, MO will be closed once the specified executable is run.</source>
<translation>Si esta seleccionado, MO se cerrada automaticamente al ejecutar el fichero.</translation>
</message>
@@ -768,7 +856,7 @@ Right now the only case I know of where this needs to be overwritten is for the
</message>
<message>
<location filename="editexecutablesdialog.ui" line="188"/>
- <location filename="editexecutablesdialog.cpp" line="190"/>
+ <location filename="editexecutablesdialog.cpp" line="196"/>
<source>Add</source>
<translation>Añadir</translation>
</message>
@@ -784,42 +872,59 @@ Right now the only case I know of where this needs to be overwritten is for the
<translation>Quitar</translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="119"/>
+ <location filename="editexecutablesdialog.ui" line="233"/>
+ <source>Close</source>
+ <translation type="unfinished">Cerrar</translation>
+ </message>
+ <message>
+ <location filename="editexecutablesdialog.cpp" line="125"/>
<source>Select a binary</source>
<translation>Selecciona el fichero</translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="119"/>
+ <location filename="editexecutablesdialog.cpp" line="125"/>
<source>Executable (%1)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="143"/>
+ <location filename="editexecutablesdialog.cpp" line="149"/>
<source>Java (32-bit) required</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="144"/>
+ <location filename="editexecutablesdialog.cpp" line="150"/>
<source>MO requires 32-bit java to run this application. If you already have it installed, select javaw.exe from that installation as the binary.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="160"/>
+ <location filename="editexecutablesdialog.cpp" line="166"/>
<source>Select a directory</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="169"/>
+ <location filename="editexecutablesdialog.cpp" line="175"/>
<source>Confirm</source>
<translation type="unfinished">Confirma</translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="169"/>
+ <location filename="editexecutablesdialog.cpp" line="175"/>
<source>Really remove &quot;%1&quot; from executables?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="217"/>
+ <location filename="editexecutablesdialog.cpp" line="230"/>
+ <location filename="editexecutablesdialog.cpp" line="278"/>
+ <source>Save Changes?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="editexecutablesdialog.cpp" line="231"/>
+ <location filename="editexecutablesdialog.cpp" line="279"/>
+ <source>You made changes to the current executable, do you want to save them?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="editexecutablesdialog.cpp" line="255"/>
<source>MO must be kept running or this application will not work correctly.</source>
<translation type="unfinished"></translation>
</message>
@@ -828,7 +933,7 @@ Right now the only case I know of where this needs to be overwritten is for the
<translation type="obsolete">Ejecutable (*.exe *.bat)</translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="194"/>
+ <location filename="editexecutablesdialog.cpp" line="200"/>
<source>Modify</source>
<translation>Modificar</translation>
</message>
@@ -1049,12 +1154,12 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">mo_archive no cargado: &quot;%1&quot;</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="97"/>
+ <location filename="installationmanager.cpp" line="98"/>
<source>Password required</source>
<translation>Contraseña requerida</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="97"/>
+ <location filename="installationmanager.cpp" line="98"/>
<source>Password</source>
<translation>Contraseña</translation>
</message>
@@ -1068,18 +1173,18 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="installationmanager.cpp" line="164"/>
- <location filename="installationmanager.cpp" line="252"/>
- <location filename="installationmanager.cpp" line="530"/>
+ <location filename="installationmanager.cpp" line="248"/>
+ <location filename="installationmanager.cpp" line="529"/>
<source>Extracting files</source>
<translation>Extrayendo ficheros</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="772"/>
+ <location filename="installationmanager.cpp" line="757"/>
<source>failed to open archive</source>
<translation>Error abriendo el fichero</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="624"/>
+ <location filename="installationmanager.cpp" line="609"/>
<source>File format &quot;%1&quot; not supported</source>
<translation>Formato de archivo no soportado para &quot;%1&quot;</translation>
</message>
@@ -1096,77 +1201,77 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">Confirma</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="75"/>
+ <location filename="installationmanager.cpp" line="76"/>
<source>archive.dll not loaded: &quot;%1&quot;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="443"/>
+ <location filename="installationmanager.cpp" line="439"/>
<source>failed to create backup</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="449"/>
+ <location filename="installationmanager.cpp" line="448"/>
<source>Mod Name</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="449"/>
+ <location filename="installationmanager.cpp" line="448"/>
<source>Name</source>
<translation type="unfinished">Nombre</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="502"/>
+ <location filename="installationmanager.cpp" line="501"/>
<source>Invalid name</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="503"/>
+ <location filename="installationmanager.cpp" line="502"/>
<source>The name you entered is invalid, please enter a different one.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="750"/>
+ <location filename="installationmanager.cpp" line="735"/>
<source>None of the available installer plugins were able to handle that archive</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="760"/>
+ <location filename="installationmanager.cpp" line="745"/>
<source>no error</source>
<translation>sin error</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="763"/>
+ <location filename="installationmanager.cpp" line="748"/>
<source>7z.dll not found</source>
<translation>7z.dll no se encuentra</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="766"/>
+ <location filename="installationmanager.cpp" line="751"/>
<source>7z.dll isn&apos;t valid</source>
<translation>7z.dll no es valido</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="769"/>
+ <location filename="installationmanager.cpp" line="754"/>
<source>archive not found</source>
<translation>archivo no encontrado</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="775"/>
+ <location filename="installationmanager.cpp" line="760"/>
<source>unsupported archive type</source>
<translation>formato de fichero no soportado</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="778"/>
+ <location filename="installationmanager.cpp" line="763"/>
<source>internal library error</source>
<translation>error interno de libreria</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="781"/>
+ <location filename="installationmanager.cpp" line="766"/>
<source>archive invalid</source>
<translation>archivo invalido</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="785"/>
+ <location filename="installationmanager.cpp" line="770"/>
<source>unknown archive error</source>
<translatorcomment>error desconocido del archivo</translatorcomment>
<translation>Error de fichero desconocido</translation>
@@ -1190,7 +1295,7 @@ p, li { white-space: pre-wrap; }
<translation>MO esta bloqueado mientras se ejecute el programa.</translation>
</message>
<message>
- <location filename="lockeddialog.ui" line="51"/>
+ <location filename="lockeddialog.ui" line="54"/>
<source>Unlock</source>
<translation>Desbloqueado</translation>
</message>
@@ -1198,7 +1303,7 @@ p, li { white-space: pre-wrap; }
<context>
<name>LogBuffer</name>
<message>
- <location filename="logbuffer.cpp" line="72"/>
+ <location filename="logbuffer.cpp" line="73"/>
<source>failed to write log to %1: %2</source>
<translation type="unfinished"></translation>
</message>
@@ -1206,12 +1311,12 @@ p, li { white-space: pre-wrap; }
<context>
<name>MOApplication</name>
<message>
- <location filename="moapplication.cpp" line="60"/>
+ <location filename="moapplication.cpp" line="68"/>
<source>an error occured: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="moapplication.cpp" line="65"/>
+ <location filename="moapplication.cpp" line="73"/>
<source>an error occured</source>
<translation type="unfinished"></translation>
</message>
@@ -1282,8 +1387,8 @@ Por favor observa que las prioridades no son guardadas para cada perfil.</transl
</message>
<message>
<location filename="mainwindow.ui" line="405"/>
- <location filename="mainwindow.ui" line="722"/>
- <location filename="mainwindow.ui" line="1027"/>
+ <location filename="mainwindow.ui" line="724"/>
+ <location filename="mainwindow.ui" line="1046"/>
<source>Namefilter</source>
<translation type="unfinished"></translation>
</message>
@@ -1363,12 +1468,12 @@ p, li { white-space: pre-wrap; }
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="751"/>
+ <location filename="mainwindow.ui" line="762"/>
<source>List of available BS Archives. Archives not checked here are not managed by MO and ignore installation order.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="754"/>
+ <location filename="mainwindow.ui" line="765"/>
<source>BSA files are archives (comparable to .zip files) that contain data assets (meshes, textures, ...) to be used by the game. As such they &quot;compete&quot; with loose files in your data directory over which is loaded.
By default, BSAs that share their base name with an enabled ESP (i.e. plugin.esp and plugin.bsa) are automatically loaded and will have precedence over all loose files, the installation order you set up to the left is then ignored!
@@ -1376,67 +1481,81 @@ BSAs checked here are loaded in such a way that your installation order is obeye
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="794"/>
- <location filename="mainwindow.ui" line="868"/>
+ <location filename="mainwindow.ui" line="811"/>
+ <location filename="mainwindow.ui" line="880"/>
<source>File</source>
<translation type="unfinished">Fichero</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="799"/>
- <location filename="mainwindow.ui" line="873"/>
+ <location filename="mainwindow.ui" line="819"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Marked Archives (&lt;img src=&quot;:/MO/gui/warning_16&quot;/&gt;) are still loaded on Skyrim but the &lt;a href=&quot;http://forums.bethsoft.com/topic/1354395-update-bsas-and-you/&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;regular file override&lt;/span&gt;&lt;/a&gt; mechanism will apply: Loose files override BSAs, no matter the mod/plugin priority.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.ui" line="885"/>
<source>Mod</source>
<translation type="unfinished">Mod</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="807"/>
- <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Marked Archives (&lt;img src=&quot;:/MO/gui/resources/dialog-warning_16.png&quot;/&gt;) are still loaded on Skyrim but the &lt;a href=&quot;http://forums.bethsoft.com/topic/1354395-update-bsas-and-you/&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;regular file override&lt;/span&gt;&lt;/a&gt; mechanism will apply: Loose files override BSAs, no matter the mod/plugin priority.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <location filename="mainwindow.ui" line="830"/>
+ <source>Data</source>
+ <translation type="unfinished">Datos</translation>
+ </message>
+ <message>
+ <location filename="mainwindow.ui" line="605"/>
+ <source>Plugins</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="818"/>
- <source>Data</source>
- <translation type="unfinished">Datos</translation>
+ <location filename="mainwindow.ui" line="731"/>
+ <source>Sort</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.ui" line="741"/>
+ <source>Archives</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="836"/>
+ <location filename="mainwindow.ui" line="848"/>
<source>refresh data-directory overview</source>
<translation type="unfinished">refresca la vista del directorio de datos</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="839"/>
+ <location filename="mainwindow.ui" line="851"/>
<source>Refresh the overview. This may take a moment.</source>
<translation type="unfinished">Refresca toda la vista. Esto puede tomar un tiempo.</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="842"/>
- <location filename="mainwindow.cpp" line="3328"/>
- <location filename="mainwindow.cpp" line="4059"/>
+ <location filename="mainwindow.ui" line="854"/>
+ <location filename="mainwindow.cpp" line="3781"/>
+ <location filename="mainwindow.cpp" line="4604"/>
<source>Refresh</source>
<translation type="unfinished">Recargar</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="858"/>
+ <location filename="mainwindow.ui" line="870"/>
<source>This is an overview of your data directory as visible to the game (and tools). </source>
<translation type="unfinished">Esta es una visión general del directorio de datos como visible para el juego (y herramientas).</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="883"/>
- <location filename="mainwindow.ui" line="886"/>
+ <location filename="mainwindow.ui" line="895"/>
+ <location filename="mainwindow.ui" line="898"/>
<source>Filter the above list so that only conflicts are displayed.</source>
<translation type="unfinished">Filrar la lista superior por conflictos.</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="889"/>
+ <location filename="mainwindow.ui" line="901"/>
<source>Show only conflicts</source>
<translation type="unfinished">Monstrar solo los conflictos</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="897"/>
+ <location filename="mainwindow.ui" line="909"/>
<source>Saves</source>
<translation type="unfinished">Part. Guardadas</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="921"/>
+ <location filename="mainwindow.ui" line="933"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
@@ -1447,155 +1566,160 @@ p, li { white-space: pre-wrap; }
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="935"/>
+ <location filename="mainwindow.ui" line="947"/>
<source>Downloads</source>
<translation type="unfinished">Descargas</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="967"/>
+ <location filename="mainwindow.ui" line="979"/>
<source>This is a list of mods you downloaded from Nexus. Double click one to install it.</source>
<translation type="unfinished">Esta es la lista de los mods que has descargado desde Nexus. Doble Click para instalar.</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1020"/>
+ <location filename="mainwindow.ui" line="1032"/>
<source>Compact</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1051"/>
+ <location filename="mainwindow.ui" line="1039"/>
+ <source>Show Hidden</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.ui" line="1070"/>
<source>Tool Bar</source>
<translation type="unfinished">Tool Bar</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1093"/>
+ <location filename="mainwindow.ui" line="1112"/>
<source>Install Mod</source>
<translation type="unfinished">Instalar Mod</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1096"/>
+ <location filename="mainwindow.ui" line="1115"/>
<source>Install &amp;Mod</source>
<translation type="unfinished">Instalar &amp;Mod</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1099"/>
+ <location filename="mainwindow.ui" line="1118"/>
<source>Install a new mod from an archive</source>
<translation type="unfinished">Instalar un nuevo Mod desde un archivo</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1102"/>
+ <location filename="mainwindow.ui" line="1121"/>
<source>Ctrl+M</source>
<translation type="unfinished">Ctrl+M</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1111"/>
+ <location filename="mainwindow.ui" line="1130"/>
<source>Profiles</source>
<translation type="unfinished">Perfiles</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1114"/>
+ <location filename="mainwindow.ui" line="1133"/>
<source>&amp;Profiles</source>
<translation type="unfinished">&amp;Perfiles</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1117"/>
+ <location filename="mainwindow.ui" line="1136"/>
<source>Configure Profiles</source>
<translation type="unfinished">Configurar los perfiles</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1120"/>
+ <location filename="mainwindow.ui" line="1139"/>
<source>Ctrl+P</source>
<translation type="unfinished">Ctrl+P</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1129"/>
+ <location filename="mainwindow.ui" line="1148"/>
<source>Executables</source>
<translation type="unfinished">Ejecutables</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1132"/>
+ <location filename="mainwindow.ui" line="1151"/>
<source>&amp;Executables</source>
<translation type="unfinished">&amp;Ejecutables</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1135"/>
+ <location filename="mainwindow.ui" line="1154"/>
<source>Configure the executables that can be started through Mod Organizer</source>
<translation type="unfinished">Configura el ejecutable que sera iniciado desde Mod Orgenizer</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1138"/>
+ <location filename="mainwindow.ui" line="1157"/>
<source>Ctrl+E</source>
<translation type="unfinished">Ctrl+E</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1147"/>
- <location filename="mainwindow.ui" line="1153"/>
+ <location filename="mainwindow.ui" line="1166"/>
+ <location filename="mainwindow.ui" line="1172"/>
<source>Tools</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1150"/>
+ <location filename="mainwindow.ui" line="1169"/>
<source>&amp;Tools</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1156"/>
+ <location filename="mainwindow.ui" line="1175"/>
<source>Ctrl+I</source>
<translation type="unfinished">Ctrl+I</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1165"/>
+ <location filename="mainwindow.ui" line="1184"/>
<source>Settings</source>
<translation type="unfinished">Configuracion</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1168"/>
+ <location filename="mainwindow.ui" line="1187"/>
<source>&amp;Settings</source>
<translation type="unfinished">&amp;Configuracion</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1171"/>
+ <location filename="mainwindow.ui" line="1190"/>
<source>Configure settings and workarounds</source>
<translation type="unfinished">Configuraciones y modos</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1174"/>
+ <location filename="mainwindow.ui" line="1193"/>
<source>Ctrl+S</source>
<translation type="unfinished">Ctrl+S</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1183"/>
+ <location filename="mainwindow.ui" line="1202"/>
<source>Nexus</source>
<translation type="unfinished">Nexus</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1186"/>
+ <location filename="mainwindow.ui" line="1205"/>
<source>Search nexus network for more mods</source>
<translation type="unfinished">Buscar en la red de Nexus mas Mods</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1189"/>
+ <location filename="mainwindow.ui" line="1208"/>
<source>Ctrl+N</source>
<translation type="unfinished">Ctrl+N</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1201"/>
- <location filename="mainwindow.cpp" line="4007"/>
+ <location filename="mainwindow.ui" line="1220"/>
+ <location filename="mainwindow.cpp" line="4545"/>
<source>Update</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1204"/>
+ <location filename="mainwindow.ui" line="1223"/>
<source>Mod Organizer is up-to-date</source>
<translation type="unfinished">Mod Organizer esta actualizado</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1216"/>
- <location filename="mainwindow.cpp" line="478"/>
+ <location filename="mainwindow.ui" line="1235"/>
+ <location filename="mainwindow.cpp" line="509"/>
<source>No Problems</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1219"/>
+ <location filename="mainwindow.ui" line="1238"/>
<source>This button will be highlighted if MO discovered potential problems in your setup and provide tips on how to fix them.
!Work in progress!
@@ -1603,445 +1727,497 @@ Right now this has very limited functionality</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1231"/>
- <location filename="mainwindow.ui" line="1234"/>
+ <location filename="mainwindow.ui" line="1250"/>
+ <location filename="mainwindow.ui" line="1253"/>
<source>Help</source>
<translation type="unfinished">Ayuda</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1237"/>
+ <location filename="mainwindow.ui" line="1256"/>
<source>Ctrl+H</source>
<translation type="unfinished">Ctrl+H</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1246"/>
+ <location filename="mainwindow.ui" line="1265"/>
<source>Endorse MO</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1249"/>
- <location filename="mainwindow.cpp" line="4087"/>
+ <location filename="mainwindow.ui" line="1268"/>
+ <location filename="mainwindow.cpp" line="4633"/>
<source>Endorse Mod Organizer</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="204"/>
+ <location filename="mainwindow.cpp" line="223"/>
<source>Toolbar</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="205"/>
+ <location filename="mainwindow.cpp" line="224"/>
<source>Desktop</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="206"/>
+ <location filename="mainwindow.cpp" line="225"/>
<source>Start Menu</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="475"/>
+ <location filename="mainwindow.cpp" line="505"/>
<source>Problems</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="476"/>
+ <location filename="mainwindow.cpp" line="506"/>
<source>There are potential problems with your setup</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="479"/>
+ <location filename="mainwindow.cpp" line="510"/>
<source>Everything seems to be in order</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="531"/>
+ <location filename="mainwindow.cpp" line="568"/>
<source>Help on UI</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="535"/>
+ <location filename="mainwindow.cpp" line="572"/>
<source>Documentation Wiki</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="539"/>
+ <location filename="mainwindow.cpp" line="576"/>
<source>Report Issue</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="543"/>
+ <location filename="mainwindow.cpp" line="580"/>
<source>Tutorials</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="670"/>
+ <location filename="mainwindow.cpp" line="705"/>
<source>failed to save load order: %1</source>
<translation type="unfinished">Fallo guardando el orden de carga: %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="600"/>
- <source>failed to save archives order, do you have write access to &quot;%1&quot;?</source>
+ <location filename="mainwindow.cpp" line="619"/>
+ <source>About</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="620"/>
+ <source>About Qt</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="687"/>
+ <location filename="mainwindow.cpp" line="717"/>
<source>Name</source>
<translation type="unfinished">Nombre</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="688"/>
+ <location filename="mainwindow.cpp" line="718"/>
<source>Please enter a name for the new profile</source>
<translation type="unfinished">Por favor introduzca un nombre para el nuevo perfil</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="696"/>
+ <location filename="mainwindow.cpp" line="726"/>
<source>failed to create profile: %1</source>
<translation type="unfinished">Fallo al crear el perfil: %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="739"/>
+ <location filename="mainwindow.cpp" line="769"/>
<source>Show tutorial?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="740"/>
+ <location filename="mainwindow.cpp" line="770"/>
<source>You are starting Mod Organizer for the first time. Do you want to show a tutorial of its basic features? If you choose no you can always start the tutorial from the &quot;Help&quot;-menu.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="769"/>
+ <location filename="mainwindow.cpp" line="801"/>
<source>Downloads in progress</source>
<translation type="unfinished">Descarga en progreso</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="770"/>
+ <location filename="mainwindow.cpp" line="802"/>
<source>There are still downloads in progress, do you really want to quit?</source>
<translation type="unfinished">Aun hay descargas en progreso, estas seguro que quieres salir?</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="816"/>
+ <location filename="mainwindow.cpp" line="848"/>
<source>failed to read savegame: %1</source>
<translation type="unfinished">Fallo al leer la partida guardada: %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="941"/>
+ <location filename="mainwindow.cpp" line="972"/>
<source>Plugin &quot;%1&quot; failed: %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1183"/>
+ <location filename="mainwindow.cpp" line="1085"/>
+ <source>Plugin error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="1086"/>
+ <source>It appears the plugin &quot;%1&quot; failed to load last startup and caused MO to crash. Do you want to disable it?
+(Please note: If this is the first time you see this message for this plugin you may want to give it another try. The plugin may be able to recover from the problem)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="1270"/>
<source>Failed to start &quot;%1&quot;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1185"/>
+ <location filename="mainwindow.cpp" line="1272"/>
<source>Waiting</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1185"/>
+ <location filename="mainwindow.cpp" line="1272"/>
<source>Please press OK once you&apos;re logged into steam.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1197"/>
<source>&quot;%1&quot; not found</source>
- <translation type="unfinished">&quot;%1&quot; no encontrado</translation>
+ <translation type="obsolete">&quot;%1&quot; no encontrado</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1211"/>
+ <location filename="mainwindow.cpp" line="1298"/>
<source>Start Steam?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1212"/>
+ <location filename="mainwindow.cpp" line="1299"/>
<source>Steam is required to be running already to correctly start the game. Should MO try to start steam now?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1426"/>
+ <location filename="mainwindow.cpp" line="1526"/>
<source>Also in: &lt;br&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1437"/>
+ <location filename="mainwindow.cpp" line="1537"/>
<source>No conflict</source>
<translation type="unfinished">Sin conflictos</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1552"/>
+ <location filename="mainwindow.cpp" line="1692"/>
<source>&lt;Edit...&gt;</source>
<translation type="unfinished">&lt;Editar...&gt;</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1771"/>
+ <location filename="mainwindow.cpp" line="1929"/>
<source>This bsa is enabled in the ini file so it may be required!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1778"/>
+ <location filename="mainwindow.cpp" line="1936"/>
<source>This archive will still be loaded since there is a plugin of the same name but its files will not follow installation order!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1833"/>
+ <location filename="mainwindow.cpp" line="1991"/>
<source>Activating Network Proxy</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1962"/>
- <location filename="mainwindow.cpp" line="3755"/>
+ <location filename="mainwindow.cpp" line="2122"/>
+ <location filename="mainwindow.cpp" line="4248"/>
<source>Installation successful</source>
<translation type="unfinished">Instalacion completada</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1973"/>
- <location filename="mainwindow.cpp" line="3768"/>
+ <location filename="mainwindow.cpp" line="2133"/>
+ <location filename="mainwindow.cpp" line="4261"/>
<source>Configure Mod</source>
<translation type="unfinished">Configurar Mod</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1974"/>
- <location filename="mainwindow.cpp" line="3769"/>
+ <location filename="mainwindow.cpp" line="2134"/>
+ <location filename="mainwindow.cpp" line="4262"/>
<source>This mod contains ini tweaks. Do you want to configure them now?</source>
<translation type="unfinished">Este mod contiene modificaciones del Ini. Quieres configurarlas ahora?</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1980"/>
- <location filename="mainwindow.cpp" line="3775"/>
+ <location filename="mainwindow.cpp" line="2140"/>
+ <location filename="mainwindow.cpp" line="4268"/>
<source>mod &quot;%1&quot; not found</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1983"/>
- <location filename="mainwindow.cpp" line="3781"/>
+ <location filename="mainwindow.cpp" line="2143"/>
+ <location filename="mainwindow.cpp" line="4274"/>
<source>Installation cancelled</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1983"/>
- <location filename="mainwindow.cpp" line="3781"/>
+ <location filename="mainwindow.cpp" line="2143"/>
+ <location filename="mainwindow.cpp" line="4274"/>
<source>The mod was not installed completely.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2018"/>
+ <location filename="mainwindow.cpp" line="2292"/>
<source>Some plugins could not be loaded</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2021"/>
- <location filename="mainwindow.cpp" line="2038"/>
+ <location filename="mainwindow.cpp" line="2295"/>
+ <source>Too many esps and esms enabled</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="2298"/>
+ <location filename="mainwindow.cpp" line="2319"/>
<source>Description missing</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2030"/>
- <source>The following Plugins could not be loaded. The reason may be missing dependencies (i.e. python) or an outdated version:&lt;ul&gt;</source>
+ <location filename="mainwindow.cpp" line="2315"/>
+ <source>The game doesn&apos;t allow more than 255 active plugins (including the official ones) to be loaded. You have to disable some unused plugins or merge some plugins into one. You can find a guide here: &lt;a href=&quot;http://wiki.step-project.com/Guide:Merging_Plugins&quot;&gt;http://wiki.step-project.com/Guide:Merging_Plugins&lt;/a&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2060"/>
+ <location filename="mainwindow.cpp" line="2341"/>
<source>Choose Mod</source>
<translation type="unfinished">Seleccione Mod</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2061"/>
+ <location filename="mainwindow.cpp" line="2342"/>
<source>Mod Archive</source>
<translation type="unfinished">Fichero Mod</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2214"/>
+ <location filename="mainwindow.cpp" line="2495"/>
<source>Start Tutorial?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2215"/>
+ <location filename="mainwindow.cpp" line="2496"/>
<source>You&apos;re about to start a tutorial. For technical reasons it&apos;s not possible to end the tutorial early. Continue?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2360"/>
- <location filename="mainwindow.cpp" line="3683"/>
+ <location filename="mainwindow.cpp" line="2651"/>
+ <location filename="mainwindow.cpp" line="4171"/>
<source>Download started</source>
<translation type="unfinished">Descarga comenzada</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2391"/>
+ <location filename="mainwindow.cpp" line="2682"/>
<source>failed to update mod list: %1</source>
<translation type="unfinished">Fallo al actualizar la lista de Mods: %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2418"/>
+ <location filename="mainwindow.cpp" line="2711"/>
<source>failed to spawn notepad.exe: %1</source>
<translation type="unfinished">Fallo al cargar el Bloc de notas: %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2459"/>
+ <location filename="mainwindow.cpp" line="2752"/>
<source>failed to open %1</source>
<translation type="unfinished">Fallo al abrir %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2537"/>
+ <location filename="mainwindow.cpp" line="2830"/>
<source>failed to change origin name: %1</source>
<translation type="unfinished">fallo al cambiar el nombre original del fichero %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2676"/>
+ <location filename="mainwindow.cpp" line="2860"/>
+ <source>failed to move &quot;%1&quot; from mod &quot;%2&quot; to &quot;%3&quot;: %4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="2997"/>
<source>Multiple esps activated, please check that they don&apos;t conflict.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3005"/>
- <location filename="mainwindow.cpp" line="3339"/>
+ <location filename="mainwindow.cpp" line="3345"/>
+ <location filename="mainwindow.cpp" line="3792"/>
<source>Create Mod...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3006"/>
- <source>This will move all files from overwrite into a new, regular mod.
-Please enter a name: </source>
+ <location filename="mainwindow.cpp" line="3355"/>
+ <source>A mod with this name already exists</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3015"/>
- <source>A mod with this name already exists</source>
+ <location filename="mainwindow.cpp" line="3613"/>
+ <source>Continue?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="3614"/>
+ <source>The versioning scheme decides which version is considered newer than another.
+This function will guess the versioning scheme under the assumption that the installed version is outdated.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3410"/>
+ <location filename="mainwindow.cpp" line="3634"/>
+ <location filename="mainwindow.cpp" line="4516"/>
+ <source>Sorry</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="3635"/>
+ <source>I don&apos;t know a versioning scheme where %1 is newer than %2.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="3883"/>
<source>&lt;All&gt;</source>
<translation type="unfinished">&lt;Todos&gt;</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2589"/>
+ <location filename="mainwindow.cpp" line="2909"/>
<source>&lt;Checked&gt;</source>
<translation type="unfinished">&lt;Marcado&gt;</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="943"/>
+ <location filename="mainwindow.cpp" line="974"/>
<source>Plugin &quot;%1&quot; failed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1007"/>
+ <location filename="mainwindow.cpp" line="1047"/>
<source>failed to init plugin %1: %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2590"/>
+ <location filename="mainwindow.cpp" line="2307"/>
+ <source>The following plugins could not be loaded. The reason may be missing dependencies (i.e. python) or an outdated version:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="2910"/>
<source>&lt;Unchecked&gt;</source>
<translation type="unfinished">&lt;Desmarcado&gt;</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2591"/>
+ <location filename="mainwindow.cpp" line="2911"/>
<source>&lt;Update&gt;</source>
<translation type="unfinished">&lt;Actualizacion&gt;</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2592"/>
+ <location filename="mainwindow.cpp" line="2912"/>
<source>&lt;No category&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2593"/>
+ <location filename="mainwindow.cpp" line="2913"/>
<source>&lt;Conflicted&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2626"/>
+ <location filename="mainwindow.cpp" line="2914"/>
+ <source>&lt;Not Endorsed&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="2947"/>
<source>failed to rename mod: %1</source>
<translation type="unfinished">fallo al cambiar el nombre al mod: %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2639"/>
+ <location filename="mainwindow.cpp" line="2960"/>
<source>Overwrite?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2640"/>
+ <location filename="mainwindow.cpp" line="2961"/>
<source>This will replace the existing mod &quot;%1&quot;. Continue?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2643"/>
+ <location filename="mainwindow.cpp" line="2964"/>
<source>failed to remove mod &quot;%1&quot;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2647"/>
- <location filename="mainwindow.cpp" line="3953"/>
- <location filename="mainwindow.cpp" line="3977"/>
+ <location filename="mainwindow.cpp" line="2968"/>
+ <location filename="mainwindow.cpp" line="4446"/>
+ <location filename="mainwindow.cpp" line="4470"/>
<source>failed to rename &quot;%1&quot; to &quot;%2&quot;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2702"/>
- <location filename="mainwindow.cpp" line="3243"/>
- <location filename="mainwindow.cpp" line="3252"/>
+ <location filename="mainwindow.cpp" line="3024"/>
+ <location filename="mainwindow.cpp" line="3687"/>
+ <location filename="mainwindow.cpp" line="3695"/>
+ <location filename="mainwindow.cpp" line="3902"/>
<source>Confirm</source>
<translation type="unfinished">Confirma</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2703"/>
+ <location filename="mainwindow.cpp" line="3025"/>
<source>Remove the following mods?&lt;br&gt;&lt;ul&gt;%1&lt;/ul&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2714"/>
+ <location filename="mainwindow.cpp" line="3036"/>
<source>failed to remove mod: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2744"/>
- <location filename="mainwindow.cpp" line="2747"/>
+ <location filename="mainwindow.cpp" line="3071"/>
+ <location filename="mainwindow.cpp" line="3074"/>
<source>Failed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2744"/>
+ <location filename="mainwindow.cpp" line="3071"/>
<source>Installation file no longer exists</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2748"/>
+ <location filename="mainwindow.cpp" line="3075"/>
<source>Mods installed with old versions of MO can&apos;t be reinstalled in this way.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2763"/>
- <location filename="mainwindow.cpp" line="2790"/>
+ <location filename="mainwindow.cpp" line="3090"/>
+ <location filename="mainwindow.cpp" line="3117"/>
<source>You need to be logged in with Nexus to endorse</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2906"/>
- <location filename="mainwindow.cpp" line="4335"/>
+ <location filename="mainwindow.cpp" line="3249"/>
+ <location filename="mainwindow.cpp" line="4882"/>
<source>Extract BSA</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2907"/>
+ <location filename="mainwindow.cpp" line="3250"/>
<source>This mod contains at least one BSA. Do you want to unpack it?
(This removes the BSA after completion. If you don&apos;t know about BSAs, just select no)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2917"/>
- <location filename="mainwindow.cpp" line="4292"/>
- <location filename="mainwindow.cpp" line="4343"/>
+ <location filename="mainwindow.cpp" line="3259"/>
+ <location filename="mainwindow.cpp" line="4839"/>
+ <location filename="mainwindow.cpp" line="4890"/>
<source>failed to read %1: %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2930"/>
- <location filename="mainwindow.cpp" line="4354"/>
+ <location filename="mainwindow.cpp" line="3272"/>
+ <location filename="mainwindow.cpp" line="4901"/>
<source>This archive contains invalid hashes. Some files may be broken.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2964"/>
+ <location filename="mainwindow.cpp" line="3306"/>
<source>Nexus ID for this Mod is unknown</source>
<translation type="unfinished"></translation>
</message>
@@ -2054,371 +2230,456 @@ Please enter a name: </source>
<translation type="obsolete">Selecciona Prioridad</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3243"/>
+ <location filename="mainwindow.cpp" line="3687"/>
<source>Really enable all visible mods?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3252"/>
+ <location filename="mainwindow.cpp" line="3695"/>
<source>Really disable all visible mods?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3261"/>
+ <location filename="mainwindow.cpp" line="3703"/>
<source>Choose what to export</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3263"/>
+ <location filename="mainwindow.cpp" line="3705"/>
<source>Everything</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3263"/>
+ <location filename="mainwindow.cpp" line="3705"/>
<source>All installed mods are included in the list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3264"/>
+ <location filename="mainwindow.cpp" line="3706"/>
<source>Active Mods</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3264"/>
+ <location filename="mainwindow.cpp" line="3706"/>
<source>Only active (checked) mods from your current profile are included</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3265"/>
+ <location filename="mainwindow.cpp" line="3707"/>
<source>Visible</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3265"/>
+ <location filename="mainwindow.cpp" line="3707"/>
<source>All mods visible in the mod list are included</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3308"/>
+ <location filename="mainwindow.cpp" line="3750"/>
<source>export failed: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3321"/>
+ <location filename="mainwindow.cpp" line="3774"/>
<source>Install Mod...</source>
<translation type="unfinished">Instalar Mod...</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3323"/>
+ <location filename="mainwindow.cpp" line="3776"/>
<source>Enable all visible</source>
<translation type="unfinished">Activar todos los visibles</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3324"/>
+ <location filename="mainwindow.cpp" line="3777"/>
<source>Disable all visible</source>
<translation type="unfinished">Desactivar todos los visibles</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3326"/>
+ <location filename="mainwindow.cpp" line="3779"/>
<source>Check all for update</source>
<translation type="unfinished">Buscar Actualizaciones</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3330"/>
+ <location filename="mainwindow.cpp" line="3783"/>
<source>Export to csv...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3338"/>
+ <location filename="mainwindow.cpp" line="3791"/>
<source>Sync to Mods...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3342"/>
+ <location filename="mainwindow.cpp" line="3795"/>
<source>Restore Backup</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3343"/>
+ <location filename="mainwindow.cpp" line="3796"/>
<source>Remove Backup...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3345"/>
<source>Set Category</source>
- <translation type="unfinished">Definir Categoria</translation>
+ <translation type="obsolete">Definir Categoria</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3349"/>
+ <location filename="mainwindow.cpp" line="3808"/>
<source>Primary Category</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3353"/>
+ <location filename="mainwindow.cpp" line="3815"/>
+ <source>Change versioning scheme</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="3819"/>
+ <source>Un-ignore update</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="3821"/>
+ <source>Ignore update</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="3826"/>
<source>Rename Mod...</source>
<translation type="unfinished">Cambiar nombre...</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3354"/>
+ <location filename="mainwindow.cpp" line="3827"/>
<source>Remove Mod...</source>
<translation type="unfinished">Quitar Mod...</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3355"/>
+ <location filename="mainwindow.cpp" line="3828"/>
<source>Reinstall Mod</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3358"/>
+ <location filename="mainwindow.cpp" line="3831"/>
<source>Un-Endorse</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3361"/>
- <location filename="mainwindow.cpp" line="3365"/>
+ <location filename="mainwindow.cpp" line="3834"/>
+ <location filename="mainwindow.cpp" line="3838"/>
<source>Endorse</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3362"/>
+ <location filename="mainwindow.cpp" line="3835"/>
<source>Won&apos;t endorse</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3368"/>
+ <location filename="mainwindow.cpp" line="3841"/>
<source>Endorsement state unknown</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3375"/>
+ <location filename="mainwindow.cpp" line="3848"/>
<source>Ignore missing data</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3378"/>
+ <location filename="mainwindow.cpp" line="3851"/>
<source>Visit on Nexus</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3379"/>
+ <location filename="mainwindow.cpp" line="3852"/>
<source>Open in explorer</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3382"/>
+ <location filename="mainwindow.cpp" line="3855"/>
<source>Information...</source>
<translation type="unfinished">Informacion...</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3388"/>
- <location filename="mainwindow.cpp" line="4514"/>
+ <location filename="mainwindow.cpp" line="3861"/>
+ <location filename="mainwindow.cpp" line="5086"/>
<source>Exception: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3390"/>
- <location filename="mainwindow.cpp" line="4516"/>
+ <location filename="mainwindow.cpp" line="3863"/>
+ <location filename="mainwindow.cpp" line="5088"/>
<source>Unknown exception</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3412"/>
+ <location filename="mainwindow.cpp" line="3885"/>
<source>&lt;Multiple&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3524"/>
+ <location filename="mainwindow.cpp" line="3902"/>
+ <source>Really delete &quot;%1&quot;?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="4013"/>
<source>Fix Mods...</source>
<translation type="unfinished">Activar Mods faltantes...</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3548"/>
- <location filename="mainwindow.cpp" line="3579"/>
+ <location filename="mainwindow.cpp" line="4014"/>
+ <source>Delete</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="4038"/>
+ <location filename="mainwindow.cpp" line="4069"/>
<source>failed to remove %1</source>
<translation type="unfinished">Fallo eliminando %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3563"/>
- <location filename="mainwindow.cpp" line="3594"/>
+ <location filename="mainwindow.cpp" line="4053"/>
+ <location filename="mainwindow.cpp" line="4084"/>
<source>failed to create %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3615"/>
+ <location filename="mainwindow.cpp" line="4107"/>
<source>Can&apos;t change download directory while downloads are in progress!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3686"/>
+ <location filename="mainwindow.cpp" line="4174"/>
<source>Download failed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3830"/>
+ <location filename="mainwindow.cpp" line="4323"/>
<source>failed to write to file %1</source>
<translation type="unfinished">Fallo de escritura en el fichero %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3836"/>
+ <location filename="mainwindow.cpp" line="4329"/>
<source>%1 written</source>
<translation type="unfinished">%1 escrito</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3875"/>
+ <location filename="mainwindow.cpp" line="4368"/>
<source>Select binary</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3875"/>
+ <location filename="mainwindow.cpp" line="4368"/>
<source>Binary</source>
<translation type="unfinished">Fichero</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3901"/>
+ <location filename="mainwindow.cpp" line="4394"/>
<source>Enter Name</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3902"/>
+ <location filename="mainwindow.cpp" line="4395"/>
<source>Please enter a name for the executable</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3913"/>
+ <location filename="mainwindow.cpp" line="4406"/>
<source>Not an executable</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3913"/>
+ <location filename="mainwindow.cpp" line="4406"/>
<source>This is not a recognized executable.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3938"/>
- <location filename="mainwindow.cpp" line="3963"/>
+ <location filename="mainwindow.cpp" line="4431"/>
+ <location filename="mainwindow.cpp" line="4456"/>
<source>Replace file?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3938"/>
+ <location filename="mainwindow.cpp" line="4431"/>
<source>There already is a hidden version of this file. Replace it?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3941"/>
- <location filename="mainwindow.cpp" line="3966"/>
+ <location filename="mainwindow.cpp" line="4434"/>
+ <location filename="mainwindow.cpp" line="4459"/>
<source>File operation failed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3941"/>
- <location filename="mainwindow.cpp" line="3966"/>
+ <location filename="mainwindow.cpp" line="4434"/>
+ <location filename="mainwindow.cpp" line="4459"/>
<source>Failed to remove &quot;%1&quot;. Maybe you lack the required file permissions?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3963"/>
+ <location filename="mainwindow.cpp" line="4456"/>
<source>There already is a visible version of this file. Replace it?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4009"/>
+ <location filename="mainwindow.cpp" line="4489"/>
+ <source>file not found: %1</source>
+ <translation type="unfinished">fichero no encontrado: %1</translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="4502"/>
+ <source>failed to generate preview for %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="4516"/>
+ <source>Sorry, can&apos;t preview anything. This function currently does not support extracting from bsas.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="4547"/>
<source>Update available</source>
<translation type="unfinished">Disponible actualización</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4046"/>
+ <location filename="mainwindow.cpp" line="4584"/>
<source>Open/Execute</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4047"/>
+ <location filename="mainwindow.cpp" line="4585"/>
<source>Add as Executable</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4051"/>
+ <location filename="mainwindow.cpp" line="4589"/>
+ <source>Preview</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="4595"/>
<source>Un-Hide</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4053"/>
+ <location filename="mainwindow.cpp" line="4597"/>
<source>Hide</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4058"/>
+ <location filename="mainwindow.cpp" line="4603"/>
<source>Write To File...</source>
<translation type="unfinished">Escribir al fichero...</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4088"/>
+ <location filename="mainwindow.cpp" line="4634"/>
<source>Do you want to endorse Mod Organizer on %1 now?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4505"/>
+ <location filename="mainwindow.cpp" line="5047"/>
+ <source>Remove</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="5077"/>
<source>Unlock load order</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4508"/>
+ <location filename="mainwindow.cpp" line="5080"/>
<source>Lock load order</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4223"/>
+ <location filename="mainwindow.cpp" line="5149"/>
+ <source>BOSS working</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="5157"/>
+ <source>failed to run boss: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="4770"/>
<source>Request to Nexus failed: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4230"/>
- <location filename="mainwindow.cpp" line="4247"/>
+ <location filename="mainwindow.cpp" line="1284"/>
+ <source>Executable &quot;%1&quot; not found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="1789"/>
+ <source>Failed to refresh list of esps: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="3346"/>
+ <source>This will move all files from overwrite into a new, regular mod.
+Please enter a name:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="3798"/>
+ <source>Add/Remove Categories</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="3803"/>
+ <source>Replace Categories</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="4777"/>
+ <location filename="mainwindow.cpp" line="4794"/>
<source>login successful</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4256"/>
+ <location filename="mainwindow.cpp" line="4803"/>
<source>login failed: %1. Trying to download anyway</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4262"/>
+ <location filename="mainwindow.cpp" line="4809"/>
<source>login failed: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4271"/>
+ <location filename="mainwindow.cpp" line="4818"/>
<source>login failed: %1. You need to log-in with Nexus to update MO.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4304"/>
+ <location filename="mainwindow.cpp" line="4851"/>
<source>Error</source>
<translation type="unfinished">Error</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4304"/>
+ <location filename="mainwindow.cpp" line="4851"/>
<source>failed to extract %1 (errorcode %2)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4399"/>
+ <location filename="mainwindow.cpp" line="4946"/>
<source>Extract...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4449"/>
+ <location filename="mainwindow.cpp" line="5002"/>
<source>Edit Categories...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4485"/>
+ <location filename="mainwindow.cpp" line="5057"/>
<source>Enable all</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4486"/>
+ <location filename="mainwindow.cpp" line="5058"/>
<source>Disable all</source>
<translation type="unfinished"></translation>
</message>
@@ -2448,7 +2709,7 @@ Please enter a name: </source>
<context>
<name>ModInfoBackup</name>
<message>
- <location filename="modinfo.cpp" line="784"/>
+ <location filename="modinfo.cpp" line="820"/>
<source>This is the backup of a mod</source>
<translation type="unfinished"></translation>
</message>
@@ -2461,78 +2722,77 @@ Please enter a name: </source>
<translation>Informacion del Mod</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="27"/>
+ <location filename="modinfodialog.ui" line="30"/>
<source>Textfiles</source>
<translation>Fich. Texto</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="39"/>
+ <location filename="modinfodialog.ui" line="42"/>
<source>A list of text-files in the mod directory.</source>
<translation>El listado de ficheros de texto en el directorio del mod.</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="42"/>
+ <location filename="modinfodialog.ui" line="45"/>
<source>A list of text-files in the mod directory like readmes. </source>
<translation>El listado de ficheros de texto en el directorio del mod como ayudas e informacion.</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="74"/>
+ <location filename="modinfodialog.ui" line="77"/>
<source>INI-Files</source>
<translation>Fich. INI</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="94"/>
+ <location filename="modinfodialog.ui" line="97"/>
<source>This is a list of .ini files in the mod.</source>
<translation>Esta es la lista de ficheros INI que incluye el mod.</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="97"/>
+ <location filename="modinfodialog.ui" line="100"/>
<source>This is a list of .ini files in the mod. These are usually used to configure the behaviour of mods if there are configurable parameters.</source>
<translation>Esta es la lista de ficheros INI que incluye el mod. Normalmente son usados para configurar algunos aspectos o parametros del mod.</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="143"/>
+ <location filename="modinfodialog.ui" line="149"/>
<source>Save changes to the file.</source>
<translation>Grabar cambios al fichero.</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="146"/>
+ <location filename="modinfodialog.ui" line="152"/>
<source>Save changes to the file. This overwrites the original. There is no automatic backup!</source>
<translation>Grabar cambios al fichero. Esto sobreescribe el original. No se realizan backups!</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="64"/>
- <location filename="modinfodialog.ui" line="149"/>
+ <location filename="modinfodialog.ui" line="67"/>
+ <location filename="modinfodialog.ui" line="155"/>
<source>Save</source>
<translation>Guardar</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="159"/>
+ <location filename="modinfodialog.ui" line="165"/>
<source>Images</source>
<translation>Imagenes</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="214"/>
+ <location filename="modinfodialog.ui" line="220"/>
<source>Images located in the mod.</source>
<translation>Imagenes incluidas en el mod.</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="217"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;This lists all the images (.jpg and .png) in the mod directory, like screenshots and such. Click one to get a larger view.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <translation>Esto muestra el listado de fotos (jpg y png) incluidas con el Mod, por ejemplo capturas de pantallas. Pulsa para verlas en grande.</translation>
+ <translation type="obsolete">Esto muestra el listado de fotos (jpg y png) incluidas con el Mod, por ejemplo capturas de pantallas. Pulsa para verlas en grande.</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="254"/>
- <location filename="modinfodialog.ui" line="277"/>
+ <location filename="modinfodialog.ui" line="256"/>
+ <location filename="modinfodialog.ui" line="275"/>
<source>Optional ESPs</source>
<translation>ESPs Opcionales</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="260"/>
+ <location filename="modinfodialog.ui" line="262"/>
<source>List of esps and esms that can not be loaded by the game.</source>
<translation>Listado de ESPs y ESMs que no se cargaran con el juego.</translation>
</message>
@@ -2551,115 +2811,116 @@ Normalmente son ficheros extras o modificaciones, mira el fich. texto del mod pa
Muchos mods no tienen ESPs extras, en estos casos veras una lista vacia.</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="263"/>
- <source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
-&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
-p, li { white-space: pre-wrap; }
-&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;List of esps and esms contained in this plugin that currently can not be loaded by the game. They will not even appear in the esp-list in the main MO-window.&lt;/span&gt;&lt;/p&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;They usually contain optional functionality, see the readme.&lt;/span&gt;&lt;/p&gt;
-&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;&quot;&gt;&lt;/p&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Most mods do not have optional esps, so chances are good you are looking at an empty list.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <location filename="modinfodialog.ui" line="223"/>
+ <source>This lists all the images (.jpg and .png) in the mod directory, like screenshots and such. Click one to get a larger view.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="modinfodialog.ui" line="265"/>
+ <source>List of esps and esms contained in this plugin that currently can not be loaded by the game. They will not even appear in the esp-list in the main MO-window.
+They usually contain optional functionality, see the readme.
+
+Most mods do not have optional esps, so chances are good you are looking at an empty list.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="292"/>
+ <location filename="modinfodialog.ui" line="290"/>
<source>Make the selected mod in the lower list unavailable.</source>
<translation>marca este fichero seleccionado en la lista de abajo no disponible.</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="295"/>
+ <location filename="modinfodialog.ui" line="293"/>
<source>The selected esp (in the lower list) will be pushed into a subdirectory of the mod and will thus become &quot;invisible&quot; to the game. It can then no longer be activated.</source>
<translation>El esp seleccionado (en la lista de abajo) es el que sera colocado en el subdirectorio del mod y sera invisible para el juego. Este no podra ser activado.</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="321"/>
+ <location filename="modinfodialog.ui" line="319"/>
<source>Move a file to the data directory.</source>
<translation>Error moviendo fichero al directorio de datos.</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="324"/>
+ <location filename="modinfodialog.ui" line="322"/>
<source>This moves a esp to the esp directory so it can be enabled in the main window. Please note that the ESP merely becomes &quot;available&quot;, it will not necessarily be loaded! That is configured in the main window of omo.</source>
<translation>Esto mueve un esp al directorio esp, por lo que se puede habilitar en la ventana principal. Tenga en cuenta que el ESP sólo se convierte en &quot;disponible&quot;, no necesariamente se cargará! Está configurado en la ventana principal de omo.</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="359"/>
+ <location filename="modinfodialog.ui" line="357"/>
<source>ESPs in the data directory and thus visible to the game.</source>
<translation>ESPs en el directorio de datos y visibles por el juego.</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="362"/>
+ <location filename="modinfodialog.ui" line="360"/>
<source>These are the mod files that are in the (virtual) data directory of your game and will thus be selecteable in the esp list in the main window.</source>
<translation>Estos son los archivos mod que se encuentran en el directorio de datos (virtual) de su juego y así será selecteable en la lista de esp en la ventana principal.</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="369"/>
+ <location filename="modinfodialog.ui" line="367"/>
<source>Available ESPs</source>
<translation>ESPs Disponibles</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="377"/>
+ <location filename="modinfodialog.ui" line="375"/>
<source>Conflicts</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="385"/>
+ <location filename="modinfodialog.ui" line="383"/>
<source>The following conflicted files are provided by this mod</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="432"/>
- <location filename="modinfodialog.ui" line="479"/>
+ <location filename="modinfodialog.ui" line="433"/>
+ <location filename="modinfodialog.ui" line="483"/>
<source>File</source>
<translation type="unfinished">Fichero</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="437"/>
+ <location filename="modinfodialog.ui" line="438"/>
<source>Overwritten Mods</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="447"/>
+ <location filename="modinfodialog.ui" line="448"/>
<source>The following conflicted files are provided by other mods</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="484"/>
+ <location filename="modinfodialog.ui" line="488"/>
<source>Providing Mod</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="494"/>
+ <location filename="modinfodialog.ui" line="498"/>
<source>Non-Conflicted files</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="514"/>
+ <location filename="modinfodialog.ui" line="518"/>
<source>Categories</source>
<translation type="unfinished">Categorias</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="537"/>
+ <location filename="modinfodialog.ui" line="541"/>
<source>Primary Category</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="554"/>
+ <location filename="modinfodialog.ui" line="558"/>
<source>Nexus Info</source>
<translation>Inf. Nexus</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="562"/>
+ <location filename="modinfodialog.ui" line="566"/>
<source>Mod ID</source>
<translation>ID del MOD</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="569"/>
+ <location filename="modinfodialog.ui" line="573"/>
<source>Mod ID for this mod on Nexus.</source>
<translation>ID del Mod en Nexus.</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="572"/>
+ <location filename="modinfodialog.ui" line="576"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
@@ -2673,7 +2934,7 @@ p, li { white-space: pre-wrap; }
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="596"/>
+ <location filename="modinfodialog.ui" line="600"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
@@ -2682,42 +2943,41 @@ p, li { white-space: pre-wrap; }
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="603"/>
+ <location filename="modinfodialog.ui" line="607"/>
<source>Version</source>
<translation>Version</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="633"/>
+ <location filename="modinfodialog.ui" line="637"/>
<source>Refresh</source>
<translation type="unfinished">Recargar</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="636"/>
+ <location filename="modinfodialog.ui" line="640"/>
<source>Refresh all information from Nexus.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="650"/>
+ <location filename="modinfodialog.ui" line="654"/>
<source>Description</source>
<translation>Descripcion</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="665"/>
+ <location filename="modinfodialog.ui" line="669"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
-&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="701"/>
+ <location filename="modinfodialog.ui" line="704"/>
<source>Endorse</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="715"/>
+ <location filename="modinfodialog.ui" line="718"/>
<source>Notes</source>
<translation type="unfinished"></translation>
</message>
@@ -2738,8 +2998,9 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">Tipo</translation>
</message>
<message>
+ <location filename="modinfodialog.cpp" line="1221"/>
<source>Name</source>
- <translation type="obsolete">Nombre</translation>
+ <translation type="unfinished">Nombre</translation>
</message>
<message>
<source>Size (kB)</source>
@@ -2759,17 +3020,17 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">Tamaño</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="725"/>
+ <location filename="modinfodialog.ui" line="728"/>
<source>Filetree</source>
<translation>Contenido</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="734"/>
+ <location filename="modinfodialog.ui" line="737"/>
<source>A directory view of this mod</source>
<translation>Ficheros que contiene este mod</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="737"/>
+ <location filename="modinfodialog.ui" line="740"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
@@ -2779,43 +3040,43 @@ p, li { white-space: pre-wrap; }
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="764"/>
+ <location filename="modinfodialog.ui" line="767"/>
<source>Previous</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="771"/>
+ <location filename="modinfodialog.ui" line="774"/>
<source>Next</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="791"/>
+ <location filename="modinfodialog.ui" line="794"/>
<source>Close</source>
<translation>Cerrar</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="563"/>
+ <location filename="modinfodialog.cpp" line="612"/>
<source>File Exists</source>
<translation>Existe el fichero</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="563"/>
+ <location filename="modinfodialog.cpp" line="612"/>
<source>A file with that name exists, please enter a new one</source>
<translation>Un fichero con ese nombre ya existe, por favor selecciona otro nombre</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="580"/>
+ <location filename="modinfodialog.cpp" line="629"/>
<source>failed to move file</source>
<translation>Error al mover el fichero</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="605"/>
+ <location filename="modinfodialog.cpp" line="654"/>
<source>failed to create directory &quot;optional&quot;</source>
<translation>Error al crear el directorio &quot;optional&quot;</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="643"/>
- <location filename="modinfodialog.cpp" line="1155"/>
+ <location filename="modinfodialog.cpp" line="692"/>
+ <location filename="modinfodialog.cpp" line="1198"/>
<source>Info requested, please wait</source>
<translation>Informacion solicitada, por favor espere</translation>
</message>
@@ -2832,148 +3093,174 @@ p, li { white-space: pre-wrap; }
(descripcion incompleta, por favor visita nexus)</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="108"/>
+ <location filename="modinfodialog.cpp" line="104"/>
<source>&amp;Delete</source>
<translation>&amp;Delete</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="109"/>
+ <location filename="modinfodialog.cpp" line="105"/>
<source>&amp;Rename</source>
<translation>&amp;Rename</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="112"/>
+ <location filename="modinfodialog.cpp" line="108"/>
<source>&amp;Open</source>
<translation>&amp;Open</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="113"/>
+ <location filename="modinfodialog.cpp" line="109"/>
<source>&amp;New Folder</source>
<translation>&amp;New Folder</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="352"/>
- <location filename="modinfodialog.cpp" line="367"/>
+ <location filename="modinfodialog.cpp" line="405"/>
+ <location filename="modinfodialog.cpp" line="420"/>
<source>Save changes?</source>
<translation type="unfinished">Grabar cambios?</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="713"/>
+ <location filename="modinfodialog.cpp" line="762"/>
<source>Current Version: %1</source>
<translation>Version actual: %1</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="717"/>
+ <location filename="modinfodialog.cpp" line="766"/>
<source>No update available</source>
<translation>Sin actualizacion</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="697"/>
+ <location filename="modinfodialog.cpp" line="746"/>
<source>Main</source>
<translation>Principal</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="110"/>
+ <location filename="modinfodialog.cpp" line="106"/>
<source>&amp;Hide</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="111"/>
+ <location filename="modinfodialog.cpp" line="107"/>
<source>&amp;Unhide</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="352"/>
- <location filename="modinfodialog.cpp" line="367"/>
+ <location filename="modinfodialog.cpp" line="405"/>
+ <location filename="modinfodialog.cpp" line="420"/>
<source>Save changes to &quot;%1&quot;?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="698"/>
+ <location filename="modinfodialog.cpp" line="747"/>
<source>Update</source>
<translation>Actualizacion</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="699"/>
+ <location filename="modinfodialog.cpp" line="748"/>
<source>Optional</source>
<translation>Opcional</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="700"/>
+ <location filename="modinfodialog.cpp" line="749"/>
<source>Old</source>
<translation>Antiguo</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="701"/>
+ <location filename="modinfodialog.cpp" line="750"/>
<source>Misc</source>
<translation>Misc</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="702"/>
+ <location filename="modinfodialog.cpp" line="751"/>
<source>Unknown</source>
<translation>Desconocido</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="758"/>
+ <location filename="modinfodialog.cpp" line="807"/>
<source>(description incomplete, please visit nexus)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="1064"/>
- <location filename="modinfodialog.cpp" line="1088"/>
+ <location filename="modinfodialog.cpp" line="1107"/>
+ <location filename="modinfodialog.cpp" line="1131"/>
<source>Replace file?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="1064"/>
+ <location filename="modinfodialog.cpp" line="1107"/>
<source>There already is a hidden version of this file. Replace it?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="1067"/>
- <location filename="modinfodialog.cpp" line="1091"/>
+ <location filename="modinfodialog.cpp" line="1110"/>
+ <location filename="modinfodialog.cpp" line="1134"/>
<source>File operation failed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="1067"/>
- <location filename="modinfodialog.cpp" line="1091"/>
+ <location filename="modinfodialog.cpp" line="1110"/>
+ <location filename="modinfodialog.cpp" line="1134"/>
<source>Failed to remove &quot;%1&quot;. Maybe you lack the required file permissions?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="1078"/>
- <location filename="modinfodialog.cpp" line="1101"/>
+ <location filename="modinfodialog.cpp" line="1121"/>
+ <location filename="modinfodialog.cpp" line="1144"/>
<source>failed to rename %1 to %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="1088"/>
+ <location filename="modinfodialog.cpp" line="1131"/>
<source>There already is a visible version of this file. Replace it?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="1135"/>
+ <location filename="modinfodialog.cpp" line="1178"/>
<source>Un-Hide</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="1137"/>
+ <location filename="modinfodialog.cpp" line="1180"/>
<source>Hide</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location filename="modinfodialog.cpp" line="1221"/>
+ <source>Please enter a name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="modinfodialog.cpp" line="1225"/>
+ <location filename="modinfodialog.cpp" line="1228"/>
+ <source>Error</source>
+ <translation type="unfinished">Error</translation>
+ </message>
+ <message>
+ <location filename="modinfodialog.cpp" line="1225"/>
+ <source>Invalid name. Must be a valid file name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="modinfodialog.cpp" line="1228"/>
+ <source>A tweak by that name exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="modinfodialog.cpp" line="1240"/>
+ <source>Create Tweak</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<source>request failed</source>
<translation type="obsolete">peticion fallada</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="779"/>
+ <location filename="modinfodialog.cpp" line="822"/>
<source>&lt;a href=&quot;%1&quot;&gt;Visit on Nexus&lt;/a&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="869"/>
- <location filename="modinfodialog.cpp" line="874"/>
+ <location filename="modinfodialog.cpp" line="912"/>
+ <location filename="modinfodialog.cpp" line="917"/>
<source>Confirm</source>
<translation>Confirma</translation>
</message>
@@ -2986,28 +3273,28 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">Descarga comenzada</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="858"/>
+ <location filename="modinfodialog.cpp" line="901"/>
<source>Failed to delete %1</source>
<translation>Error borrando %1</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="869"/>
+ <location filename="modinfodialog.cpp" line="912"/>
<source>Are sure you want to delete &quot;%1&quot;?</source>
<translation>Estas seguro de querer borrar &quot;%1&quot;?</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="874"/>
+ <location filename="modinfodialog.cpp" line="917"/>
<source>Are sure you want to delete the selected files?</source>
<translation>Etas seguro de querer borrar los ficheros seleccionados?</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="948"/>
- <location filename="modinfodialog.cpp" line="954"/>
+ <location filename="modinfodialog.cpp" line="991"/>
+ <location filename="modinfodialog.cpp" line="997"/>
<source>New Folder</source>
<translation>Nueva Carpeta</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="960"/>
+ <location filename="modinfodialog.cpp" line="1003"/>
<source>Failed to create &quot;%1&quot;</source>
<translation>Fallo al crear &quot;%1&quot;</translation>
</message>
@@ -3015,12 +3302,7 @@ p, li { white-space: pre-wrap; }
<context>
<name>ModInfoOverwrite</name>
<message>
- <location filename="modinfo.h" line="812"/>
- <source>Overwrite</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfo.cpp" line="821"/>
+ <location filename="modinfo.cpp" line="866"/>
<source>This pseudo mod contains files from the virtual data tree that got modified (i.e. by the construction kit)</source>
<translation type="unfinished"></translation>
</message>
@@ -3028,17 +3310,17 @@ p, li { white-space: pre-wrap; }
<context>
<name>ModInfoRegular</name>
<message>
- <location filename="modinfo.cpp" line="392"/>
+ <location filename="modinfo.cpp" line="393"/>
<source>failed to write %1/meta.ini: %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfo.cpp" line="625"/>
+ <location filename="modinfo.cpp" line="661"/>
<source>%1 contains no esp/esm and no asset (textures, meshes, interface, ...) directory</source>
<translation type="unfinished">%1 no contiene ningun directorio con esp/esm ni externos (textures, meshes, interface, ...)</translation>
</message>
<message>
- <location filename="modinfo.cpp" line="629"/>
+ <location filename="modinfo.cpp" line="665"/>
<source>Categories: &lt;br&gt;</source>
<translation type="unfinished"></translation>
</message>
@@ -3066,7 +3348,7 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">Comprobacion comenzada</translation>
</message>
<message>
- <location filename="modlist.cpp" line="662"/>
+ <location filename="modlist.cpp" line="776"/>
<source>Confirm</source>
<translation>Confirma</translation>
</message>
@@ -3087,20 +3369,16 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">max</translation>
</message>
<message>
- <location filename="modlist.cpp" line="294"/>
- <source>installed version: %1, newest version: %2</source>
- <translation>version instalada: %1, nueva version: %2</translation>
+ <location filename="modlist.cpp" line="308"/>
+ <source>installed version: &quot;%1&quot;, newest version: &quot;%2&quot;</source>
+ <oldsource>installed version: %1, newest version: %2</oldsource>
+ <translation type="unfinished">version instalada: %1, nueva version: %2</translation>
</message>
<message>
<source>%1 contains no esp/esm and no asset (textures, meshes, interface, ...) directory</source>
<translation type="obsolete">%1 no contiene ningun directorio con esp/esm ni externos (textures, meshes, interface, ...)</translation>
</message>
<message>
- <location filename="modlist.cpp" line="94"/>
- <source>Overwrite</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<location filename="modlist.cpp" line="109"/>
<source>This entry contains files that have been created inside the virtual data tree (i.e. by the construction kit)</source>
<translation type="unfinished"></translation>
@@ -3141,47 +3419,52 @@ p, li { white-space: pre-wrap; }
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="184"/>
+ <location filename="modlist.cpp" line="197"/>
<source>invalid</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="298"/>
+ <location filename="modlist.cpp" line="310"/>
+ <source>The newest version on Nexus seems to be older than the one you have installed. This could either mean the version you have has been withdrawn (i.e. due to a bug) or the author uses a non-standard versioning scheme and that newest version is actually newer. Either way you may want to &quot;upgrade&quot;.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="modlist.cpp" line="318"/>
<source>Categories: &lt;br&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="327"/>
+ <location filename="modlist.cpp" line="347"/>
<source>Invalid name</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="718"/>
+ <location filename="modlist.cpp" line="832"/>
<source>Mod Name</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="723"/>
+ <location filename="modlist.cpp" line="837"/>
<source>Installation</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="736"/>
+ <location filename="modlist.cpp" line="850"/>
<source>Category of the mod.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="737"/>
+ <location filename="modlist.cpp" line="851"/>
<source>Id of the mod as used on Nexus.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="738"/>
+ <location filename="modlist.cpp" line="852"/>
<source>Emblemes to highlight things that might require attention.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="739"/>
+ <location filename="modlist.cpp" line="853"/>
<source>Time this mod was installed</source>
<translation type="unfinished"></translation>
</message>
@@ -3194,58 +3477,58 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">Nombres de los mods</translation>
</message>
<message>
- <location filename="modlist.cpp" line="719"/>
+ <location filename="modlist.cpp" line="833"/>
<source>Version</source>
<translation>Versión</translation>
</message>
<message>
- <location filename="modlist.cpp" line="733"/>
+ <location filename="modlist.cpp" line="847"/>
<source>Version of the mod (if available)</source>
<translation>Version del mod (si esta disponible)</translation>
</message>
<message>
- <location filename="modlist.cpp" line="720"/>
+ <location filename="modlist.cpp" line="834"/>
<source>Priority</source>
<translation>Prioridad</translation>
</message>
<message>
- <location filename="modlist.cpp" line="603"/>
+ <location filename="modlist.cpp" line="717"/>
<source>drag&amp;drop failed: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="717"/>
+ <location filename="modlist.cpp" line="831"/>
<source>Flags</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="721"/>
+ <location filename="modlist.cpp" line="835"/>
<source>Category</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="722"/>
+ <location filename="modlist.cpp" line="836"/>
<source>Nexus ID</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="724"/>
- <location filename="modlist.cpp" line="740"/>
+ <location filename="modlist.cpp" line="838"/>
+ <location filename="modlist.cpp" line="854"/>
<source>unknown</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="732"/>
+ <location filename="modlist.cpp" line="846"/>
<source>Name of your mods</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="734"/>
+ <location filename="modlist.cpp" line="848"/>
<source>Installation priority of your mod. The higher, the more &quot;important&quot; it is and thus overwrites files from mods with lower priority.</source>
<translation>Prioridad de instalacion de tu mod. Cuanto mas alto sea pisara los mods con menos prioridad.</translation>
</message>
<message>
- <location filename="modlist.cpp" line="662"/>
+ <location filename="modlist.cpp" line="776"/>
<source>Are you sure you want to remove &quot;%1&quot;?</source>
<translation>Estas seguro de querer borrar &quot;%1&quot;?</translation>
</message>
@@ -3274,12 +3557,12 @@ p, li { white-space: pre-wrap; }
<context>
<name>MyFileSystemModel</name>
<message>
- <location filename="overwriteinfodialog.cpp" line="48"/>
+ <location filename="overwriteinfodialog.cpp" line="47"/>
<source>Overwrites</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="overwriteinfodialog.cpp" line="60"/>
+ <location filename="overwriteinfodialog.cpp" line="59"/>
<source>not implemented</source>
<translation type="unfinished"></translation>
</message>
@@ -3288,11 +3571,16 @@ p, li { white-space: pre-wrap; }
<name>NXMAccessManager</name>
<message>
<location filename="nxmaccessmanager.cpp" line="130"/>
+ <source>Logging into Nexus</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="nxmaccessmanager.cpp" line="145"/>
<source>timeout</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="nxmaccessmanager.cpp" line="168"/>
+ <location filename="nxmaccessmanager.cpp" line="185"/>
<source>Please check your password</source>
<translation type="unfinished"></translation>
</message>
@@ -3342,17 +3630,17 @@ p, li { white-space: pre-wrap; }
<context>
<name>NexusInterface</name>
<message>
- <location filename="nexusinterface.cpp" line="201"/>
+ <location filename="nexusinterface.cpp" line="218"/>
<source>Failed to guess mod id for &quot;%1&quot;, please pick the correct one</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="nexusinterface.cpp" line="421"/>
+ <location filename="nexusinterface.cpp" line="455"/>
<source>empty response</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="nexusinterface.cpp" line="450"/>
+ <location filename="nexusinterface.cpp" line="483"/>
<source>invalid response</source>
<translation type="unfinished"></translation>
</message>
@@ -3959,34 +4247,34 @@ Activar Mods faltantes en el menu contextual del raton intentara activar los mod
<translation type="obsolete">Error borrando %1</translation>
</message>
<message>
- <location filename="overwriteinfodialog.cpp" line="137"/>
+ <location filename="overwriteinfodialog.cpp" line="136"/>
<source>Failed to delete &quot;%1&quot;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="overwriteinfodialog.cpp" line="148"/>
- <location filename="overwriteinfodialog.cpp" line="153"/>
+ <location filename="overwriteinfodialog.cpp" line="147"/>
+ <location filename="overwriteinfodialog.cpp" line="152"/>
<source>Confirm</source>
<translation type="unfinished">Confirma</translation>
</message>
<message>
- <location filename="overwriteinfodialog.cpp" line="148"/>
+ <location filename="overwriteinfodialog.cpp" line="147"/>
<source>Are sure you want to delete &quot;%1&quot;?</source>
<translation type="unfinished">Estas seguro de querer borrar &quot;%1&quot;?</translation>
</message>
<message>
- <location filename="overwriteinfodialog.cpp" line="153"/>
+ <location filename="overwriteinfodialog.cpp" line="152"/>
<source>Are sure you want to delete the selected files?</source>
<translation type="unfinished">Etas seguro de querer borrar los ficheros seleccionados?</translation>
</message>
<message>
- <location filename="overwriteinfodialog.cpp" line="203"/>
- <location filename="overwriteinfodialog.cpp" line="209"/>
+ <location filename="overwriteinfodialog.cpp" line="202"/>
+ <location filename="overwriteinfodialog.cpp" line="208"/>
<source>New Folder</source>
<translation type="unfinished">Nueva Carpeta</translation>
</message>
<message>
- <location filename="overwriteinfodialog.cpp" line="215"/>
+ <location filename="overwriteinfodialog.cpp" line="214"/>
<source>Failed to create &quot;%1&quot;</source>
<translation type="unfinished">Fallo al crear &quot;%1&quot;</translation>
</message>
@@ -3994,70 +4282,89 @@ Activar Mods faltantes en el menu contextual del raton intentara activar los mod
<context>
<name>PluginList</name>
<message>
- <location filename="pluginlist.cpp" line="98"/>
+ <location filename="pluginlist.cpp" line="111"/>
<source>Mod Index</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="99"/>
- <location filename="pluginlist.cpp" line="111"/>
+ <location filename="pluginlist.cpp" line="112"/>
+ <source>Flags</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="pluginlist.cpp" line="113"/>
+ <location filename="pluginlist.cpp" line="125"/>
<source>unknown</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="107"/>
+ <location filename="pluginlist.cpp" line="121"/>
<source>Name of your mods</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="108"/>
+ <location filename="pluginlist.cpp" line="122"/>
<source>Load priority of your mod. The higher, the more &quot;important&quot; it is and thus overwrites data from plugins with lower priority.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="110"/>
+ <location filename="pluginlist.cpp" line="124"/>
<source>The modindex determins the formids of objects originating from this mods.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="208"/>
+ <location filename="pluginlist.cpp" line="165"/>
+ <source>failed to update esp info for file %1 (source id: %2), error: %3</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="pluginlist.cpp" line="233"/>
<source>esp not found: %1</source>
<translation>ESP no encontrado: %1</translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="215"/>
- <location filename="pluginlist.cpp" line="227"/>
+ <location filename="pluginlist.cpp" line="240"/>
+ <location filename="pluginlist.cpp" line="252"/>
<source>Confirm</source>
<translation type="unfinished">Confirma</translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="215"/>
+ <location filename="pluginlist.cpp" line="240"/>
<source>Really enable all plugins?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="227"/>
+ <location filename="pluginlist.cpp" line="252"/>
<source>Really disable all plugins?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="353"/>
+ <location filename="pluginlist.cpp" line="380"/>
<source>The file containing locked plugin indices is broken</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="366"/>
- <location filename="pluginlist.cpp" line="405"/>
- <source>failed to open output file: %1</source>
+ <location filename="pluginlist.cpp" line="418"/>
+ <source>Some of your plugins have invalid names! These plugins can not be loaded by the game. Please see mo_interface.log for a list of affected plugins and rename them.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="393"/>
- <source>Some of your plugins have invalid names! These plugins can not be loaded by the game. Please see mo_interface.log for a list of affected plugins and rename them.</source>
+ <location filename="pluginlist.cpp" line="644"/>
+ <source>BOSS dll incompatible</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="pluginlist.cpp" line="987"/>
+ <source>Missing Masters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="pluginlist.cpp" line="993"/>
+ <source>Enabled Masters</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="737"/>
+ <location filename="pluginlist.cpp" line="1134"/>
<source>failed to restore load order for %1</source>
<translation type="unfinished"></translation>
</message>
@@ -4070,17 +4377,17 @@ Activar Mods faltantes en el menu contextual del raton intentara activar los mod
<translation type="obsolete">max</translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="631"/>
+ <location filename="pluginlist.cpp" line="983"/>
<source>This plugin can&apos;t be disabled (enforced by the game)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="633"/>
+ <location filename="pluginlist.cpp" line="985"/>
<source>Origin: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="96"/>
+ <location filename="pluginlist.cpp" line="109"/>
<source>Name</source>
<translation>Nombre</translation>
</message>
@@ -4089,7 +4396,7 @@ Activar Mods faltantes en el menu contextual del raton intentara activar los mod
<translation type="obsolete">Nombres de tus Mods</translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="97"/>
+ <location filename="pluginlist.cpp" line="110"/>
<source>Priority</source>
<translation>Prioridad</translation>
</message>
@@ -4111,6 +4418,19 @@ Activar Mods faltantes en el menu contextual del raton intentara activar los mod
</message>
</context>
<context>
+ <name>PreviewDialog</name>
+ <message>
+ <location filename="previewdialog.ui" line="14"/>
+ <source>Preview</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="previewdialog.ui" line="78"/>
+ <source>Close</source>
+ <translation type="unfinished">Cerrar</translation>
+ </message>
+</context>
+<context>
<name>ProblemsDialog</name>
<message>
<location filename="problemsdialog.ui" line="14"/>
@@ -4123,21 +4443,27 @@ Activar Mods faltantes en el menu contextual del raton intentara activar los mod
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:7.8pt; font-weight:400; font-style:normal;&quot;&gt;
-&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <oldsource>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
+p, li { white-space: pre-wrap; }
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</oldsource>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="problemsdialog.cpp" line="29"/>
- <source>fix</source>
- <translation type="unfinished"></translation>
+ <location filename="problemsdialog.ui" line="75"/>
+ <source>Close</source>
+ <translation type="unfinished">Cerrar</translation>
</message>
<message>
- <location filename="problemsdialog.cpp" line="30"/>
+ <location filename="problemsdialog.cpp" line="44"/>
+ <location filename="problemsdialog.cpp" line="45"/>
<source>Fix</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="problemsdialog.cpp" line="34"/>
+ <location filename="problemsdialog.cpp" line="49"/>
<source>No guided fix</source>
<translation type="unfinished"></translation>
</message>
@@ -4149,72 +4475,72 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">fallo al aplicar las modificaciones al ini</translation>
</message>
<message>
- <location filename="profile.cpp" line="56"/>
+ <location filename="profile.cpp" line="59"/>
<source>invalid profile name %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="60"/>
+ <location filename="profile.cpp" line="63"/>
<source>failed to create %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="152"/>
- <source>failed to open &quot;%1&quot; for writing</source>
+ <location filename="profile.cpp" line="182"/>
+ <source>failed to write mod list: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="189"/>
+ <location filename="profile.cpp" line="193"/>
<source>failed to update tweaked ini file, wrong settings may be used: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="219"/>
+ <location filename="profile.cpp" line="223"/>
<source>failed to create tweaked ini: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="365"/>
+ <location filename="profile.cpp" line="371"/>
<source>Overwrite directory couldn&apos;t be parsed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="374"/>
+ <location filename="profile.cpp" line="380"/>
<source>invalid priority %1</source>
<translation>prioridad invalida %1</translation>
</message>
<message>
- <location filename="profile.cpp" line="561"/>
+ <location filename="profile.cpp" line="568"/>
<source>failed to parse ini file (%1)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="589"/>
+ <location filename="profile.cpp" line="596"/>
<source>failed to parse ini file (%1): %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="613"/>
- <location filename="profile.cpp" line="650"/>
+ <location filename="profile.cpp" line="620"/>
+ <location filename="profile.cpp" line="657"/>
<source>failed to modify &quot;%1&quot;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="678"/>
+ <location filename="profile.cpp" line="685"/>
<source>Delete savegames?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="679"/>
+ <location filename="profile.cpp" line="686"/>
<source>Do you want to delete local savegames? (If you select &quot;No&quot;, the save games will show up again if you re-enable local savegames)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="271"/>
- <location filename="profile.cpp" line="300"/>
- <location filename="profile.cpp" line="384"/>
- <location filename="profile.cpp" line="402"/>
- <location filename="profile.cpp" line="412"/>
+ <location filename="profile.cpp" line="276"/>
+ <location filename="profile.cpp" line="305"/>
+ <location filename="profile.cpp" line="390"/>
+ <location filename="profile.cpp" line="408"/>
+ <location filename="profile.cpp" line="418"/>
<source>invalid index %1</source>
<translation>indice invalido %1</translation>
</message>
@@ -4387,37 +4713,61 @@ p, li { white-space: pre-wrap; }
<translation>Por favor introduzca un nombre para el nuevo perfil</translation>
</message>
<message>
- <location filename="profilesdialog.cpp" line="160"/>
+ <location filename="profilesdialog.cpp" line="162"/>
<source>failed to copy profile: %1</source>
<translation>Fallo al copiar perfil: %1</translation>
</message>
<message>
- <location filename="profilesdialog.cpp" line="167"/>
+ <location filename="profilesdialog.cpp" line="165"/>
+ <source>Invalid name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="profilesdialog.cpp" line="165"/>
+ <source>Invalid profile name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="profilesdialog.cpp" line="172"/>
<source>Confirm</source>
<translation>Confirma</translation>
</message>
<message>
- <location filename="profilesdialog.cpp" line="167"/>
+ <location filename="profilesdialog.cpp" line="172"/>
+ <source>Are you sure you want to remove this profile (including local savegames if any)?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="profilesdialog.cpp" line="182"/>
+ <source>Profile broken</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="profilesdialog.cpp" line="183"/>
+ <source>This profile you&apos;re about to delete seems to be broken or the path is invalid. I&apos;m about to delete the following folder: &quot;%1&quot;. Proceed?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<source>Are you sure you want to remove this profile?</source>
- <translation>Estas seguro de que quieres borrar este perfil?</translation>
+ <translation type="obsolete">Estas seguro de que quieres borrar este perfil?</translation>
</message>
<message>
- <location filename="profilesdialog.cpp" line="196"/>
+ <location filename="profilesdialog.cpp" line="215"/>
<source>Rename Profile</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profilesdialog.cpp" line="196"/>
+ <location filename="profilesdialog.cpp" line="215"/>
<source>New Name</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profilesdialog.cpp" line="233"/>
+ <location filename="profilesdialog.cpp" line="252"/>
<source>failed to change archive invalidation state: %1</source>
<translation>error al cambiar el estado de invalidación de archivo: %1</translation>
</message>
<message>
- <location filename="profilesdialog.cpp" line="270"/>
+ <location filename="profilesdialog.cpp" line="289"/>
<source>failed to determine if invalidation is active: %1</source>
<translation>no se ha podido determinar si la nulidad está activa: %1</translation>
</message>
@@ -4505,7 +4855,7 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">Armas</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="63"/>
+ <location filename="installationmanager.cpp" line="64"/>
<location filename="selfupdater.cpp" line="52"/>
<source>invalid 7-zip32.dll: %1</source>
<translation>7z.dll no es valido: %1</translation>
@@ -4575,12 +4925,12 @@ p, li { white-space: pre-wrap; }
<translation>Fallo al configurar la carga por proxy-dll</translation>
</message>
<message>
- <location filename="profile.cpp" line="93"/>
+ <location filename="profile.cpp" line="96"/>
<source>&quot;%1&quot; is missing</source>
<translation>&quot;%1&quot; no encontrado</translation>
</message>
<message>
- <location filename="main.cpp" line="134"/>
+ <location filename="main.cpp" line="139"/>
<source>Permissions required</source>
<translation>Se requieren permisos</translation>
</message>
@@ -4589,43 +4939,48 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">La cuenta de usuario actual no tiene los derechos de acceso necesarios para ejecutar el Mod Organizer. Los cambios necesarios pueden hacerse automáticamente (el directorio de MO se harán escritura para la cuenta de usuario actual). Se le pedirá a ejecutar &quot;mo_helper.exe&quot; con derechos de administrador).</translation>
</message>
<message>
- <location filename="main.cpp" line="234"/>
- <location filename="main.cpp" line="272"/>
+ <location filename="main.cpp" line="231"/>
+ <location filename="main.cpp" line="269"/>
<source>Woops</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="main.cpp" line="135"/>
- <source>The current user account doesn&apos;t have the required access rights to run Mod Organizer. The neccessary changes can be made automatically (the MO directory will be made writable for the current user account). You will be asked to run &quot;helper.exe&quot; with administrative rights).</source>
+ <location filename="main.cpp" line="140"/>
+ <source>The current user account doesn&apos;t have the required access rights to run Mod Organizer. The neccessary changes can be made automatically (the MO directory will be made writable for the current user account). You will be asked to run &quot;helper.exe&quot; with administrative rights.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="main.cpp" line="235"/>
+ <location filename="main.cpp" line="232"/>
<source>ModOrganizer has crashed! Should a diagnostic file be created? If you send me this file (%1) to sherb@gmx.net, the bug is a lot more likely to be fixed. Please include a short description of what you were doing when the crash happened</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="main.cpp" line="273"/>
+ <location filename="main.cpp" line="270"/>
<source>ModOrganizer has crashed! Unfortunately I was not able to write a diagnostic file: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="main.cpp" line="335"/>
+ <location filename="main.cpp" line="332"/>
<source>An instance of Mod Organizer is already running</source>
<translation>Ya se está ejecutando una instancia de Mod Organizer</translation>
</message>
<message>
- <location filename="main.cpp" line="357"/>
+ <location filename="main.cpp" line="354"/>
<source>No game identified in &quot;%1&quot;. The directory is required to contain the game binary and its launcher.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="main.cpp" line="360"/>
- <location filename="main.cpp" line="389"/>
+ <location filename="main.cpp" line="357"/>
+ <location filename="main.cpp" line="386"/>
<source>Please select the game to manage</source>
<translation>Por favor seleccione el juego</translation>
</message>
<message>
+ <location filename="main.cpp" line="412"/>
+ <source>Please select the game edition you have (MO can&apos;t start the game correctly if this is set incorrectly!)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<source>invalid profile %1</source>
<translation type="obsolete">perfil invalido %1</translation>
</message>
@@ -4634,7 +4989,7 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">&quot;%1&quot; no encontrado</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="752"/>
+ <location filename="mainwindow.cpp" line="782"/>
<source>Please use &quot;Help&quot; from the toolbar to get usage instructions to all elements</source>
<translation>Por favor utilice &quot;Ayuda&quot; en la barra superior para obtener informacion sobre todos los elementos</translation>
</message>
@@ -4647,19 +5002,19 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">prioridad invalida %1</translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="310"/>
- <location filename="profile.cpp" line="228"/>
+ <location filename="pluginlist.cpp" line="335"/>
+ <location filename="profile.cpp" line="233"/>
<source>failed to find &quot;%1&quot;</source>
<translation>fallo al encontrar %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1470"/>
- <location filename="mainwindow.cpp" line="3723"/>
+ <location filename="mainwindow.cpp" line="1610"/>
+ <location filename="mainwindow.cpp" line="4216"/>
<source>&lt;Manage...&gt;</source>
<translation>&lt;Definir...&gt;</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1488"/>
+ <location filename="mainwindow.cpp" line="1628"/>
<source>failed to parse profile %1: %2</source>
<translation>no se pudo analizar el perfil % 1: %2</translation>
</message>
@@ -4672,17 +5027,17 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">Esto tomara un momento</translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="467"/>
+ <location filename="pluginlist.cpp" line="491"/>
<source>failed to access %1</source>
<translation>Fallo al acceder %1</translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="481"/>
+ <location filename="pluginlist.cpp" line="505"/>
<source>failed to set file time %1</source>
<translation>Fallo al definir la hora al fihcero %1</translation>
</message>
<message>
- <location filename="profile.cpp" line="67"/>
+ <location filename="profile.cpp" line="70"/>
<source>failed to create %1</source>
<translation>Fallo al crear %1</translation>
</message>
@@ -4721,18 +5076,18 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">Ingles</translation>
</message>
<message>
- <location filename="main.cpp" line="335"/>
- <location filename="settings.cpp" line="462"/>
+ <location filename="main.cpp" line="332"/>
+ <location filename="settings.cpp" line="542"/>
<source>Mod Organizer</source>
<translation>Mod Organizer</translation>
</message>
<message>
- <location filename="settings.cpp" line="469"/>
+ <location filename="settings.cpp" line="549"/>
<source>Script Extender</source>
<translation>Script Extender</translation>
</message>
<message>
- <location filename="settings.cpp" line="476"/>
+ <location filename="settings.cpp" line="556"/>
<source>Proxy DLL</source>
<translation>Proxy DLL</translation>
</message>
@@ -4757,22 +5112,22 @@ Start elevated anyway? (you will be asked if you want to allow ModOrganizer.exe
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="spawn.cpp" line="128"/>
+ <location filename="spawn.cpp" line="129"/>
<source>failed to spawn &quot;%1&quot;: %2</source>
<translation>Fallo al crear &quot;%1&quot;: %2</translation>
</message>
<message>
- <location filename="spawn.cpp" line="137"/>
+ <location filename="spawn.cpp" line="138"/>
<source>&quot;%1&quot; doesn&apos;t exist</source>
<translation>&quot;%1% no existe</translation>
</message>
<message>
- <location filename="spawn.cpp" line="144"/>
+ <location filename="spawn.cpp" line="145"/>
<source>failed to inject dll into &quot;%1&quot;: %2</source>
<translation>Fallo al injectar la dll en &quot;%1&quot;: %2</translation>
</message>
<message>
- <location filename="spawn.cpp" line="152"/>
+ <location filename="spawn.cpp" line="153"/>
<source>failed to run &quot;%1&quot;</source>
<translation>Fallo al abrir %1</translation>
</message>
@@ -4793,20 +5148,20 @@ Start elevated anyway? (you will be asked if you want to allow ModOrganizer.exe
<translation>no se pudo determinar el nombre de la cuenta</translation>
</message>
<message>
- <location filename="categories.cpp" line="133"/>
+ <location filename="categories.cpp" line="141"/>
<source>Failed to save custom categories</source>
<translation>Error al guardar categorías personalizadas</translation>
</message>
<message>
- <location filename="categories.cpp" line="210"/>
- <location filename="categories.cpp" line="245"/>
- <location filename="categories.cpp" line="255"/>
- <location filename="categories.cpp" line="265"/>
+ <location filename="categories.cpp" line="218"/>
+ <location filename="categories.cpp" line="253"/>
+ <location filename="categories.cpp" line="263"/>
+ <location filename="categories.cpp" line="273"/>
<source>invalid index %1</source>
<translation>indice invalido %1</translation>
</message>
<message>
- <location filename="categories.cpp" line="276"/>
+ <location filename="categories.cpp" line="284"/>
<source>invalid category id %1</source>
<translation type="unfinished"></translation>
</message>
@@ -4860,6 +5215,11 @@ Start elevated anyway? (you will be asked if you want to allow ModOrganizer.exe
<source>invalid game type %1</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <location filename="safewritefile.cpp" line="32"/>
+ <source>failed to open temporary file</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>QueryOverwriteDialog</name>
@@ -4900,14 +5260,6 @@ Start elevated anyway? (you will be asked if you want to allow ModOrganizer.exe
</message>
</context>
<context>
- <name>QuestionBoxMemory</name>
- <message>
- <location filename="questionboxmemory.ui" line="86"/>
- <source>Remember selection</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
<name>SaveGameInfoWidget</name>
<message>
<location filename="savegameinfowidget.ui" line="39"/>
@@ -5012,9 +5364,9 @@ Start elevated anyway? (you will be asked if you want to allow ModOrganizer.exe
</message>
<message>
<location filename="selfupdater.cpp" line="116"/>
- <location filename="selfupdater.cpp" line="140"/>
- <location filename="selfupdater.cpp" line="269"/>
- <location filename="selfupdater.cpp" line="417"/>
+ <location filename="selfupdater.cpp" line="139"/>
+ <location filename="selfupdater.cpp" line="268"/>
+ <location filename="selfupdater.cpp" line="415"/>
<source>Update</source>
<translation>Actualización</translation>
</message>
@@ -5024,62 +5376,62 @@ Start elevated anyway? (you will be asked if you want to allow ModOrganizer.exe
<translation>Hay disponible una actualización (versión más reciente: %1), desea instalarlo?</translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="141"/>
+ <location filename="selfupdater.cpp" line="140"/>
<source>Download in progress</source>
<translation>Descarga en progreso</translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="196"/>
+ <location filename="selfupdater.cpp" line="195"/>
<source>Download failed: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="207"/>
+ <location filename="selfupdater.cpp" line="206"/>
<source>Failed to install update: %1</source>
<translation>No se pudo instalar la actualización: %1</translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="228"/>
+ <location filename="selfupdater.cpp" line="227"/>
<source>failed to open archive &quot;%1&quot;: %2</source>
<translation>error al abrir el archivo &quot;%1&quot;: %2</translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="251"/>
+ <location filename="selfupdater.cpp" line="250"/>
<source>failed to move outdated files: %1. Please update manually.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="269"/>
+ <location filename="selfupdater.cpp" line="268"/>
<source>Update installed, Mod Organizer will now be restarted.</source>
<translation>Actualización instalada, Ahora se reiniciará la Mod Organizer.</translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="297"/>
+ <location filename="selfupdater.cpp" line="296"/>
<source>Error</source>
<translation>Error</translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="353"/>
+ <location filename="selfupdater.cpp" line="351"/>
<source>Failed to parse response. Please report this as a bug and include the file mo_interface.log.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="418"/>
+ <location filename="selfupdater.cpp" line="416"/>
<source>No incremental update available for this version, the complete package needs to be downloaded (%1 kB)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="427"/>
+ <location filename="selfupdater.cpp" line="425"/>
<source>no file for update found. Please update manually.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="461"/>
+ <location filename="selfupdater.cpp" line="460"/>
<source>No download server available. Please try again later.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="441"/>
+ <location filename="selfupdater.cpp" line="440"/>
<source>Failed to retrieve update information: %1</source>
<translation type="unfinished"></translation>
</message>
@@ -5095,26 +5447,22 @@ Start elevated anyway? (you will be asked if you want to allow ModOrganizer.exe
<context>
<name>Settings</name>
<message>
- <location filename="settings.cpp" line="278"/>
- <source>setting for invalid plugin &quot;%1&quot; requested</source>
- <translation type="unfinished"></translation>
+ <source>Administrative rights required to change this.</source>
+ <translation type="obsolete">Derechos administrativos necesarios para cambiar esto.</translation>
</message>
<message>
- <location filename="settings.cpp" line="282"/>
- <source>invalid setting &quot;%1&quot; requested for plugin &quot;%2&quot;</source>
+ <location filename="settings.cpp" line="320"/>
+ <location filename="settings.cpp" line="339"/>
+ <source>attempt to store setting for unknown plugin &quot;%1&quot;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Administrative rights required to change this.</source>
- <translation type="obsolete">Derechos administrativos necesarios para cambiar esto.</translation>
- </message>
- <message>
- <location filename="settings.cpp" line="573"/>
+ <location filename="settings.cpp" line="660"/>
<source>Confirm</source>
<translation type="unfinished">Confirma</translation>
</message>
<message>
- <location filename="settings.cpp" line="573"/>
+ <location filename="settings.cpp" line="660"/>
<source>Changing the mod directory affects all your profiles! Mods not present (or named differently) in the new location will be disabled in all profiles. There is no way to undo this unless you backed up your profiles manually. Proceed?</source>
<translation type="unfinished"></translation>
</message>
@@ -5141,19 +5489,19 @@ Start elevated anyway? (you will be asked if you want to allow ModOrganizer.exe
<translation type="obsolete">El idioma del programa. Esto solo mostrara los idiomas instalados.</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="656"/>
+ <location filename="settingsdialog.ui" line="694"/>
<source>Enforces that inactive ESPs and ESMs are never loaded.</source>
<translation>Se asegura que no se cargan nunca los ESPs y ESMs inactivos.</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="659"/>
+ <location filename="settingsdialog.ui" line="697"/>
<source>It seems that the Games occasionally load ESP or ESM files even if they haven&apos;t been activated as plugins.
I don&apos;t yet know what the circumstances are, but user reports imply it is in some cases unwanted. If this is checked, ESPs and ESMs not checked in the List are invisible to the game and can not be loaded.</source>
<translation>Parece que los juegos ocasionalmente cargan archivos ESP o ESM, incluso si ellos todavía no se ha activado como plugins.
No, pero sabe cuáles son las circunstancias, pero informes de usuario implican en algunos casos no deseados. Si esto se comprueba, ESPs ESMs no marcadas en la lista son invisibles para el juego y no se pueden cargar.</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="663"/>
+ <location filename="settingsdialog.ui" line="701"/>
<source>Hide inactive ESPs/ESMs</source>
<translation>Ocultar ESPs/ESMs inactivos</translation>
</message>
@@ -5171,72 +5519,77 @@ p, li { white-space: pre-wrap; }
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="321"/>
+ <location filename="settingsdialog.ui" line="318"/>
<source>Disable automatic internet features</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="324"/>
+ <location filename="settingsdialog.ui" line="321"/>
<source>Disable automatic internet features. This does not affect features that are explicitly invoked by the user (like checking mods for updates, endorsing, opening the web browser)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="327"/>
+ <location filename="settingsdialog.ui" line="324"/>
<source>Offline Mode</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="334"/>
+ <location filename="settingsdialog.ui" line="331"/>
<source>Use a proxy for network connections.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="337"/>
+ <location filename="settingsdialog.ui" line="334"/>
<source>Use a proxy for network connections. This uses the system-wide settings which can be configured in Internet Explorer. Please note that MO will start up a few seconds slower on some systems when using a proxy.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="340"/>
+ <location filename="settingsdialog.ui" line="337"/>
<source>Use HTTP Proxy (Uses System Settings)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="351"/>
- <source>Known Servers (Dynamically updated every download)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settingsdialog.ui" line="372"/>
+ <location filename="settingsdialog.ui" line="396"/>
<source>Preferred Servers (Drag &amp; Drop)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="509"/>
+ <location filename="settingsdialog.ui" line="547"/>
<source>Workarounds</source>
<translation>Soluciones</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="571"/>
+ <location filename="settingsdialog.ui" line="609"/>
<source>Load Mechanism</source>
<translation>Mecamismo de carga</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="591"/>
+ <location filename="settingsdialog.ui" line="629"/>
<source>Select loading mechanism. See help for details.</source>
<translation>Selecciona la forma de cargar. Mira la ayuda para detalles.</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="517"/>
+ <location filename="settingsdialog.ui" line="555"/>
<source>Steam App ID</source>
<translation>Steam App ID</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="537"/>
+ <location filename="settingsdialog.ui" line="346"/>
+ <source>Associate with &quot;Download with manager&quot; links</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="settingsdialog.ui" line="375"/>
+ <source>Known Servers (updated on download)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="settingsdialog.ui" line="575"/>
<source>The Steam AppID for your game</source>
<translation>El AppID de tu juego</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="540"/>
+ <location filename="settingsdialog.ui" line="578"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
@@ -5411,12 +5764,12 @@ p, li { white-space: pre-wrap; }
<translation>Inicio automatico en Nexus</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="285"/>
+ <location filename="settingsdialog.ui" line="282"/>
<source>Username</source>
<translation>Usuario</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="299"/>
+ <location filename="settingsdialog.ui" line="296"/>
<source>Password</source>
<translation>Contraseña</translation>
</message>
@@ -5425,37 +5778,42 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">Manejar enlaces NXM</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="407"/>
+ <location filename="settingsdialog.ui" line="431"/>
<source>Plugins</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="427"/>
+ <location filename="settingsdialog.ui" line="453"/>
<source>Author:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="441"/>
+ <location filename="settingsdialog.ui" line="467"/>
<source>Version:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="455"/>
+ <location filename="settingsdialog.ui" line="481"/>
<source>Description:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="493"/>
+ <location filename="settingsdialog.ui" line="519"/>
<source>Key</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="498"/>
+ <location filename="settingsdialog.ui" line="524"/>
<source>Value</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="594"/>
+ <location filename="settingsdialog.ui" line="536"/>
+ <source>Blacklisted Plugins (use &lt;del&gt; to remove):</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="settingsdialog.ui" line="632"/>
<source>Mod Organizer needs a dll to be injected into the game so all mods are visible to it.
There are several means to do this:
*Mod Organizer* (default) In this mode the Mod Organizer itself injects the dll. The disadvantage is that you always have to start the game through MO or a link created by it.
@@ -5466,17 +5824,17 @@ If you use the Steam version of Oblivion the default will NOT work. In this case
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="611"/>
+ <location filename="settingsdialog.ui" line="649"/>
<source>NMM Version</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="631"/>
+ <location filename="settingsdialog.ui" line="669"/>
<source>The Version of Nexus Mod Manager to impersonate.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="634"/>
+ <location filename="settingsdialog.ui" line="672"/>
<source>Mod Organizer uses an API provided by the Nexus to provide features like checking for updates and downloading files. Unfortunately this API has not been made available officially to third party tools like MO so we have to impersonate the Nexus Mod Manager to be allowed in.
On top of this Nexus has used the client identification to lock out outdated versions of NMM to force users to update. This means that MO also needs to impersonate the new version of NMM even if MO doesn&apos;t need an update. Therefore you can configure the version to identify as here.
Please note that MO does identify itself as MO to the webserver, it&apos;s not lying about what it is. It is merely adding a &quot;compatible&quot; NMM version to the user agent.
@@ -5485,36 +5843,36 @@ tl;dr-version: If Nexus-features don&apos;t work, insert the current version num
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="670"/>
+ <location filename="settingsdialog.ui" line="708"/>
<source>If checked, files (i.e. esps, esms and bsas) belonging to the core game can not be disabled in the UI. (default: on)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="673"/>
+ <location filename="settingsdialog.ui" line="711"/>
<source>If checked, files (i.e. esps, esms and bsas) belonging to the core game can not be disabled in the UI. (default: on)
Uncheck this if you want to use Mod Organizer with total conversions (like Nehrim) but be aware that the game will crash if required files are not enabled.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="677"/>
+ <location filename="settingsdialog.ui" line="715"/>
<source>Force-enable game files</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="687"/>
- <location filename="settingsdialog.ui" line="691"/>
+ <location filename="settingsdialog.ui" line="725"/>
+ <location filename="settingsdialog.ui" line="729"/>
<source>For Skyrim, this can be used instead of Archive Invalidation. It should make AI redundant for all Profiles.
For the other games this is not a sufficient replacement for AI!</source>
<translation type="unfinished">Para Skyrim, puede utilizarse en lugar de invalidación de archivo. Debe despedir AI para todos los perfiles.
Para los otros juegos no es un sustituto suficiente AI!</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="695"/>
+ <location filename="settingsdialog.ui" line="733"/>
<source>Back-date BSAs</source>
<translation type="unfinished">Back-date BSAs</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="719"/>
+ <location filename="settingsdialog.ui" line="757"/>
<source>These are workarounds for problems with Mod Organizer. Please make sure you read the help text before changing anything here.</source>
<translation type="unfinished"></translation>
</message>
@@ -5523,27 +5881,27 @@ Para los otros juegos no es un sustituto suficiente AI!</translation>
<translation type="obsolete">Estas son soluciones para problemas con Mod Organizer. Normalmente no son necesarios. Por favor, asegúrese de leer el texto de ayuda antes de cambiar cualquier cosa aquí.</translation>
</message>
<message>
- <location filename="settingsdialog.cpp" line="89"/>
+ <location filename="settingsdialog.cpp" line="95"/>
<source>Select download directory</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.cpp" line="97"/>
+ <location filename="settingsdialog.cpp" line="103"/>
<source>Select mod directory</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.cpp" line="105"/>
+ <location filename="settingsdialog.cpp" line="111"/>
<source>Select cache directory</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.cpp" line="113"/>
+ <location filename="settingsdialog.cpp" line="119"/>
<source>Confirm?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.cpp" line="114"/>
+ <location filename="settingsdialog.cpp" line="120"/>
<source>This will make all dialogs show up again where you checked the &quot;Remember selection&quot;-box. Continue?</source>
<translation type="unfinished"></translation>
</message>
@@ -5669,7 +6027,7 @@ Para los otros juegos no es un sustituto suficiente AI!</translation>
<name>TransferSavesDialog</name>
<message>
<location filename="transfersavesdialog.ui" line="14"/>
- <source>Dialog</source>
+ <source>Transfer Savegames</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -5690,8 +6048,16 @@ On Windows Vista/Windows 7:
C:\Users\[UserName]\Documents\My Games\Skyrim\Saves
On Windows XP:
- C:\Documents and Settings[UserName]\My Documents\My Games\Skyrim\Saves
+ C:\Documents and Settings\[UserName]\My Documents\My Games\Skyrim\Saves
</source>
+ <oldsource>This is a list of characters in the global location.
+
+On Windows Vista/Windows 7:
+ C:\Users\[UserName]\Documents\My Games\Skyrim\Saves
+
+On Windows XP:
+ C:\Documents and Settings[UserName]\My Documents\My Games\Skyrim\Saves
+</oldsource>
<translation type="unfinished"></translation>
</message>
<message>
diff --git a/src/organizer_fr.qm b/src/organizer_fr.qm
deleted file mode 100644
index 4e42eedc..00000000
--- a/src/organizer_fr.qm
+++ /dev/null
Binary files differ
diff --git a/src/organizer_fr.ts b/src/organizer_fr.ts
index ea81eb62..462e1699 100644
--- a/src/organizer_fr.ts
+++ b/src/organizer_fr.ts
@@ -2,6 +2,50 @@
<!DOCTYPE TS>
<TS version="2.0" language="fr">
<context>
+ <name>AboutDialog</name>
+ <message>
+ <location filename="aboutdialog.ui" line="14"/>
+ <location filename="aboutdialog.ui" line="53"/>
+ <source>About</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="aboutdialog.ui" line="66"/>
+ <source>Revision:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="aboutdialog.ui" line="104"/>
+ <source>Used Software</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="aboutdialog.ui" line="117"/>
+ <source>Credits</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="aboutdialog.ui" line="123"/>
+ <source>Translators</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="aboutdialog.ui" line="189"/>
+ <source>Others</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="aboutdialog.ui" line="266"/>
+ <source>Close</source>
+ <translation type="unfinished">Fermer</translation>
+ </message>
+ <message>
+ <location filename="aboutdialog.cpp" line="81"/>
+ <source>No license</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>ActivateModsDialog</name>
<message>
<location filename="activatemodsdialog.ui" line="14"/>
@@ -240,25 +284,30 @@ p, li { white-space: pre-wrap; }
<context>
<name>DownloadList</name>
<message>
- <location filename="downloadlist.cpp" line="63"/>
+ <location filename="downloadlist.cpp" line="64"/>
<source>Name</source>
<translation>Nom</translation>
</message>
<message>
- <location filename="downloadlist.cpp" line="64"/>
+ <location filename="downloadlist.cpp" line="65"/>
<source>Filetime</source>
<translation>Date du fichier</translation>
</message>
<message>
- <location filename="downloadlist.cpp" line="65"/>
+ <location filename="downloadlist.cpp" line="66"/>
<source>Done</source>
<translation type="unfinished">Terminé</translation>
</message>
<message>
- <location filename="downloadlist.cpp" line="79"/>
+ <location filename="downloadlist.cpp" line="82"/>
<source>Information missing, please select &quot;Query Info&quot; from the context menu to re-retrieve.</source>
<translation>Information manquante, veuillez sélectionner &quot;Demander info&quot; dans le menu contextuel pour récupérer.</translation>
</message>
+ <message>
+ <location filename="downloadlist.cpp" line="89"/>
+ <source>pending download</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>DownloadListWidget</name>
@@ -269,16 +318,6 @@ p, li { white-space: pre-wrap; }
<translation>Signet</translation>
</message>
<message>
- <location filename="downloadlistwidget.ui" line="81"/>
- <source>0</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="downloadlistwidget.ui" line="88"/>
- <source>KB</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<location filename="downloadlistwidget.ui" line="99"/>
<location filename="downloadlistwidget.cpp" line="145"/>
<location filename="downloadlistwidget.cpp" line="147"/>
@@ -321,120 +360,135 @@ p, li { white-space: pre-wrap; }
<context>
<name>DownloadListWidgetCompactDelegate</name>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="215"/>
- <location filename="downloadlistwidgetcompact.cpp" line="224"/>
- <location filename="downloadlistwidgetcompact.cpp" line="233"/>
- <location filename="downloadlistwidgetcompact.cpp" line="242"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="241"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="250"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="259"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="268"/>
<source>Are you sure?</source>
<translation>Êtes-vous certain?</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="216"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="242"/>
<source>This will remove all finished downloads from this list and from disk.</source>
<translation>Ceci supprimera tous les téléchargements complétés de la liste et du disque.</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="225"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="251"/>
<source>This will remove all installed downloads from this list and from disk.</source>
<translation>Ceci supprimera tous les téléchargements installés de cette liste et du disque.</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="269"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="298"/>
<source>Install</source>
<translation>Installer</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="271"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="300"/>
<source>Query Info</source>
<translation>Demander info</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="279"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="312"/>
<source>Remove</source>
<translation>Supprimer</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="276"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="309"/>
<source>Cancel</source>
<translation>Annuler</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="120"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="88"/>
+ <source>&lt; mod %1 file %2 &gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="downloadlistwidgetcompact.cpp" line="93"/>
+ <source>Pending</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="downloadlistwidgetcompact.cpp" line="116"/>
<source>Paused</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="123"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="119"/>
<source>Fetching Info 1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="125"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="121"/>
<source>Fetching Info 2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="130"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="126"/>
<source>Installed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="133"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="129"/>
<source>Uninstalled</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="136"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="132"/>
<source>Done</source>
<translation type="unfinished">Terminé</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="234"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="260"/>
<source>This will permanently remove all finished downloads from this list (but NOT from disk).</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="243"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="269"/>
<source>This will permanently remove all installed downloads from this list (but NOT from disk).</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="273"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="302"/>
<source>Delete</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="274"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="304"/>
+ <source>Un-Hide</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="downloadlistwidgetcompact.cpp" line="306"/>
<source>Remove from View</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="277"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="310"/>
<source>Pause</source>
<translation>Interrompre</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="280"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="313"/>
<source>Resume</source>
<translation>Reprendre</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="284"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="318"/>
<source>Delete Installed...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="285"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="319"/>
<source>Delete All...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="287"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="322"/>
<source>Remove Installed...</source>
<translation>Supprimer installé...</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="288"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="323"/>
<source>Remove All...</source>
<translation>Supprimer tout...</translation>
</message>
@@ -442,64 +496,79 @@ p, li { white-space: pre-wrap; }
<context>
<name>DownloadListWidgetDelegate</name>
<message>
- <location filename="downloadlistwidget.cpp" line="228"/>
- <location filename="downloadlistwidget.cpp" line="237"/>
- <location filename="downloadlistwidget.cpp" line="246"/>
- <location filename="downloadlistwidget.cpp" line="255"/>
+ <location filename="downloadlistwidget.cpp" line="253"/>
+ <location filename="downloadlistwidget.cpp" line="262"/>
+ <location filename="downloadlistwidget.cpp" line="271"/>
+ <location filename="downloadlistwidget.cpp" line="280"/>
<source>Are you sure?</source>
<translation>Êtes-vous certain?</translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="229"/>
+ <location filename="downloadlistwidget.cpp" line="254"/>
<source>This will remove all finished downloads from this list and from disk.</source>
<translation>Ceci supprimera tous les téléchargements complétés de la liste et du disque.</translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="238"/>
+ <location filename="downloadlistwidget.cpp" line="263"/>
<source>This will remove all installed downloads from this list and from disk.</source>
<translation>Ceci supprimera tous les téléchargements installés de la liste et du disque.</translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="247"/>
+ <location filename="downloadlistwidget.cpp" line="272"/>
<source>This will remove all finished downloads from this list (but NOT from disk).</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="256"/>
+ <location filename="downloadlistwidget.cpp" line="281"/>
<source>This will remove all installed downloads from this list (but NOT from disk).</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="281"/>
+ <location filename="downloadlistwidget.cpp" line="309"/>
<source>Install</source>
<translation>Installer</translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="283"/>
+ <location filename="downloadlistwidget.cpp" line="311"/>
<source>Query Info</source>
<translation>Demander info</translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="285"/>
+ <location filename="downloadlistwidget.cpp" line="313"/>
<source>Delete</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="286"/>
+ <location filename="downloadlistwidget.cpp" line="315"/>
+ <source>Un-Hide</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="downloadlistwidget.cpp" line="317"/>
<source>Remove from View</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="291"/>
+ <location filename="downloadlistwidget.cpp" line="323"/>
<source>Remove</source>
<translation>Supprimer</translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="288"/>
+ <location filename="downloadlistwidget.cpp" line="320"/>
<source>Cancel</source>
<translation>Annuler</translation>
</message>
<message>
+ <location filename="downloadlistwidget.cpp" line="88"/>
+ <source>&lt; mod %1 file %2 &gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="downloadlistwidget.cpp" line="91"/>
+ <source>Pending</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="downloadlistwidget.cpp" line="118"/>
<source>Fetching Info 1</source>
<translation type="unfinished"></translation>
@@ -510,32 +579,32 @@ p, li { white-space: pre-wrap; }
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="289"/>
+ <location filename="downloadlistwidget.cpp" line="321"/>
<source>Pause</source>
<translation>Interrompre</translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="292"/>
+ <location filename="downloadlistwidget.cpp" line="324"/>
<source>Resume</source>
<translation>Reprendre</translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="296"/>
+ <location filename="downloadlistwidget.cpp" line="329"/>
<source>Delete Installed...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="297"/>
+ <location filename="downloadlistwidget.cpp" line="330"/>
<source>Delete All...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="299"/>
+ <location filename="downloadlistwidget.cpp" line="333"/>
<source>Remove Installed...</source>
<translation>Supprimer installé...</translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="300"/>
+ <location filename="downloadlistwidget.cpp" line="334"/>
<source>Remove All...</source>
<translation>Supprimer tout...</translation>
</message>
@@ -543,73 +612,88 @@ p, li { white-space: pre-wrap; }
<context>
<name>DownloadManager</name>
<message>
- <location filename="downloadmanager.cpp" line="125"/>
+ <location filename="downloadmanager.cpp" line="132"/>
<source>failed to rename &quot;%1&quot; to &quot;%2&quot;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="306"/>
+ <location filename="downloadmanager.cpp" line="342"/>
<source>Download again?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="306"/>
+ <location filename="downloadmanager.cpp" line="342"/>
<source>A file with the same name has already been downloaded. Do you want to download it again? The new file will receive a different name.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="336"/>
+ <location filename="downloadmanager.cpp" line="388"/>
<source>failed to download %1: could not open output file: %2</source>
<translation>impossible de télécharger %1: impossible d&apos;écrire le fichier %2</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="384"/>
+ <location filename="downloadmanager.cpp" line="421"/>
+ <source>Wrong Game</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="downloadmanager.cpp" line="421"/>
+ <source>The download link is for a mod for &quot;%1&quot; but this instance of MO has been set up for &quot;%2&quot;.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="downloadmanager.cpp" line="457"/>
<source>failed to delete %1</source>
<translation>impossible de supprimer %1</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="390"/>
+ <location filename="downloadmanager.cpp" line="463"/>
<source>failed to delete meta file for %1</source>
<translation>impossible de supprimer le méta fichier pour %1</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="450"/>
- <location filename="downloadmanager.cpp" line="468"/>
- <location filename="downloadmanager.cpp" line="481"/>
- <location filename="downloadmanager.cpp" line="494"/>
- <location filename="downloadmanager.cpp" line="505"/>
- <location filename="downloadmanager.cpp" line="540"/>
+ <location filename="downloadmanager.cpp" line="539"/>
+ <location filename="downloadmanager.cpp" line="557"/>
+ <location filename="downloadmanager.cpp" line="570"/>
+ <location filename="downloadmanager.cpp" line="587"/>
+ <location filename="downloadmanager.cpp" line="598"/>
+ <location filename="downloadmanager.cpp" line="633"/>
<source>invalid index %1</source>
<translation>index invalide %1</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="899"/>
+ <location filename="downloadmanager.cpp" line="1042"/>
<source>Information updated</source>
<translation>Information mise à jour</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="901"/>
- <location filename="downloadmanager.cpp" line="915"/>
+ <location filename="downloadmanager.cpp" line="1044"/>
+ <location filename="downloadmanager.cpp" line="1058"/>
<source>No matching file found on Nexus! Maybe this file is no longer available or it was renamed?</source>
<translation>Aucun fichier correspondant trouvé sur Nexus! Peut-être ce fichier n&apos;est-il plus disponible ou a été renommé?</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="903"/>
+ <location filename="downloadmanager.cpp" line="1046"/>
<source>No file on Nexus matches the selected file by name. Please manually choose the correct one.</source>
<translation>Aucun fichier sur Nexus ne correspond au nom du fichier sélectionné. Veuillez s&apos;il-vous-plaît sélectionner le bon manuellement.</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="1032"/>
+ <location filename="downloadmanager.cpp" line="1180"/>
<source>No download server available. Please try again later.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="1074"/>
+ <location filename="downloadmanager.cpp" line="1224"/>
<source>Failed to request file info from nexus: %1</source>
<translation>Impossible de demander l&apos;info du fichier sur Nexus: %1</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="1097"/>
+ <location filename="downloadmanager.cpp" line="1249"/>
+ <source>Download failed. Server reported: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="downloadmanager.cpp" line="1251"/>
<source>Download failed: %1 (%2)</source>
<translation>Téléchargement échoué: %1 (%2)</translation>
</message>
@@ -618,27 +702,31 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">impossible de supprimer le fichier</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="366"/>
- <location filename="downloadmanager.cpp" line="585"/>
- <location filename="downloadmanager.cpp" line="595"/>
- <location filename="downloadmanager.cpp" line="604"/>
- <location filename="downloadmanager.cpp" line="614"/>
- <location filename="downloadmanager.cpp" line="624"/>
- <location filename="downloadmanager.cpp" line="634"/>
- <location filename="downloadmanager.cpp" line="645"/>
- <location filename="downloadmanager.cpp" line="654"/>
- <location filename="downloadmanager.cpp" line="664"/>
- <location filename="downloadmanager.cpp" line="679"/>
+ <location filename="downloadmanager.cpp" line="439"/>
+ <location filename="downloadmanager.cpp" line="506"/>
+ <location filename="downloadmanager.cpp" line="682"/>
+ <location filename="downloadmanager.cpp" line="691"/>
+ <location filename="downloadmanager.cpp" line="701"/>
+ <location filename="downloadmanager.cpp" line="710"/>
+ <location filename="downloadmanager.cpp" line="724"/>
+ <location filename="downloadmanager.cpp" line="734"/>
+ <location filename="downloadmanager.cpp" line="744"/>
+ <location filename="downloadmanager.cpp" line="754"/>
+ <location filename="downloadmanager.cpp" line="765"/>
+ <location filename="downloadmanager.cpp" line="773"/>
+ <location filename="downloadmanager.cpp" line="782"/>
+ <location filename="downloadmanager.cpp" line="792"/>
+ <location filename="downloadmanager.cpp" line="807"/>
<source>invalid index</source>
<translation>index invalide</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="557"/>
+ <location filename="downloadmanager.cpp" line="650"/>
<source>Please enter the nexus mod id</source>
<translation>Veuillez entre l&apos;ID Nexus du mod</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="557"/>
+ <location filename="downloadmanager.cpp" line="650"/>
<source>Mod ID:</source>
<translation>ID du mod:</translation>
</message>
@@ -655,7 +743,7 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">Téléchargement échoué</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="1174"/>
+ <location filename="downloadmanager.cpp" line="1331"/>
<source>failed to re-open %1</source>
<translation>impossible d&apos;ouvrir à nouveau %1</translation>
</message>
@@ -763,7 +851,7 @@ Right now the only case I know of where this needs to be overwritten is for the
<message>
<location filename="editexecutablesdialog.ui" line="169"/>
<location filename="editexecutablesdialog.ui" line="172"/>
- <location filename="editexecutablesdialog.cpp" line="220"/>
+ <location filename="editexecutablesdialog.cpp" line="258"/>
<source>If checked, MO will be closed once the specified executable is run.</source>
<translation>Si cochée, MO sera fermé une fois que le programme sélectionné sera démarré.</translation>
</message>
@@ -780,7 +868,7 @@ Right now the only case I know of where this needs to be overwritten is for the
</message>
<message>
<location filename="editexecutablesdialog.ui" line="188"/>
- <location filename="editexecutablesdialog.cpp" line="190"/>
+ <location filename="editexecutablesdialog.cpp" line="196"/>
<source>Add</source>
<translation>Ajouter</translation>
</message>
@@ -796,42 +884,59 @@ Right now the only case I know of where this needs to be overwritten is for the
<translation>Supprimer</translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="119"/>
+ <location filename="editexecutablesdialog.ui" line="233"/>
+ <source>Close</source>
+ <translation type="unfinished">Fermer</translation>
+ </message>
+ <message>
+ <location filename="editexecutablesdialog.cpp" line="125"/>
<source>Select a binary</source>
<translation>Choisir un programme</translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="119"/>
+ <location filename="editexecutablesdialog.cpp" line="125"/>
<source>Executable (%1)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="143"/>
+ <location filename="editexecutablesdialog.cpp" line="149"/>
<source>Java (32-bit) required</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="144"/>
+ <location filename="editexecutablesdialog.cpp" line="150"/>
<source>MO requires 32-bit java to run this application. If you already have it installed, select javaw.exe from that installation as the binary.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="160"/>
+ <location filename="editexecutablesdialog.cpp" line="166"/>
<source>Select a directory</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="169"/>
+ <location filename="editexecutablesdialog.cpp" line="175"/>
<source>Confirm</source>
<translation type="unfinished">Confirmer</translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="169"/>
+ <location filename="editexecutablesdialog.cpp" line="175"/>
<source>Really remove &quot;%1&quot; from executables?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="217"/>
+ <location filename="editexecutablesdialog.cpp" line="230"/>
+ <location filename="editexecutablesdialog.cpp" line="278"/>
+ <source>Save Changes?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="editexecutablesdialog.cpp" line="231"/>
+ <location filename="editexecutablesdialog.cpp" line="279"/>
+ <source>You made changes to the current executable, do you want to save them?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="editexecutablesdialog.cpp" line="255"/>
<source>MO must be kept running or this application will not work correctly.</source>
<translation type="unfinished"></translation>
</message>
@@ -840,7 +945,7 @@ Right now the only case I know of where this needs to be overwritten is for the
<translation type="obsolete">Programme (*.exe *.bat)</translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="194"/>
+ <location filename="editexecutablesdialog.cpp" line="200"/>
<source>Modify</source>
<translation>Modifier</translation>
</message>
@@ -1053,12 +1158,12 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">mo_archive.dll non chargé: &quot;%1&quot;</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="97"/>
+ <location filename="installationmanager.cpp" line="98"/>
<source>Password required</source>
<translation>Mot de passe requis</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="97"/>
+ <location filename="installationmanager.cpp" line="98"/>
<source>Password</source>
<translation>Mot de passe</translation>
</message>
@@ -1072,13 +1177,13 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="installationmanager.cpp" line="164"/>
- <location filename="installationmanager.cpp" line="252"/>
- <location filename="installationmanager.cpp" line="530"/>
+ <location filename="installationmanager.cpp" line="248"/>
+ <location filename="installationmanager.cpp" line="529"/>
<source>Extracting files</source>
<translation>Extraction des fichiers</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="624"/>
+ <location filename="installationmanager.cpp" line="609"/>
<source>File format &quot;%1&quot; not supported</source>
<translation>Format de fichier &quot;%1&quot; non supporté</translation>
</message>
@@ -1095,82 +1200,82 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">Confirmer</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="75"/>
+ <location filename="installationmanager.cpp" line="76"/>
<source>archive.dll not loaded: &quot;%1&quot;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="443"/>
+ <location filename="installationmanager.cpp" line="439"/>
<source>failed to create backup</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="449"/>
+ <location filename="installationmanager.cpp" line="448"/>
<source>Mod Name</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="449"/>
+ <location filename="installationmanager.cpp" line="448"/>
<source>Name</source>
<translation type="unfinished">Nom</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="502"/>
+ <location filename="installationmanager.cpp" line="501"/>
<source>Invalid name</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="503"/>
+ <location filename="installationmanager.cpp" line="502"/>
<source>The name you entered is invalid, please enter a different one.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="750"/>
+ <location filename="installationmanager.cpp" line="735"/>
<source>None of the available installer plugins were able to handle that archive</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="760"/>
+ <location filename="installationmanager.cpp" line="745"/>
<source>no error</source>
<translation>aucune erreur</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="763"/>
+ <location filename="installationmanager.cpp" line="748"/>
<source>7z.dll not found</source>
<translation>7z.dll introuvable</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="766"/>
+ <location filename="installationmanager.cpp" line="751"/>
<source>7z.dll isn&apos;t valid</source>
<translation>7z.dll invalide</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="769"/>
+ <location filename="installationmanager.cpp" line="754"/>
<source>archive not found</source>
<translation>archive introuvable</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="772"/>
+ <location filename="installationmanager.cpp" line="757"/>
<source>failed to open archive</source>
<translation>impossible d&apos;ouvrir l&apos;archive</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="775"/>
+ <location filename="installationmanager.cpp" line="760"/>
<source>unsupported archive type</source>
<translation>type d&apos;archive non supporté</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="778"/>
+ <location filename="installationmanager.cpp" line="763"/>
<source>internal library error</source>
<translation>erreur de bibliothèque interne</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="781"/>
+ <location filename="installationmanager.cpp" line="766"/>
<source>archive invalid</source>
<translation>archive invalide</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="785"/>
+ <location filename="installationmanager.cpp" line="770"/>
<source>unknown archive error</source>
<translation>erreur d&apos;archive inconnue</translation>
</message>
@@ -1193,7 +1298,7 @@ p, li { white-space: pre-wrap; }
<translation>MO est vérouillé pendant que le programme s&apos;exécute.</translation>
</message>
<message>
- <location filename="lockeddialog.ui" line="51"/>
+ <location filename="lockeddialog.ui" line="54"/>
<source>Unlock</source>
<translation>Dévérouiller</translation>
</message>
@@ -1201,7 +1306,7 @@ p, li { white-space: pre-wrap; }
<context>
<name>LogBuffer</name>
<message>
- <location filename="logbuffer.cpp" line="72"/>
+ <location filename="logbuffer.cpp" line="73"/>
<source>failed to write log to %1: %2</source>
<translation type="unfinished"></translation>
</message>
@@ -1209,12 +1314,12 @@ p, li { white-space: pre-wrap; }
<context>
<name>MOApplication</name>
<message>
- <location filename="moapplication.cpp" line="60"/>
+ <location filename="moapplication.cpp" line="68"/>
<source>an error occured: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="moapplication.cpp" line="65"/>
+ <location filename="moapplication.cpp" line="73"/>
<source>an error occured</source>
<translation type="unfinished"></translation>
</message>
@@ -1289,8 +1394,8 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="mainwindow.ui" line="405"/>
- <location filename="mainwindow.ui" line="722"/>
- <location filename="mainwindow.ui" line="1027"/>
+ <location filename="mainwindow.ui" line="724"/>
+ <location filename="mainwindow.ui" line="1046"/>
<source>Namefilter</source>
<translation type="unfinished"></translation>
</message>
@@ -1403,12 +1508,12 @@ p, li { white-space: pre-wrap; }
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Cette liste contient tous les ESPs et ESMs contenus dans les mods actifs. Ceux-ci requièrent leur propre ordre de chargement. Utilisez le glisser-déposer pour modifier cet ordre. Veuillez noter que MO enregistre l&apos;ordre de chargement seulement pour les mods actif/cochés.&lt;br /&gt;Il y a un excellent outil nommé &amp;quot;BOSS&amp;quot; qui classe automatiquement ces fichiers.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="751"/>
+ <location filename="mainwindow.ui" line="762"/>
<source>List of available BS Archives. Archives not checked here are not managed by MO and ignore installation order.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="754"/>
+ <location filename="mainwindow.ui" line="765"/>
<source>BSA files are archives (comparable to .zip files) that contain data assets (meshes, textures, ...) to be used by the game. As such they &quot;compete&quot; with loose files in your data directory over which is loaded.
By default, BSAs that share their base name with an enabled ESP (i.e. plugin.esp and plugin.bsa) are automatically loaded and will have precedence over all loose files, the installation order you set up to the left is then ignored!
@@ -1416,67 +1521,81 @@ BSAs checked here are loaded in such a way that your installation order is obeye
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="794"/>
- <location filename="mainwindow.ui" line="868"/>
+ <location filename="mainwindow.ui" line="811"/>
+ <location filename="mainwindow.ui" line="880"/>
<source>File</source>
<translation type="unfinished">Fichier</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="799"/>
- <location filename="mainwindow.ui" line="873"/>
+ <location filename="mainwindow.ui" line="819"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Marked Archives (&lt;img src=&quot;:/MO/gui/warning_16&quot;/&gt;) are still loaded on Skyrim but the &lt;a href=&quot;http://forums.bethsoft.com/topic/1354395-update-bsas-and-you/&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;regular file override&lt;/span&gt;&lt;/a&gt; mechanism will apply: Loose files override BSAs, no matter the mod/plugin priority.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.ui" line="885"/>
<source>Mod</source>
<translation type="unfinished">Mod</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="807"/>
- <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Marked Archives (&lt;img src=&quot;:/MO/gui/resources/dialog-warning_16.png&quot;/&gt;) are still loaded on Skyrim but the &lt;a href=&quot;http://forums.bethsoft.com/topic/1354395-update-bsas-and-you/&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;regular file override&lt;/span&gt;&lt;/a&gt; mechanism will apply: Loose files override BSAs, no matter the mod/plugin priority.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <location filename="mainwindow.ui" line="830"/>
+ <source>Data</source>
+ <translation type="unfinished">DATA</translation>
+ </message>
+ <message>
+ <location filename="mainwindow.ui" line="605"/>
+ <source>Plugins</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="818"/>
- <source>Data</source>
- <translation type="unfinished">DATA</translation>
+ <location filename="mainwindow.ui" line="731"/>
+ <source>Sort</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="836"/>
+ <location filename="mainwindow.ui" line="741"/>
+ <source>Archives</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.ui" line="848"/>
<source>refresh data-directory overview</source>
<translation type="unfinished">Actualiser la vue d&apos;ensemble du dossier DATA</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="839"/>
+ <location filename="mainwindow.ui" line="851"/>
<source>Refresh the overview. This may take a moment.</source>
<translation type="unfinished">Actualiser la vue d&apos;ensemble. Ceci peut demander un moment.</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="842"/>
- <location filename="mainwindow.cpp" line="3328"/>
- <location filename="mainwindow.cpp" line="4059"/>
+ <location filename="mainwindow.ui" line="854"/>
+ <location filename="mainwindow.cpp" line="3781"/>
+ <location filename="mainwindow.cpp" line="4604"/>
<source>Refresh</source>
<translation type="unfinished">Actualiser</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="858"/>
+ <location filename="mainwindow.ui" line="870"/>
<source>This is an overview of your data directory as visible to the game (and tools). </source>
<translation type="unfinished">Ceci est une vue d&apos;ensemble du dossier DATA tel qu&apos;il apparaît pour le jeu (et les outils).</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="883"/>
- <location filename="mainwindow.ui" line="886"/>
+ <location filename="mainwindow.ui" line="895"/>
+ <location filename="mainwindow.ui" line="898"/>
<source>Filter the above list so that only conflicts are displayed.</source>
<translation type="unfinished">Filtrer la liste ci-dessus pour afficher seulement les conflits.</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="889"/>
+ <location filename="mainwindow.ui" line="901"/>
<source>Show only conflicts</source>
<translation type="unfinished">Afficher seulement les conflits</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="897"/>
+ <location filename="mainwindow.ui" line="909"/>
<source>Saves</source>
<translation type="unfinished">Sauvegardes</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="921"/>
+ <location filename="mainwindow.ui" line="933"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
@@ -1493,155 +1612,160 @@ p, li { white-space: pre-wrap; }
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Si vous cliquez &amp;quot;Réparer Mods...&amp;quot; dans le menu contextuel, MO tentera d&apos;activer tous les mods, ESPs et ESMs nécessaires pour résoudre le problème. Rien ne sera désactivé!&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="935"/>
+ <location filename="mainwindow.ui" line="947"/>
<source>Downloads</source>
<translation type="unfinished">Téléchargements</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="967"/>
+ <location filename="mainwindow.ui" line="979"/>
<source>This is a list of mods you downloaded from Nexus. Double click one to install it.</source>
<translation type="unfinished">Ceci est une liste de mods que vous avez téléchargé de Nexus. Double-cliquez en un pour l&apos;installer.</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1020"/>
+ <location filename="mainwindow.ui" line="1032"/>
<source>Compact</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1051"/>
+ <location filename="mainwindow.ui" line="1039"/>
+ <source>Show Hidden</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.ui" line="1070"/>
<source>Tool Bar</source>
<translation type="unfinished">Barre d&apos;outils</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1093"/>
+ <location filename="mainwindow.ui" line="1112"/>
<source>Install Mod</source>
<translation type="unfinished">Installer mod</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1096"/>
+ <location filename="mainwindow.ui" line="1115"/>
<source>Install &amp;Mod</source>
<translation type="unfinished">Installer &amp;mod</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1099"/>
+ <location filename="mainwindow.ui" line="1118"/>
<source>Install a new mod from an archive</source>
<translation type="unfinished">Installer un nouveau mod à partir d&apos;une archive</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1102"/>
+ <location filename="mainwindow.ui" line="1121"/>
<source>Ctrl+M</source>
<translation type="unfinished">Ctrl+M</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1111"/>
+ <location filename="mainwindow.ui" line="1130"/>
<source>Profiles</source>
<translation type="unfinished">Profils</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1114"/>
+ <location filename="mainwindow.ui" line="1133"/>
<source>&amp;Profiles</source>
<translation type="unfinished">&amp;Profils</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1117"/>
+ <location filename="mainwindow.ui" line="1136"/>
<source>Configure Profiles</source>
<translation type="unfinished">Configurer les profils</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1120"/>
+ <location filename="mainwindow.ui" line="1139"/>
<source>Ctrl+P</source>
<translation type="unfinished">Ctrl+P</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1129"/>
+ <location filename="mainwindow.ui" line="1148"/>
<source>Executables</source>
<translation type="unfinished">Programmes</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1132"/>
+ <location filename="mainwindow.ui" line="1151"/>
<source>&amp;Executables</source>
<translation type="unfinished">Programm&amp;es</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1135"/>
+ <location filename="mainwindow.ui" line="1154"/>
<source>Configure the executables that can be started through Mod Organizer</source>
<translation type="unfinished">Configure les programmes pouvant être lancés via Mod Organizer</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1138"/>
+ <location filename="mainwindow.ui" line="1157"/>
<source>Ctrl+E</source>
<translation type="unfinished">Ctrl+E</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1147"/>
- <location filename="mainwindow.ui" line="1153"/>
+ <location filename="mainwindow.ui" line="1166"/>
+ <location filename="mainwindow.ui" line="1172"/>
<source>Tools</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1150"/>
+ <location filename="mainwindow.ui" line="1169"/>
<source>&amp;Tools</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1156"/>
+ <location filename="mainwindow.ui" line="1175"/>
<source>Ctrl+I</source>
<translation type="unfinished">Ctrl+H</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1165"/>
+ <location filename="mainwindow.ui" line="1184"/>
<source>Settings</source>
<translation type="unfinished">Réglages</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1168"/>
+ <location filename="mainwindow.ui" line="1187"/>
<source>&amp;Settings</source>
<translation type="unfinished">Réglage&amp;s</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1171"/>
+ <location filename="mainwindow.ui" line="1190"/>
<source>Configure settings and workarounds</source>
<translation type="unfinished">Configurer les réglages et solutions de rechange</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1174"/>
+ <location filename="mainwindow.ui" line="1193"/>
<source>Ctrl+S</source>
<translation type="unfinished">Ctrl+S</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1183"/>
+ <location filename="mainwindow.ui" line="1202"/>
<source>Nexus</source>
<translation type="unfinished">Nexus</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1186"/>
+ <location filename="mainwindow.ui" line="1205"/>
<source>Search nexus network for more mods</source>
<translation type="unfinished">Effectuer une recherche sur Nexus pour plus de mods</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1189"/>
+ <location filename="mainwindow.ui" line="1208"/>
<source>Ctrl+N</source>
<translation type="unfinished">Ctrl+N</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1201"/>
- <location filename="mainwindow.cpp" line="4007"/>
+ <location filename="mainwindow.ui" line="1220"/>
+ <location filename="mainwindow.cpp" line="4545"/>
<source>Update</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1204"/>
+ <location filename="mainwindow.ui" line="1223"/>
<source>Mod Organizer is up-to-date</source>
<translation type="unfinished">Mod Organizer est à jour</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1216"/>
- <location filename="mainwindow.cpp" line="478"/>
+ <location filename="mainwindow.ui" line="1235"/>
+ <location filename="mainwindow.cpp" line="509"/>
<source>No Problems</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1219"/>
+ <location filename="mainwindow.ui" line="1238"/>
<source>This button will be highlighted if MO discovered potential problems in your setup and provide tips on how to fix them.
!Work in progress!
@@ -1649,445 +1773,497 @@ Right now this has very limited functionality</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1231"/>
- <location filename="mainwindow.ui" line="1234"/>
+ <location filename="mainwindow.ui" line="1250"/>
+ <location filename="mainwindow.ui" line="1253"/>
<source>Help</source>
<translation type="unfinished">Aide</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1237"/>
+ <location filename="mainwindow.ui" line="1256"/>
<source>Ctrl+H</source>
<translation type="unfinished">Ctrl+H</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1246"/>
+ <location filename="mainwindow.ui" line="1265"/>
<source>Endorse MO</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1249"/>
- <location filename="mainwindow.cpp" line="4087"/>
+ <location filename="mainwindow.ui" line="1268"/>
+ <location filename="mainwindow.cpp" line="4633"/>
<source>Endorse Mod Organizer</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="204"/>
+ <location filename="mainwindow.cpp" line="223"/>
<source>Toolbar</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="205"/>
+ <location filename="mainwindow.cpp" line="224"/>
<source>Desktop</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="206"/>
+ <location filename="mainwindow.cpp" line="225"/>
<source>Start Menu</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="475"/>
+ <location filename="mainwindow.cpp" line="505"/>
<source>Problems</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="476"/>
+ <location filename="mainwindow.cpp" line="506"/>
<source>There are potential problems with your setup</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="479"/>
+ <location filename="mainwindow.cpp" line="510"/>
<source>Everything seems to be in order</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="531"/>
+ <location filename="mainwindow.cpp" line="568"/>
<source>Help on UI</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="535"/>
+ <location filename="mainwindow.cpp" line="572"/>
<source>Documentation Wiki</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="539"/>
+ <location filename="mainwindow.cpp" line="576"/>
<source>Report Issue</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="543"/>
+ <location filename="mainwindow.cpp" line="580"/>
<source>Tutorials</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="670"/>
+ <location filename="mainwindow.cpp" line="705"/>
<source>failed to save load order: %1</source>
<translation type="unfinished">impossible d&apos;enregistrer l&apos;ordre de chargement: %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="600"/>
- <source>failed to save archives order, do you have write access to &quot;%1&quot;?</source>
+ <location filename="mainwindow.cpp" line="619"/>
+ <source>About</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="620"/>
+ <source>About Qt</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="687"/>
+ <location filename="mainwindow.cpp" line="717"/>
<source>Name</source>
<translation type="unfinished">Nom</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="688"/>
+ <location filename="mainwindow.cpp" line="718"/>
<source>Please enter a name for the new profile</source>
<translation type="unfinished">Veuillez inscrire un nom pour le nouveau profil</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="696"/>
+ <location filename="mainwindow.cpp" line="726"/>
<source>failed to create profile: %1</source>
<translation type="unfinished">impossible de créer le profil: %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="739"/>
+ <location filename="mainwindow.cpp" line="769"/>
<source>Show tutorial?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="740"/>
+ <location filename="mainwindow.cpp" line="770"/>
<source>You are starting Mod Organizer for the first time. Do you want to show a tutorial of its basic features? If you choose no you can always start the tutorial from the &quot;Help&quot;-menu.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="769"/>
+ <location filename="mainwindow.cpp" line="801"/>
<source>Downloads in progress</source>
<translation type="unfinished">Téléchargements en cours</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="770"/>
+ <location filename="mainwindow.cpp" line="802"/>
<source>There are still downloads in progress, do you really want to quit?</source>
<translation type="unfinished">Il encore des téléchargements en cours, voulez-vous vraiment quitter?</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="816"/>
+ <location filename="mainwindow.cpp" line="848"/>
<source>failed to read savegame: %1</source>
<translation type="unfinished">impossible de lire la sauvegarde: %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="941"/>
+ <location filename="mainwindow.cpp" line="972"/>
<source>Plugin &quot;%1&quot; failed: %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1183"/>
+ <location filename="mainwindow.cpp" line="1085"/>
+ <source>Plugin error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="1086"/>
+ <source>It appears the plugin &quot;%1&quot; failed to load last startup and caused MO to crash. Do you want to disable it?
+(Please note: If this is the first time you see this message for this plugin you may want to give it another try. The plugin may be able to recover from the problem)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="1270"/>
<source>Failed to start &quot;%1&quot;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1185"/>
+ <location filename="mainwindow.cpp" line="1272"/>
<source>Waiting</source>
<translation type="unfinished">Attente</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1185"/>
+ <location filename="mainwindow.cpp" line="1272"/>
<source>Please press OK once you&apos;re logged into steam.</source>
<translation type="unfinished">Veuillez cliquer OK une fois connecté à steam.</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1197"/>
<source>&quot;%1&quot; not found</source>
- <translation type="unfinished">&quot;%1&quot; introuvable</translation>
+ <translation type="obsolete">&quot;%1&quot; introuvable</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1211"/>
+ <location filename="mainwindow.cpp" line="1298"/>
<source>Start Steam?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1212"/>
+ <location filename="mainwindow.cpp" line="1299"/>
<source>Steam is required to be running already to correctly start the game. Should MO try to start steam now?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1426"/>
+ <location filename="mainwindow.cpp" line="1526"/>
<source>Also in: &lt;br&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1437"/>
+ <location filename="mainwindow.cpp" line="1537"/>
<source>No conflict</source>
<translation type="unfinished">Aucun conflit</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1552"/>
+ <location filename="mainwindow.cpp" line="1692"/>
<source>&lt;Edit...&gt;</source>
<translation type="unfinished">&lt;Modifier...&gt;</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1771"/>
+ <location filename="mainwindow.cpp" line="1929"/>
<source>This bsa is enabled in the ini file so it may be required!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1778"/>
+ <location filename="mainwindow.cpp" line="1936"/>
<source>This archive will still be loaded since there is a plugin of the same name but its files will not follow installation order!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1833"/>
+ <location filename="mainwindow.cpp" line="1991"/>
<source>Activating Network Proxy</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1962"/>
- <location filename="mainwindow.cpp" line="3755"/>
+ <location filename="mainwindow.cpp" line="2122"/>
+ <location filename="mainwindow.cpp" line="4248"/>
<source>Installation successful</source>
<translation type="unfinished">Installation réussie</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1973"/>
- <location filename="mainwindow.cpp" line="3768"/>
+ <location filename="mainwindow.cpp" line="2133"/>
+ <location filename="mainwindow.cpp" line="4261"/>
<source>Configure Mod</source>
<translation type="unfinished">Configurer mod</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1974"/>
- <location filename="mainwindow.cpp" line="3769"/>
+ <location filename="mainwindow.cpp" line="2134"/>
+ <location filename="mainwindow.cpp" line="4262"/>
<source>This mod contains ini tweaks. Do you want to configure them now?</source>
<translation type="unfinished">Ce mod contient des ajustement pour les fichiers ini. Désirez-vous les configurer maintenant?</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1980"/>
- <location filename="mainwindow.cpp" line="3775"/>
+ <location filename="mainwindow.cpp" line="2140"/>
+ <location filename="mainwindow.cpp" line="4268"/>
<source>mod &quot;%1&quot; not found</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1983"/>
- <location filename="mainwindow.cpp" line="3781"/>
+ <location filename="mainwindow.cpp" line="2143"/>
+ <location filename="mainwindow.cpp" line="4274"/>
<source>Installation cancelled</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1983"/>
- <location filename="mainwindow.cpp" line="3781"/>
+ <location filename="mainwindow.cpp" line="2143"/>
+ <location filename="mainwindow.cpp" line="4274"/>
<source>The mod was not installed completely.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2018"/>
+ <location filename="mainwindow.cpp" line="2292"/>
<source>Some plugins could not be loaded</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2021"/>
- <location filename="mainwindow.cpp" line="2038"/>
+ <location filename="mainwindow.cpp" line="2295"/>
+ <source>Too many esps and esms enabled</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="2298"/>
+ <location filename="mainwindow.cpp" line="2319"/>
<source>Description missing</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2030"/>
- <source>The following Plugins could not be loaded. The reason may be missing dependencies (i.e. python) or an outdated version:&lt;ul&gt;</source>
+ <location filename="mainwindow.cpp" line="2315"/>
+ <source>The game doesn&apos;t allow more than 255 active plugins (including the official ones) to be loaded. You have to disable some unused plugins or merge some plugins into one. You can find a guide here: &lt;a href=&quot;http://wiki.step-project.com/Guide:Merging_Plugins&quot;&gt;http://wiki.step-project.com/Guide:Merging_Plugins&lt;/a&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2060"/>
+ <location filename="mainwindow.cpp" line="2341"/>
<source>Choose Mod</source>
<translation type="unfinished">Choisir mod</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2061"/>
+ <location filename="mainwindow.cpp" line="2342"/>
<source>Mod Archive</source>
<translation type="unfinished">Archive de mod</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2214"/>
+ <location filename="mainwindow.cpp" line="2495"/>
<source>Start Tutorial?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2215"/>
+ <location filename="mainwindow.cpp" line="2496"/>
<source>You&apos;re about to start a tutorial. For technical reasons it&apos;s not possible to end the tutorial early. Continue?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2360"/>
- <location filename="mainwindow.cpp" line="3683"/>
+ <location filename="mainwindow.cpp" line="2651"/>
+ <location filename="mainwindow.cpp" line="4171"/>
<source>Download started</source>
<translation type="unfinished">Téléchargement commencé</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2391"/>
+ <location filename="mainwindow.cpp" line="2682"/>
<source>failed to update mod list: %1</source>
<translation type="unfinished">impossible de mettre à jour la liste de mods: %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2418"/>
+ <location filename="mainwindow.cpp" line="2711"/>
<source>failed to spawn notepad.exe: %1</source>
<translation type="unfinished">impossible de lancer notepad.exe: %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2459"/>
+ <location filename="mainwindow.cpp" line="2752"/>
<source>failed to open %1</source>
<translation type="unfinished">impossible d&apos;ouvrir %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2537"/>
+ <location filename="mainwindow.cpp" line="2830"/>
<source>failed to change origin name: %1</source>
<translation type="unfinished">impossible de changer le nom d&apos;origine: %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2676"/>
+ <location filename="mainwindow.cpp" line="2860"/>
+ <source>failed to move &quot;%1&quot; from mod &quot;%2&quot; to &quot;%3&quot;: %4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="2997"/>
<source>Multiple esps activated, please check that they don&apos;t conflict.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3005"/>
- <location filename="mainwindow.cpp" line="3339"/>
+ <location filename="mainwindow.cpp" line="3345"/>
+ <location filename="mainwindow.cpp" line="3792"/>
<source>Create Mod...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3006"/>
- <source>This will move all files from overwrite into a new, regular mod.
-Please enter a name: </source>
+ <location filename="mainwindow.cpp" line="3355"/>
+ <source>A mod with this name already exists</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3015"/>
- <source>A mod with this name already exists</source>
+ <location filename="mainwindow.cpp" line="3613"/>
+ <source>Continue?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3410"/>
+ <location filename="mainwindow.cpp" line="3614"/>
+ <source>The versioning scheme decides which version is considered newer than another.
+This function will guess the versioning scheme under the assumption that the installed version is outdated.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="3634"/>
+ <location filename="mainwindow.cpp" line="4516"/>
+ <source>Sorry</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="3635"/>
+ <source>I don&apos;t know a versioning scheme where %1 is newer than %2.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="3883"/>
<source>&lt;All&gt;</source>
<translation type="unfinished">&lt;Tous&gt;</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2589"/>
+ <location filename="mainwindow.cpp" line="2909"/>
<source>&lt;Checked&gt;</source>
<translation type="unfinished">&lt;Cochés&gt;</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="943"/>
+ <location filename="mainwindow.cpp" line="974"/>
<source>Plugin &quot;%1&quot; failed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1007"/>
+ <location filename="mainwindow.cpp" line="1047"/>
<source>failed to init plugin %1: %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2590"/>
+ <location filename="mainwindow.cpp" line="2307"/>
+ <source>The following plugins could not be loaded. The reason may be missing dependencies (i.e. python) or an outdated version:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="2910"/>
<source>&lt;Unchecked&gt;</source>
<translation type="unfinished">&lt;Décochés&gt;</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2591"/>
+ <location filename="mainwindow.cpp" line="2911"/>
<source>&lt;Update&gt;</source>
<translation type="unfinished">&lt;Rafraichir&gt;</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2592"/>
+ <location filename="mainwindow.cpp" line="2912"/>
<source>&lt;No category&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2593"/>
+ <location filename="mainwindow.cpp" line="2913"/>
<source>&lt;Conflicted&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2626"/>
+ <location filename="mainwindow.cpp" line="2914"/>
+ <source>&lt;Not Endorsed&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="2947"/>
<source>failed to rename mod: %1</source>
<translation type="unfinished">impossible de renommer le mod: %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2639"/>
+ <location filename="mainwindow.cpp" line="2960"/>
<source>Overwrite?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2640"/>
+ <location filename="mainwindow.cpp" line="2961"/>
<source>This will replace the existing mod &quot;%1&quot;. Continue?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2643"/>
+ <location filename="mainwindow.cpp" line="2964"/>
<source>failed to remove mod &quot;%1&quot;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2647"/>
- <location filename="mainwindow.cpp" line="3953"/>
- <location filename="mainwindow.cpp" line="3977"/>
+ <location filename="mainwindow.cpp" line="2968"/>
+ <location filename="mainwindow.cpp" line="4446"/>
+ <location filename="mainwindow.cpp" line="4470"/>
<source>failed to rename &quot;%1&quot; to &quot;%2&quot;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2702"/>
- <location filename="mainwindow.cpp" line="3243"/>
- <location filename="mainwindow.cpp" line="3252"/>
+ <location filename="mainwindow.cpp" line="3024"/>
+ <location filename="mainwindow.cpp" line="3687"/>
+ <location filename="mainwindow.cpp" line="3695"/>
+ <location filename="mainwindow.cpp" line="3902"/>
<source>Confirm</source>
<translation type="unfinished">Confirmer</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2703"/>
+ <location filename="mainwindow.cpp" line="3025"/>
<source>Remove the following mods?&lt;br&gt;&lt;ul&gt;%1&lt;/ul&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2714"/>
+ <location filename="mainwindow.cpp" line="3036"/>
<source>failed to remove mod: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2744"/>
- <location filename="mainwindow.cpp" line="2747"/>
+ <location filename="mainwindow.cpp" line="3071"/>
+ <location filename="mainwindow.cpp" line="3074"/>
<source>Failed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2744"/>
+ <location filename="mainwindow.cpp" line="3071"/>
<source>Installation file no longer exists</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2748"/>
+ <location filename="mainwindow.cpp" line="3075"/>
<source>Mods installed with old versions of MO can&apos;t be reinstalled in this way.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2763"/>
- <location filename="mainwindow.cpp" line="2790"/>
+ <location filename="mainwindow.cpp" line="3090"/>
+ <location filename="mainwindow.cpp" line="3117"/>
<source>You need to be logged in with Nexus to endorse</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2906"/>
- <location filename="mainwindow.cpp" line="4335"/>
+ <location filename="mainwindow.cpp" line="3249"/>
+ <location filename="mainwindow.cpp" line="4882"/>
<source>Extract BSA</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2907"/>
+ <location filename="mainwindow.cpp" line="3250"/>
<source>This mod contains at least one BSA. Do you want to unpack it?
(This removes the BSA after completion. If you don&apos;t know about BSAs, just select no)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2917"/>
- <location filename="mainwindow.cpp" line="4292"/>
- <location filename="mainwindow.cpp" line="4343"/>
+ <location filename="mainwindow.cpp" line="3259"/>
+ <location filename="mainwindow.cpp" line="4839"/>
+ <location filename="mainwindow.cpp" line="4890"/>
<source>failed to read %1: %2</source>
<translation type="unfinished">Échec de lecture %1: %2</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2930"/>
- <location filename="mainwindow.cpp" line="4354"/>
+ <location filename="mainwindow.cpp" line="3272"/>
+ <location filename="mainwindow.cpp" line="4901"/>
<source>This archive contains invalid hashes. Some files may be broken.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2964"/>
+ <location filename="mainwindow.cpp" line="3306"/>
<source>Nexus ID for this Mod is unknown</source>
<translation type="unfinished"></translation>
</message>
@@ -2100,371 +2276,456 @@ Please enter a name: </source>
<translation type="obsolete">Choisir priorité</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3243"/>
+ <location filename="mainwindow.cpp" line="3687"/>
<source>Really enable all visible mods?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3252"/>
+ <location filename="mainwindow.cpp" line="3695"/>
<source>Really disable all visible mods?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3261"/>
+ <location filename="mainwindow.cpp" line="3703"/>
<source>Choose what to export</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3263"/>
+ <location filename="mainwindow.cpp" line="3705"/>
<source>Everything</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3263"/>
+ <location filename="mainwindow.cpp" line="3705"/>
<source>All installed mods are included in the list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3264"/>
+ <location filename="mainwindow.cpp" line="3706"/>
<source>Active Mods</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3264"/>
+ <location filename="mainwindow.cpp" line="3706"/>
<source>Only active (checked) mods from your current profile are included</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3265"/>
+ <location filename="mainwindow.cpp" line="3707"/>
<source>Visible</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3265"/>
+ <location filename="mainwindow.cpp" line="3707"/>
<source>All mods visible in the mod list are included</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3308"/>
+ <location filename="mainwindow.cpp" line="3750"/>
<source>export failed: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3321"/>
+ <location filename="mainwindow.cpp" line="3774"/>
<source>Install Mod...</source>
<translation type="unfinished">Installer mod...</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3323"/>
+ <location filename="mainwindow.cpp" line="3776"/>
<source>Enable all visible</source>
<translation type="unfinished">Activer tous les mods visibles</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3324"/>
+ <location filename="mainwindow.cpp" line="3777"/>
<source>Disable all visible</source>
<translation type="unfinished">Désactiver tous les mods visibles</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3326"/>
+ <location filename="mainwindow.cpp" line="3779"/>
<source>Check all for update</source>
<translation type="unfinished">Vérifier toutes les mises à jour</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3330"/>
+ <location filename="mainwindow.cpp" line="3783"/>
<source>Export to csv...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3338"/>
+ <location filename="mainwindow.cpp" line="3791"/>
<source>Sync to Mods...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3342"/>
+ <location filename="mainwindow.cpp" line="3795"/>
<source>Restore Backup</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3343"/>
+ <location filename="mainwindow.cpp" line="3796"/>
<source>Remove Backup...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3345"/>
<source>Set Category</source>
- <translation type="unfinished">Assigner catégorie</translation>
+ <translation type="obsolete">Assigner catégorie</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3349"/>
+ <location filename="mainwindow.cpp" line="3808"/>
<source>Primary Category</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3353"/>
+ <location filename="mainwindow.cpp" line="3815"/>
+ <source>Change versioning scheme</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="3819"/>
+ <source>Un-ignore update</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="3821"/>
+ <source>Ignore update</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="3826"/>
<source>Rename Mod...</source>
<translation type="unfinished">Renommer mod...</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3354"/>
+ <location filename="mainwindow.cpp" line="3827"/>
<source>Remove Mod...</source>
<translation type="unfinished">Supprimer mod...</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3355"/>
+ <location filename="mainwindow.cpp" line="3828"/>
<source>Reinstall Mod</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3358"/>
+ <location filename="mainwindow.cpp" line="3831"/>
<source>Un-Endorse</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3361"/>
- <location filename="mainwindow.cpp" line="3365"/>
+ <location filename="mainwindow.cpp" line="3834"/>
+ <location filename="mainwindow.cpp" line="3838"/>
<source>Endorse</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3362"/>
+ <location filename="mainwindow.cpp" line="3835"/>
<source>Won&apos;t endorse</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3368"/>
+ <location filename="mainwindow.cpp" line="3841"/>
<source>Endorsement state unknown</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3375"/>
+ <location filename="mainwindow.cpp" line="3848"/>
<source>Ignore missing data</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3378"/>
+ <location filename="mainwindow.cpp" line="3851"/>
<source>Visit on Nexus</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3379"/>
+ <location filename="mainwindow.cpp" line="3852"/>
<source>Open in explorer</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3382"/>
+ <location filename="mainwindow.cpp" line="3855"/>
<source>Information...</source>
<translation type="unfinished">Information...</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3388"/>
- <location filename="mainwindow.cpp" line="4514"/>
+ <location filename="mainwindow.cpp" line="3861"/>
+ <location filename="mainwindow.cpp" line="5086"/>
<source>Exception: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3390"/>
- <location filename="mainwindow.cpp" line="4516"/>
+ <location filename="mainwindow.cpp" line="3863"/>
+ <location filename="mainwindow.cpp" line="5088"/>
<source>Unknown exception</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3412"/>
+ <location filename="mainwindow.cpp" line="3885"/>
<source>&lt;Multiple&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3524"/>
+ <location filename="mainwindow.cpp" line="3902"/>
+ <source>Really delete &quot;%1&quot;?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="4013"/>
<source>Fix Mods...</source>
<translation type="unfinished">Réparer mods...</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3548"/>
- <location filename="mainwindow.cpp" line="3579"/>
+ <location filename="mainwindow.cpp" line="4014"/>
+ <source>Delete</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="4038"/>
+ <location filename="mainwindow.cpp" line="4069"/>
<source>failed to remove %1</source>
<translation type="unfinished">Impossible de supprimer %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3563"/>
- <location filename="mainwindow.cpp" line="3594"/>
+ <location filename="mainwindow.cpp" line="4053"/>
+ <location filename="mainwindow.cpp" line="4084"/>
<source>failed to create %1</source>
<translation type="unfinished">impossible de créer %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3615"/>
+ <location filename="mainwindow.cpp" line="4107"/>
<source>Can&apos;t change download directory while downloads are in progress!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3686"/>
+ <location filename="mainwindow.cpp" line="4174"/>
<source>Download failed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3830"/>
+ <location filename="mainwindow.cpp" line="4323"/>
<source>failed to write to file %1</source>
<translation type="unfinished">impossible d&apos;écrire dans le fichier %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3836"/>
+ <location filename="mainwindow.cpp" line="4329"/>
<source>%1 written</source>
<translation type="unfinished">%1 écrit</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3875"/>
+ <location filename="mainwindow.cpp" line="4368"/>
<source>Select binary</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3875"/>
+ <location filename="mainwindow.cpp" line="4368"/>
<source>Binary</source>
<translation type="unfinished">Programme</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3901"/>
+ <location filename="mainwindow.cpp" line="4394"/>
<source>Enter Name</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3902"/>
+ <location filename="mainwindow.cpp" line="4395"/>
<source>Please enter a name for the executable</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3913"/>
+ <location filename="mainwindow.cpp" line="4406"/>
<source>Not an executable</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3913"/>
+ <location filename="mainwindow.cpp" line="4406"/>
<source>This is not a recognized executable.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3938"/>
- <location filename="mainwindow.cpp" line="3963"/>
+ <location filename="mainwindow.cpp" line="4431"/>
+ <location filename="mainwindow.cpp" line="4456"/>
<source>Replace file?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3938"/>
+ <location filename="mainwindow.cpp" line="4431"/>
<source>There already is a hidden version of this file. Replace it?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3941"/>
- <location filename="mainwindow.cpp" line="3966"/>
+ <location filename="mainwindow.cpp" line="4434"/>
+ <location filename="mainwindow.cpp" line="4459"/>
<source>File operation failed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3941"/>
- <location filename="mainwindow.cpp" line="3966"/>
+ <location filename="mainwindow.cpp" line="4434"/>
+ <location filename="mainwindow.cpp" line="4459"/>
<source>Failed to remove &quot;%1&quot;. Maybe you lack the required file permissions?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3963"/>
+ <location filename="mainwindow.cpp" line="4456"/>
<source>There already is a visible version of this file. Replace it?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4009"/>
+ <location filename="mainwindow.cpp" line="4489"/>
+ <source>file not found: %1</source>
+ <translation type="unfinished">fichier introuvable: %1</translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="4502"/>
+ <source>failed to generate preview for %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="4516"/>
+ <source>Sorry, can&apos;t preview anything. This function currently does not support extracting from bsas.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="4547"/>
<source>Update available</source>
<translation type="unfinished">Mise à jour disponible</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4046"/>
+ <location filename="mainwindow.cpp" line="4584"/>
<source>Open/Execute</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4047"/>
+ <location filename="mainwindow.cpp" line="4585"/>
<source>Add as Executable</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4051"/>
+ <location filename="mainwindow.cpp" line="4589"/>
+ <source>Preview</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="4595"/>
<source>Un-Hide</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4053"/>
+ <location filename="mainwindow.cpp" line="4597"/>
<source>Hide</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4058"/>
+ <location filename="mainwindow.cpp" line="4603"/>
<source>Write To File...</source>
<translation type="unfinished">Écriture du fichier...</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4088"/>
+ <location filename="mainwindow.cpp" line="4634"/>
<source>Do you want to endorse Mod Organizer on %1 now?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4505"/>
+ <location filename="mainwindow.cpp" line="5047"/>
+ <source>Remove</source>
+ <translation type="unfinished">Supprimer</translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="5077"/>
<source>Unlock load order</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4508"/>
+ <location filename="mainwindow.cpp" line="5080"/>
<source>Lock load order</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4223"/>
+ <location filename="mainwindow.cpp" line="5149"/>
+ <source>BOSS working</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="5157"/>
+ <source>failed to run boss: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="4770"/>
<source>Request to Nexus failed: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4230"/>
- <location filename="mainwindow.cpp" line="4247"/>
+ <location filename="mainwindow.cpp" line="1284"/>
+ <source>Executable &quot;%1&quot; not found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="1789"/>
+ <source>Failed to refresh list of esps: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="3346"/>
+ <source>This will move all files from overwrite into a new, regular mod.
+Please enter a name:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="3798"/>
+ <source>Add/Remove Categories</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="3803"/>
+ <source>Replace Categories</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="4777"/>
+ <location filename="mainwindow.cpp" line="4794"/>
<source>login successful</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4256"/>
+ <location filename="mainwindow.cpp" line="4803"/>
<source>login failed: %1. Trying to download anyway</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4262"/>
+ <location filename="mainwindow.cpp" line="4809"/>
<source>login failed: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4271"/>
+ <location filename="mainwindow.cpp" line="4818"/>
<source>login failed: %1. You need to log-in with Nexus to update MO.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4304"/>
+ <location filename="mainwindow.cpp" line="4851"/>
<source>Error</source>
<translation type="unfinished">Erreur</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4304"/>
+ <location filename="mainwindow.cpp" line="4851"/>
<source>failed to extract %1 (errorcode %2)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4399"/>
+ <location filename="mainwindow.cpp" line="4946"/>
<source>Extract...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4449"/>
+ <location filename="mainwindow.cpp" line="5002"/>
<source>Edit Categories...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4485"/>
+ <location filename="mainwindow.cpp" line="5057"/>
<source>Enable all</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4486"/>
+ <location filename="mainwindow.cpp" line="5058"/>
<source>Disable all</source>
<translation type="unfinished"></translation>
</message>
@@ -2494,7 +2755,7 @@ Please enter a name: </source>
<context>
<name>ModInfoBackup</name>
<message>
- <location filename="modinfo.cpp" line="784"/>
+ <location filename="modinfo.cpp" line="820"/>
<source>This is the backup of a mod</source>
<translation type="unfinished"></translation>
</message>
@@ -2507,87 +2768,85 @@ Please enter a name: </source>
<translation>Info sur le mod</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="27"/>
+ <location filename="modinfodialog.ui" line="30"/>
<source>Textfiles</source>
<translation>Fichiers texte</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="39"/>
+ <location filename="modinfodialog.ui" line="42"/>
<source>A list of text-files in the mod directory.</source>
<translation>Une liste des fichiers texte de ce mod.</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="42"/>
+ <location filename="modinfodialog.ui" line="45"/>
<source>A list of text-files in the mod directory like readmes. </source>
<translation>Une liste des fichiers texte de ce mod, comme les lisez-moi.</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="74"/>
+ <location filename="modinfodialog.ui" line="77"/>
<source>INI-Files</source>
<translation>Fichiers INI</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="94"/>
+ <location filename="modinfodialog.ui" line="97"/>
<source>This is a list of .ini files in the mod.</source>
<translation>Ceci est une liste des fichiers .ini présents dans le mod.</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="97"/>
+ <location filename="modinfodialog.ui" line="100"/>
<source>This is a list of .ini files in the mod. These are usually used to configure the behaviour of mods if there are configurable parameters.</source>
<translation>Ceci est une liste des fichiers .ini présents dans le mod. Ils sont généralement utilisés pour configurer le comportement du mod lorsqu&apos;il y a des paramètres configurables.</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="143"/>
+ <location filename="modinfodialog.ui" line="149"/>
<source>Save changes to the file.</source>
<translation>Enregistre les changements au fichier.</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="146"/>
+ <location filename="modinfodialog.ui" line="152"/>
<source>Save changes to the file. This overwrites the original. There is no automatic backup!</source>
<translation>Enregistrer les changements au fichier. Ceci écrase l&apos;original. Il n&apos;y a pas de copie de sauvegarde automatique!</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="64"/>
- <location filename="modinfodialog.ui" line="149"/>
+ <location filename="modinfodialog.ui" line="67"/>
+ <location filename="modinfodialog.ui" line="155"/>
<source>Save</source>
<translation>Enregistrer</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="159"/>
+ <location filename="modinfodialog.ui" line="165"/>
<source>Images</source>
<translation>Images</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="214"/>
+ <location filename="modinfodialog.ui" line="220"/>
<source>Images located in the mod.</source>
<translation>Images présentes dans le mod.</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="217"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;This lists all the images (.jpg and .png) in the mod directory, like screenshots and such. Click one to get a larger view.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <translation>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+ <translation type="obsolete">&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Ceci est la liste de toutes les images (.jpg et .png) présentes dans le dossier du mod, telles captures d&apos;écran et autres. Cliquez-en une pour une vue aggrandie.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="254"/>
- <location filename="modinfodialog.ui" line="277"/>
+ <location filename="modinfodialog.ui" line="256"/>
+ <location filename="modinfodialog.ui" line="275"/>
<source>Optional ESPs</source>
<translation>ESPs optionnels</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="260"/>
+ <location filename="modinfodialog.ui" line="262"/>
<source>List of esps and esms that can not be loaded by the game.</source>
<translation>Liste des esps et esms ne pouvant pas être chargés par le jeu.</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="263"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
@@ -2596,7 +2855,7 @@ p, li { white-space: pre-wrap; }
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;They usually contain optional functionality, see the readme.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;&quot;&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Most mods do not have optional esps, so chances are good you are looking at an empty list.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <translation>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+ <translation type="obsolete">&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
@@ -2606,103 +2865,116 @@ p, li { white-space: pre-wrap; }
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;La plupart des mods ne contenant pas d&apos;esps optionnels, il est très probable que cette liste soit vide.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="292"/>
+ <location filename="modinfodialog.ui" line="223"/>
+ <source>This lists all the images (.jpg and .png) in the mod directory, like screenshots and such. Click one to get a larger view.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="modinfodialog.ui" line="265"/>
+ <source>List of esps and esms contained in this plugin that currently can not be loaded by the game. They will not even appear in the esp-list in the main MO-window.
+They usually contain optional functionality, see the readme.
+
+Most mods do not have optional esps, so chances are good you are looking at an empty list.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="modinfodialog.ui" line="290"/>
<source>Make the selected mod in the lower list unavailable.</source>
<translation>Rendre le mod sélectionné dans la liste du bas non-disponible.</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="295"/>
+ <location filename="modinfodialog.ui" line="293"/>
<source>The selected esp (in the lower list) will be pushed into a subdirectory of the mod and will thus become &quot;invisible&quot; to the game. It can then no longer be activated.</source>
<translation>L&apos;ESP sélectionné (dans la liste inférieure) sera poussé dans un sous-dossier du mod et deviendra ainsi &quot;invisible&quot; pour le jeu. Il ne pourra alors plus être activé.</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="321"/>
+ <location filename="modinfodialog.ui" line="319"/>
<source>Move a file to the data directory.</source>
<translation>Déplacer un fichier vers le dossier DATA.</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="324"/>
+ <location filename="modinfodialog.ui" line="322"/>
<source>This moves a esp to the esp directory so it can be enabled in the main window. Please note that the ESP merely becomes &quot;available&quot;, it will not necessarily be loaded! That is configured in the main window of omo.</source>
<translation>Ceci déplace un ESP vers le répertoire DATA afin qu&apos;il puisse être activé dans la fenêtre principale. Veuillez noter que l&apos;ESP devient simplement &quot;disponible&quot;, il ne sera pas nécessairement chargé. Celà doit être configuré dans la fenêtre principale de MO.</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="359"/>
+ <location filename="modinfodialog.ui" line="357"/>
<source>ESPs in the data directory and thus visible to the game.</source>
<translation>ESPs dans le dossier DATA et donc visibles par le jeu.</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="362"/>
+ <location filename="modinfodialog.ui" line="360"/>
<source>These are the mod files that are in the (virtual) data directory of your game and will thus be selecteable in the esp list in the main window.</source>
<translation>Ce sont les mods qui se trouvent dans le répertoire DATA (virtuel) de votre jeu et qu&apos;il sera donc possible de sélectionner dans la fenêtre principale.</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="369"/>
+ <location filename="modinfodialog.ui" line="367"/>
<source>Available ESPs</source>
<translation>ESPs disponibles</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="377"/>
+ <location filename="modinfodialog.ui" line="375"/>
<source>Conflicts</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="385"/>
+ <location filename="modinfodialog.ui" line="383"/>
<source>The following conflicted files are provided by this mod</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="432"/>
- <location filename="modinfodialog.ui" line="479"/>
+ <location filename="modinfodialog.ui" line="433"/>
+ <location filename="modinfodialog.ui" line="483"/>
<source>File</source>
<translation type="unfinished">Fichier</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="437"/>
+ <location filename="modinfodialog.ui" line="438"/>
<source>Overwritten Mods</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="447"/>
+ <location filename="modinfodialog.ui" line="448"/>
<source>The following conflicted files are provided by other mods</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="484"/>
+ <location filename="modinfodialog.ui" line="488"/>
<source>Providing Mod</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="494"/>
+ <location filename="modinfodialog.ui" line="498"/>
<source>Non-Conflicted files</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="514"/>
+ <location filename="modinfodialog.ui" line="518"/>
<source>Categories</source>
<translation type="unfinished">Catégories</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="537"/>
+ <location filename="modinfodialog.ui" line="541"/>
<source>Primary Category</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="554"/>
+ <location filename="modinfodialog.ui" line="558"/>
<source>Nexus Info</source>
<translation>Info de Nexus</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="562"/>
+ <location filename="modinfodialog.ui" line="566"/>
<source>Mod ID</source>
<translation>ID du mod</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="569"/>
+ <location filename="modinfodialog.ui" line="573"/>
<source>Mod ID for this mod on Nexus.</source>
<translation>ID de ce mod sur Nexus.</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="572"/>
+ <location filename="modinfodialog.ui" line="576"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
@@ -2720,7 +2992,7 @@ p, li { white-space: pre-wrap; }
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;ID de ce mod sur Nexus. Rempli automatiquement si vous téléchargez et installez un mod à partir de MO. Sinon, vous pouvez l&apos;inscrire manuellement. Pour connaître le bon ID, trouvez le mod sur Nexus. L&apos;URL ressemblera à ceci: &lt;a href=&quot; http://www.skyrimnexus.com/downloads/file.php?id=1334&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;http://www.skyrimnexus.com/downloads/file.php?id=1334&lt;/span&gt;&lt;/a&gt;&lt;a href=&quot;http://www.skyrimnexus.com/downloads/file.php?id=1334&quot;&gt;&lt;span style=&quot; color:#000000;&quot;&gt;. Dans cet example, 1334 est l&apos;ID que vous cherchez. En passant: Ce lien est celui de Mod Organizer sur le Nexus. Pourquoi ne pas le visiter et lui donner votre aval?&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="596"/>
+ <location filename="modinfodialog.ui" line="600"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
@@ -2733,32 +3005,31 @@ p, li { white-space: pre-wrap; }
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Version du mod installée La bulle contient la version courrante disponible sur Nexus. La version installé n&apos;est réglée que si vous installez le mod avec MO.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="603"/>
+ <location filename="modinfodialog.ui" line="607"/>
<source>Version</source>
<translation>Version</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="633"/>
+ <location filename="modinfodialog.ui" line="637"/>
<source>Refresh</source>
<translation type="unfinished">Actualiser</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="636"/>
+ <location filename="modinfodialog.ui" line="640"/>
<source>Refresh all information from Nexus.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="650"/>
+ <location filename="modinfodialog.ui" line="654"/>
<source>Description</source>
<translation>Description</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="665"/>
+ <location filename="modinfodialog.ui" line="669"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
-&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
@@ -2779,20 +3050,21 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">Type</translation>
</message>
<message>
+ <location filename="modinfodialog.cpp" line="1221"/>
<source>Name</source>
- <translation type="obsolete">Nom</translation>
+ <translation type="unfinished">Nom</translation>
</message>
<message>
<source>Size (kB)</source>
<translation type="obsolete">Taille (kB)</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="701"/>
+ <location filename="modinfodialog.ui" line="704"/>
<source>Endorse</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="715"/>
+ <location filename="modinfodialog.ui" line="718"/>
<source>Notes</source>
<translation type="unfinished"></translation>
</message>
@@ -2805,17 +3077,17 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">Avez-vous donné votre aval à ce mod?</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="725"/>
+ <location filename="modinfodialog.ui" line="728"/>
<source>Filetree</source>
<translation>Arborescence</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="734"/>
+ <location filename="modinfodialog.ui" line="737"/>
<source>A directory view of this mod</source>
<translation>Une vue du dossier de ce mod</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="737"/>
+ <location filename="modinfodialog.ui" line="740"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
@@ -2830,70 +3102,70 @@ p, li { white-space: pre-wrap; }
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Les changements sont immédiatement appliqués sur le disque, alors&lt;/span&gt;&lt;span style=&quot; font-size:8pt; font-weight:600;&quot;&gt; soyez prudent&lt;/span&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="764"/>
+ <location filename="modinfodialog.ui" line="767"/>
<source>Previous</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="771"/>
+ <location filename="modinfodialog.ui" line="774"/>
<source>Next</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="791"/>
+ <location filename="modinfodialog.ui" line="794"/>
<source>Close</source>
<translation>Fermer</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="108"/>
+ <location filename="modinfodialog.cpp" line="104"/>
<source>&amp;Delete</source>
<translatorcomment>Again, english accelerator not applicable. French would use S&amp;upprimer for this one.</translatorcomment>
<translation>Supprimer</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="109"/>
+ <location filename="modinfodialog.cpp" line="105"/>
<source>&amp;Rename</source>
<translation>&amp;Renommer</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="112"/>
+ <location filename="modinfodialog.cpp" line="108"/>
<source>&amp;Open</source>
<translation>&amp;Ouvrir</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="113"/>
+ <location filename="modinfodialog.cpp" line="109"/>
<source>&amp;New Folder</source>
<translation>&amp;Nouveau dossier</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="352"/>
- <location filename="modinfodialog.cpp" line="367"/>
+ <location filename="modinfodialog.cpp" line="405"/>
+ <location filename="modinfodialog.cpp" line="420"/>
<source>Save changes?</source>
<translation type="unfinished">Enregistrer les changements?</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="563"/>
+ <location filename="modinfodialog.cpp" line="612"/>
<source>File Exists</source>
<translation>Un fichier du même nom existe</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="563"/>
+ <location filename="modinfodialog.cpp" line="612"/>
<source>A file with that name exists, please enter a new one</source>
<translation>Un fichier ainsi nommé existe déjà, veuillez entrer un nouveau nom</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="580"/>
+ <location filename="modinfodialog.cpp" line="629"/>
<source>failed to move file</source>
<translation>impossible de déplacer le fchier</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="605"/>
+ <location filename="modinfodialog.cpp" line="654"/>
<source>failed to create directory &quot;optional&quot;</source>
<translation>Impossible de créer le dossier &quot;optional&quot;</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="643"/>
- <location filename="modinfodialog.cpp" line="1155"/>
+ <location filename="modinfodialog.cpp" line="692"/>
+ <location filename="modinfodialog.cpp" line="1198"/>
<source>Info requested, please wait</source>
<translation>Info demandée, veuillez patienter</translation>
</message>
@@ -2903,122 +3175,148 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">(description incomplète, veuillez vérifier sur Nexus)</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="713"/>
+ <location filename="modinfodialog.cpp" line="762"/>
<source>Current Version: %1</source>
<translation>Version courante: %1</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="717"/>
+ <location filename="modinfodialog.cpp" line="766"/>
<source>No update available</source>
<translation>Aucune mise-à-jour disponible</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="697"/>
+ <location filename="modinfodialog.cpp" line="746"/>
<source>Main</source>
<translation>Principal</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="110"/>
+ <location filename="modinfodialog.cpp" line="106"/>
<source>&amp;Hide</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="111"/>
+ <location filename="modinfodialog.cpp" line="107"/>
<source>&amp;Unhide</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="352"/>
- <location filename="modinfodialog.cpp" line="367"/>
+ <location filename="modinfodialog.cpp" line="405"/>
+ <location filename="modinfodialog.cpp" line="420"/>
<source>Save changes to &quot;%1&quot;?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="698"/>
+ <location filename="modinfodialog.cpp" line="747"/>
<source>Update</source>
<translation>Mise-à-jour</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="699"/>
+ <location filename="modinfodialog.cpp" line="748"/>
<source>Optional</source>
<translation>Optionnel</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="700"/>
+ <location filename="modinfodialog.cpp" line="749"/>
<source>Old</source>
<translation>Ancien</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="701"/>
+ <location filename="modinfodialog.cpp" line="750"/>
<source>Misc</source>
<translation>Divers</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="702"/>
+ <location filename="modinfodialog.cpp" line="751"/>
<source>Unknown</source>
<translation>Inconnu</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="758"/>
+ <location filename="modinfodialog.cpp" line="807"/>
<source>(description incomplete, please visit nexus)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="1064"/>
- <location filename="modinfodialog.cpp" line="1088"/>
+ <location filename="modinfodialog.cpp" line="1107"/>
+ <location filename="modinfodialog.cpp" line="1131"/>
<source>Replace file?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="1064"/>
+ <location filename="modinfodialog.cpp" line="1107"/>
<source>There already is a hidden version of this file. Replace it?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="1067"/>
- <location filename="modinfodialog.cpp" line="1091"/>
+ <location filename="modinfodialog.cpp" line="1110"/>
+ <location filename="modinfodialog.cpp" line="1134"/>
<source>File operation failed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="1067"/>
- <location filename="modinfodialog.cpp" line="1091"/>
+ <location filename="modinfodialog.cpp" line="1110"/>
+ <location filename="modinfodialog.cpp" line="1134"/>
<source>Failed to remove &quot;%1&quot;. Maybe you lack the required file permissions?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="1078"/>
- <location filename="modinfodialog.cpp" line="1101"/>
+ <location filename="modinfodialog.cpp" line="1121"/>
+ <location filename="modinfodialog.cpp" line="1144"/>
<source>failed to rename %1 to %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="1088"/>
+ <location filename="modinfodialog.cpp" line="1131"/>
<source>There already is a visible version of this file. Replace it?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="1135"/>
+ <location filename="modinfodialog.cpp" line="1178"/>
<source>Un-Hide</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="1137"/>
+ <location filename="modinfodialog.cpp" line="1180"/>
<source>Hide</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location filename="modinfodialog.cpp" line="1221"/>
+ <source>Please enter a name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="modinfodialog.cpp" line="1225"/>
+ <location filename="modinfodialog.cpp" line="1228"/>
+ <source>Error</source>
+ <translation type="unfinished">Erreur</translation>
+ </message>
+ <message>
+ <location filename="modinfodialog.cpp" line="1225"/>
+ <source>Invalid name. Must be a valid file name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="modinfodialog.cpp" line="1228"/>
+ <source>A tweak by that name exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="modinfodialog.cpp" line="1240"/>
+ <source>Create Tweak</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<source>request failed</source>
<translation type="obsolete">la requête à échouée</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="779"/>
+ <location filename="modinfodialog.cpp" line="822"/>
<source>&lt;a href=&quot;%1&quot;&gt;Visit on Nexus&lt;/a&gt;</source>
<translation>&lt;a href=&quot;%1&quot;&gt;Visiter sur Nexus&lt;/a&gt;</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="869"/>
- <location filename="modinfodialog.cpp" line="874"/>
+ <location filename="modinfodialog.cpp" line="912"/>
+ <location filename="modinfodialog.cpp" line="917"/>
<source>Confirm</source>
<translation>Confirmer</translation>
</message>
@@ -3031,28 +3329,28 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">Téléchargement commencé</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="858"/>
+ <location filename="modinfodialog.cpp" line="901"/>
<source>Failed to delete %1</source>
<translation>impossible d&apos;effacer %1</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="869"/>
+ <location filename="modinfodialog.cpp" line="912"/>
<source>Are sure you want to delete &quot;%1&quot;?</source>
<translation>Voulez-vous vraiment supprimer &quot;%1&quot;?</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="874"/>
+ <location filename="modinfodialog.cpp" line="917"/>
<source>Are sure you want to delete the selected files?</source>
<translation>Voulez-vous vraiment supprimer les fichiers sélectionnés?</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="948"/>
- <location filename="modinfodialog.cpp" line="954"/>
+ <location filename="modinfodialog.cpp" line="991"/>
+ <location filename="modinfodialog.cpp" line="997"/>
<source>New Folder</source>
<translation>Nouveau dossier</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="960"/>
+ <location filename="modinfodialog.cpp" line="1003"/>
<source>Failed to create &quot;%1&quot;</source>
<translation>Impossible de créer &quot;%1&quot;</translation>
</message>
@@ -3060,12 +3358,7 @@ p, li { white-space: pre-wrap; }
<context>
<name>ModInfoOverwrite</name>
<message>
- <location filename="modinfo.h" line="812"/>
- <source>Overwrite</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfo.cpp" line="821"/>
+ <location filename="modinfo.cpp" line="866"/>
<source>This pseudo mod contains files from the virtual data tree that got modified (i.e. by the construction kit)</source>
<translation type="unfinished"></translation>
</message>
@@ -3073,17 +3366,17 @@ p, li { white-space: pre-wrap; }
<context>
<name>ModInfoRegular</name>
<message>
- <location filename="modinfo.cpp" line="392"/>
+ <location filename="modinfo.cpp" line="393"/>
<source>failed to write %1/meta.ini: %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfo.cpp" line="625"/>
+ <location filename="modinfo.cpp" line="661"/>
<source>%1 contains no esp/esm and no asset (textures, meshes, interface, ...) directory</source>
<translation type="unfinished">%1 ne contient ni esp/esm, ni dossier d&apos;éléments de jeu (textures, meshes, interface, ...)</translation>
</message>
<message>
- <location filename="modinfo.cpp" line="629"/>
+ <location filename="modinfo.cpp" line="665"/>
<source>Categories: &lt;br&gt;</source>
<translation type="unfinished"></translation>
</message>
@@ -3103,20 +3396,16 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">max</translation>
</message>
<message>
- <location filename="modlist.cpp" line="294"/>
- <source>installed version: %1, newest version: %2</source>
- <translation>Version installée: %1, dernière version: %2</translation>
+ <location filename="modlist.cpp" line="308"/>
+ <source>installed version: &quot;%1&quot;, newest version: &quot;%2&quot;</source>
+ <oldsource>installed version: %1, newest version: %2</oldsource>
+ <translation type="unfinished">Version installée: %1, dernière version: %2</translation>
</message>
<message>
<source>%1 contains no esp/esm and no asset (textures, meshes, interface, ...) directory</source>
<translation type="obsolete">%1 ne contient ni esp/esm, ni dossier d&apos;éléments de jeu (textures, meshes, interface, ...)</translation>
</message>
<message>
- <location filename="modlist.cpp" line="94"/>
- <source>Overwrite</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<location filename="modlist.cpp" line="109"/>
<source>This entry contains files that have been created inside the virtual data tree (i.e. by the construction kit)</source>
<translation type="unfinished"></translation>
@@ -3157,47 +3446,52 @@ p, li { white-space: pre-wrap; }
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="184"/>
+ <location filename="modlist.cpp" line="197"/>
<source>invalid</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="298"/>
+ <location filename="modlist.cpp" line="310"/>
+ <source>The newest version on Nexus seems to be older than the one you have installed. This could either mean the version you have has been withdrawn (i.e. due to a bug) or the author uses a non-standard versioning scheme and that newest version is actually newer. Either way you may want to &quot;upgrade&quot;.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="modlist.cpp" line="318"/>
<source>Categories: &lt;br&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="327"/>
+ <location filename="modlist.cpp" line="347"/>
<source>Invalid name</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="718"/>
+ <location filename="modlist.cpp" line="832"/>
<source>Mod Name</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="723"/>
+ <location filename="modlist.cpp" line="837"/>
<source>Installation</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="736"/>
+ <location filename="modlist.cpp" line="850"/>
<source>Category of the mod.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="737"/>
+ <location filename="modlist.cpp" line="851"/>
<source>Id of the mod as used on Nexus.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="738"/>
+ <location filename="modlist.cpp" line="852"/>
<source>Emblemes to highlight things that might require attention.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="739"/>
+ <location filename="modlist.cpp" line="853"/>
<source>Time this mod was installed</source>
<translation type="unfinished"></translation>
</message>
@@ -3210,63 +3504,63 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">Les noms de vos mods</translation>
</message>
<message>
- <location filename="modlist.cpp" line="719"/>
+ <location filename="modlist.cpp" line="833"/>
<source>Version</source>
<translation>Version</translation>
</message>
<message>
- <location filename="modlist.cpp" line="733"/>
+ <location filename="modlist.cpp" line="847"/>
<source>Version of the mod (if available)</source>
<translation>Version du mod (si disponible)</translation>
</message>
<message>
- <location filename="modlist.cpp" line="720"/>
+ <location filename="modlist.cpp" line="834"/>
<source>Priority</source>
<translation>Priorité</translation>
</message>
<message>
- <location filename="modlist.cpp" line="603"/>
+ <location filename="modlist.cpp" line="717"/>
<source>drag&amp;drop failed: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="717"/>
+ <location filename="modlist.cpp" line="831"/>
<source>Flags</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="721"/>
+ <location filename="modlist.cpp" line="835"/>
<source>Category</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="722"/>
+ <location filename="modlist.cpp" line="836"/>
<source>Nexus ID</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="724"/>
- <location filename="modlist.cpp" line="740"/>
+ <location filename="modlist.cpp" line="838"/>
+ <location filename="modlist.cpp" line="854"/>
<source>unknown</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="732"/>
+ <location filename="modlist.cpp" line="846"/>
<source>Name of your mods</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="734"/>
+ <location filename="modlist.cpp" line="848"/>
<source>Installation priority of your mod. The higher, the more &quot;important&quot; it is and thus overwrites files from mods with lower priority.</source>
<translation>Priorité d&apos;installation de vos mods. Plus elle est ellevée, plus le mod est &quot;important&quot; et écrasera les fichiers des mods de priorité inférieure.</translation>
</message>
<message>
- <location filename="modlist.cpp" line="662"/>
+ <location filename="modlist.cpp" line="776"/>
<source>Confirm</source>
<translation>Confirmer</translation>
</message>
<message>
- <location filename="modlist.cpp" line="662"/>
+ <location filename="modlist.cpp" line="776"/>
<source>Are you sure you want to remove &quot;%1&quot;?</source>
<translation>Voulez-vous vraiment supprimer &quot;%1&quot;?</translation>
</message>
@@ -3291,12 +3585,12 @@ p, li { white-space: pre-wrap; }
<context>
<name>MyFileSystemModel</name>
<message>
- <location filename="overwriteinfodialog.cpp" line="48"/>
+ <location filename="overwriteinfodialog.cpp" line="47"/>
<source>Overwrites</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="overwriteinfodialog.cpp" line="60"/>
+ <location filename="overwriteinfodialog.cpp" line="59"/>
<source>not implemented</source>
<translation type="unfinished"></translation>
</message>
@@ -3305,11 +3599,16 @@ p, li { white-space: pre-wrap; }
<name>NXMAccessManager</name>
<message>
<location filename="nxmaccessmanager.cpp" line="130"/>
+ <source>Logging into Nexus</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="nxmaccessmanager.cpp" line="145"/>
<source>timeout</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="nxmaccessmanager.cpp" line="168"/>
+ <location filename="nxmaccessmanager.cpp" line="185"/>
<source>Please check your password</source>
<translation type="unfinished"></translation>
</message>
@@ -3371,17 +3670,17 @@ p, li { white-space: pre-wrap; }
<context>
<name>NexusInterface</name>
<message>
- <location filename="nexusinterface.cpp" line="201"/>
+ <location filename="nexusinterface.cpp" line="218"/>
<source>Failed to guess mod id for &quot;%1&quot;, please pick the correct one</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="nexusinterface.cpp" line="421"/>
+ <location filename="nexusinterface.cpp" line="455"/>
<source>empty response</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="nexusinterface.cpp" line="450"/>
+ <location filename="nexusinterface.cpp" line="483"/>
<source>invalid response</source>
<translation type="unfinished"></translation>
</message>
@@ -4067,34 +4366,34 @@ p, li { white-space: pre-wrap; }
<translation type="unfinished">&amp;Nouveau dossier</translation>
</message>
<message>
- <location filename="overwriteinfodialog.cpp" line="137"/>
+ <location filename="overwriteinfodialog.cpp" line="136"/>
<source>Failed to delete &quot;%1&quot;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="overwriteinfodialog.cpp" line="148"/>
- <location filename="overwriteinfodialog.cpp" line="153"/>
+ <location filename="overwriteinfodialog.cpp" line="147"/>
+ <location filename="overwriteinfodialog.cpp" line="152"/>
<source>Confirm</source>
<translation type="unfinished">Confirmer</translation>
</message>
<message>
- <location filename="overwriteinfodialog.cpp" line="148"/>
+ <location filename="overwriteinfodialog.cpp" line="147"/>
<source>Are sure you want to delete &quot;%1&quot;?</source>
<translation type="unfinished">Voulez-vous vraiment supprimer &quot;%1&quot;?</translation>
</message>
<message>
- <location filename="overwriteinfodialog.cpp" line="153"/>
+ <location filename="overwriteinfodialog.cpp" line="152"/>
<source>Are sure you want to delete the selected files?</source>
<translation type="unfinished">Voulez-vous vraiment supprimer les fichiers sélectionnés?</translation>
</message>
<message>
- <location filename="overwriteinfodialog.cpp" line="203"/>
- <location filename="overwriteinfodialog.cpp" line="209"/>
+ <location filename="overwriteinfodialog.cpp" line="202"/>
+ <location filename="overwriteinfodialog.cpp" line="208"/>
<source>New Folder</source>
<translation type="unfinished">Nouveau dossier</translation>
</message>
<message>
- <location filename="overwriteinfodialog.cpp" line="215"/>
+ <location filename="overwriteinfodialog.cpp" line="214"/>
<source>Failed to create &quot;%1&quot;</source>
<translation type="unfinished">Impossible de créer &quot;%1&quot;</translation>
</message>
@@ -4102,70 +4401,89 @@ p, li { white-space: pre-wrap; }
<context>
<name>PluginList</name>
<message>
- <location filename="pluginlist.cpp" line="98"/>
+ <location filename="pluginlist.cpp" line="111"/>
<source>Mod Index</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="99"/>
- <location filename="pluginlist.cpp" line="111"/>
+ <location filename="pluginlist.cpp" line="112"/>
+ <source>Flags</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="pluginlist.cpp" line="113"/>
+ <location filename="pluginlist.cpp" line="125"/>
<source>unknown</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="107"/>
+ <location filename="pluginlist.cpp" line="121"/>
<source>Name of your mods</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="108"/>
+ <location filename="pluginlist.cpp" line="122"/>
<source>Load priority of your mod. The higher, the more &quot;important&quot; it is and thus overwrites data from plugins with lower priority.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="110"/>
+ <location filename="pluginlist.cpp" line="124"/>
<source>The modindex determins the formids of objects originating from this mods.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="208"/>
+ <location filename="pluginlist.cpp" line="165"/>
+ <source>failed to update esp info for file %1 (source id: %2), error: %3</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="pluginlist.cpp" line="233"/>
<source>esp not found: %1</source>
<translation>ESP introuvable: %1</translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="215"/>
- <location filename="pluginlist.cpp" line="227"/>
+ <location filename="pluginlist.cpp" line="240"/>
+ <location filename="pluginlist.cpp" line="252"/>
<source>Confirm</source>
<translation type="unfinished">Confirmer</translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="215"/>
+ <location filename="pluginlist.cpp" line="240"/>
<source>Really enable all plugins?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="227"/>
+ <location filename="pluginlist.cpp" line="252"/>
<source>Really disable all plugins?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="353"/>
+ <location filename="pluginlist.cpp" line="380"/>
<source>The file containing locked plugin indices is broken</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="366"/>
- <location filename="pluginlist.cpp" line="405"/>
- <source>failed to open output file: %1</source>
+ <location filename="pluginlist.cpp" line="418"/>
+ <source>Some of your plugins have invalid names! These plugins can not be loaded by the game. Please see mo_interface.log for a list of affected plugins and rename them.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="393"/>
- <source>Some of your plugins have invalid names! These plugins can not be loaded by the game. Please see mo_interface.log for a list of affected plugins and rename them.</source>
+ <location filename="pluginlist.cpp" line="644"/>
+ <source>BOSS dll incompatible</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="pluginlist.cpp" line="987"/>
+ <source>Missing Masters</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="737"/>
+ <location filename="pluginlist.cpp" line="993"/>
+ <source>Enabled Masters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="pluginlist.cpp" line="1134"/>
<source>failed to restore load order for %1</source>
<translation type="unfinished"></translation>
</message>
@@ -4178,17 +4496,17 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">max</translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="631"/>
+ <location filename="pluginlist.cpp" line="983"/>
<source>This plugin can&apos;t be disabled (enforced by the game)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="633"/>
+ <location filename="pluginlist.cpp" line="985"/>
<source>Origin: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="96"/>
+ <location filename="pluginlist.cpp" line="109"/>
<source>Name</source>
<translation>Nom</translation>
</message>
@@ -4197,7 +4515,7 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">Les noms de vos mods</translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="97"/>
+ <location filename="pluginlist.cpp" line="110"/>
<source>Priority</source>
<translation>Priorité</translation>
</message>
@@ -4215,6 +4533,19 @@ p, li { white-space: pre-wrap; }
</message>
</context>
<context>
+ <name>PreviewDialog</name>
+ <message>
+ <location filename="previewdialog.ui" line="14"/>
+ <source>Preview</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="previewdialog.ui" line="78"/>
+ <source>Close</source>
+ <translation type="unfinished">Fermer</translation>
+ </message>
+</context>
+<context>
<name>ProblemsDialog</name>
<message>
<location filename="problemsdialog.ui" line="14"/>
@@ -4227,21 +4558,27 @@ p, li { white-space: pre-wrap; }
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:7.8pt; font-weight:400; font-style:normal;&quot;&gt;
-&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <oldsource>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
+p, li { white-space: pre-wrap; }
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</oldsource>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="problemsdialog.cpp" line="29"/>
- <source>fix</source>
- <translation type="unfinished"></translation>
+ <location filename="problemsdialog.ui" line="75"/>
+ <source>Close</source>
+ <translation type="unfinished">Fermer</translation>
</message>
<message>
- <location filename="problemsdialog.cpp" line="30"/>
+ <location filename="problemsdialog.cpp" line="44"/>
+ <location filename="problemsdialog.cpp" line="45"/>
<source>Fix</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="problemsdialog.cpp" line="34"/>
+ <location filename="problemsdialog.cpp" line="49"/>
<source>No guided fix</source>
<translation type="unfinished"></translation>
</message>
@@ -4253,72 +4590,72 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">impossible d&apos;appliquer les ajustements aux fichiers ini</translation>
</message>
<message>
- <location filename="profile.cpp" line="56"/>
+ <location filename="profile.cpp" line="59"/>
<source>invalid profile name %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="60"/>
+ <location filename="profile.cpp" line="63"/>
<source>failed to create %1</source>
<translation type="unfinished">impossible de créer %1</translation>
</message>
<message>
- <location filename="profile.cpp" line="152"/>
- <source>failed to open &quot;%1&quot; for writing</source>
+ <location filename="profile.cpp" line="182"/>
+ <source>failed to write mod list: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="189"/>
+ <location filename="profile.cpp" line="193"/>
<source>failed to update tweaked ini file, wrong settings may be used: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="219"/>
+ <location filename="profile.cpp" line="223"/>
<source>failed to create tweaked ini: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="365"/>
+ <location filename="profile.cpp" line="371"/>
<source>Overwrite directory couldn&apos;t be parsed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="374"/>
+ <location filename="profile.cpp" line="380"/>
<source>invalid priority %1</source>
<translation>priorité invalide %1</translation>
</message>
<message>
- <location filename="profile.cpp" line="561"/>
+ <location filename="profile.cpp" line="568"/>
<source>failed to parse ini file (%1)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="589"/>
+ <location filename="profile.cpp" line="596"/>
<source>failed to parse ini file (%1): %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="613"/>
- <location filename="profile.cpp" line="650"/>
+ <location filename="profile.cpp" line="620"/>
+ <location filename="profile.cpp" line="657"/>
<source>failed to modify &quot;%1&quot;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="678"/>
+ <location filename="profile.cpp" line="685"/>
<source>Delete savegames?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="679"/>
+ <location filename="profile.cpp" line="686"/>
<source>Do you want to delete local savegames? (If you select &quot;No&quot;, the save games will show up again if you re-enable local savegames)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="271"/>
- <location filename="profile.cpp" line="300"/>
- <location filename="profile.cpp" line="384"/>
- <location filename="profile.cpp" line="402"/>
- <location filename="profile.cpp" line="412"/>
+ <location filename="profile.cpp" line="276"/>
+ <location filename="profile.cpp" line="305"/>
+ <location filename="profile.cpp" line="390"/>
+ <location filename="profile.cpp" line="408"/>
+ <location filename="profile.cpp" line="418"/>
<source>invalid index %1</source>
<translation>index invalide %1</translation>
</message>
@@ -4534,37 +4871,61 @@ p, li { white-space: pre-wrap; }
<translation>Veuillez inscrire un nom pour le nouveau profil</translation>
</message>
<message>
- <location filename="profilesdialog.cpp" line="160"/>
+ <location filename="profilesdialog.cpp" line="162"/>
<source>failed to copy profile: %1</source>
<translation>impossible de copier le profil: %1</translation>
</message>
<message>
- <location filename="profilesdialog.cpp" line="167"/>
+ <location filename="profilesdialog.cpp" line="165"/>
+ <source>Invalid name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="profilesdialog.cpp" line="165"/>
+ <source>Invalid profile name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="profilesdialog.cpp" line="172"/>
<source>Confirm</source>
<translation>Confirmer</translation>
</message>
<message>
- <location filename="profilesdialog.cpp" line="167"/>
+ <location filename="profilesdialog.cpp" line="172"/>
+ <source>Are you sure you want to remove this profile (including local savegames if any)?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="profilesdialog.cpp" line="182"/>
+ <source>Profile broken</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="profilesdialog.cpp" line="183"/>
+ <source>This profile you&apos;re about to delete seems to be broken or the path is invalid. I&apos;m about to delete the following folder: &quot;%1&quot;. Proceed?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<source>Are you sure you want to remove this profile?</source>
- <translation>Voulez-vous vraiment supprimer ce profil?</translation>
+ <translation type="obsolete">Voulez-vous vraiment supprimer ce profil?</translation>
</message>
<message>
- <location filename="profilesdialog.cpp" line="196"/>
+ <location filename="profilesdialog.cpp" line="215"/>
<source>Rename Profile</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profilesdialog.cpp" line="196"/>
+ <location filename="profilesdialog.cpp" line="215"/>
<source>New Name</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profilesdialog.cpp" line="233"/>
+ <location filename="profilesdialog.cpp" line="252"/>
<source>failed to change archive invalidation state: %1</source>
<translation>impossible de changer l&apos;état d&apos;invalidation des archives: %1</translation>
</message>
<message>
- <location filename="profilesdialog.cpp" line="270"/>
+ <location filename="profilesdialog.cpp" line="289"/>
<source>failed to determine if invalidation is active: %1</source>
<translation>impossible de déterminer si l&apos;invalidation des archives est activée: %1</translation>
</message>
@@ -4572,20 +4933,20 @@ p, li { white-space: pre-wrap; }
<context>
<name>QObject</name>
<message>
- <location filename="categories.cpp" line="133"/>
+ <location filename="categories.cpp" line="141"/>
<source>Failed to save custom categories</source>
<translation>Impossible d&apos;enregistrer les catégories personalisées</translation>
</message>
<message>
- <location filename="categories.cpp" line="210"/>
- <location filename="categories.cpp" line="245"/>
- <location filename="categories.cpp" line="255"/>
- <location filename="categories.cpp" line="265"/>
+ <location filename="categories.cpp" line="218"/>
+ <location filename="categories.cpp" line="253"/>
+ <location filename="categories.cpp" line="263"/>
+ <location filename="categories.cpp" line="273"/>
<source>invalid index %1</source>
<translation>index invalide %1</translation>
</message>
<message>
- <location filename="categories.cpp" line="276"/>
+ <location filename="categories.cpp" line="284"/>
<source>invalid category id %1</source>
<translation type="unfinished"></translation>
</message>
@@ -4601,7 +4962,7 @@ p, li { white-space: pre-wrap; }
<translation>impossible de détermine le nom d&apos;usager</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="63"/>
+ <location filename="installationmanager.cpp" line="64"/>
<location filename="selfupdater.cpp" line="52"/>
<source>invalid 7-zip32.dll: %1</source>
<translation>7-zip32.dll invalide: %1</translation>
@@ -4671,12 +5032,12 @@ p, li { white-space: pre-wrap; }
<translation>Impossible de mettre en place le chargement via DLL par procuration</translation>
</message>
<message>
- <location filename="profile.cpp" line="93"/>
+ <location filename="profile.cpp" line="96"/>
<source>&quot;%1&quot; is missing</source>
<translation>&quot;%1&quot; manquant</translation>
</message>
<message>
- <location filename="main.cpp" line="134"/>
+ <location filename="main.cpp" line="139"/>
<source>Permissions required</source>
<translation>Permissions requises</translation>
</message>
@@ -4685,86 +5046,91 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">Le compte d&apos;usager actuel n&apos;a pas les accès requis pour lancer Mod Organizer. Les changements nécessaires peuvent être effectués automatiquement (le dossier de MO sera rendu inscriptible pour le compte d&apos;usager actuel). Vous devrez accepter que &quot;mo_helper.exe&quot; soit lancé avec les permissions administrateur.</translation>
</message>
<message>
- <location filename="main.cpp" line="234"/>
- <location filename="main.cpp" line="272"/>
+ <location filename="main.cpp" line="231"/>
+ <location filename="main.cpp" line="269"/>
<source>Woops</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="main.cpp" line="135"/>
- <source>The current user account doesn&apos;t have the required access rights to run Mod Organizer. The neccessary changes can be made automatically (the MO directory will be made writable for the current user account). You will be asked to run &quot;helper.exe&quot; with administrative rights).</source>
+ <location filename="main.cpp" line="140"/>
+ <source>The current user account doesn&apos;t have the required access rights to run Mod Organizer. The neccessary changes can be made automatically (the MO directory will be made writable for the current user account). You will be asked to run &quot;helper.exe&quot; with administrative rights.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="main.cpp" line="235"/>
+ <location filename="main.cpp" line="232"/>
<source>ModOrganizer has crashed! Should a diagnostic file be created? If you send me this file (%1) to sherb@gmx.net, the bug is a lot more likely to be fixed. Please include a short description of what you were doing when the crash happened</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="main.cpp" line="273"/>
+ <location filename="main.cpp" line="270"/>
<source>ModOrganizer has crashed! Unfortunately I was not able to write a diagnostic file: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="main.cpp" line="335"/>
- <location filename="settings.cpp" line="462"/>
+ <location filename="main.cpp" line="332"/>
+ <location filename="settings.cpp" line="542"/>
<source>Mod Organizer</source>
<translation>Mod Organizer</translation>
</message>
<message>
- <location filename="main.cpp" line="335"/>
+ <location filename="main.cpp" line="332"/>
<source>An instance of Mod Organizer is already running</source>
<translation>Une copie du Mod Organizer tourne déjà</translation>
</message>
<message>
- <location filename="main.cpp" line="357"/>
+ <location filename="main.cpp" line="354"/>
<source>No game identified in &quot;%1&quot;. The directory is required to contain the game binary and its launcher.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="main.cpp" line="360"/>
- <location filename="main.cpp" line="389"/>
+ <location filename="main.cpp" line="357"/>
+ <location filename="main.cpp" line="386"/>
<source>Please select the game to manage</source>
<translation>Veuillez choisir le jeu à gérer</translation>
</message>
<message>
+ <location filename="main.cpp" line="412"/>
+ <source>Please select the game edition you have (MO can&apos;t start the game correctly if this is set incorrectly!)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<source>&quot;%1&quot; not found</source>
<translation type="obsolete">&quot;%1&quot; introuvable</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="752"/>
+ <location filename="mainwindow.cpp" line="782"/>
<source>Please use &quot;Help&quot; from the toolbar to get usage instructions to all elements</source>
<translation>Veuillez utiliser l&apos;aide dans la barre d&apos;outil pour obtenir des instructions à propos de tous les éléments</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1470"/>
- <location filename="mainwindow.cpp" line="3723"/>
+ <location filename="mainwindow.cpp" line="1610"/>
+ <location filename="mainwindow.cpp" line="4216"/>
<source>&lt;Manage...&gt;</source>
<translation>&lt;Gérer...&gt;</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1488"/>
+ <location filename="mainwindow.cpp" line="1628"/>
<source>failed to parse profile %1: %2</source>
<translation>impossible d&apos;analyser le profil %1: %2</translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="310"/>
- <location filename="profile.cpp" line="228"/>
+ <location filename="pluginlist.cpp" line="335"/>
+ <location filename="profile.cpp" line="233"/>
<source>failed to find &quot;%1&quot;</source>
<translation>impossible de trouver &quot;%1&quot;</translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="467"/>
+ <location filename="pluginlist.cpp" line="491"/>
<source>failed to access %1</source>
<translation>impossible d&apos;accéder à %1</translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="481"/>
+ <location filename="pluginlist.cpp" line="505"/>
<source>failed to set file time %1</source>
<translation>impossible de changer la date du fichier %1</translation>
</message>
<message>
- <location filename="profile.cpp" line="67"/>
+ <location filename="profile.cpp" line="70"/>
<source>failed to create %1</source>
<translation>impossible de créer %1</translation>
</message>
@@ -4803,12 +5169,12 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">Français</translation>
</message>
<message>
- <location filename="settings.cpp" line="469"/>
+ <location filename="settings.cpp" line="549"/>
<source>Script Extender</source>
<translation>Extenseur de script</translation>
</message>
<message>
- <location filename="settings.cpp" line="476"/>
+ <location filename="settings.cpp" line="556"/>
<source>Proxy DLL</source>
<translation>DLL par procuration</translation>
</message>
@@ -4833,22 +5199,22 @@ Start elevated anyway? (you will be asked if you want to allow ModOrganizer.exe
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="spawn.cpp" line="128"/>
+ <location filename="spawn.cpp" line="129"/>
<source>failed to spawn &quot;%1&quot;: %2</source>
<translation>impossible de lancer &quot;%1&quot;: %2</translation>
</message>
<message>
- <location filename="spawn.cpp" line="137"/>
+ <location filename="spawn.cpp" line="138"/>
<source>&quot;%1&quot; doesn&apos;t exist</source>
<translation>&quot;%1&quot; inexistant</translation>
</message>
<message>
- <location filename="spawn.cpp" line="144"/>
+ <location filename="spawn.cpp" line="145"/>
<source>failed to inject dll into &quot;%1&quot;: %2</source>
<translation>impossible d&apos;injecter le DLL dans &quot;%1&quot;: %2</translation>
</message>
<message>
- <location filename="spawn.cpp" line="152"/>
+ <location filename="spawn.cpp" line="153"/>
<source>failed to run &quot;%1&quot;</source>
<translation>impossible de lancer &quot;%1&quot;</translation>
</message>
@@ -4907,6 +5273,11 @@ Start elevated anyway? (you will be asked if you want to allow ModOrganizer.exe
<source>invalid game type %1</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <location filename="safewritefile.cpp" line="32"/>
+ <source>failed to open temporary file</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>QueryOverwriteDialog</name>
@@ -4947,14 +5318,6 @@ Start elevated anyway? (you will be asked if you want to allow ModOrganizer.exe
</message>
</context>
<context>
- <name>QuestionBoxMemory</name>
- <message>
- <location filename="questionboxmemory.ui" line="86"/>
- <source>Remember selection</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
<name>SaveGameInfoWidget</name>
<message>
<location filename="savegameinfowidget.ui" line="39"/>
@@ -5054,9 +5417,9 @@ Start elevated anyway? (you will be asked if you want to allow ModOrganizer.exe
</message>
<message>
<location filename="selfupdater.cpp" line="116"/>
- <location filename="selfupdater.cpp" line="140"/>
- <location filename="selfupdater.cpp" line="269"/>
- <location filename="selfupdater.cpp" line="417"/>
+ <location filename="selfupdater.cpp" line="139"/>
+ <location filename="selfupdater.cpp" line="268"/>
+ <location filename="selfupdater.cpp" line="415"/>
<source>Update</source>
<translation>Mettre à jour</translation>
</message>
@@ -5066,7 +5429,7 @@ Start elevated anyway? (you will be asked if you want to allow ModOrganizer.exe
<translation>Une mise à jour est disponible (dernière version: %1), voulez-vous l&apos;installer?</translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="141"/>
+ <location filename="selfupdater.cpp" line="140"/>
<source>Download in progress</source>
<translation>Téléchargement en cours</translation>
</message>
@@ -5080,57 +5443,57 @@ Start elevated anyway? (you will be asked if you want to allow ModOrganizer.exe
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="196"/>
+ <location filename="selfupdater.cpp" line="195"/>
<source>Download failed: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="207"/>
+ <location filename="selfupdater.cpp" line="206"/>
<source>Failed to install update: %1</source>
<translation>Impossible d&apos;installer la mise à jour %1</translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="228"/>
+ <location filename="selfupdater.cpp" line="227"/>
<source>failed to open archive &quot;%1&quot;: %2</source>
<translation>impossible d&apos;ouvrir l&apos;archive &quot;%1&quot;: %2</translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="251"/>
+ <location filename="selfupdater.cpp" line="250"/>
<source>failed to move outdated files: %1. Please update manually.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="269"/>
+ <location filename="selfupdater.cpp" line="268"/>
<source>Update installed, Mod Organizer will now be restarted.</source>
<translation>Mise à jour complétée, Mod Organizer va maintenant redémarrer.</translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="297"/>
+ <location filename="selfupdater.cpp" line="296"/>
<source>Error</source>
<translation>Erreur</translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="353"/>
+ <location filename="selfupdater.cpp" line="351"/>
<source>Failed to parse response. Please report this as a bug and include the file mo_interface.log.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="418"/>
+ <location filename="selfupdater.cpp" line="416"/>
<source>No incremental update available for this version, the complete package needs to be downloaded (%1 kB)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="427"/>
+ <location filename="selfupdater.cpp" line="425"/>
<source>no file for update found. Please update manually.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="461"/>
+ <location filename="selfupdater.cpp" line="460"/>
<source>No download server available. Please try again later.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="441"/>
+ <location filename="selfupdater.cpp" line="440"/>
<source>Failed to retrieve update information: %1</source>
<translation type="unfinished"></translation>
</message>
@@ -5146,26 +5509,22 @@ Start elevated anyway? (you will be asked if you want to allow ModOrganizer.exe
<context>
<name>Settings</name>
<message>
- <location filename="settings.cpp" line="278"/>
- <source>setting for invalid plugin &quot;%1&quot; requested</source>
- <translation type="unfinished"></translation>
+ <source>Administrative rights required to change this.</source>
+ <translation type="obsolete">Les droits administrateur sont requis pour changer ceci.</translation>
</message>
<message>
- <location filename="settings.cpp" line="282"/>
- <source>invalid setting &quot;%1&quot; requested for plugin &quot;%2&quot;</source>
+ <location filename="settings.cpp" line="320"/>
+ <location filename="settings.cpp" line="339"/>
+ <source>attempt to store setting for unknown plugin &quot;%1&quot;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Administrative rights required to change this.</source>
- <translation type="obsolete">Les droits administrateur sont requis pour changer ceci.</translation>
- </message>
- <message>
- <location filename="settings.cpp" line="573"/>
+ <location filename="settings.cpp" line="660"/>
<source>Confirm</source>
<translation type="unfinished">Confirmer</translation>
</message>
<message>
- <location filename="settings.cpp" line="573"/>
+ <location filename="settings.cpp" line="660"/>
<source>Changing the mod directory affects all your profiles! Mods not present (or named differently) in the new location will be disabled in all profiles. There is no way to undo this unless you backed up your profiles manually. Proceed?</source>
<translation type="unfinished"></translation>
</message>
@@ -5318,47 +5677,57 @@ p, li { white-space: pre-wrap; }
<translation>Configurer les catégories de mod</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="321"/>
+ <location filename="settingsdialog.ui" line="318"/>
<source>Disable automatic internet features</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="324"/>
+ <location filename="settingsdialog.ui" line="321"/>
<source>Disable automatic internet features. This does not affect features that are explicitly invoked by the user (like checking mods for updates, endorsing, opening the web browser)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="327"/>
+ <location filename="settingsdialog.ui" line="324"/>
<source>Offline Mode</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="334"/>
+ <location filename="settingsdialog.ui" line="331"/>
<source>Use a proxy for network connections.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="337"/>
+ <location filename="settingsdialog.ui" line="334"/>
<source>Use a proxy for network connections. This uses the system-wide settings which can be configured in Internet Explorer. Please note that MO will start up a few seconds slower on some systems when using a proxy.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="340"/>
+ <location filename="settingsdialog.ui" line="337"/>
<source>Use HTTP Proxy (Uses System Settings)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="351"/>
- <source>Known Servers (Dynamically updated every download)</source>
+ <location filename="settingsdialog.ui" line="346"/>
+ <source>Associate with &quot;Download with manager&quot; links</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="settingsdialog.ui" line="375"/>
+ <source>Known Servers (updated on download)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="372"/>
+ <location filename="settingsdialog.ui" line="396"/>
<source>Preferred Servers (Drag &amp; Drop)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="594"/>
+ <location filename="settingsdialog.ui" line="536"/>
+ <source>Blacklisted Plugins (use &lt;del&gt; to remove):</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="settingsdialog.ui" line="632"/>
<source>Mod Organizer needs a dll to be injected into the game so all mods are visible to it.
There are several means to do this:
*Mod Organizer* (default) In this mode the Mod Organizer itself injects the dll. The disadvantage is that you always have to start the game through MO or a link created by it.
@@ -5403,12 +5772,12 @@ p, li { white-space: pre-wrap; }
<translation>Connexion automatique à Nexus</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="285"/>
+ <location filename="settingsdialog.ui" line="282"/>
<source>Username</source>
<translation>Nom d&apos;usager</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="299"/>
+ <location filename="settingsdialog.ui" line="296"/>
<source>Password</source>
<translation>Mot de passe</translation>
</message>
@@ -5417,52 +5786,52 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">Gérer les liens NXM</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="407"/>
+ <location filename="settingsdialog.ui" line="431"/>
<source>Plugins</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="427"/>
+ <location filename="settingsdialog.ui" line="453"/>
<source>Author:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="441"/>
+ <location filename="settingsdialog.ui" line="467"/>
<source>Version:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="455"/>
+ <location filename="settingsdialog.ui" line="481"/>
<source>Description:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="493"/>
+ <location filename="settingsdialog.ui" line="519"/>
<source>Key</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="498"/>
+ <location filename="settingsdialog.ui" line="524"/>
<source>Value</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="509"/>
+ <location filename="settingsdialog.ui" line="547"/>
<source>Workarounds</source>
<translation>Solutions alternatives</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="517"/>
+ <location filename="settingsdialog.ui" line="555"/>
<source>Steam App ID</source>
<translation>ID d&apos;application Steam</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="537"/>
+ <location filename="settingsdialog.ui" line="575"/>
<source>The Steam AppID for your game</source>
<translation>L&apos;AppID Steam de votre jeu</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="540"/>
+ <location filename="settingsdialog.ui" line="578"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
@@ -5489,12 +5858,12 @@ p, li { white-space: pre-wrap; }
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;22380 est l&apos;App ID que vous cherchez.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="571"/>
+ <location filename="settingsdialog.ui" line="609"/>
<source>Load Mechanism</source>
<translation>Chargement MO</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="591"/>
+ <location filename="settingsdialog.ui" line="629"/>
<source>Select loading mechanism. See help for details.</source>
<translation>Choisir la méthode de chargement. Voir l&apos;aide pour les détails.</translation>
</message>
@@ -5519,17 +5888,17 @@ p, li { white-space: pre-wrap; }
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt; font-weight:600;&quot;&gt;DLL par procuration&lt;/span&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt; Dans ce mode, MO remplace l&apos;un des DLL du jeu par une version qui charge MO (ainsi que le DLL orginal, bien sur). Ceci fonctionnera SEULEMENT avec les jeux STEAM et n&apos;a été testé qu&apos;avec Skyrim. N&apos;utilisez cette méthode que si les autres ne fonctionnent pas.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="611"/>
+ <location filename="settingsdialog.ui" line="649"/>
<source>NMM Version</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="631"/>
+ <location filename="settingsdialog.ui" line="669"/>
<source>The Version of Nexus Mod Manager to impersonate.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="634"/>
+ <location filename="settingsdialog.ui" line="672"/>
<source>Mod Organizer uses an API provided by the Nexus to provide features like checking for updates and downloading files. Unfortunately this API has not been made available officially to third party tools like MO so we have to impersonate the Nexus Mod Manager to be allowed in.
On top of this Nexus has used the client identification to lock out outdated versions of NMM to force users to update. This means that MO also needs to impersonate the new version of NMM even if MO doesn&apos;t need an update. Therefore you can configure the version to identify as here.
Please note that MO does identify itself as MO to the webserver, it&apos;s not lying about what it is. It is merely adding a &quot;compatible&quot; NMM version to the user agent.
@@ -5538,53 +5907,53 @@ tl;dr-version: If Nexus-features don&apos;t work, insert the current version num
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="656"/>
+ <location filename="settingsdialog.ui" line="694"/>
<source>Enforces that inactive ESPs and ESMs are never loaded.</source>
<translation>Garantie que les ESPs et ESMs inactifs ne soient jamais chargés.</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="659"/>
+ <location filename="settingsdialog.ui" line="697"/>
<source>It seems that the Games occasionally load ESP or ESM files even if they haven&apos;t been activated as plugins.
I don&apos;t yet know what the circumstances are, but user reports imply it is in some cases unwanted. If this is checked, ESPs and ESMs not checked in the List are invisible to the game and can not be loaded.</source>
<translation>Il semble que les jeux chargent parfois des fichiers ESP ou ESM même s&apos;ils ne sont pas activés.
Je n&apos;en connais pas encore les circonstances, mais les rapports des usagers impliquent que dans certains cas, ce comportement est indésirable. Si vous cochez ceci, les ESPs et ESMs qui ne sotn pas cochés seront invisible pour le jeu et ne pourront pas être chargés.</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="663"/>
+ <location filename="settingsdialog.ui" line="701"/>
<source>Hide inactive ESPs/ESMs</source>
<translation>Cacher les ESPs et ESMs inactifs</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="670"/>
+ <location filename="settingsdialog.ui" line="708"/>
<source>If checked, files (i.e. esps, esms and bsas) belonging to the core game can not be disabled in the UI. (default: on)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="673"/>
+ <location filename="settingsdialog.ui" line="711"/>
<source>If checked, files (i.e. esps, esms and bsas) belonging to the core game can not be disabled in the UI. (default: on)
Uncheck this if you want to use Mod Organizer with total conversions (like Nehrim) but be aware that the game will crash if required files are not enabled.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="677"/>
+ <location filename="settingsdialog.ui" line="715"/>
<source>Force-enable game files</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="687"/>
- <location filename="settingsdialog.ui" line="691"/>
+ <location filename="settingsdialog.ui" line="725"/>
+ <location filename="settingsdialog.ui" line="729"/>
<source>For Skyrim, this can be used instead of Archive Invalidation. It should make AI redundant for all Profiles.
For the other games this is not a sufficient replacement for AI!</source>
<translation>Pour Skyrim, ceci peut être utilisé au lieu de l&apos;invalidation des archives. Ça devrait rendre l&apos;invalidation redondante pour tous les profils.
Pour les autres jeux, ceci ne suffit pas à remplacer l&apos;invalidation des archives!</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="695"/>
+ <location filename="settingsdialog.ui" line="733"/>
<source>Back-date BSAs</source>
<translation>Antidater les BSAs</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="719"/>
+ <location filename="settingsdialog.ui" line="757"/>
<source>These are workarounds for problems with Mod Organizer. Please make sure you read the help text before changing anything here.</source>
<translation type="unfinished"></translation>
</message>
@@ -5593,27 +5962,27 @@ Pour les autres jeux, ceci ne suffit pas à remplacer l&apos;invalidation des ar
<translation type="obsolete">Ici se trouvent des solutions alternatives à certains problèmes rencontrés avec Mod Organizer. Elles ne sont normalement pas nécessaires. Soyez sûr d&apos;avoir lu le texte d&apos;aide avant de modifier quoi que ce soit sur cette page.</translation>
</message>
<message>
- <location filename="settingsdialog.cpp" line="89"/>
+ <location filename="settingsdialog.cpp" line="95"/>
<source>Select download directory</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.cpp" line="97"/>
+ <location filename="settingsdialog.cpp" line="103"/>
<source>Select mod directory</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.cpp" line="105"/>
+ <location filename="settingsdialog.cpp" line="111"/>
<source>Select cache directory</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.cpp" line="113"/>
+ <location filename="settingsdialog.cpp" line="119"/>
<source>Confirm?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.cpp" line="114"/>
+ <location filename="settingsdialog.cpp" line="120"/>
<source>This will make all dialogs show up again where you checked the &quot;Remember selection&quot;-box. Continue?</source>
<translation type="unfinished"></translation>
</message>
@@ -5739,7 +6108,7 @@ Pour les autres jeux, ceci ne suffit pas à remplacer l&apos;invalidation des ar
<name>TransferSavesDialog</name>
<message>
<location filename="transfersavesdialog.ui" line="14"/>
- <source>Dialog</source>
+ <source>Transfer Savegames</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -5760,8 +6129,16 @@ On Windows Vista/Windows 7:
C:\Users\[UserName]\Documents\My Games\Skyrim\Saves
On Windows XP:
- C:\Documents and Settings[UserName]\My Documents\My Games\Skyrim\Saves
+ C:\Documents and Settings\[UserName]\My Documents\My Games\Skyrim\Saves
</source>
+ <oldsource>This is a list of characters in the global location.
+
+On Windows Vista/Windows 7:
+ C:\Users\[UserName]\Documents\My Games\Skyrim\Saves
+
+On Windows XP:
+ C:\Documents and Settings[UserName]\My Documents\My Games\Skyrim\Saves
+</oldsource>
<translation type="unfinished"></translation>
</message>
<message>
diff --git a/src/organizer_ru.qm b/src/organizer_ru.qm
deleted file mode 100644
index 1bae65a6..00000000
--- a/src/organizer_ru.qm
+++ /dev/null
Binary files differ
diff --git a/src/organizer_ru.ts b/src/organizer_ru.ts
index 2204198c..0fc6ecea 100644
--- a/src/organizer_ru.ts
+++ b/src/organizer_ru.ts
@@ -2,6 +2,50 @@
<!DOCTYPE TS>
<TS version="2.0" language="ru">
<context>
+ <name>AboutDialog</name>
+ <message>
+ <location filename="aboutdialog.ui" line="14"/>
+ <location filename="aboutdialog.ui" line="53"/>
+ <source>About</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="aboutdialog.ui" line="66"/>
+ <source>Revision:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="aboutdialog.ui" line="104"/>
+ <source>Used Software</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="aboutdialog.ui" line="117"/>
+ <source>Credits</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="aboutdialog.ui" line="123"/>
+ <source>Translators</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="aboutdialog.ui" line="189"/>
+ <source>Others</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="aboutdialog.ui" line="266"/>
+ <source>Close</source>
+ <translation type="unfinished">Закрыть</translation>
+ </message>
+ <message>
+ <location filename="aboutdialog.cpp" line="81"/>
+ <source>No license</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>ActivateModsDialog</name>
<message>
<location filename="activatemodsdialog.ui" line="14"/>
@@ -11,7 +55,7 @@
<message>
<location filename="activatemodsdialog.ui" line="20"/>
<source>This is a list of esps and esms that were active when the save game was created.</source>
- <translation>Это список ESP и ESM, которые были активны во время создания сейва.</translation>
+ <translation>Это список esp и esm, которые были активны во время создания сохранения.</translation>
</message>
<message>
<location filename="activatemodsdialog.ui" line="23"/>
@@ -45,7 +89,7 @@ p, li { white-space: pre-wrap; }
<message>
<location filename="activatemodsdialog.cpp" line="49"/>
<source>not found</source>
- <translation>Не найдено</translation>
+ <translation>не найдено</translation>
</message>
</context>
<context>
@@ -74,7 +118,8 @@ p, li { white-space: pre-wrap; }
<location filename="baincomplexinstallerdialog.ui" line="47"/>
<source>Components of this package.
If there is a component called &quot;00 Core&quot; it is usually required. Options are ordered by priority as set up by the author.</source>
- <translation>Компоненты этого пакета.Если есть компонент который называется &quot;00 Core&quot;, значит так надо. Параметры отсортированы по приоритетности созданной автором.</translation>
+ <translation>Компоненты этого пакета.
+Если есть компонент, называемый &quot;00 Core&quot;, то это обычно необходимо. Опции упорядочены по приоритету, установленному автором.</translation>
</message>
<message>
<location filename="baincomplexinstallerdialog.ui" line="57"/>
@@ -91,7 +136,7 @@ If there is a component called &quot;00 Core&quot; it is usually required. Optio
<location filename="baincomplexinstallerdialog.ui" line="83"/>
<location filename="baincomplexinstallerdialog.ui" line="86"/>
<source>Opens a Dialog that allows custom modifications.</source>
- <translation type="unfinished">Открывает диалоговое окно, которое позволяет выбрать пользовательские модификации.</translation>
+ <translation>Открывает диалог, позволяющий выбрать пользовательские модификации.</translation>
</message>
<message>
<location filename="baincomplexinstallerdialog.ui" line="89"/>
@@ -101,7 +146,7 @@ If there is a component called &quot;00 Core&quot; it is usually required. Optio
<message>
<location filename="baincomplexinstallerdialog.ui" line="96"/>
<source>Ok</source>
- <translation>ОК</translation>
+ <translation>Ок</translation>
</message>
<message>
<location filename="baincomplexinstallerdialog.ui" line="103"/>
@@ -129,7 +174,7 @@ If there is a component called &quot;00 Core&quot; it is usually required. Optio
<message>
<location filename="categoriesdialog.ui" line="72"/>
<source>Internal ID for the category. The categories a mod belongs to are stored by this ID. It is recommended you use new IDs for categories you add instead of re-using existing ones.</source>
- <translation type="unfinished">Внутренний ID категории. Категории мода хранятся в истории под этим ID. Это рекомендуется использовать при создании новых ID для категорий, чтобы повторно использовать уже существующие.</translation>
+ <translation>Внутренний ID категории. Категории мода хранятся в истории под этим ID. Рекомендуется использовать новые ID для добавляемых вами категорий, вместо повторного использования существующих.</translation>
</message>
<message>
<location filename="categoriesdialog.ui" line="77"/>
@@ -161,13 +206,13 @@ p, li { white-space: pre-wrap; }
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;You can match one or multiple nexus categories to a internal ID. Whenever you download a mod from a Nexus Page, Mod Organizer will try to resolve the category defined on the Nexus to one available in MO.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;&quot;&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;To find out a category id used by the nexus, visit the categories list of the nexus page and hover over the links there.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <translation type="unfinished">&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+ <translation>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Вы можете задать соответствие с одной или нескольким категориям с внутренними ID. Каждый раз, когда вы загружаете мод со страницы Nexus, МО автоматически постарается задать соответствие, как на Nexus.&lt;/span&gt;&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Вы можете задать одну или несколько категорий Nexus внутреннему ID. Каждый раз, когда вы загружаете мод со страницы Nexus, МО постарается автоматически задать моду категорию, присвоенную ему на Nexus.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;&quot;&gt;&lt;/p&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Чтобы узнать идентификатор категории используемого соответствия, посетите список категорий на странице Связь и наведите курсор мыши на нужную ссылку.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Чтобы узнать ID категории, используемой на Nexus, перейдите в список категорий Nexus и наведите курсор мыши на нужную ссылку.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<location filename="categoriesdialog.ui" line="105"/>
@@ -226,37 +271,38 @@ p, li { white-space: pre-wrap; }
<context>
<name>DirectoryRefresher</name>
<message>
- <source>failed to read %1: %2</source>
- <translation type="obsolete">Не удалось прочитать %1: %2</translation>
- </message>
- <message>
<location filename="directoryrefresher.cpp" line="99"/>
<source>failed to read bsa: %1</source>
- <translation type="unfinished"></translation>
+ <translation>не удалось прочитать bsa: %1</translation>
</message>
</context>
<context>
<name>DownloadList</name>
<message>
- <location filename="downloadlist.cpp" line="63"/>
+ <location filename="downloadlist.cpp" line="64"/>
<source>Name</source>
<translation>Имя</translation>
</message>
<message>
- <location filename="downloadlist.cpp" line="64"/>
+ <location filename="downloadlist.cpp" line="65"/>
<source>Filetime</source>
- <translation type="unfinished">Ждите</translation>
+ <translation>Дата модификации</translation>
</message>
<message>
- <location filename="downloadlist.cpp" line="65"/>
+ <location filename="downloadlist.cpp" line="66"/>
<source>Done</source>
- <translation type="unfinished">Готово</translation>
+ <translation>Выполнено</translation>
</message>
<message>
- <location filename="downloadlist.cpp" line="79"/>
+ <location filename="downloadlist.cpp" line="82"/>
<source>Information missing, please select &quot;Query Info&quot; from the context menu to re-retrieve.</source>
<translation>Информация отсутствует, пожалуйста, выберите пункт &quot;Справочная информация&quot; из контекстного меню.</translation>
</message>
+ <message>
+ <location filename="downloadlist.cpp" line="89"/>
+ <source>pending download</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>DownloadListWidget</name>
@@ -267,16 +313,6 @@ p, li { white-space: pre-wrap; }
<translation>Заполнитель</translation>
</message>
<message>
- <location filename="downloadlistwidget.ui" line="81"/>
- <source>0</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="downloadlistwidget.ui" line="88"/>
- <source>KB</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<location filename="downloadlistwidget.ui" line="99"/>
<location filename="downloadlistwidget.cpp" line="145"/>
<location filename="downloadlistwidget.cpp" line="147"/>
@@ -287,7 +323,7 @@ p, li { white-space: pre-wrap; }
<location filename="downloadlistwidget.cpp" line="111"/>
<location filename="downloadlistwidget.cpp" line="113"/>
<source>Paused - Double Click to resume</source>
- <translation type="unfinished"></translation>
+ <translation>Пауза - двойной клик для продолжения</translation>
</message>
<message>
<location filename="downloadlistwidget.cpp" line="131"/>
@@ -299,7 +335,7 @@ p, li { white-space: pre-wrap; }
<location filename="downloadlistwidget.cpp" line="138"/>
<location filename="downloadlistwidget.cpp" line="140"/>
<source>Uninstalled - Double Click to re-install</source>
- <translation type="unfinished"></translation>
+ <translation>Удалено - двойной клик для переустановки</translation>
</message>
</context>
<context>
@@ -319,120 +355,135 @@ p, li { white-space: pre-wrap; }
<context>
<name>DownloadListWidgetCompactDelegate</name>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="130"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="88"/>
+ <source>&lt; mod %1 file %2 &gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="downloadlistwidgetcompact.cpp" line="93"/>
+ <source>Pending</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="downloadlistwidgetcompact.cpp" line="116"/>
+ <source>Paused</source>
+ <translation>Приостановлено</translation>
+ </message>
+ <message>
+ <location filename="downloadlistwidgetcompact.cpp" line="119"/>
+ <source>Fetching Info 1</source>
+ <translation>Извлечение информации 1</translation>
+ </message>
+ <message>
+ <location filename="downloadlistwidgetcompact.cpp" line="121"/>
+ <source>Fetching Info 2</source>
+ <translation>Извлечение информации 2</translation>
+ </message>
+ <message>
+ <location filename="downloadlistwidgetcompact.cpp" line="126"/>
<source>Installed</source>
<translation>Установлено</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="133"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="129"/>
<source>Uninstalled</source>
- <translation type="unfinished"></translation>
+ <translation>Удалено</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="136"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="132"/>
<source>Done</source>
<translation>Готово</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="215"/>
- <location filename="downloadlistwidgetcompact.cpp" line="224"/>
- <location filename="downloadlistwidgetcompact.cpp" line="233"/>
- <location filename="downloadlistwidgetcompact.cpp" line="242"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="241"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="250"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="259"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="268"/>
<source>Are you sure?</source>
<translation>Вы уверены?</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="216"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="242"/>
<source>This will remove all finished downloads from this list and from disk.</source>
<translation>Это удалит все готовые загрузки из этого списка и с диска.</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="225"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="251"/>
<source>This will remove all installed downloads from this list and from disk.</source>
<translation>Это удалит все установленные загрузки из этого списка и с диска.</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="234"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="260"/>
<source>This will permanently remove all finished downloads from this list (but NOT from disk).</source>
- <translation type="unfinished"></translation>
+ <translation>Это полностью удалит все завершенные загрузки из этого списка (но НЕ с диска).</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="243"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="269"/>
<source>This will permanently remove all installed downloads from this list (but NOT from disk).</source>
- <translation type="unfinished"></translation>
+ <translation>Это полностью удалит все установленные загрузки из этого списка (но НЕ с диска).</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="269"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="298"/>
<source>Install</source>
<translation>Установка</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="271"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="300"/>
<source>Query Info</source>
<translation>Справочная информация</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="273"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="302"/>
<source>Delete</source>
- <translation type="unfinished"></translation>
+ <translation>Удалить</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="274"/>
- <source>Remove from View</source>
- <translation type="unfinished"></translation>
+ <location filename="downloadlistwidgetcompact.cpp" line="304"/>
+ <source>Un-Hide</source>
+ <translation type="unfinished">Показать</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="279"/>
- <source>Remove</source>
- <translation>Удаление</translation>
+ <location filename="downloadlistwidgetcompact.cpp" line="306"/>
+ <source>Remove from View</source>
+ <translation>Скрыть от просмотра</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="276"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="309"/>
<source>Cancel</source>
<translation>Отмена</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="120"/>
- <source>Paused</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="downloadlistwidgetcompact.cpp" line="123"/>
- <source>Fetching Info 1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="downloadlistwidgetcompact.cpp" line="125"/>
- <source>Fetching Info 2</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="downloadlistwidgetcompact.cpp" line="277"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="310"/>
<source>Pause</source>
<translation>Пауза</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="280"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="312"/>
+ <source>Remove</source>
+ <translation>Удаление</translation>
+ </message>
+ <message>
+ <location filename="downloadlistwidgetcompact.cpp" line="313"/>
<source>Resume</source>
<translation>Возобновить</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="284"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="318"/>
<source>Delete Installed...</source>
- <translation type="unfinished"></translation>
+ <translation>Удалить установленное...</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="285"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="319"/>
<source>Delete All...</source>
- <translation type="unfinished"></translation>
+ <translation>Удалить все...</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="287"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="322"/>
<source>Remove Installed...</source>
<translation>Отменить установку</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="288"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="323"/>
<source>Remove All...</source>
<translation>Удалить все</translation>
</message>
@@ -440,100 +491,115 @@ p, li { white-space: pre-wrap; }
<context>
<name>DownloadListWidgetDelegate</name>
<message>
- <location filename="downloadlistwidget.cpp" line="228"/>
- <location filename="downloadlistwidget.cpp" line="237"/>
- <location filename="downloadlistwidget.cpp" line="246"/>
- <location filename="downloadlistwidget.cpp" line="255"/>
+ <location filename="downloadlistwidget.cpp" line="88"/>
+ <source>&lt; mod %1 file %2 &gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="downloadlistwidget.cpp" line="91"/>
+ <source>Pending</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="downloadlistwidget.cpp" line="118"/>
+ <source>Fetching Info 1</source>
+ <translation>Извлечение информации 1</translation>
+ </message>
+ <message>
+ <location filename="downloadlistwidget.cpp" line="121"/>
+ <source>Fetching Info 2</source>
+ <translation>Извлечение информации 2</translation>
+ </message>
+ <message>
+ <location filename="downloadlistwidget.cpp" line="253"/>
+ <location filename="downloadlistwidget.cpp" line="262"/>
+ <location filename="downloadlistwidget.cpp" line="271"/>
+ <location filename="downloadlistwidget.cpp" line="280"/>
<source>Are you sure?</source>
<translation>Вы уверены?</translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="229"/>
+ <location filename="downloadlistwidget.cpp" line="254"/>
<source>This will remove all finished downloads from this list and from disk.</source>
<translation>Это удалит все готовые загрузки из этого списка и с диска.</translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="238"/>
+ <location filename="downloadlistwidget.cpp" line="263"/>
<source>This will remove all installed downloads from this list and from disk.</source>
<translation>Это удалит все установленные загрузки из этого листа и с диска.</translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="247"/>
+ <location filename="downloadlistwidget.cpp" line="272"/>
<source>This will remove all finished downloads from this list (but NOT from disk).</source>
- <translation type="unfinished"></translation>
+ <translation>Это удалит все готовые загрузки из этого списка (но НЕ с диска).</translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="256"/>
+ <location filename="downloadlistwidget.cpp" line="281"/>
<source>This will remove all installed downloads from this list (but NOT from disk).</source>
- <translation type="unfinished"></translation>
+ <translation>Это удалит все установленные загрузки из этого списка (но НЕ с диска).</translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="281"/>
+ <location filename="downloadlistwidget.cpp" line="309"/>
<source>Install</source>
<translation>Установить</translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="283"/>
+ <location filename="downloadlistwidget.cpp" line="311"/>
<source>Query Info</source>
<translation>Справочная информация</translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="285"/>
+ <location filename="downloadlistwidget.cpp" line="313"/>
<source>Delete</source>
- <translation type="unfinished"></translation>
+ <translation>Удалить</translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="286"/>
- <source>Remove from View</source>
- <translation type="unfinished"></translation>
+ <location filename="downloadlistwidget.cpp" line="315"/>
+ <source>Un-Hide</source>
+ <translation type="unfinished">Показать</translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="291"/>
- <source>Remove</source>
- <translation>Удалить</translation>
+ <location filename="downloadlistwidget.cpp" line="317"/>
+ <source>Remove from View</source>
+ <translation>Скрыть от просмотра</translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="288"/>
+ <location filename="downloadlistwidget.cpp" line="320"/>
<source>Cancel</source>
<translation>Отмена</translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="118"/>
- <source>Fetching Info 1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="downloadlistwidget.cpp" line="121"/>
- <source>Fetching Info 2</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="downloadlistwidget.cpp" line="289"/>
+ <location filename="downloadlistwidget.cpp" line="321"/>
<source>Pause</source>
<translation>Пауза</translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="292"/>
+ <location filename="downloadlistwidget.cpp" line="323"/>
+ <source>Remove</source>
+ <translation>Удалить</translation>
+ </message>
+ <message>
+ <location filename="downloadlistwidget.cpp" line="324"/>
<source>Resume</source>
<translation>Возобновить</translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="296"/>
+ <location filename="downloadlistwidget.cpp" line="329"/>
<source>Delete Installed...</source>
- <translation type="unfinished"></translation>
+ <translation>Удалить установленное...</translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="297"/>
+ <location filename="downloadlistwidget.cpp" line="330"/>
<source>Delete All...</source>
- <translation type="unfinished"></translation>
+ <translation>Удалить все...</translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="299"/>
+ <location filename="downloadlistwidget.cpp" line="333"/>
<source>Remove Installed...</source>
<translation>Удалить установленные</translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="300"/>
+ <location filename="downloadlistwidget.cpp" line="334"/>
<source>Remove All...</source>
<translation>Удалить все</translation>
</message>
@@ -541,109 +607,124 @@ p, li { white-space: pre-wrap; }
<context>
<name>DownloadManager</name>
<message>
- <location filename="downloadmanager.cpp" line="125"/>
+ <location filename="downloadmanager.cpp" line="132"/>
<source>failed to rename &quot;%1&quot; to &quot;%2&quot;</source>
- <translation>Не удалось переименовать &quot;%1&quot; в &quot;%2&quot;</translation>
+ <translation>не удалось переименовать &quot;%1&quot; в &quot;%2&quot;</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="306"/>
+ <location filename="downloadmanager.cpp" line="342"/>
<source>Download again?</source>
<translation>Скачать снова</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="306"/>
+ <location filename="downloadmanager.cpp" line="342"/>
<source>A file with the same name has already been downloaded. Do you want to download it again? The new file will receive a different name.</source>
<translation>Файл с таким именем загружен. Вы хотите загрузить его снова? У него будет другое имя.</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="336"/>
+ <location filename="downloadmanager.cpp" line="388"/>
<source>failed to download %1: could not open output file: %2</source>
- <translation>Ошибка загрузки %1: не удалось открыть входящий файл: %2</translation>
+ <translation>не удалось загрузить %1: не удалось открыть выходной файл: %2</translation>
+ </message>
+ <message>
+ <location filename="downloadmanager.cpp" line="421"/>
+ <source>Wrong Game</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="downloadmanager.cpp" line="421"/>
+ <source>The download link is for a mod for &quot;%1&quot; but this instance of MO has been set up for &quot;%2&quot;.</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="366"/>
- <location filename="downloadmanager.cpp" line="585"/>
- <location filename="downloadmanager.cpp" line="595"/>
- <location filename="downloadmanager.cpp" line="604"/>
- <location filename="downloadmanager.cpp" line="614"/>
- <location filename="downloadmanager.cpp" line="624"/>
- <location filename="downloadmanager.cpp" line="634"/>
- <location filename="downloadmanager.cpp" line="645"/>
- <location filename="downloadmanager.cpp" line="654"/>
- <location filename="downloadmanager.cpp" line="664"/>
- <location filename="downloadmanager.cpp" line="679"/>
+ <location filename="downloadmanager.cpp" line="439"/>
+ <location filename="downloadmanager.cpp" line="506"/>
+ <location filename="downloadmanager.cpp" line="682"/>
+ <location filename="downloadmanager.cpp" line="691"/>
+ <location filename="downloadmanager.cpp" line="701"/>
+ <location filename="downloadmanager.cpp" line="710"/>
+ <location filename="downloadmanager.cpp" line="724"/>
+ <location filename="downloadmanager.cpp" line="734"/>
+ <location filename="downloadmanager.cpp" line="744"/>
+ <location filename="downloadmanager.cpp" line="754"/>
+ <location filename="downloadmanager.cpp" line="765"/>
+ <location filename="downloadmanager.cpp" line="773"/>
+ <location filename="downloadmanager.cpp" line="782"/>
+ <location filename="downloadmanager.cpp" line="792"/>
+ <location filename="downloadmanager.cpp" line="807"/>
<source>invalid index</source>
- <translation>Неверный индекс</translation>
+ <translation>неверный индекс</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="384"/>
+ <location filename="downloadmanager.cpp" line="457"/>
<source>failed to delete %1</source>
- <translation>Не удалось удалить %1</translation>
+ <translation>не удалось удалить %1</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="390"/>
+ <location filename="downloadmanager.cpp" line="463"/>
<source>failed to delete meta file for %1</source>
- <translation>Не удалось удалить мета файл %1</translation>
+ <translation>не удалось удалить мета-файл %1</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="450"/>
- <location filename="downloadmanager.cpp" line="468"/>
- <location filename="downloadmanager.cpp" line="481"/>
- <location filename="downloadmanager.cpp" line="494"/>
- <location filename="downloadmanager.cpp" line="505"/>
- <location filename="downloadmanager.cpp" line="540"/>
+ <location filename="downloadmanager.cpp" line="539"/>
+ <location filename="downloadmanager.cpp" line="557"/>
+ <location filename="downloadmanager.cpp" line="570"/>
+ <location filename="downloadmanager.cpp" line="587"/>
+ <location filename="downloadmanager.cpp" line="598"/>
+ <location filename="downloadmanager.cpp" line="633"/>
<source>invalid index %1</source>
- <translation>Неверный индекс %1</translation>
+ <translation>неверный индекс %1</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="557"/>
+ <location filename="downloadmanager.cpp" line="650"/>
<source>Please enter the nexus mod id</source>
- <translation>Выберите ID мода с Nexus</translation>
+ <translation>Пожалуйста, введите ID мода на Nexus</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="557"/>
+ <location filename="downloadmanager.cpp" line="650"/>
<source>Mod ID:</source>
<translation>ID мода:</translation>
</message>
<message>
- <source>invalid alphabetical index %1</source>
- <translation type="obsolete">Недействительный алфавитный указатель %1</translation>
- </message>
- <message>
- <location filename="downloadmanager.cpp" line="899"/>
+ <location filename="downloadmanager.cpp" line="1042"/>
<source>Information updated</source>
<translation>Информация обновлена</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="901"/>
- <location filename="downloadmanager.cpp" line="915"/>
+ <location filename="downloadmanager.cpp" line="1044"/>
+ <location filename="downloadmanager.cpp" line="1058"/>
<source>No matching file found on Nexus! Maybe this file is no longer available or it was renamed?</source>
<translation>Нет соответствующих модов на Nexus! Возможно фал был удален или переименован?</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="903"/>
+ <location filename="downloadmanager.cpp" line="1046"/>
<source>No file on Nexus matches the selected file by name. Please manually choose the correct one.</source>
<translation>Нет соответствующих фалов на Nexus. Выберите файл вручную.</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="1032"/>
+ <location filename="downloadmanager.cpp" line="1180"/>
<source>No download server available. Please try again later.</source>
<translation>Сервер недоступен. Попробуйте позже.</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="1074"/>
+ <location filename="downloadmanager.cpp" line="1224"/>
<source>Failed to request file info from nexus: %1</source>
<translation>Не удалось получить информацию о файле: %1</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="1097"/>
+ <location filename="downloadmanager.cpp" line="1249"/>
+ <source>Download failed. Server reported: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="downloadmanager.cpp" line="1251"/>
<source>Download failed: %1 (%2)</source>
<translation>Загрузка не удалась: %1 (%2)</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="1174"/>
+ <location filename="downloadmanager.cpp" line="1331"/>
<source>failed to re-open %1</source>
- <translation>Не удалось открыть %1</translation>
+ <translation>не удалось повторно открыть %1</translation>
</message>
</context>
<context>
@@ -720,14 +801,16 @@ p, li { white-space: pre-wrap; }
<message>
<location filename="editexecutablesdialog.ui" line="135"/>
<source>Allow the Steam AppID to be used for this executable to be changed.</source>
- <translation>Разрешить Steam AppID. Для использования исполняемый файл будет изменен.</translation>
+ <translation>Разрешить изменение Steam AppID, используемого для этого исполняемого файла.</translation>
</message>
<message>
<location filename="editexecutablesdialog.ui" line="138"/>
<source>Allow the Steam AppID to be used for this executable to be changed.
Every game/tool distributed through Steam has a unique ID. MO needs to know this ID to start those programs directly, otherwise the program is started by steam and then MO will not work. By default, MO will use the AppID for the game.
Right now the only case I know of where this needs to be overwritten is for the Skyrim Creation Kit which has its own AppID. This overwrite is already preconfigured.</source>
- <translation>Разрешить Steam AppID, который будет использоваться для изменения исполняемого файла. Каждая игра\инструмент раcпространяется через Steam и имеет уникальный ID. MO необходимо знать этот ID, что бы активировать игру\инструмент, иначе придется запускать через Steam. По умолчанию MO будет использовать AppID для игры\инструмента.Возможны проблемы с ID создаваемыми в Skyrim Creation Kit.</translation>
+ <translation>Разрешить изменение Steam AppID, который будет использоваться для исполняемого файла.
+Каждая игра/инструмент распространяемые через Steam имеют свой уникальный ID. MO необходимо знать этот ID для прямого запуска этих программ, иначе они будут запущены через Steam и MO работать не будет. По умолчанию MO будет использовать AppID для игры.
+В данный момент единственный случай, где это должно быть перезаписано это Skyrim Creation Kit, который имеет свой собственный AppID. Эта замена уже предварительно сконфигурирована.</translation>
</message>
<message>
<location filename="editexecutablesdialog.ui" line="143"/>
@@ -744,12 +827,14 @@ Right now the only case I know of where this needs to be overwritten is for the
<source>Steam AppID to use for this executable that differs from the games AppID.
Every game/tool distributed through Steam has a unique ID. MO needs to know this ID to start those programs directly, otherwise the program is started by steam and then MO will not work. By default, MO will use the AppID for the game (usually 72850).
Right now the only case I know of where this needs to be overwritten is for the Skyrim Creation Kit which has its own AppID (usually 202480). This overwrite is already preconfigured.</source>
- <translation>Steam AppID, который будет использоваться для изменения исполняемого файла. Каждая игра\инструмент раcпространяется через Steam и имеет уникальный ID. MO необходимо знать этот ID, что бы активировать игру\инструмент, иначе придется запускать через Steam. По умолчанию MO будет использовать AppID для игры\инструмента.Возможны проблемы с ID создаваемыми в Skyrim Creation Kit.</translation>
+ <translation>Steam AppID, используемый для этого исполняемого файла, отличающийся от AppID других игр.
+Каждая игра/инструмент распространяемые через Steam имеют свой уникальный ID. MO необходимо знать этот ID для прямого запуска этих программ, иначе они будут запущены через Steam и MO работать не будет. По умолчанию MO будет использовать AppID для игры (обычно 72850).
+В данный момент единственный случай, где он должен быть перезаписан, это для Skyrim Creation Kit, который имеет свой собственный AppID (обычно 202480). Эта замена уже предварительно сконфигурирована.</translation>
</message>
<message>
<location filename="editexecutablesdialog.ui" line="169"/>
<location filename="editexecutablesdialog.ui" line="172"/>
- <location filename="editexecutablesdialog.cpp" line="220"/>
+ <location filename="editexecutablesdialog.cpp" line="258"/>
<source>If checked, MO will be closed once the specified executable is run.</source>
<translation>Если активно, MO будет закрыт после работы исполняемого файла.</translation>
</message>
@@ -766,7 +851,7 @@ Right now the only case I know of where this needs to be overwritten is for the
</message>
<message>
<location filename="editexecutablesdialog.ui" line="188"/>
- <location filename="editexecutablesdialog.cpp" line="190"/>
+ <location filename="editexecutablesdialog.cpp" line="196"/>
<source>Add</source>
<translation>Добавить</translation>
</message>
@@ -782,47 +867,64 @@ Right now the only case I know of where this needs to be overwritten is for the
<translation>Удалить</translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="119"/>
+ <location filename="editexecutablesdialog.ui" line="233"/>
+ <source>Close</source>
+ <translation type="unfinished">Закрыть</translation>
+ </message>
+ <message>
+ <location filename="editexecutablesdialog.cpp" line="125"/>
<source>Select a binary</source>
<translation>Указать двоичный</translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="119"/>
+ <location filename="editexecutablesdialog.cpp" line="125"/>
<source>Executable (%1)</source>
<translation>Исполняемые (%1)</translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="143"/>
+ <location filename="editexecutablesdialog.cpp" line="149"/>
<source>Java (32-bit) required</source>
- <translation type="unfinished"></translation>
+ <translation>Требуется Java (32-bit)</translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="144"/>
+ <location filename="editexecutablesdialog.cpp" line="150"/>
<source>MO requires 32-bit java to run this application. If you already have it installed, select javaw.exe from that installation as the binary.</source>
- <translation type="unfinished"></translation>
+ <translation>MO требует 32-bit java для запуска этого приложения. Если он у вас уже установлен, выберете javaw.exe для этой установки как исполняемый файл.</translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="160"/>
+ <location filename="editexecutablesdialog.cpp" line="166"/>
<source>Select a directory</source>
<translation>Укажите директорию</translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="169"/>
+ <location filename="editexecutablesdialog.cpp" line="175"/>
<source>Confirm</source>
<translation>Подтвердить</translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="169"/>
+ <location filename="editexecutablesdialog.cpp" line="175"/>
<source>Really remove &quot;%1&quot; from executables?</source>
<translation>Действительно удалить &quot;%1&quot; исполняемых?</translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="194"/>
+ <location filename="editexecutablesdialog.cpp" line="200"/>
<source>Modify</source>
<translation>Изменить</translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="217"/>
+ <location filename="editexecutablesdialog.cpp" line="230"/>
+ <location filename="editexecutablesdialog.cpp" line="278"/>
+ <source>Save Changes?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="editexecutablesdialog.cpp" line="231"/>
+ <location filename="editexecutablesdialog.cpp" line="279"/>
+ <source>You made changes to the current executable, do you want to save them?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="editexecutablesdialog.cpp" line="255"/>
<source>MO must be kept running or this application will not work correctly.</source>
<translation>MO должна быть запущена или приложение не сможет работать правильно</translation>
</message>
@@ -843,7 +945,7 @@ Right now the only case I know of where this needs to be overwritten is for the
<location filename="finddialog.ui" line="31"/>
<location filename="finddialog.ui" line="34"/>
<source>Search term</source>
- <translation>Поиск терминала</translation>
+ <translation>Поиск термина</translation>
</message>
<message>
<location filename="finddialog.ui" line="47"/>
@@ -894,7 +996,7 @@ Right now the only case I know of where this needs to be overwritten is for the
<message>
<location filename="fomodinstallerdialog.ui" line="81"/>
<source>&lt;a href=&quot;#&quot;&gt;Link&lt;/a&gt;</source>
- <translation>&lt;a href=&quot;#&quot;&gt;ссылка&lt;/a&gt;</translation>
+ <translation>&lt;a href=&quot;#&quot;&gt;Ссылка&lt;/a&gt;</translation>
</message>
<message>
<location filename="fomodinstallerdialog.ui" line="160"/>
@@ -916,58 +1018,6 @@ Right now the only case I know of where this needs to be overwritten is for the
<source>Cancel</source>
<translation>Отмена</translation>
</message>
- <message>
- <source>ModuleConfig.xml missing</source>
- <translation type="obsolete">ModuleConfig.xml отсутствует</translation>
- </message>
- <message>
- <source>failed to parse info.xml: %1 (%2) (line %3, column %4)</source>
- <translation type="obsolete">не удалось проанализировать info.xml: %1 (%2) (строка %3, столбец %4)</translation>
- </message>
- <message>
- <source>unsupported order type %1</source>
- <translation type="obsolete">не поддерживаемый тип порядка %1</translation>
- </message>
- <message>
- <source>unsupported group type %1</source>
- <translation type="obsolete">не поддерживаемый тип группы %1</translation>
- </message>
- <message>
- <source>This component is required</source>
- <translation type="obsolete">Этот компонент необходим</translation>
- </message>
- <message>
- <source>It is recommended you enable this component</source>
- <translation type="obsolete">Рекомендуется включить этот компонент</translation>
- </message>
- <message>
- <source>Optional component</source>
- <translation type="obsolete">Дополнительный компонент</translation>
- </message>
- <message>
- <source>This component is not usable in combination with other installed plugins</source>
- <translation type="obsolete">Этот компонент не может сочетаться с другими установленными плагинами.</translation>
- </message>
- <message>
- <source>You may be experiencing instability in combination with other installed plugins</source>
- <translation type="obsolete">Могут наблюдаться нестабильность в сочетании с другими установленными плагинами.</translation>
- </message>
- <message>
- <source>None</source>
- <translation type="obsolete">Ни один</translation>
- </message>
- <message>
- <source>Select one or more of these options:</source>
- <translation type="obsolete">Выберите один или несколько из следующих вариантов:</translation>
- </message>
- <message>
- <source>failed to parse ModuleConfig.xml: %1</source>
- <translation type="obsolete">не удается проанализировать ModuleConfig.xml: %1</translation>
- </message>
- <message>
- <source>Install</source>
- <translation type="obsolete">Установить</translation>
- </message>
</context>
<context>
<name>InstallDialog</name>
@@ -1013,11 +1063,11 @@ Right now the only case I know of where this needs to be overwritten is for the
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;This displays the content of the archive. &amp;lt;data&amp;gt; represents the base directory which will map to the game&apos;s data directory. You can change the base directory via the right-click context menu and you can move around files via drag&amp;amp;drop&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <translation type="unfinished">&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+ <translation>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Это показывает содержимое архива. &lt;data&gt; представляет базовый каталог, в котором будут сопоставлены с данными каталога игры. Вы можете изменить базовый каталог с помощью правой кнопкой мыши через контекстное меню, и можете перемещаться по файлам с помощью drag&amp;drop.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Отображает содержимое архива. &amp;lt;data&amp;gt; представляет базовый каталог, данные в котором будут сопоставлены с данными каталога игры. Вы можете изменить базовый каталог нажатием правой кнопки мыши, через контекстное меню, а также можете перемещаться по файлам с помощью drag&amp;amp;drop&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<location filename="installdialog.ui" line="121"/>
@@ -1027,223 +1077,117 @@ p, li { white-space: pre-wrap; }
<message>
<location filename="installdialog.ui" line="141"/>
<source>OK</source>
- <translation type="unfinished"></translation>
+ <translation>OK</translation>
</message>
<message>
<location filename="installdialog.ui" line="148"/>
<source>Cancel</source>
<translation type="unfinished">Отмена</translation>
</message>
- <message>
- <source>Looks good</source>
- <translation type="obsolete">Выглядит хорошо</translation>
- </message>
- <message>
- <source>No problem detected</source>
- <translation type="obsolete">Проблем не обнаружено</translation>
- </message>
- <message>
- <source>No game data on top level</source>
- <translation type="obsolete">Нет данных игры уровнем выше</translation>
- </message>
- <message>
- <source>There is no esp/esm file or asset directory (textures, meshes, interface, ...) on the top level.</source>
- <translation type="obsolete">Существующий ESP / ESM файла или каталога не имеет текстуры textures, meshes, interface, ... уровнем выше.</translation>
- </message>
- <message>
- <source>Enter a directory name</source>
- <translation type="obsolete">Введите имя каталога</translation>
- </message>
- <message>
- <source>A directory with that name exists</source>
- <translation type="obsolete">Каталог с таким именем не существует</translation>
- </message>
- <message>
- <source>Set data directory</source>
- <translation type="obsolete">Набор данных каталога</translation>
- </message>
- <message>
- <source>Unset data directory</source>
- <translation type="obsolete">Отключенный каталог данных</translation>
- </message>
- <message>
- <source>Create directory...</source>
- <translation type="obsolete">Создать директорию...</translation>
- </message>
- <message>
- <source>&amp;Open</source>
- <translation type="obsolete">&amp;Открыть</translation>
- </message>
</context>
<context>
<name>InstallationManager</name>
<message>
- <source>mo_archive.dll not loaded: &quot;%1&quot;</source>
- <translation type="obsolete">mo_archive.dll не загружен: &quot;%1&quot;</translation>
+ <location filename="installationmanager.cpp" line="76"/>
+ <source>archive.dll not loaded: &quot;%1&quot;</source>
+ <translation>archive.dll не загружен: &quot;%1&quot;</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="97"/>
+ <location filename="installationmanager.cpp" line="98"/>
<source>Password required</source>
<translation>Требуется пароль</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="97"/>
+ <location filename="installationmanager.cpp" line="98"/>
<source>Password</source>
<translation>Пароль</translation>
</message>
<message>
- <source>Directory exists</source>
- <translation type="obsolete">Каталог существует</translation>
- </message>
- <message>
- <source>This mod seems to be installed already. Do you want to add files from this archive (overwriting existing ones) or do you want to completely replace the existing files (old files are deleted)?</source>
- <translation type="obsolete">Этот мод, кажется, уже установлен. Вы хотите перезаписать существующие или вы хотите полностью заменить существующие файлы (старые файлы удаляются)?</translation>
- </message>
- <message>
- <source>Add Files</source>
- <translation type="obsolete">Добавить файлы</translation>
- </message>
- <message>
- <source>Replace</source>
- <translation type="obsolete">Заменить</translation>
- </message>
- <message>
<location filename="installationmanager.cpp" line="164"/>
- <location filename="installationmanager.cpp" line="252"/>
- <location filename="installationmanager.cpp" line="530"/>
+ <location filename="installationmanager.cpp" line="248"/>
+ <location filename="installationmanager.cpp" line="529"/>
<source>Extracting files</source>
<translation>Извлечение файлов</translation>
</message>
<message>
- <source>Preparing installer</source>
- <translation type="obsolete">Подготовка к установке</translation>
- </message>
- <message>
- <source>Installation as fomod failed: %1</source>
- <translation type="obsolete">Установка в fomod не удалась: %1</translation>
- </message>
- <message>
- <source>failed to start %1</source>
- <translation type="obsolete">Не удалось начать %1</translation>
- </message>
- <message>
- <source>Running external installer.
-Note: This installer will not be aware of other installed mods!</source>
- <translation type="obsolete">Запуск внешней установки.
-Внимание: Других запущенных программ установки не должно быть!</translation>
- </message>
- <message>
- <source>Force Close</source>
- <translation type="obsolete">Закрыть принудительно</translation>
- </message>
- <message>
- <source>Confirm</source>
- <translation type="obsolete">Подтвердить</translation>
- </message>
- <message>
- <source>installation failed (errorcode %1)</source>
- <translation type="obsolete">Установка не удалась (errorcode %1)</translation>
- </message>
- <message>
- <location filename="installationmanager.cpp" line="624"/>
- <source>File format &quot;%1&quot; not supported</source>
- <translation>Формат файла &quot;%1&quot; не поддерживается</translation>
- </message>
- <message>
- <source>failed to open archive &quot;%1&quot;: %2</source>
- <translation type="obsolete">Не удалось открыть архив &quot;%1&quot;: %2</translation>
- </message>
- <message>
- <location filename="installationmanager.cpp" line="75"/>
- <source>archive.dll not loaded: &quot;%1&quot;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="installationmanager.cpp" line="443"/>
+ <location filename="installationmanager.cpp" line="439"/>
<source>failed to create backup</source>
- <translation type="unfinished"></translation>
+ <translation>не удалось создать резервную копию</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="449"/>
+ <location filename="installationmanager.cpp" line="448"/>
<source>Mod Name</source>
- <translation type="unfinished"></translation>
+ <translation>Имя мода</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="449"/>
+ <location filename="installationmanager.cpp" line="448"/>
<source>Name</source>
<translation type="unfinished">Имя</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="502"/>
+ <location filename="installationmanager.cpp" line="501"/>
<source>Invalid name</source>
- <translation type="unfinished"></translation>
+ <translation>Недопустимое имя</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="503"/>
+ <location filename="installationmanager.cpp" line="502"/>
<source>The name you entered is invalid, please enter a different one.</source>
- <translation type="unfinished"></translation>
+ <translation>Введенное вами имя недопустимо, пожалуйста введите другое.</translation>
</message>
<message>
- <source>Installer missing</source>
- <translation type="obsolete">Установщик отсутствует</translation>
- </message>
- <message>
- <source>This package contains a scripted installer. To use this installer you need the optional &quot;NCC&quot;-package and the .net runtime. Do you want to continue, treating this as a manual installer?</source>
- <translation type="obsolete">Этот пакет содержит сценарии установки. Для использования этой установки необходимо дополнительно «NCC» пакет и .net runtime. Вы хотите использовать это в качестве установки?</translation>
- </message>
- <message>
- <source>Please install NCC</source>
- <translation type="obsolete">Установите NCC</translation>
+ <location filename="installationmanager.cpp" line="609"/>
+ <source>File format &quot;%1&quot; not supported</source>
+ <translation>Формат файла &quot;%1&quot; не поддерживается</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="750"/>
+ <location filename="installationmanager.cpp" line="735"/>
<source>None of the available installer plugins were able to handle that archive</source>
- <translation type="unfinished"></translation>
+ <translation>Не один из доступных плагинов-установщиков не смог просмотреть этот архив</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="760"/>
+ <location filename="installationmanager.cpp" line="745"/>
<source>no error</source>
- <translation>Ошибки отсутствуют</translation>
+ <translation>ошибки отсутствуют</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="763"/>
+ <location filename="installationmanager.cpp" line="748"/>
<source>7z.dll not found</source>
<translation>7z.dll не найден</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="766"/>
+ <location filename="installationmanager.cpp" line="751"/>
<source>7z.dll isn&apos;t valid</source>
<translation>7z.dll поврежден</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="769"/>
+ <location filename="installationmanager.cpp" line="754"/>
<source>archive not found</source>
- <translation>Архив не найден</translation>
+ <translation>архив не найден</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="772"/>
+ <location filename="installationmanager.cpp" line="757"/>
<source>failed to open archive</source>
- <translation>Ошибка открытия архива</translation>
+ <translation>не удалось открыть архив</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="775"/>
+ <location filename="installationmanager.cpp" line="760"/>
<source>unsupported archive type</source>
- <translation>Не поддерживаемый тип архива</translation>
+ <translation>не поддерживаемый тип архива</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="778"/>
+ <location filename="installationmanager.cpp" line="763"/>
<source>internal library error</source>
- <translation>Внутренняя ошибка библиотеки</translation>
+ <translation>внутренняя ошибка библиотеки</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="781"/>
+ <location filename="installationmanager.cpp" line="766"/>
<source>archive invalid</source>
- <translation>Архив поврежден</translation>
+ <translation>архив поврежден</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="785"/>
+ <location filename="installationmanager.cpp" line="770"/>
<source>unknown archive error</source>
- <translation>Неизвестная ошибка архива</translation>
+ <translation>неизвестная ошибка архива</translation>
</message>
</context>
<context>
@@ -1256,7 +1200,7 @@ Note: This installer will not be aware of other installed mods!</source>
<message>
<location filename="lockeddialog.ui" line="20"/>
<source>This dialog should disappear automatically if the application/game is done. Click unlock if it didn&apos;t.</source>
- <translation>Это окно должно закрыться автоматически если игра запущена. Нажмите кнопку &quot;Разблокировать&quot; если этого не произошло.</translation>
+ <translation>Этот диалог должен закрыться автоматически если игра/приложение запущены. Нажмите разблокировать, если этого не произошло.</translation>
</message>
<message>
<location filename="lockeddialog.ui" line="23"/>
@@ -1264,7 +1208,7 @@ Note: This installer will not be aware of other installed mods!</source>
<translation>MO заблокирован, т.к исполняемый файл запущен.</translation>
</message>
<message>
- <location filename="lockeddialog.ui" line="51"/>
+ <location filename="lockeddialog.ui" line="54"/>
<source>Unlock</source>
<translation>Разблокировать</translation>
</message>
@@ -1272,22 +1216,22 @@ Note: This installer will not be aware of other installed mods!</source>
<context>
<name>LogBuffer</name>
<message>
- <location filename="logbuffer.cpp" line="72"/>
+ <location filename="logbuffer.cpp" line="73"/>
<source>failed to write log to %1: %2</source>
- <translation>Не удалось произвести запись в журнал %1: %2</translation>
+ <translation>не удалось произвести запись в журнал %1: %2</translation>
</message>
</context>
<context>
<name>MOApplication</name>
<message>
- <location filename="moapplication.cpp" line="60"/>
+ <location filename="moapplication.cpp" line="68"/>
<source>an error occured: %1</source>
- <translation type="unfinished"></translation>
+ <translation>произошла ошибка: %1</translation>
</message>
<message>
- <location filename="moapplication.cpp" line="65"/>
+ <location filename="moapplication.cpp" line="73"/>
<source>an error occured</source>
- <translation type="unfinished"></translation>
+ <translation>произошла ошибка</translation>
</message>
</context>
<context>
@@ -1301,12 +1245,12 @@ Note: This installer will not be aware of other installed mods!</source>
<message>
<location filename="mainwindow.ui" line="128"/>
<source>Profile</source>
- <translation type="unfinished"></translation>
+ <translation>Профиль</translation>
</message>
<message>
<location filename="mainwindow.ui" line="138"/>
<source>Pick a module collection</source>
- <translation type="unfinished"></translation>
+ <translation>Выберете набор модулей</translation>
</message>
<message>
<location filename="mainwindow.ui" line="141"/>
@@ -1316,54 +1260,59 @@ p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Create profiles here. Each profile contains its own list of active mods and esps. This way you can quickly switch between setups for different play throughs.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Please note that right now your esp load order is not kept seperate for different profiles.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <translation type="unfinished"></translation>
+ <translation>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
+p, li { white-space: pre-wrap; }
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Создать профили здесь. Каждый профиль включает свой собственный список активных модов и esp. Таким образом, вы можете быстро переключаться между установками для различных прохождений игры.&lt;/span&gt;&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Обратите внимание, что порядок загрузки esp одинаков для всех профилей.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<location filename="mainwindow.ui" line="159"/>
<source>Refresh list</source>
- <translation type="unfinished"></translation>
+ <translation>Обновить список</translation>
</message>
<message>
<location filename="mainwindow.ui" line="162"/>
<source>Refresh list. This is usually not necessary unless you modified data outside the program.</source>
- <translation type="unfinished"></translation>
+ <translation>Обновить список. Обычно в этом нет необходимости, пока вы не измените данные вне программы.</translation>
</message>
<message>
<location filename="mainwindow.ui" line="278"/>
<source>List of available mods.</source>
- <translation type="unfinished"></translation>
+ <translation>Список доступных модов.</translation>
</message>
<message>
<location filename="mainwindow.ui" line="281"/>
<source>This is a list of installed mods. Use the checkboxes to activate/deactivate mods and drag &amp; drop mods to change their &quot;installation&quot; orders.</source>
- <translation type="unfinished"></translation>
+ <translation>Это список установленных модов. Используйте флажки, для включения/отключения модов и перетаскивание модов, для изменения их порядка установки.</translation>
</message>
<message>
<location filename="mainwindow.ui" line="366"/>
<source>Filter</source>
- <translation type="unfinished"></translation>
+ <translation>Фильтр</translation>
</message>
<message>
<location filename="mainwindow.ui" line="387"/>
<source>No groups</source>
- <translation type="unfinished"></translation>
+ <translation>Без группировки</translation>
</message>
<message>
<location filename="mainwindow.ui" line="397"/>
<source>Nexus IDs</source>
- <translation type="unfinished">Nexus IDs</translation>
+ <translation>Nexus IDs</translation>
</message>
<message>
<location filename="mainwindow.ui" line="405"/>
- <location filename="mainwindow.ui" line="722"/>
- <location filename="mainwindow.ui" line="1027"/>
+ <location filename="mainwindow.ui" line="724"/>
+ <location filename="mainwindow.ui" line="1046"/>
<source>Namefilter</source>
- <translation type="unfinished"></translation>
+ <translation>Фильтр по имени</translation>
</message>
<message>
<location filename="mainwindow.ui" line="440"/>
<source>Pick a program to run.</source>
- <translation type="unfinished"></translation>
+ <translation>Выберете программу для запуска.</translation>
</message>
<message>
<location filename="mainwindow.ui" line="443"/>
@@ -1373,12 +1322,17 @@ p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Choose the program to run. Once you start using ModOrganizer, you should always run your game and tools from here or through shortcuts created here, otherwise mods installed through MO will not be visible.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;You can add new Tools to this list, but I can&apos;t promise tools I haven&apos;t tested will work.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <translation type="unfinished"></translation>
+ <translation>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
+p, li { white-space: pre-wrap; }
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Выберете программу для запуска. Как только вы начинаете использовать ModOrganizer, вы всегда должны запускать игры и инструменты из него или через созданные в нем ярлыки, в противном случае, установленные через MO моды отображаться не будут.&lt;/span&gt;&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Вы можете добавить новые инструменты в этот список, но работоспособность их всех не гарантированна.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<location filename="mainwindow.ui" line="491"/>
<source>Run program</source>
- <translation type="unfinished"></translation>
+ <translation>Запустить программу</translation>
</message>
<message>
<location filename="mainwindow.ui" line="494"/>
@@ -1387,17 +1341,21 @@ p, li { white-space: pre-wrap; }
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Run the selected program with ModOrganizer enabled.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <translation type="unfinished"></translation>
+ <translation>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
+p, li { white-space: pre-wrap; }
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Запустить выбранную программу с поддержкой ModOrganizer.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<location filename="mainwindow.ui" line="504"/>
<source>Run</source>
- <translation type="unfinished"></translation>
+ <translation>Запустить</translation>
</message>
<message>
<location filename="mainwindow.ui" line="545"/>
<source>Create a shortcut in your start menu or on the desktop to the specified program</source>
- <translation type="unfinished"></translation>
+ <translation>Создать ярлык для выбранной программы, в меню Пуск или на рабочем столе.</translation>
</message>
<message>
<location filename="mainwindow.ui" line="548"/>
@@ -1406,21 +1364,26 @@ p, li { white-space: pre-wrap; }
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;This creates a start menu shortcut that directly starts the selected program with the MO active.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <translation type="unfinished"></translation>
+ <translation>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
+p, li { white-space: pre-wrap; }
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Создает ярлык в меню Пуск, который запускает выбранную программу с активным MO.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<location filename="mainwindow.ui" line="555"/>
<source>Shortcut</source>
- <translation type="unfinished"></translation>
+ <translation>Ярлык</translation>
</message>
<message>
- <source>Save</source>
- <translation type="obsolete">Сохранить</translation>
+ <location filename="mainwindow.ui" line="605"/>
+ <source>Plugins</source>
+ <translation type="unfinished">Плагины</translation>
</message>
<message>
<location filename="mainwindow.ui" line="669"/>
<source>List of available esp/esm files</source>
- <translation type="unfinished"></translation>
+ <translation>Список доступных esp/esm файлов</translation>
</message>
<message>
<location filename="mainwindow.ui" line="672"/>
@@ -1429,83 +1392,103 @@ p, li { white-space: pre-wrap; }
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;This list contains the esps and esms contained in the active mods. These require their own load order. Use drag&amp;amp;drop to modify this load order. Please note that MO will only save the load order for mods that are active/checked.&lt;br /&gt;There is a great tool named &amp;quot;BOSS&amp;quot; to automatically sort these files.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <translation>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
+p, li { white-space: pre-wrap; }
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Этот список содержит esp и esm файлы активных модов. Для них требуется определенный порядок загрузки. Используйте перетаскивание для изменения порядка загрузки. Обратите внимание, что MO сохранит порядок загрузки только для активными/проверенных модов.&lt;br /&gt;Существует замечательная утилита, называющаяся &amp;quot;BOSS&amp;quot; , которая автоматически сортирует эти файлы.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+ </message>
+ <message>
+ <location filename="mainwindow.ui" line="731"/>
+ <source>Sort</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="751"/>
- <source>List of available BS Archives. Archives not checked here are not managed by MO and ignore installation order.</source>
+ <location filename="mainwindow.ui" line="741"/>
+ <source>Archives</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="754"/>
+ <location filename="mainwindow.ui" line="762"/>
+ <source>List of available BS Archives. Archives not checked here are not managed by MO and ignore installation order.</source>
+ <translation>Список доступных BSA. Они не отмечены здесь, не управляются с помощью MO и игнорируют порядок установки.</translation>
+ </message>
+ <message>
+ <location filename="mainwindow.ui" line="765"/>
<source>BSA files are archives (comparable to .zip files) that contain data assets (meshes, textures, ...) to be used by the game. As such they &quot;compete&quot; with loose files in your data directory over which is loaded.
By default, BSAs that share their base name with an enabled ESP (i.e. plugin.esp and plugin.bsa) are automatically loaded and will have precedence over all loose files, the installation order you set up to the left is then ignored!
BSAs checked here are loaded in such a way that your installation order is obeyed properly.</source>
- <translation type="unfinished"></translation>
+ <translation>BSA файлы - архивы (сопоставимы с файлами .zip) которые содержат используемые игрой данные (meshes, textures, ...). Как таковые они &quot;конкурируют&quot; с отдельными файлами в папке Data, поверх которых загружены.
+По умолчанию, BSA, у которых имя совпадает с именем ESP (т.е. plugin.esp и plugin.bsa) будут автоматически загружены и будут иметь приоритет над всеми отдельными файлами и установленный вами слева порядок установки будет проигнорирован!
+
+BSA, отмеченные здесь, загружаются так, чтобы порядок установки соблюдался должным образом.</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="794"/>
- <location filename="mainwindow.ui" line="868"/>
+ <location filename="mainwindow.ui" line="811"/>
+ <location filename="mainwindow.ui" line="880"/>
<source>File</source>
<translation type="unfinished">Файл</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="799"/>
- <location filename="mainwindow.ui" line="873"/>
+ <location filename="mainwindow.ui" line="819"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Marked Archives (&lt;img src=&quot;:/MO/gui/warning_16&quot;/&gt;) are still loaded on Skyrim but the &lt;a href=&quot;http://forums.bethsoft.com/topic/1354395-update-bsas-and-you/&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;regular file override&lt;/span&gt;&lt;/a&gt; mechanism will apply: Loose files override BSAs, no matter the mod/plugin priority.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.ui" line="885"/>
<source>Mod</source>
<translation type="unfinished">Мод</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="807"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Marked Archives (&lt;img src=&quot;:/MO/gui/resources/dialog-warning_16.png&quot;/&gt;) are still loaded on Skyrim but the &lt;a href=&quot;http://forums.bethsoft.com/topic/1354395-update-bsas-and-you/&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;regular file override&lt;/span&gt;&lt;/a&gt; mechanism will apply: Loose files override BSAs, no matter the mod/plugin priority.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <translation type="unfinished"></translation>
+ <translation type="obsolete">&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Помеченые архивы (&lt;img src=&quot;:/MO/gui/resources/dialog-warning_16.png&quot;/&gt;) все еще загружаются в Skyrim, но &lt;a href=&quot;http://forums.bethsoft.com/topic/1354395-update-bsas-and-you/&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;применяется обычный&lt;/span&gt;&lt;/a&gt; механизм: Отдельные файлы перезаписывают BSAs, вне зависимости от приоритета мода/плагина.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="818"/>
+ <location filename="mainwindow.ui" line="830"/>
<source>Data</source>
- <translation type="unfinished"></translation>
+ <translation>Данные</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="836"/>
+ <location filename="mainwindow.ui" line="848"/>
<source>refresh data-directory overview</source>
- <translation type="unfinished"></translation>
+ <translation>обновить обзор каталога Data</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="839"/>
+ <location filename="mainwindow.ui" line="851"/>
<source>Refresh the overview. This may take a moment.</source>
- <translation type="unfinished"></translation>
+ <translation>Обновление обзора. Это может занять некоторое время.</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="842"/>
- <location filename="mainwindow.cpp" line="3328"/>
- <location filename="mainwindow.cpp" line="4059"/>
+ <location filename="mainwindow.ui" line="854"/>
+ <location filename="mainwindow.cpp" line="3781"/>
+ <location filename="mainwindow.cpp" line="4604"/>
<source>Refresh</source>
- <translation type="unfinished"></translation>
+ <translation>Обновить</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="858"/>
+ <location filename="mainwindow.ui" line="870"/>
<source>This is an overview of your data directory as visible to the game (and tools). </source>
- <translation type="unfinished"></translation>
+ <translation>Это обзор вашего каталога данных так, как он будет видим игре (и инструментам).</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="883"/>
- <location filename="mainwindow.ui" line="886"/>
+ <location filename="mainwindow.ui" line="895"/>
+ <location filename="mainwindow.ui" line="898"/>
<source>Filter the above list so that only conflicts are displayed.</source>
- <translation type="unfinished"></translation>
+ <translation>Отфильтровать вышеприведенный список так, чтобы отображались только конфликты.</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="889"/>
+ <location filename="mainwindow.ui" line="901"/>
<source>Show only conflicts</source>
- <translation type="unfinished"></translation>
+ <translation>Показать только конфликты</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="897"/>
+ <location filename="mainwindow.ui" line="909"/>
<source>Saves</source>
- <translation type="unfinished"></translation>
+ <translation>Сохранения</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="921"/>
+ <location filename="mainwindow.ui" line="933"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
@@ -1513,974 +1496,1140 @@ p, li { white-space: pre-wrap; }
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;This is a list of all savegames for this game. Hover over a list entry to get detailed information about the save including a list of esps/esms that were used at the time this save was created but aren&apos;t active now.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;&quot;&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;If you click &amp;quot;Fix Mods...&amp;quot; in the context menu, MO will try to activate all mods and esps to fix those missing esps. It will not disable anything!&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <translation type="unfinished"></translation>
+ <translation>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
+p, li { white-space: pre-wrap; }
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Список всех сохранений игры. Наведите указатель мыши на элемент списка, чтобы получить подробную информацию о сохранении, включающем список esp/esm, которые использовались во время создания сохранения, но не активны в настоящее время.&lt;/span&gt;&lt;/p&gt;
+&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;&quot;&gt;&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Если вы выберете в контекстном меню пункт &amp;quot;Исправить моды...&amp;quot;, MO попытается подключить все моды и esp, чтобы исправить эти отсутствующие esp. Это ничего не отключит!&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="935"/>
+ <location filename="mainwindow.ui" line="947"/>
<source>Downloads</source>
- <translation type="unfinished"></translation>
+ <translation>Загрузки</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="967"/>
+ <location filename="mainwindow.ui" line="979"/>
<source>This is a list of mods you downloaded from Nexus. Double click one to install it.</source>
- <translation type="unfinished"></translation>
+ <translation>Список модов, загруженных с Nexus. Двойной клик для установки.</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1020"/>
+ <location filename="mainwindow.ui" line="1032"/>
<source>Compact</source>
+ <translation>Упаковать</translation>
+ </message>
+ <message>
+ <location filename="mainwindow.ui" line="1039"/>
+ <source>Show Hidden</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1051"/>
+ <location filename="mainwindow.ui" line="1070"/>
<source>Tool Bar</source>
- <translation type="unfinished"></translation>
+ <translation>Панель инструментов</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1093"/>
+ <location filename="mainwindow.ui" line="1112"/>
<source>Install Mod</source>
- <translation type="unfinished"></translation>
+ <translation>Установить мод</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1096"/>
+ <location filename="mainwindow.ui" line="1115"/>
<source>Install &amp;Mod</source>
- <translation type="unfinished"></translation>
+ <translation>Установить &amp;мод</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1099"/>
+ <location filename="mainwindow.ui" line="1118"/>
<source>Install a new mod from an archive</source>
- <translation type="unfinished"></translation>
+ <translation>Установить новый мод из архива</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1102"/>
+ <location filename="mainwindow.ui" line="1121"/>
<source>Ctrl+M</source>
- <translation type="unfinished"></translation>
+ <translation>Ctrl+M</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1111"/>
+ <location filename="mainwindow.ui" line="1130"/>
<source>Profiles</source>
- <translation type="unfinished"></translation>
+ <translation>Профили</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1114"/>
+ <location filename="mainwindow.ui" line="1133"/>
<source>&amp;Profiles</source>
- <translation type="unfinished"></translation>
+ <translation>&amp;Профили</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1117"/>
+ <location filename="mainwindow.ui" line="1136"/>
<source>Configure Profiles</source>
- <translation type="unfinished"></translation>
+ <translation>Настройка профилей</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1120"/>
+ <location filename="mainwindow.ui" line="1139"/>
<source>Ctrl+P</source>
- <translation type="unfinished"></translation>
+ <translation>Ctrl+P</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1129"/>
+ <location filename="mainwindow.ui" line="1148"/>
<source>Executables</source>
- <translation type="unfinished"></translation>
+ <translation>Программы</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1132"/>
+ <location filename="mainwindow.ui" line="1151"/>
<source>&amp;Executables</source>
- <translation type="unfinished"></translation>
+ <translation>&amp;Программы</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1135"/>
+ <location filename="mainwindow.ui" line="1154"/>
<source>Configure the executables that can be started through Mod Organizer</source>
- <translation type="unfinished"></translation>
+ <translation>Настройка программ, которые могут быть запущены через Mod Organizer</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1138"/>
+ <location filename="mainwindow.ui" line="1157"/>
<source>Ctrl+E</source>
- <translation type="unfinished"></translation>
+ <translation>Ctrl+E</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1147"/>
- <location filename="mainwindow.ui" line="1153"/>
+ <location filename="mainwindow.ui" line="1166"/>
+ <location filename="mainwindow.ui" line="1172"/>
<source>Tools</source>
- <translation type="unfinished"></translation>
+ <translation>Инструменты</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1150"/>
+ <location filename="mainwindow.ui" line="1169"/>
<source>&amp;Tools</source>
- <translation type="unfinished"></translation>
+ <translation>&amp;Инструменты</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1156"/>
+ <location filename="mainwindow.ui" line="1175"/>
<source>Ctrl+I</source>
- <translation type="unfinished"></translation>
+ <translation>Ctrl+I</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1165"/>
+ <location filename="mainwindow.ui" line="1184"/>
<source>Settings</source>
- <translation type="unfinished"></translation>
+ <translation>Настройки</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1168"/>
+ <location filename="mainwindow.ui" line="1187"/>
<source>&amp;Settings</source>
- <translation type="unfinished"></translation>
+ <translation>&amp;Настройки</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1171"/>
+ <location filename="mainwindow.ui" line="1190"/>
<source>Configure settings and workarounds</source>
- <translation type="unfinished"></translation>
+ <translation>Настройка параметров и способов обхода</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1174"/>
+ <location filename="mainwindow.ui" line="1193"/>
<source>Ctrl+S</source>
- <translation type="unfinished"></translation>
+ <translation>Ctrl+S</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1183"/>
+ <location filename="mainwindow.ui" line="1202"/>
<source>Nexus</source>
- <translation type="unfinished"></translation>
+ <translation>Nexus</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1186"/>
+ <location filename="mainwindow.ui" line="1205"/>
<source>Search nexus network for more mods</source>
- <translation type="unfinished"></translation>
+ <translation>Поиск дополнительных модов на Nexus</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1189"/>
+ <location filename="mainwindow.ui" line="1208"/>
<source>Ctrl+N</source>
- <translation type="unfinished"></translation>
+ <translation>Ctrl+N</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1201"/>
- <location filename="mainwindow.cpp" line="4007"/>
+ <location filename="mainwindow.ui" line="1220"/>
+ <location filename="mainwindow.cpp" line="4545"/>
<source>Update</source>
- <translation type="unfinished"></translation>
+ <translation>Обновление</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1204"/>
+ <location filename="mainwindow.ui" line="1223"/>
<source>Mod Organizer is up-to-date</source>
- <translation type="unfinished"></translation>
+ <translation>Mod Organizer обновлен</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1216"/>
- <location filename="mainwindow.cpp" line="478"/>
+ <location filename="mainwindow.ui" line="1235"/>
+ <location filename="mainwindow.cpp" line="509"/>
<source>No Problems</source>
- <translation type="unfinished"></translation>
+ <translation>Проблем не обнаружено</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1219"/>
+ <location filename="mainwindow.ui" line="1238"/>
<source>This button will be highlighted if MO discovered potential problems in your setup and provide tips on how to fix them.
!Work in progress!
Right now this has very limited functionality</source>
- <translation type="unfinished"></translation>
+ <translation>Эта кнопка будет подсвечена, если MO обнарул возможные проблемы в вашей установке и имеются советы по их исправлению.
+
+!В разработке!
+Прямо сейчас этот функционал сильно ограничен</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1231"/>
- <location filename="mainwindow.ui" line="1234"/>
+ <location filename="mainwindow.ui" line="1250"/>
+ <location filename="mainwindow.ui" line="1253"/>
<source>Help</source>
- <translation type="unfinished"></translation>
+ <translation>Справка</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1237"/>
+ <location filename="mainwindow.ui" line="1256"/>
<source>Ctrl+H</source>
- <translation type="unfinished"></translation>
+ <translation>Ctrl+H</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1246"/>
+ <location filename="mainwindow.ui" line="1265"/>
<source>Endorse MO</source>
- <translation type="unfinished"></translation>
+ <translation>Одобрить MO</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1249"/>
- <location filename="mainwindow.cpp" line="4087"/>
+ <location filename="mainwindow.ui" line="1268"/>
+ <location filename="mainwindow.cpp" line="4633"/>
<source>Endorse Mod Organizer</source>
- <translation type="unfinished"></translation>
+ <translation>Одобрить Mod Organizer</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="204"/>
+ <location filename="mainwindow.cpp" line="223"/>
<source>Toolbar</source>
- <translation type="unfinished"></translation>
+ <translation>Панель инструментов</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="205"/>
+ <location filename="mainwindow.cpp" line="224"/>
<source>Desktop</source>
- <translation type="unfinished"></translation>
+ <translation>Рабочий стол</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="206"/>
+ <location filename="mainwindow.cpp" line="225"/>
<source>Start Menu</source>
- <translation type="unfinished"></translation>
+ <translation>Меню Пуск</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="475"/>
+ <location filename="mainwindow.cpp" line="505"/>
<source>Problems</source>
- <translation type="unfinished"></translation>
+ <translation>Проблемы</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="476"/>
+ <location filename="mainwindow.cpp" line="506"/>
<source>There are potential problems with your setup</source>
- <translation type="unfinished"></translation>
+ <translation>Есть возможные проблемы с вашей установкой</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="479"/>
+ <location filename="mainwindow.cpp" line="510"/>
<source>Everything seems to be in order</source>
- <translation type="unfinished"></translation>
+ <translation>Кажется всё в порядке</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="531"/>
+ <location filename="mainwindow.cpp" line="568"/>
<source>Help on UI</source>
- <translation type="unfinished"></translation>
+ <translation>Справка по интерфейсу</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="535"/>
+ <location filename="mainwindow.cpp" line="572"/>
<source>Documentation Wiki</source>
- <translation type="unfinished"></translation>
+ <translation>Wiki-документация</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="539"/>
+ <location filename="mainwindow.cpp" line="576"/>
<source>Report Issue</source>
- <translation type="unfinished"></translation>
+ <translation>Сообщить о проблеме</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="543"/>
+ <location filename="mainwindow.cpp" line="580"/>
<source>Tutorials</source>
+ <translation>Уроки</translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="619"/>
+ <source>About</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="670"/>
- <source>failed to save load order: %1</source>
+ <location filename="mainwindow.cpp" line="620"/>
+ <source>About Qt</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="600"/>
<source>failed to save archives order, do you have write access to &quot;%1&quot;?</source>
- <translation type="unfinished"></translation>
+ <translation type="obsolete">не удалось сохранить порядок архивов, у вас имеется доступ на запись к &quot;%1&quot;?</translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="705"/>
+ <source>failed to save load order: %1</source>
+ <translation>не удалось сохранить порядок загрузки: %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="687"/>
+ <location filename="mainwindow.cpp" line="717"/>
<source>Name</source>
<translation type="unfinished">Имя</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="688"/>
+ <location filename="mainwindow.cpp" line="718"/>
<source>Please enter a name for the new profile</source>
- <translation type="unfinished"></translation>
+ <translation>Введите имя нового профиля</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="696"/>
+ <location filename="mainwindow.cpp" line="726"/>
<source>failed to create profile: %1</source>
- <translation type="unfinished"></translation>
+ <translation>не удалось создать профиль: %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="739"/>
+ <location filename="mainwindow.cpp" line="769"/>
<source>Show tutorial?</source>
- <translation type="unfinished"></translation>
+ <translation>Показать урок?</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="740"/>
+ <location filename="mainwindow.cpp" line="770"/>
<source>You are starting Mod Organizer for the first time. Do you want to show a tutorial of its basic features? If you choose no you can always start the tutorial from the &quot;Help&quot;-menu.</source>
- <translation type="unfinished"></translation>
+ <translation>Вы запустили Mod Organizer впервые. Вы хотите просмотреть уроки по основным возможностям? В случае отказа вы всегда можете открыть уроки из меню &quot;Помощь&quot;.</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="769"/>
+ <location filename="mainwindow.cpp" line="801"/>
<source>Downloads in progress</source>
- <translation type="unfinished"></translation>
+ <translation>Загрузки в процессе</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="770"/>
+ <location filename="mainwindow.cpp" line="802"/>
<source>There are still downloads in progress, do you really want to quit?</source>
- <translation type="unfinished"></translation>
+ <translation>Загрузки всё ещё в процессе, вы правда хотите выйти?</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="816"/>
+ <location filename="mainwindow.cpp" line="848"/>
<source>failed to read savegame: %1</source>
- <translation type="unfinished"></translation>
+ <translation>не удалось прочесть сохранение: %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="941"/>
+ <location filename="mainwindow.cpp" line="972"/>
<source>Plugin &quot;%1&quot; failed: %2</source>
+ <translation>Плагин &quot;%1&quot; не удалось: %2</translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="974"/>
+ <source>Plugin &quot;%1&quot; failed</source>
+ <translation>Плагин &quot;%1&quot; не удалось</translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="1047"/>
+ <source>failed to init plugin %1: %2</source>
+ <translation>не удалось инициализировать плагин %1: %2</translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="1085"/>
+ <source>Plugin error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1183"/>
- <source>Failed to start &quot;%1&quot;</source>
+ <location filename="mainwindow.cpp" line="1086"/>
+ <source>It appears the plugin &quot;%1&quot; failed to load last startup and caused MO to crash. Do you want to disable it?
+(Please note: If this is the first time you see this message for this plugin you may want to give it another try. The plugin may be able to recover from the problem)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1185"/>
+ <location filename="mainwindow.cpp" line="1270"/>
+ <source>Failed to start &quot;%1&quot;</source>
+ <translation>Не удалось запустить &quot;%1&quot;</translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="1272"/>
<source>Waiting</source>
- <translation type="unfinished"></translation>
+ <translation>Ожидание</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1185"/>
+ <location filename="mainwindow.cpp" line="1272"/>
<source>Please press OK once you&apos;re logged into steam.</source>
- <translation type="unfinished"></translation>
+ <translation>Нажмите OK как только вы войдете в Steam.</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1197"/>
<source>&quot;%1&quot; not found</source>
- <translation type="unfinished"></translation>
+ <translation type="obsolete">&quot;%1&quot; не найден</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1211"/>
+ <location filename="mainwindow.cpp" line="1298"/>
<source>Start Steam?</source>
- <translation type="unfinished"></translation>
+ <translation>Запустить Steam?</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1212"/>
+ <location filename="mainwindow.cpp" line="1299"/>
<source>Steam is required to be running already to correctly start the game. Should MO try to start steam now?</source>
- <translation type="unfinished"></translation>
+ <translation>Требуется запущенный Steam, для корректного запуска игры. Должен ли MO попытаться запустить Steam сейчас?</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1426"/>
+ <location filename="mainwindow.cpp" line="1526"/>
<source>Also in: &lt;br&gt;</source>
- <translation type="unfinished"></translation>
+ <translation>Также в: &lt;br&gt;</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1437"/>
+ <location filename="mainwindow.cpp" line="1537"/>
<source>No conflict</source>
- <translation type="unfinished"></translation>
+ <translation>Конфликтов нет</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1552"/>
+ <location filename="mainwindow.cpp" line="1692"/>
<source>&lt;Edit...&gt;</source>
- <translation type="unfinished"></translation>
+ <translation>&lt;Правка...&gt;</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1771"/>
+ <location filename="mainwindow.cpp" line="1929"/>
<source>This bsa is enabled in the ini file so it may be required!</source>
- <translation type="unfinished"></translation>
+ <translation>Этот bsa подключен через ini, так что он может быть необходим!</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1778"/>
+ <location filename="mainwindow.cpp" line="1936"/>
<source>This archive will still be loaded since there is a plugin of the same name but its files will not follow installation order!</source>
- <translation type="unfinished"></translation>
+ <translation>Этот архив все равно будет загружен, так как есть плагин с одноименным названием, но его файлы не будут следовать порядку установки!</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1833"/>
+ <location filename="mainwindow.cpp" line="1991"/>
<source>Activating Network Proxy</source>
- <translation type="unfinished"></translation>
+ <translation>Подключение сетевого прокси</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1962"/>
- <location filename="mainwindow.cpp" line="3755"/>
+ <location filename="mainwindow.cpp" line="2122"/>
+ <location filename="mainwindow.cpp" line="4248"/>
<source>Installation successful</source>
- <translation type="unfinished"></translation>
+ <translation>Установка завершена</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1973"/>
- <location filename="mainwindow.cpp" line="3768"/>
+ <location filename="mainwindow.cpp" line="2133"/>
+ <location filename="mainwindow.cpp" line="4261"/>
<source>Configure Mod</source>
- <translation type="unfinished"></translation>
+ <translation>Настройка мода</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1974"/>
- <location filename="mainwindow.cpp" line="3769"/>
+ <location filename="mainwindow.cpp" line="2134"/>
+ <location filename="mainwindow.cpp" line="4262"/>
<source>This mod contains ini tweaks. Do you want to configure them now?</source>
- <translation type="unfinished"></translation>
+ <translation>Этот мод включает настройки ini. Вы хотите настроить их сейчас?</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1980"/>
- <location filename="mainwindow.cpp" line="3775"/>
+ <location filename="mainwindow.cpp" line="2140"/>
+ <location filename="mainwindow.cpp" line="4268"/>
<source>mod &quot;%1&quot; not found</source>
- <translation type="unfinished"></translation>
+ <translation>мод &quot;%1&quot; не найден</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1983"/>
- <location filename="mainwindow.cpp" line="3781"/>
+ <location filename="mainwindow.cpp" line="2143"/>
+ <location filename="mainwindow.cpp" line="4274"/>
<source>Installation cancelled</source>
- <translation type="unfinished"></translation>
+ <translation>Установка отменена</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1983"/>
- <location filename="mainwindow.cpp" line="3781"/>
+ <location filename="mainwindow.cpp" line="2143"/>
+ <location filename="mainwindow.cpp" line="4274"/>
<source>The mod was not installed completely.</source>
- <translation type="unfinished"></translation>
+ <translation>Мод не был установлен полностью.</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2018"/>
+ <location filename="mainwindow.cpp" line="2292"/>
<source>Some plugins could not be loaded</source>
- <translation type="unfinished"></translation>
+ <translation>Некоторые плагины не могут быть загружены</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2030"/>
<source>The following Plugins could not be loaded. The reason may be missing dependencies (i.e. python) or an outdated version:&lt;ul&gt;</source>
+ <translation type="obsolete">Следующие плагины не могут быть загружены. Причина может быть в отсутствующих зависимостях (таких как python) или в устаревшей версии:&lt;ul&gt;</translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="2295"/>
+ <source>Too many esps and esms enabled</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2060"/>
- <source>Choose Mod</source>
+ <location filename="mainwindow.cpp" line="2298"/>
+ <location filename="mainwindow.cpp" line="2319"/>
+ <source>Description missing</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2061"/>
- <source>Mod Archive</source>
+ <location filename="mainwindow.cpp" line="2307"/>
+ <source>The following plugins could not be loaded. The reason may be missing dependencies (i.e. python) or an outdated version:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2214"/>
+ <location filename="mainwindow.cpp" line="2341"/>
+ <source>Choose Mod</source>
+ <translation>Выберете мод</translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="2342"/>
+ <source>Mod Archive</source>
+ <translation>Архив мода</translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="2495"/>
<source>Start Tutorial?</source>
- <translation type="unfinished"></translation>
+ <translation>Начать обучение?</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2215"/>
+ <location filename="mainwindow.cpp" line="2496"/>
<source>You&apos;re about to start a tutorial. For technical reasons it&apos;s not possible to end the tutorial early. Continue?</source>
- <translation type="unfinished"></translation>
+ <translation>Вы собираетесь открыть обучение. По техническим причинам будет невозможно досрочно закончить обучение. Продолжить?</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2360"/>
- <location filename="mainwindow.cpp" line="3683"/>
+ <location filename="mainwindow.cpp" line="2651"/>
+ <location filename="mainwindow.cpp" line="4171"/>
<source>Download started</source>
- <translation type="unfinished"></translation>
+ <translation>Загрузка начата</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2391"/>
+ <location filename="mainwindow.cpp" line="2682"/>
<source>failed to update mod list: %1</source>
- <translation type="unfinished"></translation>
+ <translation>не удалось обновить список модов: %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2418"/>
+ <location filename="mainwindow.cpp" line="2711"/>
<source>failed to spawn notepad.exe: %1</source>
- <translation type="unfinished"></translation>
+ <translation>не удалось вызвать notepad.exe: %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2459"/>
+ <location filename="mainwindow.cpp" line="2752"/>
<source>failed to open %1</source>
- <translation type="unfinished"></translation>
+ <translation>не удалось открыть %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2537"/>
+ <location filename="mainwindow.cpp" line="2830"/>
<source>failed to change origin name: %1</source>
- <translation type="unfinished"></translation>
+ <translation>не удалось изменить оригинальное имя: %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2676"/>
- <source>Multiple esps activated, please check that they don&apos;t conflict.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="3005"/>
- <location filename="mainwindow.cpp" line="3339"/>
- <source>Create Mod...</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="3006"/>
- <source>This will move all files from overwrite into a new, regular mod.
-Please enter a name: </source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="3015"/>
- <source>A mod with this name already exists</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="3410"/>
- <source>&lt;All&gt;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="2589"/>
+ <location filename="mainwindow.cpp" line="2909"/>
<source>&lt;Checked&gt;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="943"/>
- <source>Plugin &quot;%1&quot; failed</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="1007"/>
- <source>failed to init plugin %1: %2</source>
- <translation type="unfinished"></translation>
+ <translation>&lt;Подключен&gt;</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2021"/>
- <location filename="mainwindow.cpp" line="2038"/>
- <source>Description missing</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="2590"/>
+ <location filename="mainwindow.cpp" line="2910"/>
<source>&lt;Unchecked&gt;</source>
- <translation type="unfinished"></translation>
+ <translation>&lt;Отключен&gt;</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2591"/>
+ <location filename="mainwindow.cpp" line="2911"/>
<source>&lt;Update&gt;</source>
- <translation type="unfinished"></translation>
+ <translation>&lt;Обновлен&gt;</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2592"/>
+ <location filename="mainwindow.cpp" line="2912"/>
<source>&lt;No category&gt;</source>
- <translation type="unfinished"></translation>
+ <translation>&lt;Без категории&gt;</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2593"/>
+ <location filename="mainwindow.cpp" line="2913"/>
<source>&lt;Conflicted&gt;</source>
+ <translation>&lt;Конфликтует&gt;</translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="2914"/>
+ <source>&lt;Not Endorsed&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2626"/>
+ <location filename="mainwindow.cpp" line="2947"/>
<source>failed to rename mod: %1</source>
- <translation type="unfinished"></translation>
+ <translation>не удалось переименовать мод: %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2639"/>
+ <location filename="mainwindow.cpp" line="2960"/>
<source>Overwrite?</source>
- <translation type="unfinished"></translation>
+ <translation>Перезаписать?</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2640"/>
+ <location filename="mainwindow.cpp" line="2961"/>
<source>This will replace the existing mod &quot;%1&quot;. Continue?</source>
- <translation type="unfinished"></translation>
+ <translation>Это заменит существующий мод &quot;%1&quot;. Продолжить?</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2643"/>
+ <location filename="mainwindow.cpp" line="2964"/>
<source>failed to remove mod &quot;%1&quot;</source>
- <translation type="unfinished"></translation>
+ <translation>не удалось удалить мод &quot;%1&quot;</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2647"/>
- <location filename="mainwindow.cpp" line="3953"/>
- <location filename="mainwindow.cpp" line="3977"/>
+ <location filename="mainwindow.cpp" line="2968"/>
+ <location filename="mainwindow.cpp" line="4446"/>
+ <location filename="mainwindow.cpp" line="4470"/>
<source>failed to rename &quot;%1&quot; to &quot;%2&quot;</source>
- <translation type="unfinished">Не удалось переименовать &quot;%1&quot; в &quot;%2&quot;</translation>
+ <translation>не удалось переименовать &quot;%1&quot; в &quot;%2&quot;</translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="2997"/>
+ <source>Multiple esps activated, please check that they don&apos;t conflict.</source>
+ <translation>Подключено несколько esp, выберете из них не конфликтующие.</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2702"/>
- <location filename="mainwindow.cpp" line="3243"/>
- <location filename="mainwindow.cpp" line="3252"/>
+ <location filename="mainwindow.cpp" line="3024"/>
+ <location filename="mainwindow.cpp" line="3687"/>
+ <location filename="mainwindow.cpp" line="3695"/>
+ <location filename="mainwindow.cpp" line="3902"/>
<source>Confirm</source>
- <translation type="unfinished">Подтвердить</translation>
+ <translation>Подтверждение</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2703"/>
+ <location filename="mainwindow.cpp" line="3025"/>
<source>Remove the following mods?&lt;br&gt;&lt;ul&gt;%1&lt;/ul&gt;</source>
- <translation type="unfinished"></translation>
+ <translation>Удалить следующие моды?&lt;br&gt;&lt;ul&gt;%1&lt;/ul&gt;</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2714"/>
+ <location filename="mainwindow.cpp" line="3036"/>
<source>failed to remove mod: %1</source>
- <translation type="unfinished"></translation>
+ <translation>не удалось удалить мод: %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2744"/>
- <location filename="mainwindow.cpp" line="2747"/>
+ <location filename="mainwindow.cpp" line="3071"/>
+ <location filename="mainwindow.cpp" line="3074"/>
<source>Failed</source>
- <translation type="unfinished"></translation>
+ <translation>Неудача</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2744"/>
+ <location filename="mainwindow.cpp" line="3071"/>
<source>Installation file no longer exists</source>
- <translation type="unfinished"></translation>
+ <translation>Установочный файл больше не существует</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2748"/>
+ <location filename="mainwindow.cpp" line="3075"/>
<source>Mods installed with old versions of MO can&apos;t be reinstalled in this way.</source>
- <translation type="unfinished"></translation>
+ <translation>Моды, установленные с использованием старых версий MO не могут быть перестановленны таким образом.</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2763"/>
- <location filename="mainwindow.cpp" line="2790"/>
+ <location filename="mainwindow.cpp" line="3090"/>
+ <location filename="mainwindow.cpp" line="3117"/>
<source>You need to be logged in with Nexus to endorse</source>
- <translation type="unfinished"></translation>
+ <translation>Вы должны быть авторизированы на Nexus, чтобы одобрять.</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2906"/>
- <location filename="mainwindow.cpp" line="4335"/>
+ <location filename="mainwindow.cpp" line="3249"/>
+ <location filename="mainwindow.cpp" line="4882"/>
<source>Extract BSA</source>
- <translation type="unfinished"></translation>
+ <translation>Извлечь BSA</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2907"/>
+ <location filename="mainwindow.cpp" line="3250"/>
<source>This mod contains at least one BSA. Do you want to unpack it?
(This removes the BSA after completion. If you don&apos;t know about BSAs, just select no)</source>
- <translation type="unfinished"></translation>
+ <translation>Этот мод включает как минимум один BSA. Вы хотите распаковать их?
+(Это удалит BSA после завершения. Если вы не знаете ничего о BSAs, просто откажитесь)</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2917"/>
- <location filename="mainwindow.cpp" line="4292"/>
- <location filename="mainwindow.cpp" line="4343"/>
+ <location filename="mainwindow.cpp" line="3259"/>
+ <location filename="mainwindow.cpp" line="4839"/>
+ <location filename="mainwindow.cpp" line="4890"/>
<source>failed to read %1: %2</source>
- <translation type="unfinished">Не удалось прочитать %1: %2</translation>
+ <translation>не удалось прочесть %1: %2</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2930"/>
- <location filename="mainwindow.cpp" line="4354"/>
+ <location filename="mainwindow.cpp" line="3272"/>
+ <location filename="mainwindow.cpp" line="4901"/>
<source>This archive contains invalid hashes. Some files may be broken.</source>
- <translation type="unfinished"></translation>
+ <translation>Архив содержит неверные хеши. Некоторые файлы могут быть испорчены.</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2964"/>
+ <location filename="mainwindow.cpp" line="3306"/>
<source>Nexus ID for this Mod is unknown</source>
+ <translation>Nexus ID для этого мода неизвестен</translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="3345"/>
+ <location filename="mainwindow.cpp" line="3792"/>
+ <source>Create Mod...</source>
+ <translation>Создать мод...</translation>
+ </message>
+ <message>
+ <source>This will move all files from overwrite into a new, regular mod.
+Please enter a name: </source>
+ <translation type="obsolete">Это переместит все файлы от перезаписи в новый, отдельный мод.
+Пожалуйста, введите имя: </translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="3355"/>
+ <source>A mod with this name already exists</source>
+ <translation>Мод с таким именем уже существует</translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="3613"/>
+ <source>Continue?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3243"/>
- <source>Really enable all visible mods?</source>
+ <location filename="mainwindow.cpp" line="3614"/>
+ <source>The versioning scheme decides which version is considered newer than another.
+This function will guess the versioning scheme under the assumption that the installed version is outdated.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3252"/>
- <source>Really disable all visible mods?</source>
+ <location filename="mainwindow.cpp" line="3634"/>
+ <location filename="mainwindow.cpp" line="4516"/>
+ <source>Sorry</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3261"/>
- <source>Choose what to export</source>
+ <location filename="mainwindow.cpp" line="3635"/>
+ <source>I don&apos;t know a versioning scheme where %1 is newer than %2.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3263"/>
+ <location filename="mainwindow.cpp" line="3687"/>
+ <source>Really enable all visible mods?</source>
+ <translation>Действительно подключить все видимые моды?</translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="3695"/>
+ <source>Really disable all visible mods?</source>
+ <translation>Действительно отключить все видимые моды?</translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="3703"/>
+ <source>Choose what to export</source>
+ <translation>Выберете, что экспортировать</translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="3705"/>
<source>Everything</source>
- <translation type="unfinished"></translation>
+ <translation>Всё</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3263"/>
+ <location filename="mainwindow.cpp" line="3705"/>
<source>All installed mods are included in the list</source>
- <translation type="unfinished"></translation>
+ <translation>Все установленные моды, включенные в список</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3264"/>
+ <location filename="mainwindow.cpp" line="3706"/>
<source>Active Mods</source>
- <translation type="unfinished"></translation>
+ <translation>Активные моды</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3264"/>
+ <location filename="mainwindow.cpp" line="3706"/>
<source>Only active (checked) mods from your current profile are included</source>
- <translation type="unfinished"></translation>
+ <translation>Включены все активные (подключенные) моды вашего текущего профиля</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3265"/>
+ <location filename="mainwindow.cpp" line="3707"/>
<source>Visible</source>
- <translation type="unfinished"></translation>
+ <translation>Видимые</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3265"/>
+ <location filename="mainwindow.cpp" line="3707"/>
<source>All mods visible in the mod list are included</source>
- <translation type="unfinished"></translation>
+ <translation>Включены все моды, видимые в списке модов</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3308"/>
+ <location filename="mainwindow.cpp" line="3750"/>
<source>export failed: %1</source>
- <translation type="unfinished"></translation>
+ <translation>экспорт не удался: %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3321"/>
+ <location filename="mainwindow.cpp" line="3774"/>
<source>Install Mod...</source>
- <translation type="unfinished"></translation>
+ <translation>Установить мод...</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3323"/>
+ <location filename="mainwindow.cpp" line="3776"/>
<source>Enable all visible</source>
- <translation type="unfinished"></translation>
+ <translation>Включить все видимые</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3324"/>
+ <location filename="mainwindow.cpp" line="3777"/>
<source>Disable all visible</source>
- <translation type="unfinished"></translation>
+ <translation>Отключить все видимые</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3326"/>
+ <location filename="mainwindow.cpp" line="3779"/>
<source>Check all for update</source>
- <translation type="unfinished"></translation>
+ <translation>Проверить все на обновления</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3330"/>
+ <location filename="mainwindow.cpp" line="3783"/>
<source>Export to csv...</source>
- <translation type="unfinished"></translation>
+ <translation>Экспорт в csv...</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3338"/>
+ <location filename="mainwindow.cpp" line="3791"/>
<source>Sync to Mods...</source>
- <translation type="unfinished"></translation>
+ <translation>Синхронизировать с модами...</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3342"/>
+ <location filename="mainwindow.cpp" line="3795"/>
<source>Restore Backup</source>
- <translation type="unfinished"></translation>
+ <translation>Восстановить из резервной копии</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3343"/>
+ <location filename="mainwindow.cpp" line="3796"/>
<source>Remove Backup...</source>
- <translation type="unfinished"></translation>
+ <translation>Удалить резервную копию...</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3345"/>
<source>Set Category</source>
+ <translation type="obsolete">Задать категорию</translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="1284"/>
+ <source>Executable &quot;%1&quot; not found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="1789"/>
+ <source>Failed to refresh list of esps: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="2315"/>
+ <source>The game doesn&apos;t allow more than 255 active plugins (including the official ones) to be loaded. You have to disable some unused plugins or merge some plugins into one. You can find a guide here: &lt;a href=&quot;http://wiki.step-project.com/Guide:Merging_Plugins&quot;&gt;http://wiki.step-project.com/Guide:Merging_Plugins&lt;/a&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="2860"/>
+ <source>failed to move &quot;%1&quot; from mod &quot;%2&quot; to &quot;%3&quot;: %4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="3346"/>
+ <source>This will move all files from overwrite into a new, regular mod.
+Please enter a name:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="3798"/>
+ <source>Add/Remove Categories</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="3803"/>
+ <source>Replace Categories</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3349"/>
+ <location filename="mainwindow.cpp" line="3808"/>
<source>Primary Category</source>
+ <translation>Основная категория</translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="3815"/>
+ <source>Change versioning scheme</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3353"/>
- <source>Rename Mod...</source>
+ <location filename="mainwindow.cpp" line="3819"/>
+ <source>Un-ignore update</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3354"/>
- <source>Remove Mod...</source>
+ <location filename="mainwindow.cpp" line="3821"/>
+ <source>Ignore update</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3355"/>
+ <location filename="mainwindow.cpp" line="3826"/>
+ <source>Rename Mod...</source>
+ <translation>Переименовать мод...</translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="3827"/>
+ <source>Remove Mod...</source>
+ <translation>Удалить мод...</translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="3828"/>
<source>Reinstall Mod</source>
- <translation type="unfinished"></translation>
+ <translation>Переустановить мод</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3358"/>
+ <location filename="mainwindow.cpp" line="3831"/>
<source>Un-Endorse</source>
- <translation type="unfinished"></translation>
+ <translation>Отменить одобрение</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3361"/>
- <location filename="mainwindow.cpp" line="3365"/>
+ <location filename="mainwindow.cpp" line="3834"/>
+ <location filename="mainwindow.cpp" line="3838"/>
<source>Endorse</source>
- <translation type="unfinished"></translation>
+ <translation>Одобрить</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3362"/>
+ <location filename="mainwindow.cpp" line="3835"/>
<source>Won&apos;t endorse</source>
- <translation type="unfinished"></translation>
+ <translation>Не одобрять</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3368"/>
+ <location filename="mainwindow.cpp" line="3841"/>
<source>Endorsement state unknown</source>
- <translation type="unfinished"></translation>
+ <translation>Статус одобрения неизвестен</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3375"/>
+ <location filename="mainwindow.cpp" line="3848"/>
<source>Ignore missing data</source>
- <translation type="unfinished"></translation>
+ <translation>Игнорировать отсутствующие данные</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3378"/>
+ <location filename="mainwindow.cpp" line="3851"/>
<source>Visit on Nexus</source>
- <translation type="unfinished"></translation>
+ <translation>Перейти на Nexus</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3379"/>
+ <location filename="mainwindow.cpp" line="3852"/>
<source>Open in explorer</source>
- <translation type="unfinished"></translation>
+ <translation>Открыть в проводнике</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3382"/>
+ <location filename="mainwindow.cpp" line="3855"/>
<source>Information...</source>
- <translation type="unfinished"></translation>
+ <translation>Информация...</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3388"/>
- <location filename="mainwindow.cpp" line="4514"/>
+ <location filename="mainwindow.cpp" line="3861"/>
+ <location filename="mainwindow.cpp" line="5086"/>
<source>Exception: </source>
- <translation type="unfinished"></translation>
+ <translation>Исключение: </translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3390"/>
- <location filename="mainwindow.cpp" line="4516"/>
+ <location filename="mainwindow.cpp" line="3863"/>
+ <location filename="mainwindow.cpp" line="5088"/>
<source>Unknown exception</source>
- <translation type="unfinished"></translation>
+ <translation>Неизвестное исключение</translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="3883"/>
+ <source>&lt;All&gt;</source>
+ <translation>&lt;Все&gt;</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3412"/>
+ <location filename="mainwindow.cpp" line="3885"/>
<source>&lt;Multiple&gt;</source>
+ <translation>&lt;Несколько&gt;</translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="3902"/>
+ <source>Really delete &quot;%1&quot;?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3524"/>
+ <location filename="mainwindow.cpp" line="4013"/>
<source>Fix Mods...</source>
- <translation type="unfinished"></translation>
+ <translation>Исправить моды...</translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="4014"/>
+ <source>Delete</source>
+ <translation type="unfinished">Удалить</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3548"/>
- <location filename="mainwindow.cpp" line="3579"/>
+ <location filename="mainwindow.cpp" line="4038"/>
+ <location filename="mainwindow.cpp" line="4069"/>
<source>failed to remove %1</source>
- <translation type="unfinished"></translation>
+ <translation>не удалось удалить %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3563"/>
- <location filename="mainwindow.cpp" line="3594"/>
+ <location filename="mainwindow.cpp" line="4053"/>
+ <location filename="mainwindow.cpp" line="4084"/>
<source>failed to create %1</source>
- <translation type="unfinished"></translation>
+ <translation>не удалось создать %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3615"/>
+ <location filename="mainwindow.cpp" line="4107"/>
<source>Can&apos;t change download directory while downloads are in progress!</source>
- <translation type="unfinished"></translation>
+ <translation>Нельзя изменить каталог для загрузок, когда загрузки ещё не завершены!</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3686"/>
+ <location filename="mainwindow.cpp" line="4174"/>
<source>Download failed</source>
- <translation type="unfinished"></translation>
+ <translation>Загрузка не удалась</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3830"/>
+ <location filename="mainwindow.cpp" line="4323"/>
<source>failed to write to file %1</source>
- <translation type="unfinished"></translation>
+ <translation>ошибка записи в файл %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3836"/>
+ <location filename="mainwindow.cpp" line="4329"/>
<source>%1 written</source>
- <translation type="unfinished"></translation>
+ <translation>%1 записан</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3875"/>
+ <location filename="mainwindow.cpp" line="4368"/>
<source>Select binary</source>
- <translation type="unfinished"></translation>
+ <translation>Выбрать исполняемый файл</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3875"/>
+ <location filename="mainwindow.cpp" line="4368"/>
<source>Binary</source>
- <translation type="unfinished">Двоичный</translation>
+ <translation>Исполняемый файл</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3901"/>
+ <location filename="mainwindow.cpp" line="4394"/>
<source>Enter Name</source>
- <translation type="unfinished"></translation>
+ <translation>Введите имя</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3902"/>
+ <location filename="mainwindow.cpp" line="4395"/>
<source>Please enter a name for the executable</source>
- <translation type="unfinished"></translation>
+ <translation>Введите название для программы</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3913"/>
+ <location filename="mainwindow.cpp" line="4406"/>
<source>Not an executable</source>
- <translation type="unfinished"></translation>
+ <translation>Не является исполняемым</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3913"/>
+ <location filename="mainwindow.cpp" line="4406"/>
<source>This is not a recognized executable.</source>
- <translation type="unfinished"></translation>
+ <translation>Это неверный исполняемый файл.</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3938"/>
- <location filename="mainwindow.cpp" line="3963"/>
+ <location filename="mainwindow.cpp" line="4431"/>
+ <location filename="mainwindow.cpp" line="4456"/>
<source>Replace file?</source>
- <translation type="unfinished"></translation>
+ <translation>Заменить файл?</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3938"/>
+ <location filename="mainwindow.cpp" line="4431"/>
<source>There already is a hidden version of this file. Replace it?</source>
- <translation type="unfinished"></translation>
+ <translation>Уже существует скрытая версия этого файла. Заменить?</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3941"/>
- <location filename="mainwindow.cpp" line="3966"/>
+ <location filename="mainwindow.cpp" line="4434"/>
+ <location filename="mainwindow.cpp" line="4459"/>
<source>File operation failed</source>
- <translation type="unfinished"></translation>
+ <translation>Операция с файлом не удалась</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3941"/>
- <location filename="mainwindow.cpp" line="3966"/>
+ <location filename="mainwindow.cpp" line="4434"/>
+ <location filename="mainwindow.cpp" line="4459"/>
<source>Failed to remove &quot;%1&quot;. Maybe you lack the required file permissions?</source>
- <translation type="unfinished"></translation>
+ <translation>Не удалось удалить &quot;%1&quot;. Может быть, вам не хватает необходимых прав доступа к файлу?</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3963"/>
+ <location filename="mainwindow.cpp" line="4456"/>
<source>There already is a visible version of this file. Replace it?</source>
+ <translation>Видимая версия этого файла уже существует. Заменить?</translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="4489"/>
+ <source>file not found: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4009"/>
- <source>Update available</source>
+ <location filename="mainwindow.cpp" line="4502"/>
+ <source>failed to generate preview for %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4046"/>
- <source>Open/Execute</source>
+ <location filename="mainwindow.cpp" line="4516"/>
+ <source>Sorry, can&apos;t preview anything. This function currently does not support extracting from bsas.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4047"/>
+ <location filename="mainwindow.cpp" line="4547"/>
+ <source>Update available</source>
+ <translation>Доступно обновление</translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="4584"/>
+ <source>Open/Execute</source>
+ <translation>Открыть/Выполнить</translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="4585"/>
<source>Add as Executable</source>
+ <translation>Добавить как исполняемый</translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="4589"/>
+ <source>Preview</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4051"/>
+ <location filename="mainwindow.cpp" line="4595"/>
<source>Un-Hide</source>
- <translation type="unfinished"></translation>
+ <translation>Показать</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4053"/>
+ <location filename="mainwindow.cpp" line="4597"/>
<source>Hide</source>
- <translation type="unfinished"></translation>
+ <translation>Скрыть</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4058"/>
+ <location filename="mainwindow.cpp" line="4603"/>
<source>Write To File...</source>
- <translation type="unfinished"></translation>
+ <translation>Записать в файл...</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4088"/>
+ <location filename="mainwindow.cpp" line="4634"/>
<source>Do you want to endorse Mod Organizer on %1 now?</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="4505"/>
- <source>Unlock load order</source>
- <translation type="unfinished"></translation>
+ <translation>Вы хотите одобрить Mod Organizer на %1 сейчас?</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4508"/>
- <source>Lock load order</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="4223"/>
+ <location filename="mainwindow.cpp" line="4770"/>
<source>Request to Nexus failed: %1</source>
- <translation type="unfinished"></translation>
+ <translation>Запрос на Nexus не удался: %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4230"/>
- <location filename="mainwindow.cpp" line="4247"/>
+ <location filename="mainwindow.cpp" line="4777"/>
+ <location filename="mainwindow.cpp" line="4794"/>
<source>login successful</source>
- <translation type="unfinished"></translation>
+ <translation>успешный вход</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4256"/>
+ <location filename="mainwindow.cpp" line="4803"/>
<source>login failed: %1. Trying to download anyway</source>
- <translation type="unfinished"></translation>
+ <translation>вход не удался: %1. Пытаюсь загрузить всё равно</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4262"/>
+ <location filename="mainwindow.cpp" line="4809"/>
<source>login failed: %1</source>
- <translation type="unfinished"></translation>
+ <translation>войти не удалось: %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4271"/>
+ <location filename="mainwindow.cpp" line="4818"/>
<source>login failed: %1. You need to log-in with Nexus to update MO.</source>
- <translation type="unfinished"></translation>
+ <translation>войти не удалось: %1. Вам нужно войти на Nexus, чтобы обновить MO.</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4304"/>
+ <location filename="mainwindow.cpp" line="4851"/>
<source>Error</source>
- <translation type="unfinished"></translation>
+ <translation>Ошибка</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4304"/>
+ <location filename="mainwindow.cpp" line="4851"/>
<source>failed to extract %1 (errorcode %2)</source>
- <translation type="unfinished"></translation>
+ <translation>не удалось извлечь %1 (код ошибки %2)</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4399"/>
+ <location filename="mainwindow.cpp" line="4946"/>
<source>Extract...</source>
- <translation type="unfinished"></translation>
+ <translation>Распаковка...</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4449"/>
+ <location filename="mainwindow.cpp" line="5002"/>
<source>Edit Categories...</source>
+ <translation>Изменить категории...</translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="5047"/>
+ <source>Remove</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4485"/>
+ <location filename="mainwindow.cpp" line="5057"/>
<source>Enable all</source>
- <translation type="unfinished"></translation>
+ <translation>Включить все</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4486"/>
+ <location filename="mainwindow.cpp" line="5058"/>
<source>Disable all</source>
+ <translation>Отключить все</translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="5077"/>
+ <source>Unlock load order</source>
+ <translation>Разблокировать порядок загрузки</translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="5080"/>
+ <source>Lock load order</source>
+ <translation>Заблокировать порядок загрузки</translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="5149"/>
+ <source>BOSS working</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="5157"/>
+ <source>failed to run boss: %1</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -2492,10 +2641,6 @@ Please enter a name: </source>
<source>Placeholder</source>
<translation>Заполнитель</translation>
</message>
- <message>
- <source>Please install NCC</source>
- <translation type="obsolete">Установите NCC</translation>
- </message>
</context>
<context>
<name>ModInfo</name>
@@ -2503,19 +2648,15 @@ Please enter a name: </source>
<location filename="modinfo.cpp" line="96"/>
<location filename="modinfo.cpp" line="125"/>
<source>invalid index %1</source>
- <translation>Неверный индекс %1</translation>
- </message>
- <message>
- <source>invalid mod id %1</source>
- <translation type="obsolete">неверный ID мода %1</translation>
+ <translation>неверный индекс %1</translation>
</message>
</context>
<context>
<name>ModInfoBackup</name>
<message>
- <location filename="modinfo.cpp" line="784"/>
+ <location filename="modinfo.cpp" line="820"/>
<source>This is the backup of a mod</source>
- <translation type="unfinished"></translation>
+ <translation>Это резервная копия мода</translation>
</message>
</context>
<context>
@@ -2526,87 +2667,85 @@ Please enter a name: </source>
<translation>Информация о моде</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="27"/>
+ <location filename="modinfodialog.ui" line="30"/>
<source>Textfiles</source>
<translation>Текстовые файлы</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="39"/>
+ <location filename="modinfodialog.ui" line="42"/>
<source>A list of text-files in the mod directory.</source>
<translation>Список текстовых файлов в каталоге мода.</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="42"/>
+ <location filename="modinfodialog.ui" line="45"/>
<source>A list of text-files in the mod directory like readmes. </source>
- <translation>Список текстовых файлов в каталоге мода, ознакомительных.</translation>
+ <translation>Список текстовых файлов в каталоге мода, таких как ридми.</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="64"/>
- <location filename="modinfodialog.ui" line="149"/>
+ <location filename="modinfodialog.ui" line="67"/>
+ <location filename="modinfodialog.ui" line="155"/>
<source>Save</source>
<translation>Сохранить</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="74"/>
+ <location filename="modinfodialog.ui" line="77"/>
<source>INI-Files</source>
<translation>INI - файлы</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="94"/>
+ <location filename="modinfodialog.ui" line="97"/>
<source>This is a list of .ini files in the mod.</source>
- <translation>Это список INI - фалов мода.</translation>
+ <translation>Это список .ini-файлов мода.</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="97"/>
+ <location filename="modinfodialog.ui" line="100"/>
<source>This is a list of .ini files in the mod. These are usually used to configure the behaviour of mods if there are configurable parameters.</source>
<translation>Это список INI - файлов мода. Они используются для кофигурации поведения модов, если это возможно.</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="143"/>
+ <location filename="modinfodialog.ui" line="149"/>
<source>Save changes to the file.</source>
<translation>Сохранить изменения в файле.</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="146"/>
+ <location filename="modinfodialog.ui" line="152"/>
<source>Save changes to the file. This overwrites the original. There is no automatic backup!</source>
<translation>Сохранить изменения в файле. Это перезапишет ранее созданный. Перед перезаписью файла сделайте копию.</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="159"/>
+ <location filename="modinfodialog.ui" line="165"/>
<source>Images</source>
<translation>Изображение</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="214"/>
+ <location filename="modinfodialog.ui" line="220"/>
<source>Images located in the mod.</source>
<translation>Изображения мода.</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="217"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;This lists all the images (.jpg and .png) in the mod directory, like screenshots and such. Click one to get a larger view.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <translation type="unfinished">&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+ <translation type="obsolete">&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Это список всех изображений (. JPG и. PNG) в каталоге мода, такие как скриншоты и т.п. Нажмите на один из них, что бы увеличить.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Это список всех изображений (.jpg и .png) в каталоге мода, таких как скриншоты и т.п. Нажмите на любое, для увеличения.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="254"/>
- <location filename="modinfodialog.ui" line="277"/>
+ <location filename="modinfodialog.ui" line="256"/>
+ <location filename="modinfodialog.ui" line="275"/>
<source>Optional ESPs</source>
<translation>Дополнительный ESP</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="260"/>
+ <location filename="modinfodialog.ui" line="262"/>
<source>List of esps and esms that can not be loaded by the game.</source>
- <translation>Список ESP и ESM которые не могут быть включены в игру.</translation>
+ <translation>Список esp и esm, которые не могут быть загружены игрой.</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="263"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
@@ -2615,627 +2754,673 @@ p, li { white-space: pre-wrap; }
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;They usually contain optional functionality, see the readme.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;&quot;&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Most mods do not have optional esps, so chances are good you are looking at an empty list.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <translation type="unfinished">&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+ <translation type="obsolete">&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Список ESP и ESM содержащие в паллагине, которые не могут быть включены в игру. они так же не будут отображены в списке ESP и ESM мода.&lt;/span&gt;&lt;/p&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Они обычно содержат дополнительные функции. См. ReadME.&lt;/span&gt;&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Список esp и esm, содержащихся в плагине, которые не могут быть загружены в игру. Они так же не будут отображены в списке esp, в главном окне MO.&lt;/span&gt;&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Они обычно содержат опциональный функционал, смотрите документацию.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;&quot;&gt;&lt;/p&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Большинство модов не имеют дополнительные ESP. Поэтому вы можете увидеть пустой список&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Большинство модов не содержат дополнительных esp, поэтому вы можете увидеть пустой список&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="292"/>
+ <location filename="modinfodialog.ui" line="223"/>
+ <source>This lists all the images (.jpg and .png) in the mod directory, like screenshots and such. Click one to get a larger view.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="modinfodialog.ui" line="265"/>
+ <source>List of esps and esms contained in this plugin that currently can not be loaded by the game. They will not even appear in the esp-list in the main MO-window.
+They usually contain optional functionality, see the readme.
+
+Most mods do not have optional esps, so chances are good you are looking at an empty list.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="modinfodialog.ui" line="290"/>
<source>Make the selected mod in the lower list unavailable.</source>
<translation>Сделать выбранный мод недоступным.</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="295"/>
+ <location filename="modinfodialog.ui" line="293"/>
<source>The selected esp (in the lower list) will be pushed into a subdirectory of the mod and will thus become &quot;invisible&quot; to the game. It can then no longer be activated.</source>
<translation>Выбранный ESP (в нижнем списке) будет перемещены в подкаталог мода и, таким образом, станут &quot;невидимыми&quot; для игры. Затем они больше не будут активированы.</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="321"/>
+ <location filename="modinfodialog.ui" line="319"/>
<source>Move a file to the data directory.</source>
<translation>Переместить файл в каталог Data.</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="324"/>
+ <location filename="modinfodialog.ui" line="322"/>
<source>This moves a esp to the esp directory so it can be enabled in the main window. Please note that the ESP merely becomes &quot;available&quot;, it will not necessarily be loaded! That is configured in the main window of omo.</source>
- <translation>Перемещает ESP в каталог Data. Он может быть включен в главном окне. Обратите внимание, что ESP просто становится &quot;доступным&quot;, это не обязательно будет включен! Это настраивается в главном окне OMO.</translation>
+ <translation>Перемещает esp в каталог с другими esp так, что он может быть подключен в главном окне. Обратите внимание, что ESP просто становится &quot;доступным&quot;, но не будет загружен! Это настраивается в главном окне MO.</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="359"/>
+ <location filename="modinfodialog.ui" line="357"/>
<source>ESPs in the data directory and thus visible to the game.</source>
<translation>ESP в каталоге Data и виден для игры.</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="362"/>
+ <location filename="modinfodialog.ui" line="360"/>
<source>These are the mod files that are in the (virtual) data directory of your game and will thus be selecteable in the esp list in the main window.</source>
- <translation>Это моды который находятся в каталоге игры (виртуальном). Они могут быть включены в главном окне.</translation>
+ <translation>Это файлы модов которые находятся в (виртуальном)каталоге данных вашей игры и могут быть выбираемыми в списке esp, в главном окне.</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="369"/>
+ <location filename="modinfodialog.ui" line="367"/>
<source>Available ESPs</source>
<translation>Доступные ESP</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="377"/>
+ <location filename="modinfodialog.ui" line="375"/>
<source>Conflicts</source>
<translation>Конфликты</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="385"/>
+ <location filename="modinfodialog.ui" line="383"/>
<source>The following conflicted files are provided by this mod</source>
<translation>Данные конфликты вызваны этим модом.</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="432"/>
- <location filename="modinfodialog.ui" line="479"/>
+ <location filename="modinfodialog.ui" line="433"/>
+ <location filename="modinfodialog.ui" line="483"/>
<source>File</source>
<translation>Файл</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="437"/>
+ <location filename="modinfodialog.ui" line="438"/>
<source>Overwritten Mods</source>
<translation>Моды перезаписаны</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="447"/>
+ <location filename="modinfodialog.ui" line="448"/>
<source>The following conflicted files are provided by other mods</source>
<translation>Конфликтные файлы других модов.</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="484"/>
+ <location filename="modinfodialog.ui" line="488"/>
<source>Providing Mod</source>
<translation>Обеспечение мода</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="494"/>
+ <location filename="modinfodialog.ui" line="498"/>
<source>Non-Conflicted files</source>
<translation>Не конфликтные файлы</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="514"/>
+ <location filename="modinfodialog.ui" line="518"/>
<source>Categories</source>
<translation>Категории</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="537"/>
+ <location filename="modinfodialog.ui" line="541"/>
<source>Primary Category</source>
- <translation type="unfinished"></translation>
+ <translation>Основная категория</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="554"/>
+ <location filename="modinfodialog.ui" line="558"/>
<source>Nexus Info</source>
<translation>Информация Nexus.</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="562"/>
+ <location filename="modinfodialog.ui" line="566"/>
<source>Mod ID</source>
<translation>ID мода</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="569"/>
+ <location filename="modinfodialog.ui" line="573"/>
<source>Mod ID for this mod on Nexus.</source>
<translation>ID мода на Nexus.</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="572"/>
+ <location filename="modinfodialog.ui" line="576"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Mod ID for this mod on Nexus. This is filled in automatically if you downloaded and installed the mod from inside MO. Otherwise you can enter it manually. To find the correct id, find the mod on nexus. The URL will look like this: &lt;/span&gt;&lt;a href=&quot; http://www.skyrimnexus.com/downloads/file.php?id=1334&quot;&gt;&lt;span style=&quot; font-size:8pt; text-decoration: underline; color:#0000ff;&quot;&gt;http://skyrim.nexusmods.com/downloads/file.php?id=1334&lt;/span&gt;&lt;/a&gt;&lt;a href=&quot;http://www.skyrimnexus.com/downloads/file.php?id=1334&quot;&gt;&lt;span style=&quot; font-size:8pt; color:#000000;&quot;&gt;. In this example, 1334 is the id you&apos;re looking for. Besides: The above is the link to Mod Organizer on the Nexus. Why not go there now and endorse?&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <translation type="unfinished">&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+ <translation>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;ID этого мода на Nexus. Заполняется автоматически, если скачали и установили мод МО. Иначе вы можете ввести его вручную. Чтобы найти правильный ID, нужно найти источник. URL будет выглядеть следующим образом: &lt;/span&gt;&lt;a href=&quot; http://www.skyrimnexus.com/downloads/file.php?id=1334&quot;&gt;&lt;span style=&quot; font-size:8pt; text-decoration: underline; color:#0000ff;&quot;&gt;http://skyrim.nexusmods.com/downloads/file.php?id=1334&lt;/span&gt;&lt;/a&gt;&lt;a href=&quot;http://www.skyrimnexus.com/downloads/file.php?id=1334&quot;&gt;&lt;span style=&quot; font-size:8pt; color:#000000;&quot;&gt;. В этом примере, вы ищите ID 1334. Кроме того: выше есть ссылка на Mod Organizer на Nexus. Почему бы не пойти туда b yt ghjdthbnm?&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;ID этого мода на Nexus. Заполняется автоматически, если скачали и установили мод из МО. В противном случае вы можете ввести его вручную. Чтобы найти правильный ID, нужно найти мод на Nexus. URL будет выглядеть следующим образом: &lt;/span&gt;&lt;a href=&quot; http://www.skyrimnexus.com/downloads/file.php?id=1334&quot;&gt;&lt;span style=&quot; font-size:8pt; text-decoration: underline; color:#0000ff;&quot;&gt;http://skyrim.nexusmods.com/downloads/file.php?id=1334&lt;/span&gt;&lt;/a&gt;&lt;a href=&quot;http://www.skyrimnexus.com/downloads/file.php?id=1334&quot;&gt;&lt;span style=&quot; font-size:8pt; color:#000000;&quot;&gt;. В этом примере, 1334 - ID, который вы ищете. Кроме того: Выше есть ссылка на Mod Organizer на Nexus. Почему бы не перейти по ней и не одобрить?&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="596"/>
+ <location filename="modinfodialog.ui" line="600"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Installed Version of the Mod. The tooltip will contain the current version available on nexus. The installed version is only set if you installed the mod through MO.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <translation type="unfinished">&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+ <translation>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
-&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Установленная версия мода. В подсказке будет содержаться текущая версия ссылка. Установленная версия устанавливается только если вы установили мод через МО&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Установленная версия мода. Подсказка будет содержать текущую версию, доступную на Nexus. Установленная версия установится только если вы установили мод через МО.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="603"/>
+ <location filename="modinfodialog.ui" line="607"/>
<source>Version</source>
<translation>Версия</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="633"/>
+ <location filename="modinfodialog.ui" line="637"/>
<source>Refresh</source>
- <translation type="unfinished"></translation>
+ <translation>Обновить информацию</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="636"/>
+ <location filename="modinfodialog.ui" line="640"/>
<source>Refresh all information from Nexus.</source>
- <translation type="unfinished"></translation>
+ <translation>Обновить всю информацию с Nexus</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="650"/>
+ <location filename="modinfodialog.ui" line="654"/>
<source>Description</source>
<translation>Описание</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="665"/>
+ <location filename="modinfodialog.ui" line="669"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
-&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Files</source>
- <translation type="obsolete">Файлы</translation>
- </message>
- <message>
- <source>List of files currently uploaded on nexus. Double click to download.</source>
- <translation type="obsolete">Список файлов загружаемых с Nexus. Двойной клик для загрузки</translation>
- </message>
- <message>
- <source>Type</source>
- <translation type="obsolete">Тип</translation>
- </message>
- <message>
- <source>Name</source>
- <translation type="obsolete">Имя</translation>
+ <source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
+p, li { white-space: pre-wrap; }
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:7.8pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <translation type="obsolete">&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
+p, li { white-space: pre-wrap; }
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:7.8pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <source>Size (kB)</source>
- <translation type="obsolete">Размер (KB)</translation>
+ <source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
+p, li { white-space: pre-wrap; }
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
+&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <translation type="obsolete">&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
+p, li { white-space: pre-wrap; }
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
+&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="701"/>
+ <location filename="modinfodialog.ui" line="704"/>
<source>Endorse</source>
- <translation type="unfinished"></translation>
+ <translation>Одобрить</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="715"/>
+ <location filename="modinfodialog.ui" line="718"/>
<source>Notes</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Endorsements are an important motivation for authors. Please don&apos;t forget to endorse mods you like.</source>
- <translation type="obsolete">Не забудте поблагодарить автора.</translation>
- </message>
- <message>
- <source>Have you endorsed this yet?</source>
- <translation type="obsolete">Поблагодарить?</translation>
+ <translation>Примечания</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="725"/>
+ <location filename="modinfodialog.ui" line="728"/>
<source>Filetree</source>
<translation>Файловое древо</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="734"/>
+ <location filename="modinfodialog.ui" line="737"/>
<source>A directory view of this mod</source>
<translation>Каталог этого мода</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="737"/>
+ <location filename="modinfodialog.ui" line="740"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;This is a modifiable directory view of the mod directory. You can move around files using drag &amp;amp; drop and rename them (double click).&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Changes happen immediately on disc, so do&lt;/span&gt;&lt;span style=&quot; font-size:8pt; font-weight:600;&quot;&gt; be careful&lt;/span&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <translation type="unfinished"></translation>
+ <translation>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
+p, li { white-space: pre-wrap; }
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Это обзор модифицируемого каталога папки мода. Вы можете перемещать файлы, используя перетаскивание и переименовывать их двойным кликом.&lt;/span&gt;&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Изменения происходят непосредственно на диске, так что&lt;/span&gt;&lt;span style=&quot; font-size:8pt; font-weight:600;&quot;&gt; будьте осторожныl&lt;/span&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="764"/>
+ <location filename="modinfodialog.ui" line="767"/>
<source>Previous</source>
- <translation type="unfinished"></translation>
+ <translation>Предыдущий</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="771"/>
+ <location filename="modinfodialog.ui" line="774"/>
<source>Next</source>
- <translation type="unfinished">Вперед</translation>
+ <translation>Вперед</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="791"/>
+ <location filename="modinfodialog.ui" line="794"/>
<source>Close</source>
<translation type="unfinished">Закрыть</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="108"/>
+ <location filename="modinfodialog.cpp" line="104"/>
<source>&amp;Delete</source>
- <translation type="unfinished"></translation>
+ <translation>&amp;Удалить</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="109"/>
+ <location filename="modinfodialog.cpp" line="105"/>
<source>&amp;Rename</source>
- <translation type="unfinished"></translation>
+ <translation>&amp;Переименовать</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="110"/>
+ <location filename="modinfodialog.cpp" line="106"/>
<source>&amp;Hide</source>
- <translation type="unfinished"></translation>
+ <translation>&amp;Скрыть</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="111"/>
+ <location filename="modinfodialog.cpp" line="107"/>
<source>&amp;Unhide</source>
- <translation type="unfinished"></translation>
+ <translation>&amp;Показать</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="112"/>
+ <location filename="modinfodialog.cpp" line="108"/>
<source>&amp;Open</source>
<translation type="unfinished">&amp;Открыть</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="113"/>
+ <location filename="modinfodialog.cpp" line="109"/>
<source>&amp;New Folder</source>
- <translation type="unfinished"></translation>
+ <translation>&amp;Новая папка</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="352"/>
- <location filename="modinfodialog.cpp" line="367"/>
+ <location filename="modinfodialog.cpp" line="405"/>
+ <location filename="modinfodialog.cpp" line="420"/>
<source>Save changes?</source>
- <translation type="unfinished"></translation>
+ <translation>Сохранить изменения?</translation>
+ </message>
+ <message>
+ <location filename="modinfodialog.cpp" line="405"/>
+ <location filename="modinfodialog.cpp" line="420"/>
+ <source>Save changes to &quot;%1&quot;?</source>
+ <translation>Сохранить изменения в &quot;%1&quot;?</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="563"/>
+ <location filename="modinfodialog.cpp" line="612"/>
<source>File Exists</source>
- <translation type="unfinished"></translation>
+ <translation>Файл уже существует</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="563"/>
+ <location filename="modinfodialog.cpp" line="612"/>
<source>A file with that name exists, please enter a new one</source>
- <translation type="unfinished"></translation>
+ <translation>Файл с таким именем уже существует, укажите другое</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="580"/>
+ <location filename="modinfodialog.cpp" line="629"/>
<source>failed to move file</source>
- <translation type="unfinished"></translation>
+ <translation>не удалось переместить файл</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="605"/>
+ <location filename="modinfodialog.cpp" line="654"/>
<source>failed to create directory &quot;optional&quot;</source>
- <translation type="unfinished"></translation>
+ <translation>не удалось создать папку &quot;optional&quot;</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="643"/>
- <location filename="modinfodialog.cpp" line="1155"/>
+ <location filename="modinfodialog.cpp" line="692"/>
+ <location filename="modinfodialog.cpp" line="1198"/>
<source>Info requested, please wait</source>
- <translation type="unfinished"></translation>
+ <translation>Информация запрошена, пожалуйста, подождите</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="758"/>
- <source>(description incomplete, please visit nexus)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.cpp" line="713"/>
- <source>Current Version: %1</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.cpp" line="717"/>
- <source>No update available</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.cpp" line="697"/>
+ <location filename="modinfodialog.cpp" line="746"/>
<source>Main</source>
- <translation type="unfinished"></translation>
+ <translation>Главное</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="352"/>
- <location filename="modinfodialog.cpp" line="367"/>
- <source>Save changes to &quot;%1&quot;?</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfodialog.cpp" line="698"/>
+ <location filename="modinfodialog.cpp" line="747"/>
<source>Update</source>
- <translation type="unfinished"></translation>
+ <translation>Обновление</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="699"/>
+ <location filename="modinfodialog.cpp" line="748"/>
<source>Optional</source>
- <translation type="unfinished"></translation>
+ <translation>Опционально</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="700"/>
+ <location filename="modinfodialog.cpp" line="749"/>
<source>Old</source>
- <translation type="unfinished"></translation>
+ <translation>Старые</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="701"/>
+ <location filename="modinfodialog.cpp" line="750"/>
<source>Misc</source>
- <translation type="unfinished"></translation>
+ <translation>Разное</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="702"/>
+ <location filename="modinfodialog.cpp" line="751"/>
<source>Unknown</source>
- <translation type="unfinished"></translation>
+ <translation>Неизвестно</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="779"/>
- <source>&lt;a href=&quot;%1&quot;&gt;Visit on Nexus&lt;/a&gt;</source>
- <translation type="unfinished"></translation>
+ <location filename="modinfodialog.cpp" line="762"/>
+ <source>Current Version: %1</source>
+ <translation>Текущая версия: %1</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="869"/>
- <location filename="modinfodialog.cpp" line="874"/>
- <source>Confirm</source>
- <translation type="unfinished">Подтвердить</translation>
+ <location filename="modinfodialog.cpp" line="766"/>
+ <source>No update available</source>
+ <translation>Нет доступных обновлений</translation>
+ </message>
+ <message>
+ <location filename="modinfodialog.cpp" line="807"/>
+ <source>(description incomplete, please visit nexus)</source>
+ <translation>(описание не завершено, смотрите на nexus)</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="858"/>
+ <location filename="modinfodialog.cpp" line="822"/>
+ <source>&lt;a href=&quot;%1&quot;&gt;Visit on Nexus&lt;/a&gt;</source>
+ <translation>&lt;a href=&quot;%1&quot;&gt;Перейти на Nexus&lt;/a&gt;</translation>
+ </message>
+ <message>
+ <location filename="modinfodialog.cpp" line="901"/>
<source>Failed to delete %1</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Не удалось удалить %1</translation>
+ </message>
+ <message>
+ <location filename="modinfodialog.cpp" line="912"/>
+ <location filename="modinfodialog.cpp" line="917"/>
+ <source>Confirm</source>
+ <translation>Подтверждение</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="869"/>
+ <location filename="modinfodialog.cpp" line="912"/>
<source>Are sure you want to delete &quot;%1&quot;?</source>
- <translation type="unfinished"></translation>
+ <translation>Вы уверены, что хотите удалить &quot;%1&quot;?</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="874"/>
+ <location filename="modinfodialog.cpp" line="917"/>
<source>Are sure you want to delete the selected files?</source>
- <translation type="unfinished"></translation>
+ <translation>Вы уверены, что хотите удалить выбранные файлы?</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="948"/>
- <location filename="modinfodialog.cpp" line="954"/>
+ <location filename="modinfodialog.cpp" line="991"/>
+ <location filename="modinfodialog.cpp" line="997"/>
<source>New Folder</source>
- <translation type="unfinished"></translation>
+ <translation>Новая папка</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="960"/>
+ <location filename="modinfodialog.cpp" line="1003"/>
<source>Failed to create &quot;%1&quot;</source>
- <translation type="unfinished"></translation>
+ <translation>Не удалось создать &quot;%1&quot;</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="1064"/>
- <location filename="modinfodialog.cpp" line="1088"/>
+ <location filename="modinfodialog.cpp" line="1107"/>
+ <location filename="modinfodialog.cpp" line="1131"/>
<source>Replace file?</source>
- <translation type="unfinished"></translation>
+ <translation>Заменить файл?</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="1064"/>
+ <location filename="modinfodialog.cpp" line="1107"/>
<source>There already is a hidden version of this file. Replace it?</source>
- <translation type="unfinished"></translation>
+ <translation>Скрытая версия этого файла уже существует. Заменить?</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="1067"/>
- <location filename="modinfodialog.cpp" line="1091"/>
+ <location filename="modinfodialog.cpp" line="1110"/>
+ <location filename="modinfodialog.cpp" line="1134"/>
<source>File operation failed</source>
- <translation type="unfinished"></translation>
+ <translation>Не удалась операция с файлом</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="1067"/>
- <location filename="modinfodialog.cpp" line="1091"/>
+ <location filename="modinfodialog.cpp" line="1110"/>
+ <location filename="modinfodialog.cpp" line="1134"/>
<source>Failed to remove &quot;%1&quot;. Maybe you lack the required file permissions?</source>
- <translation type="unfinished"></translation>
+ <translation>Не удалось удалить &quot;%1&quot;. Может быть, вам не хватает необходимых прав доступа к файлу?</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="1078"/>
- <location filename="modinfodialog.cpp" line="1101"/>
+ <location filename="modinfodialog.cpp" line="1121"/>
+ <location filename="modinfodialog.cpp" line="1144"/>
<source>failed to rename %1 to %2</source>
- <translation type="unfinished"></translation>
+ <translation>не удалось переименовать %1 в %2</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="1088"/>
+ <location filename="modinfodialog.cpp" line="1131"/>
<source>There already is a visible version of this file. Replace it?</source>
- <translation type="unfinished"></translation>
+ <translation>Видимая версия этого файла уже существует. Заменить?</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="1135"/>
+ <location filename="modinfodialog.cpp" line="1178"/>
<source>Un-Hide</source>
- <translation type="unfinished"></translation>
+ <translation>Показать</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="1137"/>
+ <location filename="modinfodialog.cpp" line="1180"/>
<source>Hide</source>
+ <translation>Скрыть</translation>
+ </message>
+ <message>
+ <location filename="modinfodialog.cpp" line="1221"/>
+ <source>Name</source>
+ <translation type="unfinished">Имя</translation>
+ </message>
+ <message>
+ <location filename="modinfodialog.cpp" line="1221"/>
+ <source>Please enter a name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="modinfodialog.cpp" line="1225"/>
+ <location filename="modinfodialog.cpp" line="1228"/>
+ <source>Error</source>
+ <translation type="unfinished">Ошибка</translation>
+ </message>
+ <message>
+ <location filename="modinfodialog.cpp" line="1225"/>
+ <source>Invalid name. Must be a valid file name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="modinfodialog.cpp" line="1228"/>
+ <source>A tweak by that name exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="modinfodialog.cpp" line="1240"/>
+ <source>Create Tweak</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ModInfoOverwrite</name>
<message>
- <location filename="modinfo.h" line="812"/>
- <source>Overwrite</source>
- <translation type="unfinished"></translation>
+ <location filename="modinfo.cpp" line="866"/>
+ <source>This pseudo mod contains files from the virtual data tree that got modified (i.e. by the construction kit)</source>
+ <translation>Этот псевдо-мод содержит файлы из виртуального древа данных, которые были изменены (в Construction Kit и других программах)</translation>
</message>
<message>
- <location filename="modinfo.cpp" line="821"/>
- <source>This pseudo mod contains files from the virtual data tree that got modified (i.e. by the construction kit)</source>
- <translation type="unfinished"></translation>
+ <source>Overwrite</source>
+ <translation type="obsolete">Замена</translation>
</message>
</context>
<context>
<name>ModInfoRegular</name>
<message>
- <location filename="modinfo.cpp" line="392"/>
+ <location filename="modinfo.cpp" line="393"/>
<source>failed to write %1/meta.ini: %2</source>
- <translation type="unfinished"></translation>
+ <translation>не удалось записать %1/meta.ini: %2</translation>
</message>
<message>
- <location filename="modinfo.cpp" line="625"/>
+ <location filename="modinfo.cpp" line="661"/>
<source>%1 contains no esp/esm and no asset (textures, meshes, interface, ...) directory</source>
- <translation type="unfinished"></translation>
+ <translation>%1 не содержит ни esp/esm, ни папок ресурсов (textures, meshes, interface, ...)</translation>
</message>
<message>
- <location filename="modinfo.cpp" line="629"/>
+ <location filename="modinfo.cpp" line="665"/>
<source>Categories: &lt;br&gt;</source>
- <translation type="unfinished"></translation>
+ <translation>Категории: &lt;br&gt;</translation>
</message>
</context>
<context>
<name>ModList</name>
<message>
- <location filename="modlist.cpp" line="662"/>
- <source>Confirm</source>
- <translation type="unfinished">Подтвердить</translation>
- </message>
- <message>
- <location filename="modlist.cpp" line="94"/>
<source>Overwrite</source>
- <translation type="unfinished"></translation>
+ <translation type="obsolete">Замена</translation>
</message>
<message>
<location filename="modlist.cpp" line="109"/>
<source>This entry contains files that have been created inside the virtual data tree (i.e. by the construction kit)</source>
- <translation type="unfinished"></translation>
+ <translation>Эта запись включает файлы, которые были созданы внутри виртуального древа (с помощью Construction Kit и др. программ)</translation>
</message>
<message>
<location filename="modlist.cpp" line="118"/>
<source>Backup</source>
- <translation type="unfinished"></translation>
+ <translation>Резервная копия</translation>
</message>
<message>
<location filename="modlist.cpp" line="119"/>
<source>No valid game data</source>
- <translation type="unfinished"></translation>
+ <translation>Неверные игровые данные</translation>
</message>
<message>
<location filename="modlist.cpp" line="120"/>
<source>Not endorsed yet</source>
- <translation type="unfinished"></translation>
+ <translation>Еще не одобрено</translation>
</message>
<message>
<location filename="modlist.cpp" line="122"/>
<source>Overwrites files</source>
- <translation type="unfinished"></translation>
+ <translation>Заменяет файлы</translation>
</message>
<message>
<location filename="modlist.cpp" line="123"/>
<source>Overwritten files</source>
- <translation type="unfinished"></translation>
+ <translation>Замененные файлы</translation>
</message>
<message>
<location filename="modlist.cpp" line="124"/>
<source>Overwrites &amp; Overwritten</source>
- <translation type="unfinished"></translation>
+ <translation>Заменяет и заменяется</translation>
</message>
<message>
<location filename="modlist.cpp" line="125"/>
<source>Redundant</source>
- <translation type="unfinished"></translation>
+ <translation>Избыточные</translation>
</message>
<message>
- <location filename="modlist.cpp" line="736"/>
- <source>Category of the mod.</source>
- <translation type="unfinished"></translation>
+ <location filename="modlist.cpp" line="197"/>
+ <source>invalid</source>
+ <translation>неверные</translation>
</message>
<message>
- <location filename="modlist.cpp" line="737"/>
- <source>Id of the mod as used on Nexus.</source>
- <translation type="unfinished"></translation>
+ <location filename="modlist.cpp" line="308"/>
+ <source>installed version: &quot;%1&quot;, newest version: &quot;%2&quot;</source>
+ <oldsource>installed version: %1, newest version: %2</oldsource>
+ <translation type="unfinished">установленная версия: %1, новейшая версия: %2</translation>
</message>
<message>
- <location filename="modlist.cpp" line="738"/>
- <source>Emblemes to highlight things that might require attention.</source>
+ <location filename="modlist.cpp" line="310"/>
+ <source>The newest version on Nexus seems to be older than the one you have installed. This could either mean the version you have has been withdrawn (i.e. due to a bug) or the author uses a non-standard versioning scheme and that newest version is actually newer. Either way you may want to &quot;upgrade&quot;.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="298"/>
+ <location filename="modlist.cpp" line="318"/>
<source>Categories: &lt;br&gt;</source>
- <translation type="unfinished"></translation>
+ <translation>Категории: &lt;br&gt;</translation>
</message>
<message>
- <location filename="modlist.cpp" line="294"/>
- <source>installed version: %1, newest version: %2</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Name</source>
- <translation type="obsolete">Имя</translation>
- </message>
- <message>
- <location filename="modlist.cpp" line="719"/>
- <source>Version</source>
- <translation type="unfinished">Версия</translation>
+ <location filename="modlist.cpp" line="347"/>
+ <source>Invalid name</source>
+ <translation>Недопустимое имя</translation>
</message>
<message>
- <location filename="modlist.cpp" line="733"/>
- <source>Version of the mod (if available)</source>
- <translation type="unfinished"></translation>
+ <location filename="modlist.cpp" line="717"/>
+ <source>drag&amp;drop failed: %1</source>
+ <translation>перетаскивание не удалось: %1</translation>
</message>
<message>
- <location filename="modlist.cpp" line="720"/>
- <source>Priority</source>
- <translation type="unfinished"></translation>
+ <location filename="modlist.cpp" line="776"/>
+ <source>Confirm</source>
+ <translation>Подтверждение</translation>
</message>
<message>
- <location filename="modlist.cpp" line="184"/>
- <source>invalid</source>
- <translation type="unfinished"></translation>
+ <location filename="modlist.cpp" line="776"/>
+ <source>Are you sure you want to remove &quot;%1&quot;?</source>
+ <translation>Вы действительно хотите удалить &quot;%1&quot;?</translation>
</message>
<message>
- <location filename="modlist.cpp" line="327"/>
- <source>Invalid name</source>
- <translation type="unfinished"></translation>
+ <location filename="modlist.cpp" line="831"/>
+ <source>Flags</source>
+ <translation>Флаги</translation>
</message>
<message>
- <location filename="modlist.cpp" line="603"/>
- <source>drag&amp;drop failed: %1</source>
- <translation type="unfinished"></translation>
+ <location filename="modlist.cpp" line="832"/>
+ <source>Mod Name</source>
+ <translation>Имя мода</translation>
</message>
<message>
- <location filename="modlist.cpp" line="717"/>
- <source>Flags</source>
- <translation type="unfinished"></translation>
+ <location filename="modlist.cpp" line="833"/>
+ <source>Version</source>
+ <translation type="unfinished">Версия</translation>
</message>
<message>
- <location filename="modlist.cpp" line="718"/>
- <source>Mod Name</source>
- <translation type="unfinished"></translation>
+ <location filename="modlist.cpp" line="834"/>
+ <source>Priority</source>
+ <translation>Приоритет</translation>
</message>
<message>
- <location filename="modlist.cpp" line="721"/>
+ <location filename="modlist.cpp" line="835"/>
<source>Category</source>
- <translation type="unfinished"></translation>
+ <translation>Категория</translation>
</message>
<message>
- <location filename="modlist.cpp" line="722"/>
+ <location filename="modlist.cpp" line="836"/>
<source>Nexus ID</source>
- <translation type="unfinished"></translation>
+ <translation>Nexus ID</translation>
</message>
<message>
- <location filename="modlist.cpp" line="723"/>
+ <location filename="modlist.cpp" line="837"/>
<source>Installation</source>
- <translation type="unfinished"></translation>
+ <translation>Установка</translation>
</message>
<message>
- <location filename="modlist.cpp" line="724"/>
- <location filename="modlist.cpp" line="740"/>
+ <location filename="modlist.cpp" line="838"/>
+ <location filename="modlist.cpp" line="854"/>
<source>unknown</source>
- <translation type="unfinished"></translation>
+ <translation>неизвестный</translation>
</message>
<message>
- <location filename="modlist.cpp" line="732"/>
+ <location filename="modlist.cpp" line="846"/>
<source>Name of your mods</source>
- <translation type="unfinished"></translation>
+ <translation>Имя ваших модов</translation>
</message>
<message>
- <location filename="modlist.cpp" line="734"/>
+ <location filename="modlist.cpp" line="847"/>
+ <source>Version of the mod (if available)</source>
+ <translation>Версия мода (если доступно)</translation>
+ </message>
+ <message>
+ <location filename="modlist.cpp" line="848"/>
<source>Installation priority of your mod. The higher, the more &quot;important&quot; it is and thus overwrites files from mods with lower priority.</source>
- <translation type="unfinished"></translation>
+ <translation>Приоритет установки для ваших модов. Файлы модов с большим приоритетом перезапишут файлы модов с меньшим приоритетом.</translation>
</message>
<message>
- <location filename="modlist.cpp" line="739"/>
- <source>Time this mod was installed</source>
- <translation type="unfinished"></translation>
+ <location filename="modlist.cpp" line="850"/>
+ <source>Category of the mod.</source>
+ <translation>Категория мода.</translation>
</message>
<message>
- <location filename="modlist.cpp" line="662"/>
- <source>Are you sure you want to remove &quot;%1&quot;?</source>
- <translation type="unfinished"></translation>
+ <location filename="modlist.cpp" line="851"/>
+ <source>Id of the mod as used on Nexus.</source>
+ <translation>ID мода, используемый на Nexus.</translation>
+ </message>
+ <message>
+ <location filename="modlist.cpp" line="852"/>
+ <source>Emblemes to highlight things that might require attention.</source>
+ <translation>Выделяет подсветкой вещи, которые могут потребовать внимания.</translation>
+ </message>
+ <message>
+ <location filename="modlist.cpp" line="853"/>
+ <source>Time this mod was installed</source>
+ <translation>Время, когда мод был установлен.</translation>
</message>
</context>
<context>
@@ -3243,63 +3428,61 @@ p, li { white-space: pre-wrap; }
<message>
<location filename="motddialog.ui" line="14"/>
<source>Message of the Day</source>
- <translation type="unfinished"></translation>
+ <translation>Сообщение дня</translation>
</message>
<message>
<location filename="motddialog.ui" line="42"/>
<source>OK</source>
- <translation type="unfinished"></translation>
+ <translation>OK</translation>
</message>
</context>
<context>
<name>MyFileSystemModel</name>
<message>
- <location filename="overwriteinfodialog.cpp" line="48"/>
+ <location filename="overwriteinfodialog.cpp" line="47"/>
<source>Overwrites</source>
- <translation type="unfinished"></translation>
+ <translation>Заменяет</translation>
</message>
<message>
- <location filename="overwriteinfodialog.cpp" line="60"/>
+ <location filename="overwriteinfodialog.cpp" line="59"/>
<source>not implemented</source>
- <translation type="unfinished"></translation>
+ <translation>не реализовано</translation>
</message>
</context>
<context>
<name>NXMAccessManager</name>
<message>
<location filename="nxmaccessmanager.cpp" line="130"/>
- <source>timeout</source>
+ <source>Logging into Nexus</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="nxmaccessmanager.cpp" line="168"/>
- <source>Please check your password</source>
- <translation type="unfinished"></translation>
+ <location filename="nxmaccessmanager.cpp" line="145"/>
+ <source>timeout</source>
+ <translation>задержка</translation>
</message>
-</context>
-<context>
- <name>NexusDialog</name>
<message>
- <source>Mod ID</source>
- <translation type="obsolete">ID мода</translation>
+ <location filename="nxmaccessmanager.cpp" line="185"/>
+ <source>Please check your password</source>
+ <translation>Проверьте ваш пароль</translation>
</message>
</context>
<context>
<name>NexusInterface</name>
<message>
- <location filename="nexusinterface.cpp" line="201"/>
+ <location filename="nexusinterface.cpp" line="218"/>
<source>Failed to guess mod id for &quot;%1&quot;, please pick the correct one</source>
- <translation type="unfinished"></translation>
+ <translation>Не удалось опознать id мода &quot;%1&quot;, пожалуйста, выберете правильный</translation>
</message>
<message>
- <location filename="nexusinterface.cpp" line="421"/>
+ <location filename="nexusinterface.cpp" line="455"/>
<source>empty response</source>
- <translation type="unfinished"></translation>
+ <translation>пустой ответ</translation>
</message>
<message>
- <location filename="nexusinterface.cpp" line="450"/>
+ <location filename="nexusinterface.cpp" line="483"/>
<source>invalid response</source>
- <translation type="unfinished"></translation>
+ <translation>неверный ответ</translation>
</message>
</context>
<context>
@@ -3307,22 +3490,22 @@ p, li { white-space: pre-wrap; }
<message>
<location filename="overwriteinfodialog.ui" line="14"/>
<source>Overwrite</source>
- <translation type="unfinished"></translation>
+ <translation>Замена</translation>
</message>
<message>
<location filename="overwriteinfodialog.ui" line="39"/>
<source>You can use drag&amp;drop to move files and directories to regular mods.</source>
- <translation type="unfinished"></translation>
+ <translation>Вы можете использовать перетаскивание, для перемещения папок и файлов в распакованные моды.</translation>
</message>
<message>
<location filename="overwriteinfodialog.cpp" line="90"/>
<source>&amp;Delete</source>
- <translation type="unfinished"></translation>
+ <translation>&amp;Удалить</translation>
</message>
<message>
<location filename="overwriteinfodialog.cpp" line="91"/>
<source>&amp;Rename</source>
- <translation type="unfinished"></translation>
+ <translation>&amp;Переименовать</translation>
</message>
<message>
<location filename="overwriteinfodialog.cpp" line="92"/>
@@ -3332,138 +3515,174 @@ p, li { white-space: pre-wrap; }
<message>
<location filename="overwriteinfodialog.cpp" line="93"/>
<source>&amp;New Folder</source>
- <translation type="unfinished"></translation>
+ <translation>&amp;Новая папка</translation>
</message>
<message>
- <location filename="overwriteinfodialog.cpp" line="137"/>
+ <location filename="overwriteinfodialog.cpp" line="136"/>
<source>Failed to delete &quot;%1&quot;</source>
- <translation type="unfinished"></translation>
+ <translation>Не удалось удалить &quot;%1&quot;</translation>
</message>
<message>
- <location filename="overwriteinfodialog.cpp" line="148"/>
- <location filename="overwriteinfodialog.cpp" line="153"/>
+ <location filename="overwriteinfodialog.cpp" line="147"/>
+ <location filename="overwriteinfodialog.cpp" line="152"/>
<source>Confirm</source>
- <translation type="unfinished">Подтвердить</translation>
+ <translation>Подтверждение</translation>
</message>
<message>
- <location filename="overwriteinfodialog.cpp" line="148"/>
+ <location filename="overwriteinfodialog.cpp" line="147"/>
<source>Are sure you want to delete &quot;%1&quot;?</source>
- <translation type="unfinished"></translation>
+ <translation>Вы уверены, что хотите удалить &quot;%1&quot;?</translation>
</message>
<message>
- <location filename="overwriteinfodialog.cpp" line="153"/>
+ <location filename="overwriteinfodialog.cpp" line="152"/>
<source>Are sure you want to delete the selected files?</source>
- <translation type="unfinished"></translation>
+ <translation>Вы действительно хотите удалить выбранные файлы?</translation>
</message>
<message>
- <location filename="overwriteinfodialog.cpp" line="203"/>
- <location filename="overwriteinfodialog.cpp" line="209"/>
+ <location filename="overwriteinfodialog.cpp" line="202"/>
+ <location filename="overwriteinfodialog.cpp" line="208"/>
<source>New Folder</source>
- <translation type="unfinished"></translation>
+ <translation>Новая папка</translation>
</message>
<message>
- <location filename="overwriteinfodialog.cpp" line="215"/>
+ <location filename="overwriteinfodialog.cpp" line="214"/>
<source>Failed to create &quot;%1&quot;</source>
- <translation type="unfinished"></translation>
+ <translation>Не удалось создать &quot;%1&quot;</translation>
</message>
</context>
<context>
<name>PluginList</name>
<message>
- <location filename="pluginlist.cpp" line="98"/>
- <source>Mod Index</source>
- <translation type="unfinished"></translation>
+ <location filename="pluginlist.cpp" line="109"/>
+ <source>Name</source>
+ <translation type="unfinished">Имя</translation>
+ </message>
+ <message>
+ <location filename="pluginlist.cpp" line="110"/>
+ <source>Priority</source>
+ <translation>Приоритет</translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="99"/>
<location filename="pluginlist.cpp" line="111"/>
+ <source>Mod Index</source>
+ <translation>Индекс мода</translation>
+ </message>
+ <message>
+ <location filename="pluginlist.cpp" line="112"/>
+ <source>Flags</source>
+ <translation type="unfinished">Флаги</translation>
+ </message>
+ <message>
+ <location filename="pluginlist.cpp" line="113"/>
+ <location filename="pluginlist.cpp" line="125"/>
<source>unknown</source>
- <translation type="unfinished"></translation>
+ <translation>неизвестно</translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="107"/>
+ <location filename="pluginlist.cpp" line="121"/>
<source>Name of your mods</source>
- <translation type="unfinished"></translation>
+ <translation>Имена ваших модов</translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="108"/>
+ <location filename="pluginlist.cpp" line="122"/>
<source>Load priority of your mod. The higher, the more &quot;important&quot; it is and thus overwrites data from plugins with lower priority.</source>
- <translation type="unfinished"></translation>
+ <translation>Приоритет загрузки ваших модов. Моды с большим приоритетом перезапишут данные модов с меньшим приоритетом.</translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="110"/>
+ <location filename="pluginlist.cpp" line="124"/>
<source>The modindex determins the formids of objects originating from this mods.</source>
+ <translation>Индекс мода определяющий id форм объектов, происходящих из этих модов.</translation>
+ </message>
+ <message>
+ <location filename="pluginlist.cpp" line="165"/>
+ <source>failed to update esp info for file %1 (source id: %2), error: %3</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="208"/>
+ <location filename="pluginlist.cpp" line="233"/>
<source>esp not found: %1</source>
- <translation type="unfinished"></translation>
+ <translation>esp не найден: %1</translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="215"/>
- <location filename="pluginlist.cpp" line="227"/>
+ <location filename="pluginlist.cpp" line="240"/>
+ <location filename="pluginlist.cpp" line="252"/>
<source>Confirm</source>
- <translation type="unfinished">Подтвердить</translation>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="215"/>
+ <location filename="pluginlist.cpp" line="240"/>
<source>Really enable all plugins?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="227"/>
+ <location filename="pluginlist.cpp" line="252"/>
<source>Really disable all plugins?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="353"/>
+ <location filename="pluginlist.cpp" line="380"/>
<source>The file containing locked plugin indices is broken</source>
- <translation type="unfinished"></translation>
+ <translation>Файл, содержащий индексы заблокированного плагина, не работает.</translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="366"/>
- <location filename="pluginlist.cpp" line="405"/>
<source>failed to open output file: %1</source>
- <translation type="unfinished"></translation>
+ <translation type="obsolete">не удалось открыть выходной файл: %1</translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="393"/>
+ <location filename="pluginlist.cpp" line="418"/>
<source>Some of your plugins have invalid names! These plugins can not be loaded by the game. Please see mo_interface.log for a list of affected plugins and rename them.</source>
- <translation type="unfinished"></translation>
+ <translation>Некоторые из ваших плагинов имеют неверные имена. Эти плагины не могут быть загружены игрой. Смотрите mo_interface.log для получения списка таких плагинов и переименуйте их.</translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="737"/>
- <source>failed to restore load order for %1</source>
+ <location filename="pluginlist.cpp" line="644"/>
+ <source>BOSS dll incompatible</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="631"/>
+ <location filename="pluginlist.cpp" line="983"/>
<source>This plugin can&apos;t be disabled (enforced by the game)</source>
- <translation type="unfinished"></translation>
+ <translation>Этот плагин не может быть отключен (грузится игрой принудительно)</translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="633"/>
+ <location filename="pluginlist.cpp" line="985"/>
<source>Origin: %1</source>
+ <translation>Источник: %1</translation>
+ </message>
+ <message>
+ <location filename="pluginlist.cpp" line="987"/>
+ <source>Missing Masters</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="96"/>
- <source>Name</source>
- <translation type="unfinished">Имя</translation>
+ <location filename="pluginlist.cpp" line="993"/>
+ <source>Enabled Masters</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="97"/>
- <source>Priority</source>
+ <location filename="pluginlist.cpp" line="1134"/>
+ <source>failed to restore load order for %1</source>
+ <translation>не удалось восстановить порядок загрузки для %1</translation>
+ </message>
+</context>
+<context>
+ <name>PreviewDialog</name>
+ <message>
+ <location filename="previewdialog.ui" line="14"/>
+ <source>Preview</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <location filename="previewdialog.ui" line="78"/>
+ <source>Close</source>
+ <translation type="unfinished">Закрыть</translation>
+ </message>
</context>
<context>
<name>ProblemsDialog</name>
<message>
<location filename="problemsdialog.ui" line="14"/>
<source>Problems</source>
- <translation type="unfinished"></translation>
+ <translation>Проблемы</translation>
</message>
<message>
<location filename="problemsdialog.ui" line="49"/>
@@ -3471,96 +3690,114 @@ p, li { white-space: pre-wrap; }
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:7.8pt; font-weight:400; font-style:normal;&quot;&gt;
-&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <translation type="unfinished"></translation>
+&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <oldsource>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
+p, li { white-space: pre-wrap; }
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</oldsource>
+ <translation type="unfinished">&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
+p, li { white-space: pre-wrap; }
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:7.8pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+ </message>
+ <message>
+ <location filename="problemsdialog.ui" line="75"/>
+ <source>Close</source>
+ <translation type="unfinished">Закрыть</translation>
</message>
<message>
- <location filename="problemsdialog.cpp" line="29"/>
<source>fix</source>
- <translation type="unfinished"></translation>
+ <translation type="obsolete">исправить</translation>
</message>
<message>
- <location filename="problemsdialog.cpp" line="30"/>
+ <location filename="problemsdialog.cpp" line="44"/>
+ <location filename="problemsdialog.cpp" line="45"/>
<source>Fix</source>
- <translation type="unfinished"></translation>
+ <translation>Исправить</translation>
</message>
<message>
- <location filename="problemsdialog.cpp" line="34"/>
+ <location filename="problemsdialog.cpp" line="49"/>
<source>No guided fix</source>
- <translation type="unfinished"></translation>
+ <translation>Не управляемое исправление</translation>
</message>
</context>
<context>
<name>Profile</name>
<message>
- <location filename="profile.cpp" line="56"/>
+ <location filename="profile.cpp" line="59"/>
<source>invalid profile name %1</source>
- <translation type="unfinished"></translation>
+ <translation>неверное имя профиля %1</translation>
</message>
<message>
- <location filename="profile.cpp" line="60"/>
+ <location filename="profile.cpp" line="63"/>
<source>failed to create %1</source>
- <translation type="unfinished"></translation>
+ <translation>не удалось создать %1</translation>
</message>
<message>
- <location filename="profile.cpp" line="152"/>
<source>failed to open &quot;%1&quot; for writing</source>
+ <translation type="obsolete">не удалось открыть &quot;%1&quot; для записи</translation>
+ </message>
+ <message>
+ <location filename="profile.cpp" line="182"/>
+ <source>failed to write mod list: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="189"/>
+ <location filename="profile.cpp" line="193"/>
<source>failed to update tweaked ini file, wrong settings may be used: %1</source>
- <translation type="unfinished"></translation>
+ <translation>не удалось обновить настроенный ini-файл, вероятно используются ошибочные настройки: %1</translation>
</message>
<message>
- <location filename="profile.cpp" line="219"/>
+ <location filename="profile.cpp" line="223"/>
<source>failed to create tweaked ini: %1</source>
- <translation type="unfinished"></translation>
+ <translation>не удалось создать настроенный ini: %1</translation>
</message>
<message>
- <location filename="profile.cpp" line="271"/>
- <location filename="profile.cpp" line="300"/>
- <location filename="profile.cpp" line="384"/>
- <location filename="profile.cpp" line="402"/>
- <location filename="profile.cpp" line="412"/>
+ <location filename="profile.cpp" line="276"/>
+ <location filename="profile.cpp" line="305"/>
+ <location filename="profile.cpp" line="390"/>
+ <location filename="profile.cpp" line="408"/>
+ <location filename="profile.cpp" line="418"/>
<source>invalid index %1</source>
- <translation type="unfinished">Неверный индекс %1</translation>
+ <translation>неверный индекс %1</translation>
</message>
<message>
- <location filename="profile.cpp" line="365"/>
+ <location filename="profile.cpp" line="371"/>
<source>Overwrite directory couldn&apos;t be parsed</source>
- <translation type="unfinished"></translation>
+ <translation>Замена каталога не может быть обработана</translation>
</message>
<message>
- <location filename="profile.cpp" line="374"/>
+ <location filename="profile.cpp" line="380"/>
<source>invalid priority %1</source>
- <translation type="unfinished"></translation>
+ <translation>неверный приоритет %1</translation>
</message>
<message>
- <location filename="profile.cpp" line="561"/>
+ <location filename="profile.cpp" line="568"/>
<source>failed to parse ini file (%1)</source>
- <translation type="unfinished"></translation>
+ <translation>не удалось обработать ini файл (%1)</translation>
</message>
<message>
- <location filename="profile.cpp" line="589"/>
+ <location filename="profile.cpp" line="596"/>
<source>failed to parse ini file (%1): %2</source>
- <translation type="unfinished"></translation>
+ <translation>не удалось обработать ini файл (%1): %2</translation>
</message>
<message>
- <location filename="profile.cpp" line="613"/>
- <location filename="profile.cpp" line="650"/>
+ <location filename="profile.cpp" line="620"/>
+ <location filename="profile.cpp" line="657"/>
<source>failed to modify &quot;%1&quot;</source>
- <translation type="unfinished"></translation>
+ <translation>не удалось изменить &quot;%1&quot;</translation>
</message>
<message>
- <location filename="profile.cpp" line="678"/>
+ <location filename="profile.cpp" line="685"/>
<source>Delete savegames?</source>
- <translation type="unfinished"></translation>
+ <translation>Удалить сохранения?</translation>
</message>
<message>
- <location filename="profile.cpp" line="679"/>
+ <location filename="profile.cpp" line="686"/>
<source>Do you want to delete local savegames? (If you select &quot;No&quot;, the save games will show up again if you re-enable local savegames)</source>
- <translation type="unfinished"></translation>
+ <translation>Вы хотите удалить локальные сохранения? (При отрицательном выборе сохранения отобразятся снова, если повторно включить локальные сохранения)</translation>
</message>
</context>
<context>
@@ -3568,27 +3805,27 @@ p, li { white-space: pre-wrap; }
<message>
<location filename="profileinputdialog.ui" line="14"/>
<source>Dialog</source>
- <translation type="unfinished"></translation>
+ <translation>Диалог</translation>
</message>
<message>
<location filename="profileinputdialog.ui" line="20"/>
<source>Please enter a name for the new profile</source>
- <translation type="unfinished"></translation>
+ <translation>Введите имя нового профиля</translation>
</message>
<message>
<location filename="profileinputdialog.ui" line="30"/>
<source>If checked, the new profile will use the default game settings.</source>
- <translation type="unfinished"></translation>
+ <translation>Если отмечено, новый профиль будет использовать настройки игры по умолчанию.</translation>
</message>
<message>
<location filename="profileinputdialog.ui" line="33"/>
<source>If checked, the new profile will use the default game settings instead of the &quot;global&quot; settings. Global settings are the settings you configure when running the game launcher directly, without MO.</source>
- <translation type="unfinished"></translation>
+ <translation>Если отмечено, новый профиль будет использовать настройки игры по умолчанию, вместо общих настроек. Общие настройки, это настройки, которые вы установили, когда запустили лаунчер игры напрямую, без MO.</translation>
</message>
<message>
<location filename="profileinputdialog.ui" line="36"/>
<source>Default Game Settings</source>
- <translation type="unfinished"></translation>
+ <translation>Настройки игры по умолчанию</translation>
</message>
</context>
<context>
@@ -3596,12 +3833,12 @@ p, li { white-space: pre-wrap; }
<message>
<location filename="profilesdialog.ui" line="14"/>
<source>Profiles</source>
- <translation type="unfinished"></translation>
+ <translation>Профили</translation>
</message>
<message>
<location filename="profilesdialog.ui" line="22"/>
<source>List of Profiles</source>
- <translation type="unfinished"></translation>
+ <translation>Список профилей</translation>
</message>
<message>
<location filename="profilesdialog.ui" line="25"/>
@@ -3612,23 +3849,29 @@ p, li { white-space: pre-wrap; }
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;This is the list of profiles. Each Profile contains its own list and installation order of enabled mods (from a shared pool), a configuration of enabled esps/esms, a copy of the games ini-file and an optional savegame filter.&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;Note&lt;/span&gt; For technical reasons it&apos;s currently not possible to have seperate load-orders for esps. This means you can&apos;t load moda.esp before modb.esp in one profile and the other way around in another.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <translation type="unfinished"></translation>
+ <translation>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
+p, li { white-space: pre-wrap; }
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Это список профилей. Каждый профиль содержит свой собственный список и порядок установки подключенных модов (из общего пула), настройки подключенных esps/esms, копии игровых ini-файлов и опциональный фильтр сохранений.&lt;/p&gt;
+&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;Примечание&lt;/span&gt; По техническим причинам невозможно иметь отдельные порядки загрузки для esp. Это означает, что вы не сможете загрузить moda.esp пере modb.esp в одном профиле и иным образом в другом профиле.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<location filename="profilesdialog.ui" line="38"/>
<location filename="profilesdialog.ui" line="41"/>
<source>If checked, savegames are local to this profile and will not appear when starting with a different profile.</source>
- <translation type="unfinished"></translation>
+ <translation>Если отмечено, сохранения будут локальными для этого профиля и не будут отображены для других профилей.</translation>
</message>
<message>
<location filename="profilesdialog.ui" line="44"/>
<source>Local Savegames</source>
- <translation type="unfinished"></translation>
+ <translation>Локальные сохранения</translation>
</message>
<message>
<location filename="profilesdialog.ui" line="51"/>
<source>This ensures data files from mods are actually used. You want to enable this unless you use a different tool for Archive Invalidation.</source>
- <translation type="unfinished"></translation>
+ <translation>Это гарантирует использование файлов данных из модов. Вам нужно включить это, если вы не используете других инструментов для инвалидации.</translation>
</message>
<message>
<location filename="profilesdialog.ui" line="54"/>
@@ -3640,65 +3883,72 @@ p, li { white-space: pre-wrap; }
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;The Mod Organizer uses a workaround called &amp;quot;BSA redirection&amp;quot; (google is your friend) to fix this issue reliably and without further work. Simply activate and forget.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;&quot;&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;With Skyrim this bug seems to be fixed to a degree but whether a mod becomes active still depends on file dates. Therefore, it still makes sense to activate this.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <translation type="unfinished"></translation>
+ <translation>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
+p, li { white-space: pre-wrap; }
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Игры Oblivion, Fallout 3 и Fallout NV содержат баг, который делает неработоспособными текстуры и модели реплейсеров (то есть: все изменения моделей и текстур в игре).&lt;/span&gt;&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Mod Organizer использует способ обхода, называемый &amp;quot;BSA redirection&amp;quot; (google в помощь), чтобы решить эту проблему надежно и без дальнейшей возни. Просто подключить и забыть.&lt;/span&gt;&lt;/p&gt;
+&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;&quot;&gt;&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;В Скайрим, кажется, этот баг исправлен в известной степени, но будет ли мод активным, зависит по прежнему от даты модификации файлов. Поэтому всё ещё есть смысл включить это.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<location filename="profilesdialog.ui" line="64"/>
<source>Automatic Archive Invalidation</source>
- <translation type="unfinished"></translation>
+ <translation>Автоматическая инвалидадция</translation>
</message>
<message>
<location filename="profilesdialog.ui" line="75"/>
<location filename="profilesdialog.ui" line="78"/>
<source>Create a new profile from scratch</source>
- <translation type="unfinished"></translation>
+ <translation>Создать новый профиль «с нуля»</translation>
</message>
<message>
<location filename="profilesdialog.ui" line="81"/>
<source>Create</source>
- <translation type="unfinished"></translation>
+ <translation>Создать</translation>
</message>
<message>
<location filename="profilesdialog.ui" line="91"/>
<source>Clone the selected profile</source>
- <translation type="unfinished"></translation>
+ <translation>Клонировать выбранный профиль</translation>
</message>
<message>
<location filename="profilesdialog.ui" line="94"/>
<source>This creates a new profile with the same settings and active mods as the selected one.</source>
- <translation type="unfinished"></translation>
+ <translation>Это создаст новый профиль с такими же настройками и активными модами, как у выбранного.</translation>
</message>
<message>
<location filename="profilesdialog.ui" line="97"/>
<source>Copy</source>
- <translation type="unfinished"></translation>
+ <translation>Копировать</translation>
</message>
<message>
<location filename="profilesdialog.ui" line="107"/>
<location filename="profilesdialog.ui" line="110"/>
<source>Delete the selected Profile. This can not be un-done!</source>
- <translation type="unfinished"></translation>
+ <translation>Удалить выбранный профиль. Это нельзя будет отменить!</translation>
</message>
<message>
<location filename="profilesdialog.ui" line="113"/>
<source>Remove</source>
- <translation type="unfinished"></translation>
+ <translation>Удалить</translation>
</message>
<message>
<location filename="profilesdialog.ui" line="123"/>
<source>Rename</source>
- <translation type="unfinished"></translation>
+ <translation>Переименовать</translation>
</message>
<message>
<location filename="profilesdialog.ui" line="133"/>
<location filename="profilesdialog.ui" line="136"/>
<source>Transfer save games to the selected profile.</source>
- <translation type="unfinished"></translation>
+ <translation>Передать сохранения в выбранный профиль.</translation>
</message>
<message>
<location filename="profilesdialog.ui" line="139"/>
<source>Transfer Saves</source>
- <translation type="unfinished"></translation>
+ <translation>Передать сохранения</translation>
</message>
<message>
<location filename="profilesdialog.ui" line="162"/>
@@ -3708,13 +3958,13 @@ p, li { white-space: pre-wrap; }
<message>
<location filename="profilesdialog.cpp" line="61"/>
<source>Archive invalidation isn&apos;t required for this game.</source>
- <translation type="unfinished"></translation>
+ <translation>Инвалидация не требуется для этой игры.</translation>
</message>
<message>
<location filename="profilesdialog.cpp" line="99"/>
<location filename="profilesdialog.cpp" line="144"/>
<source>failed to create profile: %1</source>
- <translation type="unfinished"></translation>
+ <translation>не удалось создать профиль: %1</translation>
</message>
<message>
<location filename="profilesdialog.cpp" line="152"/>
@@ -3724,277 +3974,359 @@ p, li { white-space: pre-wrap; }
<message>
<location filename="profilesdialog.cpp" line="152"/>
<source>Please enter a name for the new profile</source>
- <translation type="unfinished"></translation>
+ <translation>Введите имя нового профиля</translation>
</message>
<message>
- <location filename="profilesdialog.cpp" line="160"/>
+ <location filename="profilesdialog.cpp" line="162"/>
<source>failed to copy profile: %1</source>
+ <translation>не удалось скопировать профиль: %1</translation>
+ </message>
+ <message>
+ <location filename="profilesdialog.cpp" line="165"/>
+ <source>Invalid name</source>
+ <translation type="unfinished">Недопустимое имя</translation>
+ </message>
+ <message>
+ <location filename="profilesdialog.cpp" line="165"/>
+ <source>Invalid profile name</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profilesdialog.cpp" line="167"/>
+ <location filename="profilesdialog.cpp" line="172"/>
<source>Confirm</source>
- <translation type="unfinished">Подтвердить</translation>
+ <translation>Подтверждение</translation>
</message>
<message>
- <location filename="profilesdialog.cpp" line="167"/>
- <source>Are you sure you want to remove this profile?</source>
+ <location filename="profilesdialog.cpp" line="172"/>
+ <source>Are you sure you want to remove this profile (including local savegames if any)?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profilesdialog.cpp" line="196"/>
- <source>Rename Profile</source>
+ <location filename="profilesdialog.cpp" line="182"/>
+ <source>Profile broken</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profilesdialog.cpp" line="196"/>
- <source>New Name</source>
+ <location filename="profilesdialog.cpp" line="183"/>
+ <source>This profile you&apos;re about to delete seems to be broken or the path is invalid. I&apos;m about to delete the following folder: &quot;%1&quot;. Proceed?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profilesdialog.cpp" line="233"/>
+ <source>Are you sure you want to remove this profile?</source>
+ <translation type="obsolete">Вы действительно хотите удалить этот профиль?</translation>
+ </message>
+ <message>
+ <location filename="profilesdialog.cpp" line="215"/>
+ <source>Rename Profile</source>
+ <translation>Переименовать профиль</translation>
+ </message>
+ <message>
+ <location filename="profilesdialog.cpp" line="215"/>
+ <source>New Name</source>
+ <translation>Новое имя</translation>
+ </message>
+ <message>
+ <location filename="profilesdialog.cpp" line="252"/>
<source>failed to change archive invalidation state: %1</source>
- <translation type="unfinished"></translation>
+ <translation>не удалось изменить режим инвалидации: %1</translation>
</message>
<message>
- <location filename="profilesdialog.cpp" line="270"/>
+ <location filename="profilesdialog.cpp" line="289"/>
<source>failed to determine if invalidation is active: %1</source>
- <translation type="unfinished"></translation>
+ <translation>не удалось определить активность инвалидации: %1</translation>
</message>
</context>
<context>
<name>QObject</name>
<message>
- <location filename="categories.cpp" line="133"/>
+ <location filename="categories.cpp" line="141"/>
<source>Failed to save custom categories</source>
- <translation type="unfinished"></translation>
+ <translation>Не удалось сохранить пользовательские категории</translation>
</message>
<message>
- <location filename="categories.cpp" line="210"/>
- <location filename="categories.cpp" line="245"/>
- <location filename="categories.cpp" line="255"/>
- <location filename="categories.cpp" line="265"/>
+ <location filename="categories.cpp" line="218"/>
+ <location filename="categories.cpp" line="253"/>
+ <location filename="categories.cpp" line="263"/>
+ <location filename="categories.cpp" line="273"/>
<source>invalid index %1</source>
- <translation type="unfinished">Неверный индекс %1</translation>
+ <translation>неверный индекс %1</translation>
</message>
<message>
- <location filename="categories.cpp" line="276"/>
+ <location filename="categories.cpp" line="284"/>
<source>invalid category id %1</source>
- <translation type="unfinished"></translation>
+ <translation>неверный id категории %1</translation>
+ </message>
+ <message>
+ <location filename="csvbuilder.cpp" line="70"/>
+ <source>invalid field name &quot;%1&quot;</source>
+ <translation>неверное имя поля &quot;%1&quot;</translation>
+ </message>
+ <message>
+ <location filename="csvbuilder.cpp" line="76"/>
+ <source>invalid type for &quot;%1&quot; (should be integer)</source>
+ <translation>неверный тип для &quot;%1&quot; (должно быть целое)</translation>
+ </message>
+ <message>
+ <location filename="csvbuilder.cpp" line="81"/>
+ <source>invalid type for &quot;%1&quot; (should be string)</source>
+ <translation>неверный тип для &quot;%1&quot; (должна быть строка)</translation>
+ </message>
+ <message>
+ <location filename="csvbuilder.cpp" line="86"/>
+ <source>invalid type for &quot;%1&quot; (should be float)</source>
+ <translation>неверный тип для &quot;%1&quot; (должно быть с плавающей запятой)</translation>
+ </message>
+ <message>
+ <location filename="csvbuilder.cpp" line="103"/>
+ <source>no fields set up yet!</source>
+ <translation>установленных полей ещё нет!</translation>
+ </message>
+ <message>
+ <location filename="csvbuilder.cpp" line="140"/>
+ <source>field not set &quot;%1&quot;</source>
+ <translation>поле не установлено &quot;%1&quot;</translation>
+ </message>
+ <message>
+ <location filename="csvbuilder.cpp" line="237"/>
+ <source>invalid character in field &quot;%1&quot;</source>
+ <translation>неверный символ в поле &quot;%1&quot;</translation>
+ </message>
+ <message>
+ <location filename="csvbuilder.cpp" line="240"/>
+ <source>empty field name</source>
+ <translation>пустое имя поля</translation>
+ </message>
+ <message>
+ <location filename="gameinfoimpl.cpp" line="41"/>
+ <source>invalid game type %1</source>
+ <translation>неверный тип игры %1</translation>
</message>
<message>
<location filename="helper.cpp" line="53"/>
<source>helper failed</source>
- <translation type="unfinished"></translation>
+ <translation>сбой помощника</translation>
</message>
<message>
<location filename="helper.cpp" line="69"/>
<location filename="helper.cpp" line="90"/>
<source>failed to determine account name</source>
- <translation type="unfinished"></translation>
+ <translation>не удалось определить имя аккаунта</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="63"/>
+ <location filename="installationmanager.cpp" line="64"/>
<location filename="selfupdater.cpp" line="52"/>
<source>invalid 7-zip32.dll: %1</source>
- <translation type="unfinished"></translation>
+ <translation>неверный 7-zip32.dll: %1</translation>
</message>
<message>
<location filename="loadmechanism.cpp" line="50"/>
<source>failed to open %1: %2</source>
- <translation type="unfinished"></translation>
+ <translation>не удалось открыть %1: %2</translation>
</message>
<message>
<location filename="loadmechanism.cpp" line="104"/>
<location filename="loadmechanism.cpp" line="113"/>
<source>%1 not found</source>
- <translation type="unfinished"></translation>
+ <translation>%1 не найден</translation>
</message>
<message>
<location filename="loadmechanism.cpp" line="138"/>
<source>Failed to delete %1</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Не удалось удалить %1</translation>
</message>
<message>
<location filename="loadmechanism.cpp" line="144"/>
<source>Failed to deactivate script extender loading</source>
- <translation type="unfinished"></translation>
+ <translation>Не удалось отключить загрузку расширителя скриптов</translation>
</message>
<message>
<location filename="loadmechanism.cpp" line="165"/>
<source>Failed to remove %1: %2</source>
- <translation type="unfinished"></translation>
+ <translation>Не удалось удалить %1: %2</translation>
</message>
<message>
<location filename="loadmechanism.cpp" line="167"/>
<location filename="loadmechanism.cpp" line="260"/>
<source>Failed to rename %1 to %2</source>
- <translation type="unfinished"></translation>
+ <translation>Не удалось переименовать %1 в %2</translation>
</message>
<message>
<location filename="loadmechanism.cpp" line="175"/>
<source>Failed to deactivate proxy-dll loading</source>
- <translation type="unfinished"></translation>
+ <translation>Не удалось отключить загрузку proxy-dll</translation>
</message>
<message>
<location filename="loadmechanism.cpp" line="209"/>
<location filename="loadmechanism.cpp" line="243"/>
<location filename="loadmechanism.cpp" line="263"/>
<source>Failed to copy %1 to %2</source>
- <translation type="unfinished"></translation>
+ <translation>Не удалось скопировать %1 в %2</translation>
</message>
<message>
<location filename="loadmechanism.cpp" line="214"/>
<source>Failed to set up script extender loading</source>
- <translation type="unfinished"></translation>
+ <translation>Не удалось установить загрузку расширителя скриптов</translation>
</message>
<message>
<location filename="loadmechanism.cpp" line="240"/>
<source>Failed to delete old proxy-dll %1</source>
- <translation type="unfinished"></translation>
+ <translation>Не удалось удалить старый proxy-dll %1</translation>
</message>
<message>
<location filename="loadmechanism.cpp" line="256"/>
<source>Failed to overwrite %1</source>
- <translation type="unfinished"></translation>
+ <translation>Не удалось заменить %1</translation>
</message>
<message>
<location filename="loadmechanism.cpp" line="268"/>
<source>Failed to set up proxy-dll loading</source>
- <translation type="unfinished"></translation>
+ <translation>Не удалось установить загрузку proxy-dll</translation>
</message>
<message>
- <location filename="profile.cpp" line="93"/>
- <source>&quot;%1&quot; is missing</source>
- <translation type="unfinished"></translation>
+ <location filename="main.cpp" line="139"/>
+ <source>Permissions required</source>
+ <translation>Требуются права доступа</translation>
</message>
<message>
- <location filename="main.cpp" line="134"/>
- <source>Permissions required</source>
- <translation type="unfinished"></translation>
+ <source>The current user account doesn&apos;t have the required access rights to run Mod Organizer. The neccessary changes can be made automatically (the MO directory will be made writable for the current user account). You will be asked to run &quot;helper.exe&quot; with administrative rights).</source>
+ <translation type="obsolete">Текущий аккаунт пользователя не имеет необходимых прав для запуска Mod Organizer. Необходимые изменения могут быть сделаны автоматически (каталог MO будет установлен записываемым для текущего аккаунта пользователя). Вам будет предложено запустить &quot;helper.exe&quot; с правами администратора.</translation>
</message>
<message>
- <location filename="main.cpp" line="234"/>
- <location filename="main.cpp" line="272"/>
- <source>Woops</source>
+ <location filename="main.cpp" line="140"/>
+ <source>The current user account doesn&apos;t have the required access rights to run Mod Organizer. The neccessary changes can be made automatically (the MO directory will be made writable for the current user account). You will be asked to run &quot;helper.exe&quot; with administrative rights.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="main.cpp" line="135"/>
- <source>The current user account doesn&apos;t have the required access rights to run Mod Organizer. The neccessary changes can be made automatically (the MO directory will be made writable for the current user account). You will be asked to run &quot;helper.exe&quot; with administrative rights).</source>
- <translation type="unfinished"></translation>
+ <location filename="main.cpp" line="231"/>
+ <location filename="main.cpp" line="269"/>
+ <source>Woops</source>
+ <translation>Упс</translation>
</message>
<message>
- <location filename="main.cpp" line="235"/>
+ <location filename="main.cpp" line="232"/>
<source>ModOrganizer has crashed! Should a diagnostic file be created? If you send me this file (%1) to sherb@gmx.net, the bug is a lot more likely to be fixed. Please include a short description of what you were doing when the crash happened</source>
- <translation type="unfinished"></translation>
+ <translation>Mod Organizer вышел из строя! Нужно ли создать диагностический файл? Если вы вышлите файл (%1) по адресу sherb@gmx.net, ошибка с намного большей вероятностью будет исправлена. Пожалуйста, добавьте краткое описание своих действий, перед тем, как произошла ошибка</translation>
</message>
<message>
- <location filename="main.cpp" line="273"/>
+ <location filename="main.cpp" line="270"/>
<source>ModOrganizer has crashed! Unfortunately I was not able to write a diagnostic file: %1</source>
- <translation type="unfinished"></translation>
+ <translation>ModOrganizer вышел из строя! К сожалению не удалось записать диагностический файл: %1</translation>
</message>
<message>
- <location filename="main.cpp" line="335"/>
- <location filename="settings.cpp" line="462"/>
+ <location filename="main.cpp" line="332"/>
+ <location filename="settings.cpp" line="542"/>
<source>Mod Organizer</source>
- <translation type="unfinished"></translation>
+ <translation>Mod Organizer</translation>
</message>
<message>
- <location filename="main.cpp" line="335"/>
+ <location filename="main.cpp" line="332"/>
<source>An instance of Mod Organizer is already running</source>
- <translation type="unfinished"></translation>
+ <translation>Другой экземпляр Mod Organizer уже запущен</translation>
</message>
<message>
- <location filename="main.cpp" line="357"/>
+ <location filename="main.cpp" line="354"/>
<source>No game identified in &quot;%1&quot;. The directory is required to contain the game binary and its launcher.</source>
- <translation type="unfinished"></translation>
+ <translation>Игра не обнаружена в &quot;%1&quot;. Требуется, чтобы папка содержала исполняемые файлы игры.</translation>
</message>
<message>
- <location filename="main.cpp" line="360"/>
- <location filename="main.cpp" line="389"/>
+ <location filename="main.cpp" line="357"/>
+ <location filename="main.cpp" line="386"/>
<source>Please select the game to manage</source>
+ <translation>Выберете игру для управления</translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="412"/>
+ <source>Please select the game edition you have (MO can&apos;t start the game correctly if this is set incorrectly!)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="752"/>
+ <location filename="mainwindow.cpp" line="782"/>
<source>Please use &quot;Help&quot; from the toolbar to get usage instructions to all elements</source>
- <translation type="unfinished"></translation>
+ <translation>Используйте пункт &quot;Справка&quot; на панели инструментов, чтобы получить инструкции по использованию всех элементов.</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1470"/>
- <location filename="mainwindow.cpp" line="3723"/>
+ <location filename="mainwindow.cpp" line="1610"/>
+ <location filename="mainwindow.cpp" line="4216"/>
<source>&lt;Manage...&gt;</source>
- <translation type="unfinished"></translation>
+ <translation>&lt;Управлять...&gt;</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1488"/>
+ <location filename="mainwindow.cpp" line="1628"/>
<source>failed to parse profile %1: %2</source>
- <translation type="unfinished"></translation>
+ <translation>не удалось обработать профиль %1: %2</translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="310"/>
- <location filename="profile.cpp" line="228"/>
+ <location filename="pluginlist.cpp" line="335"/>
+ <location filename="profile.cpp" line="233"/>
<source>failed to find &quot;%1&quot;</source>
- <translation type="unfinished"></translation>
+ <translation>не удалось найти &quot;%1&quot;</translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="467"/>
+ <source>encoding error, please report this as a bug and include the file mo_interface.log!</source>
+ <translation type="obsolete">ошибка кодирования, пожалуйста сообщите об этом баге, включив файл mo_interface.log!</translation>
+ </message>
+ <message>
+ <location filename="pluginlist.cpp" line="491"/>
<source>failed to access %1</source>
- <translation type="unfinished"></translation>
+ <translation>не удалось получить доступ к %1</translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="481"/>
+ <location filename="pluginlist.cpp" line="505"/>
<source>failed to set file time %1</source>
- <translation type="unfinished"></translation>
+ <translation>не удалось изменить дату модификации для %1</translation>
</message>
<message>
- <location filename="profile.cpp" line="67"/>
+ <location filename="profile.cpp" line="70"/>
<source>failed to create %1</source>
- <translation type="unfinished"></translation>
+ <translation>не удалось создать %1</translation>
+ </message>
+ <message>
+ <location filename="profile.cpp" line="96"/>
+ <source>&quot;%1&quot; is missing</source>
+ <translation>&quot;%1&quot; отсутствует</translation>
</message>
<message>
<location filename="profilesdialog.cpp" line="80"/>
<source>Before you can use ModOrganizer, you need to create at least one profile. ATTENTION: Run the game at least once before creating a profile!</source>
- <translation type="unfinished"></translation>
+ <translation>Перед тем, как использовать Mod Organizer, вам нужно создать хотя бы один профиль. ВНИМАНИЕ: Перед созданием профиля запустите игру хотя бы один раз!</translation>
</message>
<message>
<location filename="report.cpp" line="33"/>
<location filename="report.cpp" line="36"/>
<source>Error</source>
- <translation type="unfinished"></translation>
+ <translation>Ошибка</translation>
</message>
<message>
<location filename="savegamegamebryo.cpp" line="139"/>
<location filename="savegamegamebryo.cpp" line="198"/>
<location filename="savegamegamebryo.cpp" line="240"/>
<source>wrong file format</source>
- <translation type="unfinished"></translation>
+ <translation>неверный формат файла</translation>
</message>
<message>
<location filename="savegamegamebryo.cpp" line="326"/>
<source>failed to open %1</source>
- <translation type="unfinished"></translation>
+ <translation>не удалось открыть %1</translation>
</message>
<message>
- <location filename="settings.cpp" line="469"/>
+ <location filename="settings.cpp" line="549"/>
<source>Script Extender</source>
- <translation type="unfinished"></translation>
+ <translation>Script Extender</translation>
</message>
<message>
- <location filename="settings.cpp" line="476"/>
+ <location filename="settings.cpp" line="556"/>
<source>Proxy DLL</source>
- <translation type="unfinished"></translation>
+ <translation>Proxy DLL</translation>
</message>
<message>
<location filename="spawn.cpp" line="106"/>
<source>failed to spawn &quot;%1&quot;</source>
- <translation type="unfinished"></translation>
+ <translation>не удалось вызвать &quot;%1&quot;</translation>
</message>
<message>
<location filename="spawn.cpp" line="113"/>
<source>Elevation required</source>
- <translation type="unfinished"></translation>
+ <translation>Требуется повышение прав</translation>
</message>
<message>
<location filename="spawn.cpp" line="114"/>
@@ -4004,71 +4336,36 @@ This is a potential security risk so I highly advice you to investigate if
can be installed to work without elevation.
Start elevated anyway? (you will be asked if you want to allow ModOrganizer.exe to make changes to the system)</source>
- <translation type="unfinished"></translation>
+ <translation>Этот процесс требует повышения прав на запуск.
+Это потенциальный риск для безопасности, поэтому настоятельно рекомендуется изучить
+&quot;%1&quot;
+ на возможность установки без повышения прав.
+
+Запустить с повышенными правами в любом случае? (будет выведен запрос о разрешении ModOrganizer.exe сделать изменения в системе)</translation>
</message>
<message>
- <location filename="spawn.cpp" line="128"/>
+ <location filename="spawn.cpp" line="129"/>
<source>failed to spawn &quot;%1&quot;: %2</source>
- <translation type="unfinished"></translation>
+ <translation>не удалось вызвать &quot;%1&quot;: %2</translation>
</message>
<message>
- <location filename="spawn.cpp" line="137"/>
+ <location filename="spawn.cpp" line="138"/>
<source>&quot;%1&quot; doesn&apos;t exist</source>
- <translation type="unfinished"></translation>
+ <translation>&quot;%1&quot; не существует</translation>
</message>
<message>
- <location filename="spawn.cpp" line="144"/>
+ <location filename="spawn.cpp" line="145"/>
<source>failed to inject dll into &quot;%1&quot;: %2</source>
- <translation type="unfinished"></translation>
+ <translation>не удалось подключить dll к &quot;%1&quot;: %2</translation>
</message>
<message>
- <location filename="spawn.cpp" line="152"/>
+ <location filename="spawn.cpp" line="153"/>
<source>failed to run &quot;%1&quot;</source>
- <translation type="unfinished"></translation>
+ <translation>не удалось запустить &quot;%1&quot;</translation>
</message>
<message>
- <location filename="csvbuilder.cpp" line="70"/>
- <source>invalid field name &quot;%1&quot;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="csvbuilder.cpp" line="76"/>
- <source>invalid type for &quot;%1&quot; (should be integer)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="csvbuilder.cpp" line="81"/>
- <source>invalid type for &quot;%1&quot; (should be string)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="csvbuilder.cpp" line="86"/>
- <source>invalid type for &quot;%1&quot; (should be float)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="csvbuilder.cpp" line="103"/>
- <source>no fields set up yet!</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="csvbuilder.cpp" line="140"/>
- <source>field not set &quot;%1&quot;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="csvbuilder.cpp" line="237"/>
- <source>invalid character in field &quot;%1&quot;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="csvbuilder.cpp" line="240"/>
- <source>empty field name</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="gameinfoimpl.cpp" line="41"/>
- <source>invalid game type %1</source>
+ <location filename="safewritefile.cpp" line="32"/>
+ <source>failed to open temporary file</source>
<translation type="unfinished"></translation>
</message>
</context>
@@ -4077,22 +4374,22 @@ Start elevated anyway? (you will be asked if you want to allow ModOrganizer.exe
<message>
<location filename="queryoverwritedialog.ui" line="14"/>
<source>Mod Exists</source>
- <translation type="unfinished"></translation>
+ <translation>Мод существует</translation>
</message>
<message>
<location filename="queryoverwritedialog.ui" line="45"/>
<source>This mod seems to be installed already. Do you want to add files from this archive (overwriting existing ones) or do you want to completely replace the existing files (old files are deleted)? Alternatively you can install this mod under a different name.</source>
- <translation type="unfinished"></translation>
+ <translation>Кажется, что этот мод уже установлен. Вы хотите добавить файлы из архива (с перезаписью уже существующих) или вам нужно полностью заменить существующие файлы (старые будут удалены)? Как вариант, вы можете установить этот мод под другим именем.</translation>
</message>
<message>
<location filename="queryoverwritedialog.ui" line="63"/>
<source>Keep Backup</source>
- <translation type="unfinished"></translation>
+ <translation>Оставить резервную копию</translation>
</message>
<message>
<location filename="queryoverwritedialog.ui" line="70"/>
<source>Merge</source>
- <translation type="unfinished"></translation>
+ <translation>Объединить</translation>
</message>
<message>
<location filename="queryoverwritedialog.ui" line="77"/>
@@ -4102,7 +4399,7 @@ Start elevated anyway? (you will be asked if you want to allow ModOrganizer.exe
<message>
<location filename="queryoverwritedialog.ui" line="84"/>
<source>Rename</source>
- <translation type="unfinished"></translation>
+ <translation>Переименовать</translation>
</message>
<message>
<location filename="queryoverwritedialog.ui" line="91"/>
@@ -4113,9 +4410,8 @@ Start elevated anyway? (you will be asked if you want to allow ModOrganizer.exe
<context>
<name>QuestionBoxMemory</name>
<message>
- <location filename="questionboxmemory.ui" line="86"/>
<source>Remember selection</source>
- <translation type="unfinished"></translation>
+ <translation type="obsolete">Запомнить выбор</translation>
</message>
</context>
<context>
@@ -4123,27 +4419,27 @@ Start elevated anyway? (you will be asked if you want to allow ModOrganizer.exe
<message>
<location filename="savegameinfowidget.ui" line="39"/>
<source>Save #</source>
- <translation type="unfinished"></translation>
+ <translation>Сохранение №</translation>
</message>
<message>
<location filename="savegameinfowidget.ui" line="51"/>
<source>Character</source>
- <translation type="unfinished"></translation>
+ <translation>Персонаж</translation>
</message>
<message>
<location filename="savegameinfowidget.ui" line="63"/>
<source>Level</source>
- <translation type="unfinished"></translation>
+ <translation>Уровень</translation>
</message>
<message>
<location filename="savegameinfowidget.ui" line="75"/>
<source>Location</source>
- <translation type="unfinished"></translation>
+ <translation>Местоположение</translation>
</message>
<message>
<location filename="savegameinfowidget.ui" line="87"/>
<source>Date</source>
- <translation type="unfinished"></translation>
+ <translation>Дата</translation>
</message>
</context>
<context>
@@ -4151,7 +4447,7 @@ Start elevated anyway? (you will be asked if you want to allow ModOrganizer.exe
<message>
<location filename="savegameinfowidgetgamebryo.cpp" line="41"/>
<source>Missing ESPs</source>
- <translation type="unfinished"></translation>
+ <translation>Отсутствующие ESP</translation>
</message>
</context>
<context>
@@ -4159,17 +4455,17 @@ Start elevated anyway? (you will be asked if you want to allow ModOrganizer.exe
<message>
<location filename="savetextasdialog.ui" line="14"/>
<source>Dialog</source>
- <translation type="unfinished"></translation>
+ <translation>Диалог</translation>
</message>
<message>
<location filename="savetextasdialog.ui" line="32"/>
<source>Copy To Clipboard</source>
- <translation type="unfinished"></translation>
+ <translation>Копировать в буфер обмена</translation>
</message>
<message>
<location filename="savetextasdialog.ui" line="39"/>
<source>Save As...</source>
- <translation type="unfinished"></translation>
+ <translation>Сохранить как...</translation>
</message>
<message>
<location filename="savetextasdialog.ui" line="59"/>
@@ -4179,17 +4475,17 @@ Start elevated anyway? (you will be asked if you want to allow ModOrganizer.exe
<message>
<location filename="savetextasdialog.cpp" line="36"/>
<source>Save CSV</source>
- <translation type="unfinished"></translation>
+ <translation>Сохранить CSV</translation>
</message>
<message>
<location filename="savetextasdialog.cpp" line="36"/>
<source>Text Files</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Текстовые файлы</translation>
</message>
<message>
<location filename="savetextasdialog.cpp" line="40"/>
<source>failed to open &quot;%1&quot; for writing</source>
- <translation type="unfinished"></translation>
+ <translation>не удалось открыть &quot;%1&quot; для записи</translation>
</message>
</context>
<context>
@@ -4197,7 +4493,7 @@ Start elevated anyway? (you will be asked if you want to allow ModOrganizer.exe
<message>
<location filename="selectiondialog.ui" line="14"/>
<source>Select</source>
- <translation type="unfinished"></translation>
+ <translation>Выбрать</translation>
</message>
<message>
<location filename="selectiondialog.ui" line="23"/>
@@ -4215,103 +4511,107 @@ Start elevated anyway? (you will be asked if you want to allow ModOrganizer.exe
<message>
<location filename="selfupdater.cpp" line="66"/>
<source>archive.dll not loaded: &quot;%1&quot;</source>
- <translation type="unfinished"></translation>
+ <translation>archive.dll не загружен: &quot;%1&quot;</translation>
</message>
<message>
<location filename="selfupdater.cpp" line="116"/>
- <location filename="selfupdater.cpp" line="140"/>
- <location filename="selfupdater.cpp" line="269"/>
- <location filename="selfupdater.cpp" line="417"/>
+ <location filename="selfupdater.cpp" line="139"/>
+ <location filename="selfupdater.cpp" line="268"/>
+ <location filename="selfupdater.cpp" line="415"/>
<source>Update</source>
- <translation type="unfinished"></translation>
+ <translation>Обновление</translation>
</message>
<message>
<location filename="selfupdater.cpp" line="117"/>
<source>An update is available (newest version: %1), do you want to install it?</source>
- <translation type="unfinished"></translation>
+ <translation>Доступно обновление (последняя версия: %1). Вы хотите установить его?</translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="141"/>
+ <location filename="selfupdater.cpp" line="140"/>
<source>Download in progress</source>
- <translation type="unfinished"></translation>
+ <translation>Загрузка в процессе</translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="196"/>
+ <location filename="selfupdater.cpp" line="195"/>
<source>Download failed: %1</source>
- <translation type="unfinished"></translation>
+ <translation>Загрузка не удалась: %1</translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="207"/>
+ <location filename="selfupdater.cpp" line="206"/>
<source>Failed to install update: %1</source>
- <translation type="unfinished"></translation>
+ <translation>Не удалось установить обновление: %1</translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="228"/>
+ <location filename="selfupdater.cpp" line="227"/>
<source>failed to open archive &quot;%1&quot;: %2</source>
- <translation type="unfinished">Не удалось открыть архив &quot;%1&quot;: %2</translation>
+ <translation>не удалось открыть архив &quot;%1&quot;: %2</translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="251"/>
+ <location filename="selfupdater.cpp" line="250"/>
<source>failed to move outdated files: %1. Please update manually.</source>
- <translation type="unfinished"></translation>
+ <translation>не удалось переместить устаревшие файлы: %1. Пожалуйста, обновите вручную.</translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="269"/>
+ <location filename="selfupdater.cpp" line="268"/>
<source>Update installed, Mod Organizer will now be restarted.</source>
- <translation type="unfinished"></translation>
+ <translation>Обновление установлено, Mod Organizer будет перезапущен.</translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="297"/>
+ <location filename="selfupdater.cpp" line="296"/>
<source>Error</source>
- <translation type="unfinished"></translation>
+ <translation>Ошибка</translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="353"/>
+ <location filename="selfupdater.cpp" line="351"/>
<source>Failed to parse response. Please report this as a bug and include the file mo_interface.log.</source>
- <translation type="unfinished"></translation>
+ <translation>Не удалось обработать запрос. Пожалуйста, сообщите об этом баге, включив в сообщение файл mo_interface.log.</translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="418"/>
+ <location filename="selfupdater.cpp" line="416"/>
<source>No incremental update available for this version, the complete package needs to be downloaded (%1 kB)</source>
- <translation type="unfinished"></translation>
+ <translation>Нет дополнительных обновлений для этой версии, необходимо загрузить полный пакет (%1 kB)</translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="427"/>
+ <location filename="selfupdater.cpp" line="425"/>
<source>no file for update found. Please update manually.</source>
- <translation type="unfinished"></translation>
+ <translation>не найдено файла для обновления. Пожалуйста, обновите вручную.</translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="461"/>
- <source>No download server available. Please try again later.</source>
- <translation type="unfinished">Сервер недоступен. Попробуйте позже.</translation>
+ <location filename="selfupdater.cpp" line="440"/>
+ <source>Failed to retrieve update information: %1</source>
+ <translation>Не удалось получить сведения об обновлении: %1</translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="441"/>
- <source>Failed to retrieve update information: %1</source>
- <translation type="unfinished"></translation>
+ <location filename="selfupdater.cpp" line="460"/>
+ <source>No download server available. Please try again later.</source>
+ <translation>Нет доступных для загрузки серверов. Пожалуйста, попробуйте позже.</translation>
</message>
</context>
<context>
<name>Settings</name>
<message>
- <location filename="settings.cpp" line="278"/>
<source>setting for invalid plugin &quot;%1&quot; requested</source>
- <translation type="unfinished"></translation>
+ <translation type="obsolete">запрошена настройка для недействительного плагина &quot;%1&quot;</translation>
</message>
<message>
- <location filename="settings.cpp" line="282"/>
<source>invalid setting &quot;%1&quot; requested for plugin &quot;%2&quot;</source>
+ <translation type="obsolete">неверная настройка &quot;%1&quot; запрошена для плагина &quot;%2&quot;</translation>
+ </message>
+ <message>
+ <location filename="settings.cpp" line="320"/>
+ <location filename="settings.cpp" line="339"/>
+ <source>attempt to store setting for unknown plugin &quot;%1&quot;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settings.cpp" line="573"/>
+ <location filename="settings.cpp" line="660"/>
<source>Confirm</source>
- <translation type="unfinished">Подтвердить</translation>
+ <translation>Подтверждение</translation>
</message>
<message>
- <location filename="settings.cpp" line="573"/>
+ <location filename="settings.cpp" line="660"/>
<source>Changing the mod directory affects all your profiles! Mods not present (or named differently) in the new location will be disabled in all profiles. There is no way to undo this unless you backed up your profiles manually. Proceed?</source>
- <translation type="unfinished"></translation>
+ <translation>Изменение каталога для модов отразится на всех ваших профилях. Нельзя будет отменить это, если только вы не сохранили резервные копии ваших профилей вручную. Продолжить?</translation>
</message>
</context>
<context>
@@ -4319,22 +4619,22 @@ Start elevated anyway? (you will be asked if you want to allow ModOrganizer.exe
<message>
<location filename="settingsdialog.ui" line="14"/>
<source>Settings</source>
- <translation type="unfinished"></translation>
+ <translation>Настройки</translation>
</message>
<message>
<location filename="settingsdialog.ui" line="24"/>
<source>General</source>
- <translation type="unfinished"></translation>
+ <translation>Общие</translation>
</message>
<message>
<location filename="settingsdialog.ui" line="32"/>
<source>Language</source>
- <translation type="unfinished"></translation>
+ <translation>Язык</translation>
</message>
<message>
<location filename="settingsdialog.ui" line="39"/>
<source>The display language</source>
- <translation type="unfinished"></translation>
+ <translation>Используемый язык</translation>
</message>
<message>
<location filename="settingsdialog.ui" line="42"/>
@@ -4343,126 +4643,131 @@ Start elevated anyway? (you will be asked if you want to allow ModOrganizer.exe
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;The display language. This will only displaye languages for which you have a translation installed.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <translation type="unfinished"></translation>
+ <translation>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
+p, li { white-space: pre-wrap; }
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Используемый язык. Будут отображены языки, локализация на которые имеется.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<location filename="settingsdialog.ui" line="57"/>
<source>Style</source>
- <translation type="unfinished"></translation>
+ <translation>Стиль</translation>
</message>
<message>
<location filename="settingsdialog.ui" line="64"/>
<source>graphical style</source>
- <translation type="unfinished"></translation>
+ <translation>графический стиль</translation>
</message>
<message>
<location filename="settingsdialog.ui" line="67"/>
<source>graphical style of the MO user interface</source>
- <translation type="unfinished"></translation>
+ <translation>графический стиль пользовательского интерфейса MO</translation>
</message>
<message>
<location filename="settingsdialog.ui" line="78"/>
<source>Log Level</source>
- <translation type="unfinished"></translation>
+ <translation>Уровень журналирования</translation>
</message>
<message>
<location filename="settingsdialog.ui" line="85"/>
<source>Decides the amount of data printed to &quot;ModOrganizer.log&quot;</source>
- <translation type="unfinished"></translation>
+ <translation>Определяет количество данных, выводимых в &quot;ModOrganizer.log&quot;</translation>
</message>
<message>
<location filename="settingsdialog.ui" line="88"/>
<source>Decides the amount of data printed to &quot;ModOrganizer.log&quot;.
&quot;Debug&quot; produces very useful information for finding problems. There is usually no noteworthy performance impact but the file may become rather large. If this is a problem you may prefer the &quot;Info&quot; level for regluar use. On the &quot;Error&quot; level the log file usually remains empty.</source>
- <translation type="unfinished"></translation>
+ <translation>Определяет количество данных, выводимых в &quot;ModOrganizer.log&quot;.
+&quot;Отладка&quot; позволяет получить очень полезную для поиска проблем информацию. Влияния на производительность не замечено, однако размер лога может быть довольно большим. Если это проблема, то вы можете предпочесть для обычного использования уровень &quot;Информация&quot;. На уровне &quot;Ошибка&quot; лог обычно остается пустым.</translation>
</message>
<message>
<location filename="settingsdialog.ui" line="93"/>
<source>Debug</source>
- <translation type="unfinished"></translation>
+ <translation>Отладка</translation>
</message>
<message>
<location filename="settingsdialog.ui" line="98"/>
<source>Info</source>
- <translation type="unfinished"></translation>
+ <translation>Информация</translation>
</message>
<message>
<location filename="settingsdialog.ui" line="103"/>
<source>Error</source>
- <translation type="unfinished"></translation>
+ <translation>Ошибка</translation>
</message>
<message>
<location filename="settingsdialog.ui" line="113"/>
<source>Advanced</source>
- <translation type="unfinished"></translation>
+ <translation>Продвинутый</translation>
</message>
<message>
<location filename="settingsdialog.ui" line="125"/>
<location filename="settingsdialog.ui" line="128"/>
<source>Directory where downloads are stored.</source>
- <translation type="unfinished"></translation>
+ <translation>Каталог, в котором хранятся загрузки.</translation>
</message>
<message>
<location filename="settingsdialog.ui" line="148"/>
<source>Mod Directory</source>
- <translation type="unfinished"></translation>
+ <translation>Каталог модов</translation>
</message>
<message>
<location filename="settingsdialog.ui" line="155"/>
<source>Directory where mods are stored.</source>
- <translation type="unfinished"></translation>
+ <translation>Каталог, в котором хранятся моды.</translation>
</message>
<message>
<location filename="settingsdialog.ui" line="158"/>
<source>Directory where mods are stored. Please note that changing this will break all associations of profiles with mods that don&apos;t exist in the new location (with the same name).</source>
- <translation type="unfinished"></translation>
+ <translation>Каталог, в котором хранятся моды. Имейте ввиду, эти изменения нарушат все ассоциации профилей с несуществующими в новом расположении модами (с тем же именем).</translation>
</message>
<message>
<location filename="settingsdialog.ui" line="172"/>
<source>Download Directory</source>
- <translation type="unfinished"></translation>
+ <translation>Каталог для загрузки</translation>
</message>
<message>
<location filename="settingsdialog.ui" line="179"/>
<source>Cache Directory</source>
- <translation type="unfinished"></translation>
+ <translation>Каталог кэша</translation>
</message>
<message>
<location filename="settingsdialog.ui" line="205"/>
<source>Reset stored information from dialogs.</source>
- <translation type="unfinished"></translation>
+ <translation>Сброс хранимой информации о диалогах.</translation>
</message>
<message>
<location filename="settingsdialog.ui" line="208"/>
<source>This will make all dialogs show up again where you checked the &quot;Remember selection&quot;-box.</source>
- <translation type="unfinished"></translation>
+ <translation>Заставит снова появиться все диалоги, в которых вы ранее отмечали флажок &quot;Запомнить выбор&quot;.</translation>
</message>
<message>
<location filename="settingsdialog.ui" line="211"/>
<source>Reset Dialogs</source>
- <translation type="unfinished"></translation>
+ <translation>Сбросить диалоги</translation>
</message>
<message>
<location filename="settingsdialog.ui" line="231"/>
<location filename="settingsdialog.ui" line="234"/>
<source>Modify the categories available to arrange your mods.</source>
- <translation type="unfinished"></translation>
+ <translation>Изменение категорий, доступных для упорядочивания ваших модов.</translation>
</message>
<message>
<location filename="settingsdialog.ui" line="237"/>
<source>Configure Mod Categories</source>
- <translation type="unfinished"></translation>
+ <translation>Настроить категории модов</translation>
</message>
<message>
<location filename="settingsdialog.ui" line="245"/>
<location filename="settingsdialog.ui" line="261"/>
<source>Nexus</source>
- <translation type="unfinished"></translation>
+ <translation>Nexus</translation>
</message>
<message>
<location filename="settingsdialog.ui" line="251"/>
<source>Allows automatic log-in when the Nexus-Page for the game is clicked.</source>
- <translation type="unfinished"></translation>
+ <translation>Позволяет автоматически входить, кликнув на Nexus-страницу игры.</translation>
</message>
<message>
<location filename="settingsdialog.ui" line="254"/>
@@ -4471,75 +4776,133 @@ p, li { white-space: pre-wrap; }
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Allows automatic log-in when the Nexus-Page for the game is clicked. Please note that the obfuscation with which the password is stored in modorganizer.ini is not very strong. If you&apos;re worried someone might steal your password, don&apos;t store it here.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <translation type="unfinished"></translation>
+ <translation>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
+p, li { white-space: pre-wrap; }
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Позволяет автоматически входить, кликнув на Nexus-страницу игры. Обратите внимание, что шифрование с которым пароль хранится в файле modorganizer.ini не очень сильное. Если вы беспокоитесь, что кто-нибудь может украсть ваш пароль, не храните его здесь.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
<location filename="settingsdialog.ui" line="270"/>
<source>If checked and if correct credentials are entered below, log-in to Nexus (for browsing and downloading) is automatic.</source>
- <translation type="unfinished"></translation>
+ <translation>Если отмечено и данные ниже введены правильно, входит на Nexus (для просмотра и загрузки) автоматически.</translation>
</message>
<message>
<location filename="settingsdialog.ui" line="273"/>
<source>Automatically Log-In to Nexus</source>
- <translation type="unfinished"></translation>
+ <translation>Автоматический вход на Nexus</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="285"/>
+ <location filename="settingsdialog.ui" line="282"/>
<source>Username</source>
<translation type="unfinished">Имя пользователя</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="299"/>
+ <location filename="settingsdialog.ui" line="296"/>
<source>Password</source>
<translation type="unfinished">Пароль</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="407"/>
- <source>Plugins</source>
+ <location filename="settingsdialog.ui" line="318"/>
+ <source>Disable automatic internet features</source>
+ <translation>Отключить автоматические возможности интернет</translation>
+ </message>
+ <message>
+ <location filename="settingsdialog.ui" line="321"/>
+ <source>Disable automatic internet features. This does not affect features that are explicitly invoked by the user (like checking mods for updates, endorsing, opening the web browser)</source>
+ <translation>Отключает автоматические возможности интернет. Это не подействует на функции, которые явно вызваны пользователем (проверка модов на обновления, одобрение, открытие в браузере)</translation>
+ </message>
+ <message>
+ <location filename="settingsdialog.ui" line="324"/>
+ <source>Offline Mode</source>
+ <translation>Автономный режим</translation>
+ </message>
+ <message>
+ <location filename="settingsdialog.ui" line="331"/>
+ <source>Use a proxy for network connections.</source>
+ <translation>Использовать прокси для соединения с сетью</translation>
+ </message>
+ <message>
+ <location filename="settingsdialog.ui" line="334"/>
+ <source>Use a proxy for network connections. This uses the system-wide settings which can be configured in Internet Explorer. Please note that MO will start up a few seconds slower on some systems when using a proxy.</source>
+ <translation>Использовать прокси для соединения с сетью. Используются системные параметры, настраиваемые в Internet Explorer. Обратите внимание, что MO запустится на несколько секунд медленнее на некоторых системах, когда используется прокси.</translation>
+ </message>
+ <message>
+ <location filename="settingsdialog.ui" line="337"/>
+ <source>Use HTTP Proxy (Uses System Settings)</source>
+ <translation>Использовать HTTP Proxy (Используются системные настройки)</translation>
+ </message>
+ <message>
+ <location filename="settingsdialog.ui" line="346"/>
+ <source>Associate with &quot;Download with manager&quot; links</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="427"/>
- <source>Author:</source>
+ <location filename="settingsdialog.ui" line="375"/>
+ <source>Known Servers (updated on download)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="441"/>
+ <source>Known Servers (Dynamically updated every download)</source>
+ <translation type="obsolete">Известные серверы (Динамически обновляется при каждой загрузке)</translation>
+ </message>
+ <message>
+ <location filename="settingsdialog.ui" line="396"/>
+ <source>Preferred Servers (Drag &amp; Drop)</source>
+ <translation>Предпочитаемые серверы (Используйте перетаскивание)</translation>
+ </message>
+ <message>
+ <location filename="settingsdialog.ui" line="431"/>
+ <source>Plugins</source>
+ <translation>Плагины</translation>
+ </message>
+ <message>
+ <location filename="settingsdialog.ui" line="453"/>
+ <source>Author:</source>
+ <translation>Автор:</translation>
+ </message>
+ <message>
+ <location filename="settingsdialog.ui" line="467"/>
<source>Version:</source>
- <translation type="unfinished"></translation>
+ <translation>Версия:</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="455"/>
+ <location filename="settingsdialog.ui" line="481"/>
<source>Description:</source>
- <translation type="unfinished"></translation>
+ <translation>Описание:</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="493"/>
+ <location filename="settingsdialog.ui" line="519"/>
<source>Key</source>
- <translation type="unfinished"></translation>
+ <translation>Клавиша</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="498"/>
+ <location filename="settingsdialog.ui" line="524"/>
<source>Value</source>
+ <translation>Значение</translation>
+ </message>
+ <message>
+ <location filename="settingsdialog.ui" line="536"/>
+ <source>Blacklisted Plugins (use &lt;del&gt; to remove):</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="509"/>
+ <location filename="settingsdialog.ui" line="547"/>
<source>Workarounds</source>
- <translation type="unfinished"></translation>
+ <translation>Способы обхода</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="517"/>
+ <location filename="settingsdialog.ui" line="555"/>
<source>Steam App ID</source>
- <translation type="unfinished"></translation>
+ <translation>ID приложения Steam</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="537"/>
+ <location filename="settingsdialog.ui" line="575"/>
<source>The Steam AppID for your game</source>
- <translation type="unfinished"></translation>
+ <translation>ID в Steam для вашей игры</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="540"/>
+ <location filename="settingsdialog.ui" line="578"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
@@ -4552,161 +4915,145 @@ p, li { white-space: pre-wrap; }
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;3. right-click on the newly created shortcut on your desktop and select &lt;/span&gt;&lt;span style=&quot; font-size:8pt; font-weight:600;&quot;&gt;Properties&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;4. in the URL-field you should see something like this: &lt;/span&gt;&lt;span style=&quot; font-size:8pt; font-style:italic;&quot;&gt;steam://rungameid/22380&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;22380 is the id you&apos;re looking for.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <translation type="unfinished"></translation>
+ <translation>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
+p, li { white-space: pre-wrap; }
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;ID приложения в Steam необходим для прямого запуска некоторых игр. Для Skyrim, если он не установлен или неверен, механизм загрузки &amp;quot;Mod Organizer&amp;quot; может работать неправильно.&lt;/span&gt;&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Предустановленный ID в большинстве случаев должен быть установлен.&lt;/span&gt;&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Если вы думаете, что у вас другая версия (GotY или другое), следуйте следующей инструкции по установке id:&lt;/span&gt;&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;1. Перейдите в библиотеку игр Steam.&lt;/span&gt;&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;2. Сделайте правый клик по игре, id которой нужен и выберете &lt;/span&gt;&lt;span style=&quot; font-size:8pt; font-weight:600;&quot;&gt;Создать ярлык на рабочем столе&lt;/span&gt;&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;3. Сделайте правый клик на созданном на рабочем столе ярлыке и выберете &lt;/span&gt;&lt;span style=&quot; font-size:8pt; font-weight:600;&quot;&gt;Свойства&lt;/span&gt;&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;4. в поле URL вы должны увидеть что-то вроде: &lt;/span&gt;&lt;span style=&quot; font-size:8pt; font-style:italic;&quot;&gt;steam://rungameid/22380&lt;/span&gt;&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;22380 это и есть id, который вам нужен.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="571"/>
+ <location filename="settingsdialog.ui" line="609"/>
<source>Load Mechanism</source>
- <translation type="unfinished"></translation>
+ <translation>Механизм загрузки</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="591"/>
+ <location filename="settingsdialog.ui" line="629"/>
<source>Select loading mechanism. See help for details.</source>
- <translation type="unfinished"></translation>
+ <translation>Выберете механизм загрузки. Смотрите справку для подробностей.</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="611"/>
+ <location filename="settingsdialog.ui" line="632"/>
+ <source>Mod Organizer needs a dll to be injected into the game so all mods are visible to it.
+There are several means to do this:
+*Mod Organizer* (default) In this mode the Mod Organizer itself injects the dll. The disadvantage is that you always have to start the game through MO or a link created by it.
+*Script Extender* In this mode, MO is installed as a Script Extender (obse, fose, nvse, skse) plugin.
+*Proxy DLL* In this mode, MO replaces one of the game&apos;s dlls with one that loads MO (and the original dll of course). This will ONLY work with Steam games and it has only been tested with Skyrim. Please use this only if the other mechanisms don&apos;t work.
+
+If you use the Steam version of Oblivion the default will NOT work. In this case, please install obse and use &quot;Script Extender&quot; as the load mechanism. Also you can then not start Oblivion from MO. Instead, use MO only to set up your mods, then quit and start Oblivion through Steam.</source>
+ <translation>Mod Organizer необходимо подключить dll к игре, чтобы все моды были видны в ней.
+Есть несколько способов сделать это:
+*Mod Organizer* (по умолчанию) В этом режиме Mod Organizer сам подключает dll. Недостатком этого является то, что вам необходимо всегда начинать игру через MO или созданный им ярлык.
+*Script Extender* В этом режиме, MO установлен как плагин Script Extender (obse, fose, nvse, skse).
+*Proxy DLL* В этом режиме MO заменяет одну из игровых dll игры своей, которая загружает MO и оригинальную игру. Это работает только с играми Steam и тестировалось только на Skyrim. Используйте этот способ только если другие не работают.
+
+Если вы используете Steam-версию Oblivion , способ по умолчанию не работает. В этом случае установите obse и используйте &quot;Script Extender&quot; как механизм загрузки. Также после этого вы не сможете запустить Oblivion из MO, вместо этого используйте MO только для настройки модов и запускайте игру через Steam.</translation>
+ </message>
+ <message>
+ <location filename="settingsdialog.ui" line="649"/>
<source>NMM Version</source>
- <translation type="unfinished"></translation>
+ <translation>Версия NMM</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="631"/>
+ <location filename="settingsdialog.ui" line="669"/>
<source>The Version of Nexus Mod Manager to impersonate.</source>
- <translation type="unfinished"></translation>
+ <translation>Версия Nexus Mod Manager для представления.</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="634"/>
+ <location filename="settingsdialog.ui" line="672"/>
<source>Mod Organizer uses an API provided by the Nexus to provide features like checking for updates and downloading files. Unfortunately this API has not been made available officially to third party tools like MO so we have to impersonate the Nexus Mod Manager to be allowed in.
On top of this Nexus has used the client identification to lock out outdated versions of NMM to force users to update. This means that MO also needs to impersonate the new version of NMM even if MO doesn&apos;t need an update. Therefore you can configure the version to identify as here.
Please note that MO does identify itself as MO to the webserver, it&apos;s not lying about what it is. It is merely adding a &quot;compatible&quot; NMM version to the user agent.
tl;dr-version: If Nexus-features don&apos;t work, insert the current version number of NMM here and try again.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settingsdialog.ui" line="719"/>
- <source>These are workarounds for problems with Mod Organizer. Please make sure you read the help text before changing anything here.</source>
- <translation type="unfinished"></translation>
+ <translation>Mod Organizer использует API Nexus , для предоставления таких возможностей, как проверка обновлений и загрузка файлов. К сожалению этот API не был сделан официально доступным прочим утилитам, вроде MO, так что нужно представляться как Nexus Mod Manager, чтобы получить доступ.
+Помимо этого Nexus использует идентификатор версий, чтобы блокировать устаревшии версии NMM и принудительно заставить пользователей обновиться. Это значит, что MO также нужно представляться последней версией NMM, даже если MO не нуждается в обновлении. Поэтому вы можете настроить здесь также и версию для идентификации.
+Обратите внимание, что MO идентифицирует себя вебсерверу как MO, он не подделывает данные о себе. Он всего лишь добавляется как &quot;совместимая&quot; с NMM версия, в поле user agent.
+
+tl;dr-версия: Если возможности Nexus не работают, вставьте здесь текущую версию NMM и повторите попытку.</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="656"/>
+ <location filename="settingsdialog.ui" line="694"/>
<source>Enforces that inactive ESPs and ESMs are never loaded.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settingsdialog.ui" line="321"/>
- <source>Disable automatic internet features</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settingsdialog.ui" line="324"/>
- <source>Disable automatic internet features. This does not affect features that are explicitly invoked by the user (like checking mods for updates, endorsing, opening the web browser)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settingsdialog.ui" line="327"/>
- <source>Offline Mode</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settingsdialog.ui" line="334"/>
- <source>Use a proxy for network connections.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settingsdialog.ui" line="337"/>
- <source>Use a proxy for network connections. This uses the system-wide settings which can be configured in Internet Explorer. Please note that MO will start up a few seconds slower on some systems when using a proxy.</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settingsdialog.ui" line="340"/>
- <source>Use HTTP Proxy (Uses System Settings)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settingsdialog.ui" line="351"/>
- <source>Known Servers (Dynamically updated every download)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settingsdialog.ui" line="372"/>
- <source>Preferred Servers (Drag &amp; Drop)</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settingsdialog.ui" line="594"/>
- <source>Mod Organizer needs a dll to be injected into the game so all mods are visible to it.
-There are several means to do this:
-*Mod Organizer* (default) In this mode the Mod Organizer itself injects the dll. The disadvantage is that you always have to start the game through MO or a link created by it.
-*Script Extender* In this mode, MO is installed as a Script Extender (obse, fose, nvse, skse) plugin.
-*Proxy DLL* In this mode, MO replaces one of the game&apos;s dlls with one that loads MO (and the original dll of course). This will ONLY work with Steam games and it has only been tested with Skyrim. Please use this only if the other mechanisms don&apos;t work.
-
-If you use the Steam version of Oblivion the default will NOT work. In this case, please install obse and use &quot;Script Extender&quot; as the load mechanism. Also you can then not start Oblivion from MO. Instead, use MO only to set up your mods, then quit and start Oblivion through Steam.</source>
- <translation type="unfinished"></translation>
+ <translation>Обеспечивает то, что неактивные ESP и ESM не будут загружены.</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="659"/>
+ <location filename="settingsdialog.ui" line="697"/>
<source>It seems that the Games occasionally load ESP or ESM files even if they haven&apos;t been activated as plugins.
I don&apos;t yet know what the circumstances are, but user reports imply it is in some cases unwanted. If this is checked, ESPs and ESMs not checked in the List are invisible to the game and can not be loaded.</source>
- <translation type="unfinished"></translation>
+ <translation>Кажется, что иногда игры загружают ESP и ESM файлы, даже если они не были не подключены как плагины
+Обстоятельства этого пока не известны, но отчеты пользователей подразумевают, что это в ряде случаев нежелательно. Если этот флажок отмечен, не отмеченные в списке ESP и ESM не будут видимы в списке и не будут загружены.</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="663"/>
+ <location filename="settingsdialog.ui" line="701"/>
<source>Hide inactive ESPs/ESMs</source>
- <translation type="unfinished"></translation>
+ <translation>Скрыть неактивные ESPs/ESMs</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="670"/>
+ <location filename="settingsdialog.ui" line="708"/>
<source>If checked, files (i.e. esps, esms and bsas) belonging to the core game can not be disabled in the UI. (default: on)</source>
- <translation type="unfinished"></translation>
+ <translation>Если отмечено, файлы (т.е. esp, esm и bsa) принадлежащие основной игре не смогут быть отключены из интерфейса. (по умолчанию: вкл)</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="673"/>
+ <location filename="settingsdialog.ui" line="711"/>
<source>If checked, files (i.e. esps, esms and bsas) belonging to the core game can not be disabled in the UI. (default: on)
Uncheck this if you want to use Mod Organizer with total conversions (like Nehrim) but be aware that the game will crash if required files are not enabled.</source>
- <translation type="unfinished"></translation>
+ <translation>Если отмечено, файлы (т.е. esp, esm и bsa) принадлежащие основной игре не смогут быть отключены из интерфейса. (по умолчанию: вкл)
+Снимите флажок, если вы собираетесь использовать Mod Organizer с тотальными конверсиями (как Nehrim) , но будьте осторожны, игра может вылететь, если требуемые файлы будут отключены.</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="677"/>
+ <location filename="settingsdialog.ui" line="715"/>
<source>Force-enable game files</source>
- <translation type="unfinished"></translation>
+ <translation>Принудительно подключить файлы игры</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="687"/>
- <location filename="settingsdialog.ui" line="691"/>
+ <location filename="settingsdialog.ui" line="725"/>
+ <location filename="settingsdialog.ui" line="729"/>
<source>For Skyrim, this can be used instead of Archive Invalidation. It should make AI redundant for all Profiles.
For the other games this is not a sufficient replacement for AI!</source>
- <translation type="unfinished"></translation>
+ <translation>Для Скайрим это может быть использовано вместо инвалидации. Это должно сделать AI избыточным для всех профилей.
+Для других игр недостаточно замены для AI!</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="695"/>
+ <location filename="settingsdialog.ui" line="733"/>
<source>Back-date BSAs</source>
- <translation type="unfinished"></translation>
+ <translation>Back-date BSAs</translation>
</message>
<message>
- <location filename="settingsdialog.cpp" line="89"/>
+ <location filename="settingsdialog.ui" line="757"/>
+ <source>These are workarounds for problems with Mod Organizer. Please make sure you read the help text before changing anything here.</source>
+ <translation>Это способы обхода проблем с Mod Organizer. Убедитесь, что вы прочли справку, перед тем, как делать какие-либо изменения здесь.</translation>
+ </message>
+ <message>
+ <location filename="settingsdialog.cpp" line="95"/>
<source>Select download directory</source>
- <translation type="unfinished"></translation>
+ <translation>Выберете каталог для загрузок</translation>
</message>
<message>
- <location filename="settingsdialog.cpp" line="97"/>
+ <location filename="settingsdialog.cpp" line="103"/>
<source>Select mod directory</source>
- <translation type="unfinished"></translation>
+ <translation>Выберете каталог для модов</translation>
</message>
<message>
- <location filename="settingsdialog.cpp" line="105"/>
+ <location filename="settingsdialog.cpp" line="111"/>
<source>Select cache directory</source>
- <translation type="unfinished"></translation>
+ <translation>Выберете каталог для кеша</translation>
</message>
<message>
- <location filename="settingsdialog.cpp" line="113"/>
+ <location filename="settingsdialog.cpp" line="119"/>
<source>Confirm?</source>
- <translation type="unfinished"></translation>
+ <translation>Подтвердить?</translation>
</message>
<message>
- <location filename="settingsdialog.cpp" line="114"/>
+ <location filename="settingsdialog.cpp" line="120"/>
<source>This will make all dialogs show up again where you checked the &quot;Remember selection&quot;-box. Continue?</source>
- <translation type="unfinished"></translation>
+ <translation>Это позволить снова отобразить все диалоги, для которых вы ранее выбрали флажок &quot;Запомнить выбор&quot;.</translation>
</message>
</context>
<context>
@@ -4714,7 +5061,7 @@ For the other games this is not a sufficient replacement for AI!</source>
<message>
<location filename="simpleinstalldialog.ui" line="14"/>
<source>Quick Install</source>
- <translation type="unfinished"></translation>
+ <translation>Быстрая установка</translation>
</message>
<message>
<location filename="simpleinstalldialog.ui" line="22"/>
@@ -4725,17 +5072,17 @@ For the other games this is not a sufficient replacement for AI!</source>
<location filename="simpleinstalldialog.ui" line="49"/>
<location filename="simpleinstalldialog.ui" line="52"/>
<source>Opens a Dialog that allows custom modifications.</source>
- <translation type="unfinished">Открывает диалоговое окно, которое позволяет выбрать пользовательские модификации.</translation>
+ <translation>Открывает диалог, позволяющий выбрать пользовательские модификации.</translation>
</message>
<message>
<location filename="simpleinstalldialog.ui" line="55"/>
<source>Manual</source>
- <translation type="unfinished"></translation>
+ <translation>Руководство</translation>
</message>
<message>
<location filename="simpleinstalldialog.ui" line="62"/>
<source>OK</source>
- <translation type="unfinished"></translation>
+ <translation>OK</translation>
</message>
<message>
<location filename="simpleinstalldialog.ui" line="72"/>
@@ -4748,18 +5095,18 @@ For the other games this is not a sufficient replacement for AI!</source>
<message>
<location filename="singleinstance.cpp" line="50"/>
<source>SHM error: %1</source>
- <translation type="unfinished"></translation>
+ <translation>Ошибка SHM: %1</translation>
</message>
<message>
<location filename="singleinstance.cpp" line="82"/>
<location filename="singleinstance.cpp" line="88"/>
<source>failed to connect to running instance: %1</source>
- <translation type="unfinished"></translation>
+ <translation>не удалось подключиться к запущенному экземпляру: %1</translation>
</message>
<message>
<location filename="singleinstance.cpp" line="100"/>
<source>failed to receive data from secondary instance: %1</source>
- <translation type="unfinished"></translation>
+ <translation>не удалось получить данные из вторичного экземпляра: %1</translation>
</message>
</context>
<context>
@@ -4767,7 +5114,7 @@ For the other games this is not a sufficient replacement for AI!</source>
<message>
<location filename="syncoverwritedialog.ui" line="14"/>
<source>Sync Overwrite</source>
- <translation type="unfinished"></translation>
+ <translation>Синхронизация замены</translation>
</message>
<message>
<location filename="syncoverwritedialog.ui" line="27"/>
@@ -4777,40 +5124,44 @@ For the other games this is not a sufficient replacement for AI!</source>
<message>
<location filename="syncoverwritedialog.ui" line="32"/>
<source>Sync To</source>
- <translation type="unfinished"></translation>
+ <translation>Синхронизация с</translation>
</message>
<message>
<location filename="syncoverwritedialog.cpp" line="95"/>
<source>&lt;don&apos;t sync&gt;</source>
- <translation type="unfinished"></translation>
+ <translation>&lt;не синхронизировать&gt;</translation>
</message>
<message>
<location filename="syncoverwritedialog.cpp" line="147"/>
<source>failed to remove %1</source>
- <translation type="unfinished"></translation>
+ <translation>не удалось удалить %1</translation>
</message>
<message>
<location filename="syncoverwritedialog.cpp" line="149"/>
<source>failed to move %1 to %2</source>
- <translation type="unfinished"></translation>
+ <translation>не удалось переместить %1 в %2</translation>
</message>
</context>
<context>
<name>TransferSavesDialog</name>
<message>
- <location filename="transfersavesdialog.ui" line="14"/>
<source>Dialog</source>
+ <translation type="obsolete">Диалог</translation>
+ </message>
+ <message>
+ <location filename="transfersavesdialog.ui" line="14"/>
+ <source>Transfer Savegames</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="transfersavesdialog.ui" line="22"/>
<source>Global Characters</source>
- <translation type="unfinished"></translation>
+ <translation>Общие символы</translation>
</message>
<message>
<location filename="transfersavesdialog.ui" line="29"/>
<source>This is a list of characters in the global location.</source>
- <translation type="unfinished"></translation>
+ <translation>Это список персонажей в общем месторасположении.</translation>
</message>
<message>
<location filename="transfersavesdialog.ui" line="32"/>
@@ -4820,9 +5171,24 @@ On Windows Vista/Windows 7:
C:\Users\[UserName]\Documents\My Games\Skyrim\Saves
On Windows XP:
- C:\Documents and Settings[UserName]\My Documents\My Games\Skyrim\Saves
+ C:\Documents and Settings\[UserName]\My Documents\My Games\Skyrim\Saves
</source>
- <translation type="unfinished"></translation>
+ <oldsource>This is a list of characters in the global location.
+
+On Windows Vista/Windows 7:
+ C:\Users\[UserName]\Documents\My Games\Skyrim\Saves
+
+On Windows XP:
+ C:\Documents and Settings[UserName]\My Documents\My Games\Skyrim\Saves
+</oldsource>
+ <translation type="unfinished">Список персонажей в общем месторасположении.
+
+На Windows Vista/Windows 7:
+C:\Users\[UserName]\Documents\My Games\Skyrim\Saves
+
+На Windows XP:
+C:\Documents and Settings[UserName]\My Documents\My Games\Skyrim\Saves
+</translation>
</message>
<message>
<location filename="transfersavesdialog.ui" line="46"/>
@@ -4835,27 +5201,35 @@ On Windows XP:
C:\Documents and Settings[UserName]\My Documents\My Games\Skyrim\Saves
</source>
- <translation type="unfinished"></translation>
+ <translation>Список сохранений с выбранным персонажем в общем месторасположении.
+
+На Windows Vista/Windows 7:
+C:\Users\[UserName]\Documents\My Games\Skyrim\Saves
+
+На Windows XP:
+C:\Documents and Settings[UserName]\My Documents\My Games\Skyrim\Saves
+
+</translation>
</message>
<message>
<location filename="transfersavesdialog.ui" line="87"/>
<source>Move -&gt;</source>
- <translation type="unfinished"></translation>
+ <translation>Переместить -&gt;</translation>
</message>
<message>
<location filename="transfersavesdialog.ui" line="97"/>
<source>Copy -&gt;</source>
- <translation type="unfinished"></translation>
+ <translation>Скопировать -&gt;</translation>
</message>
<message>
<location filename="transfersavesdialog.ui" line="123"/>
<source>&lt;- Move</source>
- <translation type="unfinished"></translation>
+ <translation>&lt;- Переместить</translation>
</message>
<message>
<location filename="transfersavesdialog.ui" line="133"/>
<source>&lt;- Copy</source>
- <translation type="unfinished"></translation>
+ <translation>&lt;- Скопировать</translation>
</message>
<message>
<location filename="transfersavesdialog.ui" line="156"/>
@@ -4865,17 +5239,17 @@ On Windows XP:
<message>
<location filename="transfersavesdialog.ui" line="167"/>
<source>Profile Characters</source>
- <translation type="unfinished"></translation>
+ <translation>Персонажи профиля</translation>
</message>
<message>
<location filename="transfersavesdialog.cpp" line="140"/>
<source>Overwrite</source>
- <translation type="unfinished"></translation>
+ <translation>Переписать</translation>
</message>
<message>
<location filename="transfersavesdialog.cpp" line="141"/>
<source>Overwrite the file &quot;%1&quot;</source>
- <translation type="unfinished"></translation>
+ <translation>Перезаписать файл &quot;%1&quot;</translation>
</message>
<message>
<location filename="transfersavesdialog.cpp" line="164"/>
@@ -4883,23 +5257,23 @@ On Windows XP:
<location filename="transfersavesdialog.cpp" line="237"/>
<location filename="transfersavesdialog.cpp" line="276"/>
<source>Confirm</source>
- <translation type="unfinished">Подтвердить</translation>
+ <translation>Подтверждение</translation>
</message>
<message>
<location filename="transfersavesdialog.cpp" line="165"/>
<location filename="transfersavesdialog.cpp" line="203"/>
<source>Copy all save games of character &quot;%1&quot; to the profile?</source>
- <translation type="unfinished"></translation>
+ <translation>Скопировать все игры с персонажем &quot;%1&quot; в профиль?</translation>
</message>
<message>
<location filename="transfersavesdialog.cpp" line="238"/>
<source>Move all save games of character &quot;%1&quot; to the global location? Please be aware that this will mess up the running number of save games.</source>
- <translation type="unfinished"></translation>
+ <translation>Переместить все сохранения с персонажем &quot;%1&quot; в общее месторасположение? Имейте ввиду, что это запутает текущую нумерацию сохранений.</translation>
</message>
<message>
<location filename="transfersavesdialog.cpp" line="277"/>
<source>Copy all save games of character &quot;%1&quot; to the global location? Please be aware that this will mess up the running number of save games.</source>
- <translation type="unfinished"></translation>
+ <translation>Скопировать все сохранения с персонажем &quot;%1&quot; в общее месторасположение? Имейте ввиду, что это запутает текущую нумерацию сохранений.</translation>
</message>
</context>
</TS>
diff --git a/src/organizer_tr.qm b/src/organizer_tr.qm
deleted file mode 100644
index 1069c0dc..00000000
--- a/src/organizer_tr.qm
+++ /dev/null
Binary files differ
diff --git a/src/organizer_tr.ts b/src/organizer_tr.ts
index 78e719a8..d091ad76 100644
--- a/src/organizer_tr.ts
+++ b/src/organizer_tr.ts
@@ -2,6 +2,50 @@
<!DOCTYPE TS>
<TS version="2.0" language="tr">
<context>
+ <name>AboutDialog</name>
+ <message>
+ <location filename="aboutdialog.ui" line="14"/>
+ <location filename="aboutdialog.ui" line="53"/>
+ <source>About</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="aboutdialog.ui" line="66"/>
+ <source>Revision:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="aboutdialog.ui" line="104"/>
+ <source>Used Software</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="aboutdialog.ui" line="117"/>
+ <source>Credits</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="aboutdialog.ui" line="123"/>
+ <source>Translators</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="aboutdialog.ui" line="189"/>
+ <source>Others</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="aboutdialog.ui" line="266"/>
+ <source>Close</source>
+ <translation type="unfinished">Kapat</translation>
+ </message>
+ <message>
+ <location filename="aboutdialog.cpp" line="81"/>
+ <source>No license</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>ActivateModsDialog</name>
<message>
<location filename="activatemodsdialog.ui" line="14"/>
@@ -240,26 +284,31 @@ p, li { white-space: pre-wrap; }
<context>
<name>DownloadList</name>
<message>
- <location filename="downloadlist.cpp" line="63"/>
+ <location filename="downloadlist.cpp" line="64"/>
<source>Name</source>
<translation>İsim</translation>
</message>
<message>
- <location filename="downloadlist.cpp" line="64"/>
+ <location filename="downloadlist.cpp" line="65"/>
<source>Filetime</source>
<translatorcomment>Direct translation. What does this mean actually?</translatorcomment>
<translation>Dosyazamanı</translation>
</message>
<message>
- <location filename="downloadlist.cpp" line="65"/>
+ <location filename="downloadlist.cpp" line="66"/>
<source>Done</source>
<translation type="unfinished">Bitti</translation>
</message>
<message>
- <location filename="downloadlist.cpp" line="79"/>
+ <location filename="downloadlist.cpp" line="82"/>
<source>Information missing, please select &quot;Query Info&quot; from the context menu to re-retrieve.</source>
<translation>Bilgi eksik, lütfen menüden &quot;Bilgi sorgula&quot; yı seçiniz</translation>
</message>
+ <message>
+ <location filename="downloadlist.cpp" line="89"/>
+ <source>pending download</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>DownloadListWidget</name>
@@ -270,16 +319,6 @@ p, li { white-space: pre-wrap; }
<translation>Yer tutucu</translation>
</message>
<message>
- <location filename="downloadlistwidget.ui" line="81"/>
- <source>0</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="downloadlistwidget.ui" line="88"/>
- <source>KB</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<location filename="downloadlistwidget.ui" line="99"/>
<location filename="downloadlistwidget.cpp" line="145"/>
<location filename="downloadlistwidget.cpp" line="147"/>
@@ -322,120 +361,135 @@ p, li { white-space: pre-wrap; }
<context>
<name>DownloadListWidgetCompactDelegate</name>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="130"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="126"/>
<source>Installed</source>
<translation>Yüklendi</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="133"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="129"/>
<source>Uninstalled</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="136"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="132"/>
<source>Done</source>
<translation>Bitti</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="215"/>
- <location filename="downloadlistwidgetcompact.cpp" line="224"/>
- <location filename="downloadlistwidgetcompact.cpp" line="233"/>
- <location filename="downloadlistwidgetcompact.cpp" line="242"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="241"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="250"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="259"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="268"/>
<source>Are you sure?</source>
<translation>Emin misiniz?</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="216"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="242"/>
<source>This will remove all finished downloads from this list and from disk.</source>
<translation>Bu, tüm bitmiş indirilenleri listeden ve diskten kaldıracaktır.</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="225"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="251"/>
<source>This will remove all installed downloads from this list and from disk.</source>
<translation>Bu, tüm yüklenmiş indirilenleri listeden ve diskten kaldıracaktır.</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="234"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="260"/>
<source>This will permanently remove all finished downloads from this list (but NOT from disk).</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="243"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="269"/>
<source>This will permanently remove all installed downloads from this list (but NOT from disk).</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="269"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="298"/>
<source>Install</source>
<translation>Yükle</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="271"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="300"/>
<source>Query Info</source>
<translation>Sorgu Bilgisi</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="273"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="302"/>
<source>Delete</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="274"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="304"/>
+ <source>Un-Hide</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="downloadlistwidgetcompact.cpp" line="306"/>
<source>Remove from View</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="279"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="312"/>
<source>Remove</source>
<translation>Kaldır</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="276"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="309"/>
<source>Cancel</source>
<translation>İptal et</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="120"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="88"/>
+ <source>&lt; mod %1 file %2 &gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="downloadlistwidgetcompact.cpp" line="93"/>
+ <source>Pending</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="downloadlistwidgetcompact.cpp" line="116"/>
<source>Paused</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="123"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="119"/>
<source>Fetching Info 1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="125"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="121"/>
<source>Fetching Info 2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="277"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="310"/>
<source>Pause</source>
<translation>Duraklat</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="280"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="313"/>
<source>Resume</source>
<translation>Devam et</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="284"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="318"/>
<source>Delete Installed...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="285"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="319"/>
<source>Delete All...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="287"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="322"/>
<source>Remove Installed...</source>
<translation>Yüklenmişleri kaldır...</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="288"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="323"/>
<source>Remove All...</source>
<translation>Hepsini kaldır...</translation>
</message>
@@ -443,64 +497,79 @@ p, li { white-space: pre-wrap; }
<context>
<name>DownloadListWidgetDelegate</name>
<message>
- <location filename="downloadlistwidget.cpp" line="228"/>
- <location filename="downloadlistwidget.cpp" line="237"/>
- <location filename="downloadlistwidget.cpp" line="246"/>
- <location filename="downloadlistwidget.cpp" line="255"/>
+ <location filename="downloadlistwidget.cpp" line="253"/>
+ <location filename="downloadlistwidget.cpp" line="262"/>
+ <location filename="downloadlistwidget.cpp" line="271"/>
+ <location filename="downloadlistwidget.cpp" line="280"/>
<source>Are you sure?</source>
<translation>Emin misiniz?</translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="229"/>
+ <location filename="downloadlistwidget.cpp" line="254"/>
<source>This will remove all finished downloads from this list and from disk.</source>
<translation>Bu, tüm bitmiş indirilenleri listeden ve diskten kaldıracaktır.</translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="238"/>
+ <location filename="downloadlistwidget.cpp" line="263"/>
<source>This will remove all installed downloads from this list and from disk.</source>
<translation>Bu, tüm bitmiş yüklenmiş listeden ve diskten kaldıracaktır.</translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="247"/>
+ <location filename="downloadlistwidget.cpp" line="272"/>
<source>This will remove all finished downloads from this list (but NOT from disk).</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="256"/>
+ <location filename="downloadlistwidget.cpp" line="281"/>
<source>This will remove all installed downloads from this list (but NOT from disk).</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="281"/>
+ <location filename="downloadlistwidget.cpp" line="309"/>
<source>Install</source>
<translation>Yükle</translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="283"/>
+ <location filename="downloadlistwidget.cpp" line="311"/>
<source>Query Info</source>
<translation>Bilgi sorgula</translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="285"/>
+ <location filename="downloadlistwidget.cpp" line="313"/>
<source>Delete</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="286"/>
+ <location filename="downloadlistwidget.cpp" line="315"/>
+ <source>Un-Hide</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="downloadlistwidget.cpp" line="317"/>
<source>Remove from View</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="291"/>
+ <location filename="downloadlistwidget.cpp" line="323"/>
<source>Remove</source>
<translation>Kaldır</translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="288"/>
+ <location filename="downloadlistwidget.cpp" line="320"/>
<source>Cancel</source>
<translation>İptal et</translation>
</message>
<message>
+ <location filename="downloadlistwidget.cpp" line="88"/>
+ <source>&lt; mod %1 file %2 &gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="downloadlistwidget.cpp" line="91"/>
+ <source>Pending</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="downloadlistwidget.cpp" line="118"/>
<source>Fetching Info 1</source>
<translation type="unfinished"></translation>
@@ -511,32 +580,32 @@ p, li { white-space: pre-wrap; }
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="289"/>
+ <location filename="downloadlistwidget.cpp" line="321"/>
<source>Pause</source>
<translation>Duraklat</translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="292"/>
+ <location filename="downloadlistwidget.cpp" line="324"/>
<source>Resume</source>
<translation>Devam et</translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="296"/>
+ <location filename="downloadlistwidget.cpp" line="329"/>
<source>Delete Installed...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="297"/>
+ <location filename="downloadlistwidget.cpp" line="330"/>
<source>Delete All...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="299"/>
+ <location filename="downloadlistwidget.cpp" line="333"/>
<source>Remove Installed...</source>
<translation>Yüklenmişleri kaldır</translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="300"/>
+ <location filename="downloadlistwidget.cpp" line="334"/>
<source>Remove All...</source>
<translation>Hepsini kaldır...</translation>
</message>
@@ -544,67 +613,81 @@ p, li { white-space: pre-wrap; }
<context>
<name>DownloadManager</name>
<message>
- <location filename="downloadmanager.cpp" line="125"/>
+ <location filename="downloadmanager.cpp" line="132"/>
<source>failed to rename &quot;%1&quot; to &quot;%2&quot;</source>
<translation>&quot;%1&quot;yi &quot;%2&quot; olarak yeniden adlandırma başarılı olamadı.</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="306"/>
+ <location filename="downloadmanager.cpp" line="342"/>
<source>Download again?</source>
<translation>Tekrar indir?</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="306"/>
+ <location filename="downloadmanager.cpp" line="342"/>
<source>A file with the same name has already been downloaded. Do you want to download it again? The new file will receive a different name.</source>
<translation>Aynı dosya isminde bir dosya zaten indirilmiş. Tekrar indirmek istiyor musunuz? Yeni dosya farklı bir isim alacak.</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="336"/>
+ <location filename="downloadmanager.cpp" line="388"/>
<source>failed to download %1: could not open output file: %2</source>
<translation>%1 indirilemedi : : çıkış dosyası %2 açılamadı</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="366"/>
- <location filename="downloadmanager.cpp" line="585"/>
- <location filename="downloadmanager.cpp" line="595"/>
- <location filename="downloadmanager.cpp" line="604"/>
- <location filename="downloadmanager.cpp" line="614"/>
- <location filename="downloadmanager.cpp" line="624"/>
- <location filename="downloadmanager.cpp" line="634"/>
- <location filename="downloadmanager.cpp" line="645"/>
- <location filename="downloadmanager.cpp" line="654"/>
- <location filename="downloadmanager.cpp" line="664"/>
- <location filename="downloadmanager.cpp" line="679"/>
+ <location filename="downloadmanager.cpp" line="421"/>
+ <source>Wrong Game</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="downloadmanager.cpp" line="421"/>
+ <source>The download link is for a mod for &quot;%1&quot; but this instance of MO has been set up for &quot;%2&quot;.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="downloadmanager.cpp" line="439"/>
+ <location filename="downloadmanager.cpp" line="506"/>
+ <location filename="downloadmanager.cpp" line="682"/>
+ <location filename="downloadmanager.cpp" line="691"/>
+ <location filename="downloadmanager.cpp" line="701"/>
+ <location filename="downloadmanager.cpp" line="710"/>
+ <location filename="downloadmanager.cpp" line="724"/>
+ <location filename="downloadmanager.cpp" line="734"/>
+ <location filename="downloadmanager.cpp" line="744"/>
+ <location filename="downloadmanager.cpp" line="754"/>
+ <location filename="downloadmanager.cpp" line="765"/>
+ <location filename="downloadmanager.cpp" line="773"/>
+ <location filename="downloadmanager.cpp" line="782"/>
+ <location filename="downloadmanager.cpp" line="792"/>
+ <location filename="downloadmanager.cpp" line="807"/>
<source>invalid index</source>
<translation>geçersiz dizin</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="384"/>
+ <location filename="downloadmanager.cpp" line="457"/>
<source>failed to delete %1</source>
<translation>%1 silinemedi</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="390"/>
+ <location filename="downloadmanager.cpp" line="463"/>
<source>failed to delete meta file for %1</source>
<translation>%1&apos;in meta dosyası silinemedi</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="450"/>
- <location filename="downloadmanager.cpp" line="468"/>
- <location filename="downloadmanager.cpp" line="481"/>
- <location filename="downloadmanager.cpp" line="494"/>
- <location filename="downloadmanager.cpp" line="505"/>
- <location filename="downloadmanager.cpp" line="540"/>
+ <location filename="downloadmanager.cpp" line="539"/>
+ <location filename="downloadmanager.cpp" line="557"/>
+ <location filename="downloadmanager.cpp" line="570"/>
+ <location filename="downloadmanager.cpp" line="587"/>
+ <location filename="downloadmanager.cpp" line="598"/>
+ <location filename="downloadmanager.cpp" line="633"/>
<source>invalid index %1</source>
<translation>geçeriz dizin %1</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="557"/>
+ <location filename="downloadmanager.cpp" line="650"/>
<source>Please enter the nexus mod id</source>
<translation>Lütfen nexus mod kimliğini girin</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="557"/>
+ <location filename="downloadmanager.cpp" line="650"/>
<source>Mod ID:</source>
<translation>Mod kimliği:</translation>
</message>
@@ -613,38 +696,43 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">geçersiz alfabetik dizin %1</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="899"/>
+ <location filename="downloadmanager.cpp" line="1042"/>
<source>Information updated</source>
<translation>bilgi güncellendi</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="901"/>
- <location filename="downloadmanager.cpp" line="915"/>
+ <location filename="downloadmanager.cpp" line="1044"/>
+ <location filename="downloadmanager.cpp" line="1058"/>
<source>No matching file found on Nexus! Maybe this file is no longer available or it was renamed?</source>
<translation>Nexus&apos;ta uyan bir dosya bulunamadı! Dosya artık mevcut olmayabilir yada yeniden adlandırılmış olabilir!</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="903"/>
+ <location filename="downloadmanager.cpp" line="1046"/>
<source>No file on Nexus matches the selected file by name. Please manually choose the correct one.</source>
<translation>Nexus&apos;ta seçili dosyaya isim olarak uyan dosya bulunamadı. Lütfen el ile doğru olanı seçin.</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="1032"/>
+ <location filename="downloadmanager.cpp" line="1180"/>
<source>No download server available. Please try again later.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="1074"/>
+ <location filename="downloadmanager.cpp" line="1224"/>
<source>Failed to request file info from nexus: %1</source>
<translation>Nexus&apos;tan dosya bilgisi istenilemedi: %1</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="1097"/>
+ <location filename="downloadmanager.cpp" line="1249"/>
+ <source>Download failed. Server reported: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="downloadmanager.cpp" line="1251"/>
<source>Download failed: %1 (%2)</source>
<translation>İndirme başarızı: %1 (%2)</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="1174"/>
+ <location filename="downloadmanager.cpp" line="1331"/>
<source>failed to re-open %1</source>
<translation>%1 tekrar açılamadı</translation>
</message>
@@ -757,7 +845,7 @@ Steam tarafından dağıtılan her oyun/aracın kendine has bir kimliği vardır
<message>
<location filename="editexecutablesdialog.ui" line="169"/>
<location filename="editexecutablesdialog.ui" line="172"/>
- <location filename="editexecutablesdialog.cpp" line="220"/>
+ <location filename="editexecutablesdialog.cpp" line="258"/>
<source>If checked, MO will be closed once the specified executable is run.</source>
<translation>Eğer seçiliyse, belirlenmiş yürütülebilir çalıştırıldığında MO kapatılacaktır.</translation>
</message>
@@ -774,7 +862,7 @@ Steam tarafından dağıtılan her oyun/aracın kendine has bir kimliği vardır
</message>
<message>
<location filename="editexecutablesdialog.ui" line="188"/>
- <location filename="editexecutablesdialog.cpp" line="190"/>
+ <location filename="editexecutablesdialog.cpp" line="196"/>
<source>Add</source>
<translation>Ekle</translation>
</message>
@@ -790,47 +878,64 @@ Steam tarafından dağıtılan her oyun/aracın kendine has bir kimliği vardır
<translation>Kaldır</translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="119"/>
+ <location filename="editexecutablesdialog.ui" line="233"/>
+ <source>Close</source>
+ <translation type="unfinished">Kapat</translation>
+ </message>
+ <message>
+ <location filename="editexecutablesdialog.cpp" line="125"/>
<source>Select a binary</source>
<translation>Bir ikili değer seç</translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="119"/>
+ <location filename="editexecutablesdialog.cpp" line="125"/>
<source>Executable (%1)</source>
<translation>Yürütülebilir (%1)</translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="143"/>
+ <location filename="editexecutablesdialog.cpp" line="149"/>
<source>Java (32-bit) required</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="144"/>
+ <location filename="editexecutablesdialog.cpp" line="150"/>
<source>MO requires 32-bit java to run this application. If you already have it installed, select javaw.exe from that installation as the binary.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="160"/>
+ <location filename="editexecutablesdialog.cpp" line="166"/>
<source>Select a directory</source>
<translation>Bir klasör seç</translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="169"/>
+ <location filename="editexecutablesdialog.cpp" line="175"/>
<source>Confirm</source>
<translation>Onayla</translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="169"/>
+ <location filename="editexecutablesdialog.cpp" line="175"/>
<source>Really remove &quot;%1&quot; from executables?</source>
<translation>&quot;%1&quot; gerçekten yürütülebilirlerden kaldırılsın mı?</translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="194"/>
+ <location filename="editexecutablesdialog.cpp" line="200"/>
<source>Modify</source>
<translation>Değiştir</translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="217"/>
+ <location filename="editexecutablesdialog.cpp" line="230"/>
+ <location filename="editexecutablesdialog.cpp" line="278"/>
+ <source>Save Changes?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="editexecutablesdialog.cpp" line="231"/>
+ <location filename="editexecutablesdialog.cpp" line="279"/>
+ <source>You made changes to the current executable, do you want to save them?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="editexecutablesdialog.cpp" line="255"/>
<source>MO must be kept running or this application will not work correctly.</source>
<translation>MO&apos;nun çalışmaya devam etmesi gereklidir yoksa uygulama düzgün çalışmayacaktır</translation>
</message>
@@ -1095,12 +1200,12 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">mo_archive.dll yüklü değil: &quot;%1&quot;</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="97"/>
+ <location filename="installationmanager.cpp" line="98"/>
<source>Password required</source>
<translation>Şifre gerekli</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="97"/>
+ <location filename="installationmanager.cpp" line="98"/>
<source>Password</source>
<translation>Şifre</translation>
</message>
@@ -1122,8 +1227,8 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="installationmanager.cpp" line="164"/>
- <location filename="installationmanager.cpp" line="252"/>
- <location filename="installationmanager.cpp" line="530"/>
+ <location filename="installationmanager.cpp" line="248"/>
+ <location filename="installationmanager.cpp" line="529"/>
<source>Extracting files</source>
<translation>Dosyalar çıkarılıyor</translation>
</message>
@@ -1158,7 +1263,7 @@ Not: Bu yükleyici diğer modlardan haberdar olmayacak!</translation>
<translation type="obsolete">yükleme başarısız (hatakodu %1)</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="624"/>
+ <location filename="installationmanager.cpp" line="609"/>
<source>File format &quot;%1&quot; not supported</source>
<translation>Dosya formatı &quot;%1&quot; desteklenmiyor.</translation>
</message>
@@ -1167,32 +1272,32 @@ Not: Bu yükleyici diğer modlardan haberdar olmayacak!</translation>
<translation type="obsolete">Arşiv &quot;%1&quot;: %2 açılamadı.</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="75"/>
+ <location filename="installationmanager.cpp" line="76"/>
<source>archive.dll not loaded: &quot;%1&quot;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="443"/>
+ <location filename="installationmanager.cpp" line="439"/>
<source>failed to create backup</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="449"/>
+ <location filename="installationmanager.cpp" line="448"/>
<source>Mod Name</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="449"/>
+ <location filename="installationmanager.cpp" line="448"/>
<source>Name</source>
<translation type="unfinished">İsim</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="502"/>
+ <location filename="installationmanager.cpp" line="501"/>
<source>Invalid name</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="503"/>
+ <location filename="installationmanager.cpp" line="502"/>
<source>The name you entered is invalid, please enter a different one.</source>
<translation type="unfinished"></translation>
</message>
@@ -1209,52 +1314,52 @@ Not: Bu yükleyici diğer modlardan haberdar olmayacak!</translation>
<translation type="obsolete">Lüttfen NCC&apos;yi yükleyiniz.</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="750"/>
+ <location filename="installationmanager.cpp" line="735"/>
<source>None of the available installer plugins were able to handle that archive</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="760"/>
+ <location filename="installationmanager.cpp" line="745"/>
<source>no error</source>
<translation>hata yok</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="763"/>
+ <location filename="installationmanager.cpp" line="748"/>
<source>7z.dll not found</source>
<translation>7z.dll bulunamadı</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="766"/>
+ <location filename="installationmanager.cpp" line="751"/>
<source>7z.dll isn&apos;t valid</source>
<translation>7z.dll geçerli değil</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="769"/>
+ <location filename="installationmanager.cpp" line="754"/>
<source>archive not found</source>
<translation>arşiv bulunamadı</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="772"/>
+ <location filename="installationmanager.cpp" line="757"/>
<source>failed to open archive</source>
<translation>arşiv açılamadı</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="775"/>
+ <location filename="installationmanager.cpp" line="760"/>
<source>unsupported archive type</source>
<translation>desteklenmeyen arşiv türü</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="778"/>
+ <location filename="installationmanager.cpp" line="763"/>
<source>internal library error</source>
<translation>içsel kütüphane hatası</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="781"/>
+ <location filename="installationmanager.cpp" line="766"/>
<source>archive invalid</source>
<translation>arşiv geçersiz</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="785"/>
+ <location filename="installationmanager.cpp" line="770"/>
<source>unknown archive error</source>
<translation>bilinmeyen arşiv hatası</translation>
</message>
@@ -1277,7 +1382,7 @@ Not: Bu yükleyici diğer modlardan haberdar olmayacak!</translation>
<translation>Yürütülebilir çalışırken MO kilitlidir.</translation>
</message>
<message>
- <location filename="lockeddialog.ui" line="51"/>
+ <location filename="lockeddialog.ui" line="54"/>
<source>Unlock</source>
<translation>Kilit aç</translation>
</message>
@@ -1285,7 +1390,7 @@ Not: Bu yükleyici diğer modlardan haberdar olmayacak!</translation>
<context>
<name>LogBuffer</name>
<message>
- <location filename="logbuffer.cpp" line="72"/>
+ <location filename="logbuffer.cpp" line="73"/>
<source>failed to write log to %1: %2</source>
<translation>%1: %2 ya kayıt yazılamadı</translation>
</message>
@@ -1293,12 +1398,12 @@ Not: Bu yükleyici diğer modlardan haberdar olmayacak!</translation>
<context>
<name>MOApplication</name>
<message>
- <location filename="moapplication.cpp" line="60"/>
+ <location filename="moapplication.cpp" line="68"/>
<source>an error occured: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="moapplication.cpp" line="65"/>
+ <location filename="moapplication.cpp" line="73"/>
<source>an error occured</source>
<translation type="unfinished"></translation>
</message>
@@ -1368,8 +1473,8 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="mainwindow.ui" line="405"/>
- <location filename="mainwindow.ui" line="722"/>
- <location filename="mainwindow.ui" line="1027"/>
+ <location filename="mainwindow.ui" line="724"/>
+ <location filename="mainwindow.ui" line="1046"/>
<source>Namefilter</source>
<translation type="unfinished"></translation>
</message>
@@ -1445,12 +1550,12 @@ p, li { white-space: pre-wrap; }
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="751"/>
+ <location filename="mainwindow.ui" line="762"/>
<source>List of available BS Archives. Archives not checked here are not managed by MO and ignore installation order.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="754"/>
+ <location filename="mainwindow.ui" line="765"/>
<source>BSA files are archives (comparable to .zip files) that contain data assets (meshes, textures, ...) to be used by the game. As such they &quot;compete&quot; with loose files in your data directory over which is loaded.
By default, BSAs that share their base name with an enabled ESP (i.e. plugin.esp and plugin.bsa) are automatically loaded and will have precedence over all loose files, the installation order you set up to the left is then ignored!
@@ -1458,67 +1563,81 @@ BSAs checked here are loaded in such a way that your installation order is obeye
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="794"/>
- <location filename="mainwindow.ui" line="868"/>
+ <location filename="mainwindow.ui" line="811"/>
+ <location filename="mainwindow.ui" line="880"/>
<source>File</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="799"/>
- <location filename="mainwindow.ui" line="873"/>
+ <location filename="mainwindow.ui" line="819"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Marked Archives (&lt;img src=&quot;:/MO/gui/warning_16&quot;/&gt;) are still loaded on Skyrim but the &lt;a href=&quot;http://forums.bethsoft.com/topic/1354395-update-bsas-and-you/&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;regular file override&lt;/span&gt;&lt;/a&gt; mechanism will apply: Loose files override BSAs, no matter the mod/plugin priority.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.ui" line="885"/>
<source>Mod</source>
<translation type="unfinished">Mod</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="807"/>
- <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Marked Archives (&lt;img src=&quot;:/MO/gui/resources/dialog-warning_16.png&quot;/&gt;) are still loaded on Skyrim but the &lt;a href=&quot;http://forums.bethsoft.com/topic/1354395-update-bsas-and-you/&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;regular file override&lt;/span&gt;&lt;/a&gt; mechanism will apply: Loose files override BSAs, no matter the mod/plugin priority.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <location filename="mainwindow.ui" line="830"/>
+ <source>Data</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.ui" line="605"/>
+ <source>Plugins</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="818"/>
- <source>Data</source>
+ <location filename="mainwindow.ui" line="731"/>
+ <source>Sort</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.ui" line="741"/>
+ <source>Archives</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="836"/>
+ <location filename="mainwindow.ui" line="848"/>
<source>refresh data-directory overview</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="839"/>
+ <location filename="mainwindow.ui" line="851"/>
<source>Refresh the overview. This may take a moment.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="842"/>
- <location filename="mainwindow.cpp" line="3328"/>
- <location filename="mainwindow.cpp" line="4059"/>
+ <location filename="mainwindow.ui" line="854"/>
+ <location filename="mainwindow.cpp" line="3781"/>
+ <location filename="mainwindow.cpp" line="4604"/>
<source>Refresh</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="858"/>
+ <location filename="mainwindow.ui" line="870"/>
<source>This is an overview of your data directory as visible to the game (and tools). </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="883"/>
- <location filename="mainwindow.ui" line="886"/>
+ <location filename="mainwindow.ui" line="895"/>
+ <location filename="mainwindow.ui" line="898"/>
<source>Filter the above list so that only conflicts are displayed.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="889"/>
+ <location filename="mainwindow.ui" line="901"/>
<source>Show only conflicts</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="897"/>
+ <location filename="mainwindow.ui" line="909"/>
<source>Saves</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="921"/>
+ <location filename="mainwindow.ui" line="933"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
@@ -1529,155 +1648,160 @@ p, li { white-space: pre-wrap; }
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="935"/>
+ <location filename="mainwindow.ui" line="947"/>
<source>Downloads</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="967"/>
+ <location filename="mainwindow.ui" line="979"/>
<source>This is a list of mods you downloaded from Nexus. Double click one to install it.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1020"/>
+ <location filename="mainwindow.ui" line="1032"/>
<source>Compact</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1051"/>
+ <location filename="mainwindow.ui" line="1039"/>
+ <source>Show Hidden</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.ui" line="1070"/>
<source>Tool Bar</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1093"/>
+ <location filename="mainwindow.ui" line="1112"/>
<source>Install Mod</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1096"/>
+ <location filename="mainwindow.ui" line="1115"/>
<source>Install &amp;Mod</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1099"/>
+ <location filename="mainwindow.ui" line="1118"/>
<source>Install a new mod from an archive</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1102"/>
+ <location filename="mainwindow.ui" line="1121"/>
<source>Ctrl+M</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1111"/>
+ <location filename="mainwindow.ui" line="1130"/>
<source>Profiles</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1114"/>
+ <location filename="mainwindow.ui" line="1133"/>
<source>&amp;Profiles</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1117"/>
+ <location filename="mainwindow.ui" line="1136"/>
<source>Configure Profiles</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1120"/>
+ <location filename="mainwindow.ui" line="1139"/>
<source>Ctrl+P</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1129"/>
+ <location filename="mainwindow.ui" line="1148"/>
<source>Executables</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1132"/>
+ <location filename="mainwindow.ui" line="1151"/>
<source>&amp;Executables</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1135"/>
+ <location filename="mainwindow.ui" line="1154"/>
<source>Configure the executables that can be started through Mod Organizer</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1138"/>
+ <location filename="mainwindow.ui" line="1157"/>
<source>Ctrl+E</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1147"/>
- <location filename="mainwindow.ui" line="1153"/>
+ <location filename="mainwindow.ui" line="1166"/>
+ <location filename="mainwindow.ui" line="1172"/>
<source>Tools</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1150"/>
+ <location filename="mainwindow.ui" line="1169"/>
<source>&amp;Tools</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1156"/>
+ <location filename="mainwindow.ui" line="1175"/>
<source>Ctrl+I</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1165"/>
+ <location filename="mainwindow.ui" line="1184"/>
<source>Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1168"/>
+ <location filename="mainwindow.ui" line="1187"/>
<source>&amp;Settings</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1171"/>
+ <location filename="mainwindow.ui" line="1190"/>
<source>Configure settings and workarounds</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1174"/>
+ <location filename="mainwindow.ui" line="1193"/>
<source>Ctrl+S</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1183"/>
+ <location filename="mainwindow.ui" line="1202"/>
<source>Nexus</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1186"/>
+ <location filename="mainwindow.ui" line="1205"/>
<source>Search nexus network for more mods</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1189"/>
+ <location filename="mainwindow.ui" line="1208"/>
<source>Ctrl+N</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1201"/>
- <location filename="mainwindow.cpp" line="4007"/>
+ <location filename="mainwindow.ui" line="1220"/>
+ <location filename="mainwindow.cpp" line="4545"/>
<source>Update</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1204"/>
+ <location filename="mainwindow.ui" line="1223"/>
<source>Mod Organizer is up-to-date</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1216"/>
- <location filename="mainwindow.cpp" line="478"/>
+ <location filename="mainwindow.ui" line="1235"/>
+ <location filename="mainwindow.cpp" line="509"/>
<source>No Problems</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1219"/>
+ <location filename="mainwindow.ui" line="1238"/>
<source>This button will be highlighted if MO discovered potential problems in your setup and provide tips on how to fix them.
!Work in progress!
@@ -1685,814 +1809,943 @@ Right now this has very limited functionality</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1231"/>
- <location filename="mainwindow.ui" line="1234"/>
+ <location filename="mainwindow.ui" line="1250"/>
+ <location filename="mainwindow.ui" line="1253"/>
<source>Help</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1237"/>
+ <location filename="mainwindow.ui" line="1256"/>
<source>Ctrl+H</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1246"/>
+ <location filename="mainwindow.ui" line="1265"/>
<source>Endorse MO</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1249"/>
- <location filename="mainwindow.cpp" line="4087"/>
+ <location filename="mainwindow.ui" line="1268"/>
+ <location filename="mainwindow.cpp" line="4633"/>
<source>Endorse Mod Organizer</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="204"/>
+ <location filename="mainwindow.cpp" line="223"/>
<source>Toolbar</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="205"/>
+ <location filename="mainwindow.cpp" line="224"/>
<source>Desktop</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="206"/>
+ <location filename="mainwindow.cpp" line="225"/>
<source>Start Menu</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="475"/>
+ <location filename="mainwindow.cpp" line="505"/>
<source>Problems</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="476"/>
+ <location filename="mainwindow.cpp" line="506"/>
<source>There are potential problems with your setup</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="479"/>
+ <location filename="mainwindow.cpp" line="510"/>
<source>Everything seems to be in order</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="531"/>
+ <location filename="mainwindow.cpp" line="568"/>
<source>Help on UI</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="535"/>
+ <location filename="mainwindow.cpp" line="572"/>
<source>Documentation Wiki</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="539"/>
+ <location filename="mainwindow.cpp" line="576"/>
<source>Report Issue</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="543"/>
+ <location filename="mainwindow.cpp" line="580"/>
<source>Tutorials</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="670"/>
+ <location filename="mainwindow.cpp" line="705"/>
<source>failed to save load order: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="600"/>
- <source>failed to save archives order, do you have write access to &quot;%1&quot;?</source>
+ <location filename="mainwindow.cpp" line="619"/>
+ <source>About</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="687"/>
+ <location filename="mainwindow.cpp" line="620"/>
+ <source>About Qt</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="717"/>
<source>Name</source>
<translation type="unfinished">İsim</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="688"/>
+ <location filename="mainwindow.cpp" line="718"/>
<source>Please enter a name for the new profile</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="696"/>
+ <location filename="mainwindow.cpp" line="726"/>
<source>failed to create profile: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="739"/>
+ <location filename="mainwindow.cpp" line="769"/>
<source>Show tutorial?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="740"/>
+ <location filename="mainwindow.cpp" line="770"/>
<source>You are starting Mod Organizer for the first time. Do you want to show a tutorial of its basic features? If you choose no you can always start the tutorial from the &quot;Help&quot;-menu.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="769"/>
+ <location filename="mainwindow.cpp" line="801"/>
<source>Downloads in progress</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="770"/>
+ <location filename="mainwindow.cpp" line="802"/>
<source>There are still downloads in progress, do you really want to quit?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="816"/>
+ <location filename="mainwindow.cpp" line="848"/>
<source>failed to read savegame: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="941"/>
+ <location filename="mainwindow.cpp" line="972"/>
<source>Plugin &quot;%1&quot; failed: %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1183"/>
+ <location filename="mainwindow.cpp" line="1270"/>
<source>Failed to start &quot;%1&quot;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1185"/>
+ <location filename="mainwindow.cpp" line="1272"/>
<source>Waiting</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1185"/>
+ <location filename="mainwindow.cpp" line="1272"/>
<source>Please press OK once you&apos;re logged into steam.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1197"/>
- <source>&quot;%1&quot; not found</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="1211"/>
+ <location filename="mainwindow.cpp" line="1298"/>
<source>Start Steam?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1212"/>
+ <location filename="mainwindow.cpp" line="1299"/>
<source>Steam is required to be running already to correctly start the game. Should MO try to start steam now?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1426"/>
+ <location filename="mainwindow.cpp" line="1526"/>
<source>Also in: &lt;br&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1437"/>
+ <location filename="mainwindow.cpp" line="1537"/>
<source>No conflict</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1552"/>
+ <location filename="mainwindow.cpp" line="1692"/>
<source>&lt;Edit...&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1771"/>
+ <location filename="mainwindow.cpp" line="1789"/>
+ <source>Failed to refresh list of esps: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="1929"/>
<source>This bsa is enabled in the ini file so it may be required!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1778"/>
+ <location filename="mainwindow.cpp" line="1936"/>
<source>This archive will still be loaded since there is a plugin of the same name but its files will not follow installation order!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1833"/>
+ <location filename="mainwindow.cpp" line="1991"/>
<source>Activating Network Proxy</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1962"/>
- <location filename="mainwindow.cpp" line="3755"/>
+ <location filename="mainwindow.cpp" line="2122"/>
+ <location filename="mainwindow.cpp" line="4248"/>
<source>Installation successful</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1973"/>
- <location filename="mainwindow.cpp" line="3768"/>
+ <location filename="mainwindow.cpp" line="2133"/>
+ <location filename="mainwindow.cpp" line="4261"/>
<source>Configure Mod</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1974"/>
- <location filename="mainwindow.cpp" line="3769"/>
+ <location filename="mainwindow.cpp" line="2134"/>
+ <location filename="mainwindow.cpp" line="4262"/>
<source>This mod contains ini tweaks. Do you want to configure them now?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1980"/>
- <location filename="mainwindow.cpp" line="3775"/>
+ <location filename="mainwindow.cpp" line="2140"/>
+ <location filename="mainwindow.cpp" line="4268"/>
<source>mod &quot;%1&quot; not found</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1983"/>
- <location filename="mainwindow.cpp" line="3781"/>
+ <location filename="mainwindow.cpp" line="2143"/>
+ <location filename="mainwindow.cpp" line="4274"/>
<source>Installation cancelled</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1983"/>
- <location filename="mainwindow.cpp" line="3781"/>
+ <location filename="mainwindow.cpp" line="2143"/>
+ <location filename="mainwindow.cpp" line="4274"/>
<source>The mod was not installed completely.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2018"/>
+ <location filename="mainwindow.cpp" line="2292"/>
<source>Some plugins could not be loaded</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2030"/>
- <source>The following Plugins could not be loaded. The reason may be missing dependencies (i.e. python) or an outdated version:&lt;ul&gt;</source>
+ <location filename="mainwindow.cpp" line="2315"/>
+ <source>The game doesn&apos;t allow more than 255 active plugins (including the official ones) to be loaded. You have to disable some unused plugins or merge some plugins into one. You can find a guide here: &lt;a href=&quot;http://wiki.step-project.com/Guide:Merging_Plugins&quot;&gt;http://wiki.step-project.com/Guide:Merging_Plugins&lt;/a&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2060"/>
+ <location filename="mainwindow.cpp" line="2341"/>
<source>Choose Mod</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2061"/>
+ <location filename="mainwindow.cpp" line="2342"/>
<source>Mod Archive</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2214"/>
+ <location filename="mainwindow.cpp" line="2495"/>
<source>Start Tutorial?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2215"/>
+ <location filename="mainwindow.cpp" line="2496"/>
<source>You&apos;re about to start a tutorial. For technical reasons it&apos;s not possible to end the tutorial early. Continue?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2360"/>
- <location filename="mainwindow.cpp" line="3683"/>
+ <location filename="mainwindow.cpp" line="2651"/>
+ <location filename="mainwindow.cpp" line="4171"/>
<source>Download started</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2391"/>
+ <location filename="mainwindow.cpp" line="2682"/>
<source>failed to update mod list: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2418"/>
+ <location filename="mainwindow.cpp" line="2711"/>
<source>failed to spawn notepad.exe: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2459"/>
+ <location filename="mainwindow.cpp" line="2752"/>
<source>failed to open %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2537"/>
+ <location filename="mainwindow.cpp" line="2830"/>
<source>failed to change origin name: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2676"/>
+ <location filename="mainwindow.cpp" line="2997"/>
<source>Multiple esps activated, please check that they don&apos;t conflict.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3005"/>
- <location filename="mainwindow.cpp" line="3339"/>
+ <location filename="mainwindow.cpp" line="3345"/>
+ <location filename="mainwindow.cpp" line="3792"/>
<source>Create Mod...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3006"/>
- <source>This will move all files from overwrite into a new, regular mod.
-Please enter a name: </source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="mainwindow.cpp" line="3015"/>
+ <location filename="mainwindow.cpp" line="3355"/>
<source>A mod with this name already exists</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3410"/>
+ <location filename="mainwindow.cpp" line="3883"/>
<source>&lt;All&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2589"/>
+ <location filename="mainwindow.cpp" line="2909"/>
<source>&lt;Checked&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="943"/>
+ <location filename="mainwindow.cpp" line="974"/>
<source>Plugin &quot;%1&quot; failed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1007"/>
+ <location filename="mainwindow.cpp" line="1047"/>
<source>failed to init plugin %1: %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2021"/>
- <location filename="mainwindow.cpp" line="2038"/>
+ <location filename="mainwindow.cpp" line="1085"/>
+ <source>Plugin error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="1086"/>
+ <source>It appears the plugin &quot;%1&quot; failed to load last startup and caused MO to crash. Do you want to disable it?
+(Please note: If this is the first time you see this message for this plugin you may want to give it another try. The plugin may be able to recover from the problem)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="2295"/>
+ <source>Too many esps and esms enabled</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="2298"/>
+ <location filename="mainwindow.cpp" line="2319"/>
<source>Description missing</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2590"/>
+ <location filename="mainwindow.cpp" line="2307"/>
+ <source>The following plugins could not be loaded. The reason may be missing dependencies (i.e. python) or an outdated version:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="2860"/>
+ <source>failed to move &quot;%1&quot; from mod &quot;%2&quot; to &quot;%3&quot;: %4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="2910"/>
<source>&lt;Unchecked&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2591"/>
+ <location filename="mainwindow.cpp" line="2911"/>
<source>&lt;Update&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2592"/>
+ <location filename="mainwindow.cpp" line="2912"/>
<source>&lt;No category&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2593"/>
+ <location filename="mainwindow.cpp" line="2913"/>
<source>&lt;Conflicted&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2626"/>
+ <location filename="mainwindow.cpp" line="2914"/>
+ <source>&lt;Not Endorsed&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="2947"/>
<source>failed to rename mod: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2639"/>
+ <location filename="mainwindow.cpp" line="2960"/>
<source>Overwrite?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2640"/>
+ <location filename="mainwindow.cpp" line="2961"/>
<source>This will replace the existing mod &quot;%1&quot;. Continue?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2643"/>
+ <location filename="mainwindow.cpp" line="2964"/>
<source>failed to remove mod &quot;%1&quot;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2647"/>
- <location filename="mainwindow.cpp" line="3953"/>
- <location filename="mainwindow.cpp" line="3977"/>
+ <location filename="mainwindow.cpp" line="2968"/>
+ <location filename="mainwindow.cpp" line="4446"/>
+ <location filename="mainwindow.cpp" line="4470"/>
<source>failed to rename &quot;%1&quot; to &quot;%2&quot;</source>
<translation type="unfinished">&quot;%1&quot;yi &quot;%2&quot; olarak yeniden adlandırma başarılı olamadı.</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2702"/>
- <location filename="mainwindow.cpp" line="3243"/>
- <location filename="mainwindow.cpp" line="3252"/>
+ <location filename="mainwindow.cpp" line="3024"/>
+ <location filename="mainwindow.cpp" line="3687"/>
+ <location filename="mainwindow.cpp" line="3695"/>
+ <location filename="mainwindow.cpp" line="3902"/>
<source>Confirm</source>
<translation type="unfinished">Onayla</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2703"/>
+ <location filename="mainwindow.cpp" line="3025"/>
<source>Remove the following mods?&lt;br&gt;&lt;ul&gt;%1&lt;/ul&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2714"/>
+ <location filename="mainwindow.cpp" line="3036"/>
<source>failed to remove mod: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2744"/>
- <location filename="mainwindow.cpp" line="2747"/>
+ <location filename="mainwindow.cpp" line="3071"/>
+ <location filename="mainwindow.cpp" line="3074"/>
<source>Failed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2744"/>
+ <location filename="mainwindow.cpp" line="3071"/>
<source>Installation file no longer exists</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2748"/>
+ <location filename="mainwindow.cpp" line="3075"/>
<source>Mods installed with old versions of MO can&apos;t be reinstalled in this way.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2763"/>
- <location filename="mainwindow.cpp" line="2790"/>
+ <location filename="mainwindow.cpp" line="3090"/>
+ <location filename="mainwindow.cpp" line="3117"/>
<source>You need to be logged in with Nexus to endorse</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2906"/>
- <location filename="mainwindow.cpp" line="4335"/>
+ <location filename="mainwindow.cpp" line="3249"/>
+ <location filename="mainwindow.cpp" line="4882"/>
<source>Extract BSA</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2907"/>
+ <location filename="mainwindow.cpp" line="3250"/>
<source>This mod contains at least one BSA. Do you want to unpack it?
(This removes the BSA after completion. If you don&apos;t know about BSAs, just select no)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2917"/>
- <location filename="mainwindow.cpp" line="4292"/>
- <location filename="mainwindow.cpp" line="4343"/>
+ <location filename="mainwindow.cpp" line="3259"/>
+ <location filename="mainwindow.cpp" line="4839"/>
+ <location filename="mainwindow.cpp" line="4890"/>
<source>failed to read %1: %2</source>
<translation type="unfinished">%1: %2 okunamadı</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2930"/>
- <location filename="mainwindow.cpp" line="4354"/>
+ <location filename="mainwindow.cpp" line="3272"/>
+ <location filename="mainwindow.cpp" line="4901"/>
<source>This archive contains invalid hashes. Some files may be broken.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2964"/>
+ <location filename="mainwindow.cpp" line="3306"/>
<source>Nexus ID for this Mod is unknown</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3243"/>
+ <location filename="mainwindow.cpp" line="3346"/>
+ <source>This will move all files from overwrite into a new, regular mod.
+Please enter a name:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="3613"/>
+ <source>Continue?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="3614"/>
+ <source>The versioning scheme decides which version is considered newer than another.
+This function will guess the versioning scheme under the assumption that the installed version is outdated.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="3634"/>
+ <location filename="mainwindow.cpp" line="4516"/>
+ <source>Sorry</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="3635"/>
+ <source>I don&apos;t know a versioning scheme where %1 is newer than %2.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="3687"/>
<source>Really enable all visible mods?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3252"/>
+ <location filename="mainwindow.cpp" line="3695"/>
<source>Really disable all visible mods?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3261"/>
+ <location filename="mainwindow.cpp" line="3703"/>
<source>Choose what to export</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3263"/>
+ <location filename="mainwindow.cpp" line="3705"/>
<source>Everything</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3263"/>
+ <location filename="mainwindow.cpp" line="3705"/>
<source>All installed mods are included in the list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3264"/>
+ <location filename="mainwindow.cpp" line="3706"/>
<source>Active Mods</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3264"/>
+ <location filename="mainwindow.cpp" line="3706"/>
<source>Only active (checked) mods from your current profile are included</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3265"/>
+ <location filename="mainwindow.cpp" line="3707"/>
<source>Visible</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3265"/>
+ <location filename="mainwindow.cpp" line="3707"/>
<source>All mods visible in the mod list are included</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3308"/>
+ <location filename="mainwindow.cpp" line="3750"/>
<source>export failed: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3321"/>
+ <location filename="mainwindow.cpp" line="3774"/>
<source>Install Mod...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3323"/>
+ <location filename="mainwindow.cpp" line="3776"/>
<source>Enable all visible</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3324"/>
+ <location filename="mainwindow.cpp" line="3777"/>
<source>Disable all visible</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3326"/>
+ <location filename="mainwindow.cpp" line="3779"/>
<source>Check all for update</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3330"/>
+ <location filename="mainwindow.cpp" line="3783"/>
<source>Export to csv...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3338"/>
+ <location filename="mainwindow.cpp" line="3791"/>
<source>Sync to Mods...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3342"/>
+ <location filename="mainwindow.cpp" line="3795"/>
<source>Restore Backup</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3343"/>
+ <location filename="mainwindow.cpp" line="3796"/>
<source>Remove Backup...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3345"/>
- <source>Set Category</source>
+ <location filename="mainwindow.cpp" line="3808"/>
+ <source>Primary Category</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3349"/>
- <source>Primary Category</source>
+ <location filename="mainwindow.cpp" line="3815"/>
+ <source>Change versioning scheme</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3353"/>
+ <location filename="mainwindow.cpp" line="3819"/>
+ <source>Un-ignore update</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="3821"/>
+ <source>Ignore update</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="3826"/>
<source>Rename Mod...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3354"/>
+ <location filename="mainwindow.cpp" line="3827"/>
<source>Remove Mod...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3355"/>
+ <location filename="mainwindow.cpp" line="3828"/>
<source>Reinstall Mod</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3358"/>
+ <location filename="mainwindow.cpp" line="3831"/>
<source>Un-Endorse</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3361"/>
- <location filename="mainwindow.cpp" line="3365"/>
+ <location filename="mainwindow.cpp" line="3834"/>
+ <location filename="mainwindow.cpp" line="3838"/>
<source>Endorse</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3362"/>
+ <location filename="mainwindow.cpp" line="3835"/>
<source>Won&apos;t endorse</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3368"/>
+ <location filename="mainwindow.cpp" line="3841"/>
<source>Endorsement state unknown</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3375"/>
+ <location filename="mainwindow.cpp" line="3848"/>
<source>Ignore missing data</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3378"/>
+ <location filename="mainwindow.cpp" line="3851"/>
<source>Visit on Nexus</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3379"/>
+ <location filename="mainwindow.cpp" line="3852"/>
<source>Open in explorer</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3382"/>
+ <location filename="mainwindow.cpp" line="3855"/>
<source>Information...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3388"/>
- <location filename="mainwindow.cpp" line="4514"/>
+ <location filename="mainwindow.cpp" line="3861"/>
+ <location filename="mainwindow.cpp" line="5086"/>
<source>Exception: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3390"/>
- <location filename="mainwindow.cpp" line="4516"/>
+ <location filename="mainwindow.cpp" line="3863"/>
+ <location filename="mainwindow.cpp" line="5088"/>
<source>Unknown exception</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3412"/>
+ <location filename="mainwindow.cpp" line="3885"/>
<source>&lt;Multiple&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3524"/>
+ <location filename="mainwindow.cpp" line="3902"/>
+ <source>Really delete &quot;%1&quot;?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="4013"/>
<source>Fix Mods...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3548"/>
- <location filename="mainwindow.cpp" line="3579"/>
+ <location filename="mainwindow.cpp" line="4014"/>
+ <source>Delete</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="4038"/>
+ <location filename="mainwindow.cpp" line="4069"/>
<source>failed to remove %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3563"/>
- <location filename="mainwindow.cpp" line="3594"/>
+ <location filename="mainwindow.cpp" line="4053"/>
+ <location filename="mainwindow.cpp" line="4084"/>
<source>failed to create %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3615"/>
+ <location filename="mainwindow.cpp" line="4107"/>
<source>Can&apos;t change download directory while downloads are in progress!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3686"/>
+ <location filename="mainwindow.cpp" line="4174"/>
<source>Download failed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3830"/>
+ <location filename="mainwindow.cpp" line="4323"/>
<source>failed to write to file %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3836"/>
+ <location filename="mainwindow.cpp" line="4329"/>
<source>%1 written</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3875"/>
+ <location filename="mainwindow.cpp" line="4368"/>
<source>Select binary</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3875"/>
+ <location filename="mainwindow.cpp" line="4368"/>
<source>Binary</source>
<translation type="unfinished">İkili değer</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3901"/>
+ <location filename="mainwindow.cpp" line="4394"/>
<source>Enter Name</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3902"/>
+ <location filename="mainwindow.cpp" line="4395"/>
<source>Please enter a name for the executable</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3913"/>
+ <location filename="mainwindow.cpp" line="4406"/>
<source>Not an executable</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3913"/>
+ <location filename="mainwindow.cpp" line="4406"/>
<source>This is not a recognized executable.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3938"/>
- <location filename="mainwindow.cpp" line="3963"/>
+ <location filename="mainwindow.cpp" line="4431"/>
+ <location filename="mainwindow.cpp" line="4456"/>
<source>Replace file?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3938"/>
+ <location filename="mainwindow.cpp" line="4431"/>
<source>There already is a hidden version of this file. Replace it?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3941"/>
- <location filename="mainwindow.cpp" line="3966"/>
+ <location filename="mainwindow.cpp" line="4434"/>
+ <location filename="mainwindow.cpp" line="4459"/>
<source>File operation failed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3941"/>
- <location filename="mainwindow.cpp" line="3966"/>
+ <location filename="mainwindow.cpp" line="4434"/>
+ <location filename="mainwindow.cpp" line="4459"/>
<source>Failed to remove &quot;%1&quot;. Maybe you lack the required file permissions?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3963"/>
+ <location filename="mainwindow.cpp" line="4456"/>
<source>There already is a visible version of this file. Replace it?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4009"/>
+ <location filename="mainwindow.cpp" line="4489"/>
+ <source>file not found: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="4502"/>
+ <source>failed to generate preview for %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="4516"/>
+ <source>Sorry, can&apos;t preview anything. This function currently does not support extracting from bsas.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="4547"/>
<source>Update available</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4046"/>
+ <location filename="mainwindow.cpp" line="4584"/>
<source>Open/Execute</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4047"/>
+ <location filename="mainwindow.cpp" line="4585"/>
<source>Add as Executable</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4051"/>
+ <location filename="mainwindow.cpp" line="4589"/>
+ <source>Preview</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="4595"/>
<source>Un-Hide</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4053"/>
+ <location filename="mainwindow.cpp" line="4597"/>
<source>Hide</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4058"/>
+ <location filename="mainwindow.cpp" line="4603"/>
<source>Write To File...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4088"/>
+ <location filename="mainwindow.cpp" line="4634"/>
<source>Do you want to endorse Mod Organizer on %1 now?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4505"/>
+ <location filename="mainwindow.cpp" line="5047"/>
+ <source>Remove</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="5077"/>
<source>Unlock load order</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4508"/>
+ <location filename="mainwindow.cpp" line="5080"/>
<source>Lock load order</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4223"/>
+ <location filename="mainwindow.cpp" line="5149"/>
+ <source>BOSS working</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="5157"/>
+ <source>failed to run boss: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="4770"/>
<source>Request to Nexus failed: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4230"/>
- <location filename="mainwindow.cpp" line="4247"/>
+ <location filename="mainwindow.cpp" line="1284"/>
+ <source>Executable &quot;%1&quot; not found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="3798"/>
+ <source>Add/Remove Categories</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="3803"/>
+ <source>Replace Categories</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="4777"/>
+ <location filename="mainwindow.cpp" line="4794"/>
<source>login successful</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4256"/>
+ <location filename="mainwindow.cpp" line="4803"/>
<source>login failed: %1. Trying to download anyway</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4262"/>
+ <location filename="mainwindow.cpp" line="4809"/>
<source>login failed: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4271"/>
+ <location filename="mainwindow.cpp" line="4818"/>
<source>login failed: %1. You need to log-in with Nexus to update MO.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4304"/>
+ <location filename="mainwindow.cpp" line="4851"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4304"/>
+ <location filename="mainwindow.cpp" line="4851"/>
<source>failed to extract %1 (errorcode %2)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4399"/>
+ <location filename="mainwindow.cpp" line="4946"/>
<source>Extract...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4449"/>
+ <location filename="mainwindow.cpp" line="5002"/>
<source>Edit Categories...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4485"/>
+ <location filename="mainwindow.cpp" line="5057"/>
<source>Enable all</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4486"/>
+ <location filename="mainwindow.cpp" line="5058"/>
<source>Disable all</source>
<translation type="unfinished"></translation>
</message>
@@ -2526,7 +2779,7 @@ Please enter a name: </source>
<context>
<name>ModInfoBackup</name>
<message>
- <location filename="modinfo.cpp" line="784"/>
+ <location filename="modinfo.cpp" line="820"/>
<source>This is the backup of a mod</source>
<translation type="unfinished"></translation>
</message>
@@ -2539,87 +2792,85 @@ Please enter a name: </source>
<translation>Mod bilgisi</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="27"/>
+ <location filename="modinfodialog.ui" line="30"/>
<source>Textfiles</source>
<translation>Yazı dosyaları</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="39"/>
+ <location filename="modinfodialog.ui" line="42"/>
<source>A list of text-files in the mod directory.</source>
<translation>Mod klasöründeki yazı dosyalarının bir listesi</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="42"/>
+ <location filename="modinfodialog.ui" line="45"/>
<source>A list of text-files in the mod directory like readmes. </source>
<translation>Mod klasöründeki benioku dosyaları gibi yazı dosyalarının bir listesi</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="64"/>
- <location filename="modinfodialog.ui" line="149"/>
+ <location filename="modinfodialog.ui" line="67"/>
+ <location filename="modinfodialog.ui" line="155"/>
<source>Save</source>
<translation>Kaydet</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="74"/>
+ <location filename="modinfodialog.ui" line="77"/>
<source>INI-Files</source>
<translation>INI-Dosyaları</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="94"/>
+ <location filename="modinfodialog.ui" line="97"/>
<source>This is a list of .ini files in the mod.</source>
<translation>Mod klasöründeki .ini dosyalarının bir listesi</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="97"/>
+ <location filename="modinfodialog.ui" line="100"/>
<source>This is a list of .ini files in the mod. These are usually used to configure the behaviour of mods if there are configurable parameters.</source>
<translation>Moddaki .ini dosyalarının bir listesi. Bunlar genelde, ayarlabilir parametrelerin olduğuğu durumlarda modların davranışlarını ayarlamak için kullanılır.</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="143"/>
+ <location filename="modinfodialog.ui" line="149"/>
<source>Save changes to the file.</source>
<translation>Değişiklikleri dosyaya kaydet.</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="146"/>
+ <location filename="modinfodialog.ui" line="152"/>
<source>Save changes to the file. This overwrites the original. There is no automatic backup!</source>
<translation>Değişiklikleri dosyaya kaydet. Bu orijinal dosyanın üzerine yazar. Otomatik yedekleme yoktur!</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="159"/>
+ <location filename="modinfodialog.ui" line="165"/>
<source>Images</source>
<translation>Resimler</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="214"/>
+ <location filename="modinfodialog.ui" line="220"/>
<source>Images located in the mod.</source>
<translation>Modun içinde yer alan resimler</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="217"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;This lists all the images (.jpg and .png) in the mod directory, like screenshots and such. Click one to get a larger view.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <translation>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+ <translation type="obsolete">&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Bu mod klasöründe yer alan ekran resimleri ve benzeri resimlerin(.jpg ve.png) bir listesidir. Tıklayararak daha büyük görüntü alabilirsiniz&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="254"/>
- <location filename="modinfodialog.ui" line="277"/>
+ <location filename="modinfodialog.ui" line="256"/>
+ <location filename="modinfodialog.ui" line="275"/>
<source>Optional ESPs</source>
<translation>İsteğe bağlı ESP&apos;ler</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="260"/>
+ <location filename="modinfodialog.ui" line="262"/>
<source>List of esps and esms that can not be loaded by the game.</source>
<translation>Oyun tarafından yüklenemeyen espler ve esmlerin bir listesi.</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="263"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
@@ -2628,7 +2879,7 @@ p, li { white-space: pre-wrap; }
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;They usually contain optional functionality, see the readme.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;&quot;&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Most mods do not have optional esps, so chances are good you are looking at an empty list.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <translation>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+ <translation type="obsolete">&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
@@ -2638,103 +2889,116 @@ p, li { white-space: pre-wrap; }
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Pek çok mod isteğe bağlı esp&apos;ler içermez, bu nedenle büyük ihtimalle boş bir listeye bakıyorsunuz.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="292"/>
+ <location filename="modinfodialog.ui" line="223"/>
+ <source>This lists all the images (.jpg and .png) in the mod directory, like screenshots and such. Click one to get a larger view.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="modinfodialog.ui" line="265"/>
+ <source>List of esps and esms contained in this plugin that currently can not be loaded by the game. They will not even appear in the esp-list in the main MO-window.
+They usually contain optional functionality, see the readme.
+
+Most mods do not have optional esps, so chances are good you are looking at an empty list.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="modinfodialog.ui" line="290"/>
<source>Make the selected mod in the lower list unavailable.</source>
<translation>Aşağıdaki listedeki seçili modu kullanılamaz yapar.</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="295"/>
+ <location filename="modinfodialog.ui" line="293"/>
<source>The selected esp (in the lower list) will be pushed into a subdirectory of the mod and will thus become &quot;invisible&quot; to the game. It can then no longer be activated.</source>
<translation>Seçili esp (aşağıdaki listede) modun bir alt klasörüne itilecek ve böylece oyuna &quot;görünmez&quot; olacaktır. Artık aktif hale getirilemez.</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="321"/>
+ <location filename="modinfodialog.ui" line="319"/>
<source>Move a file to the data directory.</source>
<translation>Dosyayı veri klasörüne taşı.</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="324"/>
+ <location filename="modinfodialog.ui" line="322"/>
<source>This moves a esp to the esp directory so it can be enabled in the main window. Please note that the ESP merely becomes &quot;available&quot;, it will not necessarily be loaded! That is configured in the main window of omo.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="359"/>
+ <location filename="modinfodialog.ui" line="357"/>
<source>ESPs in the data directory and thus visible to the game.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="362"/>
+ <location filename="modinfodialog.ui" line="360"/>
<source>These are the mod files that are in the (virtual) data directory of your game and will thus be selecteable in the esp list in the main window.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="369"/>
+ <location filename="modinfodialog.ui" line="367"/>
<source>Available ESPs</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="377"/>
+ <location filename="modinfodialog.ui" line="375"/>
<source>Conflicts</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="385"/>
+ <location filename="modinfodialog.ui" line="383"/>
<source>The following conflicted files are provided by this mod</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="432"/>
- <location filename="modinfodialog.ui" line="479"/>
+ <location filename="modinfodialog.ui" line="433"/>
+ <location filename="modinfodialog.ui" line="483"/>
<source>File</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="437"/>
+ <location filename="modinfodialog.ui" line="438"/>
<source>Overwritten Mods</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="447"/>
+ <location filename="modinfodialog.ui" line="448"/>
<source>The following conflicted files are provided by other mods</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="484"/>
+ <location filename="modinfodialog.ui" line="488"/>
<source>Providing Mod</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="494"/>
+ <location filename="modinfodialog.ui" line="498"/>
<source>Non-Conflicted files</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="514"/>
+ <location filename="modinfodialog.ui" line="518"/>
<source>Categories</source>
<translation type="unfinished">Kategoriler</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="537"/>
+ <location filename="modinfodialog.ui" line="541"/>
<source>Primary Category</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="554"/>
+ <location filename="modinfodialog.ui" line="558"/>
<source>Nexus Info</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="562"/>
+ <location filename="modinfodialog.ui" line="566"/>
<source>Mod ID</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="569"/>
+ <location filename="modinfodialog.ui" line="573"/>
<source>Mod ID for this mod on Nexus.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="572"/>
+ <location filename="modinfodialog.ui" line="576"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
@@ -2743,7 +3007,7 @@ p, li { white-space: pre-wrap; }
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="596"/>
+ <location filename="modinfodialog.ui" line="600"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
@@ -2752,61 +3016,61 @@ p, li { white-space: pre-wrap; }
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="603"/>
+ <location filename="modinfodialog.ui" line="607"/>
<source>Version</source>
<translation type="unfinished">Versiyon</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="633"/>
+ <location filename="modinfodialog.ui" line="637"/>
<source>Refresh</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="636"/>
+ <location filename="modinfodialog.ui" line="640"/>
<source>Refresh all information from Nexus.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="650"/>
+ <location filename="modinfodialog.ui" line="654"/>
<source>Description</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="665"/>
+ <location filename="modinfodialog.ui" line="669"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
-&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
+ <location filename="modinfodialog.cpp" line="1221"/>
<source>Name</source>
- <translation type="obsolete">İsim</translation>
+ <translation type="unfinished">İsim</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="701"/>
+ <location filename="modinfodialog.ui" line="704"/>
<source>Endorse</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="715"/>
+ <location filename="modinfodialog.ui" line="718"/>
<source>Notes</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="725"/>
+ <location filename="modinfodialog.ui" line="728"/>
<source>Filetree</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="734"/>
+ <location filename="modinfodialog.ui" line="737"/>
<source>A directory view of this mod</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="737"/>
+ <location filename="modinfodialog.ui" line="740"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
@@ -2816,211 +3080,237 @@ p, li { white-space: pre-wrap; }
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="764"/>
+ <location filename="modinfodialog.ui" line="767"/>
<source>Previous</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="771"/>
+ <location filename="modinfodialog.ui" line="774"/>
<source>Next</source>
<translation type="unfinished">Sonraki</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="791"/>
+ <location filename="modinfodialog.ui" line="794"/>
<source>Close</source>
<translation type="unfinished">Kapat</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="108"/>
+ <location filename="modinfodialog.cpp" line="104"/>
<source>&amp;Delete</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="109"/>
+ <location filename="modinfodialog.cpp" line="105"/>
<source>&amp;Rename</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="110"/>
+ <location filename="modinfodialog.cpp" line="106"/>
<source>&amp;Hide</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="111"/>
+ <location filename="modinfodialog.cpp" line="107"/>
<source>&amp;Unhide</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="112"/>
+ <location filename="modinfodialog.cpp" line="108"/>
<source>&amp;Open</source>
<translation type="unfinished">&amp;Aç</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="113"/>
+ <location filename="modinfodialog.cpp" line="109"/>
<source>&amp;New Folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="352"/>
- <location filename="modinfodialog.cpp" line="367"/>
+ <location filename="modinfodialog.cpp" line="405"/>
+ <location filename="modinfodialog.cpp" line="420"/>
<source>Save changes?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="563"/>
+ <location filename="modinfodialog.cpp" line="612"/>
<source>File Exists</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="563"/>
+ <location filename="modinfodialog.cpp" line="612"/>
<source>A file with that name exists, please enter a new one</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="580"/>
+ <location filename="modinfodialog.cpp" line="629"/>
<source>failed to move file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="605"/>
+ <location filename="modinfodialog.cpp" line="654"/>
<source>failed to create directory &quot;optional&quot;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="643"/>
- <location filename="modinfodialog.cpp" line="1155"/>
+ <location filename="modinfodialog.cpp" line="692"/>
+ <location filename="modinfodialog.cpp" line="1198"/>
<source>Info requested, please wait</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="758"/>
+ <location filename="modinfodialog.cpp" line="807"/>
<source>(description incomplete, please visit nexus)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="713"/>
+ <location filename="modinfodialog.cpp" line="1221"/>
+ <source>Please enter a name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="modinfodialog.cpp" line="1225"/>
+ <location filename="modinfodialog.cpp" line="1228"/>
+ <source>Error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="modinfodialog.cpp" line="1225"/>
+ <source>Invalid name. Must be a valid file name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="modinfodialog.cpp" line="1228"/>
+ <source>A tweak by that name exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="modinfodialog.cpp" line="1240"/>
+ <source>Create Tweak</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="modinfodialog.cpp" line="762"/>
<source>Current Version: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="717"/>
+ <location filename="modinfodialog.cpp" line="766"/>
<source>No update available</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="697"/>
+ <location filename="modinfodialog.cpp" line="746"/>
<source>Main</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="352"/>
- <location filename="modinfodialog.cpp" line="367"/>
+ <location filename="modinfodialog.cpp" line="405"/>
+ <location filename="modinfodialog.cpp" line="420"/>
<source>Save changes to &quot;%1&quot;?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="698"/>
+ <location filename="modinfodialog.cpp" line="747"/>
<source>Update</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="699"/>
+ <location filename="modinfodialog.cpp" line="748"/>
<source>Optional</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="700"/>
+ <location filename="modinfodialog.cpp" line="749"/>
<source>Old</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="701"/>
+ <location filename="modinfodialog.cpp" line="750"/>
<source>Misc</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="702"/>
+ <location filename="modinfodialog.cpp" line="751"/>
<source>Unknown</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="779"/>
+ <location filename="modinfodialog.cpp" line="822"/>
<source>&lt;a href=&quot;%1&quot;&gt;Visit on Nexus&lt;/a&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="869"/>
- <location filename="modinfodialog.cpp" line="874"/>
+ <location filename="modinfodialog.cpp" line="912"/>
+ <location filename="modinfodialog.cpp" line="917"/>
<source>Confirm</source>
<translation type="unfinished">Onayla</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="858"/>
+ <location filename="modinfodialog.cpp" line="901"/>
<source>Failed to delete %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="869"/>
+ <location filename="modinfodialog.cpp" line="912"/>
<source>Are sure you want to delete &quot;%1&quot;?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="874"/>
+ <location filename="modinfodialog.cpp" line="917"/>
<source>Are sure you want to delete the selected files?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="948"/>
- <location filename="modinfodialog.cpp" line="954"/>
+ <location filename="modinfodialog.cpp" line="991"/>
+ <location filename="modinfodialog.cpp" line="997"/>
<source>New Folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="960"/>
+ <location filename="modinfodialog.cpp" line="1003"/>
<source>Failed to create &quot;%1&quot;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="1064"/>
- <location filename="modinfodialog.cpp" line="1088"/>
+ <location filename="modinfodialog.cpp" line="1107"/>
+ <location filename="modinfodialog.cpp" line="1131"/>
<source>Replace file?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="1064"/>
+ <location filename="modinfodialog.cpp" line="1107"/>
<source>There already is a hidden version of this file. Replace it?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="1067"/>
- <location filename="modinfodialog.cpp" line="1091"/>
+ <location filename="modinfodialog.cpp" line="1110"/>
+ <location filename="modinfodialog.cpp" line="1134"/>
<source>File operation failed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="1067"/>
- <location filename="modinfodialog.cpp" line="1091"/>
+ <location filename="modinfodialog.cpp" line="1110"/>
+ <location filename="modinfodialog.cpp" line="1134"/>
<source>Failed to remove &quot;%1&quot;. Maybe you lack the required file permissions?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="1078"/>
- <location filename="modinfodialog.cpp" line="1101"/>
+ <location filename="modinfodialog.cpp" line="1121"/>
+ <location filename="modinfodialog.cpp" line="1144"/>
<source>failed to rename %1 to %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="1088"/>
+ <location filename="modinfodialog.cpp" line="1131"/>
<source>There already is a visible version of this file. Replace it?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="1135"/>
+ <location filename="modinfodialog.cpp" line="1178"/>
<source>Un-Hide</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="1137"/>
+ <location filename="modinfodialog.cpp" line="1180"/>
<source>Hide</source>
<translation type="unfinished"></translation>
</message>
@@ -3028,12 +3318,7 @@ p, li { white-space: pre-wrap; }
<context>
<name>ModInfoOverwrite</name>
<message>
- <location filename="modinfo.h" line="812"/>
- <source>Overwrite</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="modinfo.cpp" line="821"/>
+ <location filename="modinfo.cpp" line="866"/>
<source>This pseudo mod contains files from the virtual data tree that got modified (i.e. by the construction kit)</source>
<translation type="unfinished"></translation>
</message>
@@ -3041,17 +3326,17 @@ p, li { white-space: pre-wrap; }
<context>
<name>ModInfoRegular</name>
<message>
- <location filename="modinfo.cpp" line="392"/>
+ <location filename="modinfo.cpp" line="393"/>
<source>failed to write %1/meta.ini: %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfo.cpp" line="625"/>
+ <location filename="modinfo.cpp" line="661"/>
<source>%1 contains no esp/esm and no asset (textures, meshes, interface, ...) directory</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfo.cpp" line="629"/>
+ <location filename="modinfo.cpp" line="665"/>
<source>Categories: &lt;br&gt;</source>
<translation type="unfinished"></translation>
</message>
@@ -3059,16 +3344,11 @@ p, li { white-space: pre-wrap; }
<context>
<name>ModList</name>
<message>
- <location filename="modlist.cpp" line="662"/>
+ <location filename="modlist.cpp" line="776"/>
<source>Confirm</source>
<translation type="unfinished">Onayla</translation>
</message>
<message>
- <location filename="modlist.cpp" line="94"/>
- <source>Overwrite</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<location filename="modlist.cpp" line="109"/>
<source>This entry contains files that have been created inside the virtual data tree (i.e. by the construction kit)</source>
<translation type="unfinished"></translation>
@@ -3109,28 +3389,29 @@ p, li { white-space: pre-wrap; }
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="736"/>
+ <location filename="modlist.cpp" line="850"/>
<source>Category of the mod.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="737"/>
+ <location filename="modlist.cpp" line="851"/>
<source>Id of the mod as used on Nexus.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="738"/>
+ <location filename="modlist.cpp" line="852"/>
<source>Emblemes to highlight things that might require attention.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="298"/>
+ <location filename="modlist.cpp" line="318"/>
<source>Categories: &lt;br&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="294"/>
- <source>installed version: %1, newest version: %2</source>
+ <location filename="modlist.cpp" line="308"/>
+ <source>installed version: &quot;%1&quot;, newest version: &quot;%2&quot;</source>
+ <oldsource>installed version: %1, newest version: %2</oldsource>
<translation type="unfinished"></translation>
</message>
<message>
@@ -3138,83 +3419,88 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">İsim</translation>
</message>
<message>
- <location filename="modlist.cpp" line="719"/>
+ <location filename="modlist.cpp" line="833"/>
<source>Version</source>
<translation type="unfinished">Versiyon</translation>
</message>
<message>
- <location filename="modlist.cpp" line="733"/>
+ <location filename="modlist.cpp" line="847"/>
<source>Version of the mod (if available)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="720"/>
+ <location filename="modlist.cpp" line="834"/>
<source>Priority</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="184"/>
+ <location filename="modlist.cpp" line="197"/>
<source>invalid</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="327"/>
+ <location filename="modlist.cpp" line="310"/>
+ <source>The newest version on Nexus seems to be older than the one you have installed. This could either mean the version you have has been withdrawn (i.e. due to a bug) or the author uses a non-standard versioning scheme and that newest version is actually newer. Either way you may want to &quot;upgrade&quot;.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="modlist.cpp" line="347"/>
<source>Invalid name</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="603"/>
+ <location filename="modlist.cpp" line="717"/>
<source>drag&amp;drop failed: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="717"/>
+ <location filename="modlist.cpp" line="831"/>
<source>Flags</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="718"/>
+ <location filename="modlist.cpp" line="832"/>
<source>Mod Name</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="721"/>
+ <location filename="modlist.cpp" line="835"/>
<source>Category</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="722"/>
+ <location filename="modlist.cpp" line="836"/>
<source>Nexus ID</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="723"/>
+ <location filename="modlist.cpp" line="837"/>
<source>Installation</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="724"/>
- <location filename="modlist.cpp" line="740"/>
+ <location filename="modlist.cpp" line="838"/>
+ <location filename="modlist.cpp" line="854"/>
<source>unknown</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="732"/>
+ <location filename="modlist.cpp" line="846"/>
<source>Name of your mods</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="734"/>
+ <location filename="modlist.cpp" line="848"/>
<source>Installation priority of your mod. The higher, the more &quot;important&quot; it is and thus overwrites files from mods with lower priority.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="739"/>
+ <location filename="modlist.cpp" line="853"/>
<source>Time this mod was installed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="662"/>
+ <location filename="modlist.cpp" line="776"/>
<source>Are you sure you want to remove &quot;%1&quot;?</source>
<translation type="unfinished"></translation>
</message>
@@ -3235,12 +3521,12 @@ p, li { white-space: pre-wrap; }
<context>
<name>MyFileSystemModel</name>
<message>
- <location filename="overwriteinfodialog.cpp" line="48"/>
+ <location filename="overwriteinfodialog.cpp" line="47"/>
<source>Overwrites</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="overwriteinfodialog.cpp" line="60"/>
+ <location filename="overwriteinfodialog.cpp" line="59"/>
<source>not implemented</source>
<translation type="unfinished"></translation>
</message>
@@ -3249,11 +3535,16 @@ p, li { white-space: pre-wrap; }
<name>NXMAccessManager</name>
<message>
<location filename="nxmaccessmanager.cpp" line="130"/>
+ <source>Logging into Nexus</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="nxmaccessmanager.cpp" line="145"/>
<source>timeout</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="nxmaccessmanager.cpp" line="168"/>
+ <location filename="nxmaccessmanager.cpp" line="185"/>
<source>Please check your password</source>
<translation type="unfinished"></translation>
</message>
@@ -3261,17 +3552,17 @@ p, li { white-space: pre-wrap; }
<context>
<name>NexusInterface</name>
<message>
- <location filename="nexusinterface.cpp" line="201"/>
+ <location filename="nexusinterface.cpp" line="218"/>
<source>Failed to guess mod id for &quot;%1&quot;, please pick the correct one</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="nexusinterface.cpp" line="421"/>
+ <location filename="nexusinterface.cpp" line="455"/>
<source>empty response</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="nexusinterface.cpp" line="450"/>
+ <location filename="nexusinterface.cpp" line="483"/>
<source>invalid response</source>
<translation type="unfinished"></translation>
</message>
@@ -3309,34 +3600,34 @@ p, li { white-space: pre-wrap; }
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="overwriteinfodialog.cpp" line="137"/>
+ <location filename="overwriteinfodialog.cpp" line="136"/>
<source>Failed to delete &quot;%1&quot;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="overwriteinfodialog.cpp" line="148"/>
- <location filename="overwriteinfodialog.cpp" line="153"/>
+ <location filename="overwriteinfodialog.cpp" line="147"/>
+ <location filename="overwriteinfodialog.cpp" line="152"/>
<source>Confirm</source>
<translation type="unfinished">Onayla</translation>
</message>
<message>
- <location filename="overwriteinfodialog.cpp" line="148"/>
+ <location filename="overwriteinfodialog.cpp" line="147"/>
<source>Are sure you want to delete &quot;%1&quot;?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="overwriteinfodialog.cpp" line="153"/>
+ <location filename="overwriteinfodialog.cpp" line="152"/>
<source>Are sure you want to delete the selected files?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="overwriteinfodialog.cpp" line="203"/>
- <location filename="overwriteinfodialog.cpp" line="209"/>
+ <location filename="overwriteinfodialog.cpp" line="202"/>
+ <location filename="overwriteinfodialog.cpp" line="208"/>
<source>New Folder</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="overwriteinfodialog.cpp" line="215"/>
+ <location filename="overwriteinfodialog.cpp" line="214"/>
<source>Failed to create &quot;%1&quot;</source>
<translation type="unfinished"></translation>
</message>
@@ -3344,95 +3635,127 @@ p, li { white-space: pre-wrap; }
<context>
<name>PluginList</name>
<message>
- <location filename="pluginlist.cpp" line="98"/>
+ <location filename="pluginlist.cpp" line="111"/>
<source>Mod Index</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="99"/>
- <location filename="pluginlist.cpp" line="111"/>
+ <location filename="pluginlist.cpp" line="112"/>
+ <source>Flags</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="pluginlist.cpp" line="113"/>
+ <location filename="pluginlist.cpp" line="125"/>
<source>unknown</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="107"/>
+ <location filename="pluginlist.cpp" line="121"/>
<source>Name of your mods</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="108"/>
+ <location filename="pluginlist.cpp" line="122"/>
<source>Load priority of your mod. The higher, the more &quot;important&quot; it is and thus overwrites data from plugins with lower priority.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="110"/>
+ <location filename="pluginlist.cpp" line="124"/>
<source>The modindex determins the formids of objects originating from this mods.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="208"/>
+ <location filename="pluginlist.cpp" line="165"/>
+ <source>failed to update esp info for file %1 (source id: %2), error: %3</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="pluginlist.cpp" line="233"/>
<source>esp not found: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="215"/>
- <location filename="pluginlist.cpp" line="227"/>
+ <location filename="pluginlist.cpp" line="240"/>
+ <location filename="pluginlist.cpp" line="252"/>
<source>Confirm</source>
<translation type="unfinished">Onayla</translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="215"/>
+ <location filename="pluginlist.cpp" line="240"/>
<source>Really enable all plugins?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="227"/>
+ <location filename="pluginlist.cpp" line="252"/>
<source>Really disable all plugins?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="353"/>
+ <location filename="pluginlist.cpp" line="380"/>
<source>The file containing locked plugin indices is broken</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="366"/>
- <location filename="pluginlist.cpp" line="405"/>
- <source>failed to open output file: %1</source>
+ <location filename="pluginlist.cpp" line="418"/>
+ <source>Some of your plugins have invalid names! These plugins can not be loaded by the game. Please see mo_interface.log for a list of affected plugins and rename them.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="393"/>
- <source>Some of your plugins have invalid names! These plugins can not be loaded by the game. Please see mo_interface.log for a list of affected plugins and rename them.</source>
+ <location filename="pluginlist.cpp" line="644"/>
+ <source>BOSS dll incompatible</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="737"/>
+ <location filename="pluginlist.cpp" line="987"/>
+ <source>Missing Masters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="pluginlist.cpp" line="993"/>
+ <source>Enabled Masters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="pluginlist.cpp" line="1134"/>
<source>failed to restore load order for %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="631"/>
+ <location filename="pluginlist.cpp" line="983"/>
<source>This plugin can&apos;t be disabled (enforced by the game)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="633"/>
+ <location filename="pluginlist.cpp" line="985"/>
<source>Origin: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="96"/>
+ <location filename="pluginlist.cpp" line="109"/>
<source>Name</source>
<translation type="unfinished">İsim</translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="97"/>
+ <location filename="pluginlist.cpp" line="110"/>
<source>Priority</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
+ <name>PreviewDialog</name>
+ <message>
+ <location filename="previewdialog.ui" line="14"/>
+ <source>Preview</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="previewdialog.ui" line="78"/>
+ <source>Close</source>
+ <translation type="unfinished">Kapat</translation>
+ </message>
+</context>
+<context>
<name>ProblemsDialog</name>
<message>
<location filename="problemsdialog.ui" line="14"/>
@@ -3445,21 +3768,27 @@ p, li { white-space: pre-wrap; }
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:7.8pt; font-weight:400; font-style:normal;&quot;&gt;
-&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <oldsource>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
+p, li { white-space: pre-wrap; }
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</oldsource>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="problemsdialog.cpp" line="29"/>
- <source>fix</source>
- <translation type="unfinished"></translation>
+ <location filename="problemsdialog.ui" line="75"/>
+ <source>Close</source>
+ <translation type="unfinished">Kapat</translation>
</message>
<message>
- <location filename="problemsdialog.cpp" line="30"/>
+ <location filename="problemsdialog.cpp" line="44"/>
+ <location filename="problemsdialog.cpp" line="45"/>
<source>Fix</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="problemsdialog.cpp" line="34"/>
+ <location filename="problemsdialog.cpp" line="49"/>
<source>No guided fix</source>
<translation type="unfinished"></translation>
</message>
@@ -3467,72 +3796,72 @@ p, li { white-space: pre-wrap; }
<context>
<name>Profile</name>
<message>
- <location filename="profile.cpp" line="56"/>
+ <location filename="profile.cpp" line="59"/>
<source>invalid profile name %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="60"/>
+ <location filename="profile.cpp" line="63"/>
<source>failed to create %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="152"/>
- <source>failed to open &quot;%1&quot; for writing</source>
+ <location filename="profile.cpp" line="182"/>
+ <source>failed to write mod list: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="189"/>
+ <location filename="profile.cpp" line="193"/>
<source>failed to update tweaked ini file, wrong settings may be used: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="219"/>
+ <location filename="profile.cpp" line="223"/>
<source>failed to create tweaked ini: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="271"/>
- <location filename="profile.cpp" line="300"/>
- <location filename="profile.cpp" line="384"/>
- <location filename="profile.cpp" line="402"/>
- <location filename="profile.cpp" line="412"/>
+ <location filename="profile.cpp" line="276"/>
+ <location filename="profile.cpp" line="305"/>
+ <location filename="profile.cpp" line="390"/>
+ <location filename="profile.cpp" line="408"/>
+ <location filename="profile.cpp" line="418"/>
<source>invalid index %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="365"/>
+ <location filename="profile.cpp" line="371"/>
<source>Overwrite directory couldn&apos;t be parsed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="374"/>
+ <location filename="profile.cpp" line="380"/>
<source>invalid priority %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="561"/>
+ <location filename="profile.cpp" line="568"/>
<source>failed to parse ini file (%1)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="589"/>
+ <location filename="profile.cpp" line="596"/>
<source>failed to parse ini file (%1): %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="613"/>
- <location filename="profile.cpp" line="650"/>
+ <location filename="profile.cpp" line="620"/>
+ <location filename="profile.cpp" line="657"/>
<source>failed to modify &quot;%1&quot;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="678"/>
+ <location filename="profile.cpp" line="685"/>
<source>Delete savegames?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="679"/>
+ <location filename="profile.cpp" line="686"/>
<source>Do you want to delete local savegames? (If you select &quot;No&quot;, the save games will show up again if you re-enable local savegames)</source>
<translation type="unfinished"></translation>
</message>
@@ -3701,37 +4030,57 @@ p, li { white-space: pre-wrap; }
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profilesdialog.cpp" line="160"/>
+ <location filename="profilesdialog.cpp" line="162"/>
<source>failed to copy profile: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profilesdialog.cpp" line="167"/>
+ <location filename="profilesdialog.cpp" line="165"/>
+ <source>Invalid name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="profilesdialog.cpp" line="165"/>
+ <source>Invalid profile name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="profilesdialog.cpp" line="172"/>
<source>Confirm</source>
<translation type="unfinished">Onayla</translation>
</message>
<message>
- <location filename="profilesdialog.cpp" line="167"/>
- <source>Are you sure you want to remove this profile?</source>
+ <location filename="profilesdialog.cpp" line="172"/>
+ <source>Are you sure you want to remove this profile (including local savegames if any)?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profilesdialog.cpp" line="196"/>
+ <location filename="profilesdialog.cpp" line="182"/>
+ <source>Profile broken</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="profilesdialog.cpp" line="183"/>
+ <source>This profile you&apos;re about to delete seems to be broken or the path is invalid. I&apos;m about to delete the following folder: &quot;%1&quot;. Proceed?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="profilesdialog.cpp" line="215"/>
<source>Rename Profile</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profilesdialog.cpp" line="196"/>
+ <location filename="profilesdialog.cpp" line="215"/>
<source>New Name</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profilesdialog.cpp" line="233"/>
+ <location filename="profilesdialog.cpp" line="252"/>
<source>failed to change archive invalidation state: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profilesdialog.cpp" line="270"/>
+ <location filename="profilesdialog.cpp" line="289"/>
<source>failed to determine if invalidation is active: %1</source>
<translation type="unfinished"></translation>
</message>
@@ -3739,20 +4088,20 @@ p, li { white-space: pre-wrap; }
<context>
<name>QObject</name>
<message>
- <location filename="categories.cpp" line="133"/>
+ <location filename="categories.cpp" line="141"/>
<source>Failed to save custom categories</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="categories.cpp" line="210"/>
- <location filename="categories.cpp" line="245"/>
- <location filename="categories.cpp" line="255"/>
- <location filename="categories.cpp" line="265"/>
+ <location filename="categories.cpp" line="218"/>
+ <location filename="categories.cpp" line="253"/>
+ <location filename="categories.cpp" line="263"/>
+ <location filename="categories.cpp" line="273"/>
<source>invalid index %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="categories.cpp" line="276"/>
+ <location filename="categories.cpp" line="284"/>
<source>invalid category id %1</source>
<translation type="unfinished"></translation>
</message>
@@ -3768,7 +4117,7 @@ p, li { white-space: pre-wrap; }
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="63"/>
+ <location filename="installationmanager.cpp" line="64"/>
<location filename="selfupdater.cpp" line="52"/>
<source>invalid 7-zip32.dll: %1</source>
<translation type="unfinished"></translation>
@@ -3838,92 +4187,97 @@ p, li { white-space: pre-wrap; }
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="93"/>
+ <location filename="profile.cpp" line="96"/>
<source>&quot;%1&quot; is missing</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="main.cpp" line="134"/>
+ <location filename="main.cpp" line="139"/>
<source>Permissions required</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="main.cpp" line="234"/>
- <location filename="main.cpp" line="272"/>
- <source>Woops</source>
+ <location filename="main.cpp" line="140"/>
+ <source>The current user account doesn&apos;t have the required access rights to run Mod Organizer. The neccessary changes can be made automatically (the MO directory will be made writable for the current user account). You will be asked to run &quot;helper.exe&quot; with administrative rights.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="main.cpp" line="135"/>
- <source>The current user account doesn&apos;t have the required access rights to run Mod Organizer. The neccessary changes can be made automatically (the MO directory will be made writable for the current user account). You will be asked to run &quot;helper.exe&quot; with administrative rights).</source>
+ <location filename="main.cpp" line="231"/>
+ <location filename="main.cpp" line="269"/>
+ <source>Woops</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="main.cpp" line="235"/>
+ <location filename="main.cpp" line="232"/>
<source>ModOrganizer has crashed! Should a diagnostic file be created? If you send me this file (%1) to sherb@gmx.net, the bug is a lot more likely to be fixed. Please include a short description of what you were doing when the crash happened</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="main.cpp" line="273"/>
+ <location filename="main.cpp" line="270"/>
<source>ModOrganizer has crashed! Unfortunately I was not able to write a diagnostic file: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="main.cpp" line="335"/>
- <location filename="settings.cpp" line="462"/>
+ <location filename="main.cpp" line="332"/>
+ <location filename="settings.cpp" line="542"/>
<source>Mod Organizer</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="main.cpp" line="335"/>
+ <location filename="main.cpp" line="332"/>
<source>An instance of Mod Organizer is already running</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="main.cpp" line="357"/>
+ <location filename="main.cpp" line="354"/>
<source>No game identified in &quot;%1&quot;. The directory is required to contain the game binary and its launcher.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="main.cpp" line="360"/>
- <location filename="main.cpp" line="389"/>
+ <location filename="main.cpp" line="357"/>
+ <location filename="main.cpp" line="386"/>
<source>Please select the game to manage</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="752"/>
+ <location filename="main.cpp" line="412"/>
+ <source>Please select the game edition you have (MO can&apos;t start the game correctly if this is set incorrectly!)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="782"/>
<source>Please use &quot;Help&quot; from the toolbar to get usage instructions to all elements</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1470"/>
- <location filename="mainwindow.cpp" line="3723"/>
+ <location filename="mainwindow.cpp" line="1610"/>
+ <location filename="mainwindow.cpp" line="4216"/>
<source>&lt;Manage...&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1488"/>
+ <location filename="mainwindow.cpp" line="1628"/>
<source>failed to parse profile %1: %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="310"/>
- <location filename="profile.cpp" line="228"/>
+ <location filename="pluginlist.cpp" line="335"/>
+ <location filename="profile.cpp" line="233"/>
<source>failed to find &quot;%1&quot;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="467"/>
+ <location filename="pluginlist.cpp" line="491"/>
<source>failed to access %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="481"/>
+ <location filename="pluginlist.cpp" line="505"/>
<source>failed to set file time %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="67"/>
+ <location filename="profile.cpp" line="70"/>
<source>failed to create %1</source>
<translation type="unfinished"></translation>
</message>
@@ -3951,12 +4305,12 @@ p, li { white-space: pre-wrap; }
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settings.cpp" line="469"/>
+ <location filename="settings.cpp" line="549"/>
<source>Script Extender</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settings.cpp" line="476"/>
+ <location filename="settings.cpp" line="556"/>
<source>Proxy DLL</source>
<translation type="unfinished"></translation>
</message>
@@ -3981,22 +4335,22 @@ Start elevated anyway? (you will be asked if you want to allow ModOrganizer.exe
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="spawn.cpp" line="128"/>
+ <location filename="spawn.cpp" line="129"/>
<source>failed to spawn &quot;%1&quot;: %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="spawn.cpp" line="137"/>
+ <location filename="spawn.cpp" line="138"/>
<source>&quot;%1&quot; doesn&apos;t exist</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="spawn.cpp" line="144"/>
+ <location filename="spawn.cpp" line="145"/>
<source>failed to inject dll into &quot;%1&quot;: %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="spawn.cpp" line="152"/>
+ <location filename="spawn.cpp" line="153"/>
<source>failed to run &quot;%1&quot;</source>
<translation type="unfinished"></translation>
</message>
@@ -4045,6 +4399,11 @@ Start elevated anyway? (you will be asked if you want to allow ModOrganizer.exe
<source>invalid game type %1</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <location filename="safewritefile.cpp" line="32"/>
+ <source>failed to open temporary file</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>QueryOverwriteDialog</name>
@@ -4085,14 +4444,6 @@ Start elevated anyway? (you will be asked if you want to allow ModOrganizer.exe
</message>
</context>
<context>
- <name>QuestionBoxMemory</name>
- <message>
- <location filename="questionboxmemory.ui" line="86"/>
- <source>Remember selection</source>
- <translation type="unfinished"></translation>
- </message>
-</context>
-<context>
<name>SaveGameInfoWidget</name>
<message>
<location filename="savegameinfowidget.ui" line="39"/>
@@ -4193,9 +4544,9 @@ Start elevated anyway? (you will be asked if you want to allow ModOrganizer.exe
</message>
<message>
<location filename="selfupdater.cpp" line="116"/>
- <location filename="selfupdater.cpp" line="140"/>
- <location filename="selfupdater.cpp" line="269"/>
- <location filename="selfupdater.cpp" line="417"/>
+ <location filename="selfupdater.cpp" line="139"/>
+ <location filename="selfupdater.cpp" line="268"/>
+ <location filename="selfupdater.cpp" line="415"/>
<source>Update</source>
<translation type="unfinished"></translation>
</message>
@@ -4205,62 +4556,62 @@ Start elevated anyway? (you will be asked if you want to allow ModOrganizer.exe
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="141"/>
+ <location filename="selfupdater.cpp" line="140"/>
<source>Download in progress</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="196"/>
+ <location filename="selfupdater.cpp" line="195"/>
<source>Download failed: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="207"/>
+ <location filename="selfupdater.cpp" line="206"/>
<source>Failed to install update: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="228"/>
+ <location filename="selfupdater.cpp" line="227"/>
<source>failed to open archive &quot;%1&quot;: %2</source>
<translation type="unfinished">Arşiv &quot;%1&quot;: %2 açılamadı.</translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="251"/>
+ <location filename="selfupdater.cpp" line="250"/>
<source>failed to move outdated files: %1. Please update manually.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="269"/>
+ <location filename="selfupdater.cpp" line="268"/>
<source>Update installed, Mod Organizer will now be restarted.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="297"/>
+ <location filename="selfupdater.cpp" line="296"/>
<source>Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="353"/>
+ <location filename="selfupdater.cpp" line="351"/>
<source>Failed to parse response. Please report this as a bug and include the file mo_interface.log.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="418"/>
+ <location filename="selfupdater.cpp" line="416"/>
<source>No incremental update available for this version, the complete package needs to be downloaded (%1 kB)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="427"/>
+ <location filename="selfupdater.cpp" line="425"/>
<source>no file for update found. Please update manually.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="461"/>
+ <location filename="selfupdater.cpp" line="460"/>
<source>No download server available. Please try again later.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="441"/>
+ <location filename="selfupdater.cpp" line="440"/>
<source>Failed to retrieve update information: %1</source>
<translation type="unfinished"></translation>
</message>
@@ -4268,22 +4619,18 @@ Start elevated anyway? (you will be asked if you want to allow ModOrganizer.exe
<context>
<name>Settings</name>
<message>
- <location filename="settings.cpp" line="278"/>
- <source>setting for invalid plugin &quot;%1&quot; requested</source>
+ <location filename="settings.cpp" line="320"/>
+ <location filename="settings.cpp" line="339"/>
+ <source>attempt to store setting for unknown plugin &quot;%1&quot;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settings.cpp" line="282"/>
- <source>invalid setting &quot;%1&quot; requested for plugin &quot;%2&quot;</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="settings.cpp" line="573"/>
+ <location filename="settings.cpp" line="660"/>
<source>Confirm</source>
<translation type="unfinished">Onayla</translation>
</message>
<message>
- <location filename="settings.cpp" line="573"/>
+ <location filename="settings.cpp" line="660"/>
<source>Changing the mod directory affects all your profiles! Mods not present (or named differently) in the new location will be disabled in all profiles. There is no way to undo this unless you backed up your profiles manually. Proceed?</source>
<translation type="unfinished"></translation>
</message>
@@ -4428,47 +4775,47 @@ p, li { white-space: pre-wrap; }
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="321"/>
+ <location filename="settingsdialog.ui" line="318"/>
<source>Disable automatic internet features</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="324"/>
+ <location filename="settingsdialog.ui" line="321"/>
<source>Disable automatic internet features. This does not affect features that are explicitly invoked by the user (like checking mods for updates, endorsing, opening the web browser)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="327"/>
+ <location filename="settingsdialog.ui" line="324"/>
<source>Offline Mode</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="334"/>
+ <location filename="settingsdialog.ui" line="331"/>
<source>Use a proxy for network connections.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="337"/>
+ <location filename="settingsdialog.ui" line="334"/>
<source>Use a proxy for network connections. This uses the system-wide settings which can be configured in Internet Explorer. Please note that MO will start up a few seconds slower on some systems when using a proxy.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="340"/>
+ <location filename="settingsdialog.ui" line="337"/>
<source>Use HTTP Proxy (Uses System Settings)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="351"/>
- <source>Known Servers (Dynamically updated every download)</source>
+ <location filename="settingsdialog.ui" line="396"/>
+ <source>Preferred Servers (Drag &amp; Drop)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="372"/>
- <source>Preferred Servers (Drag &amp; Drop)</source>
+ <location filename="settingsdialog.ui" line="536"/>
+ <source>Blacklisted Plugins (use &lt;del&gt; to remove):</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="594"/>
+ <location filename="settingsdialog.ui" line="632"/>
<source>Mod Organizer needs a dll to be injected into the game so all mods are visible to it.
There are several means to do this:
*Mod Organizer* (default) In this mode the Mod Organizer itself injects the dll. The disadvantage is that you always have to start the game through MO or a link created by it.
@@ -4509,62 +4856,72 @@ p, li { white-space: pre-wrap; }
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="285"/>
+ <location filename="settingsdialog.ui" line="282"/>
<source>Username</source>
<translation type="unfinished">Kullanıcı adı</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="299"/>
+ <location filename="settingsdialog.ui" line="296"/>
<source>Password</source>
<translation type="unfinished">Şifre</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="407"/>
+ <location filename="settingsdialog.ui" line="346"/>
+ <source>Associate with &quot;Download with manager&quot; links</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="settingsdialog.ui" line="375"/>
+ <source>Known Servers (updated on download)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="settingsdialog.ui" line="431"/>
<source>Plugins</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="427"/>
+ <location filename="settingsdialog.ui" line="453"/>
<source>Author:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="441"/>
+ <location filename="settingsdialog.ui" line="467"/>
<source>Version:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="455"/>
+ <location filename="settingsdialog.ui" line="481"/>
<source>Description:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="493"/>
+ <location filename="settingsdialog.ui" line="519"/>
<source>Key</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="498"/>
+ <location filename="settingsdialog.ui" line="524"/>
<source>Value</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="509"/>
+ <location filename="settingsdialog.ui" line="547"/>
<source>Workarounds</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="517"/>
+ <location filename="settingsdialog.ui" line="555"/>
<source>Steam App ID</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="537"/>
+ <location filename="settingsdialog.ui" line="575"/>
<source>The Steam AppID for your game</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="540"/>
+ <location filename="settingsdialog.ui" line="578"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
@@ -4580,27 +4937,27 @@ p, li { white-space: pre-wrap; }
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="571"/>
+ <location filename="settingsdialog.ui" line="609"/>
<source>Load Mechanism</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="591"/>
+ <location filename="settingsdialog.ui" line="629"/>
<source>Select loading mechanism. See help for details.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="611"/>
+ <location filename="settingsdialog.ui" line="649"/>
<source>NMM Version</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="631"/>
+ <location filename="settingsdialog.ui" line="669"/>
<source>The Version of Nexus Mod Manager to impersonate.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="634"/>
+ <location filename="settingsdialog.ui" line="672"/>
<source>Mod Organizer uses an API provided by the Nexus to provide features like checking for updates and downloading files. Unfortunately this API has not been made available officially to third party tools like MO so we have to impersonate the Nexus Mod Manager to be allowed in.
On top of this Nexus has used the client identification to lock out outdated versions of NMM to force users to update. This means that MO also needs to impersonate the new version of NMM even if MO doesn&apos;t need an update. Therefore you can configure the version to identify as here.
Please note that MO does identify itself as MO to the webserver, it&apos;s not lying about what it is. It is merely adding a &quot;compatible&quot; NMM version to the user agent.
@@ -4609,76 +4966,76 @@ tl;dr-version: If Nexus-features don&apos;t work, insert the current version num
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="656"/>
+ <location filename="settingsdialog.ui" line="694"/>
<source>Enforces that inactive ESPs and ESMs are never loaded.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="659"/>
+ <location filename="settingsdialog.ui" line="697"/>
<source>It seems that the Games occasionally load ESP or ESM files even if they haven&apos;t been activated as plugins.
I don&apos;t yet know what the circumstances are, but user reports imply it is in some cases unwanted. If this is checked, ESPs and ESMs not checked in the List are invisible to the game and can not be loaded.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="663"/>
+ <location filename="settingsdialog.ui" line="701"/>
<source>Hide inactive ESPs/ESMs</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="670"/>
+ <location filename="settingsdialog.ui" line="708"/>
<source>If checked, files (i.e. esps, esms and bsas) belonging to the core game can not be disabled in the UI. (default: on)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="673"/>
+ <location filename="settingsdialog.ui" line="711"/>
<source>If checked, files (i.e. esps, esms and bsas) belonging to the core game can not be disabled in the UI. (default: on)
Uncheck this if you want to use Mod Organizer with total conversions (like Nehrim) but be aware that the game will crash if required files are not enabled.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="677"/>
+ <location filename="settingsdialog.ui" line="715"/>
<source>Force-enable game files</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="687"/>
- <location filename="settingsdialog.ui" line="691"/>
+ <location filename="settingsdialog.ui" line="725"/>
+ <location filename="settingsdialog.ui" line="729"/>
<source>For Skyrim, this can be used instead of Archive Invalidation. It should make AI redundant for all Profiles.
For the other games this is not a sufficient replacement for AI!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="695"/>
+ <location filename="settingsdialog.ui" line="733"/>
<source>Back-date BSAs</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="719"/>
+ <location filename="settingsdialog.ui" line="757"/>
<source>These are workarounds for problems with Mod Organizer. Please make sure you read the help text before changing anything here.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.cpp" line="89"/>
+ <location filename="settingsdialog.cpp" line="95"/>
<source>Select download directory</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.cpp" line="97"/>
+ <location filename="settingsdialog.cpp" line="103"/>
<source>Select mod directory</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.cpp" line="105"/>
+ <location filename="settingsdialog.cpp" line="111"/>
<source>Select cache directory</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.cpp" line="113"/>
+ <location filename="settingsdialog.cpp" line="119"/>
<source>Confirm?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.cpp" line="114"/>
+ <location filename="settingsdialog.cpp" line="120"/>
<source>This will make all dialogs show up again where you checked the &quot;Remember selection&quot;-box. Continue?</source>
<translation type="unfinished"></translation>
</message>
@@ -4773,7 +5130,7 @@ For the other games this is not a sufficient replacement for AI!</source>
<name>TransferSavesDialog</name>
<message>
<location filename="transfersavesdialog.ui" line="14"/>
- <source>Dialog</source>
+ <source>Transfer Savegames</source>
<translation type="unfinished"></translation>
</message>
<message>
@@ -4794,8 +5151,16 @@ On Windows Vista/Windows 7:
C:\Users\[UserName]\Documents\My Games\Skyrim\Saves
On Windows XP:
- C:\Documents and Settings[UserName]\My Documents\My Games\Skyrim\Saves
+ C:\Documents and Settings\[UserName]\My Documents\My Games\Skyrim\Saves
</source>
+ <oldsource>This is a list of characters in the global location.
+
+On Windows Vista/Windows 7:
+ C:\Users\[UserName]\Documents\My Games\Skyrim\Saves
+
+On Windows XP:
+ C:\Documents and Settings[UserName]\My Documents\My Games\Skyrim\Saves
+</oldsource>
<translation type="unfinished"></translation>
</message>
<message>
diff --git a/src/organizer_zh_CN.qm b/src/organizer_zh_CN.qm
deleted file mode 100644
index ca363b5c..00000000
--- a/src/organizer_zh_CN.qm
+++ /dev/null
Binary files differ
diff --git a/src/organizer_zh_CN.ts b/src/organizer_zh_CN.ts
index 2ca0cc2a..a5fb1bcc 100644
--- a/src/organizer_zh_CN.ts
+++ b/src/organizer_zh_CN.ts
@@ -2,6 +2,50 @@
<!DOCTYPE TS>
<TS version="2.0" language="zh_CN">
<context>
+ <name>AboutDialog</name>
+ <message>
+ <location filename="aboutdialog.ui" line="14"/>
+ <location filename="aboutdialog.ui" line="53"/>
+ <source>About</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="aboutdialog.ui" line="66"/>
+ <source>Revision:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="aboutdialog.ui" line="104"/>
+ <source>Used Software</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="aboutdialog.ui" line="117"/>
+ <source>Credits</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="aboutdialog.ui" line="123"/>
+ <source>Translators</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="aboutdialog.ui" line="189"/>
+ <source>Others</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="aboutdialog.ui" line="266"/>
+ <source>Close</source>
+ <translation type="unfinished">关闭</translation>
+ </message>
+ <message>
+ <location filename="aboutdialog.cpp" line="81"/>
+ <source>No license</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>ActivateModsDialog</name>
<message>
<location filename="activatemodsdialog.ui" line="14"/>
@@ -240,25 +284,30 @@ p, li { white-space: pre-wrap; }
<context>
<name>DownloadList</name>
<message>
- <location filename="downloadlist.cpp" line="63"/>
+ <location filename="downloadlist.cpp" line="64"/>
<source>Name</source>
<translation>名称</translation>
</message>
<message>
- <location filename="downloadlist.cpp" line="64"/>
+ <location filename="downloadlist.cpp" line="65"/>
<source>Filetime</source>
<translation>文件时间</translation>
</message>
<message>
- <location filename="downloadlist.cpp" line="65"/>
+ <location filename="downloadlist.cpp" line="66"/>
<source>Done</source>
<translation type="unfinished">完成</translation>
</message>
<message>
- <location filename="downloadlist.cpp" line="79"/>
+ <location filename="downloadlist.cpp" line="82"/>
<source>Information missing, please select &quot;Query Info&quot; from the context menu to re-retrieve.</source>
<translation>信息丢失,请在右键菜单里选择“查询信息”来重新检索。</translation>
</message>
+ <message>
+ <location filename="downloadlist.cpp" line="89"/>
+ <source>pending download</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>DownloadListWidget</name>
@@ -269,16 +318,6 @@ p, li { white-space: pre-wrap; }
<translation>占位符</translation>
</message>
<message>
- <location filename="downloadlistwidget.ui" line="81"/>
- <source>0</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="downloadlistwidget.ui" line="88"/>
- <source>KB</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<location filename="downloadlistwidget.ui" line="99"/>
<location filename="downloadlistwidget.cpp" line="145"/>
<location filename="downloadlistwidget.cpp" line="147"/>
@@ -321,120 +360,135 @@ p, li { white-space: pre-wrap; }
<context>
<name>DownloadListWidgetCompactDelegate</name>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="130"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="126"/>
<source>Installed</source>
<translation>已安装</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="133"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="129"/>
<source>Uninstalled</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="136"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="132"/>
<source>Done</source>
<translation>完成</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="215"/>
- <location filename="downloadlistwidgetcompact.cpp" line="224"/>
- <location filename="downloadlistwidgetcompact.cpp" line="233"/>
- <location filename="downloadlistwidgetcompact.cpp" line="242"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="241"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="250"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="259"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="268"/>
<source>Are you sure?</source>
<translation>确定?</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="216"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="242"/>
<source>This will remove all finished downloads from this list and from disk.</source>
<translation>这将会从列表和磁盘中移除所有已完成的下载。</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="225"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="251"/>
<source>This will remove all installed downloads from this list and from disk.</source>
<translation>这将会从列表和磁盘中移除所有已安装的下载项目。</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="234"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="260"/>
<source>This will permanently remove all finished downloads from this list (but NOT from disk).</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="243"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="269"/>
<source>This will permanently remove all installed downloads from this list (but NOT from disk).</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="269"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="298"/>
<source>Install</source>
<translation>安装</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="271"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="300"/>
<source>Query Info</source>
<translation>查询信息</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="273"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="302"/>
<source>Delete</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="274"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="304"/>
+ <source>Un-Hide</source>
+ <translation type="unfinished">取消隐藏</translation>
+ </message>
+ <message>
+ <location filename="downloadlistwidgetcompact.cpp" line="306"/>
<source>Remove from View</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="279"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="312"/>
<source>Remove</source>
<translation>移除</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="276"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="309"/>
<source>Cancel</source>
<translation>取消</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="120"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="88"/>
+ <source>&lt; mod %1 file %2 &gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="downloadlistwidgetcompact.cpp" line="93"/>
+ <source>Pending</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="downloadlistwidgetcompact.cpp" line="116"/>
<source>Paused</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="123"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="119"/>
<source>Fetching Info 1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="125"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="121"/>
<source>Fetching Info 2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="277"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="310"/>
<source>Pause</source>
<translation>暂停</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="280"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="313"/>
<source>Resume</source>
<translation>继续</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="284"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="318"/>
<source>Delete Installed...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="285"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="319"/>
<source>Delete All...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="287"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="322"/>
<source>Remove Installed...</source>
<translation>移除已安装的项目...</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="288"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="323"/>
<source>Remove All...</source>
<translation>移除所有...</translation>
</message>
@@ -442,64 +496,79 @@ p, li { white-space: pre-wrap; }
<context>
<name>DownloadListWidgetDelegate</name>
<message>
- <location filename="downloadlistwidget.cpp" line="228"/>
- <location filename="downloadlistwidget.cpp" line="237"/>
- <location filename="downloadlistwidget.cpp" line="246"/>
- <location filename="downloadlistwidget.cpp" line="255"/>
+ <location filename="downloadlistwidget.cpp" line="253"/>
+ <location filename="downloadlistwidget.cpp" line="262"/>
+ <location filename="downloadlistwidget.cpp" line="271"/>
+ <location filename="downloadlistwidget.cpp" line="280"/>
<source>Are you sure?</source>
<translation>确定?</translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="229"/>
+ <location filename="downloadlistwidget.cpp" line="254"/>
<source>This will remove all finished downloads from this list and from disk.</source>
<translation>这将会从列表和磁盘中移除所有已完成的下载。</translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="238"/>
+ <location filename="downloadlistwidget.cpp" line="263"/>
<source>This will remove all installed downloads from this list and from disk.</source>
<translation>这将会从列表和磁盘中移除所有已安装的下载项目。</translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="247"/>
+ <location filename="downloadlistwidget.cpp" line="272"/>
<source>This will remove all finished downloads from this list (but NOT from disk).</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="256"/>
+ <location filename="downloadlistwidget.cpp" line="281"/>
<source>This will remove all installed downloads from this list (but NOT from disk).</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="281"/>
+ <location filename="downloadlistwidget.cpp" line="309"/>
<source>Install</source>
<translation>安装</translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="283"/>
+ <location filename="downloadlistwidget.cpp" line="311"/>
<source>Query Info</source>
<translation>查询信息</translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="285"/>
+ <location filename="downloadlistwidget.cpp" line="313"/>
<source>Delete</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="286"/>
+ <location filename="downloadlistwidget.cpp" line="315"/>
+ <source>Un-Hide</source>
+ <translation type="unfinished">取消隐藏</translation>
+ </message>
+ <message>
+ <location filename="downloadlistwidget.cpp" line="317"/>
<source>Remove from View</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="291"/>
+ <location filename="downloadlistwidget.cpp" line="323"/>
<source>Remove</source>
<translation>移除</translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="288"/>
+ <location filename="downloadlistwidget.cpp" line="320"/>
<source>Cancel</source>
<translation>取消</translation>
</message>
<message>
+ <location filename="downloadlistwidget.cpp" line="88"/>
+ <source>&lt; mod %1 file %2 &gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="downloadlistwidget.cpp" line="91"/>
+ <source>Pending</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="downloadlistwidget.cpp" line="118"/>
<source>Fetching Info 1</source>
<translation type="unfinished"></translation>
@@ -510,32 +579,32 @@ p, li { white-space: pre-wrap; }
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="289"/>
+ <location filename="downloadlistwidget.cpp" line="321"/>
<source>Pause</source>
<translation>暂停</translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="292"/>
+ <location filename="downloadlistwidget.cpp" line="324"/>
<source>Resume</source>
<translation>继续</translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="296"/>
+ <location filename="downloadlistwidget.cpp" line="329"/>
<source>Delete Installed...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="297"/>
+ <location filename="downloadlistwidget.cpp" line="330"/>
<source>Delete All...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="299"/>
+ <location filename="downloadlistwidget.cpp" line="333"/>
<source>Remove Installed...</source>
<translation>移除已安装的项目...</translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="300"/>
+ <location filename="downloadlistwidget.cpp" line="334"/>
<source>Remove All...</source>
<translation>移除所有...</translation>
</message>
@@ -543,67 +612,81 @@ p, li { white-space: pre-wrap; }
<context>
<name>DownloadManager</name>
<message>
- <location filename="downloadmanager.cpp" line="125"/>
+ <location filename="downloadmanager.cpp" line="132"/>
<source>failed to rename &quot;%1&quot; to &quot;%2&quot;</source>
<translation>重命名 &quot;%1 &quot;为 &quot;%2&quot; 时出错</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="306"/>
+ <location filename="downloadmanager.cpp" line="342"/>
<source>Download again?</source>
<translation>重新下载?</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="306"/>
+ <location filename="downloadmanager.cpp" line="342"/>
<source>A file with the same name has already been downloaded. Do you want to download it again? The new file will receive a different name.</source>
<translation>已存在同名文件。您确定要重新下载?新文件将使用不同的文件名。</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="336"/>
+ <location filename="downloadmanager.cpp" line="388"/>
<source>failed to download %1: could not open output file: %2</source>
<translation>下载 %1 失败: 无法打开输出文件: %2</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="366"/>
- <location filename="downloadmanager.cpp" line="585"/>
- <location filename="downloadmanager.cpp" line="595"/>
- <location filename="downloadmanager.cpp" line="604"/>
- <location filename="downloadmanager.cpp" line="614"/>
- <location filename="downloadmanager.cpp" line="624"/>
- <location filename="downloadmanager.cpp" line="634"/>
- <location filename="downloadmanager.cpp" line="645"/>
- <location filename="downloadmanager.cpp" line="654"/>
- <location filename="downloadmanager.cpp" line="664"/>
- <location filename="downloadmanager.cpp" line="679"/>
+ <location filename="downloadmanager.cpp" line="421"/>
+ <source>Wrong Game</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="downloadmanager.cpp" line="421"/>
+ <source>The download link is for a mod for &quot;%1&quot; but this instance of MO has been set up for &quot;%2&quot;.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="downloadmanager.cpp" line="439"/>
+ <location filename="downloadmanager.cpp" line="506"/>
+ <location filename="downloadmanager.cpp" line="682"/>
+ <location filename="downloadmanager.cpp" line="691"/>
+ <location filename="downloadmanager.cpp" line="701"/>
+ <location filename="downloadmanager.cpp" line="710"/>
+ <location filename="downloadmanager.cpp" line="724"/>
+ <location filename="downloadmanager.cpp" line="734"/>
+ <location filename="downloadmanager.cpp" line="744"/>
+ <location filename="downloadmanager.cpp" line="754"/>
+ <location filename="downloadmanager.cpp" line="765"/>
+ <location filename="downloadmanager.cpp" line="773"/>
+ <location filename="downloadmanager.cpp" line="782"/>
+ <location filename="downloadmanager.cpp" line="792"/>
+ <location filename="downloadmanager.cpp" line="807"/>
<source>invalid index</source>
<translation>无效的索引</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="384"/>
+ <location filename="downloadmanager.cpp" line="457"/>
<source>failed to delete %1</source>
<translation>无法删除 %1</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="390"/>
+ <location filename="downloadmanager.cpp" line="463"/>
<source>failed to delete meta file for %1</source>
<translation>无法从 %1 中删除 mate 文件</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="450"/>
- <location filename="downloadmanager.cpp" line="468"/>
- <location filename="downloadmanager.cpp" line="481"/>
- <location filename="downloadmanager.cpp" line="494"/>
- <location filename="downloadmanager.cpp" line="505"/>
- <location filename="downloadmanager.cpp" line="540"/>
+ <location filename="downloadmanager.cpp" line="539"/>
+ <location filename="downloadmanager.cpp" line="557"/>
+ <location filename="downloadmanager.cpp" line="570"/>
+ <location filename="downloadmanager.cpp" line="587"/>
+ <location filename="downloadmanager.cpp" line="598"/>
+ <location filename="downloadmanager.cpp" line="633"/>
<source>invalid index %1</source>
<translation>无效的索引 %1</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="557"/>
+ <location filename="downloadmanager.cpp" line="650"/>
<source>Please enter the nexus mod id</source>
<translation>请输入N网 Mod ID</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="557"/>
+ <location filename="downloadmanager.cpp" line="650"/>
<source>Mod ID:</source>
<translation>Mod ID:</translation>
</message>
@@ -612,38 +695,43 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">无效的字顺索引 %1</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="899"/>
+ <location filename="downloadmanager.cpp" line="1042"/>
<source>Information updated</source>
<translation>信息已更新</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="901"/>
- <location filename="downloadmanager.cpp" line="915"/>
+ <location filename="downloadmanager.cpp" line="1044"/>
+ <location filename="downloadmanager.cpp" line="1058"/>
<source>No matching file found on Nexus! Maybe this file is no longer available or it was renamed?</source>
<translation>无法在N网上找到匹配的文件!也许这个文件已经不存在了或是它改名了?</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="903"/>
+ <location filename="downloadmanager.cpp" line="1046"/>
<source>No file on Nexus matches the selected file by name. Please manually choose the correct one.</source>
<translation>所选的文件无法在N网上找到可匹配的项目,请手动选择正确的一个。</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="1032"/>
+ <location filename="downloadmanager.cpp" line="1180"/>
<source>No download server available. Please try again later.</source>
<translation>没有可用的下载服务器,请稍后再尝试下载。</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="1074"/>
+ <location filename="downloadmanager.cpp" line="1224"/>
<source>Failed to request file info from nexus: %1</source>
<translation>无法从N网上请求文件信息: %1</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="1097"/>
+ <location filename="downloadmanager.cpp" line="1249"/>
+ <source>Download failed. Server reported: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="downloadmanager.cpp" line="1251"/>
<source>Download failed: %1 (%2)</source>
<translation>下载失败: %1 (%2)</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="1174"/>
+ <location filename="downloadmanager.cpp" line="1331"/>
<source>failed to re-open %1</source>
<translation>无法重新打开 %1</translation>
</message>
@@ -755,7 +843,7 @@ Right now the only case I know of where this needs to be overwritten is for the
<message>
<location filename="editexecutablesdialog.ui" line="169"/>
<location filename="editexecutablesdialog.ui" line="172"/>
- <location filename="editexecutablesdialog.cpp" line="220"/>
+ <location filename="editexecutablesdialog.cpp" line="258"/>
<source>If checked, MO will be closed once the specified executable is run.</source>
<translation>如果选中,那么 MO 将在指定的程序运行后关闭。</translation>
</message>
@@ -772,7 +860,7 @@ Right now the only case I know of where this needs to be overwritten is for the
</message>
<message>
<location filename="editexecutablesdialog.ui" line="188"/>
- <location filename="editexecutablesdialog.cpp" line="190"/>
+ <location filename="editexecutablesdialog.cpp" line="196"/>
<source>Add</source>
<translation>添加</translation>
</message>
@@ -788,47 +876,64 @@ Right now the only case I know of where this needs to be overwritten is for the
<translation>移除</translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="119"/>
+ <location filename="editexecutablesdialog.ui" line="233"/>
+ <source>Close</source>
+ <translation type="unfinished">关闭</translation>
+ </message>
+ <message>
+ <location filename="editexecutablesdialog.cpp" line="125"/>
<source>Select a binary</source>
<translation>选择一个可执行文件</translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="119"/>
+ <location filename="editexecutablesdialog.cpp" line="125"/>
<source>Executable (%1)</source>
<translation>可执行程序 (%1)</translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="143"/>
+ <location filename="editexecutablesdialog.cpp" line="149"/>
<source>Java (32-bit) required</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="144"/>
+ <location filename="editexecutablesdialog.cpp" line="150"/>
<source>MO requires 32-bit java to run this application. If you already have it installed, select javaw.exe from that installation as the binary.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="160"/>
+ <location filename="editexecutablesdialog.cpp" line="166"/>
<source>Select a directory</source>
<translation>选择一个目录</translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="169"/>
+ <location filename="editexecutablesdialog.cpp" line="175"/>
<source>Confirm</source>
<translation>确认</translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="169"/>
+ <location filename="editexecutablesdialog.cpp" line="175"/>
<source>Really remove &quot;%1&quot; from executables?</source>
<translation>真的要从程序列表中移除 &quot;%1&quot; 吗?</translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="194"/>
+ <location filename="editexecutablesdialog.cpp" line="200"/>
<source>Modify</source>
<translation>更改</translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="217"/>
+ <location filename="editexecutablesdialog.cpp" line="230"/>
+ <location filename="editexecutablesdialog.cpp" line="278"/>
+ <source>Save Changes?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="editexecutablesdialog.cpp" line="231"/>
+ <location filename="editexecutablesdialog.cpp" line="279"/>
+ <source>You made changes to the current executable, do you want to save them?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="editexecutablesdialog.cpp" line="255"/>
<source>MO must be kept running or this application will not work correctly.</source>
<translation>MO 必须持续运行,否则该程序将无法正常工作。</translation>
</message>
@@ -1092,12 +1197,12 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">mo_archive.dll 未加载: &quot;%1&quot;</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="97"/>
+ <location filename="installationmanager.cpp" line="98"/>
<source>Password required</source>
<translation>需要密码</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="97"/>
+ <location filename="installationmanager.cpp" line="98"/>
<source>Password</source>
<translation>密码</translation>
</message>
@@ -1119,8 +1224,8 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="installationmanager.cpp" line="164"/>
- <location filename="installationmanager.cpp" line="252"/>
- <location filename="installationmanager.cpp" line="530"/>
+ <location filename="installationmanager.cpp" line="248"/>
+ <location filename="installationmanager.cpp" line="529"/>
<source>Extracting files</source>
<translation>正在解压文件</translation>
</message>
@@ -1155,7 +1260,7 @@ Note: This installer will not be aware of other installed mods!</source>
<translation type="obsolete">安装失败 (错误代码 %1)</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="624"/>
+ <location filename="installationmanager.cpp" line="609"/>
<source>File format &quot;%1&quot; not supported</source>
<translation>暂不支持文件格式: &quot;%1&quot;</translation>
</message>
@@ -1164,32 +1269,32 @@ Note: This installer will not be aware of other installed mods!</source>
<translation type="obsolete">无法打开压缩包 &quot;%1&quot;: %2</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="75"/>
+ <location filename="installationmanager.cpp" line="76"/>
<source>archive.dll not loaded: &quot;%1&quot;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="443"/>
+ <location filename="installationmanager.cpp" line="439"/>
<source>failed to create backup</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="449"/>
+ <location filename="installationmanager.cpp" line="448"/>
<source>Mod Name</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="449"/>
+ <location filename="installationmanager.cpp" line="448"/>
<source>Name</source>
<translation type="unfinished">名称</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="502"/>
+ <location filename="installationmanager.cpp" line="501"/>
<source>Invalid name</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="503"/>
+ <location filename="installationmanager.cpp" line="502"/>
<source>The name you entered is invalid, please enter a different one.</source>
<translation type="unfinished"></translation>
</message>
@@ -1206,52 +1311,52 @@ Note: This installer will not be aware of other installed mods!</source>
<translation type="obsolete">请安装 NCC</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="750"/>
+ <location filename="installationmanager.cpp" line="735"/>
<source>None of the available installer plugins were able to handle that archive</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="760"/>
+ <location filename="installationmanager.cpp" line="745"/>
<source>no error</source>
<translation>没有错误</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="763"/>
+ <location filename="installationmanager.cpp" line="748"/>
<source>7z.dll not found</source>
<translation>未找到 7z.dll</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="766"/>
+ <location filename="installationmanager.cpp" line="751"/>
<source>7z.dll isn&apos;t valid</source>
<translation>无效的 7z.dll</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="769"/>
+ <location filename="installationmanager.cpp" line="754"/>
<source>archive not found</source>
<translation>未找到压缩包</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="772"/>
+ <location filename="installationmanager.cpp" line="757"/>
<source>failed to open archive</source>
<translation>无法打开压缩包</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="775"/>
+ <location filename="installationmanager.cpp" line="760"/>
<source>unsupported archive type</source>
<translation>不支持的压缩包类型</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="778"/>
+ <location filename="installationmanager.cpp" line="763"/>
<source>internal library error</source>
<translation>内部库错误</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="781"/>
+ <location filename="installationmanager.cpp" line="766"/>
<source>archive invalid</source>
<translation>无效的压缩包</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="785"/>
+ <location filename="installationmanager.cpp" line="770"/>
<source>unknown archive error</source>
<translation>未知压缩包错误</translation>
</message>
@@ -1274,7 +1379,7 @@ Note: This installer will not be aware of other installed mods!</source>
<translation>程序运行时 MO 将被锁定。</translation>
</message>
<message>
- <location filename="lockeddialog.ui" line="51"/>
+ <location filename="lockeddialog.ui" line="54"/>
<source>Unlock</source>
<translation>解锁</translation>
</message>
@@ -1282,7 +1387,7 @@ Note: This installer will not be aware of other installed mods!</source>
<context>
<name>LogBuffer</name>
<message>
- <location filename="logbuffer.cpp" line="72"/>
+ <location filename="logbuffer.cpp" line="73"/>
<source>failed to write log to %1: %2</source>
<translation>无法生成日志到 %1: %2</translation>
</message>
@@ -1290,12 +1395,12 @@ Note: This installer will not be aware of other installed mods!</source>
<context>
<name>MOApplication</name>
<message>
- <location filename="moapplication.cpp" line="60"/>
+ <location filename="moapplication.cpp" line="68"/>
<source>an error occured: %1</source>
<translation type="unfinished">发生错误: %1</translation>
</message>
<message>
- <location filename="moapplication.cpp" line="65"/>
+ <location filename="moapplication.cpp" line="73"/>
<source>an error occured</source>
<translation type="unfinished">发生错误</translation>
</message>
@@ -1370,8 +1475,8 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="mainwindow.ui" line="405"/>
- <location filename="mainwindow.ui" line="722"/>
- <location filename="mainwindow.ui" line="1027"/>
+ <location filename="mainwindow.ui" line="724"/>
+ <location filename="mainwindow.ui" line="1046"/>
<source>Namefilter</source>
<translation type="unfinished"></translation>
</message>
@@ -1488,12 +1593,12 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">重要: 您可以在这里更改 BSA 的顺序,不过 Mod 的安装顺序会优先于这里的设置!</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="751"/>
+ <location filename="mainwindow.ui" line="762"/>
<source>List of available BS Archives. Archives not checked here are not managed by MO and ignore installation order.</source>
<translation type="unfinished">可用 BSA 文件的列表。未勾选的项目不会被 MO 管理并且会忽略安装顺序。</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="754"/>
+ <location filename="mainwindow.ui" line="765"/>
<source>BSA files are archives (comparable to .zip files) that contain data assets (meshes, textures, ...) to be used by the game. As such they &quot;compete&quot; with loose files in your data directory over which is loaded.
By default, BSAs that share their base name with an enabled ESP (i.e. plugin.esp and plugin.bsa) are automatically loaded and will have precedence over all loose files, the installation order you set up to the left is then ignored!
@@ -1504,67 +1609,81 @@ BSAs checked here are loaded in such a way that your installation order is obeye
这里勾选的 BSA 将会依从您的安装顺序,并且会自行调整加载顺序。</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="794"/>
- <location filename="mainwindow.ui" line="868"/>
+ <location filename="mainwindow.ui" line="811"/>
+ <location filename="mainwindow.ui" line="880"/>
<source>File</source>
<translation type="unfinished">文件</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="799"/>
- <location filename="mainwindow.ui" line="873"/>
+ <location filename="mainwindow.ui" line="819"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Marked Archives (&lt;img src=&quot;:/MO/gui/warning_16&quot;/&gt;) are still loaded on Skyrim but the &lt;a href=&quot;http://forums.bethsoft.com/topic/1354395-update-bsas-and-you/&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;regular file override&lt;/span&gt;&lt;/a&gt; mechanism will apply: Loose files override BSAs, no matter the mod/plugin priority.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.ui" line="885"/>
<source>Mod</source>
<translation type="unfinished">Mod</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="807"/>
- <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Marked Archives (&lt;img src=&quot;:/MO/gui/resources/dialog-warning_16.png&quot;/&gt;) are still loaded on Skyrim but the &lt;a href=&quot;http://forums.bethsoft.com/topic/1354395-update-bsas-and-you/&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;regular file override&lt;/span&gt;&lt;/a&gt; mechanism will apply: Loose files override BSAs, no matter the mod/plugin priority.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <location filename="mainwindow.ui" line="830"/>
+ <source>Data</source>
+ <translation type="unfinished">Data</translation>
+ </message>
+ <message>
+ <location filename="mainwindow.ui" line="605"/>
+ <source>Plugins</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="818"/>
- <source>Data</source>
- <translation type="unfinished">Data</translation>
+ <location filename="mainwindow.ui" line="731"/>
+ <source>Sort</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.ui" line="741"/>
+ <source>Archives</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="836"/>
+ <location filename="mainwindow.ui" line="848"/>
<source>refresh data-directory overview</source>
<translation type="unfinished">刷新 Data 目录总览</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="839"/>
+ <location filename="mainwindow.ui" line="851"/>
<source>Refresh the overview. This may take a moment.</source>
<translation type="unfinished">刷新总览,这可能需要一些时间。</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="842"/>
- <location filename="mainwindow.cpp" line="3328"/>
- <location filename="mainwindow.cpp" line="4059"/>
+ <location filename="mainwindow.ui" line="854"/>
+ <location filename="mainwindow.cpp" line="3781"/>
+ <location filename="mainwindow.cpp" line="4604"/>
<source>Refresh</source>
<translation type="unfinished">刷新</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="858"/>
+ <location filename="mainwindow.ui" line="870"/>
<source>This is an overview of your data directory as visible to the game (and tools). </source>
<translation type="unfinished">这是在游戏中可见的 Data 目录 (和工具) 的总览。</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="883"/>
- <location filename="mainwindow.ui" line="886"/>
+ <location filename="mainwindow.ui" line="895"/>
+ <location filename="mainwindow.ui" line="898"/>
<source>Filter the above list so that only conflicts are displayed.</source>
<translation type="unfinished">过滤上面的列表,使您只能看到有冲突的文件。</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="889"/>
+ <location filename="mainwindow.ui" line="901"/>
<source>Show only conflicts</source>
<translation type="unfinished">只显示冲突</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="897"/>
+ <location filename="mainwindow.ui" line="909"/>
<source>Saves</source>
<translation type="unfinished">存档</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="921"/>
+ <location filename="mainwindow.ui" line="933"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
@@ -1581,155 +1700,160 @@ p, li { white-space: pre-wrap; }
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:9pt;&quot;&gt;如果您在右键菜单中点击“修复 Mod”,那么 MO 便会尝试激活所有 Mod 和 esp 来修复那些缺失的 esp,它并不会禁用任何东西!&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="935"/>
+ <location filename="mainwindow.ui" line="947"/>
<source>Downloads</source>
<translation type="unfinished">下载</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="967"/>
+ <location filename="mainwindow.ui" line="979"/>
<source>This is a list of mods you downloaded from Nexus. Double click one to install it.</source>
<translation type="unfinished">这是当前已下载的 Mod 的列表,双击进行安装。</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1020"/>
+ <location filename="mainwindow.ui" line="1032"/>
<source>Compact</source>
<translation type="unfinished">紧凑</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1051"/>
+ <location filename="mainwindow.ui" line="1039"/>
+ <source>Show Hidden</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.ui" line="1070"/>
<source>Tool Bar</source>
<translation type="unfinished">工具栏</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1093"/>
+ <location filename="mainwindow.ui" line="1112"/>
<source>Install Mod</source>
<translation type="unfinished">安装 Mod</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1096"/>
+ <location filename="mainwindow.ui" line="1115"/>
<source>Install &amp;Mod</source>
<translation type="unfinished">安装 &amp;Mod</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1099"/>
+ <location filename="mainwindow.ui" line="1118"/>
<source>Install a new mod from an archive</source>
<translation type="unfinished">通过压缩包来安装一个新 Mod</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1102"/>
+ <location filename="mainwindow.ui" line="1121"/>
<source>Ctrl+M</source>
<translation type="unfinished">Ctrl+M</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1111"/>
+ <location filename="mainwindow.ui" line="1130"/>
<source>Profiles</source>
<translation type="unfinished">配置文件</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1114"/>
+ <location filename="mainwindow.ui" line="1133"/>
<source>&amp;Profiles</source>
<translation type="unfinished">&amp;配置文件</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1117"/>
+ <location filename="mainwindow.ui" line="1136"/>
<source>Configure Profiles</source>
<translation type="unfinished">设置配置文件</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1120"/>
+ <location filename="mainwindow.ui" line="1139"/>
<source>Ctrl+P</source>
<translation type="unfinished">Ctrl+P</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1129"/>
+ <location filename="mainwindow.ui" line="1148"/>
<source>Executables</source>
<translation type="unfinished">可执行程序</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1132"/>
+ <location filename="mainwindow.ui" line="1151"/>
<source>&amp;Executables</source>
<translation type="unfinished">&amp;可执行程序</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1135"/>
+ <location filename="mainwindow.ui" line="1154"/>
<source>Configure the executables that can be started through Mod Organizer</source>
<translation type="unfinished">配置可通过 MO 来启动的程序</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1138"/>
+ <location filename="mainwindow.ui" line="1157"/>
<source>Ctrl+E</source>
<translation type="unfinished">Ctrl+E</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1147"/>
- <location filename="mainwindow.ui" line="1153"/>
+ <location filename="mainwindow.ui" line="1166"/>
+ <location filename="mainwindow.ui" line="1172"/>
<source>Tools</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1150"/>
+ <location filename="mainwindow.ui" line="1169"/>
<source>&amp;Tools</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1156"/>
+ <location filename="mainwindow.ui" line="1175"/>
<source>Ctrl+I</source>
<translation type="unfinished">Ctrl+I</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1165"/>
+ <location filename="mainwindow.ui" line="1184"/>
<source>Settings</source>
<translation type="unfinished">设置</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1168"/>
+ <location filename="mainwindow.ui" line="1187"/>
<source>&amp;Settings</source>
<translation type="unfinished">&amp;设置</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1171"/>
+ <location filename="mainwindow.ui" line="1190"/>
<source>Configure settings and workarounds</source>
<translation type="unfinished">配置设定和解决方案</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1174"/>
+ <location filename="mainwindow.ui" line="1193"/>
<source>Ctrl+S</source>
<translation type="unfinished">Ctrl+S</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1183"/>
+ <location filename="mainwindow.ui" line="1202"/>
<source>Nexus</source>
<translation type="unfinished">N网</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1186"/>
+ <location filename="mainwindow.ui" line="1205"/>
<source>Search nexus network for more mods</source>
<translation type="unfinished">搜索N网以获取更多 Mod</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1189"/>
+ <location filename="mainwindow.ui" line="1208"/>
<source>Ctrl+N</source>
<translation type="unfinished">Ctrl+N</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1201"/>
- <location filename="mainwindow.cpp" line="4007"/>
+ <location filename="mainwindow.ui" line="1220"/>
+ <location filename="mainwindow.cpp" line="4545"/>
<source>Update</source>
<translation type="unfinished">更新</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1204"/>
+ <location filename="mainwindow.ui" line="1223"/>
<source>Mod Organizer is up-to-date</source>
<translation type="unfinished">Mod Organizer 现在是最新版本</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1216"/>
- <location filename="mainwindow.cpp" line="478"/>
+ <location filename="mainwindow.ui" line="1235"/>
+ <location filename="mainwindow.cpp" line="509"/>
<source>No Problems</source>
<translation type="unfinished">没有问题</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1219"/>
+ <location filename="mainwindow.ui" line="1238"/>
<source>This button will be highlighted if MO discovered potential problems in your setup and provide tips on how to fix them.
!Work in progress!
@@ -1740,54 +1864,54 @@ Right now this has very limited functionality</source>
当前此功能所能提供的项目非常有限</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1231"/>
- <location filename="mainwindow.ui" line="1234"/>
+ <location filename="mainwindow.ui" line="1250"/>
+ <location filename="mainwindow.ui" line="1253"/>
<source>Help</source>
<translation type="unfinished">帮助</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1237"/>
+ <location filename="mainwindow.ui" line="1256"/>
<source>Ctrl+H</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1246"/>
+ <location filename="mainwindow.ui" line="1265"/>
<source>Endorse MO</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1249"/>
- <location filename="mainwindow.cpp" line="4087"/>
+ <location filename="mainwindow.ui" line="1268"/>
+ <location filename="mainwindow.cpp" line="4633"/>
<source>Endorse Mod Organizer</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="204"/>
+ <location filename="mainwindow.cpp" line="223"/>
<source>Toolbar</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="205"/>
+ <location filename="mainwindow.cpp" line="224"/>
<source>Desktop</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="206"/>
+ <location filename="mainwindow.cpp" line="225"/>
<source>Start Menu</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="475"/>
+ <location filename="mainwindow.cpp" line="505"/>
<source>Problems</source>
<translation type="unfinished">问题</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="476"/>
+ <location filename="mainwindow.cpp" line="506"/>
<source>There are potential problems with your setup</source>
<translation type="unfinished">您的安装中存在潜在的问题</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="479"/>
+ <location filename="mainwindow.cpp" line="510"/>
<source>Everything seems to be in order</source>
<translation type="unfinished">一切井然有序</translation>
</message>
@@ -1804,22 +1928,22 @@ Right now this has very limited functionality</source>
<translation type="obsolete">&lt;li&gt;.Net 未安装或版本过旧。想要运行 NCC 您必须先安装 .Net,您可以在以下地址中获取: &lt;a href=&quot;%1&quot;&gt;%1&lt;/a&gt;&lt;/li&gt;</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="531"/>
+ <location filename="mainwindow.cpp" line="568"/>
<source>Help on UI</source>
<translation type="unfinished">界面帮助</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="535"/>
+ <location filename="mainwindow.cpp" line="572"/>
<source>Documentation Wiki</source>
<translation type="unfinished">说明文档 (维基)</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="539"/>
+ <location filename="mainwindow.cpp" line="576"/>
<source>Report Issue</source>
<translation type="unfinished">报告问题</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="543"/>
+ <location filename="mainwindow.cpp" line="580"/>
<source>Tutorials</source>
<translation type="unfinished"></translation>
</message>
@@ -1828,374 +1952,430 @@ Right now this has very limited functionality</source>
<translation type="obsolete">无法保存加载顺序</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="670"/>
+ <location filename="mainwindow.cpp" line="705"/>
<source>failed to save load order: %1</source>
<translation type="unfinished">无法保存加载顺序: %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="600"/>
<source>failed to save archives order, do you have write access to &quot;%1&quot;?</source>
- <translation type="unfinished">无法保存档案顺序,您确定您有权限更改 &quot;%1&quot;?</translation>
+ <translation type="obsolete">无法保存档案顺序,您确定您有权限更改 &quot;%1&quot;?</translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="619"/>
+ <source>About</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="687"/>
+ <location filename="mainwindow.cpp" line="620"/>
+ <source>About Qt</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="717"/>
<source>Name</source>
<translation type="unfinished">名称</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="688"/>
+ <location filename="mainwindow.cpp" line="718"/>
<source>Please enter a name for the new profile</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="696"/>
+ <location filename="mainwindow.cpp" line="726"/>
<source>failed to create profile: %1</source>
<translation type="unfinished">无法创建配置文件: %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="739"/>
+ <location filename="mainwindow.cpp" line="769"/>
<source>Show tutorial?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="740"/>
+ <location filename="mainwindow.cpp" line="770"/>
<source>You are starting Mod Organizer for the first time. Do you want to show a tutorial of its basic features? If you choose no you can always start the tutorial from the &quot;Help&quot;-menu.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="769"/>
+ <location filename="mainwindow.cpp" line="801"/>
<source>Downloads in progress</source>
<translation type="unfinished">正在下载</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="770"/>
+ <location filename="mainwindow.cpp" line="802"/>
<source>There are still downloads in progress, do you really want to quit?</source>
<translation type="unfinished">仍有正在进行中的下载,您确定要退出吗?</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="816"/>
+ <location filename="mainwindow.cpp" line="848"/>
<source>failed to read savegame: %1</source>
<translation type="unfinished">无法读取存档: %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="941"/>
+ <location filename="mainwindow.cpp" line="972"/>
<source>Plugin &quot;%1&quot; failed: %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1183"/>
+ <location filename="mainwindow.cpp" line="1085"/>
+ <source>Plugin error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="1086"/>
+ <source>It appears the plugin &quot;%1&quot; failed to load last startup and caused MO to crash. Do you want to disable it?
+(Please note: If this is the first time you see this message for this plugin you may want to give it another try. The plugin may be able to recover from the problem)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="1270"/>
<source>Failed to start &quot;%1&quot;</source>
<translation type="unfinished">无法启动 &quot;%1&quot;</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1185"/>
+ <location filename="mainwindow.cpp" line="1272"/>
<source>Waiting</source>
<translation type="unfinished">稍等</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1185"/>
+ <location filename="mainwindow.cpp" line="1272"/>
<source>Please press OK once you&apos;re logged into steam.</source>
<translation type="unfinished">当您登录 Steam 时请点击确定。</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1197"/>
<source>&quot;%1&quot; not found</source>
- <translation type="unfinished">&quot;%1&quot; 未找到</translation>
+ <translation type="obsolete">&quot;%1&quot; 未找到</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1211"/>
+ <location filename="mainwindow.cpp" line="1298"/>
<source>Start Steam?</source>
<translation type="unfinished">启动 Steam?</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1212"/>
+ <location filename="mainwindow.cpp" line="1299"/>
<source>Steam is required to be running already to correctly start the game. Should MO try to start steam now?</source>
<translation type="unfinished">想要正确地启动遊戲,Steam 必须处于运行状态。MO 要立即启动 Steam 吗?</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1426"/>
+ <location filename="mainwindow.cpp" line="1526"/>
<source>Also in: &lt;br&gt;</source>
<translation type="unfinished">也在: &lt;br&gt;</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1437"/>
+ <location filename="mainwindow.cpp" line="1537"/>
<source>No conflict</source>
<translation type="unfinished">没有冲突</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1552"/>
+ <location filename="mainwindow.cpp" line="1692"/>
<source>&lt;Edit...&gt;</source>
<translation type="unfinished">&lt;编辑...&gt;</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1771"/>
+ <location filename="mainwindow.cpp" line="1929"/>
<source>This bsa is enabled in the ini file so it may be required!</source>
<translation type="unfinished">该 BSA 已在 Ini 文件中启用,因此它可能是必需的。</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1778"/>
+ <location filename="mainwindow.cpp" line="1936"/>
<source>This archive will still be loaded since there is a plugin of the same name but its files will not follow installation order!</source>
<translation type="unfinished">此档案还是会被加载,因为存在同名插件。不过它所包含的的文件不会遵循安装顺序!</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1833"/>
+ <location filename="mainwindow.cpp" line="1991"/>
<source>Activating Network Proxy</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1962"/>
- <location filename="mainwindow.cpp" line="3755"/>
+ <location filename="mainwindow.cpp" line="2122"/>
+ <location filename="mainwindow.cpp" line="4248"/>
<source>Installation successful</source>
<translation type="unfinished">安装成功</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1973"/>
- <location filename="mainwindow.cpp" line="3768"/>
+ <location filename="mainwindow.cpp" line="2133"/>
+ <location filename="mainwindow.cpp" line="4261"/>
<source>Configure Mod</source>
<translation type="unfinished">配置 Mod</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1974"/>
- <location filename="mainwindow.cpp" line="3769"/>
+ <location filename="mainwindow.cpp" line="2134"/>
+ <location filename="mainwindow.cpp" line="4262"/>
<source>This mod contains ini tweaks. Do you want to configure them now?</source>
<translation type="unfinished">此 Mod 中包含 Ini 设定文件,您想现在就对它们进行配置吗?</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1980"/>
- <location filename="mainwindow.cpp" line="3775"/>
+ <location filename="mainwindow.cpp" line="2140"/>
+ <location filename="mainwindow.cpp" line="4268"/>
<source>mod &quot;%1&quot; not found</source>
<translation type="unfinished">Mod &quot;%1&quot; 未找到</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1983"/>
- <location filename="mainwindow.cpp" line="3781"/>
+ <location filename="mainwindow.cpp" line="2143"/>
+ <location filename="mainwindow.cpp" line="4274"/>
<source>Installation cancelled</source>
<translation type="unfinished">安装已取消</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1983"/>
- <location filename="mainwindow.cpp" line="3781"/>
+ <location filename="mainwindow.cpp" line="2143"/>
+ <location filename="mainwindow.cpp" line="4274"/>
<source>The mod was not installed completely.</source>
<translation type="unfinished">Mod 没有完全安装。</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2018"/>
+ <location filename="mainwindow.cpp" line="2292"/>
<source>Some plugins could not be loaded</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2021"/>
- <location filename="mainwindow.cpp" line="2038"/>
+ <location filename="mainwindow.cpp" line="2295"/>
+ <source>Too many esps and esms enabled</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="2298"/>
+ <location filename="mainwindow.cpp" line="2319"/>
<source>Description missing</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2030"/>
- <source>The following Plugins could not be loaded. The reason may be missing dependencies (i.e. python) or an outdated version:&lt;ul&gt;</source>
+ <location filename="mainwindow.cpp" line="2315"/>
+ <source>The game doesn&apos;t allow more than 255 active plugins (including the official ones) to be loaded. You have to disable some unused plugins or merge some plugins into one. You can find a guide here: &lt;a href=&quot;http://wiki.step-project.com/Guide:Merging_Plugins&quot;&gt;http://wiki.step-project.com/Guide:Merging_Plugins&lt;/a&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2060"/>
+ <location filename="mainwindow.cpp" line="2341"/>
<source>Choose Mod</source>
<translation type="unfinished">选择 Mod</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2061"/>
+ <location filename="mainwindow.cpp" line="2342"/>
<source>Mod Archive</source>
<translation type="unfinished">Mod 压缩包</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2214"/>
+ <location filename="mainwindow.cpp" line="2495"/>
<source>Start Tutorial?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2215"/>
+ <location filename="mainwindow.cpp" line="2496"/>
<source>You&apos;re about to start a tutorial. For technical reasons it&apos;s not possible to end the tutorial early. Continue?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2360"/>
- <location filename="mainwindow.cpp" line="3683"/>
+ <location filename="mainwindow.cpp" line="2651"/>
+ <location filename="mainwindow.cpp" line="4171"/>
<source>Download started</source>
<translation type="unfinished">开始下载</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2391"/>
+ <location filename="mainwindow.cpp" line="2682"/>
<source>failed to update mod list: %1</source>
<translation type="unfinished">无法更新 Mod 列表: %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2418"/>
+ <location filename="mainwindow.cpp" line="2711"/>
<source>failed to spawn notepad.exe: %1</source>
<translation type="unfinished">无法生成 notepad.exe: %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2459"/>
+ <location filename="mainwindow.cpp" line="2752"/>
<source>failed to open %1</source>
<translation type="unfinished">无法打开 %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2537"/>
+ <location filename="mainwindow.cpp" line="2830"/>
<source>failed to change origin name: %1</source>
<translation type="unfinished">无法更改原始文件名: %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2676"/>
+ <location filename="mainwindow.cpp" line="2860"/>
+ <source>failed to move &quot;%1&quot; from mod &quot;%2&quot; to &quot;%3&quot;: %4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="2997"/>
<source>Multiple esps activated, please check that they don&apos;t conflict.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3005"/>
- <location filename="mainwindow.cpp" line="3339"/>
+ <location filename="mainwindow.cpp" line="3345"/>
+ <location filename="mainwindow.cpp" line="3792"/>
<source>Create Mod...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3006"/>
- <source>This will move all files from overwrite into a new, regular mod.
-Please enter a name: </source>
+ <location filename="mainwindow.cpp" line="3355"/>
+ <source>A mod with this name already exists</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3015"/>
- <source>A mod with this name already exists</source>
+ <location filename="mainwindow.cpp" line="3613"/>
+ <source>Continue?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="3614"/>
+ <source>The versioning scheme decides which version is considered newer than another.
+This function will guess the versioning scheme under the assumption that the installed version is outdated.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="3634"/>
+ <location filename="mainwindow.cpp" line="4516"/>
+ <source>Sorry</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3410"/>
+ <location filename="mainwindow.cpp" line="3635"/>
+ <source>I don&apos;t know a versioning scheme where %1 is newer than %2.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="3883"/>
<source>&lt;All&gt;</source>
<translation type="unfinished">&lt;全部&gt;</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2589"/>
+ <location filename="mainwindow.cpp" line="2909"/>
<source>&lt;Checked&gt;</source>
<translation type="unfinished">&lt;已勾选&gt;</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="943"/>
+ <location filename="mainwindow.cpp" line="974"/>
<source>Plugin &quot;%1&quot; failed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1007"/>
+ <location filename="mainwindow.cpp" line="1047"/>
<source>failed to init plugin %1: %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2590"/>
+ <location filename="mainwindow.cpp" line="2307"/>
+ <source>The following plugins could not be loaded. The reason may be missing dependencies (i.e. python) or an outdated version:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="2910"/>
<source>&lt;Unchecked&gt;</source>
<translation type="unfinished">&lt;未勾选&gt;</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2591"/>
+ <location filename="mainwindow.cpp" line="2911"/>
<source>&lt;Update&gt;</source>
<translation type="unfinished">&lt;有更新&gt;</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2592"/>
+ <location filename="mainwindow.cpp" line="2912"/>
<source>&lt;No category&gt;</source>
<translation type="unfinished">&lt;无类别&gt;</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2593"/>
+ <location filename="mainwindow.cpp" line="2913"/>
<source>&lt;Conflicted&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2626"/>
+ <location filename="mainwindow.cpp" line="2914"/>
+ <source>&lt;Not Endorsed&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="2947"/>
<source>failed to rename mod: %1</source>
<translation type="unfinished">无法重命名 Mod: %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2639"/>
+ <location filename="mainwindow.cpp" line="2960"/>
<source>Overwrite?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2640"/>
+ <location filename="mainwindow.cpp" line="2961"/>
<source>This will replace the existing mod &quot;%1&quot;. Continue?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2643"/>
+ <location filename="mainwindow.cpp" line="2964"/>
<source>failed to remove mod &quot;%1&quot;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2647"/>
- <location filename="mainwindow.cpp" line="3953"/>
- <location filename="mainwindow.cpp" line="3977"/>
+ <location filename="mainwindow.cpp" line="2968"/>
+ <location filename="mainwindow.cpp" line="4446"/>
+ <location filename="mainwindow.cpp" line="4470"/>
<source>failed to rename &quot;%1&quot; to &quot;%2&quot;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2702"/>
- <location filename="mainwindow.cpp" line="3243"/>
- <location filename="mainwindow.cpp" line="3252"/>
+ <location filename="mainwindow.cpp" line="3024"/>
+ <location filename="mainwindow.cpp" line="3687"/>
+ <location filename="mainwindow.cpp" line="3695"/>
+ <location filename="mainwindow.cpp" line="3902"/>
<source>Confirm</source>
<translation type="unfinished">确认</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2703"/>
+ <location filename="mainwindow.cpp" line="3025"/>
<source>Remove the following mods?&lt;br&gt;&lt;ul&gt;%1&lt;/ul&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2714"/>
+ <location filename="mainwindow.cpp" line="3036"/>
<source>failed to remove mod: %1</source>
<translation type="unfinished">无法移动 Mod: %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2744"/>
- <location filename="mainwindow.cpp" line="2747"/>
+ <location filename="mainwindow.cpp" line="3071"/>
+ <location filename="mainwindow.cpp" line="3074"/>
<source>Failed</source>
<translation type="unfinished">失败</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2744"/>
+ <location filename="mainwindow.cpp" line="3071"/>
<source>Installation file no longer exists</source>
<translation type="unfinished">安装文件不复存在</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2748"/>
+ <location filename="mainwindow.cpp" line="3075"/>
<source>Mods installed with old versions of MO can&apos;t be reinstalled in this way.</source>
<translation type="unfinished">旧版 MO 安装的 Mod 无法使用此方法重新安装。</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2763"/>
- <location filename="mainwindow.cpp" line="2790"/>
+ <location filename="mainwindow.cpp" line="3090"/>
+ <location filename="mainwindow.cpp" line="3117"/>
<source>You need to be logged in with Nexus to endorse</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2906"/>
- <location filename="mainwindow.cpp" line="4335"/>
+ <location filename="mainwindow.cpp" line="3249"/>
+ <location filename="mainwindow.cpp" line="4882"/>
<source>Extract BSA</source>
<translation type="unfinished">解压 BSA</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2907"/>
+ <location filename="mainwindow.cpp" line="3250"/>
<source>This mod contains at least one BSA. Do you want to unpack it?
(This removes the BSA after completion. If you don&apos;t know about BSAs, just select no)</source>
<translation type="unfinished">此 Mod 中至少包含一个 BSA。您确定要解压吗?
(解压完成后,BSA 文件将会被删除。如果您不了解 BSA 的话,请选择“否”)</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2917"/>
- <location filename="mainwindow.cpp" line="4292"/>
- <location filename="mainwindow.cpp" line="4343"/>
+ <location filename="mainwindow.cpp" line="3259"/>
+ <location filename="mainwindow.cpp" line="4839"/>
+ <location filename="mainwindow.cpp" line="4890"/>
<source>failed to read %1: %2</source>
<translation type="unfinished">无法读取 %1: %2</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2930"/>
- <location filename="mainwindow.cpp" line="4354"/>
+ <location filename="mainwindow.cpp" line="3272"/>
+ <location filename="mainwindow.cpp" line="4901"/>
<source>This archive contains invalid hashes. Some files may be broken.</source>
<translation type="unfinished">压缩包 Hash 值错误。部分文件可能已经损坏。</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2964"/>
+ <location filename="mainwindow.cpp" line="3306"/>
<source>Nexus ID for this Mod is unknown</source>
<translation type="unfinished">此 Mod 的N网 ID 未知</translation>
</message>
@@ -2208,371 +2388,456 @@ Please enter a name: </source>
<translation type="obsolete">选择优先级</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3243"/>
+ <location filename="mainwindow.cpp" line="3687"/>
<source>Really enable all visible mods?</source>
<translation type="unfinished">确定要启用全部可见的 Mod 吗?</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3252"/>
+ <location filename="mainwindow.cpp" line="3695"/>
<source>Really disable all visible mods?</source>
<translation type="unfinished">确定要禁用全部可见的 Mod 吗?</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3261"/>
+ <location filename="mainwindow.cpp" line="3703"/>
<source>Choose what to export</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3263"/>
+ <location filename="mainwindow.cpp" line="3705"/>
<source>Everything</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3263"/>
+ <location filename="mainwindow.cpp" line="3705"/>
<source>All installed mods are included in the list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3264"/>
+ <location filename="mainwindow.cpp" line="3706"/>
<source>Active Mods</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3264"/>
+ <location filename="mainwindow.cpp" line="3706"/>
<source>Only active (checked) mods from your current profile are included</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3265"/>
+ <location filename="mainwindow.cpp" line="3707"/>
<source>Visible</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3265"/>
+ <location filename="mainwindow.cpp" line="3707"/>
<source>All mods visible in the mod list are included</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3308"/>
+ <location filename="mainwindow.cpp" line="3750"/>
<source>export failed: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3321"/>
+ <location filename="mainwindow.cpp" line="3774"/>
<source>Install Mod...</source>
<translation type="unfinished">安装 Mod...</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3323"/>
+ <location filename="mainwindow.cpp" line="3776"/>
<source>Enable all visible</source>
<translation type="unfinished">启用所有可见项目</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3324"/>
+ <location filename="mainwindow.cpp" line="3777"/>
<source>Disable all visible</source>
<translation type="unfinished">禁用所有可见项目</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3326"/>
+ <location filename="mainwindow.cpp" line="3779"/>
<source>Check all for update</source>
<translation type="unfinished">检查更新</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3330"/>
+ <location filename="mainwindow.cpp" line="3783"/>
<source>Export to csv...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3338"/>
+ <location filename="mainwindow.cpp" line="3791"/>
<source>Sync to Mods...</source>
<translation type="unfinished">同步到 Mod...</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3342"/>
+ <location filename="mainwindow.cpp" line="3795"/>
<source>Restore Backup</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3343"/>
+ <location filename="mainwindow.cpp" line="3796"/>
<source>Remove Backup...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3345"/>
<source>Set Category</source>
- <translation type="unfinished">设置类别</translation>
+ <translation type="obsolete">设置类别</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3349"/>
+ <location filename="mainwindow.cpp" line="3808"/>
<source>Primary Category</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3353"/>
+ <location filename="mainwindow.cpp" line="3815"/>
+ <source>Change versioning scheme</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="3819"/>
+ <source>Un-ignore update</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="3821"/>
+ <source>Ignore update</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="3826"/>
<source>Rename Mod...</source>
<translation type="unfinished">重命名...</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3354"/>
+ <location filename="mainwindow.cpp" line="3827"/>
<source>Remove Mod...</source>
<translation type="unfinished">移除 Mod...</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3355"/>
+ <location filename="mainwindow.cpp" line="3828"/>
<source>Reinstall Mod</source>
<translation type="unfinished">重新安装 Mod</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3358"/>
+ <location filename="mainwindow.cpp" line="3831"/>
<source>Un-Endorse</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3361"/>
- <location filename="mainwindow.cpp" line="3365"/>
+ <location filename="mainwindow.cpp" line="3834"/>
+ <location filename="mainwindow.cpp" line="3838"/>
<source>Endorse</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3362"/>
+ <location filename="mainwindow.cpp" line="3835"/>
<source>Won&apos;t endorse</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3368"/>
+ <location filename="mainwindow.cpp" line="3841"/>
<source>Endorsement state unknown</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3375"/>
+ <location filename="mainwindow.cpp" line="3848"/>
<source>Ignore missing data</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3378"/>
+ <location filename="mainwindow.cpp" line="3851"/>
<source>Visit on Nexus</source>
<translation type="unfinished">在N网上浏览</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3379"/>
+ <location filename="mainwindow.cpp" line="3852"/>
<source>Open in explorer</source>
<translation type="unfinished">在资源管理器中打开</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3382"/>
+ <location filename="mainwindow.cpp" line="3855"/>
<source>Information...</source>
<translation type="unfinished">信息...</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3388"/>
- <location filename="mainwindow.cpp" line="4514"/>
+ <location filename="mainwindow.cpp" line="3861"/>
+ <location filename="mainwindow.cpp" line="5086"/>
<source>Exception: </source>
<translation type="unfinished">例外: </translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3390"/>
- <location filename="mainwindow.cpp" line="4516"/>
+ <location filename="mainwindow.cpp" line="3863"/>
+ <location filename="mainwindow.cpp" line="5088"/>
<source>Unknown exception</source>
<translation type="unfinished">未知的例外</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3412"/>
+ <location filename="mainwindow.cpp" line="3885"/>
<source>&lt;Multiple&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3524"/>
+ <location filename="mainwindow.cpp" line="3902"/>
+ <source>Really delete &quot;%1&quot;?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="4013"/>
<source>Fix Mods...</source>
<translation type="unfinished">修复 Mod...</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3548"/>
- <location filename="mainwindow.cpp" line="3579"/>
+ <location filename="mainwindow.cpp" line="4014"/>
+ <source>Delete</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="4038"/>
+ <location filename="mainwindow.cpp" line="4069"/>
<source>failed to remove %1</source>
<translation type="unfinished">无法删除 %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3563"/>
- <location filename="mainwindow.cpp" line="3594"/>
+ <location filename="mainwindow.cpp" line="4053"/>
+ <location filename="mainwindow.cpp" line="4084"/>
<source>failed to create %1</source>
<translation type="unfinished">无法创建 %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3615"/>
+ <location filename="mainwindow.cpp" line="4107"/>
<source>Can&apos;t change download directory while downloads are in progress!</source>
<translation type="unfinished">下载文件时不能修改下载目录!</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3686"/>
+ <location filename="mainwindow.cpp" line="4174"/>
<source>Download failed</source>
<translation type="unfinished">下载失败</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3830"/>
+ <location filename="mainwindow.cpp" line="4323"/>
<source>failed to write to file %1</source>
<translation type="unfinished">无法写入文件 %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3836"/>
+ <location filename="mainwindow.cpp" line="4329"/>
<source>%1 written</source>
<translation type="unfinished">已写入 %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3875"/>
+ <location filename="mainwindow.cpp" line="4368"/>
<source>Select binary</source>
<translation type="unfinished">选择可执行文件</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3875"/>
+ <location filename="mainwindow.cpp" line="4368"/>
<source>Binary</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3901"/>
+ <location filename="mainwindow.cpp" line="4394"/>
<source>Enter Name</source>
<translation type="unfinished">输入名称</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3902"/>
+ <location filename="mainwindow.cpp" line="4395"/>
<source>Please enter a name for the executable</source>
<translation type="unfinished">请为程序输入一个名称</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3913"/>
+ <location filename="mainwindow.cpp" line="4406"/>
<source>Not an executable</source>
<translation type="unfinished">不是可执行程序</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3913"/>
+ <location filename="mainwindow.cpp" line="4406"/>
<source>This is not a recognized executable.</source>
<translation type="unfinished">无法识别的可执行文件</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3938"/>
- <location filename="mainwindow.cpp" line="3963"/>
+ <location filename="mainwindow.cpp" line="4431"/>
+ <location filename="mainwindow.cpp" line="4456"/>
<source>Replace file?</source>
<translation type="unfinished">替换文件?</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3938"/>
+ <location filename="mainwindow.cpp" line="4431"/>
<source>There already is a hidden version of this file. Replace it?</source>
<translation type="unfinished">已存在同名文件,但该文件被隐藏了。确定要覆盖吗?</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3941"/>
- <location filename="mainwindow.cpp" line="3966"/>
+ <location filename="mainwindow.cpp" line="4434"/>
+ <location filename="mainwindow.cpp" line="4459"/>
<source>File operation failed</source>
<translation type="unfinished">文件操作错误</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3941"/>
- <location filename="mainwindow.cpp" line="3966"/>
+ <location filename="mainwindow.cpp" line="4434"/>
+ <location filename="mainwindow.cpp" line="4459"/>
<source>Failed to remove &quot;%1&quot;. Maybe you lack the required file permissions?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3963"/>
+ <location filename="mainwindow.cpp" line="4456"/>
<source>There already is a visible version of this file. Replace it?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4009"/>
+ <location filename="mainwindow.cpp" line="4489"/>
+ <source>file not found: %1</source>
+ <translation type="unfinished">文件未找到: %1</translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="4502"/>
+ <source>failed to generate preview for %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="4516"/>
+ <source>Sorry, can&apos;t preview anything. This function currently does not support extracting from bsas.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="4547"/>
<source>Update available</source>
<translation type="unfinished">更新可用</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4046"/>
+ <location filename="mainwindow.cpp" line="4584"/>
<source>Open/Execute</source>
<translation type="unfinished">打开/执行</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4047"/>
+ <location filename="mainwindow.cpp" line="4585"/>
<source>Add as Executable</source>
<translation type="unfinished">添加为可执行文件</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4051"/>
+ <location filename="mainwindow.cpp" line="4589"/>
+ <source>Preview</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="4595"/>
<source>Un-Hide</source>
<translation type="unfinished">取消隐藏</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4053"/>
+ <location filename="mainwindow.cpp" line="4597"/>
<source>Hide</source>
<translation type="unfinished">隐藏</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4058"/>
+ <location filename="mainwindow.cpp" line="4603"/>
<source>Write To File...</source>
<translation type="unfinished">写入文件...</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4088"/>
+ <location filename="mainwindow.cpp" line="4634"/>
<source>Do you want to endorse Mod Organizer on %1 now?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4505"/>
+ <location filename="mainwindow.cpp" line="5047"/>
+ <source>Remove</source>
+ <translation type="unfinished">移除</translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="5077"/>
<source>Unlock load order</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4508"/>
+ <location filename="mainwindow.cpp" line="5080"/>
<source>Lock load order</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4223"/>
+ <location filename="mainwindow.cpp" line="5149"/>
+ <source>BOSS working</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="5157"/>
+ <source>failed to run boss: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="4770"/>
<source>Request to Nexus failed: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4230"/>
- <location filename="mainwindow.cpp" line="4247"/>
+ <location filename="mainwindow.cpp" line="1284"/>
+ <source>Executable &quot;%1&quot; not found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="1789"/>
+ <source>Failed to refresh list of esps: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="3346"/>
+ <source>This will move all files from overwrite into a new, regular mod.
+Please enter a name:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="3798"/>
+ <source>Add/Remove Categories</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="3803"/>
+ <source>Replace Categories</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="4777"/>
+ <location filename="mainwindow.cpp" line="4794"/>
<source>login successful</source>
<translation type="unfinished">登录成功</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4256"/>
+ <location filename="mainwindow.cpp" line="4803"/>
<source>login failed: %1. Trying to download anyway</source>
<translation type="unfinished">登录失败: %1,请尝试使用别的方法下载</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4262"/>
+ <location filename="mainwindow.cpp" line="4809"/>
<source>login failed: %1</source>
<translation type="unfinished">无法登录: %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4271"/>
+ <location filename="mainwindow.cpp" line="4818"/>
<source>login failed: %1. You need to log-in with Nexus to update MO.</source>
<translation type="unfinished">登录失败: %1。您需要登录到N网才能更新 MO</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4304"/>
+ <location filename="mainwindow.cpp" line="4851"/>
<source>Error</source>
<translation type="unfinished">错误</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4304"/>
+ <location filename="mainwindow.cpp" line="4851"/>
<source>failed to extract %1 (errorcode %2)</source>
<translation type="unfinished">无法解压 %1 (错误代码 %2)</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4399"/>
+ <location filename="mainwindow.cpp" line="4946"/>
<source>Extract...</source>
<translation type="unfinished">解压...</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4449"/>
+ <location filename="mainwindow.cpp" line="5002"/>
<source>Edit Categories...</source>
<translation type="unfinished">编辑类别...</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4485"/>
+ <location filename="mainwindow.cpp" line="5057"/>
<source>Enable all</source>
<translation type="unfinished">全部启用</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4486"/>
+ <location filename="mainwindow.cpp" line="5058"/>
<source>Disable all</source>
<translation type="unfinished">全部禁用</translation>
</message>
@@ -2606,7 +2871,7 @@ Please enter a name: </source>
<context>
<name>ModInfoBackup</name>
<message>
- <location filename="modinfo.cpp" line="784"/>
+ <location filename="modinfo.cpp" line="820"/>
<source>This is the backup of a mod</source>
<translation type="unfinished"></translation>
</message>
@@ -2619,87 +2884,85 @@ Please enter a name: </source>
<translation>Mod 信息</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="27"/>
+ <location filename="modinfodialog.ui" line="30"/>
<source>Textfiles</source>
<translation>文本文件</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="39"/>
+ <location filename="modinfodialog.ui" line="42"/>
<source>A list of text-files in the mod directory.</source>
<translation>Mod 目录里包含的文本文件的列表。</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="42"/>
+ <location filename="modinfodialog.ui" line="45"/>
<source>A list of text-files in the mod directory like readmes. </source>
<translation>Mod 目录里包含的文本文件 (类似于自述文件) 的列表 。</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="64"/>
- <location filename="modinfodialog.ui" line="149"/>
+ <location filename="modinfodialog.ui" line="67"/>
+ <location filename="modinfodialog.ui" line="155"/>
<source>Save</source>
<translation>保存</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="74"/>
+ <location filename="modinfodialog.ui" line="77"/>
<source>INI-Files</source>
<translation>Ini 文件</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="94"/>
+ <location filename="modinfodialog.ui" line="97"/>
<source>This is a list of .ini files in the mod.</source>
<translation>Mod 目录里包含的 Ini 文件的列表。</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="97"/>
+ <location filename="modinfodialog.ui" line="100"/>
<source>This is a list of .ini files in the mod. These are usually used to configure the behaviour of mods if there are configurable parameters.</source>
<translation>Mod 目录里包含的 Ini 文件的列表,这些文件通常用来配置 Mod 的行为,如果有可设置的参数的话。</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="143"/>
+ <location filename="modinfodialog.ui" line="149"/>
<source>Save changes to the file.</source>
<translation>保存更改到文件中。</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="146"/>
+ <location filename="modinfodialog.ui" line="152"/>
<source>Save changes to the file. This overwrites the original. There is no automatic backup!</source>
<translation>保存更改到文件中,这将会覆盖原始文件,并且没有自动备份!</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="159"/>
+ <location filename="modinfodialog.ui" line="165"/>
<source>Images</source>
<translation>图片</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="214"/>
+ <location filename="modinfodialog.ui" line="220"/>
<source>Images located in the mod.</source>
<translation>位于 Mod 中的图片。</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="217"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;This lists all the images (.jpg and .png) in the mod directory, like screenshots and such. Click one to get a larger view.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <translation>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+ <translation type="obsolete">&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:9pt;&quot;&gt;这里列出了所有在 Mod 目录里的图片 (.jpg 和 .png),如截图等。点击其中的一个来获得较大的视图。&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="254"/>
- <location filename="modinfodialog.ui" line="277"/>
+ <location filename="modinfodialog.ui" line="256"/>
+ <location filename="modinfodialog.ui" line="275"/>
<source>Optional ESPs</source>
<translation>可选 ESP</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="260"/>
+ <location filename="modinfodialog.ui" line="262"/>
<source>List of esps and esms that can not be loaded by the game.</source>
<translation>包含了不会被游戏载入的 esp 和 esm 的列表。</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="263"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
@@ -2708,7 +2971,7 @@ p, li { white-space: pre-wrap; }
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;They usually contain optional functionality, see the readme.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;&quot;&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Most mods do not have optional esps, so chances are good you are looking at an empty list.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <translation>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+ <translation type="obsolete">&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
@@ -2719,103 +2982,116 @@ p, li { white-space: pre-wrap; }
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:9pt;&quot;&gt;大部分 Mod 没有可选 esp,因此您正在看的很有可能只是一个空列表。&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="292"/>
+ <location filename="modinfodialog.ui" line="223"/>
+ <source>This lists all the images (.jpg and .png) in the mod directory, like screenshots and such. Click one to get a larger view.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="modinfodialog.ui" line="265"/>
+ <source>List of esps and esms contained in this plugin that currently can not be loaded by the game. They will not even appear in the esp-list in the main MO-window.
+They usually contain optional functionality, see the readme.
+
+Most mods do not have optional esps, so chances are good you are looking at an empty list.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="modinfodialog.ui" line="290"/>
<source>Make the selected mod in the lower list unavailable.</source>
<translation>使下表中已选的 Mod 变得不可用。</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="295"/>
+ <location filename="modinfodialog.ui" line="293"/>
<source>The selected esp (in the lower list) will be pushed into a subdirectory of the mod and will thus become &quot;invisible&quot; to the game. It can then no longer be activated.</source>
<translation>已选的 esp (在下表中) 将会被放入 Mod 的子目录里,在游戏里将会变得“不可见”,并且之后就不能再被激活了。</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="321"/>
+ <location filename="modinfodialog.ui" line="319"/>
<source>Move a file to the data directory.</source>
<translation>移动一个文件到 Data 目录。</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="324"/>
+ <location filename="modinfodialog.ui" line="322"/>
<source>This moves a esp to the esp directory so it can be enabled in the main window. Please note that the ESP merely becomes &quot;available&quot;, it will not necessarily be loaded! That is configured in the main window of omo.</source>
<translation>移动一个 esp 文件到 esp 目录,这样它就可以在主窗口中启用了。请注意: ESP 只是变得“可用”,它并不一定会被载入!想要载入请在 MO 的主窗口中勾选。</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="359"/>
+ <location filename="modinfodialog.ui" line="357"/>
<source>ESPs in the data directory and thus visible to the game.</source>
<translation>ESP 在 Data 目录,因此它在游戏里会变得可见。</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="362"/>
+ <location filename="modinfodialog.ui" line="360"/>
<source>These are the mod files that are in the (virtual) data directory of your game and will thus be selecteable in the esp list in the main window.</source>
<translation>这些 Mod 文件位于您游戏的 (虚拟) Data 目录里,因此它们在主窗口的 esp 列表中会变得可选。</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="369"/>
+ <location filename="modinfodialog.ui" line="367"/>
<source>Available ESPs</source>
<translation>可用 ESP</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="377"/>
+ <location filename="modinfodialog.ui" line="375"/>
<source>Conflicts</source>
<translation>冲突</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="385"/>
+ <location filename="modinfodialog.ui" line="383"/>
<source>The following conflicted files are provided by this mod</source>
<translation>以下冲突文件由此 Mod 提供</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="432"/>
- <location filename="modinfodialog.ui" line="479"/>
+ <location filename="modinfodialog.ui" line="433"/>
+ <location filename="modinfodialog.ui" line="483"/>
<source>File</source>
<translation>文件</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="437"/>
+ <location filename="modinfodialog.ui" line="438"/>
<source>Overwritten Mods</source>
<translation>覆盖的 Mod</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="447"/>
+ <location filename="modinfodialog.ui" line="448"/>
<source>The following conflicted files are provided by other mods</source>
<translation>以下冲突文件由其它 Mod 提供</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="484"/>
+ <location filename="modinfodialog.ui" line="488"/>
<source>Providing Mod</source>
<translation>提供的 Mod</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="494"/>
+ <location filename="modinfodialog.ui" line="498"/>
<source>Non-Conflicted files</source>
<translation>非冲突文件</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="514"/>
+ <location filename="modinfodialog.ui" line="518"/>
<source>Categories</source>
<translation>类别</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="537"/>
+ <location filename="modinfodialog.ui" line="541"/>
<source>Primary Category</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="554"/>
+ <location filename="modinfodialog.ui" line="558"/>
<source>Nexus Info</source>
<translation>N网信息</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="562"/>
+ <location filename="modinfodialog.ui" line="566"/>
<source>Mod ID</source>
<translation>Mod ID</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="569"/>
+ <location filename="modinfodialog.ui" line="573"/>
<source>Mod ID for this mod on Nexus.</source>
<translation>N网上此 Mod 的 ID。</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="572"/>
+ <location filename="modinfodialog.ui" line="576"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
@@ -2828,7 +3104,7 @@ p, li { white-space: pre-wrap; }
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;N网上此 Mod 的 ID,如果您在 MO 中下载并安装了 Mod 它将被自动填写,否则您需要手动输入。要找到正确的 ID,在N网找到 Mod。比如,像这样的链接: &lt;a href=&quot; http://www.skyrimnexus.com/downloads/file.php?id=1334&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;http://www.skyrimnexus.com/downloads/file.php?id=1334&lt;/span&gt;&lt;/a&gt; 在上面的例子中,1334就是您要找的 ID。此外: 上面的就是 Mod Organizer 在N网的链接,为什么不现在就到那里去赞同我呢?&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="596"/>
+ <location filename="modinfodialog.ui" line="600"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
@@ -2841,32 +3117,31 @@ p, li { white-space: pre-wrap; }
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:9pt;&quot;&gt;Mod 的已安装版本,鼠标提示将显示N网上的当前版本,已安装的版本号只有在您通过 MO 来安装 Mod 的时候才会自动填写。&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="603"/>
+ <location filename="modinfodialog.ui" line="607"/>
<source>Version</source>
<translation>版本</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="633"/>
+ <location filename="modinfodialog.ui" line="637"/>
<source>Refresh</source>
<translation type="unfinished">刷新</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="636"/>
+ <location filename="modinfodialog.ui" line="640"/>
<source>Refresh all information from Nexus.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="650"/>
+ <location filename="modinfodialog.ui" line="654"/>
<source>Description</source>
<translation>描述</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="665"/>
+ <location filename="modinfodialog.ui" line="669"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
-&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
@@ -2887,20 +3162,21 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">类型</translation>
</message>
<message>
+ <location filename="modinfodialog.cpp" line="1221"/>
<source>Name</source>
- <translation type="obsolete">名称</translation>
+ <translation type="unfinished">名称</translation>
</message>
<message>
<source>Size (kB)</source>
<translation type="obsolete">大小 (KB)</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="701"/>
+ <location filename="modinfodialog.ui" line="704"/>
<source>Endorse</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="715"/>
+ <location filename="modinfodialog.ui" line="718"/>
<source>Notes</source>
<translation type="unfinished"></translation>
</message>
@@ -2913,17 +3189,17 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">您支持过这个 Mod 了吗?</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="725"/>
+ <location filename="modinfodialog.ui" line="728"/>
<source>Filetree</source>
<translation>文件树</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="734"/>
+ <location filename="modinfodialog.ui" line="737"/>
<source>A directory view of this mod</source>
<translation>这个 Mod 的目录视图</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="737"/>
+ <location filename="modinfodialog.ui" line="740"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
@@ -2938,53 +3214,53 @@ p, li { white-space: pre-wrap; }
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:9pt;&quot;&gt;所做的更改将会立即作用于磁盘上的文件,所以请&lt;/span&gt;&lt;span style=&quot; font-size:9pt; font-weight:600;&quot;&gt;谨慎操作&lt;/span&gt;&lt;span style=&quot; font-size:9pt;&quot;&gt;。&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="764"/>
+ <location filename="modinfodialog.ui" line="767"/>
<source>Previous</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="771"/>
+ <location filename="modinfodialog.ui" line="774"/>
<source>Next</source>
<translation type="unfinished">下一步</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="791"/>
+ <location filename="modinfodialog.ui" line="794"/>
<source>Close</source>
<translation>关闭</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="108"/>
+ <location filename="modinfodialog.cpp" line="104"/>
<source>&amp;Delete</source>
<translation>&amp;删除</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="109"/>
+ <location filename="modinfodialog.cpp" line="105"/>
<source>&amp;Rename</source>
<translation>&amp;重命名</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="110"/>
+ <location filename="modinfodialog.cpp" line="106"/>
<source>&amp;Hide</source>
<translation>&amp;隐藏</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="111"/>
+ <location filename="modinfodialog.cpp" line="107"/>
<source>&amp;Unhide</source>
<translation>&amp;取消隐藏</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="112"/>
+ <location filename="modinfodialog.cpp" line="108"/>
<source>&amp;Open</source>
<translation>&amp;打开</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="113"/>
+ <location filename="modinfodialog.cpp" line="109"/>
<source>&amp;New Folder</source>
<translation>&amp;新建文件夹</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="352"/>
- <location filename="modinfodialog.cpp" line="367"/>
+ <location filename="modinfodialog.cpp" line="405"/>
+ <location filename="modinfodialog.cpp" line="420"/>
<source>Save changes?</source>
<translation>保存更改吗?</translation>
</message>
@@ -2993,79 +3269,79 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">保存更改到 &quot;%1&quot;?</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="563"/>
+ <location filename="modinfodialog.cpp" line="612"/>
<source>File Exists</source>
<translation>文件已存在</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="563"/>
+ <location filename="modinfodialog.cpp" line="612"/>
<source>A file with that name exists, please enter a new one</source>
<translation>文件名已存在,请输入其它名称</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="580"/>
+ <location filename="modinfodialog.cpp" line="629"/>
<source>failed to move file</source>
<translation>无法移动文件</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="605"/>
+ <location filename="modinfodialog.cpp" line="654"/>
<source>failed to create directory &quot;optional&quot;</source>
<translation>无法创建 &quot;optional&quot; 目录</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="643"/>
- <location filename="modinfodialog.cpp" line="1155"/>
+ <location filename="modinfodialog.cpp" line="692"/>
+ <location filename="modinfodialog.cpp" line="1198"/>
<source>Info requested, please wait</source>
<translation>请求信息已发出,请稍后</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="758"/>
+ <location filename="modinfodialog.cpp" line="807"/>
<source>(description incomplete, please visit nexus)</source>
<translation>(描述信息不完整,请访问N网)</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="713"/>
+ <location filename="modinfodialog.cpp" line="762"/>
<source>Current Version: %1</source>
<translation>当前版本: %1</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="717"/>
+ <location filename="modinfodialog.cpp" line="766"/>
<source>No update available</source>
<translation>没有可用的更新</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="697"/>
+ <location filename="modinfodialog.cpp" line="746"/>
<source>Main</source>
<translation>主要文件</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="352"/>
- <location filename="modinfodialog.cpp" line="367"/>
+ <location filename="modinfodialog.cpp" line="405"/>
+ <location filename="modinfodialog.cpp" line="420"/>
<source>Save changes to &quot;%1&quot;?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="698"/>
+ <location filename="modinfodialog.cpp" line="747"/>
<source>Update</source>
<translation>更新</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="699"/>
+ <location filename="modinfodialog.cpp" line="748"/>
<source>Optional</source>
<translation>可选文件</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="700"/>
+ <location filename="modinfodialog.cpp" line="749"/>
<source>Old</source>
<translation>旧档</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="701"/>
+ <location filename="modinfodialog.cpp" line="750"/>
<source>Misc</source>
<translation>杂项</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="702"/>
+ <location filename="modinfodialog.cpp" line="751"/>
<source>Unknown</source>
<translation>未知</translation>
</message>
@@ -3074,13 +3350,13 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">请求失败: %1</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="779"/>
+ <location filename="modinfodialog.cpp" line="822"/>
<source>&lt;a href=&quot;%1&quot;&gt;Visit on Nexus&lt;/a&gt;</source>
<translation>&lt;a href=&quot;%1&quot;&gt;访问N网&lt;/a&gt;</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="869"/>
- <location filename="modinfodialog.cpp" line="874"/>
+ <location filename="modinfodialog.cpp" line="912"/>
+ <location filename="modinfodialog.cpp" line="917"/>
<source>Confirm</source>
<translation>确认</translation>
</message>
@@ -3097,85 +3373,110 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">例外: %1</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="858"/>
+ <location filename="modinfodialog.cpp" line="901"/>
<source>Failed to delete %1</source>
<translation>无法删除 %1</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="869"/>
+ <location filename="modinfodialog.cpp" line="912"/>
<source>Are sure you want to delete &quot;%1&quot;?</source>
<translation>确定要删除 &quot;%1&quot; 吗?</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="874"/>
+ <location filename="modinfodialog.cpp" line="917"/>
<source>Are sure you want to delete the selected files?</source>
<translation>确定要删除所选的文件吗?</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="948"/>
- <location filename="modinfodialog.cpp" line="954"/>
+ <location filename="modinfodialog.cpp" line="991"/>
+ <location filename="modinfodialog.cpp" line="997"/>
<source>New Folder</source>
<translation>新建文件夹</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="960"/>
+ <location filename="modinfodialog.cpp" line="1003"/>
<source>Failed to create &quot;%1&quot;</source>
<translation>无法创建 &quot;%1&quot;</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="1064"/>
- <location filename="modinfodialog.cpp" line="1088"/>
+ <location filename="modinfodialog.cpp" line="1107"/>
+ <location filename="modinfodialog.cpp" line="1131"/>
<source>Replace file?</source>
<translation>替换文件?</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="1064"/>
+ <location filename="modinfodialog.cpp" line="1107"/>
<source>There already is a hidden version of this file. Replace it?</source>
<translation>已存在同名文件,但该文件被隐藏了。确定要覆盖吗?</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="1067"/>
- <location filename="modinfodialog.cpp" line="1091"/>
+ <location filename="modinfodialog.cpp" line="1110"/>
+ <location filename="modinfodialog.cpp" line="1134"/>
<source>File operation failed</source>
<translation>文件操作错误</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="1067"/>
- <location filename="modinfodialog.cpp" line="1091"/>
+ <location filename="modinfodialog.cpp" line="1110"/>
+ <location filename="modinfodialog.cpp" line="1134"/>
<source>Failed to remove &quot;%1&quot;. Maybe you lack the required file permissions?</source>
<translation>无法移除 &quot;%1&quot;。也许您需要足够的文件权限?</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="1078"/>
- <location filename="modinfodialog.cpp" line="1101"/>
+ <location filename="modinfodialog.cpp" line="1121"/>
+ <location filename="modinfodialog.cpp" line="1144"/>
<source>failed to rename %1 to %2</source>
<translation>无法重命名 %1 为 %2</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="1088"/>
+ <location filename="modinfodialog.cpp" line="1131"/>
<source>There already is a visible version of this file. Replace it?</source>
<translation>已存在同名文件。确定要覆盖吗?</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="1135"/>
+ <location filename="modinfodialog.cpp" line="1178"/>
<source>Un-Hide</source>
<translation>取消隐藏</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="1137"/>
+ <location filename="modinfodialog.cpp" line="1180"/>
<source>Hide</source>
<translation>隐藏</translation>
</message>
+ <message>
+ <location filename="modinfodialog.cpp" line="1221"/>
+ <source>Please enter a name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="modinfodialog.cpp" line="1225"/>
+ <location filename="modinfodialog.cpp" line="1228"/>
+ <source>Error</source>
+ <translation type="unfinished">错误</translation>
+ </message>
+ <message>
+ <location filename="modinfodialog.cpp" line="1225"/>
+ <source>Invalid name. Must be a valid file name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="modinfodialog.cpp" line="1228"/>
+ <source>A tweak by that name exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="modinfodialog.cpp" line="1240"/>
+ <source>Create Tweak</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>ModInfoOverwrite</name>
<message>
- <location filename="modinfo.h" line="812"/>
<source>Overwrite</source>
- <translation>覆盖</translation>
+ <translation type="obsolete">覆盖</translation>
</message>
<message>
- <location filename="modinfo.cpp" line="821"/>
+ <location filename="modinfo.cpp" line="866"/>
<source>This pseudo mod contains files from the virtual data tree that got modified (i.e. by the construction kit)</source>
<translation type="unfinished">此虚拟安装包内包含来自虚拟 Data 树的文件,但文件发生了变化 (例: 被CK修改了)</translation>
</message>
@@ -3183,17 +3484,17 @@ p, li { white-space: pre-wrap; }
<context>
<name>ModInfoRegular</name>
<message>
- <location filename="modinfo.cpp" line="392"/>
+ <location filename="modinfo.cpp" line="393"/>
<source>failed to write %1/meta.ini: %2</source>
<translation>无法写入 %1/meta.ini: %2</translation>
</message>
<message>
- <location filename="modinfo.cpp" line="625"/>
+ <location filename="modinfo.cpp" line="661"/>
<source>%1 contains no esp/esm and no asset (textures, meshes, interface, ...) directory</source>
<translation type="unfinished">%1 中未包含 esp 或 esm 和有效的目录 (textures, meshes, interface, ...)</translation>
</message>
<message>
- <location filename="modinfo.cpp" line="629"/>
+ <location filename="modinfo.cpp" line="665"/>
<source>Categories: &lt;br&gt;</source>
<translation type="unfinished">种类: &lt;br&gt;</translation>
</message>
@@ -3201,7 +3502,7 @@ p, li { white-space: pre-wrap; }
<context>
<name>ModList</name>
<message>
- <location filename="modlist.cpp" line="662"/>
+ <location filename="modlist.cpp" line="776"/>
<source>Confirm</source>
<translation>确认</translation>
</message>
@@ -3218,9 +3519,8 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">无效的行索引 %1</translation>
</message>
<message>
- <location filename="modlist.cpp" line="94"/>
<source>Overwrite</source>
- <translation>覆盖</translation>
+ <translation type="obsolete">覆盖</translation>
</message>
<message>
<location filename="modlist.cpp" line="109"/>
@@ -3271,17 +3571,17 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">最高值</translation>
</message>
<message>
- <location filename="modlist.cpp" line="736"/>
+ <location filename="modlist.cpp" line="850"/>
<source>Category of the mod.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="737"/>
+ <location filename="modlist.cpp" line="851"/>
<source>Id of the mod as used on Nexus.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="738"/>
+ <location filename="modlist.cpp" line="852"/>
<source>Emblemes to highlight things that might require attention.</source>
<translation type="unfinished"></translation>
</message>
@@ -3290,7 +3590,7 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">%1 中未包含 esp 或 esm 和有效的目录 (textures, meshes, interface, ...)</translation>
</message>
<message>
- <location filename="modlist.cpp" line="298"/>
+ <location filename="modlist.cpp" line="318"/>
<source>Categories: &lt;br&gt;</source>
<translation>种类: &lt;br&gt;</translation>
</message>
@@ -3299,9 +3599,10 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">此虚拟安装包内包含来自虚拟 Data 树的文件,但文件发生了变化 (例: 被CK修改了)</translation>
</message>
<message>
- <location filename="modlist.cpp" line="294"/>
- <source>installed version: %1, newest version: %2</source>
- <translation>当前版本: %1,最新版本: %2</translation>
+ <location filename="modlist.cpp" line="308"/>
+ <source>installed version: &quot;%1&quot;, newest version: &quot;%2&quot;</source>
+ <oldsource>installed version: %1, newest version: %2</oldsource>
+ <translation type="unfinished">当前版本: %1,最新版本: %2</translation>
</message>
<message>
<source>Name</source>
@@ -3312,83 +3613,88 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">Mod 名称</translation>
</message>
<message>
- <location filename="modlist.cpp" line="719"/>
+ <location filename="modlist.cpp" line="833"/>
<source>Version</source>
<translation>版本</translation>
</message>
<message>
- <location filename="modlist.cpp" line="733"/>
+ <location filename="modlist.cpp" line="847"/>
<source>Version of the mod (if available)</source>
<translation>Mod 版本 (如果可用)</translation>
</message>
<message>
- <location filename="modlist.cpp" line="720"/>
+ <location filename="modlist.cpp" line="834"/>
<source>Priority</source>
<translation>优先级</translation>
</message>
<message>
- <location filename="modlist.cpp" line="184"/>
+ <location filename="modlist.cpp" line="197"/>
<source>invalid</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="327"/>
+ <location filename="modlist.cpp" line="310"/>
+ <source>The newest version on Nexus seems to be older than the one you have installed. This could either mean the version you have has been withdrawn (i.e. due to a bug) or the author uses a non-standard versioning scheme and that newest version is actually newer. Either way you may want to &quot;upgrade&quot;.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="modlist.cpp" line="347"/>
<source>Invalid name</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="603"/>
+ <location filename="modlist.cpp" line="717"/>
<source>drag&amp;drop failed: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="717"/>
+ <location filename="modlist.cpp" line="831"/>
<source>Flags</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="718"/>
+ <location filename="modlist.cpp" line="832"/>
<source>Mod Name</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="721"/>
+ <location filename="modlist.cpp" line="835"/>
<source>Category</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="722"/>
+ <location filename="modlist.cpp" line="836"/>
<source>Nexus ID</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="723"/>
+ <location filename="modlist.cpp" line="837"/>
<source>Installation</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="724"/>
- <location filename="modlist.cpp" line="740"/>
+ <location filename="modlist.cpp" line="838"/>
+ <location filename="modlist.cpp" line="854"/>
<source>unknown</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="732"/>
+ <location filename="modlist.cpp" line="846"/>
<source>Name of your mods</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="734"/>
+ <location filename="modlist.cpp" line="848"/>
<source>Installation priority of your mod. The higher, the more &quot;important&quot; it is and thus overwrites files from mods with lower priority.</source>
<translation>Mod 的安装优先级。越高就表示越“重要”,从而覆盖掉低优先级的 Mod 文件。</translation>
</message>
<message>
- <location filename="modlist.cpp" line="739"/>
+ <location filename="modlist.cpp" line="853"/>
<source>Time this mod was installed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="662"/>
+ <location filename="modlist.cpp" line="776"/>
<source>Are you sure you want to remove &quot;%1&quot;?</source>
<translation>确定要移除 &quot;%1&quot; 吗?</translation>
</message>
@@ -3424,12 +3730,12 @@ p, li { white-space: pre-wrap; }
<context>
<name>MyFileSystemModel</name>
<message>
- <location filename="overwriteinfodialog.cpp" line="48"/>
+ <location filename="overwriteinfodialog.cpp" line="47"/>
<source>Overwrites</source>
<translation>覆盖</translation>
</message>
<message>
- <location filename="overwriteinfodialog.cpp" line="60"/>
+ <location filename="overwriteinfodialog.cpp" line="59"/>
<source>not implemented</source>
<translation>未实现</translation>
</message>
@@ -3438,11 +3744,16 @@ p, li { white-space: pre-wrap; }
<name>NXMAccessManager</name>
<message>
<location filename="nxmaccessmanager.cpp" line="130"/>
+ <source>Logging into Nexus</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="nxmaccessmanager.cpp" line="145"/>
<source>timeout</source>
<translation>超时</translation>
</message>
<message>
- <location filename="nxmaccessmanager.cpp" line="168"/>
+ <location filename="nxmaccessmanager.cpp" line="185"/>
<source>Please check your password</source>
<translation>请检查您的密码</translation>
</message>
@@ -3492,17 +3803,17 @@ p, li { white-space: pre-wrap; }
<context>
<name>NexusInterface</name>
<message>
- <location filename="nexusinterface.cpp" line="201"/>
+ <location filename="nexusinterface.cpp" line="218"/>
<source>Failed to guess mod id for &quot;%1&quot;, please pick the correct one</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="nexusinterface.cpp" line="421"/>
+ <location filename="nexusinterface.cpp" line="455"/>
<source>empty response</source>
<translation>未响应</translation>
</message>
<message>
- <location filename="nexusinterface.cpp" line="450"/>
+ <location filename="nexusinterface.cpp" line="483"/>
<source>invalid response</source>
<translation>无效的响应</translation>
</message>
@@ -4429,34 +4740,34 @@ Right now this has very limited functionality</source>
<translation>&amp;新建文件夹</translation>
</message>
<message>
- <location filename="overwriteinfodialog.cpp" line="137"/>
+ <location filename="overwriteinfodialog.cpp" line="136"/>
<source>Failed to delete &quot;%1&quot;</source>
<translation>无法删除 &quot;%1&quot;</translation>
</message>
<message>
- <location filename="overwriteinfodialog.cpp" line="148"/>
- <location filename="overwriteinfodialog.cpp" line="153"/>
+ <location filename="overwriteinfodialog.cpp" line="147"/>
+ <location filename="overwriteinfodialog.cpp" line="152"/>
<source>Confirm</source>
<translation>确认</translation>
</message>
<message>
- <location filename="overwriteinfodialog.cpp" line="148"/>
+ <location filename="overwriteinfodialog.cpp" line="147"/>
<source>Are sure you want to delete &quot;%1&quot;?</source>
<translation>确定要删除 &quot;%1&quot; 吗?</translation>
</message>
<message>
- <location filename="overwriteinfodialog.cpp" line="153"/>
+ <location filename="overwriteinfodialog.cpp" line="152"/>
<source>Are sure you want to delete the selected files?</source>
<translation>确定要删除所选的文件吗?</translation>
</message>
<message>
- <location filename="overwriteinfodialog.cpp" line="203"/>
- <location filename="overwriteinfodialog.cpp" line="209"/>
+ <location filename="overwriteinfodialog.cpp" line="202"/>
+ <location filename="overwriteinfodialog.cpp" line="208"/>
<source>New Folder</source>
<translation>新建文件夹</translation>
</message>
<message>
- <location filename="overwriteinfodialog.cpp" line="215"/>
+ <location filename="overwriteinfodialog.cpp" line="214"/>
<source>Failed to create &quot;%1&quot;</source>
<translation>无法创建 &quot;%1&quot;</translation>
</message>
@@ -4468,70 +4779,93 @@ Right now this has very limited functionality</source>
<translation type="obsolete">ESP 文件没有找到: %1</translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="98"/>
+ <location filename="pluginlist.cpp" line="111"/>
<source>Mod Index</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="99"/>
- <location filename="pluginlist.cpp" line="111"/>
+ <location filename="pluginlist.cpp" line="112"/>
+ <source>Flags</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="pluginlist.cpp" line="113"/>
+ <location filename="pluginlist.cpp" line="125"/>
<source>unknown</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="107"/>
+ <location filename="pluginlist.cpp" line="121"/>
<source>Name of your mods</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="108"/>
+ <location filename="pluginlist.cpp" line="122"/>
<source>Load priority of your mod. The higher, the more &quot;important&quot; it is and thus overwrites data from plugins with lower priority.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="110"/>
+ <location filename="pluginlist.cpp" line="124"/>
<source>The modindex determins the formids of objects originating from this mods.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="208"/>
+ <location filename="pluginlist.cpp" line="165"/>
+ <source>failed to update esp info for file %1 (source id: %2), error: %3</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="pluginlist.cpp" line="233"/>
<source>esp not found: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="215"/>
- <location filename="pluginlist.cpp" line="227"/>
+ <location filename="pluginlist.cpp" line="240"/>
+ <location filename="pluginlist.cpp" line="252"/>
<source>Confirm</source>
<translation type="unfinished">确认</translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="215"/>
+ <location filename="pluginlist.cpp" line="240"/>
<source>Really enable all plugins?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="227"/>
+ <location filename="pluginlist.cpp" line="252"/>
<source>Really disable all plugins?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="353"/>
+ <location filename="pluginlist.cpp" line="380"/>
<source>The file containing locked plugin indices is broken</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="366"/>
- <location filename="pluginlist.cpp" line="405"/>
<source>failed to open output file: %1</source>
- <translation>无法打开输出文件: %1</translation>
+ <translation type="obsolete">无法打开输出文件: %1</translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="393"/>
+ <location filename="pluginlist.cpp" line="418"/>
<source>Some of your plugins have invalid names! These plugins can not be loaded by the game. Please see mo_interface.log for a list of affected plugins and rename them.</source>
<translation>您的一些插件名称无效!这些插件无法被游戏载入。请查看 mo_interface.log 来确认那些受影响的插件并重命名它们。</translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="737"/>
+ <location filename="pluginlist.cpp" line="644"/>
+ <source>BOSS dll incompatible</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="pluginlist.cpp" line="987"/>
+ <source>Missing Masters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="pluginlist.cpp" line="993"/>
+ <source>Enabled Masters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="pluginlist.cpp" line="1134"/>
<source>failed to restore load order for %1</source>
<translation type="unfinished"></translation>
</message>
@@ -4544,17 +4878,17 @@ Right now this has very limited functionality</source>
<translation type="obsolete">最高值</translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="631"/>
+ <location filename="pluginlist.cpp" line="983"/>
<source>This plugin can&apos;t be disabled (enforced by the game)</source>
<translation>这个插件不能被禁用 (由游戏执行)</translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="633"/>
+ <location filename="pluginlist.cpp" line="985"/>
<source>Origin: %1</source>
<translation>隶属于: %1</translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="96"/>
+ <location filename="pluginlist.cpp" line="109"/>
<source>Name</source>
<translation>名称</translation>
</message>
@@ -4563,7 +4897,7 @@ Right now this has very limited functionality</source>
<translation type="obsolete">Mod 名称</translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="97"/>
+ <location filename="pluginlist.cpp" line="110"/>
<source>Priority</source>
<translation>优先级</translation>
</message>
@@ -4581,6 +4915,19 @@ Right now this has very limited functionality</source>
</message>
</context>
<context>
+ <name>PreviewDialog</name>
+ <message>
+ <location filename="previewdialog.ui" line="14"/>
+ <source>Preview</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="previewdialog.ui" line="78"/>
+ <source>Close</source>
+ <translation type="unfinished">关闭</translation>
+ </message>
+</context>
+<context>
<name>ProblemsDialog</name>
<message>
<location filename="problemsdialog.ui" line="14"/>
@@ -4593,21 +4940,27 @@ Right now this has very limited functionality</source>
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:7.8pt; font-weight:400; font-style:normal;&quot;&gt;
-&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <oldsource>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
+p, li { white-space: pre-wrap; }
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</oldsource>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="problemsdialog.cpp" line="29"/>
- <source>fix</source>
- <translation type="unfinished"></translation>
+ <location filename="problemsdialog.ui" line="75"/>
+ <source>Close</source>
+ <translation type="unfinished">关闭</translation>
</message>
<message>
- <location filename="problemsdialog.cpp" line="30"/>
+ <location filename="problemsdialog.cpp" line="44"/>
+ <location filename="problemsdialog.cpp" line="45"/>
<source>Fix</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="problemsdialog.cpp" line="34"/>
+ <location filename="problemsdialog.cpp" line="49"/>
<source>No guided fix</source>
<translation type="unfinished"></translation>
</message>
@@ -4619,72 +4972,72 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">无法应用 Ini 设定</translation>
</message>
<message>
- <location filename="profile.cpp" line="56"/>
+ <location filename="profile.cpp" line="59"/>
<source>invalid profile name %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="60"/>
+ <location filename="profile.cpp" line="63"/>
<source>failed to create %1</source>
<translation type="unfinished">无法创建 %1</translation>
</message>
<message>
- <location filename="profile.cpp" line="152"/>
- <source>failed to open &quot;%1&quot; for writing</source>
+ <location filename="profile.cpp" line="182"/>
+ <source>failed to write mod list: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="189"/>
+ <location filename="profile.cpp" line="193"/>
<source>failed to update tweaked ini file, wrong settings may be used: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="219"/>
+ <location filename="profile.cpp" line="223"/>
<source>failed to create tweaked ini: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="271"/>
- <location filename="profile.cpp" line="300"/>
- <location filename="profile.cpp" line="384"/>
- <location filename="profile.cpp" line="402"/>
- <location filename="profile.cpp" line="412"/>
+ <location filename="profile.cpp" line="276"/>
+ <location filename="profile.cpp" line="305"/>
+ <location filename="profile.cpp" line="390"/>
+ <location filename="profile.cpp" line="408"/>
+ <location filename="profile.cpp" line="418"/>
<source>invalid index %1</source>
<translation>无效的索引 %1</translation>
</message>
<message>
- <location filename="profile.cpp" line="365"/>
+ <location filename="profile.cpp" line="371"/>
<source>Overwrite directory couldn&apos;t be parsed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="374"/>
+ <location filename="profile.cpp" line="380"/>
<source>invalid priority %1</source>
<translation>无效的优先级 %1</translation>
</message>
<message>
- <location filename="profile.cpp" line="561"/>
+ <location filename="profile.cpp" line="568"/>
<source>failed to parse ini file (%1)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="589"/>
+ <location filename="profile.cpp" line="596"/>
<source>failed to parse ini file (%1): %2</source>
<translation>无法解析 Ini 文件 (%1): %2</translation>
</message>
<message>
- <location filename="profile.cpp" line="613"/>
- <location filename="profile.cpp" line="650"/>
+ <location filename="profile.cpp" line="620"/>
+ <location filename="profile.cpp" line="657"/>
<source>failed to modify &quot;%1&quot;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="678"/>
+ <location filename="profile.cpp" line="685"/>
<source>Delete savegames?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="679"/>
+ <location filename="profile.cpp" line="686"/>
<source>Do you want to delete local savegames? (If you select &quot;No&quot;, the save games will show up again if you re-enable local savegames)</source>
<translation type="unfinished"></translation>
</message>
@@ -4900,37 +5253,61 @@ p, li { white-space: pre-wrap; }
<translation>请输入配置文件的名称</translation>
</message>
<message>
- <location filename="profilesdialog.cpp" line="160"/>
+ <location filename="profilesdialog.cpp" line="162"/>
<source>failed to copy profile: %1</source>
<translation>无法复制配置文件: %1</translation>
</message>
<message>
- <location filename="profilesdialog.cpp" line="167"/>
+ <location filename="profilesdialog.cpp" line="165"/>
+ <source>Invalid name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="profilesdialog.cpp" line="165"/>
+ <source>Invalid profile name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="profilesdialog.cpp" line="172"/>
<source>Confirm</source>
<translation>确认</translation>
</message>
<message>
- <location filename="profilesdialog.cpp" line="167"/>
+ <location filename="profilesdialog.cpp" line="172"/>
+ <source>Are you sure you want to remove this profile (including local savegames if any)?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="profilesdialog.cpp" line="182"/>
+ <source>Profile broken</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="profilesdialog.cpp" line="183"/>
+ <source>This profile you&apos;re about to delete seems to be broken or the path is invalid. I&apos;m about to delete the following folder: &quot;%1&quot;. Proceed?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<source>Are you sure you want to remove this profile?</source>
- <translation>确定要移除这个配置吗?</translation>
+ <translation type="obsolete">确定要移除这个配置吗?</translation>
</message>
<message>
- <location filename="profilesdialog.cpp" line="196"/>
+ <location filename="profilesdialog.cpp" line="215"/>
<source>Rename Profile</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profilesdialog.cpp" line="196"/>
+ <location filename="profilesdialog.cpp" line="215"/>
<source>New Name</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profilesdialog.cpp" line="233"/>
+ <location filename="profilesdialog.cpp" line="252"/>
<source>failed to change archive invalidation state: %1</source>
<translation>无法改变档案无效化状态: %1</translation>
</message>
<message>
- <location filename="profilesdialog.cpp" line="270"/>
+ <location filename="profilesdialog.cpp" line="289"/>
<source>failed to determine if invalidation is active: %1</source>
<translation>无法确定无效化是否被激活: %1</translation>
</message>
@@ -4938,20 +5315,20 @@ p, li { white-space: pre-wrap; }
<context>
<name>QObject</name>
<message>
- <location filename="categories.cpp" line="133"/>
+ <location filename="categories.cpp" line="141"/>
<source>Failed to save custom categories</source>
<translation>无法保存自定义类别</translation>
</message>
<message>
- <location filename="categories.cpp" line="210"/>
- <location filename="categories.cpp" line="245"/>
- <location filename="categories.cpp" line="255"/>
- <location filename="categories.cpp" line="265"/>
+ <location filename="categories.cpp" line="218"/>
+ <location filename="categories.cpp" line="253"/>
+ <location filename="categories.cpp" line="263"/>
+ <location filename="categories.cpp" line="273"/>
<source>invalid index %1</source>
<translation>无效的索引 %1</translation>
</message>
<message>
- <location filename="categories.cpp" line="276"/>
+ <location filename="categories.cpp" line="284"/>
<source>invalid category id %1</source>
<translation>无效的类别 %1</translation>
</message>
@@ -4967,7 +5344,7 @@ p, li { white-space: pre-wrap; }
<translation>无法确认帐户名称</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="63"/>
+ <location filename="installationmanager.cpp" line="64"/>
<location filename="selfupdater.cpp" line="52"/>
<source>invalid 7-zip32.dll: %1</source>
<translation>无效的 7-zip32.dll: %1</translation>
@@ -5037,12 +5414,12 @@ p, li { white-space: pre-wrap; }
<translation>无法设置代理DLL加载</translation>
</message>
<message>
- <location filename="profile.cpp" line="93"/>
+ <location filename="profile.cpp" line="96"/>
<source>&quot;%1&quot; is missing</source>
<translation>&quot;%1&quot; 缺失</translation>
</message>
<message>
- <location filename="main.cpp" line="134"/>
+ <location filename="main.cpp" line="139"/>
<source>Permissions required</source>
<translation>需要权限</translation>
</message>
@@ -5051,8 +5428,8 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">当前的用户帐户没有运行 Mod Organizer 所需的访问权限,必要的修改将会自动进行 (MO 的目录将会为当前用户帐户而变得可写),您将被请求使用管理员权限执行 &quot;mo_helper.exe&quot;。</translation>
</message>
<message>
- <location filename="main.cpp" line="234"/>
- <location filename="main.cpp" line="272"/>
+ <location filename="main.cpp" line="231"/>
+ <location filename="main.cpp" line="269"/>
<source>Woops</source>
<translation>糟糕</translation>
</message>
@@ -5061,61 +5438,66 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">Mod Organizer 崩溃了!要生成诊断文件吗?如果您发送这个文件到我的邮箱 (sherb@gmx.net) 里的话,这个 Bug 会很有可能被修复。</translation>
</message>
<message>
- <location filename="main.cpp" line="135"/>
- <source>The current user account doesn&apos;t have the required access rights to run Mod Organizer. The neccessary changes can be made automatically (the MO directory will be made writable for the current user account). You will be asked to run &quot;helper.exe&quot; with administrative rights).</source>
+ <location filename="main.cpp" line="140"/>
+ <source>The current user account doesn&apos;t have the required access rights to run Mod Organizer. The neccessary changes can be made automatically (the MO directory will be made writable for the current user account). You will be asked to run &quot;helper.exe&quot; with administrative rights.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="main.cpp" line="235"/>
+ <location filename="main.cpp" line="232"/>
<source>ModOrganizer has crashed! Should a diagnostic file be created? If you send me this file (%1) to sherb@gmx.net, the bug is a lot more likely to be fixed. Please include a short description of what you were doing when the crash happened</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="main.cpp" line="273"/>
+ <location filename="main.cpp" line="270"/>
<source>ModOrganizer has crashed! Unfortunately I was not able to write a diagnostic file: %1</source>
<translation>Mod Organizer 崩溃了!遗憾的是,我无法生成诊断文件: %1</translation>
</message>
<message>
- <location filename="main.cpp" line="335"/>
- <location filename="settings.cpp" line="462"/>
+ <location filename="main.cpp" line="332"/>
+ <location filename="settings.cpp" line="542"/>
<source>Mod Organizer</source>
<translation>Mod Organizer</translation>
</message>
<message>
- <location filename="main.cpp" line="335"/>
+ <location filename="main.cpp" line="332"/>
<source>An instance of Mod Organizer is already running</source>
<translation>Mod Organizer 的一个实例正在运行</translation>
</message>
<message>
- <location filename="main.cpp" line="357"/>
+ <location filename="main.cpp" line="354"/>
<source>No game identified in &quot;%1&quot;. The directory is required to contain the game binary and its launcher.</source>
<translation>&quot;%1&quot; 中未检测到游戏。请确保该路径中包含游戏执行程序以及对应的 Launcher 文件。</translation>
</message>
<message>
- <location filename="main.cpp" line="360"/>
- <location filename="main.cpp" line="389"/>
+ <location filename="main.cpp" line="357"/>
+ <location filename="main.cpp" line="386"/>
<source>Please select the game to manage</source>
<translation>请选择想要管理的游戏</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="752"/>
+ <location filename="main.cpp" line="412"/>
+ <source>Please select the game edition you have (MO can&apos;t start the game correctly if this is set incorrectly!)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="782"/>
<source>Please use &quot;Help&quot; from the toolbar to get usage instructions to all elements</source>
<translation>请使用工具栏上的“帮助”来获得所有元素的使用说明</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1470"/>
- <location filename="mainwindow.cpp" line="3723"/>
+ <location filename="mainwindow.cpp" line="1610"/>
+ <location filename="mainwindow.cpp" line="4216"/>
<source>&lt;Manage...&gt;</source>
<translation>&lt;管理...&gt;</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1488"/>
+ <location filename="mainwindow.cpp" line="1628"/>
<source>failed to parse profile %1: %2</source>
<translation>无法解析配置文件 %1: %2</translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="310"/>
- <location filename="profile.cpp" line="228"/>
+ <location filename="pluginlist.cpp" line="335"/>
+ <location filename="profile.cpp" line="233"/>
<source>failed to find &quot;%1&quot;</source>
<translation>未能找到 &quot;%1&quot;</translation>
</message>
@@ -5124,17 +5506,17 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">编码错误,请向作者汇报此 Bug 并且附上 mo_interface.log 文件!</translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="467"/>
+ <location filename="pluginlist.cpp" line="491"/>
<source>failed to access %1</source>
<translation>无法访问 %1</translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="481"/>
+ <location filename="pluginlist.cpp" line="505"/>
<source>failed to set file time %1</source>
<translation>无法设置文件时间 %1</translation>
</message>
<message>
- <location filename="profile.cpp" line="67"/>
+ <location filename="profile.cpp" line="70"/>
<source>failed to create %1</source>
<translation>无法创建 %1</translation>
</message>
@@ -5170,12 +5552,12 @@ p, li { white-space: pre-wrap; }
<translation>无法打开 %1</translation>
</message>
<message>
- <location filename="settings.cpp" line="469"/>
+ <location filename="settings.cpp" line="549"/>
<source>Script Extender</source>
<translation>脚本拓展</translation>
</message>
<message>
- <location filename="settings.cpp" line="476"/>
+ <location filename="settings.cpp" line="556"/>
<source>Proxy DLL</source>
<translation>代理DLL</translation>
</message>
@@ -5200,22 +5582,22 @@ Start elevated anyway? (you will be asked if you want to allow ModOrganizer.exe
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="spawn.cpp" line="128"/>
+ <location filename="spawn.cpp" line="129"/>
<source>failed to spawn &quot;%1&quot;: %2</source>
<translation>无法生成 &quot;%1&quot;: %2</translation>
</message>
<message>
- <location filename="spawn.cpp" line="137"/>
+ <location filename="spawn.cpp" line="138"/>
<source>&quot;%1&quot; doesn&apos;t exist</source>
<translation>&quot;%1&quot; 不存在</translation>
</message>
<message>
- <location filename="spawn.cpp" line="144"/>
+ <location filename="spawn.cpp" line="145"/>
<source>failed to inject dll into &quot;%1&quot;: %2</source>
<translation>无法注入 dll 到 &quot;%1&quot;: %2</translation>
</message>
<message>
- <location filename="spawn.cpp" line="152"/>
+ <location filename="spawn.cpp" line="153"/>
<source>failed to run &quot;%1&quot;</source>
<translation>无法运行 &quot;%1&quot;</translation>
</message>
@@ -5276,6 +5658,11 @@ Start elevated anyway? (you will be asked if you want to allow ModOrganizer.exe
<source>invalid game type %1</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <location filename="safewritefile.cpp" line="32"/>
+ <source>failed to open temporary file</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>QueryOverwriteDialog</name>
@@ -5318,9 +5705,8 @@ Start elevated anyway? (you will be asked if you want to allow ModOrganizer.exe
<context>
<name>QuestionBoxMemory</name>
<message>
- <location filename="questionboxmemory.ui" line="86"/>
<source>Remember selection</source>
- <translation>记住我的选择</translation>
+ <translation type="obsolete">记住我的选择</translation>
</message>
</context>
<context>
@@ -5428,9 +5814,9 @@ Start elevated anyway? (you will be asked if you want to allow ModOrganizer.exe
</message>
<message>
<location filename="selfupdater.cpp" line="116"/>
- <location filename="selfupdater.cpp" line="140"/>
- <location filename="selfupdater.cpp" line="269"/>
- <location filename="selfupdater.cpp" line="417"/>
+ <location filename="selfupdater.cpp" line="139"/>
+ <location filename="selfupdater.cpp" line="268"/>
+ <location filename="selfupdater.cpp" line="415"/>
<source>Update</source>
<translation>更新</translation>
</message>
@@ -5440,57 +5826,57 @@ Start elevated anyway? (you will be asked if you want to allow ModOrganizer.exe
<translation>有可用的更新 (最新版本: %1),您想要安装它吗?</translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="141"/>
+ <location filename="selfupdater.cpp" line="140"/>
<source>Download in progress</source>
<translation>正在下载</translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="196"/>
+ <location filename="selfupdater.cpp" line="195"/>
<source>Download failed: %1</source>
<translation>下载失败: %1</translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="207"/>
+ <location filename="selfupdater.cpp" line="206"/>
<source>Failed to install update: %1</source>
<translation>无法安装更新: %1</translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="228"/>
+ <location filename="selfupdater.cpp" line="227"/>
<source>failed to open archive &quot;%1&quot;: %2</source>
<translation>无法打开压缩包 &quot;%1&quot;: %2</translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="251"/>
+ <location filename="selfupdater.cpp" line="250"/>
<source>failed to move outdated files: %1. Please update manually.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="269"/>
+ <location filename="selfupdater.cpp" line="268"/>
<source>Update installed, Mod Organizer will now be restarted.</source>
<translation>更新完成,Mod Organizer 现在将重新启动。</translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="297"/>
+ <location filename="selfupdater.cpp" line="296"/>
<source>Error</source>
<translation>错误</translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="353"/>
+ <location filename="selfupdater.cpp" line="351"/>
<source>Failed to parse response. Please report this as a bug and include the file mo_interface.log.</source>
<translation>解析响应时发生错误。请回报此 Bug 并附上 mo_interface.log!</translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="418"/>
+ <location filename="selfupdater.cpp" line="416"/>
<source>No incremental update available for this version, the complete package needs to be downloaded (%1 kB)</source>
<translation>没有可用于此版本的更新文件,需要下载完整的安装包 (%1 KB)</translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="427"/>
+ <location filename="selfupdater.cpp" line="425"/>
<source>no file for update found. Please update manually.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="461"/>
+ <location filename="selfupdater.cpp" line="460"/>
<source>No download server available. Please try again later.</source>
<translation type="unfinished">没有可用的下载服务器,请稍后再尝试下载。</translation>
</message>
@@ -5499,7 +5885,7 @@ Start elevated anyway? (you will be asked if you want to allow ModOrganizer.exe
<translation type="obsolete">未找到更新文件</translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="441"/>
+ <location filename="selfupdater.cpp" line="440"/>
<source>Failed to retrieve update information: %1</source>
<translation>无法检索更新信息: %1</translation>
</message>
@@ -5507,26 +5893,22 @@ Start elevated anyway? (you will be asked if you want to allow ModOrganizer.exe
<context>
<name>Settings</name>
<message>
- <location filename="settings.cpp" line="278"/>
- <source>setting for invalid plugin &quot;%1&quot; requested</source>
- <translation type="unfinished"></translation>
+ <source>Administrative rights required to change this.</source>
+ <translation type="obsolete">需要管理员的权限来更改这个。</translation>
</message>
<message>
- <location filename="settings.cpp" line="282"/>
- <source>invalid setting &quot;%1&quot; requested for plugin &quot;%2&quot;</source>
+ <location filename="settings.cpp" line="320"/>
+ <location filename="settings.cpp" line="339"/>
+ <source>attempt to store setting for unknown plugin &quot;%1&quot;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Administrative rights required to change this.</source>
- <translation type="obsolete">需要管理员的权限来更改这个。</translation>
- </message>
- <message>
- <location filename="settings.cpp" line="573"/>
+ <location filename="settings.cpp" line="660"/>
<source>Confirm</source>
<translation>确认</translation>
</message>
<message>
- <location filename="settings.cpp" line="573"/>
+ <location filename="settings.cpp" line="660"/>
<source>Changing the mod directory affects all your profiles! Mods not present (or named differently) in the new location will be disabled in all profiles. There is no way to undo this unless you backed up your profiles manually. Proceed?</source>
<translation>修改 Mod 目录将会影响您的配置!新目录中不存在 (或者名称不同) 的 Mod 将在所有配置中被禁止掉。此操作无法撤销,所以执行此操作前建议先备份下自己的配置。立即执行?</translation>
</message>
@@ -5675,47 +6057,57 @@ p, li { white-space: pre-wrap; }
<translation>配置 Mod 类别</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="321"/>
+ <location filename="settingsdialog.ui" line="318"/>
<source>Disable automatic internet features</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="324"/>
+ <location filename="settingsdialog.ui" line="321"/>
<source>Disable automatic internet features. This does not affect features that are explicitly invoked by the user (like checking mods for updates, endorsing, opening the web browser)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="327"/>
+ <location filename="settingsdialog.ui" line="324"/>
<source>Offline Mode</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="334"/>
+ <location filename="settingsdialog.ui" line="331"/>
<source>Use a proxy for network connections.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="337"/>
+ <location filename="settingsdialog.ui" line="334"/>
<source>Use a proxy for network connections. This uses the system-wide settings which can be configured in Internet Explorer. Please note that MO will start up a few seconds slower on some systems when using a proxy.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="340"/>
+ <location filename="settingsdialog.ui" line="337"/>
<source>Use HTTP Proxy (Uses System Settings)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="351"/>
- <source>Known Servers (Dynamically updated every download)</source>
+ <location filename="settingsdialog.ui" line="346"/>
+ <source>Associate with &quot;Download with manager&quot; links</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="settingsdialog.ui" line="375"/>
+ <source>Known Servers (updated on download)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="372"/>
+ <location filename="settingsdialog.ui" line="396"/>
<source>Preferred Servers (Drag &amp; Drop)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="594"/>
+ <location filename="settingsdialog.ui" line="536"/>
+ <source>Blacklisted Plugins (use &lt;del&gt; to remove):</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="settingsdialog.ui" line="632"/>
<source>Mod Organizer needs a dll to be injected into the game so all mods are visible to it.
There are several means to do this:
*Mod Organizer* (default) In this mode the Mod Organizer itself injects the dll. The disadvantage is that you always have to start the game through MO or a link created by it.
@@ -5784,12 +6176,12 @@ p, li { white-space: pre-wrap; }
<translation>自动登录</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="285"/>
+ <location filename="settingsdialog.ui" line="282"/>
<source>Username</source>
<translation>账号</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="299"/>
+ <location filename="settingsdialog.ui" line="296"/>
<source>Password</source>
<translation>密码</translation>
</message>
@@ -5806,52 +6198,52 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">首选外部浏览器</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="407"/>
+ <location filename="settingsdialog.ui" line="431"/>
<source>Plugins</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="427"/>
+ <location filename="settingsdialog.ui" line="453"/>
<source>Author:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="441"/>
+ <location filename="settingsdialog.ui" line="467"/>
<source>Version:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="455"/>
+ <location filename="settingsdialog.ui" line="481"/>
<source>Description:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="493"/>
+ <location filename="settingsdialog.ui" line="519"/>
<source>Key</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="498"/>
+ <location filename="settingsdialog.ui" line="524"/>
<source>Value</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="509"/>
+ <location filename="settingsdialog.ui" line="547"/>
<source>Workarounds</source>
<translation>解决方案</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="517"/>
+ <location filename="settingsdialog.ui" line="555"/>
<source>Steam App ID</source>
<translation>Steam App ID</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="537"/>
+ <location filename="settingsdialog.ui" line="575"/>
<source>The Steam AppID for your game</source>
<translation>您游戏的 Steam AppID</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="540"/>
+ <location filename="settingsdialog.ui" line="578"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
@@ -5878,12 +6270,12 @@ p, li { white-space: pre-wrap; }
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:9pt;&quot;&gt;其中 22380 就是您要找的 ID。&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="571"/>
+ <location filename="settingsdialog.ui" line="609"/>
<source>Load Mechanism</source>
<translation>加载机制</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="591"/>
+ <location filename="settingsdialog.ui" line="629"/>
<source>Select loading mechanism. See help for details.</source>
<translation>选择加载机制,使用帮助查看更多细节。</translation>
</message>
@@ -5908,17 +6300,17 @@ p, li { white-space: pre-wrap; }
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:9pt; font-weight:600;&quot;&gt;代理DLL&lt;/span&gt;&lt;span style=&quot; font-size:9pt;&quot;&gt; 在这种模式下,MO 将替换一个游戏的 dll 来加载 MO (当然原来的 dll),这仅适用于 Steam 版本的游戏,并且只在 Skyrim 上做过测试。请只在其它加载机制不能工作的情况下才使用它。&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="611"/>
+ <location filename="settingsdialog.ui" line="649"/>
<source>NMM Version</source>
<translation>NMM 版本</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="631"/>
+ <location filename="settingsdialog.ui" line="669"/>
<source>The Version of Nexus Mod Manager to impersonate.</source>
<translation>想要模拟的 NMM 版本号。</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="634"/>
+ <location filename="settingsdialog.ui" line="672"/>
<source>Mod Organizer uses an API provided by the Nexus to provide features like checking for updates and downloading files. Unfortunately this API has not been made available officially to third party tools like MO so we have to impersonate the Nexus Mod Manager to be allowed in.
On top of this Nexus has used the client identification to lock out outdated versions of NMM to force users to update. This means that MO also needs to impersonate the new version of NMM even if MO doesn&apos;t need an update. Therefore you can configure the version to identify as here.
Please note that MO does identify itself as MO to the webserver, it&apos;s not lying about what it is. It is merely adding a &quot;compatible&quot; NMM version to the user agent.
@@ -5931,7 +6323,7 @@ tl;dr-version: If Nexus-features don&apos;t work, insert the current version num
变更版本号: 如果N网功能不正常了,那么请在这里输入 NMM 的当前版本号并重试一下。</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="719"/>
+ <location filename="settingsdialog.ui" line="757"/>
<source>These are workarounds for problems with Mod Organizer. Please make sure you read the help text before changing anything here.</source>
<translation type="unfinished"></translation>
</message>
@@ -5944,48 +6336,48 @@ tl;dr-version: If Nexus-features don&apos;t work, insert the current version num
<translation type="obsolete">例如: 0.33.1</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="656"/>
+ <location filename="settingsdialog.ui" line="694"/>
<source>Enforces that inactive ESPs and ESMs are never loaded.</source>
<translation>强制执行,未激活的 ESP 和 ESM 将不会被加载。</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="659"/>
+ <location filename="settingsdialog.ui" line="697"/>
<source>It seems that the Games occasionally load ESP or ESM files even if they haven&apos;t been activated as plugins.
I don&apos;t yet know what the circumstances are, but user reports imply it is in some cases unwanted. If this is checked, ESPs and ESMs not checked in the List are invisible to the game and can not be loaded.</source>
<translation>看来,游戏偶尔会加载一些没有被激活成插件的 ESP 或 ESM 文件。
我还尚不知道它在什么情况下会这样,但是有用户报告说它在某些情况下是很不必要的。如果这个选项被选中,那么在列表中没有被勾选的 ESP 和 ESM 将不会在游戏中出现,并且也不会被载入。</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="663"/>
+ <location filename="settingsdialog.ui" line="701"/>
<source>Hide inactive ESPs/ESMs</source>
<translation>隐藏未激活的 ESP 或 ESM</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="670"/>
+ <location filename="settingsdialog.ui" line="708"/>
<source>If checked, files (i.e. esps, esms and bsas) belonging to the core game can not be disabled in the UI. (default: on)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="673"/>
+ <location filename="settingsdialog.ui" line="711"/>
<source>If checked, files (i.e. esps, esms and bsas) belonging to the core game can not be disabled in the UI. (default: on)
Uncheck this if you want to use Mod Organizer with total conversions (like Nehrim) but be aware that the game will crash if required files are not enabled.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="677"/>
+ <location filename="settingsdialog.ui" line="715"/>
<source>Force-enable game files</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="687"/>
- <location filename="settingsdialog.ui" line="691"/>
+ <location filename="settingsdialog.ui" line="725"/>
+ <location filename="settingsdialog.ui" line="729"/>
<source>For Skyrim, this can be used instead of Archive Invalidation. It should make AI redundant for all Profiles.
For the other games this is not a sufficient replacement for AI!</source>
<translation>对于天际,这个可以用来取代档案无效化,它将会使档案无效化对所有配置都变得多余。
但是对于其它游戏,这并不是一个很好的替代品!</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="695"/>
+ <location filename="settingsdialog.ui" line="733"/>
<source>Back-date BSAs</source>
<translation>重置 BSA 文件修改日期</translation>
</message>
@@ -5994,27 +6386,27 @@ For the other games this is not a sufficient replacement for AI!</source>
<translation type="obsolete">这些是 Mod Organizer 的问题解决方案。它们通常是不必修改的,请确保在您变更了这里的任何东西之前已经读过了帮助文档。</translation>
</message>
<message>
- <location filename="settingsdialog.cpp" line="89"/>
+ <location filename="settingsdialog.cpp" line="95"/>
<source>Select download directory</source>
<translation>选择下载目录</translation>
</message>
<message>
- <location filename="settingsdialog.cpp" line="97"/>
+ <location filename="settingsdialog.cpp" line="103"/>
<source>Select mod directory</source>
<translation>选择 Mod 目录</translation>
</message>
<message>
- <location filename="settingsdialog.cpp" line="105"/>
+ <location filename="settingsdialog.cpp" line="111"/>
<source>Select cache directory</source>
<translation>选择缓存目录</translation>
</message>
<message>
- <location filename="settingsdialog.cpp" line="113"/>
+ <location filename="settingsdialog.cpp" line="119"/>
<source>Confirm?</source>
<translation>确认?</translation>
</message>
<message>
- <location filename="settingsdialog.cpp" line="114"/>
+ <location filename="settingsdialog.cpp" line="120"/>
<source>This will make all dialogs show up again where you checked the &quot;Remember selection&quot;-box. Continue?</source>
<translation>此操作将导致之前勾选的“记住我的选项”询问窗口再次出现,确定要重置对话框?</translation>
</message>
@@ -6139,9 +6531,13 @@ For the other games this is not a sufficient replacement for AI!</source>
<context>
<name>TransferSavesDialog</name>
<message>
- <location filename="transfersavesdialog.ui" line="14"/>
<source>Dialog</source>
- <translation type="unfinished">对话框</translation>
+ <translation type="obsolete">对话框</translation>
+ </message>
+ <message>
+ <location filename="transfersavesdialog.ui" line="14"/>
+ <source>Transfer Savegames</source>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="transfersavesdialog.ui" line="22"/>
@@ -6161,8 +6557,16 @@ On Windows Vista/Windows 7:
C:\Users\[UserName]\Documents\My Games\Skyrim\Saves
On Windows XP:
- C:\Documents and Settings[UserName]\My Documents\My Games\Skyrim\Saves
+ C:\Documents and Settings\[UserName]\My Documents\My Games\Skyrim\Saves
</source>
+ <oldsource>This is a list of characters in the global location.
+
+On Windows Vista/Windows 7:
+ C:\Users\[UserName]\Documents\My Games\Skyrim\Saves
+
+On Windows XP:
+ C:\Documents and Settings[UserName]\My Documents\My Games\Skyrim\Saves
+</oldsource>
<translation type="unfinished"></translation>
</message>
<message>
diff --git a/src/organizer_zh_TW.qm b/src/organizer_zh_TW.qm
deleted file mode 100644
index 73a06572..00000000
--- a/src/organizer_zh_TW.qm
+++ /dev/null
Binary files differ
diff --git a/src/organizer_zh_TW.ts b/src/organizer_zh_TW.ts
index c6868f95..0ae46a41 100644
--- a/src/organizer_zh_TW.ts
+++ b/src/organizer_zh_TW.ts
@@ -2,6 +2,50 @@
<!DOCTYPE TS>
<TS version="2.0" language="zh_TW">
<context>
+ <name>AboutDialog</name>
+ <message>
+ <location filename="aboutdialog.ui" line="14"/>
+ <location filename="aboutdialog.ui" line="53"/>
+ <source>About</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="aboutdialog.ui" line="66"/>
+ <source>Revision:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="aboutdialog.ui" line="104"/>
+ <source>Used Software</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="aboutdialog.ui" line="117"/>
+ <source>Credits</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="aboutdialog.ui" line="123"/>
+ <source>Translators</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="aboutdialog.ui" line="189"/>
+ <source>Others</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="aboutdialog.ui" line="266"/>
+ <source>Close</source>
+ <translation type="unfinished">關閉</translation>
+ </message>
+ <message>
+ <location filename="aboutdialog.cpp" line="81"/>
+ <source>No license</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>ActivateModsDialog</name>
<message>
<location filename="activatemodsdialog.ui" line="14"/>
@@ -240,25 +284,30 @@ p, li { white-space: pre-wrap; }
<context>
<name>DownloadList</name>
<message>
- <location filename="downloadlist.cpp" line="63"/>
+ <location filename="downloadlist.cpp" line="64"/>
<source>Name</source>
<translation>名稱</translation>
</message>
<message>
- <location filename="downloadlist.cpp" line="64"/>
+ <location filename="downloadlist.cpp" line="65"/>
<source>Filetime</source>
<translation>檔案時間</translation>
</message>
<message>
- <location filename="downloadlist.cpp" line="65"/>
+ <location filename="downloadlist.cpp" line="66"/>
<source>Done</source>
<translation type="unfinished">完成</translation>
</message>
<message>
- <location filename="downloadlist.cpp" line="79"/>
+ <location filename="downloadlist.cpp" line="82"/>
<source>Information missing, please select &quot;Query Info&quot; from the context menu to re-retrieve.</source>
<translation>訊息丟失,請在右鍵菜單裡選擇“查詢訊息”來重新檢索。</translation>
</message>
+ <message>
+ <location filename="downloadlist.cpp" line="89"/>
+ <source>pending download</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>DownloadListWidget</name>
@@ -269,16 +318,6 @@ p, li { white-space: pre-wrap; }
<translation>占位符</translation>
</message>
<message>
- <location filename="downloadlistwidget.ui" line="81"/>
- <source>0</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="downloadlistwidget.ui" line="88"/>
- <source>KB</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<location filename="downloadlistwidget.ui" line="99"/>
<location filename="downloadlistwidget.cpp" line="145"/>
<location filename="downloadlistwidget.cpp" line="147"/>
@@ -321,120 +360,135 @@ p, li { white-space: pre-wrap; }
<context>
<name>DownloadListWidgetCompactDelegate</name>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="130"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="126"/>
<source>Installed</source>
<translation>已安裝</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="133"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="129"/>
<source>Uninstalled</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="136"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="132"/>
<source>Done</source>
<translation>完成</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="215"/>
- <location filename="downloadlistwidgetcompact.cpp" line="224"/>
- <location filename="downloadlistwidgetcompact.cpp" line="233"/>
- <location filename="downloadlistwidgetcompact.cpp" line="242"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="241"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="250"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="259"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="268"/>
<source>Are you sure?</source>
<translation>確定?</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="216"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="242"/>
<source>This will remove all finished downloads from this list and from disk.</source>
<translation>這將會從列表和磁碟中移除所有已完成的下載。</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="225"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="251"/>
<source>This will remove all installed downloads from this list and from disk.</source>
<translation>這將會從列表和磁碟中移除所有已安裝的下載項目。</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="234"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="260"/>
<source>This will permanently remove all finished downloads from this list (but NOT from disk).</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="243"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="269"/>
<source>This will permanently remove all installed downloads from this list (but NOT from disk).</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="269"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="298"/>
<source>Install</source>
<translation>安裝</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="271"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="300"/>
<source>Query Info</source>
<translation>查詢訊息</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="273"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="302"/>
<source>Delete</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="274"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="304"/>
+ <source>Un-Hide</source>
+ <translation type="unfinished">取消隱藏</translation>
+ </message>
+ <message>
+ <location filename="downloadlistwidgetcompact.cpp" line="306"/>
<source>Remove from View</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="279"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="312"/>
<source>Remove</source>
<translation>移除</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="276"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="309"/>
<source>Cancel</source>
<translation>取消</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="120"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="88"/>
+ <source>&lt; mod %1 file %2 &gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="downloadlistwidgetcompact.cpp" line="93"/>
+ <source>Pending</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="downloadlistwidgetcompact.cpp" line="116"/>
<source>Paused</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="123"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="119"/>
<source>Fetching Info 1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="125"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="121"/>
<source>Fetching Info 2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="277"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="310"/>
<source>Pause</source>
<translation>暫停</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="280"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="313"/>
<source>Resume</source>
<translation>繼續</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="284"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="318"/>
<source>Delete Installed...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="285"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="319"/>
<source>Delete All...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="287"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="322"/>
<source>Remove Installed...</source>
<translation>移除已安裝的項目...</translation>
</message>
<message>
- <location filename="downloadlistwidgetcompact.cpp" line="288"/>
+ <location filename="downloadlistwidgetcompact.cpp" line="323"/>
<source>Remove All...</source>
<translation>移除所有...</translation>
</message>
@@ -442,64 +496,79 @@ p, li { white-space: pre-wrap; }
<context>
<name>DownloadListWidgetDelegate</name>
<message>
- <location filename="downloadlistwidget.cpp" line="228"/>
- <location filename="downloadlistwidget.cpp" line="237"/>
- <location filename="downloadlistwidget.cpp" line="246"/>
- <location filename="downloadlistwidget.cpp" line="255"/>
+ <location filename="downloadlistwidget.cpp" line="253"/>
+ <location filename="downloadlistwidget.cpp" line="262"/>
+ <location filename="downloadlistwidget.cpp" line="271"/>
+ <location filename="downloadlistwidget.cpp" line="280"/>
<source>Are you sure?</source>
<translation>確定?</translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="229"/>
+ <location filename="downloadlistwidget.cpp" line="254"/>
<source>This will remove all finished downloads from this list and from disk.</source>
<translation>這將會從列表和磁碟中移除所有已完成的下載。</translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="238"/>
+ <location filename="downloadlistwidget.cpp" line="263"/>
<source>This will remove all installed downloads from this list and from disk.</source>
<translation>這將會從列表和磁碟中移除所有已安裝的下載項目。</translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="247"/>
+ <location filename="downloadlistwidget.cpp" line="272"/>
<source>This will remove all finished downloads from this list (but NOT from disk).</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="256"/>
+ <location filename="downloadlistwidget.cpp" line="281"/>
<source>This will remove all installed downloads from this list (but NOT from disk).</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="281"/>
+ <location filename="downloadlistwidget.cpp" line="309"/>
<source>Install</source>
<translation>安裝</translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="283"/>
+ <location filename="downloadlistwidget.cpp" line="311"/>
<source>Query Info</source>
<translation>查詢訊息</translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="285"/>
+ <location filename="downloadlistwidget.cpp" line="313"/>
<source>Delete</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="286"/>
+ <location filename="downloadlistwidget.cpp" line="315"/>
+ <source>Un-Hide</source>
+ <translation type="unfinished">取消隱藏</translation>
+ </message>
+ <message>
+ <location filename="downloadlistwidget.cpp" line="317"/>
<source>Remove from View</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="291"/>
+ <location filename="downloadlistwidget.cpp" line="323"/>
<source>Remove</source>
<translation>移除</translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="288"/>
+ <location filename="downloadlistwidget.cpp" line="320"/>
<source>Cancel</source>
<translation>取消</translation>
</message>
<message>
+ <location filename="downloadlistwidget.cpp" line="88"/>
+ <source>&lt; mod %1 file %2 &gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="downloadlistwidget.cpp" line="91"/>
+ <source>Pending</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<location filename="downloadlistwidget.cpp" line="118"/>
<source>Fetching Info 1</source>
<translation type="unfinished"></translation>
@@ -510,32 +579,32 @@ p, li { white-space: pre-wrap; }
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="289"/>
+ <location filename="downloadlistwidget.cpp" line="321"/>
<source>Pause</source>
<translation>暫停</translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="292"/>
+ <location filename="downloadlistwidget.cpp" line="324"/>
<source>Resume</source>
<translation>繼續</translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="296"/>
+ <location filename="downloadlistwidget.cpp" line="329"/>
<source>Delete Installed...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="297"/>
+ <location filename="downloadlistwidget.cpp" line="330"/>
<source>Delete All...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="299"/>
+ <location filename="downloadlistwidget.cpp" line="333"/>
<source>Remove Installed...</source>
<translation>移除已安裝的項目...</translation>
</message>
<message>
- <location filename="downloadlistwidget.cpp" line="300"/>
+ <location filename="downloadlistwidget.cpp" line="334"/>
<source>Remove All...</source>
<translation>移除所有...</translation>
</message>
@@ -543,67 +612,81 @@ p, li { white-space: pre-wrap; }
<context>
<name>DownloadManager</name>
<message>
- <location filename="downloadmanager.cpp" line="125"/>
+ <location filename="downloadmanager.cpp" line="132"/>
<source>failed to rename &quot;%1&quot; to &quot;%2&quot;</source>
<translation>重新命名 &quot;%1 &quot;為 &quot;%2&quot; 時出錯</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="306"/>
+ <location filename="downloadmanager.cpp" line="342"/>
<source>Download again?</source>
<translation>重新下載?</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="306"/>
+ <location filename="downloadmanager.cpp" line="342"/>
<source>A file with the same name has already been downloaded. Do you want to download it again? The new file will receive a different name.</source>
<translation>已存在同名檔案。您確定要重新下載?新檔案將使用不同的檔案名。</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="336"/>
+ <location filename="downloadmanager.cpp" line="388"/>
<source>failed to download %1: could not open output file: %2</source>
<translation>下載 %1 失敗: 無法開啟輸出檔案: %2</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="366"/>
- <location filename="downloadmanager.cpp" line="585"/>
- <location filename="downloadmanager.cpp" line="595"/>
- <location filename="downloadmanager.cpp" line="604"/>
- <location filename="downloadmanager.cpp" line="614"/>
- <location filename="downloadmanager.cpp" line="624"/>
- <location filename="downloadmanager.cpp" line="634"/>
- <location filename="downloadmanager.cpp" line="645"/>
- <location filename="downloadmanager.cpp" line="654"/>
- <location filename="downloadmanager.cpp" line="664"/>
- <location filename="downloadmanager.cpp" line="679"/>
+ <location filename="downloadmanager.cpp" line="421"/>
+ <source>Wrong Game</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="downloadmanager.cpp" line="421"/>
+ <source>The download link is for a mod for &quot;%1&quot; but this instance of MO has been set up for &quot;%2&quot;.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="downloadmanager.cpp" line="439"/>
+ <location filename="downloadmanager.cpp" line="506"/>
+ <location filename="downloadmanager.cpp" line="682"/>
+ <location filename="downloadmanager.cpp" line="691"/>
+ <location filename="downloadmanager.cpp" line="701"/>
+ <location filename="downloadmanager.cpp" line="710"/>
+ <location filename="downloadmanager.cpp" line="724"/>
+ <location filename="downloadmanager.cpp" line="734"/>
+ <location filename="downloadmanager.cpp" line="744"/>
+ <location filename="downloadmanager.cpp" line="754"/>
+ <location filename="downloadmanager.cpp" line="765"/>
+ <location filename="downloadmanager.cpp" line="773"/>
+ <location filename="downloadmanager.cpp" line="782"/>
+ <location filename="downloadmanager.cpp" line="792"/>
+ <location filename="downloadmanager.cpp" line="807"/>
<source>invalid index</source>
<translation>無效的索引</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="384"/>
+ <location filename="downloadmanager.cpp" line="457"/>
<source>failed to delete %1</source>
<translation>無法刪除 %1</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="390"/>
+ <location filename="downloadmanager.cpp" line="463"/>
<source>failed to delete meta file for %1</source>
<translation>無法從 %1 中刪除 mate 檔案</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="450"/>
- <location filename="downloadmanager.cpp" line="468"/>
- <location filename="downloadmanager.cpp" line="481"/>
- <location filename="downloadmanager.cpp" line="494"/>
- <location filename="downloadmanager.cpp" line="505"/>
- <location filename="downloadmanager.cpp" line="540"/>
+ <location filename="downloadmanager.cpp" line="539"/>
+ <location filename="downloadmanager.cpp" line="557"/>
+ <location filename="downloadmanager.cpp" line="570"/>
+ <location filename="downloadmanager.cpp" line="587"/>
+ <location filename="downloadmanager.cpp" line="598"/>
+ <location filename="downloadmanager.cpp" line="633"/>
<source>invalid index %1</source>
<translation>無效的索引 %1</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="557"/>
+ <location filename="downloadmanager.cpp" line="650"/>
<source>Please enter the nexus mod id</source>
<translation>請輸入N網 Mod ID</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="557"/>
+ <location filename="downloadmanager.cpp" line="650"/>
<source>Mod ID:</source>
<translation>Mod ID:</translation>
</message>
@@ -612,38 +695,43 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">無效的字順索引 %1</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="899"/>
+ <location filename="downloadmanager.cpp" line="1042"/>
<source>Information updated</source>
<translation>訊息已更新</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="901"/>
- <location filename="downloadmanager.cpp" line="915"/>
+ <location filename="downloadmanager.cpp" line="1044"/>
+ <location filename="downloadmanager.cpp" line="1058"/>
<source>No matching file found on Nexus! Maybe this file is no longer available or it was renamed?</source>
<translation>無法在N網上找到匹配的檔案!也許這個檔案已經不存在了或是它改名了?</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="903"/>
+ <location filename="downloadmanager.cpp" line="1046"/>
<source>No file on Nexus matches the selected file by name. Please manually choose the correct one.</source>
<translation>所選的檔案無法在N網上找到可匹配的項目,請手動選擇正確的一個。</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="1032"/>
+ <location filename="downloadmanager.cpp" line="1180"/>
<source>No download server available. Please try again later.</source>
<translation>沒有可用的下載伺服器,請稍後再嘗試下載。</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="1074"/>
+ <location filename="downloadmanager.cpp" line="1224"/>
<source>Failed to request file info from nexus: %1</source>
<translation>無法在N網上請求檔案訊息: %1</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="1097"/>
+ <location filename="downloadmanager.cpp" line="1249"/>
+ <source>Download failed. Server reported: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="downloadmanager.cpp" line="1251"/>
<source>Download failed: %1 (%2)</source>
<translation>下載失敗: %1 (%2)</translation>
</message>
<message>
- <location filename="downloadmanager.cpp" line="1174"/>
+ <location filename="downloadmanager.cpp" line="1331"/>
<source>failed to re-open %1</source>
<translation>無法重新開啟 %1</translation>
</message>
@@ -755,7 +843,7 @@ Right now the only case I know of where this needs to be overwritten is for the
<message>
<location filename="editexecutablesdialog.ui" line="169"/>
<location filename="editexecutablesdialog.ui" line="172"/>
- <location filename="editexecutablesdialog.cpp" line="220"/>
+ <location filename="editexecutablesdialog.cpp" line="258"/>
<source>If checked, MO will be closed once the specified executable is run.</source>
<translation>如果選中,那麼 MO 將在指定的程式運行後關閉。</translation>
</message>
@@ -772,7 +860,7 @@ Right now the only case I know of where this needs to be overwritten is for the
</message>
<message>
<location filename="editexecutablesdialog.ui" line="188"/>
- <location filename="editexecutablesdialog.cpp" line="190"/>
+ <location filename="editexecutablesdialog.cpp" line="196"/>
<source>Add</source>
<translation>添加</translation>
</message>
@@ -788,47 +876,64 @@ Right now the only case I know of where this needs to be overwritten is for the
<translation>移除</translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="119"/>
+ <location filename="editexecutablesdialog.ui" line="233"/>
+ <source>Close</source>
+ <translation type="unfinished">關閉</translation>
+ </message>
+ <message>
+ <location filename="editexecutablesdialog.cpp" line="125"/>
<source>Select a binary</source>
<translation>選擇一個可執行檔案</translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="119"/>
+ <location filename="editexecutablesdialog.cpp" line="125"/>
<source>Executable (%1)</source>
<translation>可執行程式 (%1)</translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="143"/>
+ <location filename="editexecutablesdialog.cpp" line="149"/>
<source>Java (32-bit) required</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="144"/>
+ <location filename="editexecutablesdialog.cpp" line="150"/>
<source>MO requires 32-bit java to run this application. If you already have it installed, select javaw.exe from that installation as the binary.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="160"/>
+ <location filename="editexecutablesdialog.cpp" line="166"/>
<source>Select a directory</source>
<translation>選擇一個目錄</translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="169"/>
+ <location filename="editexecutablesdialog.cpp" line="175"/>
<source>Confirm</source>
<translation>確認</translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="169"/>
+ <location filename="editexecutablesdialog.cpp" line="175"/>
<source>Really remove &quot;%1&quot; from executables?</source>
<translation>真的要从程式列表中移除 &quot;%1&quot; 吗?</translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="194"/>
+ <location filename="editexecutablesdialog.cpp" line="200"/>
<source>Modify</source>
<translation>更改</translation>
</message>
<message>
- <location filename="editexecutablesdialog.cpp" line="217"/>
+ <location filename="editexecutablesdialog.cpp" line="230"/>
+ <location filename="editexecutablesdialog.cpp" line="278"/>
+ <source>Save Changes?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="editexecutablesdialog.cpp" line="231"/>
+ <location filename="editexecutablesdialog.cpp" line="279"/>
+ <source>You made changes to the current executable, do you want to save them?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="editexecutablesdialog.cpp" line="255"/>
<source>MO must be kept running or this application will not work correctly.</source>
<translation>MO 必須持續運行,否則該程式將無法正常工作。</translation>
</message>
@@ -1092,12 +1197,12 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">mo_archive.dll 未加載: &quot;%1&quot;</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="97"/>
+ <location filename="installationmanager.cpp" line="98"/>
<source>Password required</source>
<translation>需要密碼</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="97"/>
+ <location filename="installationmanager.cpp" line="98"/>
<source>Password</source>
<translation>密碼</translation>
</message>
@@ -1119,8 +1224,8 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="installationmanager.cpp" line="164"/>
- <location filename="installationmanager.cpp" line="252"/>
- <location filename="installationmanager.cpp" line="530"/>
+ <location filename="installationmanager.cpp" line="248"/>
+ <location filename="installationmanager.cpp" line="529"/>
<source>Extracting files</source>
<translation>正在解壓檔案</translation>
</message>
@@ -1155,7 +1260,7 @@ Note: This installer will not be aware of other installed mods!</source>
<translation type="obsolete">安裝失敗 (錯誤代碼 %1)</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="624"/>
+ <location filename="installationmanager.cpp" line="609"/>
<source>File format &quot;%1&quot; not supported</source>
<translation>暫不支持檔案格式: &quot;%1&quot;</translation>
</message>
@@ -1164,32 +1269,32 @@ Note: This installer will not be aware of other installed mods!</source>
<translation type="obsolete">無法開啟壓縮包 &quot;%1&quot;: %2</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="75"/>
+ <location filename="installationmanager.cpp" line="76"/>
<source>archive.dll not loaded: &quot;%1&quot;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="443"/>
+ <location filename="installationmanager.cpp" line="439"/>
<source>failed to create backup</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="449"/>
+ <location filename="installationmanager.cpp" line="448"/>
<source>Mod Name</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="449"/>
+ <location filename="installationmanager.cpp" line="448"/>
<source>Name</source>
<translation type="unfinished">名稱</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="502"/>
+ <location filename="installationmanager.cpp" line="501"/>
<source>Invalid name</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="503"/>
+ <location filename="installationmanager.cpp" line="502"/>
<source>The name you entered is invalid, please enter a different one.</source>
<translation type="unfinished"></translation>
</message>
@@ -1206,52 +1311,52 @@ Note: This installer will not be aware of other installed mods!</source>
<translation type="obsolete">請安裝 NCC</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="750"/>
+ <location filename="installationmanager.cpp" line="735"/>
<source>None of the available installer plugins were able to handle that archive</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="760"/>
+ <location filename="installationmanager.cpp" line="745"/>
<source>no error</source>
<translation>沒有錯誤</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="763"/>
+ <location filename="installationmanager.cpp" line="748"/>
<source>7z.dll not found</source>
<translation>未找到 7z.dll</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="766"/>
+ <location filename="installationmanager.cpp" line="751"/>
<source>7z.dll isn&apos;t valid</source>
<translation>無效的 7z.dll</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="769"/>
+ <location filename="installationmanager.cpp" line="754"/>
<source>archive not found</source>
<translation>未找到壓縮包</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="772"/>
+ <location filename="installationmanager.cpp" line="757"/>
<source>failed to open archive</source>
<translation>無法開啟壓縮包</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="775"/>
+ <location filename="installationmanager.cpp" line="760"/>
<source>unsupported archive type</source>
<translation>不支持的壓縮包類型</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="778"/>
+ <location filename="installationmanager.cpp" line="763"/>
<source>internal library error</source>
<translation>內部庫錯誤</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="781"/>
+ <location filename="installationmanager.cpp" line="766"/>
<source>archive invalid</source>
<translation>無效的壓縮包</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="785"/>
+ <location filename="installationmanager.cpp" line="770"/>
<source>unknown archive error</source>
<translation>未知壓縮包錯誤</translation>
</message>
@@ -1274,7 +1379,7 @@ Note: This installer will not be aware of other installed mods!</source>
<translation>程式運行時 MO 將被鎖定。</translation>
</message>
<message>
- <location filename="lockeddialog.ui" line="51"/>
+ <location filename="lockeddialog.ui" line="54"/>
<source>Unlock</source>
<translation>解鎖</translation>
</message>
@@ -1282,7 +1387,7 @@ Note: This installer will not be aware of other installed mods!</source>
<context>
<name>LogBuffer</name>
<message>
- <location filename="logbuffer.cpp" line="72"/>
+ <location filename="logbuffer.cpp" line="73"/>
<source>failed to write log to %1: %2</source>
<translation>無法生成日誌到 %1: %2</translation>
</message>
@@ -1290,12 +1395,12 @@ Note: This installer will not be aware of other installed mods!</source>
<context>
<name>MOApplication</name>
<message>
- <location filename="moapplication.cpp" line="60"/>
+ <location filename="moapplication.cpp" line="68"/>
<source>an error occured: %1</source>
<translation type="unfinished">發生錯誤: %1</translation>
</message>
<message>
- <location filename="moapplication.cpp" line="65"/>
+ <location filename="moapplication.cpp" line="73"/>
<source>an error occured</source>
<translation type="unfinished">發生錯誤</translation>
</message>
@@ -1370,8 +1475,8 @@ p, li { white-space: pre-wrap; }
</message>
<message>
<location filename="mainwindow.ui" line="405"/>
- <location filename="mainwindow.ui" line="722"/>
- <location filename="mainwindow.ui" line="1027"/>
+ <location filename="mainwindow.ui" line="724"/>
+ <location filename="mainwindow.ui" line="1046"/>
<source>Namefilter</source>
<translation type="unfinished"></translation>
</message>
@@ -1488,12 +1593,12 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">重要: 您可以在這裡更改 BSA 的順序,不過 Mod 的安裝順序會優先於這裡的設定!</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="751"/>
+ <location filename="mainwindow.ui" line="762"/>
<source>List of available BS Archives. Archives not checked here are not managed by MO and ignore installation order.</source>
<translation type="unfinished">可用 BSA 檔案的列表。未勾選的項目不會被 MO 管理並且會忽略安裝順序。</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="754"/>
+ <location filename="mainwindow.ui" line="765"/>
<source>BSA files are archives (comparable to .zip files) that contain data assets (meshes, textures, ...) to be used by the game. As such they &quot;compete&quot; with loose files in your data directory over which is loaded.
By default, BSAs that share their base name with an enabled ESP (i.e. plugin.esp and plugin.bsa) are automatically loaded and will have precedence over all loose files, the installation order you set up to the left is then ignored!
@@ -1504,67 +1609,81 @@ BSAs checked here are loaded in such a way that your installation order is obeye
這裡勾選的 BSA 將會依從您的安裝順序,並且會自行調整加載順序。</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="794"/>
- <location filename="mainwindow.ui" line="868"/>
+ <location filename="mainwindow.ui" line="811"/>
+ <location filename="mainwindow.ui" line="880"/>
<source>File</source>
<translation type="unfinished">檔案</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="799"/>
- <location filename="mainwindow.ui" line="873"/>
+ <location filename="mainwindow.ui" line="819"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Marked Archives (&lt;img src=&quot;:/MO/gui/warning_16&quot;/&gt;) are still loaded on Skyrim but the &lt;a href=&quot;http://forums.bethsoft.com/topic/1354395-update-bsas-and-you/&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;regular file override&lt;/span&gt;&lt;/a&gt; mechanism will apply: Loose files override BSAs, no matter the mod/plugin priority.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.ui" line="885"/>
<source>Mod</source>
<translation type="unfinished">Mod</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="807"/>
- <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Marked Archives (&lt;img src=&quot;:/MO/gui/resources/dialog-warning_16.png&quot;/&gt;) are still loaded on Skyrim but the &lt;a href=&quot;http://forums.bethsoft.com/topic/1354395-update-bsas-and-you/&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;regular file override&lt;/span&gt;&lt;/a&gt; mechanism will apply: Loose files override BSAs, no matter the mod/plugin priority.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <location filename="mainwindow.ui" line="830"/>
+ <source>Data</source>
+ <translation type="unfinished">Data</translation>
+ </message>
+ <message>
+ <location filename="mainwindow.ui" line="605"/>
+ <source>Plugins</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="818"/>
- <source>Data</source>
- <translation type="unfinished">Data</translation>
+ <location filename="mainwindow.ui" line="731"/>
+ <source>Sort</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.ui" line="741"/>
+ <source>Archives</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="836"/>
+ <location filename="mainwindow.ui" line="848"/>
<source>refresh data-directory overview</source>
<translation type="unfinished">重新整理 Data 目錄總覽</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="839"/>
+ <location filename="mainwindow.ui" line="851"/>
<source>Refresh the overview. This may take a moment.</source>
<translation type="unfinished">重新整理總覽,這可能需要一些時間。</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="842"/>
- <location filename="mainwindow.cpp" line="3328"/>
- <location filename="mainwindow.cpp" line="4059"/>
+ <location filename="mainwindow.ui" line="854"/>
+ <location filename="mainwindow.cpp" line="3781"/>
+ <location filename="mainwindow.cpp" line="4604"/>
<source>Refresh</source>
<translation type="unfinished">重新整理</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="858"/>
+ <location filename="mainwindow.ui" line="870"/>
<source>This is an overview of your data directory as visible to the game (and tools). </source>
<translation type="unfinished">這是在遊戲中可見的 Data 目錄 (和工具) 的總覽。</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="883"/>
- <location filename="mainwindow.ui" line="886"/>
+ <location filename="mainwindow.ui" line="895"/>
+ <location filename="mainwindow.ui" line="898"/>
<source>Filter the above list so that only conflicts are displayed.</source>
<translation type="unfinished">過濾上面的列表,使您只能看到有衝突的檔案。</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="889"/>
+ <location filename="mainwindow.ui" line="901"/>
<source>Show only conflicts</source>
<translation type="unfinished">只顯示衝突</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="897"/>
+ <location filename="mainwindow.ui" line="909"/>
<source>Saves</source>
<translation type="unfinished">存檔</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="921"/>
+ <location filename="mainwindow.ui" line="933"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
@@ -1581,155 +1700,160 @@ p, li { white-space: pre-wrap; }
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:9pt;&quot;&gt;如果您在右鍵菜單中點擊“修復 Mod”,那麼 MO 便會嘗試激活所有 Mod 和 esp 來修復那些缺失的 esp,它並不會禁用任何東西!&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="935"/>
+ <location filename="mainwindow.ui" line="947"/>
<source>Downloads</source>
<translation type="unfinished">下載</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="967"/>
+ <location filename="mainwindow.ui" line="979"/>
<source>This is a list of mods you downloaded from Nexus. Double click one to install it.</source>
<translation type="unfinished">這是當前已下載的 Mod 的列表,雙擊進行安裝。</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1020"/>
+ <location filename="mainwindow.ui" line="1032"/>
<source>Compact</source>
<translation type="unfinished">緊湊</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1051"/>
+ <location filename="mainwindow.ui" line="1039"/>
+ <source>Show Hidden</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.ui" line="1070"/>
<source>Tool Bar</source>
<translation type="unfinished">工具欄</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1093"/>
+ <location filename="mainwindow.ui" line="1112"/>
<source>Install Mod</source>
<translation type="unfinished">安裝 Mod</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1096"/>
+ <location filename="mainwindow.ui" line="1115"/>
<source>Install &amp;Mod</source>
<translation type="unfinished">安裝 &amp;Mod</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1099"/>
+ <location filename="mainwindow.ui" line="1118"/>
<source>Install a new mod from an archive</source>
<translation type="unfinished">通過壓縮包來安裝一個新 Mod</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1102"/>
+ <location filename="mainwindow.ui" line="1121"/>
<source>Ctrl+M</source>
<translation type="unfinished">Ctrl+M</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1111"/>
+ <location filename="mainwindow.ui" line="1130"/>
<source>Profiles</source>
<translation type="unfinished">配置檔案</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1114"/>
+ <location filename="mainwindow.ui" line="1133"/>
<source>&amp;Profiles</source>
<translation type="unfinished">&amp;配置檔案</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1117"/>
+ <location filename="mainwindow.ui" line="1136"/>
<source>Configure Profiles</source>
<translation type="unfinished">設定配置檔案</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1120"/>
+ <location filename="mainwindow.ui" line="1139"/>
<source>Ctrl+P</source>
<translation type="unfinished">Ctrl+P</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1129"/>
+ <location filename="mainwindow.ui" line="1148"/>
<source>Executables</source>
<translation type="unfinished">可執行程式</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1132"/>
+ <location filename="mainwindow.ui" line="1151"/>
<source>&amp;Executables</source>
<translation type="unfinished">&amp;可執行程式</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1135"/>
+ <location filename="mainwindow.ui" line="1154"/>
<source>Configure the executables that can be started through Mod Organizer</source>
<translation type="unfinished">配置可通過 MO 來啟動的程式</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1138"/>
+ <location filename="mainwindow.ui" line="1157"/>
<source>Ctrl+E</source>
<translation type="unfinished">Ctrl+E</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1147"/>
- <location filename="mainwindow.ui" line="1153"/>
+ <location filename="mainwindow.ui" line="1166"/>
+ <location filename="mainwindow.ui" line="1172"/>
<source>Tools</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1150"/>
+ <location filename="mainwindow.ui" line="1169"/>
<source>&amp;Tools</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1156"/>
+ <location filename="mainwindow.ui" line="1175"/>
<source>Ctrl+I</source>
<translation type="unfinished">Ctrl+I</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1165"/>
+ <location filename="mainwindow.ui" line="1184"/>
<source>Settings</source>
<translation type="unfinished">設定</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1168"/>
+ <location filename="mainwindow.ui" line="1187"/>
<source>&amp;Settings</source>
<translation type="unfinished">&amp;設定</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1171"/>
+ <location filename="mainwindow.ui" line="1190"/>
<source>Configure settings and workarounds</source>
<translation type="unfinished">配置設定和解決方案</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1174"/>
+ <location filename="mainwindow.ui" line="1193"/>
<source>Ctrl+S</source>
<translation type="unfinished">Ctrl+S</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1183"/>
+ <location filename="mainwindow.ui" line="1202"/>
<source>Nexus</source>
<translation type="unfinished">N網</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1186"/>
+ <location filename="mainwindow.ui" line="1205"/>
<source>Search nexus network for more mods</source>
<translation type="unfinished">搜尋N網以獲取更多 Mod</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1189"/>
+ <location filename="mainwindow.ui" line="1208"/>
<source>Ctrl+N</source>
<translation type="unfinished">Ctrl+N</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1201"/>
- <location filename="mainwindow.cpp" line="4007"/>
+ <location filename="mainwindow.ui" line="1220"/>
+ <location filename="mainwindow.cpp" line="4545"/>
<source>Update</source>
<translation type="unfinished">更新</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1204"/>
+ <location filename="mainwindow.ui" line="1223"/>
<source>Mod Organizer is up-to-date</source>
<translation type="unfinished">Mod Organizer 現在是最新版本</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1216"/>
- <location filename="mainwindow.cpp" line="478"/>
+ <location filename="mainwindow.ui" line="1235"/>
+ <location filename="mainwindow.cpp" line="509"/>
<source>No Problems</source>
<translation type="unfinished">沒有問題</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1219"/>
+ <location filename="mainwindow.ui" line="1238"/>
<source>This button will be highlighted if MO discovered potential problems in your setup and provide tips on how to fix them.
!Work in progress!
@@ -1740,54 +1864,54 @@ Right now this has very limited functionality</source>
當前此功能所能提供的項目非常有限</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1231"/>
- <location filename="mainwindow.ui" line="1234"/>
+ <location filename="mainwindow.ui" line="1250"/>
+ <location filename="mainwindow.ui" line="1253"/>
<source>Help</source>
<translation type="unfinished">幫助</translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1237"/>
+ <location filename="mainwindow.ui" line="1256"/>
<source>Ctrl+H</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1246"/>
+ <location filename="mainwindow.ui" line="1265"/>
<source>Endorse MO</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.ui" line="1249"/>
- <location filename="mainwindow.cpp" line="4087"/>
+ <location filename="mainwindow.ui" line="1268"/>
+ <location filename="mainwindow.cpp" line="4633"/>
<source>Endorse Mod Organizer</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="204"/>
+ <location filename="mainwindow.cpp" line="223"/>
<source>Toolbar</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="205"/>
+ <location filename="mainwindow.cpp" line="224"/>
<source>Desktop</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="206"/>
+ <location filename="mainwindow.cpp" line="225"/>
<source>Start Menu</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="475"/>
+ <location filename="mainwindow.cpp" line="505"/>
<source>Problems</source>
<translation type="unfinished">問題</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="476"/>
+ <location filename="mainwindow.cpp" line="506"/>
<source>There are potential problems with your setup</source>
<translation type="unfinished">您的安裝中存在潛在的問題</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="479"/>
+ <location filename="mainwindow.cpp" line="510"/>
<source>Everything seems to be in order</source>
<translation type="unfinished">一切井然有序</translation>
</message>
@@ -1804,22 +1928,22 @@ Right now this has very limited functionality</source>
<translation type="obsolete">&lt;li&gt;.Net 未安裝或版本過舊。想要運行 NCC 您必須先安裝 .Net,您可以在以下地址中獲取: &lt;a href=&quot;%1&quot;&gt;%1&lt;/a&gt;&lt;/li&gt;</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="531"/>
+ <location filename="mainwindow.cpp" line="568"/>
<source>Help on UI</source>
<translation type="unfinished">介面幫助</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="535"/>
+ <location filename="mainwindow.cpp" line="572"/>
<source>Documentation Wiki</source>
<translation type="unfinished">說明文檔 (維基)</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="539"/>
+ <location filename="mainwindow.cpp" line="576"/>
<source>Report Issue</source>
<translation type="unfinished">報告問題</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="543"/>
+ <location filename="mainwindow.cpp" line="580"/>
<source>Tutorials</source>
<translation type="unfinished"></translation>
</message>
@@ -1828,374 +1952,430 @@ Right now this has very limited functionality</source>
<translation type="obsolete">無法儲存加載順序</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="670"/>
+ <location filename="mainwindow.cpp" line="705"/>
<source>failed to save load order: %1</source>
<translation type="unfinished">無法儲存加載順序: %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="600"/>
<source>failed to save archives order, do you have write access to &quot;%1&quot;?</source>
- <translation type="unfinished">無法儲存檔案順序,您確定您有權限更改 &quot;%1&quot;?</translation>
+ <translation type="obsolete">無法儲存檔案順序,您確定您有權限更改 &quot;%1&quot;?</translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="619"/>
+ <source>About</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="687"/>
+ <location filename="mainwindow.cpp" line="620"/>
+ <source>About Qt</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="717"/>
<source>Name</source>
<translation type="unfinished">名稱</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="688"/>
+ <location filename="mainwindow.cpp" line="718"/>
<source>Please enter a name for the new profile</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="696"/>
+ <location filename="mainwindow.cpp" line="726"/>
<source>failed to create profile: %1</source>
<translation type="unfinished">無法建立配置檔案: %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="739"/>
+ <location filename="mainwindow.cpp" line="769"/>
<source>Show tutorial?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="740"/>
+ <location filename="mainwindow.cpp" line="770"/>
<source>You are starting Mod Organizer for the first time. Do you want to show a tutorial of its basic features? If you choose no you can always start the tutorial from the &quot;Help&quot;-menu.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="769"/>
+ <location filename="mainwindow.cpp" line="801"/>
<source>Downloads in progress</source>
<translation type="unfinished">正在下載</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="770"/>
+ <location filename="mainwindow.cpp" line="802"/>
<source>There are still downloads in progress, do you really want to quit?</source>
<translation type="unfinished">仍有正在進行中的下載,您確定要退出嗎?</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="816"/>
+ <location filename="mainwindow.cpp" line="848"/>
<source>failed to read savegame: %1</source>
<translation type="unfinished">無法讀取存檔: %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="941"/>
+ <location filename="mainwindow.cpp" line="972"/>
<source>Plugin &quot;%1&quot; failed: %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1183"/>
+ <location filename="mainwindow.cpp" line="1085"/>
+ <source>Plugin error</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="1086"/>
+ <source>It appears the plugin &quot;%1&quot; failed to load last startup and caused MO to crash. Do you want to disable it?
+(Please note: If this is the first time you see this message for this plugin you may want to give it another try. The plugin may be able to recover from the problem)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="1270"/>
<source>Failed to start &quot;%1&quot;</source>
<translation type="unfinished">無法啟動 &quot;%1&quot;</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1185"/>
+ <location filename="mainwindow.cpp" line="1272"/>
<source>Waiting</source>
<translation type="unfinished">稍等</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1185"/>
+ <location filename="mainwindow.cpp" line="1272"/>
<source>Please press OK once you&apos;re logged into steam.</source>
<translation type="unfinished">當您登入 Steam 時請點擊確定。</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1197"/>
<source>&quot;%1&quot; not found</source>
- <translation type="unfinished">&quot;%1&quot; 未找到</translation>
+ <translation type="obsolete">&quot;%1&quot; 未找到</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1211"/>
+ <location filename="mainwindow.cpp" line="1298"/>
<source>Start Steam?</source>
<translation type="unfinished">啟動 Steam?</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1212"/>
+ <location filename="mainwindow.cpp" line="1299"/>
<source>Steam is required to be running already to correctly start the game. Should MO try to start steam now?</source>
<translation type="unfinished">想要正確地啟動遊戲,Steam 必須處於運行狀態,MO 要立即啟動 Steam 嗎?</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1426"/>
+ <location filename="mainwindow.cpp" line="1526"/>
<source>Also in: &lt;br&gt;</source>
<translation type="unfinished">也在: &lt;br&gt;</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1437"/>
+ <location filename="mainwindow.cpp" line="1537"/>
<source>No conflict</source>
<translation type="unfinished">沒有衝突</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1552"/>
+ <location filename="mainwindow.cpp" line="1692"/>
<source>&lt;Edit...&gt;</source>
<translation type="unfinished">&lt;編輯...&gt;</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1771"/>
+ <location filename="mainwindow.cpp" line="1929"/>
<source>This bsa is enabled in the ini file so it may be required!</source>
<translation type="unfinished">該 BSA 已在 Ini 檔案中啟用,因此它可能是必需的。</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1778"/>
+ <location filename="mainwindow.cpp" line="1936"/>
<source>This archive will still be loaded since there is a plugin of the same name but its files will not follow installation order!</source>
<translation type="unfinished">此檔案還是會被加載,因為存在同名插件。不過它所包含的的檔案不會遵循安裝順序!</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1833"/>
+ <location filename="mainwindow.cpp" line="1991"/>
<source>Activating Network Proxy</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1962"/>
- <location filename="mainwindow.cpp" line="3755"/>
+ <location filename="mainwindow.cpp" line="2122"/>
+ <location filename="mainwindow.cpp" line="4248"/>
<source>Installation successful</source>
<translation type="unfinished">安裝成功</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1973"/>
- <location filename="mainwindow.cpp" line="3768"/>
+ <location filename="mainwindow.cpp" line="2133"/>
+ <location filename="mainwindow.cpp" line="4261"/>
<source>Configure Mod</source>
<translation type="unfinished">配置 Mod</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1974"/>
- <location filename="mainwindow.cpp" line="3769"/>
+ <location filename="mainwindow.cpp" line="2134"/>
+ <location filename="mainwindow.cpp" line="4262"/>
<source>This mod contains ini tweaks. Do you want to configure them now?</source>
<translation type="unfinished">此 Mod 中包含 Ini 設定檔案,您想現在就對它們進行配置嗎?</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1980"/>
- <location filename="mainwindow.cpp" line="3775"/>
+ <location filename="mainwindow.cpp" line="2140"/>
+ <location filename="mainwindow.cpp" line="4268"/>
<source>mod &quot;%1&quot; not found</source>
<translation type="unfinished">Mod &quot;%1&quot; 未找到</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1983"/>
- <location filename="mainwindow.cpp" line="3781"/>
+ <location filename="mainwindow.cpp" line="2143"/>
+ <location filename="mainwindow.cpp" line="4274"/>
<source>Installation cancelled</source>
<translation type="unfinished">安裝已取消</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1983"/>
- <location filename="mainwindow.cpp" line="3781"/>
+ <location filename="mainwindow.cpp" line="2143"/>
+ <location filename="mainwindow.cpp" line="4274"/>
<source>The mod was not installed completely.</source>
<translation type="unfinished">Mod 沒有完全安裝。</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2018"/>
+ <location filename="mainwindow.cpp" line="2292"/>
<source>Some plugins could not be loaded</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2021"/>
- <location filename="mainwindow.cpp" line="2038"/>
+ <location filename="mainwindow.cpp" line="2295"/>
+ <source>Too many esps and esms enabled</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="2298"/>
+ <location filename="mainwindow.cpp" line="2319"/>
<source>Description missing</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2030"/>
- <source>The following Plugins could not be loaded. The reason may be missing dependencies (i.e. python) or an outdated version:&lt;ul&gt;</source>
+ <location filename="mainwindow.cpp" line="2315"/>
+ <source>The game doesn&apos;t allow more than 255 active plugins (including the official ones) to be loaded. You have to disable some unused plugins or merge some plugins into one. You can find a guide here: &lt;a href=&quot;http://wiki.step-project.com/Guide:Merging_Plugins&quot;&gt;http://wiki.step-project.com/Guide:Merging_Plugins&lt;/a&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2060"/>
+ <location filename="mainwindow.cpp" line="2341"/>
<source>Choose Mod</source>
<translation type="unfinished">選擇 Mod</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2061"/>
+ <location filename="mainwindow.cpp" line="2342"/>
<source>Mod Archive</source>
<translation type="unfinished">Mod 壓縮包</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2214"/>
+ <location filename="mainwindow.cpp" line="2495"/>
<source>Start Tutorial?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2215"/>
+ <location filename="mainwindow.cpp" line="2496"/>
<source>You&apos;re about to start a tutorial. For technical reasons it&apos;s not possible to end the tutorial early. Continue?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2360"/>
- <location filename="mainwindow.cpp" line="3683"/>
+ <location filename="mainwindow.cpp" line="2651"/>
+ <location filename="mainwindow.cpp" line="4171"/>
<source>Download started</source>
<translation type="unfinished">開始下載</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2391"/>
+ <location filename="mainwindow.cpp" line="2682"/>
<source>failed to update mod list: %1</source>
<translation type="unfinished">無法更新 Mod 列表: %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2418"/>
+ <location filename="mainwindow.cpp" line="2711"/>
<source>failed to spawn notepad.exe: %1</source>
<translation type="unfinished">無法生成 notepad.exe: %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2459"/>
+ <location filename="mainwindow.cpp" line="2752"/>
<source>failed to open %1</source>
<translation type="unfinished">無法開啟 %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2537"/>
+ <location filename="mainwindow.cpp" line="2830"/>
<source>failed to change origin name: %1</source>
<translation type="unfinished">無法更改原始檔案名: %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2676"/>
+ <location filename="mainwindow.cpp" line="2860"/>
+ <source>failed to move &quot;%1&quot; from mod &quot;%2&quot; to &quot;%3&quot;: %4</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="2997"/>
<source>Multiple esps activated, please check that they don&apos;t conflict.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3005"/>
- <location filename="mainwindow.cpp" line="3339"/>
+ <location filename="mainwindow.cpp" line="3345"/>
+ <location filename="mainwindow.cpp" line="3792"/>
<source>Create Mod...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3006"/>
- <source>This will move all files from overwrite into a new, regular mod.
-Please enter a name: </source>
+ <location filename="mainwindow.cpp" line="3355"/>
+ <source>A mod with this name already exists</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3015"/>
- <source>A mod with this name already exists</source>
+ <location filename="mainwindow.cpp" line="3613"/>
+ <source>Continue?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="3614"/>
+ <source>The versioning scheme decides which version is considered newer than another.
+This function will guess the versioning scheme under the assumption that the installed version is outdated.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="3634"/>
+ <location filename="mainwindow.cpp" line="4516"/>
+ <source>Sorry</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3410"/>
+ <location filename="mainwindow.cpp" line="3635"/>
+ <source>I don&apos;t know a versioning scheme where %1 is newer than %2.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="3883"/>
<source>&lt;All&gt;</source>
<translation type="unfinished">&lt;全部&gt;</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2589"/>
+ <location filename="mainwindow.cpp" line="2909"/>
<source>&lt;Checked&gt;</source>
<translation type="unfinished">&lt;已勾選&gt;</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="943"/>
+ <location filename="mainwindow.cpp" line="974"/>
<source>Plugin &quot;%1&quot; failed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1007"/>
+ <location filename="mainwindow.cpp" line="1047"/>
<source>failed to init plugin %1: %2</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2590"/>
+ <location filename="mainwindow.cpp" line="2307"/>
+ <source>The following plugins could not be loaded. The reason may be missing dependencies (i.e. python) or an outdated version:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="2910"/>
<source>&lt;Unchecked&gt;</source>
<translation type="unfinished">&lt;未勾選&gt;</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2591"/>
+ <location filename="mainwindow.cpp" line="2911"/>
<source>&lt;Update&gt;</source>
<translation type="unfinished">&lt;有更新&gt;</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2592"/>
+ <location filename="mainwindow.cpp" line="2912"/>
<source>&lt;No category&gt;</source>
<translation type="unfinished">&lt;無類別&gt;</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2593"/>
+ <location filename="mainwindow.cpp" line="2913"/>
<source>&lt;Conflicted&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2626"/>
+ <location filename="mainwindow.cpp" line="2914"/>
+ <source>&lt;Not Endorsed&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="2947"/>
<source>failed to rename mod: %1</source>
<translation type="unfinished">無法重新命名 Mod: %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2639"/>
+ <location filename="mainwindow.cpp" line="2960"/>
<source>Overwrite?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2640"/>
+ <location filename="mainwindow.cpp" line="2961"/>
<source>This will replace the existing mod &quot;%1&quot;. Continue?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2643"/>
+ <location filename="mainwindow.cpp" line="2964"/>
<source>failed to remove mod &quot;%1&quot;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2647"/>
- <location filename="mainwindow.cpp" line="3953"/>
- <location filename="mainwindow.cpp" line="3977"/>
+ <location filename="mainwindow.cpp" line="2968"/>
+ <location filename="mainwindow.cpp" line="4446"/>
+ <location filename="mainwindow.cpp" line="4470"/>
<source>failed to rename &quot;%1&quot; to &quot;%2&quot;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2702"/>
- <location filename="mainwindow.cpp" line="3243"/>
- <location filename="mainwindow.cpp" line="3252"/>
+ <location filename="mainwindow.cpp" line="3024"/>
+ <location filename="mainwindow.cpp" line="3687"/>
+ <location filename="mainwindow.cpp" line="3695"/>
+ <location filename="mainwindow.cpp" line="3902"/>
<source>Confirm</source>
<translation type="unfinished">確認</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2703"/>
+ <location filename="mainwindow.cpp" line="3025"/>
<source>Remove the following mods?&lt;br&gt;&lt;ul&gt;%1&lt;/ul&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2714"/>
+ <location filename="mainwindow.cpp" line="3036"/>
<source>failed to remove mod: %1</source>
<translation type="unfinished">無法移動 Mod: %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2744"/>
- <location filename="mainwindow.cpp" line="2747"/>
+ <location filename="mainwindow.cpp" line="3071"/>
+ <location filename="mainwindow.cpp" line="3074"/>
<source>Failed</source>
<translation type="unfinished">失敗</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2744"/>
+ <location filename="mainwindow.cpp" line="3071"/>
<source>Installation file no longer exists</source>
<translation type="unfinished">安裝檔案不複存在</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2748"/>
+ <location filename="mainwindow.cpp" line="3075"/>
<source>Mods installed with old versions of MO can&apos;t be reinstalled in this way.</source>
<translation type="unfinished">舊版 MO 安裝的 Mod 無法使用此方法重新安裝。</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2763"/>
- <location filename="mainwindow.cpp" line="2790"/>
+ <location filename="mainwindow.cpp" line="3090"/>
+ <location filename="mainwindow.cpp" line="3117"/>
<source>You need to be logged in with Nexus to endorse</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2906"/>
- <location filename="mainwindow.cpp" line="4335"/>
+ <location filename="mainwindow.cpp" line="3249"/>
+ <location filename="mainwindow.cpp" line="4882"/>
<source>Extract BSA</source>
<translation type="unfinished">解壓 BSA</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2907"/>
+ <location filename="mainwindow.cpp" line="3250"/>
<source>This mod contains at least one BSA. Do you want to unpack it?
(This removes the BSA after completion. If you don&apos;t know about BSAs, just select no)</source>
<translation type="unfinished">此 Mod 中至少包含一個 BSA。您確定要解壓嗎?
(解壓完成後,BSA 檔案將會被刪除。如果您不瞭解 BSA 的話,請選擇“否”)</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2917"/>
- <location filename="mainwindow.cpp" line="4292"/>
- <location filename="mainwindow.cpp" line="4343"/>
+ <location filename="mainwindow.cpp" line="3259"/>
+ <location filename="mainwindow.cpp" line="4839"/>
+ <location filename="mainwindow.cpp" line="4890"/>
<source>failed to read %1: %2</source>
<translation type="unfinished">無法讀取 %1: %2</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2930"/>
- <location filename="mainwindow.cpp" line="4354"/>
+ <location filename="mainwindow.cpp" line="3272"/>
+ <location filename="mainwindow.cpp" line="4901"/>
<source>This archive contains invalid hashes. Some files may be broken.</source>
<translation type="unfinished">壓縮包 Hash 值錯誤。部分檔案可能已經損壞。</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="2964"/>
+ <location filename="mainwindow.cpp" line="3306"/>
<source>Nexus ID for this Mod is unknown</source>
<translation type="unfinished">此 Mod 的N網 ID 未知</translation>
</message>
@@ -2208,371 +2388,456 @@ Please enter a name: </source>
<translation type="obsolete">選擇優先級</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3243"/>
+ <location filename="mainwindow.cpp" line="3687"/>
<source>Really enable all visible mods?</source>
<translation type="unfinished">確定要啟用全部可見的 Mod 嗎?</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3252"/>
+ <location filename="mainwindow.cpp" line="3695"/>
<source>Really disable all visible mods?</source>
<translation type="unfinished">確定要禁用全部可見的 Mod 嗎?</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3261"/>
+ <location filename="mainwindow.cpp" line="3703"/>
<source>Choose what to export</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3263"/>
+ <location filename="mainwindow.cpp" line="3705"/>
<source>Everything</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3263"/>
+ <location filename="mainwindow.cpp" line="3705"/>
<source>All installed mods are included in the list</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3264"/>
+ <location filename="mainwindow.cpp" line="3706"/>
<source>Active Mods</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3264"/>
+ <location filename="mainwindow.cpp" line="3706"/>
<source>Only active (checked) mods from your current profile are included</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3265"/>
+ <location filename="mainwindow.cpp" line="3707"/>
<source>Visible</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3265"/>
+ <location filename="mainwindow.cpp" line="3707"/>
<source>All mods visible in the mod list are included</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3308"/>
+ <location filename="mainwindow.cpp" line="3750"/>
<source>export failed: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3321"/>
+ <location filename="mainwindow.cpp" line="3774"/>
<source>Install Mod...</source>
<translation type="unfinished">安裝 Mod...</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3323"/>
+ <location filename="mainwindow.cpp" line="3776"/>
<source>Enable all visible</source>
<translation type="unfinished">啟用所有可見項目</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3324"/>
+ <location filename="mainwindow.cpp" line="3777"/>
<source>Disable all visible</source>
<translation type="unfinished">禁用所有可見項目</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3326"/>
+ <location filename="mainwindow.cpp" line="3779"/>
<source>Check all for update</source>
<translation type="unfinished">檢查更新</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3330"/>
+ <location filename="mainwindow.cpp" line="3783"/>
<source>Export to csv...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3338"/>
+ <location filename="mainwindow.cpp" line="3791"/>
<source>Sync to Mods...</source>
<translation type="unfinished">同步到 Mod...</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3342"/>
+ <location filename="mainwindow.cpp" line="3795"/>
<source>Restore Backup</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3343"/>
+ <location filename="mainwindow.cpp" line="3796"/>
<source>Remove Backup...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3345"/>
<source>Set Category</source>
- <translation type="unfinished">設定類別</translation>
+ <translation type="obsolete">設定類別</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3349"/>
+ <location filename="mainwindow.cpp" line="3808"/>
<source>Primary Category</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3353"/>
+ <location filename="mainwindow.cpp" line="3815"/>
+ <source>Change versioning scheme</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="3819"/>
+ <source>Un-ignore update</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="3821"/>
+ <source>Ignore update</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="3826"/>
<source>Rename Mod...</source>
<translation type="unfinished">重新命名...</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3354"/>
+ <location filename="mainwindow.cpp" line="3827"/>
<source>Remove Mod...</source>
<translation type="unfinished">移除 Mod...</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3355"/>
+ <location filename="mainwindow.cpp" line="3828"/>
<source>Reinstall Mod</source>
<translation type="unfinished">重新安裝 Mod</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3358"/>
+ <location filename="mainwindow.cpp" line="3831"/>
<source>Un-Endorse</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3361"/>
- <location filename="mainwindow.cpp" line="3365"/>
+ <location filename="mainwindow.cpp" line="3834"/>
+ <location filename="mainwindow.cpp" line="3838"/>
<source>Endorse</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3362"/>
+ <location filename="mainwindow.cpp" line="3835"/>
<source>Won&apos;t endorse</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3368"/>
+ <location filename="mainwindow.cpp" line="3841"/>
<source>Endorsement state unknown</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3375"/>
+ <location filename="mainwindow.cpp" line="3848"/>
<source>Ignore missing data</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3378"/>
+ <location filename="mainwindow.cpp" line="3851"/>
<source>Visit on Nexus</source>
<translation type="unfinished">在N網上流覽</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3379"/>
+ <location filename="mainwindow.cpp" line="3852"/>
<source>Open in explorer</source>
<translation type="unfinished">在檔案總管中開啟</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3382"/>
+ <location filename="mainwindow.cpp" line="3855"/>
<source>Information...</source>
<translation type="unfinished">訊息...</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3388"/>
- <location filename="mainwindow.cpp" line="4514"/>
+ <location filename="mainwindow.cpp" line="3861"/>
+ <location filename="mainwindow.cpp" line="5086"/>
<source>Exception: </source>
<translation type="unfinished">例外: </translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3390"/>
- <location filename="mainwindow.cpp" line="4516"/>
+ <location filename="mainwindow.cpp" line="3863"/>
+ <location filename="mainwindow.cpp" line="5088"/>
<source>Unknown exception</source>
<translation type="unfinished">未知的例外</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3412"/>
+ <location filename="mainwindow.cpp" line="3885"/>
<source>&lt;Multiple&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3524"/>
+ <location filename="mainwindow.cpp" line="3902"/>
+ <source>Really delete &quot;%1&quot;?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="4013"/>
<source>Fix Mods...</source>
<translation type="unfinished">修復 Mod...</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3548"/>
- <location filename="mainwindow.cpp" line="3579"/>
+ <location filename="mainwindow.cpp" line="4014"/>
+ <source>Delete</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="4038"/>
+ <location filename="mainwindow.cpp" line="4069"/>
<source>failed to remove %1</source>
<translation type="unfinished">無法刪除 %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3563"/>
- <location filename="mainwindow.cpp" line="3594"/>
+ <location filename="mainwindow.cpp" line="4053"/>
+ <location filename="mainwindow.cpp" line="4084"/>
<source>failed to create %1</source>
<translation type="unfinished">無法建立 %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3615"/>
+ <location filename="mainwindow.cpp" line="4107"/>
<source>Can&apos;t change download directory while downloads are in progress!</source>
<translation type="unfinished">下載檔案時不能修改下載目錄!</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3686"/>
+ <location filename="mainwindow.cpp" line="4174"/>
<source>Download failed</source>
<translation type="unfinished">下載失敗</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3830"/>
+ <location filename="mainwindow.cpp" line="4323"/>
<source>failed to write to file %1</source>
<translation type="unfinished">無法寫入檔案 %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3836"/>
+ <location filename="mainwindow.cpp" line="4329"/>
<source>%1 written</source>
<translation type="unfinished">已寫入 %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3875"/>
+ <location filename="mainwindow.cpp" line="4368"/>
<source>Select binary</source>
<translation type="unfinished">選擇可執行檔案</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3875"/>
+ <location filename="mainwindow.cpp" line="4368"/>
<source>Binary</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3901"/>
+ <location filename="mainwindow.cpp" line="4394"/>
<source>Enter Name</source>
<translation type="unfinished">輸入名稱</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3902"/>
+ <location filename="mainwindow.cpp" line="4395"/>
<source>Please enter a name for the executable</source>
<translation type="unfinished">請為程式輸入一個名稱</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3913"/>
+ <location filename="mainwindow.cpp" line="4406"/>
<source>Not an executable</source>
<translation type="unfinished">不是可執行程式</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3913"/>
+ <location filename="mainwindow.cpp" line="4406"/>
<source>This is not a recognized executable.</source>
<translation type="unfinished">無法識別的可執行檔案</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3938"/>
- <location filename="mainwindow.cpp" line="3963"/>
+ <location filename="mainwindow.cpp" line="4431"/>
+ <location filename="mainwindow.cpp" line="4456"/>
<source>Replace file?</source>
<translation type="unfinished">取代檔案?</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3938"/>
+ <location filename="mainwindow.cpp" line="4431"/>
<source>There already is a hidden version of this file. Replace it?</source>
<translation type="unfinished">已存在同名檔案,但該檔案被隱藏了。確定要覆蓋嗎?</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3941"/>
- <location filename="mainwindow.cpp" line="3966"/>
+ <location filename="mainwindow.cpp" line="4434"/>
+ <location filename="mainwindow.cpp" line="4459"/>
<source>File operation failed</source>
<translation type="unfinished">檔案操作錯誤</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3941"/>
- <location filename="mainwindow.cpp" line="3966"/>
+ <location filename="mainwindow.cpp" line="4434"/>
+ <location filename="mainwindow.cpp" line="4459"/>
<source>Failed to remove &quot;%1&quot;. Maybe you lack the required file permissions?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="3963"/>
+ <location filename="mainwindow.cpp" line="4456"/>
<source>There already is a visible version of this file. Replace it?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4009"/>
+ <location filename="mainwindow.cpp" line="4489"/>
+ <source>file not found: %1</source>
+ <translation type="unfinished">檔案未找到: %1</translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="4502"/>
+ <source>failed to generate preview for %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="4516"/>
+ <source>Sorry, can&apos;t preview anything. This function currently does not support extracting from bsas.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="4547"/>
<source>Update available</source>
<translation type="unfinished">更新可用</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4046"/>
+ <location filename="mainwindow.cpp" line="4584"/>
<source>Open/Execute</source>
<translation type="unfinished">開啟/執行</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4047"/>
+ <location filename="mainwindow.cpp" line="4585"/>
<source>Add as Executable</source>
<translation type="unfinished">添加為可執行檔案</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4051"/>
+ <location filename="mainwindow.cpp" line="4589"/>
+ <source>Preview</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="4595"/>
<source>Un-Hide</source>
<translation type="unfinished">取消隱藏</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4053"/>
+ <location filename="mainwindow.cpp" line="4597"/>
<source>Hide</source>
<translation type="unfinished">隱藏</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4058"/>
+ <location filename="mainwindow.cpp" line="4603"/>
<source>Write To File...</source>
<translation type="unfinished">寫入檔案...</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4088"/>
+ <location filename="mainwindow.cpp" line="4634"/>
<source>Do you want to endorse Mod Organizer on %1 now?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4505"/>
+ <location filename="mainwindow.cpp" line="5047"/>
+ <source>Remove</source>
+ <translation type="unfinished">移除</translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="5077"/>
<source>Unlock load order</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4508"/>
+ <location filename="mainwindow.cpp" line="5080"/>
<source>Lock load order</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4223"/>
+ <location filename="mainwindow.cpp" line="5149"/>
+ <source>BOSS working</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="5157"/>
+ <source>failed to run boss: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="4770"/>
<source>Request to Nexus failed: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4230"/>
- <location filename="mainwindow.cpp" line="4247"/>
+ <location filename="mainwindow.cpp" line="1284"/>
+ <source>Executable &quot;%1&quot; not found</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="1789"/>
+ <source>Failed to refresh list of esps: %1</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="3346"/>
+ <source>This will move all files from overwrite into a new, regular mod.
+Please enter a name:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="3798"/>
+ <source>Add/Remove Categories</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="3803"/>
+ <source>Replace Categories</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="4777"/>
+ <location filename="mainwindow.cpp" line="4794"/>
<source>login successful</source>
<translation type="unfinished">登入成功</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4256"/>
+ <location filename="mainwindow.cpp" line="4803"/>
<source>login failed: %1. Trying to download anyway</source>
<translation type="unfinished">登入失敗: %1,請嘗試使用別的方法下載</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4262"/>
+ <location filename="mainwindow.cpp" line="4809"/>
<source>login failed: %1</source>
<translation type="unfinished">無法登入: %1</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4271"/>
+ <location filename="mainwindow.cpp" line="4818"/>
<source>login failed: %1. You need to log-in with Nexus to update MO.</source>
<translation type="unfinished">登入失敗: %1。您需要登入到N網才能更新 MO</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4304"/>
+ <location filename="mainwindow.cpp" line="4851"/>
<source>Error</source>
<translation type="unfinished">錯誤</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4304"/>
+ <location filename="mainwindow.cpp" line="4851"/>
<source>failed to extract %1 (errorcode %2)</source>
<translation type="unfinished">無法解壓 %1 (錯誤代碼 %2)</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4399"/>
+ <location filename="mainwindow.cpp" line="4946"/>
<source>Extract...</source>
<translation type="unfinished">解壓...</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4449"/>
+ <location filename="mainwindow.cpp" line="5002"/>
<source>Edit Categories...</source>
<translation type="unfinished">編輯類別...</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4485"/>
+ <location filename="mainwindow.cpp" line="5057"/>
<source>Enable all</source>
<translation type="unfinished">全部啟用</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="4486"/>
+ <location filename="mainwindow.cpp" line="5058"/>
<source>Disable all</source>
<translation type="unfinished">全部禁用</translation>
</message>
@@ -2606,7 +2871,7 @@ Please enter a name: </source>
<context>
<name>ModInfoBackup</name>
<message>
- <location filename="modinfo.cpp" line="784"/>
+ <location filename="modinfo.cpp" line="820"/>
<source>This is the backup of a mod</source>
<translation type="unfinished"></translation>
</message>
@@ -2619,87 +2884,85 @@ Please enter a name: </source>
<translation>Mod 訊息</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="27"/>
+ <location filename="modinfodialog.ui" line="30"/>
<source>Textfiles</source>
<translation>文字文件</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="39"/>
+ <location filename="modinfodialog.ui" line="42"/>
<source>A list of text-files in the mod directory.</source>
<translation>Mod 目錄裡包含的文字文件的列表。</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="42"/>
+ <location filename="modinfodialog.ui" line="45"/>
<source>A list of text-files in the mod directory like readmes. </source>
<translation>Mod 目錄裡包含的文字文件 (類似於自述文檔) 的列表。</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="64"/>
- <location filename="modinfodialog.ui" line="149"/>
+ <location filename="modinfodialog.ui" line="67"/>
+ <location filename="modinfodialog.ui" line="155"/>
<source>Save</source>
<translation>儲存</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="74"/>
+ <location filename="modinfodialog.ui" line="77"/>
<source>INI-Files</source>
<translation>Ini 檔案</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="94"/>
+ <location filename="modinfodialog.ui" line="97"/>
<source>This is a list of .ini files in the mod.</source>
<translation>Mod 目錄裡包含的 Ini 檔案的列表。</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="97"/>
+ <location filename="modinfodialog.ui" line="100"/>
<source>This is a list of .ini files in the mod. These are usually used to configure the behaviour of mods if there are configurable parameters.</source>
<translation>Mod 目錄裡包含的 Ini 檔案的列表,這些檔案通常用來配置 Mod 的行為,如果有可設定的參數的話。</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="143"/>
+ <location filename="modinfodialog.ui" line="149"/>
<source>Save changes to the file.</source>
<translation>儲存更改到檔案中。</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="146"/>
+ <location filename="modinfodialog.ui" line="152"/>
<source>Save changes to the file. This overwrites the original. There is no automatic backup!</source>
<translation>儲存更改到檔案中,這將會覆蓋原始檔案,並且沒有自動備份!</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="159"/>
+ <location filename="modinfodialog.ui" line="165"/>
<source>Images</source>
<translation>圖片</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="214"/>
+ <location filename="modinfodialog.ui" line="220"/>
<source>Images located in the mod.</source>
<translation>位於 Mod 中的圖片。</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="217"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;This lists all the images (.jpg and .png) in the mod directory, like screenshots and such. Click one to get a larger view.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <translation>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+ <translation type="obsolete">&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:9pt;&quot;&gt;這裡列出了所有在 Mod 目錄裡的圖片 (.jpg 和 .png),如截圖等。點擊其中的一個來獲得較大的視圖。&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="254"/>
- <location filename="modinfodialog.ui" line="277"/>
+ <location filename="modinfodialog.ui" line="256"/>
+ <location filename="modinfodialog.ui" line="275"/>
<source>Optional ESPs</source>
<translation>可選 ESP</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="260"/>
+ <location filename="modinfodialog.ui" line="262"/>
<source>List of esps and esms that can not be loaded by the game.</source>
<translation>包含了不會被遊戲載入的 esp 和 esm 的列表。</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="263"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
@@ -2708,7 +2971,7 @@ p, li { white-space: pre-wrap; }
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;They usually contain optional functionality, see the readme.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;&quot;&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:8pt;&quot;&gt;Most mods do not have optional esps, so chances are good you are looking at an empty list.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
- <translation>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+ <translation type="obsolete">&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
@@ -2719,103 +2982,116 @@ p, li { white-space: pre-wrap; }
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:9pt;&quot;&gt;大部分 Mod 沒有可選 esp,因此您正在看的很有可能只是一個空列表。&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="292"/>
+ <location filename="modinfodialog.ui" line="223"/>
+ <source>This lists all the images (.jpg and .png) in the mod directory, like screenshots and such. Click one to get a larger view.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="modinfodialog.ui" line="265"/>
+ <source>List of esps and esms contained in this plugin that currently can not be loaded by the game. They will not even appear in the esp-list in the main MO-window.
+They usually contain optional functionality, see the readme.
+
+Most mods do not have optional esps, so chances are good you are looking at an empty list.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="modinfodialog.ui" line="290"/>
<source>Make the selected mod in the lower list unavailable.</source>
<translation>使下表中已選的 Mod 變得不可用。</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="295"/>
+ <location filename="modinfodialog.ui" line="293"/>
<source>The selected esp (in the lower list) will be pushed into a subdirectory of the mod and will thus become &quot;invisible&quot; to the game. It can then no longer be activated.</source>
<translation>已選的 esp (在下表中) 將會被放入 Mod 的子目錄裡,在遊戲裡將會變得“不可見”,並且之後就不能再被激活了。</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="321"/>
+ <location filename="modinfodialog.ui" line="319"/>
<source>Move a file to the data directory.</source>
<translation>移動一個檔案到 Data 目錄。</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="324"/>
+ <location filename="modinfodialog.ui" line="322"/>
<source>This moves a esp to the esp directory so it can be enabled in the main window. Please note that the ESP merely becomes &quot;available&quot;, it will not necessarily be loaded! That is configured in the main window of omo.</source>
<translation>移動一個 esp 檔案到 esp 目錄,這樣它就可以在主窗口中啟用了。請注意: ESP 只是變得“可用”,它并不一定會被載入!想要载入请在 MO 的主窗口中勾選。</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="359"/>
+ <location filename="modinfodialog.ui" line="357"/>
<source>ESPs in the data directory and thus visible to the game.</source>
<translation>ESP 在 Data 目錄,因此它在游戲裡會變得可見。</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="362"/>
+ <location filename="modinfodialog.ui" line="360"/>
<source>These are the mod files that are in the (virtual) data directory of your game and will thus be selecteable in the esp list in the main window.</source>
<translation>這些 Mod 檔案位於您游戲的 (虛擬) Data 目錄裡,因此它們在主窗口的 esp 列表中會變得可選。</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="369"/>
+ <location filename="modinfodialog.ui" line="367"/>
<source>Available ESPs</source>
<translation>可用 ESP</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="377"/>
+ <location filename="modinfodialog.ui" line="375"/>
<source>Conflicts</source>
<translation>衝突</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="385"/>
+ <location filename="modinfodialog.ui" line="383"/>
<source>The following conflicted files are provided by this mod</source>
<translation>以下衝突檔案由此 Mod 提供</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="432"/>
- <location filename="modinfodialog.ui" line="479"/>
+ <location filename="modinfodialog.ui" line="433"/>
+ <location filename="modinfodialog.ui" line="483"/>
<source>File</source>
<translation>檔案</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="437"/>
+ <location filename="modinfodialog.ui" line="438"/>
<source>Overwritten Mods</source>
<translation>覆蓋的 Mod</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="447"/>
+ <location filename="modinfodialog.ui" line="448"/>
<source>The following conflicted files are provided by other mods</source>
<translation>以下衝突檔案由其它 Mod 提供</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="484"/>
+ <location filename="modinfodialog.ui" line="488"/>
<source>Providing Mod</source>
<translation>提供的 Mod</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="494"/>
+ <location filename="modinfodialog.ui" line="498"/>
<source>Non-Conflicted files</source>
<translation>非衝突檔案</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="514"/>
+ <location filename="modinfodialog.ui" line="518"/>
<source>Categories</source>
<translation>類別</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="537"/>
+ <location filename="modinfodialog.ui" line="541"/>
<source>Primary Category</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="554"/>
+ <location filename="modinfodialog.ui" line="558"/>
<source>Nexus Info</source>
<translation>N網訊息</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="562"/>
+ <location filename="modinfodialog.ui" line="566"/>
<source>Mod ID</source>
<translation>Mod ID</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="569"/>
+ <location filename="modinfodialog.ui" line="573"/>
<source>Mod ID for this mod on Nexus.</source>
<translation>N網上此 Mod 的 ID。</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="572"/>
+ <location filename="modinfodialog.ui" line="576"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
@@ -2828,7 +3104,7 @@ p, li { white-space: pre-wrap; }
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;N網上此 Mod 的 ID,如果您在 MO 中下載並安裝了 Mod 它將被自動填寫,否則您需要手動輸入。要找到正確的 ID,在N網找到 Mod。比如,像這樣的連結: &lt;a href=&quot; http://www.skyrimnexus.com/downloads/file.php?id=1334&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;http://www.skyrimnexus.com/downloads/file.php?id=1334&lt;/span&gt;&lt;/a&gt; 在上面的例子中,1334就是您要找的 ID。此外: 上面的就是 Mod Organizer 在N網的連結,為什麼不現在就到那裡去贊同我呢?&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="596"/>
+ <location filename="modinfodialog.ui" line="600"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
@@ -2841,32 +3117,31 @@ p, li { white-space: pre-wrap; }
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:9pt;&quot;&gt;Mod 的已安裝版本,滑鼠提示將顯示N網上的當前版本,已安裝的版本號只有在您通過 MO 來安裝 Mod 的時候才會自動填寫。&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="603"/>
+ <location filename="modinfodialog.ui" line="607"/>
<source>Version</source>
<translation>版本</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="633"/>
+ <location filename="modinfodialog.ui" line="637"/>
<source>Refresh</source>
<translation type="unfinished">重新整理</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="636"/>
+ <location filename="modinfodialog.ui" line="640"/>
<source>Refresh all information from Nexus.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="650"/>
+ <location filename="modinfodialog.ui" line="654"/>
<source>Description</source>
<translation>描述</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="665"/>
+ <location filename="modinfodialog.ui" line="669"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
-&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
@@ -2887,20 +3162,21 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">類型</translation>
</message>
<message>
+ <location filename="modinfodialog.cpp" line="1221"/>
<source>Name</source>
- <translation type="obsolete">名稱</translation>
+ <translation type="unfinished">名稱</translation>
</message>
<message>
<source>Size (kB)</source>
<translation type="obsolete">大小 (KB)</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="701"/>
+ <location filename="modinfodialog.ui" line="704"/>
<source>Endorse</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="715"/>
+ <location filename="modinfodialog.ui" line="718"/>
<source>Notes</source>
<translation type="unfinished"></translation>
</message>
@@ -2913,17 +3189,17 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">您支持過這個 Mod 了嗎?</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="725"/>
+ <location filename="modinfodialog.ui" line="728"/>
<source>Filetree</source>
<translation>檔案樹</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="734"/>
+ <location filename="modinfodialog.ui" line="737"/>
<source>A directory view of this mod</source>
<translation>這個 Mod 的目錄視圖</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="737"/>
+ <location filename="modinfodialog.ui" line="740"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
@@ -2938,53 +3214,53 @@ p, li { white-space: pre-wrap; }
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:9pt;&quot;&gt;所做的更改將會立即作用於磁碟上的檔案,所以請&lt;/span&gt;&lt;span style=&quot; font-size:9pt; font-weight:600;&quot;&gt;謹慎操作&lt;/span&gt;&lt;span style=&quot; font-size:9pt;&quot;&gt;。&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="764"/>
+ <location filename="modinfodialog.ui" line="767"/>
<source>Previous</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="771"/>
+ <location filename="modinfodialog.ui" line="774"/>
<source>Next</source>
<translation type="unfinished">下一步</translation>
</message>
<message>
- <location filename="modinfodialog.ui" line="791"/>
+ <location filename="modinfodialog.ui" line="794"/>
<source>Close</source>
<translation>關閉</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="108"/>
+ <location filename="modinfodialog.cpp" line="104"/>
<source>&amp;Delete</source>
<translation>&amp;刪除</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="109"/>
+ <location filename="modinfodialog.cpp" line="105"/>
<source>&amp;Rename</source>
<translation>&amp;重新命名</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="110"/>
+ <location filename="modinfodialog.cpp" line="106"/>
<source>&amp;Hide</source>
<translation>&amp;隱藏</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="111"/>
+ <location filename="modinfodialog.cpp" line="107"/>
<source>&amp;Unhide</source>
<translation>&amp;取消隱藏</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="112"/>
+ <location filename="modinfodialog.cpp" line="108"/>
<source>&amp;Open</source>
<translation>&amp;開啟</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="113"/>
+ <location filename="modinfodialog.cpp" line="109"/>
<source>&amp;New Folder</source>
<translation>&amp;新增資料夾</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="352"/>
- <location filename="modinfodialog.cpp" line="367"/>
+ <location filename="modinfodialog.cpp" line="405"/>
+ <location filename="modinfodialog.cpp" line="420"/>
<source>Save changes?</source>
<translation>儲存更改嗎?</translation>
</message>
@@ -2993,79 +3269,79 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">儲存更改到 &quot;%1&quot;?</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="563"/>
+ <location filename="modinfodialog.cpp" line="612"/>
<source>File Exists</source>
<translation>檔案已存在</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="563"/>
+ <location filename="modinfodialog.cpp" line="612"/>
<source>A file with that name exists, please enter a new one</source>
<translation>檔案名已存在,請輸入其它名稱</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="580"/>
+ <location filename="modinfodialog.cpp" line="629"/>
<source>failed to move file</source>
<translation>無法移動檔案</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="605"/>
+ <location filename="modinfodialog.cpp" line="654"/>
<source>failed to create directory &quot;optional&quot;</source>
<translation>無法建立 &quot;optional&quot; 目錄</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="643"/>
- <location filename="modinfodialog.cpp" line="1155"/>
+ <location filename="modinfodialog.cpp" line="692"/>
+ <location filename="modinfodialog.cpp" line="1198"/>
<source>Info requested, please wait</source>
<translation>請求訊息已發出,請稍後</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="758"/>
+ <location filename="modinfodialog.cpp" line="807"/>
<source>(description incomplete, please visit nexus)</source>
<translation>(描述訊息不完整,請訪問N網)</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="713"/>
+ <location filename="modinfodialog.cpp" line="762"/>
<source>Current Version: %1</source>
<translation>當前版本: %1</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="717"/>
+ <location filename="modinfodialog.cpp" line="766"/>
<source>No update available</source>
<translation>沒有可用的更新</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="697"/>
+ <location filename="modinfodialog.cpp" line="746"/>
<source>Main</source>
<translation>主要檔案</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="352"/>
- <location filename="modinfodialog.cpp" line="367"/>
+ <location filename="modinfodialog.cpp" line="405"/>
+ <location filename="modinfodialog.cpp" line="420"/>
<source>Save changes to &quot;%1&quot;?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="698"/>
+ <location filename="modinfodialog.cpp" line="747"/>
<source>Update</source>
<translation>更新</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="699"/>
+ <location filename="modinfodialog.cpp" line="748"/>
<source>Optional</source>
<translation>可選檔案</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="700"/>
+ <location filename="modinfodialog.cpp" line="749"/>
<source>Old</source>
<translation>舊檔</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="701"/>
+ <location filename="modinfodialog.cpp" line="750"/>
<source>Misc</source>
<translation>雜項</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="702"/>
+ <location filename="modinfodialog.cpp" line="751"/>
<source>Unknown</source>
<translation>未知</translation>
</message>
@@ -3074,13 +3350,13 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">請求失敗: %1</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="779"/>
+ <location filename="modinfodialog.cpp" line="822"/>
<source>&lt;a href=&quot;%1&quot;&gt;Visit on Nexus&lt;/a&gt;</source>
<translation>&lt;a href=&quot;%1&quot;&gt;訪問N網&lt;/a&gt;</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="869"/>
- <location filename="modinfodialog.cpp" line="874"/>
+ <location filename="modinfodialog.cpp" line="912"/>
+ <location filename="modinfodialog.cpp" line="917"/>
<source>Confirm</source>
<translation>確認</translation>
</message>
@@ -3097,85 +3373,110 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">例外: %1</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="858"/>
+ <location filename="modinfodialog.cpp" line="901"/>
<source>Failed to delete %1</source>
<translation>無法刪除 %1</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="869"/>
+ <location filename="modinfodialog.cpp" line="912"/>
<source>Are sure you want to delete &quot;%1&quot;?</source>
<translation>確定要刪除 &quot;%1&quot; 嗎?</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="874"/>
+ <location filename="modinfodialog.cpp" line="917"/>
<source>Are sure you want to delete the selected files?</source>
<translation>確定要刪除所選的檔案嗎?</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="948"/>
- <location filename="modinfodialog.cpp" line="954"/>
+ <location filename="modinfodialog.cpp" line="991"/>
+ <location filename="modinfodialog.cpp" line="997"/>
<source>New Folder</source>
<translation>新增資料夾</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="960"/>
+ <location filename="modinfodialog.cpp" line="1003"/>
<source>Failed to create &quot;%1&quot;</source>
<translation>無法建立 &quot;%1&quot;</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="1064"/>
- <location filename="modinfodialog.cpp" line="1088"/>
+ <location filename="modinfodialog.cpp" line="1107"/>
+ <location filename="modinfodialog.cpp" line="1131"/>
<source>Replace file?</source>
<translation>取代檔案?</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="1064"/>
+ <location filename="modinfodialog.cpp" line="1107"/>
<source>There already is a hidden version of this file. Replace it?</source>
<translation>已存在同名檔案,但該檔案被隱藏了。確定要覆蓋嗎?</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="1067"/>
- <location filename="modinfodialog.cpp" line="1091"/>
+ <location filename="modinfodialog.cpp" line="1110"/>
+ <location filename="modinfodialog.cpp" line="1134"/>
<source>File operation failed</source>
<translation>檔案操作錯誤</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="1067"/>
- <location filename="modinfodialog.cpp" line="1091"/>
+ <location filename="modinfodialog.cpp" line="1110"/>
+ <location filename="modinfodialog.cpp" line="1134"/>
<source>Failed to remove &quot;%1&quot;. Maybe you lack the required file permissions?</source>
<translation>無法移除 &quot;%1&quot;。也許您需要足夠的檔案權限?</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="1078"/>
- <location filename="modinfodialog.cpp" line="1101"/>
+ <location filename="modinfodialog.cpp" line="1121"/>
+ <location filename="modinfodialog.cpp" line="1144"/>
<source>failed to rename %1 to %2</source>
<translation>無法重新命名 %1 為 %2</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="1088"/>
+ <location filename="modinfodialog.cpp" line="1131"/>
<source>There already is a visible version of this file. Replace it?</source>
<translation>已存在同名檔案。確定要覆蓋嗎?</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="1135"/>
+ <location filename="modinfodialog.cpp" line="1178"/>
<source>Un-Hide</source>
<translation>取消隱藏</translation>
</message>
<message>
- <location filename="modinfodialog.cpp" line="1137"/>
+ <location filename="modinfodialog.cpp" line="1180"/>
<source>Hide</source>
<translation>隱藏</translation>
</message>
+ <message>
+ <location filename="modinfodialog.cpp" line="1221"/>
+ <source>Please enter a name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="modinfodialog.cpp" line="1225"/>
+ <location filename="modinfodialog.cpp" line="1228"/>
+ <source>Error</source>
+ <translation type="unfinished">錯誤</translation>
+ </message>
+ <message>
+ <location filename="modinfodialog.cpp" line="1225"/>
+ <source>Invalid name. Must be a valid file name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="modinfodialog.cpp" line="1228"/>
+ <source>A tweak by that name exists</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="modinfodialog.cpp" line="1240"/>
+ <source>Create Tweak</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>ModInfoOverwrite</name>
<message>
- <location filename="modinfo.h" line="812"/>
<source>Overwrite</source>
- <translation>覆蓋</translation>
+ <translation type="obsolete">覆蓋</translation>
</message>
<message>
- <location filename="modinfo.cpp" line="821"/>
+ <location filename="modinfo.cpp" line="866"/>
<source>This pseudo mod contains files from the virtual data tree that got modified (i.e. by the construction kit)</source>
<translation type="unfinished">此虛擬安裝包內包含來自虛擬 Data 樹的檔案,但檔案發生了變化 (例: 被CK修改了)</translation>
</message>
@@ -3183,17 +3484,17 @@ p, li { white-space: pre-wrap; }
<context>
<name>ModInfoRegular</name>
<message>
- <location filename="modinfo.cpp" line="392"/>
+ <location filename="modinfo.cpp" line="393"/>
<source>failed to write %1/meta.ini: %2</source>
<translation>無法寫入 %1/meta.ini: %2</translation>
</message>
<message>
- <location filename="modinfo.cpp" line="625"/>
+ <location filename="modinfo.cpp" line="661"/>
<source>%1 contains no esp/esm and no asset (textures, meshes, interface, ...) directory</source>
<translation type="unfinished">%1 中未包含 esp 或 esm 和有效的目錄 (textures, meshes, interface, ...)</translation>
</message>
<message>
- <location filename="modinfo.cpp" line="629"/>
+ <location filename="modinfo.cpp" line="665"/>
<source>Categories: &lt;br&gt;</source>
<translation type="unfinished">種類: &lt;br&gt;</translation>
</message>
@@ -3201,7 +3502,7 @@ p, li { white-space: pre-wrap; }
<context>
<name>ModList</name>
<message>
- <location filename="modlist.cpp" line="662"/>
+ <location filename="modlist.cpp" line="776"/>
<source>Confirm</source>
<translation>確認</translation>
</message>
@@ -3218,9 +3519,8 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">無效的行索引 %1</translation>
</message>
<message>
- <location filename="modlist.cpp" line="94"/>
<source>Overwrite</source>
- <translation>覆蓋</translation>
+ <translation type="obsolete">覆蓋</translation>
</message>
<message>
<location filename="modlist.cpp" line="109"/>
@@ -3271,17 +3571,17 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">最高值</translation>
</message>
<message>
- <location filename="modlist.cpp" line="736"/>
+ <location filename="modlist.cpp" line="850"/>
<source>Category of the mod.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="737"/>
+ <location filename="modlist.cpp" line="851"/>
<source>Id of the mod as used on Nexus.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="738"/>
+ <location filename="modlist.cpp" line="852"/>
<source>Emblemes to highlight things that might require attention.</source>
<translation type="unfinished"></translation>
</message>
@@ -3290,7 +3590,7 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">%1 中未包含 esp 或 esm 和有效的目錄 (textures, meshes, interface, ...)</translation>
</message>
<message>
- <location filename="modlist.cpp" line="298"/>
+ <location filename="modlist.cpp" line="318"/>
<source>Categories: &lt;br&gt;</source>
<translation>種類: &lt;br&gt;</translation>
</message>
@@ -3299,9 +3599,10 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">此虛擬安裝包內包含來自虛擬 Data 樹的檔案,但檔案發生了變化 (例: 被CK修改了)</translation>
</message>
<message>
- <location filename="modlist.cpp" line="294"/>
- <source>installed version: %1, newest version: %2</source>
- <translation>當前版本: %1,最新版本: %2</translation>
+ <location filename="modlist.cpp" line="308"/>
+ <source>installed version: &quot;%1&quot;, newest version: &quot;%2&quot;</source>
+ <oldsource>installed version: %1, newest version: %2</oldsource>
+ <translation type="unfinished">當前版本: %1,最新版本: %2</translation>
</message>
<message>
<source>Name</source>
@@ -3312,83 +3613,88 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">Mod 名稱</translation>
</message>
<message>
- <location filename="modlist.cpp" line="719"/>
+ <location filename="modlist.cpp" line="833"/>
<source>Version</source>
<translation>版本</translation>
</message>
<message>
- <location filename="modlist.cpp" line="733"/>
+ <location filename="modlist.cpp" line="847"/>
<source>Version of the mod (if available)</source>
<translation>Mod 版本 (如果可用)</translation>
</message>
<message>
- <location filename="modlist.cpp" line="720"/>
+ <location filename="modlist.cpp" line="834"/>
<source>Priority</source>
<translation>優先級</translation>
</message>
<message>
- <location filename="modlist.cpp" line="184"/>
+ <location filename="modlist.cpp" line="197"/>
<source>invalid</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="327"/>
+ <location filename="modlist.cpp" line="310"/>
+ <source>The newest version on Nexus seems to be older than the one you have installed. This could either mean the version you have has been withdrawn (i.e. due to a bug) or the author uses a non-standard versioning scheme and that newest version is actually newer. Either way you may want to &quot;upgrade&quot;.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="modlist.cpp" line="347"/>
<source>Invalid name</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="603"/>
+ <location filename="modlist.cpp" line="717"/>
<source>drag&amp;drop failed: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="717"/>
+ <location filename="modlist.cpp" line="831"/>
<source>Flags</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="718"/>
+ <location filename="modlist.cpp" line="832"/>
<source>Mod Name</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="721"/>
+ <location filename="modlist.cpp" line="835"/>
<source>Category</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="722"/>
+ <location filename="modlist.cpp" line="836"/>
<source>Nexus ID</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="723"/>
+ <location filename="modlist.cpp" line="837"/>
<source>Installation</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="724"/>
- <location filename="modlist.cpp" line="740"/>
+ <location filename="modlist.cpp" line="838"/>
+ <location filename="modlist.cpp" line="854"/>
<source>unknown</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="732"/>
+ <location filename="modlist.cpp" line="846"/>
<source>Name of your mods</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="734"/>
+ <location filename="modlist.cpp" line="848"/>
<source>Installation priority of your mod. The higher, the more &quot;important&quot; it is and thus overwrites files from mods with lower priority.</source>
<translation>Mod 的安裝優先級。越高就表示越“重要”,從而覆蓋掉低優先級的 Mod 檔案。</translation>
</message>
<message>
- <location filename="modlist.cpp" line="739"/>
+ <location filename="modlist.cpp" line="853"/>
<source>Time this mod was installed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="modlist.cpp" line="662"/>
+ <location filename="modlist.cpp" line="776"/>
<source>Are you sure you want to remove &quot;%1&quot;?</source>
<translation>確定要移除 &quot;%1&quot; 吗?</translation>
</message>
@@ -3424,12 +3730,12 @@ p, li { white-space: pre-wrap; }
<context>
<name>MyFileSystemModel</name>
<message>
- <location filename="overwriteinfodialog.cpp" line="48"/>
+ <location filename="overwriteinfodialog.cpp" line="47"/>
<source>Overwrites</source>
<translation>覆蓋</translation>
</message>
<message>
- <location filename="overwriteinfodialog.cpp" line="60"/>
+ <location filename="overwriteinfodialog.cpp" line="59"/>
<source>not implemented</source>
<translation>未實現</translation>
</message>
@@ -3438,11 +3744,16 @@ p, li { white-space: pre-wrap; }
<name>NXMAccessManager</name>
<message>
<location filename="nxmaccessmanager.cpp" line="130"/>
+ <source>Logging into Nexus</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="nxmaccessmanager.cpp" line="145"/>
<source>timeout</source>
<translation>超時</translation>
</message>
<message>
- <location filename="nxmaccessmanager.cpp" line="168"/>
+ <location filename="nxmaccessmanager.cpp" line="185"/>
<source>Please check your password</source>
<translation>請檢查您的密碼</translation>
</message>
@@ -3492,17 +3803,17 @@ p, li { white-space: pre-wrap; }
<context>
<name>NexusInterface</name>
<message>
- <location filename="nexusinterface.cpp" line="201"/>
+ <location filename="nexusinterface.cpp" line="218"/>
<source>Failed to guess mod id for &quot;%1&quot;, please pick the correct one</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="nexusinterface.cpp" line="421"/>
+ <location filename="nexusinterface.cpp" line="455"/>
<source>empty response</source>
<translation>未回應</translation>
</message>
<message>
- <location filename="nexusinterface.cpp" line="450"/>
+ <location filename="nexusinterface.cpp" line="483"/>
<source>invalid response</source>
<translation>無效的回應</translation>
</message>
@@ -4429,34 +4740,34 @@ Right now this has very limited functionality</source>
<translation>&amp;新增資料夾</translation>
</message>
<message>
- <location filename="overwriteinfodialog.cpp" line="137"/>
+ <location filename="overwriteinfodialog.cpp" line="136"/>
<source>Failed to delete &quot;%1&quot;</source>
<translation>無法刪除 &quot;%1&quot;</translation>
</message>
<message>
- <location filename="overwriteinfodialog.cpp" line="148"/>
- <location filename="overwriteinfodialog.cpp" line="153"/>
+ <location filename="overwriteinfodialog.cpp" line="147"/>
+ <location filename="overwriteinfodialog.cpp" line="152"/>
<source>Confirm</source>
<translation>確認</translation>
</message>
<message>
- <location filename="overwriteinfodialog.cpp" line="148"/>
+ <location filename="overwriteinfodialog.cpp" line="147"/>
<source>Are sure you want to delete &quot;%1&quot;?</source>
<translation>確定要刪除 &quot;%1&quot; 嗎?</translation>
</message>
<message>
- <location filename="overwriteinfodialog.cpp" line="153"/>
+ <location filename="overwriteinfodialog.cpp" line="152"/>
<source>Are sure you want to delete the selected files?</source>
<translation>確定要刪除所選的檔案嗎?</translation>
</message>
<message>
- <location filename="overwriteinfodialog.cpp" line="203"/>
- <location filename="overwriteinfodialog.cpp" line="209"/>
+ <location filename="overwriteinfodialog.cpp" line="202"/>
+ <location filename="overwriteinfodialog.cpp" line="208"/>
<source>New Folder</source>
<translation>新增資料夾</translation>
</message>
<message>
- <location filename="overwriteinfodialog.cpp" line="215"/>
+ <location filename="overwriteinfodialog.cpp" line="214"/>
<source>Failed to create &quot;%1&quot;</source>
<translation>無法建立 &quot;%1&quot;</translation>
</message>
@@ -4468,70 +4779,93 @@ Right now this has very limited functionality</source>
<translation type="obsolete">ESP 檔案沒有找到: %1</translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="98"/>
+ <location filename="pluginlist.cpp" line="111"/>
<source>Mod Index</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="99"/>
- <location filename="pluginlist.cpp" line="111"/>
+ <location filename="pluginlist.cpp" line="112"/>
+ <source>Flags</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="pluginlist.cpp" line="113"/>
+ <location filename="pluginlist.cpp" line="125"/>
<source>unknown</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="107"/>
+ <location filename="pluginlist.cpp" line="121"/>
<source>Name of your mods</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="108"/>
+ <location filename="pluginlist.cpp" line="122"/>
<source>Load priority of your mod. The higher, the more &quot;important&quot; it is and thus overwrites data from plugins with lower priority.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="110"/>
+ <location filename="pluginlist.cpp" line="124"/>
<source>The modindex determins the formids of objects originating from this mods.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="208"/>
+ <location filename="pluginlist.cpp" line="165"/>
+ <source>failed to update esp info for file %1 (source id: %2), error: %3</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="pluginlist.cpp" line="233"/>
<source>esp not found: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="215"/>
- <location filename="pluginlist.cpp" line="227"/>
+ <location filename="pluginlist.cpp" line="240"/>
+ <location filename="pluginlist.cpp" line="252"/>
<source>Confirm</source>
<translation type="unfinished">確認</translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="215"/>
+ <location filename="pluginlist.cpp" line="240"/>
<source>Really enable all plugins?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="227"/>
+ <location filename="pluginlist.cpp" line="252"/>
<source>Really disable all plugins?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="353"/>
+ <location filename="pluginlist.cpp" line="380"/>
<source>The file containing locked plugin indices is broken</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="366"/>
- <location filename="pluginlist.cpp" line="405"/>
<source>failed to open output file: %1</source>
- <translation>無法開啟輸出檔案: %1</translation>
+ <translation type="obsolete">無法開啟輸出檔案: %1</translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="393"/>
+ <location filename="pluginlist.cpp" line="418"/>
<source>Some of your plugins have invalid names! These plugins can not be loaded by the game. Please see mo_interface.log for a list of affected plugins and rename them.</source>
<translation>您的一些插件名稱無效!這些插件無法被遊戲載入。請查看 mo_interface.log 來確認那些受影響的插件並重新命名它們。</translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="737"/>
+ <location filename="pluginlist.cpp" line="644"/>
+ <source>BOSS dll incompatible</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="pluginlist.cpp" line="987"/>
+ <source>Missing Masters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="pluginlist.cpp" line="993"/>
+ <source>Enabled Masters</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="pluginlist.cpp" line="1134"/>
<source>failed to restore load order for %1</source>
<translation type="unfinished"></translation>
</message>
@@ -4544,17 +4878,17 @@ Right now this has very limited functionality</source>
<translation type="obsolete">最高值</translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="631"/>
+ <location filename="pluginlist.cpp" line="983"/>
<source>This plugin can&apos;t be disabled (enforced by the game)</source>
<translation>這個插件不能被禁用 (由遊戲執行)</translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="633"/>
+ <location filename="pluginlist.cpp" line="985"/>
<source>Origin: %1</source>
<translation>隸屬於: %1</translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="96"/>
+ <location filename="pluginlist.cpp" line="109"/>
<source>Name</source>
<translation>名稱</translation>
</message>
@@ -4563,7 +4897,7 @@ Right now this has very limited functionality</source>
<translation type="obsolete">Mod 名稱</translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="97"/>
+ <location filename="pluginlist.cpp" line="110"/>
<source>Priority</source>
<translation>優先級</translation>
</message>
@@ -4581,6 +4915,19 @@ Right now this has very limited functionality</source>
</message>
</context>
<context>
+ <name>PreviewDialog</name>
+ <message>
+ <location filename="previewdialog.ui" line="14"/>
+ <source>Preview</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="previewdialog.ui" line="78"/>
+ <source>Close</source>
+ <translation type="unfinished">關閉</translation>
+ </message>
+</context>
+<context>
<name>ProblemsDialog</name>
<message>
<location filename="problemsdialog.ui" line="14"/>
@@ -4593,21 +4940,27 @@ Right now this has very limited functionality</source>
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:7.8pt; font-weight:400; font-style:normal;&quot;&gt;
-&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <oldsource>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
+p, li { white-space: pre-wrap; }
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</oldsource>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="problemsdialog.cpp" line="29"/>
- <source>fix</source>
- <translation type="unfinished"></translation>
+ <location filename="problemsdialog.ui" line="75"/>
+ <source>Close</source>
+ <translation type="unfinished">關閉</translation>
</message>
<message>
- <location filename="problemsdialog.cpp" line="30"/>
+ <location filename="problemsdialog.cpp" line="44"/>
+ <location filename="problemsdialog.cpp" line="45"/>
<source>Fix</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="problemsdialog.cpp" line="34"/>
+ <location filename="problemsdialog.cpp" line="49"/>
<source>No guided fix</source>
<translation type="unfinished"></translation>
</message>
@@ -4619,72 +4972,72 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">無法套用 Ini 設定</translation>
</message>
<message>
- <location filename="profile.cpp" line="56"/>
+ <location filename="profile.cpp" line="59"/>
<source>invalid profile name %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="60"/>
+ <location filename="profile.cpp" line="63"/>
<source>failed to create %1</source>
<translation type="unfinished">無法建立 %1</translation>
</message>
<message>
- <location filename="profile.cpp" line="152"/>
- <source>failed to open &quot;%1&quot; for writing</source>
+ <location filename="profile.cpp" line="182"/>
+ <source>failed to write mod list: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="189"/>
+ <location filename="profile.cpp" line="193"/>
<source>failed to update tweaked ini file, wrong settings may be used: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="219"/>
+ <location filename="profile.cpp" line="223"/>
<source>failed to create tweaked ini: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="271"/>
- <location filename="profile.cpp" line="300"/>
- <location filename="profile.cpp" line="384"/>
- <location filename="profile.cpp" line="402"/>
- <location filename="profile.cpp" line="412"/>
+ <location filename="profile.cpp" line="276"/>
+ <location filename="profile.cpp" line="305"/>
+ <location filename="profile.cpp" line="390"/>
+ <location filename="profile.cpp" line="408"/>
+ <location filename="profile.cpp" line="418"/>
<source>invalid index %1</source>
<translation>無效的索引 %1</translation>
</message>
<message>
- <location filename="profile.cpp" line="365"/>
+ <location filename="profile.cpp" line="371"/>
<source>Overwrite directory couldn&apos;t be parsed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="374"/>
+ <location filename="profile.cpp" line="380"/>
<source>invalid priority %1</source>
<translation>無效的優先級 %1</translation>
</message>
<message>
- <location filename="profile.cpp" line="561"/>
+ <location filename="profile.cpp" line="568"/>
<source>failed to parse ini file (%1)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="589"/>
+ <location filename="profile.cpp" line="596"/>
<source>failed to parse ini file (%1): %2</source>
<translation>無法解析 Ini 檔案 (%1): %2</translation>
</message>
<message>
- <location filename="profile.cpp" line="613"/>
- <location filename="profile.cpp" line="650"/>
+ <location filename="profile.cpp" line="620"/>
+ <location filename="profile.cpp" line="657"/>
<source>failed to modify &quot;%1&quot;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="678"/>
+ <location filename="profile.cpp" line="685"/>
<source>Delete savegames?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profile.cpp" line="679"/>
+ <location filename="profile.cpp" line="686"/>
<source>Do you want to delete local savegames? (If you select &quot;No&quot;, the save games will show up again if you re-enable local savegames)</source>
<translation type="unfinished"></translation>
</message>
@@ -4900,37 +5253,61 @@ p, li { white-space: pre-wrap; }
<translation>請輸入配置檔案的名稱</translation>
</message>
<message>
- <location filename="profilesdialog.cpp" line="160"/>
+ <location filename="profilesdialog.cpp" line="162"/>
<source>failed to copy profile: %1</source>
<translation>無法複製配置檔案: %1</translation>
</message>
<message>
- <location filename="profilesdialog.cpp" line="167"/>
+ <location filename="profilesdialog.cpp" line="165"/>
+ <source>Invalid name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="profilesdialog.cpp" line="165"/>
+ <source>Invalid profile name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="profilesdialog.cpp" line="172"/>
<source>Confirm</source>
<translation>確認</translation>
</message>
<message>
- <location filename="profilesdialog.cpp" line="167"/>
+ <location filename="profilesdialog.cpp" line="172"/>
+ <source>Are you sure you want to remove this profile (including local savegames if any)?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="profilesdialog.cpp" line="182"/>
+ <source>Profile broken</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="profilesdialog.cpp" line="183"/>
+ <source>This profile you&apos;re about to delete seems to be broken or the path is invalid. I&apos;m about to delete the following folder: &quot;%1&quot;. Proceed?</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
<source>Are you sure you want to remove this profile?</source>
- <translation>確定要移除這個配置嗎?</translation>
+ <translation type="obsolete">確定要移除這個配置嗎?</translation>
</message>
<message>
- <location filename="profilesdialog.cpp" line="196"/>
+ <location filename="profilesdialog.cpp" line="215"/>
<source>Rename Profile</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profilesdialog.cpp" line="196"/>
+ <location filename="profilesdialog.cpp" line="215"/>
<source>New Name</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="profilesdialog.cpp" line="233"/>
+ <location filename="profilesdialog.cpp" line="252"/>
<source>failed to change archive invalidation state: %1</source>
<translation>無法改變檔案無效化狀態: %1</translation>
</message>
<message>
- <location filename="profilesdialog.cpp" line="270"/>
+ <location filename="profilesdialog.cpp" line="289"/>
<source>failed to determine if invalidation is active: %1</source>
<translation>無法確定無效化是否被激活: %1</translation>
</message>
@@ -4938,20 +5315,20 @@ p, li { white-space: pre-wrap; }
<context>
<name>QObject</name>
<message>
- <location filename="categories.cpp" line="133"/>
+ <location filename="categories.cpp" line="141"/>
<source>Failed to save custom categories</source>
<translation>無法儲存自定義類別</translation>
</message>
<message>
- <location filename="categories.cpp" line="210"/>
- <location filename="categories.cpp" line="245"/>
- <location filename="categories.cpp" line="255"/>
- <location filename="categories.cpp" line="265"/>
+ <location filename="categories.cpp" line="218"/>
+ <location filename="categories.cpp" line="253"/>
+ <location filename="categories.cpp" line="263"/>
+ <location filename="categories.cpp" line="273"/>
<source>invalid index %1</source>
<translation>無效的索引 %1</translation>
</message>
<message>
- <location filename="categories.cpp" line="276"/>
+ <location filename="categories.cpp" line="284"/>
<source>invalid category id %1</source>
<translation>無效的類別 %1</translation>
</message>
@@ -4967,7 +5344,7 @@ p, li { white-space: pre-wrap; }
<translation>無法確認帳戶名稱</translation>
</message>
<message>
- <location filename="installationmanager.cpp" line="63"/>
+ <location filename="installationmanager.cpp" line="64"/>
<location filename="selfupdater.cpp" line="52"/>
<source>invalid 7-zip32.dll: %1</source>
<translation>無效的 7-zip32.dll: %1</translation>
@@ -5037,12 +5414,12 @@ p, li { white-space: pre-wrap; }
<translation>無法設定代理DLL加載</translation>
</message>
<message>
- <location filename="profile.cpp" line="93"/>
+ <location filename="profile.cpp" line="96"/>
<source>&quot;%1&quot; is missing</source>
<translation>&quot;%1&quot; 缺失</translation>
</message>
<message>
- <location filename="main.cpp" line="134"/>
+ <location filename="main.cpp" line="139"/>
<source>Permissions required</source>
<translation>需要權限</translation>
</message>
@@ -5051,8 +5428,8 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">當前的用戶帳戶沒有運行 Mod Organizer 所需的訪問權限,必要的修改將會自動進行 (MO 的目錄將會為當前用戶帳戶而變得可寫),您將被請求使用管理員權限執行 &quot;mo_helper.exe&quot;。</translation>
</message>
<message>
- <location filename="main.cpp" line="234"/>
- <location filename="main.cpp" line="272"/>
+ <location filename="main.cpp" line="231"/>
+ <location filename="main.cpp" line="269"/>
<source>Woops</source>
<translation>糟糕</translation>
</message>
@@ -5061,61 +5438,66 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">Mod Organizer 崩潰了!要生成診斷檔案嗎?如果您發送這個檔案到我的郵箱 (sherb@gmx.net) 裡的話,這個 Bug 會很有可能被修復。</translation>
</message>
<message>
- <location filename="main.cpp" line="135"/>
- <source>The current user account doesn&apos;t have the required access rights to run Mod Organizer. The neccessary changes can be made automatically (the MO directory will be made writable for the current user account). You will be asked to run &quot;helper.exe&quot; with administrative rights).</source>
+ <location filename="main.cpp" line="140"/>
+ <source>The current user account doesn&apos;t have the required access rights to run Mod Organizer. The neccessary changes can be made automatically (the MO directory will be made writable for the current user account). You will be asked to run &quot;helper.exe&quot; with administrative rights.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="main.cpp" line="235"/>
+ <location filename="main.cpp" line="232"/>
<source>ModOrganizer has crashed! Should a diagnostic file be created? If you send me this file (%1) to sherb@gmx.net, the bug is a lot more likely to be fixed. Please include a short description of what you were doing when the crash happened</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="main.cpp" line="273"/>
+ <location filename="main.cpp" line="270"/>
<source>ModOrganizer has crashed! Unfortunately I was not able to write a diagnostic file: %1</source>
<translation>Mod Organizer 崩潰了!遺憾的是,我無法生成診斷檔案: %1</translation>
</message>
<message>
- <location filename="main.cpp" line="335"/>
- <location filename="settings.cpp" line="462"/>
+ <location filename="main.cpp" line="332"/>
+ <location filename="settings.cpp" line="542"/>
<source>Mod Organizer</source>
<translation>Mod Organizer</translation>
</message>
<message>
- <location filename="main.cpp" line="335"/>
+ <location filename="main.cpp" line="332"/>
<source>An instance of Mod Organizer is already running</source>
<translation>Mod Organizer 的一個實例正在運行</translation>
</message>
<message>
- <location filename="main.cpp" line="357"/>
+ <location filename="main.cpp" line="354"/>
<source>No game identified in &quot;%1&quot;. The directory is required to contain the game binary and its launcher.</source>
<translation>&quot;%1&quot; 中未檢測到遊戲。請確保該路徑中包含遊戲執行程式以及對應的 Launcher 檔案。</translation>
</message>
<message>
- <location filename="main.cpp" line="360"/>
- <location filename="main.cpp" line="389"/>
+ <location filename="main.cpp" line="357"/>
+ <location filename="main.cpp" line="386"/>
<source>Please select the game to manage</source>
<translation>請選擇想要管理的遊戲</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="752"/>
+ <location filename="main.cpp" line="412"/>
+ <source>Please select the game edition you have (MO can&apos;t start the game correctly if this is set incorrectly!)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="mainwindow.cpp" line="782"/>
<source>Please use &quot;Help&quot; from the toolbar to get usage instructions to all elements</source>
<translation>請使用工具列上的“幫助”來獲得所有元素的使用說明</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1470"/>
- <location filename="mainwindow.cpp" line="3723"/>
+ <location filename="mainwindow.cpp" line="1610"/>
+ <location filename="mainwindow.cpp" line="4216"/>
<source>&lt;Manage...&gt;</source>
<translation>&lt;管理...&gt;</translation>
</message>
<message>
- <location filename="mainwindow.cpp" line="1488"/>
+ <location filename="mainwindow.cpp" line="1628"/>
<source>failed to parse profile %1: %2</source>
<translation>無法解析配置檔案 %1: %2</translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="310"/>
- <location filename="profile.cpp" line="228"/>
+ <location filename="pluginlist.cpp" line="335"/>
+ <location filename="profile.cpp" line="233"/>
<source>failed to find &quot;%1&quot;</source>
<translation>未能找到 &quot;%1&quot;</translation>
</message>
@@ -5124,17 +5506,17 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">編碼錯誤,請向作者彙報此 Bug 並且附上 mo_interface.log 檔案!</translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="467"/>
+ <location filename="pluginlist.cpp" line="491"/>
<source>failed to access %1</source>
<translation>無法訪問 %1</translation>
</message>
<message>
- <location filename="pluginlist.cpp" line="481"/>
+ <location filename="pluginlist.cpp" line="505"/>
<source>failed to set file time %1</source>
<translation>無法設定檔案時間 %1</translation>
</message>
<message>
- <location filename="profile.cpp" line="67"/>
+ <location filename="profile.cpp" line="70"/>
<source>failed to create %1</source>
<translation>無法建立 %1</translation>
</message>
@@ -5170,12 +5552,12 @@ p, li { white-space: pre-wrap; }
<translation>無法開啟 %1</translation>
</message>
<message>
- <location filename="settings.cpp" line="469"/>
+ <location filename="settings.cpp" line="549"/>
<source>Script Extender</source>
<translation>腳本拓展</translation>
</message>
<message>
- <location filename="settings.cpp" line="476"/>
+ <location filename="settings.cpp" line="556"/>
<source>Proxy DLL</source>
<translation>代理DLL</translation>
</message>
@@ -5200,22 +5582,22 @@ Start elevated anyway? (you will be asked if you want to allow ModOrganizer.exe
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="spawn.cpp" line="128"/>
+ <location filename="spawn.cpp" line="129"/>
<source>failed to spawn &quot;%1&quot;: %2</source>
<translation>無法生成 &quot;%1&quot;: %2</translation>
</message>
<message>
- <location filename="spawn.cpp" line="137"/>
+ <location filename="spawn.cpp" line="138"/>
<source>&quot;%1&quot; doesn&apos;t exist</source>
<translation>&quot;%1&quot; 不存在</translation>
</message>
<message>
- <location filename="spawn.cpp" line="144"/>
+ <location filename="spawn.cpp" line="145"/>
<source>failed to inject dll into &quot;%1&quot;: %2</source>
<translation>無法注入 dll 到 &quot;%1&quot;: %2</translation>
</message>
<message>
- <location filename="spawn.cpp" line="152"/>
+ <location filename="spawn.cpp" line="153"/>
<source>failed to run &quot;%1&quot;</source>
<translation>無法運行 &quot;%1&quot;</translation>
</message>
@@ -5276,6 +5658,11 @@ Start elevated anyway? (you will be asked if you want to allow ModOrganizer.exe
<source>invalid game type %1</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <location filename="safewritefile.cpp" line="32"/>
+ <source>failed to open temporary file</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>QueryOverwriteDialog</name>
@@ -5318,9 +5705,8 @@ Start elevated anyway? (you will be asked if you want to allow ModOrganizer.exe
<context>
<name>QuestionBoxMemory</name>
<message>
- <location filename="questionboxmemory.ui" line="86"/>
<source>Remember selection</source>
- <translation>記住我的選擇</translation>
+ <translation type="obsolete">記住我的選擇</translation>
</message>
</context>
<context>
@@ -5428,9 +5814,9 @@ Start elevated anyway? (you will be asked if you want to allow ModOrganizer.exe
</message>
<message>
<location filename="selfupdater.cpp" line="116"/>
- <location filename="selfupdater.cpp" line="140"/>
- <location filename="selfupdater.cpp" line="269"/>
- <location filename="selfupdater.cpp" line="417"/>
+ <location filename="selfupdater.cpp" line="139"/>
+ <location filename="selfupdater.cpp" line="268"/>
+ <location filename="selfupdater.cpp" line="415"/>
<source>Update</source>
<translation>更新</translation>
</message>
@@ -5440,57 +5826,57 @@ Start elevated anyway? (you will be asked if you want to allow ModOrganizer.exe
<translation>有可用的更新 (最新版本: %1),您想要安裝它嗎?</translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="141"/>
+ <location filename="selfupdater.cpp" line="140"/>
<source>Download in progress</source>
<translation>正在下載</translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="196"/>
+ <location filename="selfupdater.cpp" line="195"/>
<source>Download failed: %1</source>
<translation>下載失敗: %1</translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="207"/>
+ <location filename="selfupdater.cpp" line="206"/>
<source>Failed to install update: %1</source>
<translation>無法安裝更新: %1</translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="228"/>
+ <location filename="selfupdater.cpp" line="227"/>
<source>failed to open archive &quot;%1&quot;: %2</source>
<translation>無法開啟壓縮包 &quot;%1&quot;: %2</translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="251"/>
+ <location filename="selfupdater.cpp" line="250"/>
<source>failed to move outdated files: %1. Please update manually.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="269"/>
+ <location filename="selfupdater.cpp" line="268"/>
<source>Update installed, Mod Organizer will now be restarted.</source>
<translation>更新完成,Mod Organizer 現在將重新啟動。</translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="297"/>
+ <location filename="selfupdater.cpp" line="296"/>
<source>Error</source>
<translation>錯誤</translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="353"/>
+ <location filename="selfupdater.cpp" line="351"/>
<source>Failed to parse response. Please report this as a bug and include the file mo_interface.log.</source>
<translation>解析回應時發生錯誤。請回報此 Bug 並附上 mo_interface.log!</translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="418"/>
+ <location filename="selfupdater.cpp" line="416"/>
<source>No incremental update available for this version, the complete package needs to be downloaded (%1 kB)</source>
<translation>沒有可用于此版本的更新檔案,需要下載完整的安裝包 (%1 KB)</translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="427"/>
+ <location filename="selfupdater.cpp" line="425"/>
<source>no file for update found. Please update manually.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="461"/>
+ <location filename="selfupdater.cpp" line="460"/>
<source>No download server available. Please try again later.</source>
<translation type="unfinished">沒有可用的下載伺服器,請稍後再嘗試下載。</translation>
</message>
@@ -5499,7 +5885,7 @@ Start elevated anyway? (you will be asked if you want to allow ModOrganizer.exe
<translation type="obsolete">未找到更新檔案</translation>
</message>
<message>
- <location filename="selfupdater.cpp" line="441"/>
+ <location filename="selfupdater.cpp" line="440"/>
<source>Failed to retrieve update information: %1</source>
<translation>無法檢索更新信息: %1</translation>
</message>
@@ -5507,26 +5893,22 @@ Start elevated anyway? (you will be asked if you want to allow ModOrganizer.exe
<context>
<name>Settings</name>
<message>
- <location filename="settings.cpp" line="278"/>
- <source>setting for invalid plugin &quot;%1&quot; requested</source>
- <translation type="unfinished"></translation>
+ <source>Administrative rights required to change this.</source>
+ <translation type="obsolete">需要管理員的權限來更改這個。</translation>
</message>
<message>
- <location filename="settings.cpp" line="282"/>
- <source>invalid setting &quot;%1&quot; requested for plugin &quot;%2&quot;</source>
+ <location filename="settings.cpp" line="320"/>
+ <location filename="settings.cpp" line="339"/>
+ <source>attempt to store setting for unknown plugin &quot;%1&quot;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Administrative rights required to change this.</source>
- <translation type="obsolete">需要管理員的權限來更改這個。</translation>
- </message>
- <message>
- <location filename="settings.cpp" line="573"/>
+ <location filename="settings.cpp" line="660"/>
<source>Confirm</source>
<translation>確認</translation>
</message>
<message>
- <location filename="settings.cpp" line="573"/>
+ <location filename="settings.cpp" line="660"/>
<source>Changing the mod directory affects all your profiles! Mods not present (or named differently) in the new location will be disabled in all profiles. There is no way to undo this unless you backed up your profiles manually. Proceed?</source>
<translation>修改 Mod 目錄將會影響您的配置!新目錄中不存在 (或者名稱不同) 的 Mod 將在所有配置中被禁止掉。此操作無法撤銷,所以執行此操作前建議先備份下自己的配置。立即執行?</translation>
</message>
@@ -5675,47 +6057,57 @@ p, li { white-space: pre-wrap; }
<translation>配置 Mod 類別</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="321"/>
+ <location filename="settingsdialog.ui" line="318"/>
<source>Disable automatic internet features</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="324"/>
+ <location filename="settingsdialog.ui" line="321"/>
<source>Disable automatic internet features. This does not affect features that are explicitly invoked by the user (like checking mods for updates, endorsing, opening the web browser)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="327"/>
+ <location filename="settingsdialog.ui" line="324"/>
<source>Offline Mode</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="334"/>
+ <location filename="settingsdialog.ui" line="331"/>
<source>Use a proxy for network connections.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="337"/>
+ <location filename="settingsdialog.ui" line="334"/>
<source>Use a proxy for network connections. This uses the system-wide settings which can be configured in Internet Explorer. Please note that MO will start up a few seconds slower on some systems when using a proxy.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="340"/>
+ <location filename="settingsdialog.ui" line="337"/>
<source>Use HTTP Proxy (Uses System Settings)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="351"/>
- <source>Known Servers (Dynamically updated every download)</source>
+ <location filename="settingsdialog.ui" line="346"/>
+ <source>Associate with &quot;Download with manager&quot; links</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="settingsdialog.ui" line="375"/>
+ <source>Known Servers (updated on download)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="372"/>
+ <location filename="settingsdialog.ui" line="396"/>
<source>Preferred Servers (Drag &amp; Drop)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="594"/>
+ <location filename="settingsdialog.ui" line="536"/>
+ <source>Blacklisted Plugins (use &lt;del&gt; to remove):</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="settingsdialog.ui" line="632"/>
<source>Mod Organizer needs a dll to be injected into the game so all mods are visible to it.
There are several means to do this:
*Mod Organizer* (default) In this mode the Mod Organizer itself injects the dll. The disadvantage is that you always have to start the game through MO or a link created by it.
@@ -5784,12 +6176,12 @@ p, li { white-space: pre-wrap; }
<translation>自動登入</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="285"/>
+ <location filename="settingsdialog.ui" line="282"/>
<source>Username</source>
<translation>帳號</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="299"/>
+ <location filename="settingsdialog.ui" line="296"/>
<source>Password</source>
<translation>密碼</translation>
</message>
@@ -5806,52 +6198,52 @@ p, li { white-space: pre-wrap; }
<translation type="obsolete">首選外部流覽器</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="407"/>
+ <location filename="settingsdialog.ui" line="431"/>
<source>Plugins</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="427"/>
+ <location filename="settingsdialog.ui" line="453"/>
<source>Author:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="441"/>
+ <location filename="settingsdialog.ui" line="467"/>
<source>Version:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="455"/>
+ <location filename="settingsdialog.ui" line="481"/>
<source>Description:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="493"/>
+ <location filename="settingsdialog.ui" line="519"/>
<source>Key</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="498"/>
+ <location filename="settingsdialog.ui" line="524"/>
<source>Value</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="509"/>
+ <location filename="settingsdialog.ui" line="547"/>
<source>Workarounds</source>
<translation>解決方案</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="517"/>
+ <location filename="settingsdialog.ui" line="555"/>
<source>Steam App ID</source>
<translation>Steam App ID</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="537"/>
+ <location filename="settingsdialog.ui" line="575"/>
<source>The Steam AppID for your game</source>
<translation>您遊戲的 Steam AppID</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="540"/>
+ <location filename="settingsdialog.ui" line="578"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
@@ -5878,12 +6270,12 @@ p, li { white-space: pre-wrap; }
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:9pt;&quot;&gt;其中 22380 就是您要找的 ID。&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="571"/>
+ <location filename="settingsdialog.ui" line="609"/>
<source>Load Mechanism</source>
<translation>加載機制</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="591"/>
+ <location filename="settingsdialog.ui" line="629"/>
<source>Select loading mechanism. See help for details.</source>
<translation>選擇加載機制,使用幫助查看更多細節。</translation>
</message>
@@ -5908,17 +6300,17 @@ p, li { white-space: pre-wrap; }
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:9pt; font-weight:600;&quot;&gt;代理DLL&lt;/span&gt;&lt;span style=&quot; font-size:9pt;&quot;&gt; 在這種模式下,MO 將替換一個遊戲的 dll 來加載 MO (當然原來的 dll),這僅適用于 Steam 版本的遊戲,並且只在 Skyrim 上做過測試。請只在其它加載機制不能工作的情況下才使用它。&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="611"/>
+ <location filename="settingsdialog.ui" line="649"/>
<source>NMM Version</source>
<translation>NMM 版本</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="631"/>
+ <location filename="settingsdialog.ui" line="669"/>
<source>The Version of Nexus Mod Manager to impersonate.</source>
<translation>想要模擬的 NMM 版本號。</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="634"/>
+ <location filename="settingsdialog.ui" line="672"/>
<source>Mod Organizer uses an API provided by the Nexus to provide features like checking for updates and downloading files. Unfortunately this API has not been made available officially to third party tools like MO so we have to impersonate the Nexus Mod Manager to be allowed in.
On top of this Nexus has used the client identification to lock out outdated versions of NMM to force users to update. This means that MO also needs to impersonate the new version of NMM even if MO doesn&apos;t need an update. Therefore you can configure the version to identify as here.
Please note that MO does identify itself as MO to the webserver, it&apos;s not lying about what it is. It is merely adding a &quot;compatible&quot; NMM version to the user agent.
@@ -5931,7 +6323,7 @@ tl;dr-version: If Nexus-features don&apos;t work, insert the current version num
變更版本號: 如果N網功能不正常了,那麼請在這裡輸入 NMM 的當前版本號並重試一下。</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="719"/>
+ <location filename="settingsdialog.ui" line="757"/>
<source>These are workarounds for problems with Mod Organizer. Please make sure you read the help text before changing anything here.</source>
<translation type="unfinished"></translation>
</message>
@@ -5944,48 +6336,48 @@ tl;dr-version: If Nexus-features don&apos;t work, insert the current version num
<translation type="obsolete">例如: 0.33.1</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="656"/>
+ <location filename="settingsdialog.ui" line="694"/>
<source>Enforces that inactive ESPs and ESMs are never loaded.</source>
<translation>強制執行,未激活的 ESP 和 ESM 將不會被加載。</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="659"/>
+ <location filename="settingsdialog.ui" line="697"/>
<source>It seems that the Games occasionally load ESP or ESM files even if they haven&apos;t been activated as plugins.
I don&apos;t yet know what the circumstances are, but user reports imply it is in some cases unwanted. If this is checked, ESPs and ESMs not checked in the List are invisible to the game and can not be loaded.</source>
<translation>看來,遊戲偶爾會加載一些沒有被激活成插件的 ESP 或 ESM 檔案。
我還尚不知道它在什麼情況下會這樣,但是有用戶報告說它在某些情況下是很不必要的。如果這個選項被選中,那麼在列表中沒有被勾選的 ESP 和 ESM 將不會在遊戲中出現,並且也不會被載入。</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="663"/>
+ <location filename="settingsdialog.ui" line="701"/>
<source>Hide inactive ESPs/ESMs</source>
<translation>隱藏未激活的 ESP 或 ESM</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="670"/>
+ <location filename="settingsdialog.ui" line="708"/>
<source>If checked, files (i.e. esps, esms and bsas) belonging to the core game can not be disabled in the UI. (default: on)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="673"/>
+ <location filename="settingsdialog.ui" line="711"/>
<source>If checked, files (i.e. esps, esms and bsas) belonging to the core game can not be disabled in the UI. (default: on)
Uncheck this if you want to use Mod Organizer with total conversions (like Nehrim) but be aware that the game will crash if required files are not enabled.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="677"/>
+ <location filename="settingsdialog.ui" line="715"/>
<source>Force-enable game files</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="687"/>
- <location filename="settingsdialog.ui" line="691"/>
+ <location filename="settingsdialog.ui" line="725"/>
+ <location filename="settingsdialog.ui" line="729"/>
<source>For Skyrim, this can be used instead of Archive Invalidation. It should make AI redundant for all Profiles.
For the other games this is not a sufficient replacement for AI!</source>
<translation>對於天際,這個可以用來取代檔案無效化,它將會使档案无效化對所有配置都變得多余。
但是對於其它遊戲,這並不是一個很好的替代品!</translation>
</message>
<message>
- <location filename="settingsdialog.ui" line="695"/>
+ <location filename="settingsdialog.ui" line="733"/>
<source>Back-date BSAs</source>
<translation>重置 BSA 檔案修改日期</translation>
</message>
@@ -5994,27 +6386,27 @@ For the other games this is not a sufficient replacement for AI!</source>
<translation type="obsolete">這些是 Mod Organizer 的問題解決方案。它們通常是不必修改的,請確保在您變更了這裡的任何東西之前已經讀過了幫助文檔。</translation>
</message>
<message>
- <location filename="settingsdialog.cpp" line="89"/>
+ <location filename="settingsdialog.cpp" line="95"/>
<source>Select download directory</source>
<translation>選擇下載目錄</translation>
</message>
<message>
- <location filename="settingsdialog.cpp" line="97"/>
+ <location filename="settingsdialog.cpp" line="103"/>
<source>Select mod directory</source>
<translation>選擇 Mod 目錄</translation>
</message>
<message>
- <location filename="settingsdialog.cpp" line="105"/>
+ <location filename="settingsdialog.cpp" line="111"/>
<source>Select cache directory</source>
<translation>選擇緩存目錄</translation>
</message>
<message>
- <location filename="settingsdialog.cpp" line="113"/>
+ <location filename="settingsdialog.cpp" line="119"/>
<source>Confirm?</source>
<translation>確認?</translation>
</message>
<message>
- <location filename="settingsdialog.cpp" line="114"/>
+ <location filename="settingsdialog.cpp" line="120"/>
<source>This will make all dialogs show up again where you checked the &quot;Remember selection&quot;-box. Continue?</source>
<translation>此操作將導致之前勾選的“記住我的選項”詢問視窗再次出現,確定要重置對話方塊?</translation>
</message>
@@ -6139,9 +6531,13 @@ For the other games this is not a sufficient replacement for AI!</source>
<context>
<name>TransferSavesDialog</name>
<message>
- <location filename="transfersavesdialog.ui" line="14"/>
<source>Dialog</source>
- <translation type="unfinished">對話方塊</translation>
+ <translation type="obsolete">對話方塊</translation>
+ </message>
+ <message>
+ <location filename="transfersavesdialog.ui" line="14"/>
+ <source>Transfer Savegames</source>
+ <translation type="unfinished"></translation>
</message>
<message>
<location filename="transfersavesdialog.ui" line="22"/>
@@ -6161,8 +6557,16 @@ On Windows Vista/Windows 7:
C:\Users\[UserName]\Documents\My Games\Skyrim\Saves
On Windows XP:
- C:\Documents and Settings[UserName]\My Documents\My Games\Skyrim\Saves
+ C:\Documents and Settings\[UserName]\My Documents\My Games\Skyrim\Saves
</source>
+ <oldsource>This is a list of characters in the global location.
+
+On Windows Vista/Windows 7:
+ C:\Users\[UserName]\Documents\My Games\Skyrim\Saves
+
+On Windows XP:
+ C:\Documents and Settings[UserName]\My Documents\My Games\Skyrim\Saves
+</oldsource>
<translation type="unfinished"></translation>
</message>
<message>
diff --git a/src/overwriteinfodialog.cpp b/src/overwriteinfodialog.cpp
index 11e7b552..2ba81633 100644
--- a/src/overwriteinfodialog.cpp
+++ b/src/overwriteinfodialog.cpp
@@ -37,7 +37,6 @@ public:
virtual int columnCount(const QModelIndex &parent) const {
m_RegularColumnCount = QFileSystemModel::columnCount(parent);
-// return m_RegularColumnCount + 1;
return m_RegularColumnCount;
}
@@ -73,7 +72,8 @@ private:
OverwriteInfoDialog::OverwriteInfoDialog(ModInfo::Ptr modInfo, QWidget *parent)
: QDialog(parent), ui(new Ui::OverwriteInfoDialog), m_FileSystemModel(NULL),
- m_DeleteAction(NULL), m_RenameAction(NULL), m_OpenAction(NULL)
+ m_DeleteAction(NULL), m_RenameAction(NULL), m_OpenAction(NULL),
+ m_ModInfo(modInfo)
{
ui->setupUi(this);
@@ -102,7 +102,6 @@ OverwriteInfoDialog::~OverwriteInfoDialog()
delete ui;
}
-
bool OverwriteInfoDialog::recursiveDelete(const QModelIndex &index)
{
for (int childRow = 0; childRow < m_FileSystemModel->rowCount(index); ++childRow) {
diff --git a/src/overwriteinfodialog.h b/src/overwriteinfodialog.h
index a60e0571..34e86219 100644
--- a/src/overwriteinfodialog.h
+++ b/src/overwriteinfodialog.h
@@ -17,51 +17,55 @@ You should have received a copy of the GNU General Public License
along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef OVERWRITEINFODIALOG_H
-#define OVERWRITEINFODIALOG_H
-
-#include "modinfo.h"
-#include <QDialog>
-#include <QFileSystemModel>
-
-namespace Ui {
-class OverwriteInfoDialog;
-}
-
-class OverwriteInfoDialog : public QDialog
-{
- Q_OBJECT
-
-public:
-
- explicit OverwriteInfoDialog(ModInfo::Ptr modInfo, QWidget *parent = 0);
- ~OverwriteInfoDialog();
-
-private:
-
- void openFile(const QModelIndex &index);
- bool recursiveDelete(const QModelIndex &index);
- void deleteFile(const QModelIndex &index);
-
-private slots:
-
- void deleteTriggered();
- void renameTriggered();
- void openTriggered();
- void createDirectoryTriggered();
-
- void on_filesView_customContextMenuRequested(const QPoint &pos);
-
-private:
-
- Ui::OverwriteInfoDialog *ui;
- QFileSystemModel *m_FileSystemModel;
- QModelIndexList m_FileSelection;
- QAction *m_DeleteAction;
- QAction *m_RenameAction;
- QAction *m_OpenAction;
- QAction *m_NewFolderAction;
-
-};
-
-#endif // OVERWRITEINFODIALOG_H
+#ifndef OVERWRITEINFODIALOG_H
+#define OVERWRITEINFODIALOG_H
+
+#include "modinfo.h"
+#include <QDialog>
+#include <QFileSystemModel>
+
+namespace Ui {
+class OverwriteInfoDialog;
+}
+
+class OverwriteInfoDialog : public QDialog
+{
+ Q_OBJECT
+
+public:
+
+ explicit OverwriteInfoDialog(ModInfo::Ptr modInfo, QWidget *parent = 0);
+ ~OverwriteInfoDialog();
+
+ ModInfo::Ptr modInfo() const { return m_ModInfo; }
+
+private:
+
+ void openFile(const QModelIndex &index);
+ bool recursiveDelete(const QModelIndex &index);
+ void deleteFile(const QModelIndex &index);
+
+private slots:
+
+ void deleteTriggered();
+ void renameTriggered();
+ void openTriggered();
+ void createDirectoryTriggered();
+
+ void on_filesView_customContextMenuRequested(const QPoint &pos);
+
+private:
+
+ Ui::OverwriteInfoDialog *ui;
+ QFileSystemModel *m_FileSystemModel;
+ QModelIndexList m_FileSelection;
+ QAction *m_DeleteAction;
+ QAction *m_RenameAction;
+ QAction *m_OpenAction;
+ QAction *m_NewFolderAction;
+
+ ModInfo::Ptr m_ModInfo;
+
+};
+
+#endif // OVERWRITEINFODIALOG_H
diff --git a/src/pdll.h b/src/pdll.h
new file mode 100644
index 00000000..6e1d06f3
--- /dev/null
+++ b/src/pdll.h
@@ -0,0 +1,402 @@
+////////////////////////////////////////////////////////////////////////////////////////////////////
+// Class: PDll //
+// Authors: MicHael Galkovsky //
+// Date: April 14, 1998 //
+// Company: Pervasive Software //
+// Purpose: Base class to wrap dynamic use of dll //
+//////////////////////////////////////////////////////////////////////////////////////////////
+
+#if !defined (_PDLL_H_)
+#define _PDLL_H_
+
+#include <windows.h>
+#include <winbase.h>
+
+#include <windows_error.h>
+#include <tchar.h>
+#include <sstream>
+
+
+#define FUNC_LOADED 3456
+
+//function declarations according to the number of parameters
+//define the type
+//declare a variable of that type
+//declare a member function by the same name as the dll function
+//check for dll handle
+//if this is the first call to the function then try to load it
+//if not then if the function was loaded successfully make a call to it
+//otherwise return a NULL cast to the return parameter.
+
+#define DECLARE_FUNCTION0(CallType, retVal, FuncName) \
+ typedef retVal (CallType* TYPE_##FuncName)(); \
+ TYPE_##FuncName m_##FuncName; \
+ short m_is##FuncName; \
+ retVal FuncName() \
+ { \
+ if (m_dllHandle) \
+ { \
+ if (FUNC_LOADED != m_is##FuncName) \
+ {\
+ m_##FuncName = NULL; \
+ m_##FuncName = (TYPE_##FuncName)GetProcAddress(m_dllHandle, #FuncName); \
+ m_is##FuncName = FUNC_LOADED;\
+ }\
+ if (NULL != m_##FuncName) \
+ return m_##FuncName(); \
+ else \
+ return (retVal)NULL; \
+ } \
+ else \
+ return (retVal)NULL; \
+ }
+
+#define DECLARE_FUNCTION1(CallType,retVal, FuncName, Param1) \
+ typedef retVal (CallType* TYPE_##FuncName)(Param1); \
+ TYPE_##FuncName m_##FuncName; \
+ short m_is##FuncName;\
+ retVal FuncName(Param1 p1) \
+ { \
+ if (m_dllHandle) \
+ { \
+ if (FUNC_LOADED != m_is##FuncName) \
+ {\
+ m_##FuncName = NULL; \
+ m_##FuncName = (TYPE_##FuncName)GetProcAddress(m_dllHandle, #FuncName); \
+ m_is##FuncName = FUNC_LOADED;\
+ }\
+ if (NULL != m_##FuncName) \
+ return m_##FuncName(p1); \
+ else \
+ return (retVal)NULL; \
+ } \
+ else \
+ return (retVal)NULL; \
+ }
+
+#define DECLARE_FUNCTION2(CallType,retVal, FuncName, Param1, Param2) \
+ typedef retVal (CallType* TYPE_##FuncName)(Param1, Param2); \
+ TYPE_##FuncName m_##FuncName; \
+ short m_is##FuncName;\
+ retVal FuncName (Param1 p1, Param2 p2) \
+ {\
+ if (m_dllHandle)\
+ {\
+ if (FUNC_LOADED != m_is##FuncName) \
+ {\
+ m_##FuncName = NULL; \
+ m_##FuncName = (TYPE_##FuncName)GetProcAddress(m_dllHandle, #FuncName); \
+ m_is##FuncName = FUNC_LOADED;\
+ }\
+ if (NULL != m_##FuncName) \
+ return m_##FuncName(p1, p2); \
+ else \
+ return (retVal)NULL; \
+ } \
+ else\
+ return (retVal)NULL; \
+ }
+
+#define DECLARE_FUNCTION3(CallType,retVal, FuncName, Param1, Param2, Param3) \
+ typedef retVal (CallType* TYPE_##FuncName)(Param1, Param2, Param3); \
+ TYPE_##FuncName m_##FuncName; \
+ short m_is##FuncName;\
+ retVal FuncName (Param1 p1, Param2 p2, Param3 p3) \
+ {\
+ if (m_dllHandle)\
+ {\
+ if (FUNC_LOADED != m_is##FuncName) \
+ {\
+ m_##FuncName = NULL; \
+ m_##FuncName = (TYPE_##FuncName)GetProcAddress(m_dllHandle, #FuncName); \
+ m_is##FuncName = FUNC_LOADED; \
+ }\
+ if (NULL != m_##FuncName) \
+ return m_##FuncName(p1, p2, p3);\
+ else \
+ return (retVal)NULL; \
+ } \
+ else\
+ return (retVal)NULL; \
+ }
+
+#define DECLARE_FUNCTION4(CallType,retVal, FuncName, Param1, Param2, Param3, Param4) \
+ typedef retVal (CallType* TYPE_##FuncName)(Param1, Param2, Param3, Param4); \
+ TYPE_##FuncName m_##FuncName; \
+ short m_is##FuncName;\
+ retVal FuncName (Param1 p1, Param2 p2, Param3 p3, Param4 p4) \
+ {\
+ if (m_dllHandle)\
+ {\
+ if (FUNC_LOADED != m_is##FuncName) \
+ {\
+ m_##FuncName = NULL; \
+ m_##FuncName = (TYPE_##FuncName)GetProcAddress(m_dllHandle, #FuncName); \
+ m_is##FuncName = FUNC_LOADED;\
+ }\
+ if (NULL != m_##FuncName) \
+ return m_##FuncName(p1, p2, p3, p4);\
+ else \
+ return (retVal)NULL; \
+ } \
+ else\
+ return (retVal)NULL; \
+ }
+
+#define DECLARE_FUNCTION5(CallType,retVal, FuncName, Param1, Param2, Param3, Param4, Param5) \
+ typedef retVal (CallType* TYPE_##FuncName)(Param1, Param2, Param3, Param4, Param5); \
+ TYPE_##FuncName m_##FuncName; \
+ short m_is##FuncName; \
+ retVal FuncName (Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5) \
+ {\
+ if (m_dllHandle)\
+ {\
+ if (FUNC_LOADED != m_is##FuncName) \
+ {\
+ m_##FuncName = NULL; \
+ m_##FuncName = (TYPE_##FuncName)GetProcAddress(m_dllHandle, #FuncName); \
+ m_is##FuncName = FUNC_LOADED;\
+ }\
+ if (NULL != m_##FuncName) \
+ return m_##FuncName(p1, p2, p3, p4, p5);\
+ else \
+ return (retVal)NULL; \
+ } \
+ else\
+ return (retVal)NULL; \
+ }
+
+#define DECLARE_FUNCTION6(CallType,retVal, FuncName, Param1, Param2, Param3, Param4, Param5, Param6) \
+ typedef retVal (CallType* TYPE_##FuncName)(Param1, Param2, Param3, Param4, Param5, Param6); \
+ TYPE_##FuncName m_##FuncName; \
+ short m_is##FuncName;\
+ retVal FuncName (Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6) \
+ {\
+ if (m_dllHandle)\
+ {\
+ if (FUNC_LOADED != m_is##FuncName) \
+ {\
+ m_##FuncName = NULL; \
+ m_##FuncName = (TYPE_##FuncName)GetProcAddress(m_dllHandle, #FuncName); \
+ m_is##FuncName = FUNC_LOADED;\
+ }\
+ if (NULL != m_##FuncName) \
+ return m_##FuncName(p1, p2, p3, p4, p5, p6);\
+ else \
+ return (retVal)NULL; \
+ } \
+ else\
+ return (retVal)NULL; \
+ }
+
+#define DECLARE_FUNCTION7(CallType,retVal, FuncName, Param1, Param2, Param3, Param4, Param5, Param6, Param7) \
+ typedef retVal (CallType* TYPE_##FuncName)(Param1, Param2, Param3, Param4, Param5, Param6, Param7); \
+ TYPE_##FuncName m_##FuncName; \
+ short m_is##FuncName;\
+ retVal FuncName (Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7) \
+ {\
+ if (m_dllHandle)\
+ {\
+ if (FUNC_LOADED != m_is##FuncName) \
+ {\
+ m_##FuncName = NULL; \
+ m_##FuncName = (TYPE_##FuncName)GetProcAddress(m_dllHandle, #FuncName); \
+ m_is##FuncName = FUNC_LOADED;\
+ }\
+ if (NULL != m_##FuncName) \
+ return m_##FuncName(p1, p2, p3, p4, p5, p6, p7);\
+ else \
+ return (retVal)NULL; \
+ } \
+ else\
+ return (retVal)NULL; \
+ }
+
+#define DECLARE_FUNCTION8(CallType,retVal, FuncName, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8) \
+ typedef retVal (CallType* TYPE_##FuncName)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8); \
+ TYPE_##FuncName m_##FuncName; \
+ short m_is##FuncName;\
+ retVal FuncName (Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8) \
+ {\
+ if (m_dllHandle)\
+ {\
+ if (FUNC_LOADED != m_is##FuncName) \
+ {\
+ m_##FuncName = NULL; \
+ m_##FuncName = (TYPE_##FuncName)GetProcAddress(m_dllHandle, #FuncName); \
+ m_is##FuncName = FUNC_LOADED;\
+ }\
+ if (NULL != m_##FuncName) \
+ return m_##FuncName(p1, p2, p3, p4, p5, p6, p7, p8);\
+ else \
+ return (retVal)NULL; \
+ }\
+ else\
+ return (retVal)NULL; \
+ }
+
+#define DECLARE_FUNCTION9(CallType,retVal, FuncName, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9) \
+ typedef retVal (CallType* TYPE_##FuncName)(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9); \
+ TYPE_##FuncName m_##FuncName; \
+ short m_is##FuncName; \
+ retVal FuncName (Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9) \
+ {\
+ if (m_dllHandle)\
+ {\
+ if (FUNC_NAME != m_is##FuncName) \
+ {\
+ m_##FuncName = NULL; \
+ m_##FuncName = (TYPE_##FuncName)GetProcAddress(m_dllHandle, #FuncName); \
+ m_is##FuncName = FUNC_LOADED;\
+ }\
+ if (NULL != m_##FuncName) \
+ return m_##FuncName(p1, p2, p3, p4, p5, p6, p7, p8, p9);\
+ else \
+ return (retVal)NULL; \
+ }\
+ else\
+ return (retVal)NULL; \
+ }
+
+#define DECLARE_FUNCTION10(CallType,retVal, FuncName, Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10) \
+ typedef retVal (CallType* TYPE_##FuncName)FuncName(Param1, Param2, Param3, Param4, Param5, Param6, Param7, Param8, Param9, Param10); \
+ TYPE_##FuncName m_##FuncName; \
+ short m_is##FuncName;\
+ retVal FuncName (Param1 p1, Param2 p2, Param3 p3, Param4 p4, Param5 p5, Param6 p6, Param7 p7, Param8 p8, Param9 p9, Param10 p10) \
+ {\
+ if (m_dllHandle)\
+ {\
+ if (FUNC_LOADED != m_is##FuncName) \
+ {\
+ m_##FuncName = NULL; \
+ m_##FuncName = (TYPE_##FuncName)GetProcAddress(m_dllHandle, #FuncName); \
+ m_is##FuncName = FUNC_LOADED;\
+ }\
+ if (NULL != m_##FuncName) \
+ return m_##FuncName(p1, p2, p3, p4, p5, p6, p7, p8, p9, p10);\
+ else \
+ return (retVal)NULL; \
+ }\
+ else \
+ return (retVal)NULL;\
+ }
+
+//declare constructors and LoadFunctions
+#define DECLARE_CLASS(ClassName) \
+ public: \
+ ClassName (LPCTSTR name){LoadDll(name);} \
+ ClassName () {PDLL();}
+
+class PDLL
+{
+protected:
+ HINSTANCE m_dllHandle;
+private:
+ LPTSTR m_dllName;
+ int m_refCount;
+
+public:
+
+ PDLL()
+ {
+ m_dllHandle = NULL;
+ m_dllName = NULL;
+ m_refCount = 0;
+ }
+
+ //A NULL here means the name has already been set
+ void LoadDll(LPCTSTR name, bool showMsg = true)
+ {
+ if (name)
+ SetDllName(name);
+
+ //try to load
+ m_dllHandle = LoadLibrary(m_dllName);
+
+ if (m_dllHandle == NULL && showMsg)
+ {
+ std::ostringstream message;
+ message << "failed to load dll: " << ::GetLastError();
+ throw std::runtime_error(message.str().c_str());
+ }
+ }
+
+ bool SetDllName(LPCTSTR newName)
+ {
+ bool retVal = false;
+
+ //we allow name resets only if the current DLL handle is invalid
+ //once they've hooked into a DLL, the name cannot be changed
+ if (!m_dllHandle)
+ {
+ if (m_dllName)
+ {
+ delete []m_dllName;
+ m_dllName = NULL;
+ }
+
+ //They may be setting this null (e.g., uninitialize)
+ if (newName)
+ {
+ m_dllName = new TCHAR[_tcslen(newName) + 1];
+ _tcscpy(m_dllName, newName);
+ }
+ retVal = true;
+ }
+ return retVal;
+ }
+
+ virtual bool Initialize(short showMsg = 1)
+ {
+
+ bool retVal = false;
+
+ //Add one to our internal reference counter
+ m_refCount++;
+
+ if (m_refCount == 1 && m_dllName) //if this is first time, load the DLL
+ {
+ //we are assuming the name is already set
+ LoadDll(NULL, showMsg);
+ retVal = (m_dllHandle != NULL);
+ }
+ return retVal;
+ }
+
+ virtual void Uninitialize(void)
+ {
+ //If we're already completely unintialized, early exit
+ if (!m_refCount)
+ return;
+ //if this is the last time this instance has been unitialized,
+ //then do a full uninitialization
+ m_refCount--;
+
+ if (m_refCount < 1)
+ {
+ if (m_dllHandle)
+ {
+ FreeLibrary(m_dllHandle);
+ m_dllHandle = NULL;
+ }
+
+ SetDllName(NULL); //clear out the name & free memory
+ }
+ }
+
+ virtual ~PDLL()
+ {
+ //force this to be a true uninitialize
+ m_refCount = 1;
+ Uninitialize();
+
+ //free name
+ if (m_dllName)
+ {
+ delete [] m_dllName;
+ m_dllName = NULL;
+ }
+ }
+
+};
+#endif
diff --git a/src/pluginflagicondelegate.cpp b/src/pluginflagicondelegate.cpp
new file mode 100644
index 00000000..761555d7
--- /dev/null
+++ b/src/pluginflagicondelegate.cpp
@@ -0,0 +1,26 @@
+#include "pluginflagicondelegate.h"
+#include "pluginlist.h"
+#include <QList>
+
+
+PluginFlagIconDelegate::PluginFlagIconDelegate(QObject *parent)
+ : IconDelegate(parent)
+{
+}
+
+QList<QIcon> PluginFlagIconDelegate::getIcons(const QModelIndex &index) const
+{
+ QList<QIcon> result;
+ if (index.isValid()) {
+ foreach (const QVariant &var, index.data(Qt::UserRole + 1).toList()) {
+ result.append(var.value<QIcon>());
+ }
+ }
+ return result;
+}
+
+size_t PluginFlagIconDelegate::getNumIcons(const QModelIndex &index) const
+{
+ return index.data(Qt::UserRole + 1).toList().count();
+}
+
diff --git a/src/pluginflagicondelegate.h b/src/pluginflagicondelegate.h
new file mode 100644
index 00000000..554e968b
--- /dev/null
+++ b/src/pluginflagicondelegate.h
@@ -0,0 +1,17 @@
+#ifndef PLUGINFLAGICONDELEGATE_H
+#define PLUGINFLAGICONDELEGATE_H
+
+#include "icondelegate.h"
+
+class PluginFlagIconDelegate : public IconDelegate
+{
+public:
+ PluginFlagIconDelegate(QObject *parent = NULL);
+
+ // IconDelegate interface
+private:
+ virtual QList<QIcon> getIcons(const QModelIndex &index) const;
+ virtual size_t getNumIcons(const QModelIndex &index) const;
+};
+
+#endif // PLUGINFLAGICONDELEGATE_H
diff --git a/src/pluginlist.cpp b/src/pluginlist.cpp
index f73805fd..1f4ed9b1 100644
--- a/src/pluginlist.cpp
+++ b/src/pluginlist.cpp
@@ -20,8 +20,10 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
#include "pluginlist.h"
#include "report.h"
#include "inject.h"
-#include <utility.h>
#include "settings.h"
+#include "safewritefile.h"
+#include "scopeguard.h"
+#include <utility.h>
#include <gameinfo.h>
#include <espfile.h>
#include <windows_error.h>
@@ -39,7 +41,6 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
#include <QKeyEvent>
#include <QSortFilterProxyModel>
-#include <tchar.h>
#include <ctime>
#include <algorithm>
#include <stdexcept>
@@ -74,8 +75,9 @@ bool ByDate(const PluginList::ESPInfo& LHS, const PluginList::ESPInfo& RHS) {
}
PluginList::PluginList(QObject *parent)
- : QAbstractTableModel(parent),
- m_FontMetrics(QFont()), m_SaveTimer(this)
+ : QAbstractItemModel(parent)
+ , m_FontMetrics(QFont())
+ , m_SaveTimer(this)
{
m_SaveTimer.setSingleShot(true);
connect(&m_SaveTimer, SIGNAL(timeout()), this, SIGNAL(saveTimer()));
@@ -90,6 +92,10 @@ PluginList::PluginList(QObject *parent)
}
+PluginList::~PluginList()
+{
+}
+
QString PluginList::getColumnName(int column)
{
@@ -97,6 +103,7 @@ QString PluginList::getColumnName(int column)
case COL_NAME: return tr("Name");
case COL_PRIORITY: return tr("Priority");
case COL_MODINDEX: return tr("Mod Index");
+ case COL_FLAGS: return tr("Flags");
default: return tr("unknown");
}
}
@@ -118,7 +125,8 @@ void PluginList::refresh(const QString &profileName, const DirectoryEntry &baseD
const QString &pluginsFile, const QString &loadOrderFile,
const QString &lockedOrderFile)
{
- emit layoutAboutToBeChanged();
+ ChangeBracket<PluginList> layoutChange(this);
+
m_ESPsByName.clear();
m_ESPsByPriority.clear();
m_ESPs.clear();
@@ -140,8 +148,16 @@ void PluginList::refresh(const QString &profileName, const DirectoryEntry &baseD
std::find(primaryPlugins.begin(), primaryPlugins.end(), ToWString(filename.toLower())) != primaryPlugins.end();
bool archive = false;
- FilesOrigin &origin = baseDirectory.getOriginByID(current->getOrigin(archive));
- m_ESPs.push_back(ESPInfo(filename, forceEnabled, current->getFileTime(), ToQString(origin.getName()), ToQString(current->getFullPath())));
+ try {
+ FilesOrigin &origin = baseDirectory.getOriginByID(current->getOrigin(archive));
+
+ QString iniPath = QFileInfo(filename).baseName() + ".ini";
+ bool hasIni = baseDirectory.findFile(ToWString(iniPath)).get() != NULL;
+
+ m_ESPs.push_back(ESPInfo(filename, forceEnabled, current->getFileTime(), ToQString(origin.getName()), ToQString(current->getFullPath()), hasIni));
+ } catch (const std::exception &e) {
+ reportError(tr("failed to update esp info for file %1 (source id: %2), error: %3").arg(filename).arg(current->getOrigin(archive)).arg(e.what()));
+ }
}
}
@@ -191,10 +207,12 @@ void PluginList::refresh(const QString &profileName, const DirectoryEntry &baseD
readLockedOrderFrom(lockedOrderFile);
+ layoutChange.finish();
+
refreshLoadOrder();
+ emit dataChanged(this->index(0, 0), this->index(m_ESPs.size(), columnCount()));
- emit layoutChanged();
- emit dataChanged(this->index(0, 0), this->index(m_ESPs.size(), 1));
+ m_Refreshed();
}
@@ -362,21 +380,19 @@ void PluginList::readLockedOrderFrom(const QString &fileName)
}
+
void PluginList::writePlugins(const QString &fileName, bool writeUnchecked) const
{
- QFile file(fileName);
- if (!file.open(QIODevice::WriteOnly)) {
- throw MyException(tr("failed to open output file: %1").arg(fileName));
- }
+ SafeWriteFile file(fileName);
QTextCodec *textCodec = writeUnchecked ? m_Utf8Codec : m_LocalCodec;
- file.resize(0);
+ file->resize(0);
- file.write(textCodec->fromUnicode("# This file was automatically generated by Mod Organizer.\r\n"));
+ file->write(textCodec->fromUnicode("# This file was automatically generated by Mod Organizer.\r\n"));
bool invalidFileNames = false;
-
+ int writtenCount = 0;
for (size_t i = 0; i < m_ESPs.size(); ++i) {
int priority = m_ESPsByPriority[i];
if ((m_ESPs[priority].m_Enabled || writeUnchecked) && !m_ESPs[priority].m_Removed) {
@@ -385,35 +401,34 @@ void PluginList::writePlugins(const QString &fileName, bool writeUnchecked) cons
invalidFileNames = true;
qCritical("invalid plugin name %s", m_ESPs[priority].m_Name.toUtf8().constData());
} else {
- file.write(textCodec->fromUnicode(m_ESPs[priority].m_Name));
+ file->write(textCodec->fromUnicode(m_ESPs[priority].m_Name));
}
- file.write("\r\n");
+ file->write("\r\n");
+ ++writtenCount;
}
}
- file.close();
if (invalidFileNames) {
reportError(tr("Some of your plugins have invalid names! These plugins can not be loaded by the game. "
"Please see mo_interface.log for a list of affected plugins and rename them."));
}
+ file.commit();
+
qDebug("%s saved", QDir::toNativeSeparators(fileName).toUtf8().constData());
}
void PluginList::writeLockedOrder(const QString &fileName) const
{
- QFile file(fileName);
- if (!file.open(QIODevice::WriteOnly)) {
- throw MyException(tr("failed to open output file: %1").arg(fileName));
- }
+ SafeWriteFile file(fileName);
- file.resize(0);
- file.write(QString("# This file was automatically generated by Mod Organizer.\r\n").toUtf8());
+ file->resize(0);
+ file->write(QString("# This file was automatically generated by Mod Organizer.\r\n").toUtf8());
for (auto iter = m_LockedOrder.begin(); iter != m_LockedOrder.end(); ++iter) {
- file.write(QString("%1|%2\r\n").arg(iter->first).arg(iter->second).toUtf8());
+ file->write(QString("%1|%2\r\n").arg(iter->first).arg(iter->second).toUtf8());
}
- file.close();
+ file.commit();
}
@@ -490,6 +505,17 @@ bool PluginList::saveLoadOrder(DirectoryEntry &directoryStructure)
return true;
}
+int PluginList::enabledCount() const
+{
+ int enabled = 0;
+ foreach (auto info, m_ESPs) {
+ if (info.m_Enabled) {
+ ++enabled;
+ }
+ }
+ return enabled;
+}
+
bool PluginList::isESPLocked(int index) const
{
return m_LockedOrder.find(m_ESPs.at(index).m_Name.toLower()) != m_LockedOrder.end();
@@ -526,6 +552,7 @@ void PluginList::syncLoadOrder()
void PluginList::refreshLoadOrder()
{
+ ChangeBracket<PluginList> layoutChange(this);
syncLoadOrder();
// set priorities according to locked load order
std::map<int, QString> lockedLoadOrder;
@@ -542,9 +569,7 @@ void PluginList::refreshLoadOrder()
// find the location to insert at
while ((targetPrio < static_cast<int>(m_ESPs.size() - 1)) &&
(m_ESPs[m_ESPsByPriority[targetPrio]].m_LoadOrder < iter->first)) {
- if (QString::compare(m_ESPs[m_ESPsByPriority[targetPrio]].m_Name, iter->second) != 0) {
- ++targetPrio;
- }
+ ++targetPrio;
}
if (static_cast<size_t>(targetPrio) >= m_ESPs.size()) {
@@ -564,6 +589,67 @@ void PluginList::refreshLoadOrder()
}
+void PluginList::lootSort()
+{
+
+}
+
+IPluginList::PluginState PluginList::state(const QString &name) const
+{
+ auto iter = m_ESPsByName.find(name.toLower());
+ if (iter == m_ESPsByName.end()) {
+ return IPluginList::STATE_MISSING;
+ } else {
+ return m_ESPs[iter->second].m_Enabled ? IPluginList::STATE_ACTIVE : IPluginList::STATE_INACTIVE;
+ }
+}
+
+int PluginList::priority(const QString &name) const
+{
+ auto iter = m_ESPsByName.find(name.toLower());
+ if (iter == m_ESPsByName.end()) {
+ return -1;
+ } else {
+ return m_ESPs[iter->second].m_Priority;
+ }
+}
+
+int PluginList::loadOrder(const QString &name) const
+{
+ auto iter = m_ESPsByName.find(name.toLower());
+ if (iter == m_ESPsByName.end()) {
+ return -1;
+ } else {
+ return m_ESPs[iter->second].m_LoadOrder;
+ }
+}
+
+bool PluginList::isMaster(const QString &name) const
+{
+ auto iter = m_ESPsByName.find(name.toLower());
+ if (iter == m_ESPsByName.end()) {
+ return false;
+ } else {
+ return m_ESPs[iter->second].m_IsMaster;
+ }
+}
+
+QString PluginList::origin(const QString &name) const
+{
+ auto iter = m_ESPsByName.find(name.toLower());
+ if (iter == m_ESPsByName.end()) {
+ return false;
+ } else {
+ return m_ESPs[iter->second].m_OriginName;
+ }
+}
+
+bool PluginList::onRefreshed(const std::function<void ()> &callback)
+{
+ auto conn = m_Refreshed.connect(callback);
+ return conn.connected();
+}
+
void PluginList::updateIndices()
{
m_ESPsByName.clear();
@@ -588,12 +674,14 @@ int PluginList::rowCount(const QModelIndex &parent) const
int PluginList::columnCount(const QModelIndex &) const
{
- return 3;
+ return COL_LASTCOLUMN + 1;
}
void PluginList::testMasters()
{
+// emit layoutAboutToBeChanged();
+
std::set<QString> enabledMasters;
for (auto iter = m_ESPs.begin(); iter != m_ESPs.end(); ++iter) {
if (iter->m_Enabled) {
@@ -602,18 +690,18 @@ void PluginList::testMasters()
}
for (auto iter = m_ESPs.begin(); iter != m_ESPs.end(); ++iter) {
- iter->m_MasterUnset = false;
+ iter->m_MasterUnset.clear();
if (iter->m_Enabled) {
for (auto master = iter->m_Masters.begin(); master != iter->m_Masters.end(); ++master) {
if (enabledMasters.find(master->toLower()) == enabledMasters.end()) {
- iter->m_MasterUnset = true;
- break;
+ iter->m_MasterUnset.insert(*master);
}
}
}
}
- emit layoutChanged();
+#pragma message("emitting this seems to cause a crash!")
+// emit layoutChanged();
}
@@ -640,21 +728,24 @@ QVariant PluginList::data(const QModelIndex &modelIndex, int role) const
return QVariant();
} break;
}
- } else if ((role == Qt::DecorationRole) && (modelIndex.column() == 0)) {
- if (m_ESPs[index].m_MasterUnset) {
- return QIcon(":/MO/gui/warning");
- } else if (m_LockedOrder.find(m_ESPs[index].m_Name.toLower()) != m_LockedOrder.end()) {
- return QIcon(":/MO/gui/locked");
- } else {
+ } else if ((role == Qt::CheckStateRole) && (modelIndex.column() == 0)) {
+ if (m_ESPs[index].m_ForceEnabled) {
return QVariant();
+ } else {
+ return m_ESPs[index].m_Enabled ? Qt::Checked : Qt::Unchecked;
+ }
+ } else if (role == Qt::ForegroundRole) {
+ if ((modelIndex.column() == COL_NAME) &&
+ m_ESPs[index].m_ForceEnabled) {
+ return QBrush(Qt::gray);
}
- } else if ((role == Qt::CheckStateRole) && (modelIndex.column() == 0)) {
- return m_ESPs[index].m_Enabled ? Qt::Checked : Qt::Unchecked;
} else if (role == Qt::FontRole) {
QFont result;
if (m_ESPs[index].m_IsMaster) {
result.setItalic(true);
result.setWeight(QFont::Bold);
+ } else if (m_ESPs[index].m_IsDummy) {
+ result.setItalic(true);
}
return result;
} else if (role == Qt::TextAlignmentRole) {
@@ -664,25 +755,74 @@ QVariant PluginList::data(const QModelIndex &modelIndex, int role) const
return QVariant(Qt::AlignHCenter | Qt::AlignVCenter);
}
} else if (role == Qt::ToolTipRole) {
+ QString name = m_ESPs[index].m_Name.toLower();
+ auto bossInfoIter = m_BossInfo.find(name);
+ QString toolTip;
+ if (bossInfoIter != m_BossInfo.end()) {
+ if (!bossInfoIter->second.m_BOSSMessages.isEmpty()) {
+ toolTip += bossInfoIter->second.m_BOSSMessages.join("<br>") + "<br><hr>";
+ }
+ if (bossInfoIter->second.m_BOSSUnrecognized) {
+ toolTip += "Not recognized by BOSS<br><ht>";
+ }
+ }
if (m_ESPs[index].m_ForceEnabled) {
- return tr("This plugin can't be disabled (enforced by the game)");
+ toolTip += tr("This plugin can't be disabled (enforced by the game)");
} else {
QString text = tr("Origin: %1").arg(m_ESPs[index].m_OriginName);
- if (m_ESPs[index].m_MasterUnset) {
- text += "\nDepends on the following masters: " + SetJoin(m_ESPs[index].m_Masters, ", ");
+ if (m_ESPs[index].m_MasterUnset.size() > 0) {
+ text += "<br>" + tr("Missing Masters") + ": <b>" + SetJoin(m_ESPs[index].m_MasterUnset, ", ") + "</b>";
+ }
+ std::set<QString> enabledMasters;
+ std::set_difference(m_ESPs[index].m_Masters.begin(), m_ESPs[index].m_Masters.end(),
+ m_ESPs[index].m_MasterUnset.begin(), m_ESPs[index].m_MasterUnset.end(),
+ std::inserter(enabledMasters, enabledMasters.end()));
+ text += "<br>" + tr("Enabled Masters") + ": " + SetJoin(enabledMasters, ", ");
+ if (m_ESPs[index].m_HasIni) {
+ text += "<br>There is an ini file connected to this esp. Its settings will be added to your game settings, overwriting "
+ "in case of conflicts.";
+ } else if (m_ESPs[index].m_IsDummy) {
+ text += "<br>This file is a dummy! It exists only so the bsa with the same name gets loaded. With MO you don't need this: "
+ "If you enable the archive with the same name in the \"Archive\" tab you can disable this plugin.";
}
- return text;
+ toolTip += text;
}
- } else {
- return QVariant();
+ return toolTip;
+ } else if (role == Qt::UserRole + 1) {
+ QVariantList result;
+ QString nameLower = m_ESPs[index].m_Name.toLower();
+ if (m_ESPs[index].m_MasterUnset.size() > 0) {
+ result.append(QIcon(":/MO/gui/warning"));
+ }
+ if (m_LockedOrder.find(nameLower) != m_LockedOrder.end()) {
+ result.append(QIcon(":/MO/gui/locked"));
+ }
+ auto bossInfoIter = m_BossInfo.find(nameLower);
+ if (bossInfoIter != m_BossInfo.end()) {
+ if (!bossInfoIter->second.m_BOSSMessages.isEmpty()) {
+ result.append(QIcon(":/MO/gui/information"));
+ }
+ if (bossInfoIter->second.m_BOSSUnrecognized) {
+ result.append(QIcon(":/MO/gui/help"));
+ }
+ }
+ if (m_ESPs[index].m_HasIni) {
+ result.append(QIcon(":/MO/gui/attachment"));
+ }
+ if (m_ESPs[index].m_IsDummy && m_ESPs[index].m_Enabled && !m_ESPs[index].m_HasIni) {
+ result.append(QIcon(":/MO/gui/edit_clear"));
+ }
+ return result;
}
+ return QVariant();
}
-bool PluginList::setData(const QModelIndex &index, const QVariant &value, int role)
+bool PluginList::setData(const QModelIndex &modIndex, const QVariant &value, int role)
{
if (role == Qt::CheckStateRole) {
- m_ESPs[index.row()].m_Enabled = value.toInt() == Qt::Checked;
+ m_ESPs[modIndex.row()].m_Enabled = value.toInt() == Qt::Checked;
+ emit dataChanged(modIndex, modIndex);
refreshLoadOrder();
startSaveTime();
@@ -716,13 +856,12 @@ QVariant PluginList::headerData(int section, Qt::Orientation orientation,
Qt::ItemFlags PluginList::flags(const QModelIndex &modelIndex) const
{
int index = modelIndex.row();
- Qt::ItemFlags result = QAbstractTableModel::flags(modelIndex);
+ Qt::ItemFlags result = QAbstractItemModel::flags(modelIndex);
if (modelIndex.isValid()) {
- if ((m_ESPs[index].m_ForceEnabled)) {
- result &= ~Qt::ItemIsEnabled;
+ if (!m_ESPs[index].m_ForceEnabled) {
+ result |= Qt::ItemIsUserCheckable | Qt::ItemIsDragEnabled;
}
- result |= Qt::ItemIsUserCheckable | Qt::ItemIsDragEnabled;
} else {
result |= Qt::ItemIsDropEnabled;
}
@@ -738,18 +877,18 @@ void PluginList::setPluginPriority(int row, int &newPriority)
if (!m_ESPs[row].m_IsMaster) {
// don't allow esps to be moved above esms
while ((newPriorityTemp < static_cast<int>(m_ESPsByPriority.size() - 1)) &&
- m_ESPs[m_ESPsByPriority[newPriorityTemp]].m_IsMaster) {
+ m_ESPs.at(m_ESPsByPriority.at(newPriorityTemp)).m_IsMaster) {
++newPriorityTemp;
}
} else {
// don't allow esms to be moved below esps
while ((newPriorityTemp > 0) &&
- !m_ESPs[m_ESPsByPriority[newPriorityTemp]].m_IsMaster) {
+ !m_ESPs.at(m_ESPsByPriority.at(newPriorityTemp)).m_IsMaster) {
--newPriorityTemp;
}
// also don't allow "regular" esms to be moved above primary plugins
while ((newPriorityTemp < static_cast<int>(m_ESPsByPriority.size() - 1)) &&
- (m_ESPs[m_ESPsByPriority[newPriorityTemp]].m_ForceEnabled)) {
+ (m_ESPs.at(m_ESPsByPriority.at(newPriorityTemp)).m_ForceEnabled)) {
++newPriorityTemp;
}
}
@@ -765,14 +904,17 @@ void PluginList::setPluginPriority(int row, int &newPriority)
for (int i = oldPriority + 1; i <= newPriorityTemp; ++i) {
--m_ESPs.at(m_ESPsByPriority.at(i)).m_Priority;
}
+ emit dataChanged(index(oldPriority + 1, 0), index(newPriorityTemp, columnCount()));
} else {
for (int i = newPriorityTemp; i < oldPriority; ++i) {
++m_ESPs.at(m_ESPsByPriority.at(i)).m_Priority;
}
+ emit dataChanged(index(newPriorityTemp, 0), index(oldPriority - 1, columnCount()));
++newPriority;
}
m_ESPs.at(row).m_Priority = newPriorityTemp;
+ emit dataChanged(index(row, 0), index(row, columnCount()));
} catch (const std::out_of_range&) {
reportError(tr("failed to restore load order for %1").arg(m_ESPs[row].m_Name));
}
@@ -783,7 +925,7 @@ void PluginList::setPluginPriority(int row, int &newPriority)
void PluginList::changePluginPriority(std::vector<int> rows, int newPriority)
{
- emit layoutAboutToBeChanged();
+ ChangeBracket<PluginList> layoutChange(this);
// sort rows to insert by their old priority (ascending) and insert them move them in that order
const std::vector<ESPInfo> &esp = m_ESPs;
std::sort(rows.begin(), rows.end(),
@@ -804,11 +946,11 @@ void PluginList::changePluginPriority(std::vector<int> rows, int newPriority)
for (std::vector<int>::const_iterator iter = rows.begin(); iter != rows.end(); ++iter) {
setPluginPriority(*iter, newPriority);
}
+
+ layoutChange.finish();
refreshLoadOrder();
startSaveTime();
-
- emit layoutChanged();
}
@@ -859,6 +1001,19 @@ bool PluginList::dropMimeData(const QMimeData *mimeData, Qt::DropAction action,
return false;
}
+QModelIndex PluginList::index(int row, int column, const QModelIndex&) const
+{
+ if ((row < 0) || (row >= rowCount()) || (column < 0) || (column >= columnCount())) {
+ return QModelIndex();
+ }
+ return createIndex(row, column, row);
+}
+
+QModelIndex PluginList::parent(const QModelIndex&) const
+{
+ return QModelIndex();
+}
+
bool PluginList::eventFilter(QObject *obj, QEvent *event)
{
@@ -870,7 +1025,6 @@ bool PluginList::eventFilter(QObject *obj, QEvent *event)
}
QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);
-
// ctrl+up and ctrl+down -> increase or decrease priority of selected plugins
if ((keyEvent->modifiers() == Qt::ControlModifier) &&
((keyEvent->key() == Qt::Key_Up) || (keyEvent->key() == Qt::Key_Down))) {
@@ -894,7 +1048,6 @@ bool PluginList::eventFilter(QObject *obj, QEvent *event)
int newPriority = m_ESPs[idx.row()].m_Priority + diff;
if ((newPriority >= 0) && (newPriority < rowCount())) {
setPluginPriority(idx.row(), newPriority);
- emit dataChanged(this->index(idx.row(), 0), this->index(idx.row(), this->columnCount() - 1));
}
}
refreshLoadOrder();
@@ -926,19 +1079,23 @@ bool PluginList::eventFilter(QObject *obj, QEvent *event)
}
-PluginList::ESPInfo::ESPInfo(const QString &name, bool enabled, FILETIME time, const QString &originName, const QString &fullPath)
- : m_Name(name), m_Enabled(enabled), m_ForceEnabled(enabled), m_Removed(false), m_Priority(0),
- m_LoadOrder(-1), m_Time(time), m_OriginName(originName)
+PluginList::ESPInfo::ESPInfo(const QString &name, bool enabled, FILETIME time,
+ const QString &originName, const QString &fullPath,
+ bool hasIni)
+ : m_Name(name), m_Enabled(enabled), m_ForceEnabled(enabled), m_Removed(false),
+ m_Priority(0), m_LoadOrder(-1), m_Time(time), m_OriginName(originName), m_HasIni(hasIni)
{
try {
ESP::File file(ToWString(fullPath));
m_IsMaster = file.isMaster();
+ m_IsDummy = file.isDummy();
std::set<std::string> masters = file.masters();
for (auto iter = masters.begin(); iter != masters.end(); ++iter) {
m_Masters.insert(QString(iter->c_str()));
}
} catch (const std::exception &e) {
- reportError(tr("failed to parse esp file %1: %2").arg(fullPath).arg(e.what()));
+ qCritical("failed to parse esp file %s: %s", qPrintable(fullPath), e.what());
m_IsMaster = false;
+ m_IsDummy = false;
}
}
diff --git a/src/pluginlist.h b/src/pluginlist.h
index b1f1cc0e..5e8557e2 100644
--- a/src/pluginlist.h
+++ b/src/pluginlist.h
@@ -20,30 +20,72 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
#ifndef PLUGINLIST_H
#define PLUGINLIST_H
+#include <directoryentry.h>
+#include <ipluginlist.h>
#include <QString>
#include <QListWidget>
#include <QTimer>
+#include <QTemporaryFile>
+#include <boost/signals2.hpp>
+#include <boost/ptr_container/ptr_vector.hpp>
#include <vector>
-#include <directoryentry.h>
+#include "pdll.h"
+#include <BOSS-API.h>
+
+
+
+template <class C>
+class ChangeBracket {
+public:
+ ChangeBracket(C *model)
+ : m_Model(nullptr)
+ {
+ QVariant var = model->property("__aboutToChange");
+ bool aboutToChange = var.isValid() && var.toBool();
+ if (!aboutToChange) {
+ model->layoutAboutToBeChanged();
+ model->setProperty("__aboutToChange", true);
+ m_Model = model;
+ }
+ }
+ ~ChangeBracket() {
+ finish();
+ }
+
+ void finish() {
+ if (m_Model != nullptr) {
+ m_Model->layoutChanged();
+ m_Model->setProperty("__aboutToChange", false);
+ m_Model = nullptr;
+ }
+ }
+
+private:
+ C *m_Model;
+};
+
/**
* @brief model representing the plugins (.esp/.esm) in the current virtual data folder
**/
-class PluginList : public QAbstractTableModel
+class PluginList : public QAbstractItemModel, public MOBase::IPluginList
{
Q_OBJECT
-
+ friend class ChangeBracket<PluginList>;
public:
enum EColumn {
COL_NAME,
+ COL_FLAGS,
COL_PRIORITY,
COL_MODINDEX,
COL_LASTCOLUMN = COL_MODINDEX
};
+ typedef boost::signals2::signal<void ()> SignalRefreshed;
+
public:
/**
@@ -53,6 +95,8 @@ public:
**/
PluginList(QObject *parent = NULL);
+ ~PluginList();
+
/**
* @brief does a complete refresh of the list
*
@@ -120,6 +164,11 @@ public:
**/
bool saveLoadOrder(MOShared::DirectoryEntry &directoryStructure);
+ /**
+ * @return number of enabled plugins in the list
+ */
+ int enabledCount() const;
+
QString getName(int index) const { return m_ESPs.at(index).m_Name; }
int getPriority(int index) const { return m_ESPs.at(index).m_Priority; }
bool isESPLocked(int index) const;
@@ -132,6 +181,16 @@ public:
void refreshLoadOrder();
+ void lootSort();
+
+public:
+ virtual PluginState state(const QString &name) const;
+ virtual int priority(const QString &name) const;
+ virtual int loadOrder(const QString &name) const;
+ virtual bool isMaster(const QString &name) const;
+ virtual QString origin(const QString &name) const;
+ virtual bool onRefreshed(const std::function<void()> &callback);
+
public: // implementation of the QAbstractTableModel interface
virtual int rowCount(const QModelIndex &parent = QModelIndex()) const;
@@ -142,6 +201,8 @@ public: // implementation of the QAbstractTableModel interface
virtual Qt::ItemFlags flags(const QModelIndex &index) const;
virtual Qt::DropActions supportedDropActions() const { return Qt::MoveAction; }
virtual bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent);
+ virtual QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const;
+ virtual QModelIndex parent(const QModelIndex &child) const;
public slots:
@@ -173,9 +234,8 @@ private:
struct ESPInfo {
- ESPInfo(const QString &name, bool enabled, FILETIME time, const QString &originName, const QString &fullPath);
+ ESPInfo(const QString &name, bool enabled, FILETIME time, const QString &originName, const QString &fullPath, bool hasIni);
QString m_Name;
- QString m_FullPath;
bool m_Enabled;
bool m_ForceEnabled;
bool m_Removed;
@@ -184,8 +244,15 @@ private:
FILETIME m_Time;
QString m_OriginName;
bool m_IsMaster;
+ bool m_IsDummy;
+ bool m_HasIni;
std::set<QString> m_Masters;
- mutable bool m_MasterUnset;
+ mutable std::set<QString> m_MasterUnset;
+ };
+
+ struct BossInfo {
+ QStringList m_BOSSMessages;
+ bool m_BOSSUnrecognized;
};
friend bool ByName(const ESPInfo& LHS, const ESPInfo& RHS);
@@ -222,6 +289,8 @@ private:
std::map<QString, int> m_ESPLoadOrder;
std::map<QString, int> m_LockedOrder;
+ std::map<QString, BossInfo> m_BossInfo; // maps esp names to boss information
+
QString m_CurrentProfile;
QFontMetrics m_FontMetrics;
@@ -230,6 +299,12 @@ private:
mutable QTimer m_SaveTimer;
+ SignalRefreshed m_Refreshed;
+
+ QTemporaryFile m_TempFile;
+
};
+
+
#endif // PLUGINLIST_H
diff --git a/src/pluginlistsortproxy.cpp b/src/pluginlistsortproxy.cpp
index 5bff24f5..8412fa27 100644
--- a/src/pluginlistsortproxy.cpp
+++ b/src/pluginlistsortproxy.cpp
@@ -125,11 +125,6 @@ bool PluginListSortProxy::lessThan(const QModelIndex &left,
return plugins->getPriority(left.row()) < plugins->getPriority(right.row());
} break;
default: {
- static bool first = true;
- if (first) {
- qCritical("invalid sort column %d", left.column());
- first = false;
- }
return plugins->getPriority(left.row()) < plugins->getPriority(right.row());
} break;
}
diff --git a/src/previewdialog.cpp b/src/previewdialog.cpp
new file mode 100644
index 00000000..de33cdd0
--- /dev/null
+++ b/src/previewdialog.cpp
@@ -0,0 +1,57 @@
+#include "previewdialog.h"
+#include "ui_previewdialog.h"
+#include <QFileInfo>
+
+PreviewDialog::PreviewDialog(const QString &fileName, QWidget *parent) :
+ QDialog(parent),
+ ui(new Ui::PreviewDialog)
+{
+ ui->setupUi(this);
+ ui->nameLabel->setText(QFileInfo(fileName).fileName());
+ ui->nextButton->setEnabled(false);
+ ui->previousButton->setEnabled(false);
+}
+
+PreviewDialog::~PreviewDialog()
+{
+ delete ui;
+}
+
+void PreviewDialog::addVariant(const QString &modName, QWidget *widget)
+{
+ widget->setProperty("modName", modName);
+ ui->variantsStack->addWidget(widget);
+ if (ui->variantsStack->count() > 1) {
+ ui->nextButton->setEnabled(true);
+ ui->previousButton->setEnabled(true);
+ }
+}
+
+int PreviewDialog::numVariants() const
+{
+ return ui->variantsStack->count();
+}
+
+void PreviewDialog::on_variantsStack_currentChanged(int index)
+{
+ ui->modLabel->setText(ui->variantsStack->widget(index)->property("modName").toString());
+}
+
+void PreviewDialog::on_closeButton_clicked()
+{
+ this->accept();
+}
+
+void PreviewDialog::on_previousButton_clicked()
+{
+ int i = ui->variantsStack->currentIndex() - 1;
+ if (i < 0) {
+ i = ui->variantsStack->count() - 1;
+ }
+ ui->variantsStack->setCurrentIndex(i);
+}
+
+void PreviewDialog::on_nextButton_clicked()
+{
+ ui->variantsStack->setCurrentIndex((ui->variantsStack->currentIndex() + 1) % ui->variantsStack->count());
+}
diff --git a/src/previewdialog.h b/src/previewdialog.h
new file mode 100644
index 00000000..0011bc50
--- /dev/null
+++ b/src/previewdialog.h
@@ -0,0 +1,36 @@
+#ifndef PREVIEWDIALOG_H
+#define PREVIEWDIALOG_H
+
+#include <QDialog>
+
+namespace Ui {
+class PreviewDialog;
+}
+
+class PreviewDialog : public QDialog
+{
+ Q_OBJECT
+
+public:
+ explicit PreviewDialog(const QString &fileName, QWidget *parent = 0);
+ ~PreviewDialog();
+
+ void addVariant(const QString &modName, QWidget *widget);
+ int numVariants() const;
+
+private slots:
+
+ void on_variantsStack_currentChanged(int arg1);
+
+ void on_closeButton_clicked();
+
+ void on_previousButton_clicked();
+
+ void on_nextButton_clicked();
+
+private:
+
+ Ui::PreviewDialog *ui;
+};
+
+#endif // PREVIEWDIALOG_H
diff --git a/src/previewdialog.ui b/src/previewdialog.ui
new file mode 100644
index 00000000..e2dc824a
--- /dev/null
+++ b/src/previewdialog.ui
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>PreviewDialog</class>
+ <widget class="QDialog" name="PreviewDialog">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>736</width>
+ <height>583</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>Preview</string>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_2" stretch="1,1,0,0">
+ <item>
+ <widget class="QLabel" name="nameLabel">
+ <property name="text">
+ <string/>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="modLabel">
+ <property name="text">
+ <string/>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="previousButton">
+ <property name="text">
+ <string/>
+ </property>
+ <property name="icon">
+ <iconset resource="resources.qrc">
+ <normaloff>:/MO/gui/previous</normaloff>:/MO/gui/previous</iconset>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="nextButton">
+ <property name="text">
+ <string/>
+ </property>
+ <property name="icon">
+ <iconset resource="resources.qrc">
+ <normaloff>:/MO/gui/next</normaloff>:/MO/gui/next</iconset>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <widget class="QStackedWidget" name="variantsStack"/>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <item>
+ <spacer name="horizontalSpacer">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QPushButton" name="closeButton">
+ <property name="text">
+ <string>Close</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ <resources>
+ <include location="resources.qrc"/>
+ </resources>
+ <connections/>
+</ui>
diff --git a/src/previewgenerator.cpp b/src/previewgenerator.cpp
new file mode 100644
index 00000000..764d016d
--- /dev/null
+++ b/src/previewgenerator.cpp
@@ -0,0 +1,55 @@
+/*
+Copyright (C) 2014 Sebastian Herbord. All rights reserved.
+
+This file is part of Mod Organizer.
+
+Mod Organizer is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Mod Organizer is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "previewgenerator.h"
+#include <QFileInfo>
+#include <QLabel>
+#include <QImageReader>
+#include <QTextEdit>
+#include <QDesktopWidget>
+#include <utility.h>
+
+PreviewGenerator::PreviewGenerator()
+{
+
+ QDesktopWidget desk;
+ m_MaxSize = desk.screenGeometry().size() * 0.8;
+}
+
+void PreviewGenerator::registerPlugin(MOBase::IPluginPreview *plugin)
+{
+ foreach (const QString &extension, plugin->supportedExtensions()) {
+ m_PreviewPlugins.insert(std::make_pair(extension, plugin));
+ }
+}
+
+bool PreviewGenerator::previewSupported(const QString &fileExtension) const
+{
+ return m_PreviewPlugins.find(fileExtension.toLower()) != m_PreviewPlugins.end();
+}
+
+QWidget *PreviewGenerator::genPreview(const QString &fileName) const
+{
+ auto iter = m_PreviewPlugins.find(QFileInfo(fileName).completeSuffix().toLower());
+ if (iter != m_PreviewPlugins.end()) {
+ return iter->second->genFilePreview(fileName, m_MaxSize);
+ } else {
+ return nullptr;
+ }
+}
diff --git a/src/previewgenerator.h b/src/previewgenerator.h
new file mode 100644
index 00000000..e872b06b
--- /dev/null
+++ b/src/previewgenerator.h
@@ -0,0 +1,53 @@
+/*
+Copyright (C) 2014 Sebastian Herbord. All rights reserved.
+
+This file is part of Mod Organizer.
+
+Mod Organizer is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Mod Organizer is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef PREVIEWGENERATOR_H
+#define PREVIEWGENERATOR_H
+
+#include <QString>
+#include <QWidget>
+#include <map>
+#include <functional>
+#include <ipluginpreview.h>
+
+class PreviewGenerator
+{
+public:
+ PreviewGenerator();
+
+ void registerPlugin(MOBase::IPluginPreview *plugin);
+
+ bool previewSupported(const QString &fileExtension) const;
+
+ QWidget *genPreview(const QString &fileName) const;
+
+private:
+
+ QWidget *genImagePreview(const QString &fileName) const;
+ QWidget *genTxtPreview(const QString &fileName) const;
+
+private:
+
+ std::map<QString, MOBase::IPluginPreview*> m_PreviewPlugins;
+
+ QSize m_MaxSize;
+
+};
+
+#endif // PREVIEWGENERATOR_H
diff --git a/src/problemsdialog.cpp b/src/problemsdialog.cpp
index d5700381..edb34f39 100644
--- a/src/problemsdialog.cpp
+++ b/src/problemsdialog.cpp
@@ -10,11 +10,26 @@ using namespace MOBase;
ProblemsDialog::ProblemsDialog(std::vector<MOBase::IPluginDiagnose *> diagnosePlugins, QWidget *parent)
- : QDialog(parent), ui(new Ui::ProblemsDialog)
+ : QDialog(parent), ui(new Ui::ProblemsDialog), m_DiagnosePlugins(diagnosePlugins)
{
ui->setupUi(this);
- foreach (IPluginDiagnose *diagnose, diagnosePlugins) {
+ runDiagnosis();
+
+ connect(ui->problemsWidget, SIGNAL(itemSelectionChanged()), this, SLOT(selectionChanged()));
+ connect(ui->descriptionText, SIGNAL(anchorClicked(QUrl)), this, SLOT(urlClicked(QUrl)));
+}
+
+
+ProblemsDialog::~ProblemsDialog()
+{
+ delete ui;
+}
+
+void ProblemsDialog::runDiagnosis()
+{
+ ui->problemsWidget->clear();
+ foreach (IPluginDiagnose *diagnose, m_DiagnosePlugins) {
std::vector<unsigned int> activeProblems = diagnose->activeProblems();
foreach (unsigned int key, activeProblems) {
QTreeWidgetItem *newItem = new QTreeWidgetItem();
@@ -26,7 +41,7 @@ ProblemsDialog::ProblemsDialog(std::vector<MOBase::IPluginDiagnose *> diagnosePl
ui->problemsWidget->addTopLevelItem(newItem);
if (diagnose->hasGuidedFix(key)) {
- newItem->setText(1, tr("fix"));
+ newItem->setText(1, tr("Fix"));
QPushButton *fixButton = new QPushButton(tr("Fix"));
connect(fixButton, SIGNAL(clicked()), this, SLOT(startFix()));
ui->problemsWidget->setItemWidget(newItem, 1, fixButton);
@@ -35,17 +50,8 @@ ProblemsDialog::ProblemsDialog(std::vector<MOBase::IPluginDiagnose *> diagnosePl
}
}
}
- connect(ui->problemsWidget, SIGNAL(itemSelectionChanged()), this, SLOT(selectionChanged()));
- connect(ui->descriptionText, SIGNAL(anchorClicked(QUrl)), this, SLOT(urlClicked(QUrl)));
-}
-
-
-ProblemsDialog::~ProblemsDialog()
-{
- delete ui;
}
-
bool ProblemsDialog::hasProblems() const
{
return ui->problemsWidget->topLevelItemCount() != 0;
@@ -62,6 +68,7 @@ void ProblemsDialog::startFix()
{
IPluginDiagnose *plugin = reinterpret_cast<IPluginDiagnose*>(ui->problemsWidget->currentItem()->data(1, Qt::UserRole).value<void*>());
plugin->startGuidedFix(ui->problemsWidget->currentItem()->data(1, Qt::UserRole + 1).toUInt());
+ runDiagnosis();
}
void ProblemsDialog::urlClicked(const QUrl &url)
diff --git a/src/problemsdialog.h b/src/problemsdialog.h
index 050785f4..24a69cdf 100644
--- a/src/problemsdialog.h
+++ b/src/problemsdialog.h
@@ -21,6 +21,9 @@ public:
~ProblemsDialog();
bool hasProblems() const;
+private:
+
+ void runDiagnosis();
private slots:
@@ -31,6 +34,7 @@ private slots:
private:
Ui::ProblemsDialog *ui;
+ std::vector<MOBase::IPluginDiagnose *> m_DiagnosePlugins;
};
#endif // PROBLEMSDIALOG_H
diff --git a/src/problemsdialog.ui b/src/problemsdialog.ui
index b194bf31..99c3f3aa 100644
--- a/src/problemsdialog.ui
+++ b/src/problemsdialog.ui
@@ -50,53 +50,51 @@
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'MS Shell Dlg 2'; font-size:7.8pt; font-weight:400; font-style:normal;&quot;&gt;
-&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:8pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
</widget>
</item>
<item>
- <widget class="QDialogButtonBox" name="buttonBox">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="standardButtons">
- <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
- </property>
- </widget>
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <item>
+ <spacer name="horizontalSpacer">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QPushButton" name="closeButton">
+ <property name="text">
+ <string>Close</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
</item>
</layout>
</widget>
<resources/>
<connections>
<connection>
- <sender>buttonBox</sender>
- <signal>accepted()</signal>
+ <sender>closeButton</sender>
+ <signal>clicked()</signal>
<receiver>ProblemsDialog</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
- <x>248</x>
- <y>254</y>
- </hint>
- <hint type="destinationlabel">
- <x>157</x>
- <y>274</y>
- </hint>
- </hints>
- </connection>
- <connection>
- <sender>buttonBox</sender>
- <signal>rejected()</signal>
- <receiver>ProblemsDialog</receiver>
- <slot>reject()</slot>
- <hints>
- <hint type="sourcelabel">
- <x>316</x>
- <y>260</y>
+ <x>526</x>
+ <y>354</y>
</hint>
<hint type="destinationlabel">
<x>286</x>
- <y>274</y>
+ <y>187</y>
</hint>
</hints>
</connection>
diff --git a/src/profile.cpp b/src/profile.cpp
index a6d8f49d..42358b7d 100644
--- a/src/profile.cpp
+++ b/src/profile.cpp
@@ -23,6 +23,7 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
#include "windows_error.h"
#include "dummybsa.h"
#include "modinfo.h"
+#include "safewritefile.h"
#include <utility.h>
#include <util.h>
#include <error_report.h>
@@ -30,6 +31,8 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
#include <QMessageBox>
#include <QApplication>
#include <QSettings>
+#include <QTemporaryFile>
+
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <shlobj.h>
@@ -90,7 +93,7 @@ Profile::Profile(const QDir& directory)
GameInfo::instance().repairProfile(ToWString(m_Directory.absolutePath()));
if (!QFile::exists(getIniFileName())) {
- reportError(QObject::tr("\"%1\" is missing").arg(getIniFileName()));
+ reportError(QObject::tr("\"%1\" is missing or inaccessible").arg(getIniFileName()));
}
refreshModStatus();
}
@@ -146,38 +149,39 @@ void Profile::writeModlistNow(bool onlyOnTimer) const
if (!m_Directory.exists()) return;
#pragma message("right now, this is doing unnecessary saves. Need a flag that says that mod priority, enabled-state or name of a mod has changed")
- QString fileName = getModlistFileName();
- QFile file(fileName);
- if (!file.open(QIODevice::WriteOnly)) {
- reportError(tr("failed to open \"%1\" for writing").arg(fileName));
- return;
- }
+ try {
+ QString fileName = getModlistFileName();
+ SafeWriteFile file(fileName);
- file.resize(0);
- file.write(QString("# This file was automatically generated by Mod Organizer.\r\n").toUtf8());
- if (m_ModStatus.empty()) {
- return;
- }
+ file->write(QString("# This file was automatically generated by Mod Organizer.\r\n").toUtf8());
+ if (m_ModStatus.empty()) {
+ return;
+ }
- for (int i = m_ModStatus.size() - 1; i >= 0; --i) {
- // the priority order was inverted on load so it has to be inverted again
- unsigned int index = m_ModIndexByPriority[i];
- if (index != UINT_MAX) {
- ModInfo::Ptr modInfo = ModInfo::getByIndex(index);
- if (modInfo->getFixedPriority() == INT_MIN) {
- if (m_ModStatus[index].m_Enabled) {
- file.write("+");
- } else {
- file.write("-");
+ for (int i = m_ModStatus.size() - 1; i >= 0; --i) {
+ // the priority order was inverted on load so it has to be inverted again
+ unsigned int index = m_ModIndexByPriority[i];
+ if (index != UINT_MAX) {
+ ModInfo::Ptr modInfo = ModInfo::getByIndex(index);
+ if (modInfo->getFixedPriority() == INT_MIN) {
+ if (m_ModStatus[index].m_Enabled) {
+ file->write("+");
+ } else {
+ file->write("-");
+ }
+ file->write(modInfo->name().toUtf8());
+ file->write("\r\n");
}
- file.write(modInfo->name().toUtf8());
- file.write("\r\n");
}
}
- }
- file.close();
- qDebug("%s saved", QDir::toNativeSeparators(fileName).toUtf8().constData());
+ file.commit();
+
+ qDebug("%s saved", QDir::toNativeSeparators(fileName).toUtf8().constData());
+ } catch (const std::exception &e) {
+ reportError(tr("failed to write mod list: %1").arg(e.what()));
+ return;
+ }
}
@@ -185,7 +189,7 @@ void Profile::createTweakedIniFile()
{
QString tweakedIni = m_Directory.absoluteFilePath("initweaks.ini");
- if (QFile::exists(tweakedIni) && !shellDelete(QStringList(tweakedIni))) {
+ if (QFile::exists(tweakedIni) && !shellDeleteQuiet(tweakedIni)) {
reportError(tr("failed to update tweaked ini file, wrong settings may be used: %1").arg(windowsErrorString(::GetLastError())));
return;
}
@@ -197,6 +201,7 @@ void Profile::createTweakedIniFile()
}
}
+ mergeTweak(getProfileTweaks(), tweakedIni);
bool error = false;
if (!::WritePrivateProfileStringW(L"Archive", L"bInvalidateOlderFiles", L"1", ToWString(tweakedIni).c_str())) {
@@ -218,6 +223,7 @@ void Profile::createTweakedIniFile()
if (error) {
reportError(tr("failed to create tweaked ini: %1").arg(getCurrentErrorStringA().c_str()));
}
+ qDebug("%s saved", qPrintable(QDir::toNativeSeparators(tweakedIni)));
}
@@ -225,7 +231,7 @@ void Profile::refreshModStatus()
{
QFile file(getModlistFileName());
if (!file.exists()) {
- throw MyException(QObject::tr("failed to find \"%1\"").arg(getModlistFileName()));
+ throw MyException(tr("\"%1\" is missing or inaccessible").arg(getModlistFileName()));
}
bool modStatusModified = false;
@@ -331,6 +337,7 @@ void Profile::updateIndices()
for (unsigned int i = 0; i < m_ModStatus.size(); ++i) {
int priority = m_ModStatus[i].m_Priority;
if (priority < 0) {
+ // don't assign this to mapping at all, it's probably the overwrite mod
continue;
} else if (priority >= static_cast<int>(m_ModIndexByPriority.size())) {
qCritical("invalid priority %d for mod", priority);
@@ -418,7 +425,7 @@ int Profile::getModPriority(unsigned int index) const
void Profile::setModPriority(unsigned int index, int &newPriority)
{
- if (m_ModStatus[index].m_Overwrite) {
+ if (m_ModStatus.at(index).m_Overwrite) {
// can't change priority of the overwrite
return;
}
@@ -426,24 +433,25 @@ void Profile::setModPriority(unsigned int index, int &newPriority)
int newPriorityTemp = (std::max)(0, (std::min<int>)(m_ModStatus.size() - 1, newPriority));
// don't try to place below overwrite
- while (m_ModStatus[m_ModIndexByPriority[newPriorityTemp]].m_Overwrite) {
+ while ((m_ModIndexByPriority.at(newPriorityTemp) >= m_ModStatus.size()) ||
+ m_ModStatus.at(m_ModIndexByPriority.at(newPriorityTemp)).m_Overwrite) {
--newPriorityTemp;
}
- int oldPriority = m_ModStatus[index].m_Priority;
+ int oldPriority = m_ModStatus.at(index).m_Priority;
if (newPriorityTemp > oldPriority) {
// priority is higher than the old, so the gap we left is in lower priorities
for (int i = oldPriority + 1; i <= newPriorityTemp; ++i) {
- --m_ModStatus[m_ModIndexByPriority[i]].m_Priority;
+ --m_ModStatus.at(m_ModIndexByPriority.at(i)).m_Priority;
}
} else {
for (int i = newPriorityTemp; i < oldPriority; ++i) {
- ++m_ModStatus[m_ModIndexByPriority[i]].m_Priority;
+ ++m_ModStatus.at(m_ModIndexByPriority.at(i)).m_Priority;
}
++newPriority;
}
- m_ModStatus[index].m_Priority = newPriorityTemp;
+ m_ModStatus.at(index).m_Priority = newPriorityTemp;
updateIndices();
writeModlist();
@@ -733,6 +741,12 @@ QString Profile::getIniFileName() const
return m_Directory.absoluteFilePath(ToQString(primaryIniFile));
}
+QString Profile::getProfileTweaks() const
+{
+ return QDir::cleanPath(m_Directory.absoluteFilePath(ToQString(AppConfig::profileTweakIni())));
+}
+
+
QString Profile::getPath() const
{
return QDir::cleanPath(m_Directory.absolutePath());
diff --git a/src/profile.h b/src/profile.h
index 9c678a23..5aa77357 100644
--- a/src/profile.h
+++ b/src/profile.h
@@ -160,6 +160,11 @@ public:
QString getLockedOrderFileName() const;
/**
+ * @return the path of the modlist file in this profile
+ */
+ QString getModlistFileName() const;
+
+ /**
* @return path of the archives file in this profile
*/
QString getArchivesFileName() const;
@@ -178,6 +183,11 @@ public:
QString getIniFileName() const;
/**
+ * @return the path of the tweak ini in this profile
+ */
+ QString getProfileTweaks() const;
+
+ /**
* @return path to this profile
**/
QString getPath() const;
@@ -296,7 +306,6 @@ private:
void updateIndices();
- QString getModlistFileName() const;
void copyFilesTo(QString &target) const;
std::vector<std::wstring> splitDZString(const wchar_t *buffer) const;
diff --git a/src/profileinputdialog.cpp b/src/profileinputdialog.cpp
index 7402d4d5..af33dcdd 100644
--- a/src/profileinputdialog.cpp
+++ b/src/profileinputdialog.cpp
@@ -17,29 +17,32 @@ You should have received a copy of the GNU General Public License
along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "profileinputdialog.h"
-#include "ui_profileinputdialog.h"
-
-ProfileInputDialog::ProfileInputDialog(QWidget *parent) :
- QDialog(parent),
- ui(new Ui::ProfileInputDialog)
-{
- ui->setupUi(this);
-}
-
-ProfileInputDialog::~ProfileInputDialog()
-{
- delete ui;
-}
-
-QString ProfileInputDialog::getName() const
-{
- return ui->nameEdit->text().trimmed();
-}
-
-
-bool ProfileInputDialog::getPreferDefaultSettings() const
-{
- return ui->defaultSettingsBox->checkState() == Qt::Checked;
-}
-
+#include "profileinputdialog.h"
+#include "ui_profileinputdialog.h"
+#include <utility.h>
+
+ProfileInputDialog::ProfileInputDialog(QWidget *parent) :
+ QDialog(parent),
+ ui(new Ui::ProfileInputDialog)
+{
+ ui->setupUi(this);
+}
+
+ProfileInputDialog::~ProfileInputDialog()
+{
+ delete ui;
+}
+
+QString ProfileInputDialog::getName() const
+{
+ QString result = ui->nameEdit->text();
+ MOBase::fixDirectoryName(result);
+ return result;
+}
+
+
+bool ProfileInputDialog::getPreferDefaultSettings() const
+{
+ return ui->defaultSettingsBox->checkState() == Qt::Checked;
+}
+
diff --git a/src/profilesdialog.cpp b/src/profilesdialog.cpp
index 9955ecd2..69872a24 100644
--- a/src/profilesdialog.cpp
+++ b/src/profilesdialog.cpp
@@ -150,36 +150,55 @@ void ProfilesDialog::on_copyProfileButton_clicked()
{
bool okClicked;
QString name = QInputDialog::getText(this, tr("Name"), tr("Please enter a name for the new profile"), QLineEdit::Normal, QString(), &okClicked);
- if (okClicked && (name.size() > 0)) {
- QListWidget *profilesList = findChild<QListWidget*>("profilesList");
+ fixDirectoryName(name);
+ if (okClicked) {
+ if (name.size() > 0) {
+ QListWidget *profilesList = findChild<QListWidget*>("profilesList");
- try {
- const Profile::Ptr currentProfile = profilesList->currentItem()->data(Qt::UserRole).value<Profile::Ptr>();
- createProfile(name, *currentProfile);
- } catch (const std::exception &e) {
- reportError(tr("failed to copy profile: %1").arg(e.what()));
+ try {
+ const Profile::Ptr currentProfile = profilesList->currentItem()->data(Qt::UserRole).value<Profile::Ptr>();
+ createProfile(name, *currentProfile);
+ } catch (const std::exception &e) {
+ reportError(tr("failed to copy profile: %1").arg(e.what()));
+ }
+ } else {
+ QMessageBox::warning(this, tr("Invalid name"), tr("Invalid profile name"));
}
}
}
void ProfilesDialog::on_removeProfileButton_clicked()
{
- QMessageBox confirmBox(QMessageBox::Question, tr("Confirm"), tr("Are you sure you want to remove this profile?"),
+ QMessageBox confirmBox(QMessageBox::Question, tr("Confirm"), tr("Are you sure you want to remove this profile (including local savegames if any)?"),
QMessageBox::Yes | QMessageBox::No);
if (confirmBox.exec() == QMessageBox::Yes) {
QListWidget *profilesList = findChild<QListWidget*>("profilesList");
Profile::Ptr currentProfile = profilesList->currentItem()->data(Qt::UserRole).value<Profile::Ptr>();
-
- // on destruction, the profile object would write the profile.ini file again, so
- // we have to get rid of the it before deleting the directory
- QString profilePath = currentProfile->getPath();
+ QString profilePath;
+ if (currentProfile.get() == NULL) {
+ profilePath = QDir::fromNativeSeparators(ToQString(GameInfo::instance().getProfilesDir())) + "/" + profilesList->currentItem()->text();
+ if (QMessageBox::question(this, tr("Profile broken"),
+ tr("This profile you're about to delete seems to be broken or the path is invalid. "
+ "I'm about to delete the following folder: \"%1\". Proceed?").arg(profilePath), QMessageBox::Yes | QMessageBox::No) == QMessageBox::No) {
+ return;
+ }
+ } else {
+ // on destruction, the profile object would write the profile.ini file again, so
+ // we have to get rid of the it before deleting the directory
+ profilePath = currentProfile->getPath();
+ }
QListWidgetItem* item = profilesList->takeItem(profilesList->currentRow());
if (item != NULL) {
delete item;
}
- shellDelete(QStringList(profilePath));
+ if (!shellDelete(QStringList(profilePath))) {
+ qWarning("Failed to shell-delete \"%s\" (errorcode %lu), trying regular delete", qPrintable(profilePath), ::GetLastError());
+ if (!removeDir(profilePath)) {
+ qWarning("regular delete failed too");
+ }
+ }
}
}
diff --git a/src/questionboxmemory.cpp b/src/questionboxmemory.cpp
deleted file mode 100644
index a7bb72b6..00000000
--- a/src/questionboxmemory.cpp
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
-Copyright (C) 2012 Sebastian Herbord. All rights reserved.
-
-This file is part of Mod Organizer.
-
-Mod Organizer is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-Mod Organizer is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "questionboxmemory.h"
-#include "ui_questionboxmemory.h"
-
-#include <QMessageBox>
-#include <QPushButton>
-
-QuestionBoxMemory::QuestionBoxMemory(QWidget *parent, const QString &title, const QString &text,
- const QDialogButtonBox::StandardButtons buttons, QDialogButtonBox::StandardButton defaultButton)
- : QDialog(parent), ui(new Ui::QuestionBoxMemory)
-{
- ui->setupUi(this);
-
- this->setWindowTitle(title);
-
- QIcon icon = QApplication::style()->standardIcon(QStyle::SP_MessageBoxQuestion);
- ui->iconLabel->setPixmap(icon.pixmap(128));
- ui->messageLabel->setText(text);
- ui->buttonBox->setStandardButtons(buttons);
- if (defaultButton != QDialogButtonBox::NoButton) {
- ui->buttonBox->button(defaultButton)->setDefault(true);
- }
- connect(ui->buttonBox, SIGNAL(clicked(QAbstractButton*)), this, SLOT(buttonClicked(QAbstractButton*)));
-}
-
-
-QuestionBoxMemory::~QuestionBoxMemory()
-{
- delete ui;
-}
-
-
-void QuestionBoxMemory::buttonClicked(QAbstractButton *button)
-{
- m_Button = ui->buttonBox->standardButton(button);
-}
-
-
-QDialogButtonBox::StandardButton QuestionBoxMemory::query(QWidget *parent,
- QSettings &settings, const QString &name,
- const QString &title, const QString &text, QDialogButtonBox::StandardButtons buttons,
- QDialogButtonBox::StandardButton defaultButton)
-{
- if (settings.contains(QString("DialogChoices/") + name)) {
- return static_cast<QDialogButtonBox::StandardButton>(settings.value(QString("DialogChoices/") + name).toInt());
- } else {
- QuestionBoxMemory dialog(parent, title, text, buttons, defaultButton);
- dialog.exec();
- if (dialog.ui->rememberCheckBox->isChecked()) {
- settings.setValue(QString("DialogChoices/") + name, dialog.m_Button);
- }
- return dialog.m_Button;
- }
-}
diff --git a/src/questionboxmemory.h b/src/questionboxmemory.h
deleted file mode 100644
index 72351830..00000000
--- a/src/questionboxmemory.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
-Copyright (C) 2012 Sebastian Herbord. All rights reserved.
-
-This file is part of Mod Organizer.
-
-Mod Organizer is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-Mod Organizer is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#ifndef QUESTIONBOXMEMORY_H
-#define QUESTIONBOXMEMORY_H
-
-#include <QDialog>
-#include <QSettings>
-#include <QDialogButtonBox>
-
-
-namespace Ui {
- class QuestionBoxMemory;
-}
-
-
-class QuestionBoxMemory : public QDialog
-{
- Q_OBJECT
-
-public:
-
- virtual ~QuestionBoxMemory();
- static QDialogButtonBox::StandardButton query(QWidget *parent,
- QSettings &settings, const QString &name,
- const QString &title, const QString &text,
- QDialogButtonBox::StandardButtons buttons = QDialogButtonBox::Yes | QDialogButtonBox::No,
- QDialogButtonBox::StandardButton defaultButton = QDialogButtonBox::NoButton);
-private slots:
-
- void buttonClicked(QAbstractButton *button);
-
-private:
-
- explicit QuestionBoxMemory(QWidget *parent, const QString &title, const QString &text, const QDialogButtonBox::StandardButtons buttons,
- QDialogButtonBox::StandardButton defaultButton);
-
-private:
-
- Ui::QuestionBoxMemory *ui;
- QDialogButtonBox::StandardButton m_Button;
-
-};
-
-#endif // QUESTIONBOXMEMORY_H
-
-
diff --git a/src/questionboxmemory.ui b/src/questionboxmemory.ui
deleted file mode 100644
index 9c211fe8..00000000
--- a/src/questionboxmemory.ui
+++ /dev/null
@@ -1,139 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>QuestionBoxMemory</class>
- <widget class="QDialog" name="QuestionBoxMemory">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>374</width>
- <height>130</height>
- </rect>
- </property>
- <property name="windowTitle">
- <string notr="true">Placeholder</string>
- </property>
- <layout class="QVBoxLayout" name="verticalLayout" stretch="1,0">
- <property name="spacing">
- <number>1</number>
- </property>
- <property name="margin">
- <number>2</number>
- </property>
- <item>
- <widget class="QFrame" name="frame">
- <property name="frameShape">
- <enum>QFrame::StyledPanel</enum>
- </property>
- <property name="frameShadow">
- <enum>QFrame::Raised</enum>
- </property>
- <layout class="QHBoxLayout" name="horizontalLayout" stretch="0,0">
- <item>
- <widget class="QLabel" name="iconLabel">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Fixed" vsizetype="Preferred">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize">
- <size>
- <width>36</width>
- <height>36</height>
- </size>
- </property>
- <property name="autoFillBackground">
- <bool>false</bool>
- </property>
- <property name="text">
- <string/>
- </property>
- <property name="alignment">
- <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QLabel" name="messageLabel">
- <property name="font">
- <font>
- <pointsize>9</pointsize>
- </font>
- </property>
- <property name="text">
- <string/>
- </property>
- <property name="alignment">
- <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
- </property>
- <property name="wordWrap">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- </item>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout_2">
- <property name="margin">
- <number>7</number>
- </property>
- <item>
- <widget class="QCheckBox" name="rememberCheckBox">
- <property name="text">
- <string>Remember selection</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QDialogButtonBox" name="buttonBox">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="standardButtons">
- <set>QDialogButtonBox::No|QDialogButtonBox::Yes</set>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- </layout>
- </widget>
- <resources/>
- <connections>
- <connection>
- <sender>buttonBox</sender>
- <signal>accepted()</signal>
- <receiver>QuestionBoxMemory</receiver>
- <slot>accept()</slot>
- <hints>
- <hint type="sourcelabel">
- <x>248</x>
- <y>254</y>
- </hint>
- <hint type="destinationlabel">
- <x>157</x>
- <y>274</y>
- </hint>
- </hints>
- </connection>
- <connection>
- <sender>buttonBox</sender>
- <signal>rejected()</signal>
- <receiver>QuestionBoxMemory</receiver>
- <slot>reject()</slot>
- <hints>
- <hint type="sourcelabel">
- <x>316</x>
- <y>260</y>
- </hint>
- <hint type="destinationlabel">
- <x>286</x>
- <y>274</y>
- </hint>
- </hints>
- </connection>
- </connections>
-</ui>
diff --git a/src/resources.qrc b/src/resources.qrc
index 3f27e2cc..bf53ea95 100644
--- a/src/resources.qrc
+++ b/src/resources.qrc
@@ -18,7 +18,7 @@
<file alias="profiles">resources/contact-new.png</file>
<file alias="settings">resources/preferences-system.png</file>
<file alias="executable">resources/application-x-executable.png</file>
- <file>resources/dialog-information.png</file>
+ <file alias="information">resources/dialog-information.png</file>
<file alias="locked">resources/emblem-readonly.png</file>
<file alias="next">resources/go-next_16.png</file>
<file alias="previous">resources/go-previous_16.png</file>
@@ -51,5 +51,9 @@
<file alias="emblem_notes">resources/accessories-text-editor.png</file>
<file alias="version_date">resources/x-office-calendar.png</file>
<file alias="warning_16">resources/dialog-warning_16.png</file>
+ <file alias="attachment">resources/mail-attachment.png</file>
+ <file alias="backup">resources/document-save_32.png</file>
+ <file alias="restore">resources/edit-undo.png</file>
+ <file alias="sort">resources/arrange-boxes.png</file>
</qresource>
</RCC>
diff --git a/src/resources/arrange-boxes.png b/src/resources/arrange-boxes.png
new file mode 100644
index 00000000..b1ab67cf
--- /dev/null
+++ b/src/resources/arrange-boxes.png
Binary files differ
diff --git a/src/resources/document-save_32.png b/src/resources/document-save_32.png
new file mode 100644
index 00000000..db5c52b7
--- /dev/null
+++ b/src/resources/document-save_32.png
Binary files differ
diff --git a/src/resources/edit-undo.png b/src/resources/edit-undo.png
new file mode 100644
index 00000000..61b2ce9a
--- /dev/null
+++ b/src/resources/edit-undo.png
Binary files differ
diff --git a/src/resources/emblem-favorite - 64.png b/src/resources/emblem-favorite - 64.png
new file mode 100644
index 00000000..97b507ed
--- /dev/null
+++ b/src/resources/emblem-favorite - 64.png
Binary files differ
diff --git a/src/resources/mail-attachment.png b/src/resources/mail-attachment.png
new file mode 100644
index 00000000..529bb7f5
--- /dev/null
+++ b/src/resources/mail-attachment.png
Binary files differ
diff --git a/src/safewritefile.cpp b/src/safewritefile.cpp
new file mode 100644
index 00000000..6df8c2b8
--- /dev/null
+++ b/src/safewritefile.cpp
@@ -0,0 +1,48 @@
+/*
+Copyright (C) 2014 Sebastian Herbord. All rights reserved.
+
+This file is part of Mod Organizer.
+
+Mod Organizer is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Mod Organizer is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+
+#include "safewritefile.h"
+#include <QStringList>
+
+
+using namespace MOBase;
+
+
+SafeWriteFile::SafeWriteFile(const QString &fileName)
+: m_FileName(fileName)
+{
+ if (!m_TempFile.open()) {
+ throw MyException(QObject::tr("failed to open temporary file"));
+ }
+}
+
+
+QFile *SafeWriteFile::operator->() {
+ Q_ASSERT(m_TempFile.isOpen());
+ return &m_TempFile;
+}
+
+
+void SafeWriteFile::commit() {
+ shellDeleteQuiet(m_FileName);
+ m_TempFile.rename(m_FileName);
+ m_TempFile.setAutoRemove(false);
+ m_TempFile.close();
+}
diff --git a/src/finddialog.cpp b/src/safewritefile.h
index 58b70ade..56bd7744 100644
--- a/src/finddialog.cpp
+++ b/src/safewritefile.h
@@ -1,48 +1,51 @@
-/*
-Copyright (C) 2012 Sebastian Herbord. All rights reserved.
-
-This file is part of Mod Organizer.
-
-Mod Organizer is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-Mod Organizer is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "finddialog.h"
-#include "ui_finddialog.h"
+/*
+Copyright (C) 2014 Sebastian Herbord. All rights reserved.
+
+This file is part of Mod Organizer.
+
+Mod Organizer is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Mod Organizer is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+
+#ifndef SAFEWRITEFILE_H
+#define SAFEWRITEFILE_H
+
+
+#include <utility.h>
+#include <QTemporaryFile>
+#include <QString>
+
+/**
+ * @brief a wrapper for QFile that ensures the file is only actually (over-)written if writing was successful
+ */
+class SafeWriteFile {
+public:
+ SafeWriteFile(const QString &fileName);
+
+ QFile *operator->();
+
+ void commit();
+
+private:
+ QString m_FileName;
+ QTemporaryFile m_TempFile;
+};
+
+
+#endif // SAFEWRITEFILE_H
-FindDialog::FindDialog(QWidget *parent) :
- QDialog(parent),
- ui(new Ui::FindDialog)
-{
- ui->setupUi(this);
-}
-FindDialog::~FindDialog()
-{
- delete ui;
-}
-void FindDialog::on_nextBtn_clicked()
-{
- emit findNext();
-}
-void FindDialog::on_patternEdit_textChanged(const QString &pattern)
-{
- emit patternChanged(pattern);
-}
-void FindDialog::on_closeBtn_clicked()
-{
- this->close();
-}
diff --git a/src/selectiondialog.cpp b/src/selectiondialog.cpp
index dbc10791..902b4d9c 100644
--- a/src/selectiondialog.cpp
+++ b/src/selectiondialog.cpp
@@ -17,62 +17,67 @@ You should have received a copy of the GNU General Public License
along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "selectiondialog.h"
-#include "ui_selectiondialog.h"
-
-#include <QCommandLinkButton>
-
-SelectionDialog::SelectionDialog(const QString &description, QWidget *parent)
- : QDialog(parent), ui(new Ui::SelectionDialog), m_Choice(NULL), m_ValidateByData(false)
-{
- ui->setupUi(this);
-
- ui->descriptionLabel->setText(description);
-}
-
-SelectionDialog::~SelectionDialog()
-{
- delete ui;
-}
-
-
-void SelectionDialog::addChoice(const QString &buttonText, const QString &description, const QVariant &data)
-{
- QCommandLinkButton *button = new QCommandLinkButton(buttonText, description, ui->buttonBox);
- button->setProperty("data", data);
- ui->buttonBox->addButton(button, QDialogButtonBox::AcceptRole);
- if (data.isValid()) m_ValidateByData = true;
-}
-
-
-QVariant SelectionDialog::getChoiceData()
-{
- return m_Choice->property("data");
-}
-
-
-QString SelectionDialog::getChoiceString()
-{
- if ((m_Choice == NULL) ||
- (m_ValidateByData && !m_Choice->property("data").isValid())) {
- return QString();
- } else {
- return m_Choice->text();
- }
-}
-
-
-void SelectionDialog::on_buttonBox_clicked(QAbstractButton *button)
-{
- m_Choice = button;
- if (!m_ValidateByData || m_Choice->property("data").isValid()) {
- this->accept();
- } else {
- this->reject();
- }
-}
-
-void SelectionDialog::on_cancelButton_clicked()
-{
- this->reject();
-}
+#include "selectiondialog.h"
+#include "ui_selectiondialog.h"
+
+#include <QCommandLinkButton>
+
+SelectionDialog::SelectionDialog(const QString &description, QWidget *parent)
+ : QDialog(parent), ui(new Ui::SelectionDialog), m_Choice(NULL), m_ValidateByData(false)
+{
+ ui->setupUi(this);
+
+ ui->descriptionLabel->setText(description);
+}
+
+SelectionDialog::~SelectionDialog()
+{
+ delete ui;
+}
+
+
+void SelectionDialog::addChoice(const QString &buttonText, const QString &description, const QVariant &data)
+{
+ QCommandLinkButton *button = new QCommandLinkButton(buttonText, description, ui->buttonBox);
+ button->setProperty("data", data);
+ ui->buttonBox->addButton(button, QDialogButtonBox::AcceptRole);
+ if (data.isValid()) m_ValidateByData = true;
+}
+
+int SelectionDialog::numChoices() const
+{
+ return ui->buttonBox->findChildren<QCommandLinkButton*>(QString()).count();
+}
+
+
+QVariant SelectionDialog::getChoiceData()
+{
+ return m_Choice->property("data");
+}
+
+
+QString SelectionDialog::getChoiceString()
+{
+ if ((m_Choice == NULL) ||
+ (m_ValidateByData && !m_Choice->property("data").isValid())) {
+ return QString();
+ } else {
+ return m_Choice->text();
+ }
+}
+
+
+void SelectionDialog::on_buttonBox_clicked(QAbstractButton *button)
+{
+ m_Choice = button;
+ if (!m_ValidateByData || m_Choice->property("data").isValid()) {
+ this->accept();
+ } else {
+ this->reject();
+ }
+}
+
+void SelectionDialog::on_cancelButton_clicked()
+{
+ this->reject();
+}
diff --git a/src/selectiondialog.h b/src/selectiondialog.h
index a2844e97..fc04291e 100644
--- a/src/selectiondialog.h
+++ b/src/selectiondialog.h
@@ -17,50 +17,52 @@ You should have received a copy of the GNU General Public License
along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef SELECTIONDIALOG_H
-#define SELECTIONDIALOG_H
-
-#include <QDialog>
-#include <QAbstractButton>
-
-namespace Ui {
-class SelectionDialog;
-}
-
-class SelectionDialog : public QDialog
-{
- Q_OBJECT
-
-public:
-
- explicit SelectionDialog(const QString &description, QWidget *parent = 0);
-
- ~SelectionDialog();
-
- /**
- * @brief add a choice to the dialog
- * @param buttonText the text to be displayed on the button
- * @param description the description that shows up under in small letters inside the button
- * @param data data to be stored with the button. Please note that as soon as one choice has data associated with it (non-invalid QVariant)
- * all buttons that contain no data will be treated as "cancel" buttons
- */
- void addChoice(const QString &buttonText, const QString &description, const QVariant &data);
-
- QVariant getChoiceData();
- QString getChoiceString();
-
-private slots:
-
- void on_buttonBox_clicked(QAbstractButton *button);
-
- void on_cancelButton_clicked();
-
-private:
-
- Ui::SelectionDialog *ui;
- QAbstractButton *m_Choice;
- bool m_ValidateByData;
-
-};
-
-#endif // SELECTIONDIALOG_H
+#ifndef SELECTIONDIALOG_H
+#define SELECTIONDIALOG_H
+
+#include <QDialog>
+#include <QAbstractButton>
+
+namespace Ui {
+class SelectionDialog;
+}
+
+class SelectionDialog : public QDialog
+{
+ Q_OBJECT
+
+public:
+
+ explicit SelectionDialog(const QString &description, QWidget *parent = 0);
+
+ ~SelectionDialog();
+
+ /**
+ * @brief add a choice to the dialog
+ * @param buttonText the text to be displayed on the button
+ * @param description the description that shows up under in small letters inside the button
+ * @param data data to be stored with the button. Please note that as soon as one choice has data associated with it (non-invalid QVariant)
+ * all buttons that contain no data will be treated as "cancel" buttons
+ */
+ void addChoice(const QString &buttonText, const QString &description, const QVariant &data);
+
+ int numChoices() const;
+
+ QVariant getChoiceData();
+ QString getChoiceString();
+
+private slots:
+
+ void on_buttonBox_clicked(QAbstractButton *button);
+
+ void on_cancelButton_clicked();
+
+private:
+
+ Ui::SelectionDialog *ui;
+ QAbstractButton *m_Choice;
+ bool m_ValidateByData;
+
+};
+
+#endif // SELECTIONDIALOG_H
diff --git a/src/selfupdater.cpp b/src/selfupdater.cpp
index 421fbeab..14df8566 100644
--- a/src/selfupdater.cpp
+++ b/src/selfupdater.cpp
@@ -126,7 +126,6 @@ void SelfUpdater::startUpdate()
void SelfUpdater::download(const QString &downloadLink, const QString &fileName)
{
- qDebug("download: %s", downloadLink.toUtf8().constData());
QNetworkAccessManager *accessManager = m_Interface->getAccessManager();
QUrl dlUrl(downloadLink);
QNetworkRequest request(dlUrl);
@@ -324,7 +323,6 @@ void SelfUpdater::nxmDescriptionAvailable(int, QVariant, QVariant resultData, in
if (m_NewestVersion.isEmpty()) {
QTimer::singleShot(5000, this, SLOT(testForUpdate()));
}
-
VersionInfo currentVersion(m_MOVersion);
VersionInfo newestVersion(m_NewestVersion);
@@ -430,7 +428,7 @@ void SelfUpdater::nxmFilesAvailable(int, QVariant userData, QVariant resultData,
}
-void SelfUpdater::nxmRequestFailed(int, QVariant, int requestID, const QString &errorMessage)
+void SelfUpdater::nxmRequestFailed(int, int, QVariant, int requestID, const QString &errorMessage)
{
if (requestID == m_UpdateRequestID) {
m_UpdateRequestID = -1;
@@ -438,7 +436,8 @@ void SelfUpdater::nxmRequestFailed(int, QVariant, int requestID, const QString &
QTimer::singleShot(60000, this, SLOT(testForUpdate()));
--m_Attempts;
} else {
- MessageDialog::showMessage(tr("Failed to retrieve update information: %1").arg(errorMessage), m_Parent);
+ qWarning("Failed to retrieve update information: %s", qPrintable(errorMessage));
+ MessageDialog::showMessage(tr("Failed to retrieve update information: %1").arg(errorMessage), m_Parent, false);
}
}
}
diff --git a/src/selfupdater.h b/src/selfupdater.h
index 2c4c1ecd..14f7e90a 100644
--- a/src/selfupdater.h
+++ b/src/selfupdater.h
@@ -87,7 +87,7 @@ public slots:
void nxmDescriptionAvailable(int modID, QVariant userData, QVariant resultData, int requestID);
void nxmFilesAvailable(int modID, QVariant userData, QVariant resultData, int requestID);
- void nxmRequestFailed(int modID, QVariant userData, int requestID, const QString &errorMessage);
+ void nxmRequestFailed(int modID, int fileID, QVariant userData, int requestID, const QString &errorMessage);
void nxmDownloadURLsAvailable(int modID, int fileID, QVariant userData, QVariant resultData, int requestID);
signals:
diff --git a/src/settings.cpp b/src/settings.cpp
index 39b6dba7..d9a7e799 100644
--- a/src/settings.cpp
+++ b/src/settings.cpp
@@ -87,11 +87,34 @@ void Settings::clearPlugins()
{
m_Plugins.clear();
m_PluginSettings.clear();
+
+ m_PluginBlacklist.clear();
+ int count = m_Settings.beginReadArray("pluginBlacklist");
+ for (int i = 0; i < count; ++i) {
+ m_Settings.setArrayIndex(i);
+ m_PluginBlacklist.insert(m_Settings.value("name").toString());
+ }
+ m_Settings.endArray();
+}
+
+bool Settings::pluginBlacklisted(const QString &fileName) const
+{
+ return m_PluginBlacklist.contains(fileName);
+}
+
+void Settings::registerAsNXMHandler(bool force)
+{
+ std::wstring nxmPath = ToWString(QCoreApplication::applicationDirPath() + "/nxmhandler.exe");
+ std::wstring executable = ToWString(QCoreApplication::applicationFilePath());
+ std::wstring mode = force ? L"forcereg" : L"reg";
+ ::ShellExecuteW(NULL, L"open", nxmPath.c_str(),
+ (mode + L" " + GameInfo::instance().getGameShortName() + L" \"" + executable + L"\"").c_str(), NULL, SW_SHOWNORMAL);
}
void Settings::registerPlugin(IPlugin *plugin)
{
m_Plugins.push_back(plugin);
+ m_PluginSettings.insert(plugin->name(), QMap<QString, QVariant>());
foreach (const PluginSetting &setting, plugin->settings()) {
QVariant temp = m_Settings.value("Plugins/" + plugin->name() + "/" + setting.key, setting.defaultValue);
if (!temp.convert(setting.defaultValue.type())) {
@@ -145,7 +168,7 @@ bool Settings::automaticLoginEnabled() const
QString Settings::getSteamAppID() const
{
- return m_Settings.value("Settings/app_id", ToQString(GameInfo::instance().getSteamAPPId())).toString();
+ return m_Settings.value("Settings/app_id", ToQString(GameInfo::instance().getSteamAPPId(m_Settings.value("game_edition", 0).toInt()))).toString();
}
QString Settings::getDownloadDirectory() const
@@ -200,7 +223,12 @@ QString Settings::getModDirectory() const
QString Settings::getNMMVersion() const
{
- return m_Settings.value("Settings/nmm_version", "0.34.0").toString();
+ static const QString MIN_NMM_VERSION = "0.47.0";
+ QString result = m_Settings.value("Settings/nmm_version", MIN_NMM_VERSION).toString();
+ if (VersionInfo(result) < VersionInfo(MIN_NMM_VERSION)) {
+ result = MIN_NMM_VERSION;
+ }
+ return result;
}
bool Settings::getNexusLogin(QString &username, QString &password) const
@@ -275,16 +303,47 @@ QVariant Settings::pluginSetting(const QString &pluginName, const QString &key)
{
auto iterPlugin = m_PluginSettings.find(pluginName);
if (iterPlugin == m_PluginSettings.end()) {
- throw MyException(tr("setting for invalid plugin \"%1\" requested").arg(key));
+ return QVariant();
}
auto iterSetting = iterPlugin->find(key);
if (iterSetting == iterPlugin->end()) {
- throw MyException(tr("invalid setting \"%1\" requested for plugin \"%2\"").arg(key).arg(pluginName));
+ return QVariant();
}
return *iterSetting;
}
+void Settings::setPluginSetting(const QString &pluginName, const QString &key, const QVariant &value)
+{
+ auto iterPlugin = m_PluginSettings.find(pluginName);
+ if (iterPlugin == m_PluginSettings.end()) {
+ throw MyException(tr("attempt to store setting for unknown plugin \"%1\"").arg(pluginName));
+ }
+
+ // store the new setting both in memory and in the ini
+ m_PluginSettings[pluginName][key] = value;
+ m_Settings.setValue("Plugins/" + pluginName + "/" + key, value);
+}
+
+QVariant Settings::pluginPersistent(const QString &pluginName, const QString &key, const QVariant &def) const
+{
+ if (!m_PluginSettings.contains(pluginName)) {
+ return def;
+ }
+ return m_Settings.value("PluginPersistance/" + pluginName + "/" + key, def);
+}
+
+void Settings::setPluginPersistent(const QString &pluginName, const QString &key, const QVariant &value, bool sync)
+{
+ if (!m_PluginSettings.contains(pluginName)) {
+ throw MyException(tr("attempt to store setting for unknown plugin \"%1\"").arg(pluginName));
+ }
+ m_Settings.setValue("PluginPersistance/" + pluginName + "/" + key, value);
+ if (sync) {
+ m_Settings.sync();
+ }
+}
+
QString Settings::language()
{
QString result = m_Settings.value("Settings/language", "").toString();
@@ -330,6 +389,23 @@ void Settings::updateServers(const QList<ServerInfo> &servers)
m_Settings.sync();
}
+void Settings::addBlacklistPlugin(const QString &fileName)
+{
+ m_PluginBlacklist.insert(fileName);
+ writePluginBlacklist();
+}
+
+void Settings::writePluginBlacklist()
+{
+ m_Settings.beginWriteArray("pluginBlacklist");
+ int idx = 0;
+ foreach (const QString &plugin, m_PluginBlacklist) {
+ m_Settings.setArrayIndex(idx++);
+ m_Settings.setValue("name", plugin);
+ }
+
+ m_Settings.endArray();
+}
void Settings::addLanguages(QComboBox *languageBox)
{
@@ -360,6 +436,13 @@ void Settings::addLanguages(QComboBox *languageBox)
void Settings::addStyles(QComboBox *styleBox)
{
styleBox->addItem("None", "");
+#if QT_VERSION >= QT_VERSION_CHECK(5,0,0)
+ styleBox->addItem("Fusion", "Fusion");
+#else
+ styleBox->addItem("Plastique", "Plastique");
+ styleBox->addItem("Cleanlooks", "Cleanlooks");
+#endif
+
QDirIterator langIter(QCoreApplication::applicationDirPath() + "/" + ToQString(AppConfig::stylesheetsPath()), QStringList("*.qss"), QDir::Files);
while (langIter.hasNext()) {
langIter.next();
@@ -443,6 +526,7 @@ void Settings::query(QWidget *parent)
// plugis page
QListWidget *pluginsList = dialog.findChild<QListWidget*>("pluginsList");
+ QListWidget *pluginBlacklistList = dialog.findChild<QListWidget*>("pluginBlacklist");
// workarounds page
QCheckBox *forceEnableBox = dialog.findChild<QCheckBox*>("forceEnableBox");
@@ -517,11 +601,12 @@ void Settings::query(QWidget *parent)
downloadDirEdit->setText(getDownloadDirectory());
modDirEdit->setText(getModDirectory());
cacheDirEdit->setText(getCacheDirectory());
- offlineBox->setChecked(m_Settings.value("Settings/offline_mode", false).toBool());
- proxyBox->setChecked(m_Settings.value("Settings/use_proxy", false).toBool());
- nmmVersionEdit->setText(m_Settings.value("Settings/nmm_version", "0.33.1").toString());
+ offlineBox->setChecked(offlineMode());
+ proxyBox->setChecked(useProxy());
+ nmmVersionEdit->setText(getNMMVersion());
logLevelBox->setCurrentIndex(logLevel());
+ // display plugin settings
foreach (IPlugin *plugin, m_Plugins) {
QListWidgetItem *listItem = new QListWidgetItem(plugin->name(), pluginsList);
listItem->setData(Qt::UserRole, QVariant::fromValue((void*)plugin));
@@ -529,6 +614,12 @@ void Settings::query(QWidget *parent)
pluginsList->addItem(listItem);
}
+ // display plugin blacklist
+ foreach (const QString &pluginName, m_PluginBlacklist) {
+ pluginBlacklistList->addItem(pluginName);
+ }
+
+ // display server preferences
m_Settings.beginGroup("Servers");
foreach (const QString &key, m_Settings.childKeys()) {
QVariantMap val = m_Settings.value(key).toMap();
@@ -624,6 +715,13 @@ void Settings::query(QWidget *parent)
}
}
+ // store plugin blacklist
+ m_PluginBlacklist.clear();
+ foreach (QListWidgetItem *item, pluginBlacklistList->findItems("*", Qt::MatchWildcard)) {
+ m_PluginBlacklist.insert(item->text());
+ }
+ writePluginBlacklist();
+
// store server preference
m_Settings.beginGroup("Servers");
for (int i = 0; i < knownServersList->count(); ++i) {
diff --git a/src/settings.h b/src/settings.h
index bf17d162..81174440 100644
--- a/src/settings.h
+++ b/src/settings.h
@@ -57,6 +57,7 @@ public:
/**
* @brief register plugin to be configurable
* @param plugin the plugin to register
+ * @return true if the plugin may be registered, false if it is blacklisted
*/
void registerPlugin(MOBase::IPlugin *plugin);
@@ -195,11 +196,38 @@ public:
* @param pluginName name of the plugin
* @param key name of the setting to retrieve
* @return the requested value as a QVariant
- * @throws an exception is thrown if this setting doesn't exist
+ * @note an invalid QVariant is returned if the the plugin/setting is not declared
*/
QVariant pluginSetting(const QString &pluginName, const QString &key) const;
/**
+ * @brief set a setting for one of the installed mods
+ * @param pluginName name of the plugin
+ * @param key name of the setting to change
+ * @param value the new value to set
+ * @throw an exception is thrown if pluginName is invalid
+ */
+ void setPluginSetting(const QString &pluginName, const QString &key, const QVariant &value);
+
+ /**
+ * @brief retrieve a persistent value for a plugin
+ * @param pluginName name of the plugin to store data for
+ * @param key id of the value to retrieve
+ * @param def default value to return if the value is not set
+ * @return the requested value
+ */
+ QVariant pluginPersistent(const QString &pluginName, const QString &key, const QVariant &def) const;
+
+ /**
+ * @brief set a persistent value for a plugin
+ * @param pluginName name of the plugin to store data for
+ * @param key id of the value to retrieve
+ * @param value value to set
+ * @throw an exception is thrown if pluginName is invalid
+ */
+ void setPluginPersistent(const QString &pluginName, const QString &key, const QVariant &value, bool sync);
+
+ /**
* @return short code of the configured language (corresponding to the translation files)
*/
QString language();
@@ -210,6 +238,31 @@ public:
*/
void updateServers(const QList<ServerInfo> &servers);
+ /**
+ * @brief add a plugin that is to be blacklisted
+ * @param fileName name of the plugin to blacklist
+ */
+ void addBlacklistPlugin(const QString &fileName);
+
+ /**
+ * @brief test if a plugin is blacklisted and shouldn't be loaded
+ * @param fileName name of the plugin
+ * @return true if the file is blacklisted
+ */
+ bool pluginBlacklisted(const QString &fileName) const;
+
+ /**
+ * @return all loaded MO plugins
+ */
+ std::vector<MOBase::IPlugin*> plugins() const { return m_Plugins; }
+
+ /**
+ * @brief register MO as the handler for nxm links
+ * @param force set to true to enforce the registration dialog to show up,
+ * even if the user said earlier not to
+ */
+ void registerAsNXMHandler(bool force);
+
private:
QString obfuscate(const QString &password) const;
@@ -219,6 +272,8 @@ private:
void addStyles(QComboBox *styleBox);
bool isNXMHandler(bool *modifyable);
void setNXMHandlerActive(bool active, bool writable);
+ void readPluginBlacklist();
+ void writePluginBlacklist();
private slots:
@@ -241,6 +296,8 @@ private:
QMap<QString, QMap<QString, QVariant> > m_PluginSettings;
+ QSet<QString> m_PluginBlacklist;
+
};
#endif // WORKAROUNDS_H
diff --git a/src/settingsdialog.cpp b/src/settingsdialog.cpp
index 9f268455..bf1f95dc 100644
--- a/src/settingsdialog.cpp
+++ b/src/settingsdialog.cpp
@@ -21,12 +21,15 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
#include "ui_settingsdialog.h"
#include "categoriesdialog.h"
#include "helper.h"
+#include "noeditdelegate.h"
#include <gameinfo.h>
#include <QDirIterator>
#include <QFileDialog>
#include <QMessageBox>
+#include <QShortcut>
#define WIN32_LEAN_AND_MEAN
#include <Windows.h>
+#include "settings.h"
using namespace MOBase;
@@ -37,6 +40,9 @@ SettingsDialog::SettingsDialog(QWidget *parent)
: TutorableDialog("SettingsDialog", parent), ui(new Ui::SettingsDialog)
{
ui->setupUi(this);
+
+ QShortcut *delShortcut = new QShortcut(QKeySequence(Qt::Key_Delete), ui->pluginBlacklist);
+ connect(delShortcut, SIGNAL(activated()), this, SLOT(deleteBlacklistItem()));
}
SettingsDialog::~SettingsDialog()
@@ -146,6 +152,8 @@ void SettingsDialog::on_pluginsList_currentItemChanged(QListWidgetItem *current,
for (auto iter = settings.begin(); iter != settings.end(); ++iter) {
QTreeWidgetItem *newItem = new QTreeWidgetItem(QStringList(iter.key()));
QVariant value = *iter;
+
+ ui->pluginSettingsList->setItemDelegateForColumn(0, new NoEditDelegate());
newItem->setData(1, Qt::DisplayRole, value);
newItem->setData(1, Qt::EditRole, value);
@@ -153,3 +161,13 @@ void SettingsDialog::on_pluginsList_currentItemChanged(QListWidgetItem *current,
ui->pluginSettingsList->addTopLevelItem(newItem);
}
}
+
+void SettingsDialog::deleteBlacklistItem()
+{
+ ui->pluginBlacklist->takeItem(ui->pluginBlacklist->currentIndex().row());
+}
+
+void SettingsDialog::on_associateButton_clicked()
+{
+ Settings::instance().registerAsNXMHandler(true);
+}
diff --git a/src/settingsdialog.h b/src/settingsdialog.h
index 3bfc1706..0bd9fd23 100644
--- a/src/settingsdialog.h
+++ b/src/settingsdialog.h
@@ -73,6 +73,10 @@ private slots:
void on_pluginsList_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous);
+ void deleteBlacklistItem();
+
+ void on_associateButton_clicked();
+
private:
Ui::SettingsDialog *ui;
};
diff --git a/src/settingsdialog.ui b/src/settingsdialog.ui
index b63965f9..bda6726c 100644
--- a/src/settingsdialog.ui
+++ b/src/settingsdialog.ui
@@ -275,32 +275,29 @@ p, li { white-space: pre-wrap; }
</widget>
</item>
<item>
- <layout class="QFormLayout" name="formLayout">
- <property name="fieldGrowthPolicy">
- <enum>QFormLayout::AllNonFixedFieldsGrow</enum>
- </property>
- <item row="0" column="0">
+ <layout class="QHBoxLayout" name="horizontalLayout_10">
+ <item>
<widget class="QLabel" name="label_2">
<property name="text">
<string>Username</string>
</property>
</widget>
</item>
- <item row="0" column="1">
+ <item>
<widget class="QLineEdit" name="usernameEdit">
<property name="enabled">
<bool>false</bool>
</property>
</widget>
</item>
- <item row="1" column="0">
+ <item>
<widget class="QLabel" name="label_3">
<property name="text">
<string>Password</string>
</property>
</widget>
</item>
- <item row="1" column="1">
+ <item>
<widget class="QLineEdit" name="passwordEdit">
<property name="enabled">
<bool>false</bool>
@@ -342,13 +339,40 @@ p, li { white-space: pre-wrap; }
</widget>
</item>
<item>
- <layout class="QHBoxLayout" name="horizontalLayout_8">
+ <layout class="QHBoxLayout" name="horizontalLayout_7">
+ <item>
+ <widget class="QPushButton" name="associateButton">
+ <property name="text">
+ <string>Associate with &quot;Download with manager&quot; links</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer_4">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_8" stretch="0,0">
+ <property name="spacing">
+ <number>4</number>
+ </property>
<item>
<layout class="QVBoxLayout" name="verticalLayout_6">
<item>
<widget class="QLabel" name="label_16">
<property name="text">
- <string>Known Servers (Dynamically updated every download)</string>
+ <string>Known Servers (updated on download)</string>
</property>
</widget>
</item>
@@ -406,102 +430,116 @@ p, li { white-space: pre-wrap; }
<attribute name="title">
<string>Plugins</string>
</attribute>
- <layout class="QHBoxLayout" name="horizontalLayout_7" stretch="0,1">
+ <layout class="QVBoxLayout" name="verticalLayout_9" stretch="0,0,0">
<item>
- <widget class="QListWidget" name="pluginsList">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Fixed" vsizetype="Expanding">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- </widget>
- </item>
- <item>
- <layout class="QVBoxLayout" name="verticalLayout_7" stretch="0,1">
+ <layout class="QHBoxLayout" name="horizontalLayout_9">
<item>
- <layout class="QFormLayout" name="formLayout_2">
- <item row="0" column="0">
- <widget class="QLabel" name="label_13">
- <property name="text">
- <string>Author:</string>
- </property>
- </widget>
- </item>
- <item row="0" column="1">
- <widget class="QLabel" name="authorLabel">
- <property name="text">
- <string/>
- </property>
- </widget>
- </item>
- <item row="1" column="0">
- <widget class="QLabel" name="label_15">
- <property name="text">
- <string>Version:</string>
- </property>
- </widget>
+ <widget class="QListWidget" name="pluginsList">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Fixed" vsizetype="Expanding">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <layout class="QVBoxLayout" name="verticalLayout_7" stretch="0,1">
+ <item>
+ <layout class="QFormLayout" name="formLayout_2">
+ <item row="0" column="0">
+ <widget class="QLabel" name="label_13">
+ <property name="text">
+ <string>Author:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QLabel" name="authorLabel">
+ <property name="text">
+ <string/>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="label_15">
+ <property name="text">
+ <string>Version:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="QLabel" name="versionLabel">
+ <property name="text">
+ <string/>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="0">
+ <widget class="QLabel" name="label_14">
+ <property name="text">
+ <string>Description:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="1">
+ <widget class="QLabel" name="descriptionLabel">
+ <property name="text">
+ <string/>
+ </property>
+ <property name="wordWrap">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ </layout>
</item>
- <item row="1" column="1">
- <widget class="QLabel" name="versionLabel">
- <property name="text">
- <string/>
+ <item>
+ <widget class="QTreeWidget" name="pluginSettingsList">
+ <property name="indentation">
+ <number>0</number>
</property>
- </widget>
- </item>
- <item row="2" column="0">
- <widget class="QLabel" name="label_14">
- <property name="text">
- <string>Description:</string>
+ <property name="rootIsDecorated">
+ <bool>false</bool>
</property>
- </widget>
- </item>
- <item row="2" column="1">
- <widget class="QLabel" name="descriptionLabel">
- <property name="text">
- <string/>
+ <property name="itemsExpandable">
+ <bool>false</bool>
</property>
- <property name="wordWrap">
- <bool>true</bool>
+ <property name="expandsOnDoubleClick">
+ <bool>false</bool>
</property>
+ <attribute name="headerVisible">
+ <bool>false</bool>
+ </attribute>
+ <attribute name="headerDefaultSectionSize">
+ <number>100</number>
+ </attribute>
+ <column>
+ <property name="text">
+ <string>Key</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Value</string>
+ </property>
+ </column>
</widget>
</item>
</layout>
</item>
- <item>
- <widget class="QTreeWidget" name="pluginSettingsList">
- <property name="indentation">
- <number>0</number>
- </property>
- <property name="rootIsDecorated">
- <bool>false</bool>
- </property>
- <property name="itemsExpandable">
- <bool>false</bool>
- </property>
- <property name="expandsOnDoubleClick">
- <bool>false</bool>
- </property>
- <attribute name="headerVisible">
- <bool>false</bool>
- </attribute>
- <attribute name="headerDefaultSectionSize">
- <number>100</number>
- </attribute>
- <column>
- <property name="text">
- <string>Key</string>
- </property>
- </column>
- <column>
- <property name="text">
- <string>Value</string>
- </property>
- </column>
- </widget>
- </item>
</layout>
</item>
+ <item>
+ <widget class="QLabel" name="label_18">
+ <property name="text">
+ <string>Blacklisted Plugins (use &lt;del&gt; to remove):</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QListWidget" name="pluginBlacklist"/>
+ </item>
</layout>
</widget>
<widget class="QWidget" name="workaroundTab">
diff --git a/src/shared/appconfig.inc b/src/shared/appconfig.inc
index 7710925a..080d3655 100644
--- a/src/shared/appconfig.inc
+++ b/src/shared/appconfig.inc
@@ -1,6 +1,7 @@
APPPARAM(std::wstring, translationPrefix, L"organizer")
APPPARAM(std::wstring, pluginPath, L"plugins")
APPPARAM(std::wstring, stylesheetsPath, L"stylesheets")
+APPPARAM(std::wstring, profileTweakIni, L"profile_tweaks.ini")
APPPARAM(std::wstring, logFile, L"ModOrganizer.log")
APPPARAM(std::wstring, proxyDLLTarget, L"steam_api.dll")
APPPARAM(std::wstring, proxyDLLOrig, L"steam_api_orig.dll") // needs to be identical to the value used in proxydll-project
diff --git a/src/shared/directoryentry.cpp b/src/shared/directoryentry.cpp
index bd33fef6..a232ea19 100644
--- a/src/shared/directoryentry.cpp
+++ b/src/shared/directoryentry.cpp
@@ -492,6 +492,12 @@ static bool SupportOptimizedFind()
}
+static bool DirCompareByName(const DirectoryEntry *lhs, const DirectoryEntry *rhs)
+{
+ return _wcsicmp(lhs->getName().c_str(), rhs->getName().c_str()) < 0;
+}
+
+
void DirectoryEntry::addFiles(FilesOrigin &origin, wchar_t *buffer, int bufferOffset)
{
WIN32_FIND_DATAW findData;
@@ -523,6 +529,7 @@ void DirectoryEntry::addFiles(FilesOrigin &origin, wchar_t *buffer, int bufferOf
result = ::FindNextFileW(searchHandle, &findData);
}
}
+ std::sort(m_SubDirectories.begin(), m_SubDirectories.end(), &DirCompareByName);
::FindClose(searchHandle);
}
@@ -568,8 +575,9 @@ void DirectoryEntry::removeDirRecursive()
for (auto iter = m_SubDirectories.begin(); iter != m_SubDirectories.end(); ++iter) {
(*iter)->removeDirRecursive();
+ delete *iter;
}
- m_SubDirectories.clear();
+ m_SubDirectories.clear();
}
void DirectoryEntry::removeDir(const std::wstring &path)
@@ -578,8 +586,10 @@ void DirectoryEntry::removeDir(const std::wstring &path)
if (pos == std::string::npos) {
for (auto iter = m_SubDirectories.begin(); iter != m_SubDirectories.end(); ++iter) {
if (_wcsicmp((*iter)->getName().c_str(), path.c_str()) == 0) {
- (*iter)->removeDirRecursive();
+ DirectoryEntry *entry = *iter;
+ entry->removeDirRecursive();
m_SubDirectories.erase(iter);
+ delete entry;
break;
}
}
@@ -743,7 +753,13 @@ DirectoryEntry *DirectoryEntry::findSubDirectory(const std::wstring &name) const
}
-const FileEntry::Ptr DirectoryEntry::findFile(const std::wstring &name)
+DirectoryEntry *DirectoryEntry::findSubDirectoryRecursive(const std::wstring &path)
+{
+ return getSubDirectoryRecursive(path, false, -1);
+}
+
+
+const FileEntry::Ptr DirectoryEntry::findFile(const std::wstring &name) const
{
auto iter = m_Files.find(name);
if (iter != m_Files.end()) {
@@ -824,7 +840,7 @@ FileEntry::Ptr FileRegister::createFile(const std::wstring &name, DirectoryEntry
}
-FileEntry::Ptr FileRegister::getFile(FileEntry::Index index)
+FileEntry::Ptr FileRegister::getFile(FileEntry::Index index) const
{
auto iter = m_Files.find(index);
if (iter != m_Files.end()) {
diff --git a/src/shared/directoryentry.h b/src/shared/directoryentry.h
index 498ebfe1..15af5e9e 100644
--- a/src/shared/directoryentry.h
+++ b/src/shared/directoryentry.h
@@ -71,6 +71,7 @@ public:
const std::vector<int> &getAlternatives() const { return m_Alternatives; }
const std::wstring &getName() const { return m_Name; }
+ int getOrigin() const { return m_Origin; }
int getOrigin(bool &archive) const { archive = (m_Archive.length() != 0); return m_Origin; }
const std::wstring &getArchive() const { return m_Archive; }
bool isFromArchive() const { return m_Archive.length() != 0; }
@@ -168,7 +169,7 @@ public:
bool indexValid(FileEntry::Index index) const;
FileEntry::Ptr createFile(const std::wstring &name, DirectoryEntry *parent);
- FileEntry::Ptr getFile(FileEntry::Index index);
+ FileEntry::Ptr getFile(FileEntry::Index index) const;
void removeFile(FileEntry::Index index);
void removeOrigin(FileEntry::Index index, int originID);
@@ -204,6 +205,8 @@ public:
void clear();
bool isPopulated() const { return m_Populated; }
+ bool isEmpty() const { return (m_Files.size() == 0) && (m_SubDirectories.size() == 0); }
+
const DirectoryEntry *getParent() const { return m_Parent; }
// add files to this directory (and subdirectories) from the specified origin. That origin may exist or not
@@ -227,16 +230,16 @@ public:
}
DirectoryEntry *findSubDirectory(const std::wstring &name) const;
+ DirectoryEntry *findSubDirectoryRecursive(const std::wstring &path);
/** retrieve a file in this directory by name.
* @param name name of the file
* @return fileentry object for the file or NULL if no file matches
*/
- const FileEntry::Ptr findFile(const std::wstring &name);
+ const FileEntry::Ptr findFile(const std::wstring &name) const;
- /** search through this directory and all subdirectories for a file by the specified name.
- if directory is not NULL, the referenced variable will be set to true if the path refers to a directory.
- the returned pointer is NULL in that case */
+ /** search through this directory and all subdirectories for a file by the specified name (relative path).
+ if directory is not NULL, the referenced variable will be set to the path containing the file */
const FileEntry::Ptr searchFile(const std::wstring &path, const DirectoryEntry **directory) const;
void insertFile(const std::wstring &filePath, FilesOrigin &origin, FILETIME fileTime);
diff --git a/src/shared/fallout3info.cpp b/src/shared/fallout3info.cpp
index 79dd90c9..1808d1d9 100644
--- a/src/shared/fallout3info.cpp
+++ b/src/shared/fallout3info.cpp
@@ -133,10 +133,17 @@ std::wstring Fallout3Info::getOMODExt()
return L"fomod";
}
+std::vector<std::wstring> Fallout3Info::getSteamVariants() const
+{
+ return boost::assign::list_of(L"Regular")(L"Game Of The Year");
+}
-std::wstring Fallout3Info::getSteamAPPId()
+std::wstring Fallout3Info::getSteamAPPId(int variant) const
{
- return L"22300";
+ switch (variant) {
+ case 1: return L"22370";
+ default: return L"22300";
+ }
}
@@ -146,15 +153,19 @@ std::wstring Fallout3Info::getSEName()
}
-std::wstring Fallout3Info::getNexusPage()
+std::wstring Fallout3Info::getNexusPage(bool nmmScheme)
{
- return L"http://fallout3.nexusmods.com";
+ if (nmmScheme) {
+ return L"http://nmm.nexusmods.com/fallout3";
+ } else {
+ return L"http://www.nexusmods.com/fallout3";
+ }
}
std::wstring Fallout3Info::getNexusInfoUrlStatic()
{
- return L"http://fallout3.nexusmods.com";
+ return L"http://nmm.nexusmods.com/fallout3";
}
diff --git a/src/shared/fallout3info.h b/src/shared/fallout3info.h
index 95a76471..9575103b 100644
--- a/src/shared/fallout3info.h
+++ b/src/shared/fallout3info.h
@@ -66,15 +66,17 @@ public:
virtual std::wstring getReferenceDataFile();
virtual std::wstring getOMODExt();
- virtual std::wstring getSteamAPPId();
+ virtual std::vector<std::wstring> getSteamVariants() const;
+ virtual std::wstring getSteamAPPId(int variant = 0) const;
virtual std::wstring getSEName();
- virtual std::wstring getNexusPage();
+ virtual std::wstring getNexusPage(bool nmmScheme = true);
static std::wstring getNexusInfoUrlStatic();
virtual std::wstring getNexusInfoUrl() { return Fallout3Info::getNexusInfoUrlStatic(); }
static int getNexusModIDStatic();
virtual int getNexusModID() { return Fallout3Info::getNexusModIDStatic(); }
+ virtual int getNexusGameID() { return 120; }
virtual void createProfile(const std::wstring &directory, bool useDefaults);
virtual void repairProfile(const std::wstring &directory);
diff --git a/src/shared/falloutnvinfo.cpp b/src/shared/falloutnvinfo.cpp
index 6da454ee..e7e747e2 100644
--- a/src/shared/falloutnvinfo.cpp
+++ b/src/shared/falloutnvinfo.cpp
@@ -136,7 +136,7 @@ std::wstring FalloutNVInfo::getOMODExt()
}
-std::wstring FalloutNVInfo::getSteamAPPId()
+std::wstring FalloutNVInfo::getSteamAPPId(int) const
{
return L"22380";
}
@@ -207,15 +207,19 @@ std::wstring FalloutNVInfo::getSEName()
}
-std::wstring FalloutNVInfo::getNexusPage()
+std::wstring FalloutNVInfo::getNexusPage(bool nmmScheme)
{
- return L"http://newvegas.nexusmods.com";
+ if (nmmScheme) {
+ return L"http://nmm.nexusmods.com/newvegas";
+ } else {
+ return L"http://www.nexusmods.com/newvegas";
+ }
}
std::wstring FalloutNVInfo::getNexusInfoUrlStatic()
{
- return L"http://newvegas.nexusmods.com";
+ return L"http://nmm.nexusmods.com/newvegas";
}
diff --git a/src/shared/falloutnvinfo.h b/src/shared/falloutnvinfo.h
index 2f6cba7b..8767fdb0 100644
--- a/src/shared/falloutnvinfo.h
+++ b/src/shared/falloutnvinfo.h
@@ -68,15 +68,16 @@ public:
virtual std::wstring getReferenceDataFile();
virtual std::wstring getOMODExt();
- virtual std::wstring getSteamAPPId();
+ virtual std::wstring getSteamAPPId(int variant = 0) const;
virtual std::wstring getSEName();
- virtual std::wstring getNexusPage();
+ virtual std::wstring getNexusPage(bool nmmScheme = true);
static std::wstring getNexusInfoUrlStatic();
virtual std::wstring getNexusInfoUrl() { return FalloutNVInfo::getNexusInfoUrlStatic(); }
static int getNexusModIDStatic();
virtual int getNexusModID() { return FalloutNVInfo::getNexusModIDStatic(); }
+ virtual int getNexusGameID() { return 130; }
virtual void createProfile(const std::wstring &directory, bool useDefaults);
virtual void repairProfile(const std::wstring &directory);
diff --git a/src/shared/gameinfo.cpp b/src/shared/gameinfo.cpp
index fd5072bf..b580a226 100644
--- a/src/shared/gameinfo.cpp
+++ b/src/shared/gameinfo.cpp
@@ -30,6 +30,7 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
#include <shlobj.h>
#include <sstream>
#include <cassert>
+#include <boost/assign.hpp>
namespace MOShared {
@@ -40,6 +41,13 @@ GameInfo* GameInfo::s_Instance = NULL;
GameInfo::GameInfo(const std::wstring &omoDirectory, const std::wstring &gameDirectory)
: m_GameDirectory(gameDirectory), m_OrganizerDirectory(omoDirectory)
{
+ atexit(&cleanup);
+}
+
+
+void GameInfo::cleanup() {
+ delete GameInfo::s_Instance;
+ GameInfo::s_Instance = NULL;
}
@@ -62,36 +70,36 @@ void GameInfo::identifyMyGamesDirectory(const std::wstring &file)
}
-bool GameInfo::identifyGame(const std::wstring &omoDirectory, const std::wstring &searchPath)
+bool GameInfo::identifyGame(const std::wstring &moDirectory, const std::wstring &searchPath)
{
if (OblivionInfo::identifyGame(searchPath)) {
- s_Instance = new OblivionInfo(omoDirectory, searchPath);
+ s_Instance = new OblivionInfo(moDirectory, searchPath);
} else if (Fallout3Info::identifyGame(searchPath)) {
- s_Instance = new Fallout3Info(omoDirectory, searchPath);
+ s_Instance = new Fallout3Info(moDirectory, searchPath);
} else if (FalloutNVInfo::identifyGame(searchPath)) {
- s_Instance = new FalloutNVInfo(omoDirectory, searchPath);
+ s_Instance = new FalloutNVInfo(moDirectory, searchPath);
} else if (SkyrimInfo::identifyGame(searchPath)) {
- s_Instance = new SkyrimInfo(omoDirectory, searchPath);
+ s_Instance = new SkyrimInfo(moDirectory, searchPath);
}
return s_Instance != NULL;
}
-bool GameInfo::init(const std::wstring &omoDirectory, const std::wstring &gamePath)
+bool GameInfo::init(const std::wstring &moDirectory, const std::wstring &gamePath)
{
if (s_Instance == NULL) {
if (gamePath.length() == 0) {
// search upward in the directory until a recognized game-binary is found
- std::wstring searchPath(omoDirectory);
- while (!identifyGame(omoDirectory, searchPath)) {
+ std::wstring searchPath(moDirectory);
+ while (!identifyGame(moDirectory, searchPath)) {
size_t lastSep = searchPath.find_last_of(L"/\\");
if (lastSep == std::string::npos) {
return false;
}
searchPath.erase(lastSep);
}
- } else if (!identifyGame(omoDirectory, gamePath)) {
+ } else if (!identifyGame(moDirectory, gamePath)) {
return false;
}
}
@@ -164,6 +172,14 @@ std::wstring GameInfo::getLogDir() const
}
+std::wstring GameInfo::getLootDir() const
+{
+ std::wostringstream temp;
+ temp << m_OrganizerDirectory << "\\loot";
+ return temp.str();
+}
+
+
std::wstring GameInfo::getTutorialDir() const
{
std::wostringstream temp;
@@ -177,6 +193,11 @@ bool GameInfo::requiresSteam() const
return FileExists(getGameDirectory().append(L"\\steam_api.dll"));
}
+std::vector<std::wstring> GameInfo::getSteamVariants() const
+{
+ return boost::assign::list_of(L"Regular");
+}
+
std::wstring GameInfo::getLocalAppFolder() const
{
@@ -204,4 +225,4 @@ std::wstring GameInfo::getSpecialPath(LPCWSTR name) const
return temp;
}
-} // namespace MOShared
+} // namespace MOShared
diff --git a/src/shared/gameinfo.h b/src/shared/gameinfo.h
index 3e022ef4..89c9402d 100644
--- a/src/shared/gameinfo.h
+++ b/src/shared/gameinfo.h
@@ -113,6 +113,7 @@ public:
virtual std::wstring getCacheDir() const;
virtual std::wstring getOverwriteDir() const;
virtual std::wstring getLogDir() const;
+ virtual std::wstring getLootDir() const;
virtual std::wstring getTutorialDir() const;
virtual bool requiresBSAInvalidation() const { return true; }
@@ -137,13 +138,15 @@ public:
virtual std::wstring getOMODExt() = 0;
- virtual std::wstring getSteamAPPId() = 0;
+ virtual std::vector<std::wstring> getSteamVariants() const;
+ virtual std::wstring getSteamAPPId(int variant = 0) const = 0;
virtual std::wstring getSEName() = 0;
- virtual std::wstring getNexusPage() = 0;
+ virtual std::wstring getNexusPage(bool nmmScheme = true) = 0;
virtual std::wstring getNexusInfoUrl() = 0;
virtual int getNexusModID() = 0;
+ virtual int getNexusGameID() = 0;
// clone relevant files to the specified directory
virtual void createProfile(const std::wstring &directory, bool useDefaults) = 0;
@@ -176,9 +179,11 @@ private:
static bool identifyGame(const std::wstring &omoDirectory, const std::wstring &searchPath);
std::wstring getSpecialPath(LPCWSTR name) const;
+ static void cleanup();
+
private:
- static GameInfo* s_Instance;
+ static GameInfo *s_Instance;
std::wstring m_MyGamesDirectory;
diff --git a/src/shared/leaktrace.cpp b/src/shared/leaktrace.cpp
index 0c618b68..68e57609 100644
--- a/src/shared/leaktrace.cpp
+++ b/src/shared/leaktrace.cpp
@@ -3,7 +3,9 @@
#include <DbgHelp.h>
#include <set>
#include <map>
+#include <vector>
#include <sstream>
+#include <algorithm>
static const int FRAMES_TO_SKIP = 3; // StackData::StackData(), __TraceData::regTrace(), TraceAlloc()
@@ -32,8 +34,18 @@ class StackData {
friend bool operator==(const StackData &LHS, const StackData &RHS);
friend bool operator<(const StackData &LHS, const StackData &RHS);
public:
- StackData() {
+
+ StackData()
+ : m_FunctionName("Dummy"), m_CodeLine(0)
+ {}
+ StackData(const char *functionName, int line) {
m_Count = ::CaptureStackBackTrace(FRAMES_TO_SKIP, FRAMES_TO_CAPTURE, m_Stack, &m_Hash);
+ m_FunctionName = functionName;
+ m_CodeLine = line;
+ if (m_Count == 0) {
+ // TODO in this case the hash doesn't seem to be set. This is of course not a good solution
+ m_Hash = reinterpret_cast<unsigned long>(m_FunctionName) + m_CodeLine;
+ }
}
std::string toString() const {
initDbgIfNecessary();
@@ -45,6 +57,8 @@ public:
std::ostringstream stackStream;
+ stackStream << m_FunctionName << " [" << m_CodeLine << "]\n";
+
for(unsigned int i = 0; i < m_Count; ++i) {
DWORD64 displacement = 0;
if (!::SymFromAddr(::GetCurrentProcess(), (DWORD64)m_Stack[i], &displacement, symbol)) {
@@ -59,6 +73,8 @@ private:
LPVOID m_Stack[FRAMES_TO_CAPTURE];
USHORT m_Count;
ULONG m_Hash;
+ const char *m_FunctionName;
+ int m_CodeLine;
};
bool operator==(const StackData &LHS, const StackData &RHS) {
@@ -70,10 +86,9 @@ bool operator<(const StackData &LHS, const StackData &RHS) {
}
-
static struct __TraceData {
- void regTrace(void *pointer) {
- m_Traces[reinterpret_cast<unsigned long>(pointer)] = StackData();
+ void regTrace(void *pointer, const char *functionName, int line) {
+ m_Traces[reinterpret_cast<unsigned long>(pointer)] = StackData(functionName, line);
}
void deregTrace(void *pointer) {
auto iter = m_Traces.find(reinterpret_cast<unsigned long>(pointer));
@@ -83,24 +98,30 @@ static struct __TraceData {
}
~__TraceData() {
- std::map<StackData, int> result;
+ std::map<StackData, std::vector<unsigned long> > result;
for (auto iter = m_Traces.begin(); iter != m_Traces.end(); ++iter) {
- result[iter->second] += 1;
+ result[iter->second].push_back(iter->first);
}
for (auto iter = result.begin(); iter != result.end(); ++iter) {
printf("-----------------------------------\n"
"%d objects not freed, allocated at:\n%s",
- iter->second, iter->first.toString().c_str());
+ iter->second.size(), iter->first.toString().c_str());
+ printf("Addresses: ");
+ for (int i = 0; i < (std::min<int>)(5, iter->second.size()); ++i) {
+ printf("%p, ", iter->second[i]);
+ }
+ printf("\n");
}
}
std::map<unsigned long, StackData> m_Traces;
+
} __trace;
-void LeakTrace::TraceAlloc(void *ptr)
+void LeakTrace::TraceAlloc(void *ptr, const char *functionName, int line)
{
- __trace.regTrace(ptr);
+ __trace.regTrace(ptr, functionName, line);
}
void LeakTrace::TraceDealloc(void *ptr)
diff --git a/src/shared/leaktrace.h b/src/shared/leaktrace.h
index 78764260..4985925e 100644
--- a/src/shared/leaktrace.h
+++ b/src/shared/leaktrace.h
@@ -4,14 +4,14 @@
namespace LeakTrace {
-void TraceAlloc(void *ptr);
+void TraceAlloc(void *ptr, const char *functionName, int line);
void TraceDealloc(void *ptr);
};
#ifdef TRACE_LEAKS
-#define LEAK_TRACE LeakTrace::TraceAlloc(this)
+#define LEAK_TRACE LeakTrace::TraceAlloc(this, __FUNCTION__, __LINE__)
#define LEAK_UNTRACE LeakTrace::TraceDealloc(this)
#else // TRACE_LEAKS
diff --git a/src/shared/oblivioninfo.cpp b/src/shared/oblivioninfo.cpp
index 7c6d5cbb..d8daa0f7 100644
--- a/src/shared/oblivioninfo.cpp
+++ b/src/shared/oblivioninfo.cpp
@@ -189,15 +189,19 @@ std::wstring OblivionInfo::getSEName()
}
-std::wstring OblivionInfo::getNexusPage()
+std::wstring OblivionInfo::getNexusPage(bool nmmScheme)
{
- return L"http://oblivion.nexusmods.com";
+ if (nmmScheme) {
+ return L"http://nmm.nexusmods.com/oblivion";
+ } else {
+ return L"http://www.nexusmods.com/oblivion";
+ }
}
std::wstring OblivionInfo::getNexusInfoUrlStatic()
{
- return L"http://oblivion.nexusmods.com";
+ return L"http://nmm.nexusmods.com/oblivion";
}
@@ -243,7 +247,7 @@ std::wstring OblivionInfo::getOMODExt()
}
-std::wstring OblivionInfo::getSteamAPPId()
+std::wstring OblivionInfo::getSteamAPPId(int) const
{
return L"22330";
}
diff --git a/src/shared/oblivioninfo.h b/src/shared/oblivioninfo.h
index 13374aa3..ba27aa40 100644
--- a/src/shared/oblivioninfo.h
+++ b/src/shared/oblivioninfo.h
@@ -64,15 +64,16 @@ public:
virtual std::wstring getReferenceDataFile();
virtual std::wstring getOMODExt();
- virtual std::wstring getSteamAPPId();
+ virtual std::wstring getSteamAPPId(int variant = 0) const;
virtual std::wstring getSEName();
- virtual std::wstring getNexusPage();
+ virtual std::wstring getNexusPage(bool nmmScheme = true);
static std::wstring getNexusInfoUrlStatic();
virtual std::wstring getNexusInfoUrl() { return OblivionInfo::getNexusInfoUrlStatic(); }
static int getNexusModIDStatic();
virtual int getNexusModID() { return OblivionInfo::getNexusModIDStatic(); }
+ virtual int getNexusGameID() { return 101; }
virtual void createProfile(const std::wstring &directory, bool useDefaults);
virtual void repairProfile(const std::wstring &directory);
diff --git a/src/shared/shared.pro b/src/shared/shared.pro
index ab0bd8a0..992fd7f2 100644
--- a/src/shared/shared.pro
+++ b/src/shared/shared.pro
@@ -13,9 +13,17 @@ CONFIG += staticlib
INCLUDEPATH += ../bsatk "$(BOOSTPATH)"
+
+# only for custom leak detection
+#DEFINES += TRACE_LEAKS
+#LIBS += -lDbgHelp
+
+
CONFIG(debug, debug|release) {
- LIBS += -L$$OUT_PWD/../bsatk/debug
+ LIBS += -L$$OUT_PWD/../bsatk/debug
LIBS += -lDbgHelp
+ QMAKE_CXXFLAGS_DEBUG -= -Zi
+ QMAKE_CXXFLAGS += -Z7
} else {
LIBS += -L$$OUT_PWD/../bsatk/release
}
diff --git a/src/shared/shared.qbs b/src/shared/shared.qbs
new file mode 100644
index 00000000..1fa471a0
--- /dev/null
+++ b/src/shared/shared.qbs
@@ -0,0 +1,20 @@
+import qbs.base 1.0
+
+StaticLibrary {
+ name: {
+ print(qbs.getenv("BOOSTPATH") + "/stage/lib")
+ return 'Shared'
+ }
+
+ Depends { name: 'cpp' }
+ Depends { name: 'BSAToolkit' }
+
+ cpp.defines: []
+ cpp.libraryPaths: [ qbs.getenv("BOOSTPATH") + "/stage/lib" ]
+ cpp.includePaths: [ '../bsatk', qbs.getenv("BOOSTPATH") ]
+ files: [
+ '*.h',
+ '*.cpp',
+ '*.inc'
+ ]
+}
diff --git a/src/shared/skyriminfo.cpp b/src/shared/skyriminfo.cpp
index 80cf4c80..1620bcc3 100644
--- a/src/shared/skyriminfo.cpp
+++ b/src/shared/skyriminfo.cpp
@@ -33,8 +33,8 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
namespace MOShared {
-SkyrimInfo::SkyrimInfo(const std::wstring &omoDirectory, const std::wstring &gameDirectory)
- : GameInfo(omoDirectory, gameDirectory)
+SkyrimInfo::SkyrimInfo(const std::wstring &moDirectory, const std::wstring &gameDirectory)
+ : GameInfo(moDirectory, gameDirectory)
{
identifyMyGamesDirectory(L"skyrim");
@@ -169,7 +169,7 @@ std::wstring SkyrimInfo::getOMODExt()
}
-std::wstring SkyrimInfo::getSteamAPPId()
+std::wstring SkyrimInfo::getSteamAPPId(int) const
{
return L"72850";
}
@@ -181,15 +181,19 @@ std::wstring SkyrimInfo::getSEName()
}
-std::wstring SkyrimInfo::getNexusPage()
+std::wstring SkyrimInfo::getNexusPage(bool nmmScheme)
{
- return L"http://skyrim.nexusmods.com";
+ if (nmmScheme) {
+ return L"http://nmm.nexusmods.com/skyrim";
+ } else {
+ return L"http://www.nexusmods.com/skyrim";
+ }
}
std::wstring SkyrimInfo::getNexusInfoUrlStatic()
{
- return L"http://skyrim.nexusmods.com";
+ return L"http://nmm.nexusmods.com/skyrim";
}
@@ -295,6 +299,7 @@ std::vector<ExecutableInfo> SkyrimInfo::getExecutables()
result.push_back(ExecutableInfo(L"SKSE", L"skse_loader.exe", L"", L"", DEFAULT_CLOSE));
result.push_back(ExecutableInfo(L"SBW", L"SBW.exe", L"", L"", DEFAULT_CLOSE));
result.push_back(ExecutableInfo(L"Skyrim", L"TESV.exe", L"", L"", DEFAULT_CLOSE));
+ result.push_back(ExecutableInfo(L"Skyrim Launcher", L"SkyrimLauncher.exe", L"", L"", DEFAULT_CLOSE));
result.push_back(ExecutableInfo(L"BOSS", L"BOSS/BOSS.exe", L"", L"", DEFAULT_STAY));
result.push_back(ExecutableInfo(L"Creation Kit", L"CreationKit.exe", L"", L"", DEFAULT_STAY, L"202480"));
diff --git a/src/shared/skyriminfo.h b/src/shared/skyriminfo.h
index 4760c38b..438beb41 100644
--- a/src/shared/skyriminfo.h
+++ b/src/shared/skyriminfo.h
@@ -71,16 +71,17 @@ public:
virtual std::wstring getReferenceDataFile();
virtual std::wstring getOMODExt();
- virtual std::wstring getSteamAPPId();
+ virtual std::wstring getSteamAPPId(int variant = 0) const;
virtual std::wstring getSEName();
- virtual std::wstring getNexusPage();
+ virtual std::wstring getNexusPage(bool nmmScheme = true);
static std::wstring getNexusInfoUrlStatic();
virtual std::wstring getNexusInfoUrl() { return SkyrimInfo::getNexusInfoUrlStatic(); }
static int getNexusModIDStatic();
virtual int getNexusModID() { return SkyrimInfo::getNexusModIDStatic(); }
+ virtual int getNexusGameID() { return 110; }
virtual void createProfile(const std::wstring &directory, bool useDefaults);
virtual void repairProfile(const std::wstring &directory);
@@ -95,7 +96,7 @@ public:
private:
- SkyrimInfo(const std::wstring &omoDirectory, const std::wstring &gameDirectory);
+ SkyrimInfo(const std::wstring &moDirectory, const std::wstring &gameDirectory);
static bool identifyGame(const std::wstring &searchPath);
diff --git a/src/shared/util.cpp b/src/shared/util.cpp
index 4378e03c..22657e6c 100644
--- a/src/shared/util.cpp
+++ b/src/shared/util.cpp
@@ -69,7 +69,6 @@ std::string ToString(const std::wstring &source, bool utf8)
::WideCharToMultiByte(CP_UTF8, 0, source.c_str(), -1, buffer, MAX_PATH, NULL, NULL);
} else {
::WideCharToMultiByte(GetACP(), 0, source.c_str(), -1, buffer, MAX_PATH, NULL, NULL);
-// wcstombs(buffer, source.c_str(), MAX_PATH);
}
return std::string(buffer);
}
@@ -80,9 +79,7 @@ std::wstring ToWString(const std::string &source, bool utf8)
if (utf8) {
::MultiByteToWideChar(CP_UTF8, 0, source.c_str(), -1, buffer, MAX_PATH);
} else {
- // codepage encoding
::MultiByteToWideChar(GetACP(), 0, source.c_str(), -1, buffer, MAX_PATH);
-// mbstowcs(buffer, source.c_str(), MAX_PATH);
}
return std::wstring(buffer);
}
diff --git a/src/spawn.cpp b/src/spawn.cpp
index ab43b687..6adafba0 100644
--- a/src/spawn.cpp
+++ b/src/spawn.cpp
@@ -36,10 +36,23 @@ using namespace MOShared;
static const int BUFSIZE = 4096;
-bool spawn(LPCWSTR binary, LPCWSTR arguments, LPCWSTR currentDirectory, bool suspended, HANDLE& processHandle, HANDLE& threadHandle)
+bool spawn(LPCWSTR binary, LPCWSTR arguments, LPCWSTR currentDirectory, bool suspended,
+ HANDLE stdOut, HANDLE stdErr,
+ HANDLE& processHandle, HANDLE& threadHandle)
{
+ BOOL inheritHandles = FALSE;
STARTUPINFO si;
::ZeroMemory(&si, sizeof(si));
+ if (stdOut != INVALID_HANDLE_VALUE) {
+ si.hStdOutput = stdOut;
+ inheritHandles = TRUE;
+ si.dwFlags |= STARTF_USESTDHANDLES;
+ }
+ if (stdErr != INVALID_HANDLE_VALUE) {
+ si.hStdError = stdErr;
+ inheritHandles = TRUE;
+ si.dwFlags |= STARTF_USESTDHANDLES;
+ }
si.cb = sizeof(si);
int length = wcslen(binary) + wcslen(arguments) + 4;
wchar_t *commandLine = NULL;
@@ -74,7 +87,7 @@ bool spawn(LPCWSTR binary, LPCWSTR arguments, LPCWSTR currentDirectory, bool sus
BOOL success = ::CreateProcess(NULL,
commandLine,
NULL, NULL, // no special process or thread attributes
- FALSE, // don't inherit handle
+ inheritHandles, // inherit handles if we plan to use stdout or stderr reroute
suspended ? CREATE_SUSPENDED : 0, // create suspended so I have time to inject the DLL
NULL, // same environment as parent
currentDirectory, // current directory
@@ -95,14 +108,22 @@ bool spawn(LPCWSTR binary, LPCWSTR arguments, LPCWSTR currentDirectory, bool sus
}
-HANDLE startBinary(const QFileInfo &binary, const QString &arguments, const QString& profileName, int logLevel, const QDir &currentDirectory, bool hooked)
+HANDLE startBinary(const QFileInfo &binary,
+ const QString &arguments,
+ const QString& profileName,
+ int logLevel,
+ const QDir &currentDirectory,
+ bool hooked,
+ HANDLE stdOut,
+ HANDLE stdErr)
{
HANDLE processHandle, threadHandle;
std::wstring binaryName = ToWString(QDir::toNativeSeparators(binary.absoluteFilePath()));
std::wstring currentDirectoryName = ToWString(QDir::toNativeSeparators(currentDirectory.absolutePath()));
try {
- if (!spawn(binaryName.c_str(), ToWString(arguments).c_str(), currentDirectoryName.c_str(), hooked, processHandle, threadHandle)) {
+ if (!spawn(binaryName.c_str(), ToWString(arguments).c_str(), currentDirectoryName.c_str(), hooked,
+ stdOut, stdErr, processHandle, threadHandle)) {
reportError(QObject::tr("failed to spawn \"%1\"").arg(binary.fileName()));
return INVALID_HANDLE_VALUE;
}
@@ -117,9 +138,10 @@ HANDLE startBinary(const QFileInfo &binary, const QString &arguments, const QStr
"can be installed to work without elevation.\n\n"
"Start elevated anyway? "
"(you will be asked if you want to allow ModOrganizer.exe to make changes to the system)").arg(
- QDir::toNativeSeparators(binary.absoluteFilePath()))) == QMessageBox::Yes) {
+ QDir::toNativeSeparators(binary.absoluteFilePath())),
+ QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) {
::ShellExecuteW(NULL, L"runas", ToWString(QCoreApplication::applicationFilePath()).c_str(),
- (binaryName + L" " + ToWString(arguments)).c_str(), currentDirectoryName.c_str(), SW_SHOWNORMAL);
+ (std::wstring(L"\"") + binaryName + L"\" " + ToWString(arguments)).c_str(), currentDirectoryName.c_str(), SW_SHOWNORMAL);
return INVALID_HANDLE_VALUE;
} else {
return INVALID_HANDLE_VALUE;
@@ -156,7 +178,7 @@ HANDLE startBinary(const QFileInfo &binary, const QString &arguments, const QStr
return processHandle;
}
-
+/*
ExitProxy *ExitProxy::s_Instance = NULL;
ExitProxy *ExitProxy::instance()
@@ -170,4 +192,4 @@ ExitProxy *ExitProxy::instance()
void ExitProxy::emitExit()
{
emit exit();
-}
+}*/
diff --git a/src/spawn.h b/src/spawn.h
index e0d1f958..3f037119 100644
--- a/src/spawn.h
+++ b/src/spawn.h
@@ -31,7 +31,7 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
* @brief a dirty little trick so we can issue a clean restart from startBinary
* @note unused
*/
-class ExitProxy : public QObject {
+/*class ExitProxy : public QObject {
Q_OBJECT
public:
static ExitProxy *instance();
@@ -42,7 +42,7 @@ private:
ExitProxy() {}
private:
static ExitProxy *s_Instance;
-};
+};*/
/**
@@ -52,11 +52,17 @@ private:
* @param arguments arguments to pass to the binary
* @param profileName name of the active profile
* @param currentDirectory the directory to use as the working directory to run in
+ * @param logLevel log level to be used by the hook library. Ignored if hooked is false
* @param hooked if set, the binary is started with mo injected
+ * @param stdout if not equal to INVALID_HANDLE_VALUE, this is used as stdout for the process
+ * @param stderr if not equal to INVALID_HANDLE_VALUE, this is used as stderr for the process
* @return the process handle
* @todo is the profile name even used any more?
* @todo is the hooked parameter used?
**/
-HANDLE startBinary(const QFileInfo &binary, const QString &arguments, const QString &profileName, int logLevel, const QDir &currentDirectory, bool hooked);
+HANDLE startBinary(const QFileInfo &binary, const QString &arguments, const QString &profileName, int logLevel,
+ const QDir &currentDirectory, bool hooked,
+ HANDLE stdOut = INVALID_HANDLE_VALUE, HANDLE stdErr = INVALID_HANDLE_VALUE);
#endif // SPAWN_H
+
diff --git a/src/splash.png b/src/splash.png
index 45ace8f8..3eec8bed 100644
--- a/src/splash.png
+++ b/src/splash.png
Binary files differ
diff --git a/src/transfersavesdialog.ui b/src/transfersavesdialog.ui
index 7cd1c4b5..1fcad54d 100644
--- a/src/transfersavesdialog.ui
+++ b/src/transfersavesdialog.ui
@@ -11,7 +11,7 @@
</rect>
</property>
<property name="windowTitle">
- <string>Dialog</string>
+ <string>Transfer Savegames</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
@@ -35,7 +35,7 @@ On Windows Vista/Windows 7:
C:\Users\[UserName]\Documents\My Games\Skyrim\Saves
On Windows XP:
- C:\Documents and Settings[UserName]\My Documents\My Games\Skyrim\Saves
+ C:\Documents and Settings\[UserName]\My Documents\My Games\Skyrim\Saves
</string>
</property>
</widget>
diff --git a/src/version.rc b/src/version.rc
index fb8dcf7c..33c25b1c 100644
--- a/src/version.rc
+++ b/src/version.rc
@@ -1,7 +1,7 @@
#include "Winver.h"
-#define VER_FILEVERSION 0,99,7,0
-#define VER_FILEVERSION_STR "0,99,7,0\0"
+#define VER_FILEVERSION 1,1,3,0
+#define VER_FILEVERSION_STR "1,1,3,0\0"
VS_VERSION_INFO VERSIONINFO
FILEVERSION VER_FILEVERSION