It's a start.

This commit is contained in:
J-D-K 2024-12-05 20:04:47 -05:00
parent 291d2fd82f
commit 7816dab291
134 changed files with 942 additions and 13410 deletions

136
.clang-format Normal file
View File

@ -0,0 +1,136 @@
---
Language: Cpp
AccessModifierOffset: -4
AlignAfterOpenBracket: Align
AlignConsecutiveMacros: false
AlignConsecutiveAssignments: false
AlignConsecutiveDeclarations: false
AlignEscapedNewlines: Right
AlignOperands: true
AlignTrailingComments: true
AllowAllArgumentsOnNextLine: false
AllowAllConstructorInitializersOnNextLine: true
AllowAllParametersOfDeclarationOnNextLine: false
AllowShortBlocksOnASingleLine: Never
AllowShortCaseLabelsOnASingleLine: false
AllowShortFunctionsOnASingleLine: None
AllowShortLambdasOnASingleLine: All
AllowShortIfStatementsOnASingleLine: Never
AllowShortLoopsOnASingleLine: false
AlwaysBreakAfterDefinitionReturnType: None
AlwaysBreakAfterReturnType: None
AlwaysBreakBeforeMultilineStrings: false
AlwaysBreakTemplateDeclarations: Yes
BinPackArguments: false
BinPackParameters: false
BraceWrapping:
AfterCaseLabel: true
AfterClass: true
AfterControlStatement: true
AfterEnum: true
AfterFunction: true
AfterNamespace: true
AfterObjCDeclaration: true
AfterStruct: true
AfterUnion: true
AfterExternBlock: true
BeforeCatch: true
BeforeElse: true
IndentBraces: false
SplitEmptyFunction: true
SplitEmptyRecord: true
SplitEmptyNamespace: true
BreakBeforeBinaryOperators: None
BreakBeforeBraces: Custom
BreakBeforeInheritanceComma: false
BreakInheritanceList: BeforeColon
BreakBeforeTernaryOperators: true
BreakConstructorInitializersBeforeComma: false
BreakConstructorInitializers: BeforeColon
BreakAfterJavaFieldAnnotations: false
BreakStringLiterals: true
ColumnLimit: 144
CommentPragmas: '^ IWYU pragma:'
CompactNamespaces: false
ConstructorInitializerAllOnOneLineOrOnePerLine: false
ConstructorInitializerIndentWidth: 4
ContinuationIndentWidth: 4
Cpp11BracedListStyle: true
DeriveLineEnding: true
DerivePointerAlignment: false
DisableFormat: false
ExperimentalAutoDetectBinPacking: false
FixNamespaceComments: true
ForEachMacros:
- foreach
- Q_FOREACH
- BOOST_FOREACH
IncludeBlocks: Preserve
IncludeCategories:
- Regex: '^"(llvm|llvm-c|clang|clang-c)/'
Priority: 2
SortPriority: 0
- Regex: '^(<|"(gtest|gmock|isl|json)/)'
Priority: 3
SortPriority: 0
- Regex: '.*'
Priority: 1
SortPriority: 0
IncludeIsMainRegex: '(Test)?$'
IncludeIsMainSourceRegex: ''
IndentAccessModifiers: true
IndentCaseLabels: false
IndentGotoLabels: true
IndentPPDirectives: None
IndentWidth: 4
IndentWrappedFunctionNames: false
JavaScriptQuotes: Leave
JavaScriptWrapImports: true
KeepEmptyLinesAtTheStartOfBlocks: true
MacroBlockBegin: ''
MacroBlockEnd: ''
MaxEmptyLinesToKeep: 2
NamespaceIndentation: All
ObjCBinPackProtocolList: Auto
ObjCBlockIndentWidth: 2
ObjCSpaceAfterProperty: false
ObjCSpaceBeforeProtocolList: true
PenaltyBreakAssignment: 2
PenaltyBreakBeforeFirstCallParameter: 19
PenaltyBreakComment: 300
PenaltyBreakFirstLessLess: 120
PenaltyBreakString: 1000
PenaltyBreakTemplateDeclaration: 10
PenaltyExcessCharacter: 1000000
PenaltyReturnTypeOnItsOwnLine: 1000
PointerAlignment: Right
ReflowComments: false
SortIncludes: true
SortUsingDeclarations: true
SpaceAfterCStyleCast: false
SpaceAfterLogicalNot: false
SpaceAfterTemplateKeyword: true
SpaceBeforeAssignmentOperators: true
SpaceBeforeCpp11BracedList: false
SpaceBeforeCtorInitializerColon: true
SpaceBeforeInheritanceColon: true
SpaceBeforeParens: ControlStatements
SpaceBeforeRangeBasedForLoopColon: true
SpaceInEmptyBlock: false
SpaceInEmptyParentheses: false
SpacesBeforeTrailingComments: 1
SpacesInAngles: false
SpacesInConditionalStatement: false
SpacesInContainerLiterals: true
SpacesInCStyleCastParentheses: false
SpacesInParentheses: false
SpacesInSquareBrackets: false
SpaceBeforeSquareBrackets: false
Standard: Latest
StatementMacros:
- Q_UNUSED
- QT_REQUIRE_VERSION
TabWidth: 4
UseCRLF: false
UseTab: Never
...

9
.clang-tidy Normal file
View File

@ -0,0 +1,9 @@
---
Checks: 'clang-analyzer-*,cppcoreguidelines-*,modernize-*,bugprone-*,performance-*,readability-*,readability-non-const-parameter,misc-const-correctness,misc-use-anonymous-namespace,google-explicit-constructor,-modernize-use-trailing-return-type,-bugprone-exception-escape,-cppcoreguidelines-pro-bounds-constant-array-index,-cppcoreguidelines-avoid-magic-numbers,-bugprone-easily-swappable-parameters,-cppcoreguidelines-non-private-member-variables-in-classes'
WarningsAsErrors: ''
HeaderFilterRegex: ''
CheckOptions:
- key: readability-magic-numbers.IgnoredFloatingPointValues
value: '0.0;1.0;100.0;'
- key: readability-magic-numbers.IgnoredIntegerValues
value: '0;1;2;3;4;5;6;7;8;9;'

17
.editorconfig Normal file
View File

@ -0,0 +1,17 @@
# EditorConfig is awesome: http://EditorConfig.org
root = true
[*]
indent_style = space
indent_size = 4
trim_trailing_whitespace = true
insert_final_newline = true
end_of_line = lf
[*.md]
trim_trailing_whitespace = false
[Makefile]
indent_style = tab
trim_trailing_whitespace = false

11
.gitattributes vendored Normal file
View File

@ -0,0 +1,11 @@
# Set the default behavior for all files.
* text=auto eol=lf
# Normalized and converts to native line endings on checkout.
*.c text
*.cc text
*.cxx
*.cpp text
*.h text
*.hxx text
*.hpp text

6
.gitmodules vendored Normal file
View File

@ -0,0 +1,6 @@
[submodule "Libraries/FsLib"]
path = Libraries/FsLib
url = https://github.com/J-D-K/FsLib.git
[submodule "Libraries/SDLLib"]
path = Libraries/SDLLib
url = https://github.com/J-D-K/SDLLib.git

View File

@ -0,0 +1,46 @@
#pragma once
#include "SDL.hpp"
#include <memory>
class AppState
{
public:
AppState(void) = default;
virtual ~AppState() = 0;
virtual void Update(void) = 0;
virtual void Render(void) = 0;
// Returns whether or not state is still active or can be purged.
bool IsActive(void) const
{
return m_IsActive;
}
void Deactivate(void)
{
m_IsActive = false;
}
void GiveFocus(void)
{
m_HasFocus = true;
}
void TakeFocus(void)
{
m_HasFocus = false;
}
// Returns whether state is at back of vector and has focus.
bool HasFocus(void) const
{
return m_HasFocus;
}
private:
// Whether state is still active or can be purged.
bool m_IsActive = true;
// Whether or not state has focus
bool m_HasFocus = false;
};

View File

@ -0,0 +1,27 @@
#pragma once
#include "AppStates/AppState.hpp"
#include "System/ProgressTask.hpp"
#include <string>
class ProgressState : public AppState
{
public:
template <typename... Args>
ProgressState(void (*Function)(Args...), Args... Arguments) : m_Task(Function, std::forward<Args>(Arguments)...){};
~ProgressState() {};
void Update(void);
void Render(void);
private:
// Underlying progress tracking task.
System::ProgressTask m_Task;
// Progress as whole number instead of decimal.
size_t m_Progress = 0;
// Width of the green bar. The other is hard coded for 720px.
size_t m_ProgressBarWidth = 0;
// X coordinate of the percentage.
int m_PerentageX = 0;
// String for percentage.
std::string m_PercentageString;
};

View File

@ -0,0 +1,18 @@
#pragma once
#include "AppStates/AppState.hpp"
#include "System/Task.hpp"
class TaskState : public AppState
{
public:
template <typename... Args>
TaskState(void (*Function)(Args...), Args... Arguments) : m_Task(Function, std::forward<Args>(Arguments)...){};
~TaskState() {};
void Update(void);
void Render(void);
private:
// Underlying task.
System::Task m_Task;
};

16
Include/Colors.hpp Normal file
View File

@ -0,0 +1,16 @@
#pragma once
#include "SDL.hpp"
namespace Colors
{
static constexpr SDL::Color White = {0xFFFFFFFF};
static constexpr SDL::Color Black = {0x000000FF};
static constexpr SDL::Color Red = {0xFF0000FF};
static constexpr SDL::Color Green = {0x00FF00FF};
static constexpr SDL::Color Blue = {0x0099EEFF};
static constexpr SDL::Color Yellow = {0xF8FC00FF};
static constexpr SDL::Color Pink = {0xFF4444FF};
static constexpr SDL::Color ClearColor = {0x2D2D2DFF};
static constexpr SDL::Color DialogBox = {0x505050FF};
static constexpr SDL::Color BackgroundDim = {0x00000088};
} // namespace Colors

6
Include/Data/Data.hpp Normal file
View File

@ -0,0 +1,6 @@
#pragma once
namespace Data
{
bool Initialize(void);
}

11
Include/Input.hpp Normal file
View File

@ -0,0 +1,11 @@
#pragma once
#include <switch.h>
namespace Input
{
void Initialize(void);
void Update(void);
bool ButtonPressed(HidNpadButton Button);
bool ButtonHeld(HidNpadButton Button);
bool ButtonReleased(HidNpadButton Button);
} // namespace Input

32
Include/JKSV.hpp Normal file
View File

@ -0,0 +1,32 @@
#pragma once
#include "AppStates/AppState.hpp"
#include "SDL.hpp"
#include <memory>
#include <vector>
class JKSV
{
public:
// Initializes JKSV.
JKSV(void);
// Exits JKSV
~JKSV();
// Returns whether or not JKSV is actually running.
bool IsRunning(void) const;
// Updates input and back of state vector.
void Update(void);
// Renders base of app and states of vector.
void Render(void);
// Pushes a new state to the back of state vector.
static void PushState(std::shared_ptr<AppState> NewState);
private:
// Whether or not initialization was successful.
bool m_IsRunning = false;
// Whether or not translation author wants to be acknowledged.
bool m_ShowTranslationInfo = false;
// Header icon
SDL::SharedTexture m_HeaderIcon = nullptr;
// Vector of states.
static inline std::vector<std::shared_ptr<AppState>> m_StateVector;
};

16
Include/JSON.hpp Normal file
View File

@ -0,0 +1,16 @@
#pragma once
#include <json-c/json.h>
#include <memory>
namespace JSON
{
// Use this instead of default json_object
using Object = std::unique_ptr<json_object, decltype(&json_object_put)>;
// Use this instead of json_object_from_x. Pass the function and its arguments instead.
template <typename... Args>
static inline JSON::Object NewObject(json_object *(*Function)(Args...), Args... Arguments)
{
return JSON::Object((*Function)(Arguments...), json_object_put);
}
} // namespace JSON

7
Include/Logger.hpp Normal file
View File

@ -0,0 +1,7 @@
#pragma once
namespace Logger
{
void Initialize(void);
void Log(const char *Format, ...);
} // namespace Logger

7
Include/StringUtil.hpp Normal file
View File

@ -0,0 +1,7 @@
#pragma once
#include <string>
namespace StringUtil
{
std::string GetFormattedString(const char *Format, ...);
}

15
Include/Strings.hpp Normal file
View File

@ -0,0 +1,15 @@
#pragma once
#include <string_view>
namespace Strings
{
// Attempts to load strings from file in RomFS.
bool Initialize(void);
// Returns string with name and index. Returns nullptr if string doesn't exist.
const char *GetByName(std::string_view Name, int Index);
// Names of strings to prevent typos.
namespace Names
{
static constexpr std::string_view TranslationInfo = "TranslationInfo";
} // namespace Names
} // namespace Strings

View File

@ -0,0 +1,25 @@
#pragma once
#include "System/Task.hpp"
namespace System
{
class ProgressTask : public System::Task
{
public:
template <typename... Args>
ProgressTask(void (*Function)(System::ProgressTask *, Args...), Args... Arguments)
: System::Task(Function, this, std::forward<Args>(Arguments)...){};
// Resets current down to 0 and sets goal
void Reset(double Goal);
// Sets current value
void UpdateCurrent(double Current);
// Returns progress
double GetCurrentProgress(void) const;
private:
// Current value and goal
double m_Current, m_Goal;
};
} // namespace System

46
Include/System/Task.hpp Normal file
View File

@ -0,0 +1,46 @@
#pragma once
#include <mutex>
#include <string>
#include <thread>
namespace System
{
class Task
{
public:
template <typename... Args>
Task(void (*Function)(System::Task *, Args...), Args... Arguments)
{
m_Thread = std::thread(Function, this, std::forward<Args>(Arguments)...);
}
// This is an alternate constructor that passes through a pointer to a derived class.
template <typename... Args>
Task(void (*Function)(System::Task *, Args...), System::Task *Task, Args... Arguments)
{
m_Thread = std::thread(Function, Task, std::forward<Args>(Arguments)...);
}
virtual ~Task();
// Returns if thread is still running.
bool IsRunning(void) const;
// Signals thread is finished running.
void Finished(void);
// Sets status to display.
void SetStatus(const char *Format, ...);
// Returns status string.
std::string GetStatus(void);
private:
// Whether task is still running.
bool m_IsRunning = true;
// Status string the thread can set that the main thread can display.
std::string m_Status;
// Mutex so that string doesn't get messed up.
std::mutex m_StatusLock;
// Thread
std::thread m_Thread;
};
} // namespace System

View File

@ -0,0 +1,9 @@
#pragma once
#include "SDL.hpp"
// These are just functions to render generic parts of the UI.
namespace UI
{
void RenderDialogBox(SDL_Texture *Target, int X, int Y, int Width, int Height);
void RenderBoundingBox(SDL_Texture *Target, int X, int Y, int Width, int Height);
} // namespace UI

1
Libraries/FsLib Submodule

@ -0,0 +1 @@
Subproject commit 960698b56f3088c6f5f549aceb94d4b66fb67d88

1
Libraries/SDLLib Submodule

@ -0,0 +1 @@
Subproject commit d25a582249299fee8bfbe59487f057b4a2e0d990

View File

@ -32,14 +32,14 @@ include $(DEVKITPRO)/libnx/switch_rules
#---------------------------------------------------------------------------------
TARGET := JKSV
BUILD := build
SOURCES := src src/ui src/fs src/gfx
SOURCES := Source Source/AppStates Source/UI
DATA := data
INCLUDES := inc inc/ui inc/fs inc/gfx
INCLUDES := Include ./Libraries/FsLib/Switch/FsLib/include ./Libraries/SDLLib/SDL/include
EXEFS_SRC := exefs_src
APP_TITLE := JKSV
APP_AUTHOR := JK
APP_VERSION := 11.5.2024
ROMFS := romfs
APP_VERSION := 12.05.2024
ROMFS := RomFS
ICON := icon.jpg
#---------------------------------------------------------------------------------
@ -51,12 +51,14 @@ override CFLAGS += $(INCLUDE) -D__SWITCH__
override CFLAGS += `sdl2-config --cflags` `freetype-config --cflags` `curl-config --cflags`
override CFLAGS += -g -Wall -O2 -ffunction-sections -ffast-math $(ARCH) $(DEFINES)
CXXFLAGS:= $(CFLAGS) -fno-rtti -fno-exceptions -std=gnu++17
CXXFLAGS:= $(CFLAGS) -fno-rtti -fno-exceptions -std=gnu++23
ASFLAGS := -g $(ARCH)
LDFLAGS = -specs=$(DEVKITPRO)/libnx/switch.specs -g $(ARCH) -Wl,-Map,$(notdir $*.map)
LIBS := `sdl2-config --libs` `freetype-config --libs` `curl-config --libs` -lSDL2_image -lwebp -lpng -ljpeg -lz -lminizip -ljson-c -ltinyxml2 -lnx
LIBS := ../Libraries/FsLib/Switch/FsLib/lib/libFsLib.a ../Libraries/SDLLib/SDL/lib/libSDL.a \
`sdl2-config --libs` `freetype-config --libs` `curl-config --libs` -lSDL2_image \
-lwebp -lpng -ljpeg -lz -lminizip -ljson-c -ltinyxml2 -lnx
#---------------------------------------------------------------------------------
# list of directories containing libraries, this must be the top level containing
@ -141,18 +143,30 @@ ifneq ($(ROMFS),)
export NROFLAGS += --romfsdir=$(CURDIR)/$(ROMFS)
endif
.PHONY: $(BUILD) clean all
.PHONY: $(BUILD) FsLib SDLLib clean all
#---------------------------------------------------------------------------------
all: $(BUILD)
all: FsLib SDLLib $(BUILD)
$(BUILD):
$(BUILD): FsLib SDLLib
@[ -d $@ ] || mkdir -p $@
@$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile
#---------------------------------------------------------------------------------
FsLib:
@$(MAKE) -C ./Libraries/FsLib/Switch/FsLib/
#---------------------------------------------------------------------------------
SDLLib:
@$(MAKE) -C ./Libraries/SDLLib/SDL/
#---------------------------------------------------------------------------------
clean:
@echo clean ...
@$(MAKE) -C ./Libraries/FsLib clean
@$(MAKE) -C ./Libraries/SDLLib clean
@rm -fr $(BUILD) $(TARGET).pfs0 $(TARGET).nso $(TARGET).nro $(TARGET).nacp $(TARGET).elf

6
RomFS/Text/ENUS.json Normal file
View File

@ -0,0 +1,6 @@
{
"TranslationInfo" : [
"Translated By: %s",
"NULL"
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 507 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 682 B

View File

@ -0,0 +1,18 @@
#include "AppStates/ProgressState.hpp"
#include "Colors.hpp"
#include "SDL.hpp"
#include "StringUtil.hpp"
#include <cmath>
void ProgressState::Update(void)
{
m_ProgressBarWidth = std::ceil(720.0f * m_Task.GetCurrentProgress());
m_Progress = std::ceil(m_Task.GetCurrentProgress() * 100);
m_PercentageString = StringUtil::GetFormattedString("%u", m_Progress);
m_PerentageX = 640 - (SDL::Text::GetWidth(18, m_PercentageString.c_str()));
}
void ProgressState::Render(void)
{
SDL::RenderRectFill(NULL, 0, 0, 1280, 720, Colors::BackgroundDim);
}

View File

@ -0,0 +1,23 @@
#include "AppStates/TaskState.hpp"
#include "Colors.hpp"
#include "SDL.hpp"
void TaskState::Update(void)
{
if (!m_Task.IsRunning())
{
AppState::Deactivate();
}
}
void TaskState::Render(void)
{
// Grab task string.
std::string Status = m_Task.GetStatus();
// Center so it looks perty
int StatusX = 640 - (SDL::Text::GetWidth(18, Status.c_str()) / 2);
// Dim the background states.
SDL::RenderRectFill(NULL, 0, 0, 1280, 720, Colors::BackgroundDim);
// Render the status.
SDL::Text::Render(NULL, StatusX, 351, 18, SDL::Text::NO_TEXT_WRAP, Colors::White, Status.c_str());
}

32
Source/Input.cpp Normal file
View File

@ -0,0 +1,32 @@
#include "Input.hpp"
namespace
{
PadState s_Gamepad;
}
void Input::Initialize(void)
{
padConfigureInput(1, HidNpadStyleSet_NpadStandard);
padInitializeDefault(&s_Gamepad);
}
void Input::Update(void)
{
padUpdate(&s_Gamepad);
}
bool Input::ButtonPressed(HidNpadButton Button)
{
return (s_Gamepad.buttons_cur & Button) && !(s_Gamepad.buttons_old & Button);
}
bool Input::ButtonHeld(HidNpadButton Button)
{
return (s_Gamepad.buttons_cur & Button) && (s_Gamepad.buttons_old & Button);
}
bool Input::ButtonReleased(HidNpadButton Button)
{
return (s_Gamepad.buttons_old & Button) && !(s_Gamepad.buttons_cur & Button);
}

141
Source/JKSV.cpp Normal file
View File

@ -0,0 +1,141 @@
#include "JKSV.hpp"
#include "Colors.hpp"
#include "FsLib.hpp"
#include "Input.hpp"
#include "Logger.hpp"
#include "SDL.hpp"
#include "Strings.hpp"
#include <switch.h>
#include "UI/RenderFunctions.hpp"
#define ABORT_ON_FAILURE(x) \
if (!x) \
{ \
return; \
}
namespace
{
constexpr uint8_t BUILD_MON = 12;
constexpr uint8_t BUILD_DAY = 5;
constexpr uint16_t BUILD_YEAR = 2024;
} // namespace
template <typename... Args>
static bool InitializeService(Result (*Function)(Args...), const char *ServiceName, Args... Arguments)
{
Result Error = (*Function)(Arguments...);
if (R_FAILED(Error))
{
Logger::Log("Error initializing %s: 0x%X.", Error);
return false;
}
return true;
}
JKSV::JKSV(void)
{
ABORT_ON_FAILURE(FsLib::Initialize());
// Need to init RomFS here for now until I update FsLib to take care of this.
ABORT_ON_FAILURE(InitializeService(romfsInit, "RomFS"));
// Let FsLib take care of calls to SDMC instead of fs_dev
ABORT_ON_FAILURE(FsLib::Dev::InitializeSDMC());
// SDL
ABORT_ON_FAILURE(SDL::Initialize("JKSV", 1280, 720));
ABORT_ON_FAILURE(SDL::Text::Initialize());
// Services.
// Using administrator so JKSV can still run in Applet mode.
ABORT_ON_FAILURE(InitializeService(accountInitialize, "Account", AccountServiceType_Administrator));
ABORT_ON_FAILURE(InitializeService(nsInitialize, "NS"));
ABORT_ON_FAILURE(InitializeService(pdmqryInitialize, "PDMQry"));
ABORT_ON_FAILURE(InitializeService(plInitialize, "PL", PlServiceType_User));
ABORT_ON_FAILURE(InitializeService(pmshellInitialize, "PMShell"));
ABORT_ON_FAILURE(InitializeService(setInitialize, "Set"));
ABORT_ON_FAILURE(InitializeService(setsysInitialize, "SetSys"));
ABORT_ON_FAILURE(InitializeService(socketInitializeDefault, "Socket"));
// This needs Set. JKSV also has no internal strings anymore. This is FATAL now.
ABORT_ON_FAILURE(Strings::Initialize());
// Install/setup our color changing characters.
SDL::Text::AddColorCharacter(L'#', Colors::Blue);
SDL::Text::AddColorCharacter(L'*', Colors::Red);
SDL::Text::AddColorCharacter(L'<', Colors::Yellow);
SDL::Text::AddColorCharacter(L'>', Colors::Green);
// This is to check whether the author wanted credit for their work.
m_ShowTranslationInfo = std::char_traits<char>::compare(Strings::GetByName(Strings::Names::TranslationInfo, 1), "NULL", 4) != 0;
// This can't be in an initializer list because it needs SDL initialized.
m_HeaderIcon = SDL::TextureManager::CreateLoadTexture("HeaderIcon", "romfs:/Textures/HeaderIcon.png");
Input::Initialize();
m_IsRunning = true;
}
JKSV::~JKSV()
{
socketExit();
setsysExit();
setExit();
pmshellExit();
plExit();
pdmqryExit();
nsExit();
accountExit();
SDL::Text::Exit();
SDL::Exit();
FsLib::Exit();
}
bool JKSV::IsRunning(void) const
{
return m_IsRunning;
}
void JKSV::Update(void)
{
Input::Update();
if (Input::ButtonPressed(HidNpadButton_Plus))
{
m_IsRunning = false;
}
}
void JKSV::Render(void)
{
SDL::FrameBegin(Colors::ClearColor);
// Top and bottom divider lines.
SDL::RenderLine(NULL, 30, 88, 1250, 88, Colors::White);
SDL::RenderLine(NULL, 30, 648, 1250, 648, Colors::White);
// Icon
m_HeaderIcon->Render(NULL, 66, 27);
// "JKSV"
SDL::Text::Render(NULL, 130, 32, 34, SDL::Text::NO_TEXT_WRAP, Colors::White, "JKSV");
// Translation info in bottom left.
if (m_ShowTranslationInfo)
{
SDL::Text::Render(NULL,
8,
682,
12,
SDL::Text::NO_TEXT_WRAP,
Colors::White,
Strings::GetByName(Strings::Names::TranslationInfo, 0),
Strings::GetByName(Strings::Names::TranslationInfo, 1));
}
SDL::Text::Render(NULL, 8, 700, 12, SDL::Text::NO_TEXT_WRAP, Colors::White, "v %02d.%02d.%04d", BUILD_MON, BUILD_DAY, BUILD_YEAR);
UI::RenderDialogBox(NULL, 320, 240, 320, 240);
SDL::FrameEnd();
}
void JKSV::PushState(std::shared_ptr<AppState> NewState)
{
m_StateVector.push_back(NewState);
}

32
Source/Logger.cpp Normal file
View File

@ -0,0 +1,32 @@
#include "Logger.hpp"
#include "FsLib.hpp"
#include <cstdarg>
namespace
{
// Path to log file.
FsLib::Path s_LogFilePath;
// Size of va buffer for log.
constexpr size_t VA_BUFFER_SIZE = 0x1000;
} // namespace
void Logger::Initialize(void)
{
// To do: Update this once config is implemented.
s_LogFilePath = "sdmc:/JKSV/JKSV.log";
FsLib::File LogFile(s_LogFilePath, FsOpenMode_Create | FsOpenMode_Write);
}
void Logger::Log(const char *Format, ...)
{
char VaBuffer[VA_BUFFER_SIZE] = {0};
std::va_list VaList;
va_start(VaList, Format);
vsnprintf(VaBuffer, VA_BUFFER_SIZE, Format, VaList);
va_end(VaList);
FsLib::File LogFile(s_LogFilePath, FsOpenMode_Append);
LogFile << VaBuffer << "\n";
LogFile.Flush();
}

12
Source/Main.cpp Normal file
View File

@ -0,0 +1,12 @@
#include "JKSV.hpp"
int main(void)
{
JKSV Jksv;
while (Jksv.IsRunning())
{
Jksv.Update();
Jksv.Render();
}
return 0;
}

19
Source/StringUtil.cpp Normal file
View File

@ -0,0 +1,19 @@
#include "StringUtil.hpp"
#include <cstdarg>
namespace
{
constexpr size_t VA_BUFFER_SIZE = 0x1000;
}
std::string StringUtil::GetFormattedString(const char *Format, ...)
{
char VaBuffer[VA_BUFFER_SIZE];
std::va_list VaList;
va_start(VaList, Format);
vsnprintf(VaBuffer, VA_BUFFER_SIZE, Format, VaList);
va_end(VaList);
return std::string(VaBuffer);
}

90
Source/Strings.cpp Normal file
View File

@ -0,0 +1,90 @@
#include "Strings.hpp"
#include "FsLib.hpp"
#include "JSON.hpp"
#include <map>
#include <string>
#include <unordered_map>
namespace
{
// This is the actual map where the strings are.
std::map<std::pair<std::string, int>, std::string> s_StringMap;
// This map is for matching files to the language value
std::unordered_map<SetLanguage, std::string_view> s_FileMap = {{SetLanguage_JA, "JA.json"},
{SetLanguage_ENUS, "ENUS.json"},
{SetLanguage_FR, "FR.json"},
{SetLanguage_DE, "DE.json"},
{SetLanguage_IT, "IT.json"},
{SetLanguage_ES, "ES.json"},
{SetLanguage_ZHCN, "ZHCN.json"},
{SetLanguage_KO, "KO.json"},
{SetLanguage_NL, "NL.json"},
{SetLanguage_PT, "PT.json"},
{SetLanguage_RU, "RU.json"},
{SetLanguage_ZHTW, "ZHTW.json"},
{SetLanguage_ENGB, "ENGB.json"},
{SetLanguage_FRCA, "FRCA.json"},
{SetLanguage_ES419, "ES419.json"},
{SetLanguage_ZHHANS, "ZHCN.json"},
{SetLanguage_ZHHANT, "ZHTW.json"},
{SetLanguage_PTBR, "PTBR.json"}};
} // namespace
static FsLib::Path GetStringFilePath(void)
{
FsLib::Path ReturnPath = "romfs:/Text";
uint64_t LanguageCode = 0;
Result SetError = setGetLanguageCode(&LanguageCode);
if (R_FAILED(SetError))
{
return ReturnPath / s_FileMap.at(SetLanguage_ENUS);
}
SetLanguage Language;
SetError = setMakeLanguage(LanguageCode, &Language);
if (R_FAILED(SetError))
{
return ReturnPath / s_FileMap.at(SetLanguage_ENUS);
}
return ReturnPath / s_FileMap.at(Language);
}
bool Strings::Initialize()
{
FsLib::Path StringsPath = GetStringFilePath();
JSON::Object TextJSON = JSON::NewObject(json_object_from_file, StringsPath.CString());
if (!TextJSON)
{
return false;
}
json_object_iterator StringIterator = json_object_iter_begin(TextJSON.get());
json_object_iterator StringEnd = json_object_iter_end(TextJSON.get());
while (!json_object_iter_equal(&StringIterator, &StringEnd))
{
// Get name of string(s) and pointer to array
const char *StringName = json_object_iter_peek_name(&StringIterator);
json_object *StringArray = json_object_iter_peek_value(&StringIterator);
// Loop through array and add them to map so I can be lazier and not have to edit code or do shit to add more strings.
size_t ArrayLength = json_object_array_length(StringArray);
for (size_t i = 0; i < ArrayLength; i++)
{
json_object *String = json_object_array_get_idx(StringArray, i);
s_StringMap[std::make_pair(StringName, static_cast<int>(i))] = json_object_get_string(String);
}
json_object_iter_next(&StringIterator);
}
return true;
}
const char *Strings::GetByName(std::string_view Name, int Index)
{
if (s_StringMap.find(std::make_pair(Name.data(), Index)) == s_StringMap.end())
{
return nullptr;
}
return s_StringMap.at(std::make_pair(Name.data(), Index)).c_str();
}

View File

@ -0,0 +1,16 @@
#include "ProgressTask.hpp"
void System::ProgressTask::Reset(double Goal)
{
m_Goal = Goal;
}
void System::ProgressTask::UpdateCurrent(double Current)
{
m_Current = Current;
}
double System::ProgressTask::GetCurrentProgress(void) const
{
return m_Current / m_Goal;
}

41
Source/System/Task.cpp Normal file
View File

@ -0,0 +1,41 @@
#include "Task.hpp"
#include <cstdarg>
namespace
{
constexpr size_t VA_BUFFER_SIZE = 0x1000;
}
System::Task::~Task()
{
m_Thread.join();
}
bool System::Task::IsRunning(void) const
{
return m_IsRunning;
}
void System::Task::Finished(void)
{
m_IsRunning = false;
}
void System::Task::SetStatus(const char *Format, ...)
{
char VaBuffer[VA_BUFFER_SIZE];
std::va_list VaList;
va_start(VaList, Format);
vsnprintf(VaBuffer, VA_BUFFER_SIZE, Format, VaList);
va_end(VaList);
std::scoped_lock<std::mutex> StatusLock(m_StatusLock);
m_Status = VaBuffer;
}
std::string System::Task::GetStatus(void)
{
std::scoped_lock<std::mutex> StatusLock(m_StatusLock);
return m_Status;
}

View File

@ -0,0 +1,27 @@
#include "UI/RenderFunctions.hpp"
#include "Colors.hpp"
namespace
{
SDL::SharedTexture s_DialogCorners = nullptr;
SDL::SharedTexture s_MenuBoundingCorners = nullptr;
} // namespace
void UI::RenderDialogBox(SDL_Texture *Target, int X, int Y, int Width, int Height)
{
if (!s_DialogCorners)
{
s_DialogCorners = SDL::TextureManager::CreateLoadTexture("DialogCorners", "romfs:/Textures/DialogCorners.png");
}
// Top
s_DialogCorners->RenderPart(Target, X, Y, 0, 0, 16, 16);
SDL::RenderRectFill(Target, X + 16, Y, Width - 32, 16, Colors::DialogBox);
s_DialogCorners->RenderPart(Target, (X + Width) - 16, Y, 16, 0, 16, 16);
// Middle
SDL::RenderRectFill(NULL, X, Y + 16, Width, Height - 32, Colors::DialogBox);
// Bottom
s_DialogCorners->RenderPart(Target, X, (Y + Height) - 16, 0, 16, 16, 16);
SDL::RenderRectFill(NULL, X + 16, (Y + Height) - 16, Width - 32, 16, Colors::DialogBox);
s_DialogCorners->RenderPart(NULL, (X + Width) - 16, (Y + Height) - 16, 16, 16, 16, 16);
}

View File

@ -1,39 +0,0 @@
#pragma once
#include <string>
#include <vector>
#include <unordered_map>
namespace cfg
{
typedef enum
{
ALPHA,
MOST_PLAYED,
LAST_PLAYED
} sortTypes;
void resetConfig();
void loadConfig();
void saveConfig();
bool isBlacklisted(const uint64_t& tid);
void addTitleToBlacklist(void *a);
void removeTitleFromBlacklist(const uint64_t& tid);
bool isFavorite(const uint64_t& tid);
void addTitleToFavorites(const uint64_t& tid);
bool isDefined(const uint64_t& tid);
void pathDefAdd(const uint64_t& tid, const std::string& newPath);
std::string getPathDefinition(const uint64_t& tid);
void addPathToFilter(const uint64_t& tid, const std::string& _p);
extern std::unordered_map<std::string, bool> config;
extern std::vector<uint64_t> blacklist;
extern std::vector<uint64_t> favorites;
extern uint8_t sortType;
extern std::string driveClientID, driveClientSecret, driveRefreshToken;
extern std::string webdavOrigin, webdavBasePath, webdavUser, webdavPassword;
}

View File

@ -1,35 +0,0 @@
#pragma once
#include <string>
#include <vector>
#define HEADER_ERROR "ERROR"
namespace curlFuncs
{
typedef struct
{
FILE *f;
uint64_t *o;
} curlUpArgs;
typedef struct
{
std::string path;
unsigned int size;
uint64_t *o;
} curlDlArgs;
size_t writeDataString(const char *buff, size_t sz, size_t cnt, void *u);
size_t writeHeaders(const char *buff, size_t sz, size_t cnt, void *u);
size_t readDataFile(char *buff, size_t sz, size_t cnt, void *u);
size_t readDataBuffer(char *buff, size_t sz, size_t cnt, void *u);
size_t writeDataFile(const char *buff, size_t sz, size_t cnt, void *u);
size_t writeDataBuffer(const char *buff, size_t sz, size_t cnt, void *u);
std::string getHeader(const std::string& _name, std::vector<std::string> *h);
//Shortcuts/legacy
std::string getJSONURL(std::vector<std::string> *headers, const std::string& url);
bool getBinURL(std::vector<uint8_t> *out, const std::string& url);
}

View File

@ -1,103 +0,0 @@
#pragma once
#include <switch.h>
#include <vector>
#include <string>
#include <unordered_map>
#include "gfx.h"
#define BLD_MON 11
#define BLD_DAY 5
#define BLD_YEAR 2024
namespace data
{
//Loads user + title info
void init();
void exit();
bool loadUsersTitles(bool clearUsers);
void sortUserTitles();
//Draws some stats to the upper left corner
void dispStats();
//Global stuff for all titles/saves
typedef struct
{
NacpStruct nacp;
std::string title, safeTitle, author;//Shortcuts sorta.
SDL_Texture *icon = NULL;
bool fav;
} titleInfo;
//Holds stuff specific to user's titles/saves
typedef struct
{
//Makes it easier to grab id
uint64_t tid;
FsSaveDataInfo saveInfo;
PdmPlayStatistics playStats;
} userTitleInfo;
//Class to store user info + titles
class user
{
public:
user() = default;
user(const AccountUid& _id, const std::string& _backupName, const std::string& _safeBackupName);
user(const AccountUid& _id, const std::string& _backupName, const std::string& _safeBackupName, SDL_Texture *img);
//Sets ID
void setUID(const AccountUid& _id);
//Assigns icon
void assignIcon(SDL_Texture *_icn) { userIcon = _icn; }
//Returns user ID
AccountUid getUID() const { return userID; }
u128 getUID128() const { return uID128; }
//Returns username
std::string getUsername() const { return username; }
std::string getUsernameSafe() const { return userSafe; }
SDL_Texture *getUserIcon(){ return userIcon; }
void delIcon(){ SDL_DestroyTexture(userIcon); }
std::vector<data::userTitleInfo> titleInfo;
void addUserTitleInfo(const uint64_t& _tid, const FsSaveDataInfo *_saveInfo, const PdmPlayStatistics *_stats);
private:
AccountUid userID;
u128 uID128;
std::string username, userSafe;
//User icon
SDL_Texture *userIcon;
};
//User vector
extern std::vector<user> users;
//Title data/info map
extern std::unordered_map<uint64_t, data::titleInfo> titles;
//Sets/Retrieves current user/title
void setUserIndex(unsigned _sUser);
data::user *getCurrentUser();
unsigned getCurrentUserIndex();
void setTitleIndex(unsigned _sTitle);
data::userTitleInfo *getCurrentUserTitleInfo();
unsigned getCurrentUserTitleInfoIndex();
//Gets pointer to info that also has title + nacp
data::titleInfo *getTitleInfoByTID(const uint64_t& tid);
//More shortcut functions
std::string getTitleNameByTID(const uint64_t& tid);
std::string getTitleSafeNameByTID(const uint64_t& tid);
SDL_Texture *getTitleIconByTID(const uint64_t& tid);
int getTitleIndexInUser(const data::user& u, const uint64_t& tid);
extern SetLanguage sysLang;
}

View File

@ -1,55 +0,0 @@
#pragma once
#include <minizip/zip.h>
#include <minizip/unzip.h>
#include "fs/fstype.h"
#include "fs/file.h"
#include "fs/dir.h"
#include "fs/zip.h"
#include "fs/fsfile.h"
#include "fs/remote.h"
#include "ui/miscui.h"
#define BUFF_SIZE 0x4000
#define ZIP_BUFF_SIZE 0x20000
#define TRANSFER_BUFFER_LIMIT 0xC00000
namespace fs
{
copyArgs *copyArgsCreate(const std::string& src, const std::string& dst, const std::string& dev, zipFile z, unzFile unz, bool _cleanup, bool _trimZipPath, uint8_t _trimPlaces);
void copyArgsDestroy(copyArgs *c);
void init();
bool mountSave(const FsSaveDataInfo& _m);
inline bool unmountSave() { return fsdevUnmountDevice("sv") == 0; }
bool commitToDevice(const std::string& dev);
std::string getWorkDir();
void setWorkDir(const std::string& _w);
//Loads paths to filter from backup/deletion
void loadPathFilters(const uint64_t& tid);
bool pathIsFiltered(const std::string& _path);
void freePathFilters();
void createSaveData(FsSaveDataType _type, uint64_t _tid, AccountUid _uid, threadInfo *t);
void createSaveDataThreaded(FsSaveDataType _type, uint64_t _tid, AccountUid _uid);
bool extendSaveData(const data::userTitleInfo *tinfo, uint64_t extSize, threadInfo *t);
void extendSaveDataThreaded(const data::userTitleInfo *tinfo, uint64_t extSize);
uint64_t getJournalSize(const data::userTitleInfo *tinfo);
uint64_t getJournalSizeMax(const data::userTitleInfo *tinfo);
//Always threaded
void wipeSave();
void createNewBackup(void *a);
void overwriteBackup(void *a);
void restoreBackup(void *a);
void deleteBackup(void *a);
void dumpAllUserSaves(void *a);
void dumpAllUsersAllSaves(void *a);
void logOpen();
void logWrite(const char *fmt, ...);
}

View File

@ -1,54 +0,0 @@
#pragma once
#include <string>
#include "type.h"
namespace fs
{
void mkDir(const std::string& _p);
void mkDirRec(const std::string& _p);
void delDir(const std::string& _p);
bool dirNotEmpty(const std::string& _dir);
bool isDir(const std::string& _path);
//threadInfo is optional. Only for updating task status.
void copyDirToDir(const std::string& src, const std::string& dst, threadInfo *t);
void copyDirToDirThreaded(const std::string& src, const std::string& dst);
void copyDirToDirCommit(const std::string& src, const std::string& dst, const std::string& dev, threadInfo *t);
void copyDirToDirCommitThreaded(const std::string& src, const std::string& dst, const std::string& dev);
void getDirProps(const std::string& path, unsigned& dirCount, unsigned& fileCount, uint64_t& totalSize);
class dirItem
{
public:
dirItem(const std::string& pathTo, const std::string& sItem);
std::string getItm() const { return itm; }
std::string getName() const;
std::string getExt() const;
bool isDir() const { return dir; }
private:
std::string itm;
bool dir = false;
};
//Just retrieves a listing for _path and stores it in item vector
class dirList
{
public:
dirList() = default;
dirList(const std::string& _path, bool ignoreDotFiles = false);
void reassign(const std::string& _path);
void rescan();
std::string getItem(int index) const { return item[index].getItm(); }
std::string getItemExt(int index) const { return item[index].getExt(); }
bool isDir(int index) const { return item[index].isDir(); }
unsigned getCount() const { return item.size(); }
fs::dirItem *getDirItemAt(unsigned int _ind) { return &item[_ind]; }
private:
std::string path;
std::vector<dirItem> item;
};
}

View File

@ -1,65 +0,0 @@
#pragma once
#include <string>
#include <cstdio>
#include <vector>
#include <switch.h>
#include <dirent.h>
#include <minizip/zip.h>
#include <minizip/unzip.h>
#include "fs.h"
#include "data.h"
#include "ui.h"
namespace fs
{
//Copy args are optional and only used if passed and threaded
void copyFile(const std::string& src, const std::string& dst, threadInfo *t);
void copyFileThreaded(const std::string& src, const std::string& dst);
void copyFileCommit(const std::string& src, const std::string& dst, const std::string& dev, threadInfo *t);
void copyFileCommitThreaded(const std::string& src, const std::string& dst, const std::string& dev);
void fileDrawFunc(void *a);
//deletes file
void delfile(const std::string& _p);
//Dumps all titles for current user
void dumpAllUserSaves();
void getShowFileProps(const std::string& _path);
void getShowDirProps(const std::string& _path);
bool fileExists(const std::string& _path);
//Returns file size
size_t fsize(const std::string& _f);
class dataFile
{
public:
dataFile(const std::string& _path);
~dataFile();
void close(){ fclose(f); }
bool isOpen() const { return opened; }
bool readNextLine(bool proc);
//Finds where variable name ends. When a '(' or '=' is hit. Strips spaces
void procLine();
std::string getLine() const { return line; }
std::string getName() const { return name; }
//Reads until ';', ',', or '\n' is hit and returns as string.
std::string getNextValueStr();
int getNextValueInt();
private:
FILE *f;
std::string line, name;
size_t lPos = 0;
bool opened = false;
};
void logOpen();
void logWrite(const char *fmt, ...);
void logClose();
}

View File

@ -1,100 +0,0 @@
#pragma once
#include <switch.h>
#include <stdint.h>
//Bare minimum wrapper around switch fs for JKSV
#define FS_SEEK_SET 0
#define FS_SEEK_CUR 1
#define FS_SEEK_END 2
#ifdef __cplusplus
extern "C"
{
#endif
typedef struct
{
FsFile _f;
Result error;
s64 offset, fsize;
} FSFILE;
int fsremove(const char *_p);
Result fsDelDirRec(const char *_p);
char *getDeviceFromPath(char *dev, size_t _max, const char *path);
char *getFilePath(char *pathOut, size_t _max, const char *path);
bool fsMkDir(const char *_p);
/*Opens file. Device is fetched from path. Libnx romfs doesn't work with this.
Mode needs to be:
FsOpenMode_Read
FsOpenMode_Write
FsOpenMode_Append
*/
bool fsfcreate(const char *_p, int64_t crSize);
FSFILE *fsfopen(const char *_p, uint32_t mode);
/*Same as above, but FsFileSystem _s is used. Path cannot have device in it*/
FSFILE *fsfopenWithSystem(FsFileSystem *_s, const char *_p, uint32_t mode);
//Closes _f
inline void fsfclose(FSFILE *_f)
{
if(_f != NULL)
{
fsFileClose(&_f->_f);
free(_f);
}
}
//Seeks like stdio
inline void fsfseek(FSFILE *_f, int offset, int origin)
{
switch(origin)
{
case FS_SEEK_SET:
_f->offset = offset;
break;
case FS_SEEK_CUR:
_f->offset += offset;
break;
case FS_SEEK_END:
_f->offset = offset + _f->fsize;
break;
}
}
//Returns offset
inline size_t fsftell(FSFILE *_f) { return _f->offset; }
//Writes buf to file. Automatically resizes _f to fit buf
size_t fsfwrite(const void *buf, size_t sz, size_t count, FSFILE *_f);
//Reads to buff
inline size_t fsfread(void *buf, size_t sz, size_t count, FSFILE *_f)
{
uint64_t read = 0;
_f->error = fsFileRead(&_f->_f, _f->offset, buf, sz * count, 0, &read);
_f->offset += read;
return read;
}
//Gets byte from file
inline char fsfgetc(FSFILE *_f)
{
char ret = 0;
uint64_t read = 0;
_f->error = fsFileRead(&_f->_f, _f->offset++, &ret, 1, 0, &read);
return ret;
}
//Writes byte to file
inline void fsfputc(int ch, FSFILE *_f) { fsfwrite(&ch, 1, 1, _f); }
#ifdef __cplusplus
}
#endif

View File

@ -1,46 +0,0 @@
#pragma once
#include "data.h"
#include "miscui.h"
#include "type.h"
namespace fs
{
typedef struct
{
std::string src, dst, dev;
zipFile z;
unzFile unz;
bool cleanup = false, trimZipPath = false;
uint8_t trimZipPlaces = 0;
uint64_t offset = 0;
ui::progBar *prog;
threadStatus *thrdStatus;
Mutex arglck = 0;
void argLock() { mutexLock(&arglck); }
void argUnlock() { mutexUnlock(&arglck); }
} copyArgs;
typedef struct
{
FsSaveDataType type;
uint64_t tid;
AccountUid account;
uint16_t index;
} svCreateArgs;
typedef struct
{
const data::userTitleInfo *tinfo;
uint64_t extSize;
} svExtendArgs;
typedef struct
{
std::string path;
bool origin = false;
unsigned dirCount = 0;
unsigned fileCount = 0;
uint64_t totalSize = 0;
} dirCountArgs;
}

View File

@ -1,21 +0,0 @@
#pragma once
#include "../rfs.h"
#define JKSV_DRIVE_FOLDER "JKSV"
namespace fs
{
extern rfs::IRemoteFS *rfs;
extern std::string rfsRootID;
void remoteInit();
void remoteExit();
// Google Drive
void driveInit();
std::string driveSignInGetAuthCode();
// Webdav
void webDavInit();
}

View File

@ -1,18 +0,0 @@
#pragma once
#include <string>
#include <minizip/zip.h>
#include <minizip/unzip.h>
#include "type.h"
namespace fs
{
//threadInfo is optional and only used when threaded versions are used
void copyDirToZip(const std::string& src, zipFile dst, bool trimPath, int trimPlaces, threadInfo *t);
void copyDirToZipThreaded(const std::string& src, zipFile dst, bool trimPath, int trimPlaces);
void copyZipToDir(unzFile src, const std::string& dst, const std::string& dev, threadInfo *t);
void copyZipToDirThreaded(unzFile src, const std::string& dst, const std::string& dev);
uint64_t getZipTotalSize(unzFile unz);
bool zipNotEmpty(unzFile unz);
}

View File

@ -1,66 +0,0 @@
#pragma once
#include <curl/curl.h>
#include <json-c/json.h>
#include <string>
#include <vector>
#include <unordered_map>
#include "curlfuncs.h"
#include "rfs.h"
#define HEADER_CONTENT_TYPE_APP_JSON "Content-Type: application/json; charset=UTF-8"
#define HEADER_AUTHORIZATION "Authorization: Bearer "
#define MIMETYPE_FOLDER "application/vnd.google-apps.folder"
namespace drive
{
class gd : public rfs::IRemoteFS
{
public:
void setClientID(const std::string& _clientID) { clientID = _clientID; }
void setClientSecret(const std::string& _clientSecret) { secretID = _clientSecret; }
void setRefreshToken(const std::string& _refreshToken) { rToken = _refreshToken; }
bool exhangeAuthCode(const std::string& _authCode);
bool hasToken() { return token.empty() == false; }
bool refreshToken();
bool tokenIsValid();
void clearDriveList() { driveList.clear(); }
// TODO: This also gets files that do not belong to JKSV
void driveListInit(const std::string& _q);
void driveListAppend(const std::string& _q);
std::vector<rfs::RfsItem> getListWithParent(const std::string& _parent);
void debugWriteList();
bool createDir(const std::string& _dirName, const std::string& _parent);
// TODO: This is problematic, because multiple files could share the same name without a parent.
bool dirExists(const std::string& _dirName);
bool dirExists(const std::string& _dirName, const std::string& _parent);
bool fileExists(const std::string& _filename, const std::string& _parent);
void uploadFile(const std::string& _filename, const std::string& _parent, curlFuncs::curlUpArgs *_upload);
void updateFile(const std::string& _fileID, curlFuncs::curlUpArgs *_upload);
void downloadFile(const std::string& _fileID, curlFuncs::curlDlArgs *_download);
void deleteFile(const std::string& _fileID);
std::string getClientID() const { return clientID; }
std::string getClientSecret() const { return secretID; }
std::string getRefreshToken() const { return rToken; }
std::string getFileID(const std::string& _name, const std::string& _parent);
// TODO: This is problematic, because multiple files could share the same name without a parent.
std::string getDirID(const std::string& _name);
std::string getDirID(const std::string& _name, const std::string& _parent);
size_t getDriveListCount() const { return driveList.size(); }
rfs::RfsItem *getItemAt(unsigned int _ind) { return &driveList[_ind]; }
private:
std::vector<rfs::RfsItem> driveList;
std::string clientID, secretID, token, rToken;
};
}

View File

@ -1,26 +0,0 @@
#pragma once
#include <SDL2/SDL.h>
#include "textureMgr.h"
namespace gfx
{
extern SDL_Renderer *render;
extern gfx::textureMgr *texMgr;
void init();
void exit();
void present();
void drawTextf(SDL_Texture *target, int fontSize, int x, int y, const SDL_Color *c, const char *fmt, ...);
void drawTextfWrap(SDL_Texture *target, int fontSize, int x, int y, int maxWidth, const SDL_Color* c, const char *fmt, ...);
size_t getTextWidth(const char *str, int fontSize);
//Shortcuts for drawing
void texDraw(SDL_Texture *target, SDL_Texture *tex, int x, int y);
void texDrawStretch(SDL_Texture *target, SDL_Texture *tex, int x, int y, int w, int h);
void texDrawPart(SDL_Texture *target, SDL_Texture *tex, int srcX, int srcY, int srcW, int srcH, int dstX, int dstY);
void drawLine(SDL_Texture *target, const SDL_Color *c, int x1, int y1, int x2, int y2);
void drawRect(SDL_Texture *target, const SDL_Color *c, int x, int y, int w, int h);
void clearTarget(SDL_Texture *target, const SDL_Color *clear);
}

View File

@ -1,33 +0,0 @@
#pragma once
#include <vector>
#include <SDL2/SDL.h>
/*Texture manager class
Keeps pointers to ALL textures so it is not possible to forget to free them. Also keeps code a little easier to read. A little.*/
typedef enum
{
IMG_FMT_PNG,
IMG_FMT_JPG,
IMG_FMT_BMP
} imgTypes;
namespace gfx
{
class textureMgr
{
public:
textureMgr() = default;
~textureMgr();
void textureAdd(SDL_Texture *_tex);
SDL_Texture *textureCreate(int _w, int _h);
SDL_Texture *textureLoadFromFile(const char *_path);
SDL_Texture *textureLoadFromMem(imgTypes _type, const void *_dat, size_t _datSize);
void textureResize(SDL_Texture **_tex, int _w, int _h);
private:
std::vector<SDL_Texture *> textures;
};
}

View File

@ -1,53 +0,0 @@
#pragma once
#include <string>
#include "curlfuncs.h"
#include <mutex>
#define UPLOAD_BUFFER_SIZE 0x8000
#define DOWNLOAD_BUFFER_SIZE 0xC00000
#define USER_AGENT "JKSV"
namespace rfs {
typedef struct
{
std::string name, id, parent;
bool isDir = false;
unsigned int size;
} RfsItem;
class IRemoteFS
{
public:
virtual ~IRemoteFS() {} // Virtual destructor to allow correct deletion through the base class pointer
virtual bool createDir(const std::string& _dirName, const std::string& _parent) = 0;
virtual bool dirExists(const std::string& _dirName, const std::string& _parent) = 0;
virtual bool fileExists(const std::string& _filename, const std::string& _parent) = 0;
virtual void uploadFile(const std::string& _filename, const std::string& _parent, curlFuncs::curlUpArgs *_upload) = 0;
virtual void updateFile(const std::string& _fileID, curlFuncs::curlUpArgs *_upload) = 0;
virtual void downloadFile(const std::string& _fileID, curlFuncs::curlDlArgs *_download) = 0;
virtual void deleteFile(const std::string& _fileID) = 0;
virtual std::string getFileID(const std::string& _name, const std::string& _parent) = 0;
virtual std::string getDirID(const std::string& _name, const std::string& _parent) = 0;
virtual std::vector<RfsItem> getListWithParent(const std::string& _parent) = 0;
};
// Shared multi-threading definitions
typedef struct
{
curlFuncs::curlDlArgs *cfa;
std::mutex dataLock;
std::condition_variable cond;
std::vector<uint8_t> sharedBuffer;
bool bufferFull = false;
unsigned int downloaded = 0;
} dlWriteThreadStruct;
extern std::vector<uint8_t> downloadBuffer;
void writeThread_t(void *a);
size_t writeDataBufferThreaded(uint8_t *buff, size_t sz, size_t cnt, void *u);
}

View File

@ -1,28 +0,0 @@
#pragma once
#include <string>
#include <switch.h>
//Misc stuff for new menu code
typedef void (*funcPtr)(void *);
class threadStatus
{
public:
void setStatus(const char *fmt, ...);
void getStatus(std::string& statusOut);
private:
Mutex statusLock = 0;
std::string status;
};
typedef struct
{
bool running = false, finished = false;
Thread thrd;
ThreadFunc thrdFunc;
void *argPtr = NULL;
funcPtr drawFunc = NULL;//Draw func is passed threadInfo pointer too
threadStatus *status;
} threadInfo;

110
inc/ui.h
View File

@ -1,110 +0,0 @@
#pragma once
#include <switch.h>
#include <vector>
#include <string>
#include "data.h"
#include "gfx.h"
//ui headers - split up to keep a bit more organized
#include "ui/miscui.h"
#include "ui/uistr.h"
#include "ui/ttlview.h"
#include "ui/thrdProc.h"
#include "ui/sldpanel.h"
#include "ui/usr.h"
#include "ui/ttl.h"
#include "ui/fld.h"
#include "ui/sett.h"
#include "ui/ext.h"
#include "ui/fm.h"
enum menuState
{
USR_SEL,
TTL_SEL,
ADV_MDE,
EX_MNU,
OPT_MNU,
FIL_MDE
};
namespace ui
{
//Current menu/ui state
extern int mstate, prevState;
//Slide/animation scaling
extern float animScale;
//Loading glyph
extern const std::string loadGlyphArray[];
//pad data cause i don't know where else to put it
extern PadState pad;
extern HidTouchScreenState touchState;
static inline void updateInput() { touchState = {0}; padUpdate(&pad); hidGetTouchScreenStates(&touchState, 1); }
inline uint64_t padKeysDown() { return padGetButtonsDown(&pad); }
inline uint64_t padKeysHeld() { return padGetButtons(&pad); }
inline uint64_t padKeysUp() { return padGetButtonsUp(&pad); }
inline void changeState(int newState)
{
prevState = mstate;
mstate = newState;
}
//Holds theme set id
extern ColorSetId thmID;
//Both UI modes need access to this
extern std::string folderMenuInfo;
/*Colors
clearClr = color to clear buffer
txtCont = text that contrasts clearClr
txtDiag = text color for dialogs
*/
extern SDL_Color clearClr, transparent, txtCont, txtDiag, rectLt, rectSh, tboxClr, sideRect, divClr, heartColor, slidePanelColor;
//Textbox graphics
extern SDL_Texture *cornerTopLeft, *cornerTopRight, *cornerBottomLeft, *cornerBottomRight;
//Menu bounding
extern SDL_Texture *mnuTopLeft, *mnuTopRight, *mnuBotLeft, *mnuBotRight;
//Covers left and right of progress bar to fake being not a rectangle.
extern SDL_Texture *progCovLeft, *progCovRight, *diaBox;
//Side bar from Freebird. RIP.
extern SDL_Texture *sideBar;
//Sets colors and loads font for icon creation
void initTheme();
//Loads graphics and stuff
void init();
void exit();
//Inits HID
void hidInit();
//Adds a panel pointer to a vector since they need to be drawn over everything else
int registerMenu(ui::menu *m);
int registerPanel(ui::slideOutPanel *sop);
threadInfo *newThread(ThreadFunc func, void *args, funcPtr _drawFunc);
//Just draws a screen and flips JIC boot takes long.
void showLoadScreen();
//Clears and draws general stuff used by multiple screens
void drawUI();
//switch case so we don't have problems with multiple main loops like 3DS
bool runApp();
void showPopMessage(int frameCount, const char *fmt, ...);
//Used for multiple menu functions/callback
void toTTL(void *);
}

View File

@ -1,10 +0,0 @@
#pragma once
namespace ui
{
extern ui::menu *extMenu;
void extInit();
void extExit();
void extUpdate();
void extDraw(SDL_Texture *target);
}

View File

@ -1,19 +0,0 @@
#pragma once
#include "ui.h"
#include "dir.h"
namespace ui
{
//extern ui::menu *fldMenu;
extern ui::slideOutPanel *fldPanel;
//extern fs::dirList *fldList;
void fldInit();
void fldExit();
void fldUpdate();
//Populate to open menu, refresh for updating after actions
void fldPopulateMenu();
void fldRefreshMenu();
}

View File

@ -1,10 +0,0 @@
#pragma once
namespace ui
{
void fmInit();
void fmExit();
void fmPrep(const FsSaveDataType& _type, const std::string& _dev, const std::string& _baseSDMC, bool _commit);
void fmUpdate();
void fmDraw(SDL_Texture *target);
}

View File

@ -1,165 +0,0 @@
#pragma once
#include <vector>
#include <SDL2/SDL.h>
#include "type.h"
#include "gfx.h"
#define POP_FRAME_DEFAULT 130
#define MENU_FONT_SIZE_DEFAULT 18
#define MENU_MAX_SCROLL_DEFAULT 15
typedef enum
{
MENU_X,
MENU_Y,
MENU_RECT_WIDTH,
MENU_RECT_HEIGHT,
MENU_FONT_SIZE,
MENU_MAX_SCROLL
} menuParams;
//For smaller classes that aren't easy to get lost in and general functions
namespace ui
{
typedef struct
{
std::string text;
bool hold;
funcPtr confFunc, cancelFunc;
void *args;
unsigned lgFrame = 0, frameCount = 0;//To count frames cause I don't have time and am lazy
} confirmArgs;
typedef struct
{
funcPtr func = NULL;
void *args = NULL;
HidNpadButton button = (HidNpadButton)0;
} menuOptEvent;
typedef struct
{
SDL_Texture *icn = NULL;
std::string txt;
int txtWidth;
std::vector<menuOptEvent> events;
} menuOpt;
class menu
{
public:
menu() = default;
menu(const int& _x, const int& _y, const int& _rW, const int& _fS, const int& _mL);
void editParam(int _param, int newVal);
//Gets executed when menu changes at all
void setOnChangeFunc(funcPtr func) { onChange = func; }
//executed when .update() is called.
void setCallback(funcPtr _callback, void *args) { callback = _callback; callbackArgs = args; }
//Adds option.
int addOpt(SDL_Texture *_icn, const std::string& add);
//Adds an function to be executed on pressing button specified
void optAddButtonEvent(unsigned _ind, HidNpadButton _button, funcPtr _func, void *args);
//Changes opt text
void editOpt(int ind, SDL_Texture *_icn, const std::string& ch);
size_t getOptCount() { return opt.size(); }
int getOptPos(const std::string& txt);
//Clears menu stuff
~menu();
//Handles controller input and executes functions for buttons if they're set
void update();
//Returns selected option
int getSelected() { return selected; }
//Returns menu option count
int getCount() { return opt.size(); }
//Draws the menu at x and y. rectWidth is the width of the rectangle drawn under the selected
void draw(SDL_Texture *target, const SDL_Color *textClr, bool drawText);
//Clears and resets menu
void reset();
//Resets selected + start
void resetSel() { selected = 0; }
//Enables control/disables drawing select box
void setActive(bool _set);
bool getActive() { return isActive; }
private:
//drawing x and y + rectangle width/height. Height is calc'd with font size
int x = 0, mY = 0, tY = 0, y = 0, rW = 0, rY = 0, fSize = 0, rH = 0, mL = 0;
//Options vector
std::vector<ui::menuOpt> opt;
//Selected + frame counting for auto-scroll. Hover count is to not break autoscroll
int selected = 0, fc = 0, hoverCount = 0, spcWidth = 0;
//How much we shift the color of the rectangle
uint8_t clrSh = 0;
bool clrAdd = true, isActive = true, hover = false;
//Option buffer. Basically, text is draw to this so it can't overlap. Also allows scrolling
SDL_Texture *optTex;
funcPtr onChange = NULL, callback = NULL;
void *callbackArgs, *funcArgs;
};
//Progress bar for showing loading. Mostly so people know it didn't freeze
class progBar
{
public:
//Constructor. _max is the maximum value
progBar() = default;
progBar(const uint64_t& _max) { max = _max; }
void setMax(const uint64_t& _max) { max = _max; };
//Updates progress
void update(const uint64_t& _prog);
//Draws with text at top
void draw(const std::string& text);
private:
uint64_t max = 0, prog = 0;
float width = 0;
};
typedef struct
{
std::string message;
int rectWidth = 0, frames = 0, y = 720;
} popMessage;
class popMessageMngr
{
public:
~popMessageMngr();
void update();
void popMessageAdd(const std::string& mess, int frameTime);
void draw();
private:
std::vector<popMessage> popQueue;//All graphics need to be on main thread. Directly adding will cause text issues
std::vector<popMessage> message;
};
//General use
ui::confirmArgs *confirmArgsCreate(bool _hold, funcPtr _confFunc, funcPtr _cancelFunc, void *_funcArgs, const char *fmt, ...);
void confirm(void *a);
void showMessage(const char *fmt, ...);
bool confirmTransfer(const std::string& f, const std::string& t);
bool confirmDelete(const std::string& p);
void drawBoundBox(SDL_Texture *target, int x, int y, int w, int h, uint8_t clrSh);
void drawTextbox(SDL_Texture *target, int x, int y, int w, int h);
}

View File

@ -1,13 +0,0 @@
#pragma once
#include <SDL2/SDL.h>
namespace ui
{
void settInit();
void settExit();
void settUpdate();
void settDraw(SDL_Texture *target);
extern ui::menu *settMenu;
}

View File

@ -1,35 +0,0 @@
#pragma once
namespace ui
{
//Maybe more later *if* needed, but not now.
typedef enum
{
SLD_LEFT,
SLD_RIGHT
} slidePanelOrientation;
//_draw is called and passed the panel texture/target when this.draw() is called.
class slideOutPanel
{
public:
slideOutPanel(int _w, int _h, int _y, slidePanelOrientation _side, funcPtr _draw);
void resizePanel(int _w, int _h, int _y);
void update();
void setCallback(funcPtr _cb, void *_args) { callback = _cb; cbArgs = _args; }
void openPanel() { open = true; }
void closePanel() { open = false; }
void setX(int _nX){ x = _nX; };
bool isOpen() { return open; }
void draw(const SDL_Color *backCol);
private:
int w, h, x, y;
uint8_t sldSide;
bool open = false;
SDL_Texture *panel;
funcPtr drawFunc, callback = NULL;
void *cbArgs = NULL;
};
}

View File

@ -1,24 +0,0 @@
#pragma once
#include "type.h"
namespace ui
{
class threadProcMngr
{
public:
~threadProcMngr();
//Draw function is used and called to draw on overlay
threadInfo *newThread(ThreadFunc func, void *args, funcPtr _drawFunc);
void update();
void draw();
bool empty() { return threads.empty(); }
private:
std::vector<threadInfo *> threads;
uint8_t lgFrame = 0, clrShft = 0;
bool clrAdd = true;
unsigned frameCount = 0;
Mutex threadLock = 0;
};
}

View File

@ -1,17 +0,0 @@
#pragma once
namespace ui
{
void ttlInit();
void ttlExit();
void ttlSetActive(int usr, bool _set, bool _showSel);
void ttlRefresh();
//JIC for func ptr
void ttlReset();
void ttlUpdate();
void ttlDraw(SDL_Texture *target);
//File mode needs access to this.
extern ui::slideOutPanel *ttlOptsPanel;
}

View File

@ -1,56 +0,0 @@
#pragma once
#include <SDL2/SDL.h>
#include "type.h"
#include "data.h"
namespace ui
{
class titleTile
{
public:
titleTile(unsigned _w, unsigned _h, bool _fav, SDL_Texture *_icon)
{
w = _w;
h = _h;
wS = _w;
hS = _h;
fav = _fav;
icon = _icon;
}
void draw(SDL_Texture *target, int x, int y, bool sel);
private:
unsigned w, h, wS, hS;
bool fav = false;
SDL_Texture *icon;
};
//Todo less hardcode etc
class titleview
{
public:
titleview(const data::user& _u, int _iconW, int _iconH, int _horGap, int _vertGap, int _rowCount, funcPtr _callback);
~titleview();
void update();
void refresh();
void setActive(bool _set, bool _showSel) { active = _set; showSel = _showSel; }
bool getActive() { return active; }
void setSelected(int _set) { selected = _set; }
int getSelected() { return selected; }
void draw(SDL_Texture *target);
private:
const data::user *u;//Might not be safe. Users *shouldn't* be touched after initial load
bool active = false, showSel = false, clrAdd = true;
uint8_t clrShft = 0;
funcPtr callback = NULL;
int x = 200, y = 62, selected = 0, selRectX = 10, selRectY = 45;
int iconW, iconH, horGap, vertGap, rowCount;
std::vector<ui::titleTile *> tiles;
};
}

View File

@ -1,15 +0,0 @@
#pragma once
#include <map>
//Strings since translation support
namespace ui
{
void initStrings();
void loadTrans();
void saveTranslationFiles(void *a);
extern std::map<std::pair<std::string, int>, std::string> strings;
inline std::string getUIString(const std::string& _name, int ind){ return strings[std::make_pair(_name, ind)]; }
inline const char *getUICString(const std::string& _name, int ind){ return strings[std::make_pair(_name, ind)].c_str(); }
}

View File

@ -1,14 +0,0 @@
#pragma once
namespace ui
{
void usrInit();
void usrExit();
void usrRefresh();
void usrUpdate();
void usrDraw(SDL_Texture *target);
//A lot of stuff needs access to these
extern ui::menu *usrMenu;
extern ui::slideOutPanel *usrSelPanel;
}

View File

@ -1,158 +0,0 @@
#pragma once
#include "data.h"
#include "ui.h"
#include "file.h"
#include "gfx.h"
namespace util
{
enum
{
DATE_FMT_YMD,
DATE_FMT_YDM,
DATE_FMT_HOYSTE,
DATE_FMT_JHK,
DATE_FMT_ASC
};
typedef enum
{
CPU_SPEED_204MHz = 204000000,
CPU_SPEED_306MHz = 306000000,
CPU_SPEED_408MHz = 408000000,
CPU_SPEED_510MHz = 510000000,
CPU_SPEED_612MHz = 612000000,
CPU_SPEED_714MHz = 714000000,
CPU_SPEED_816MHz = 816000000,
CPU_SPEED_918MHz = 918000000,
CPU_SPEED_1020MHz = 1020000000, //Default
CPU_SPEED_1122MHz = 1122000000,
CPU_SPEED_1224MHz = 1224000000,
CPU_SPEED_1326MHz = 1326000000,
CPU_SPEED_1428MHz = 1428000000,
CPU_SPEED_1581MHz = 1581000000,
CPU_SPEED_1683MHz = 1683000000,
CPU_SPEED_1785MHz = 1785000000
} cpuSpds;
typedef enum
{
GPU_SPEED_0MHz = 0,
GPU_SPEED_76MHz = 76800000,
GPU_SPEED_153MHz = 153600000,
GPU_SPEED_203MHz = 230400000,
GPU_SPEED_307MHz = 307200000, //Handheld 1
GPU_SPEED_384MHz = 384000000, //Handheld 2
GPU_SPEED_460MHz = 460800000,
GPU_SPEED_537MHz = 537600000,
GPU_SPEED_614MHz = 614400000,
GPU_SPEED_768MHz = 768000000, //Docked
GPU_SPEED_844MHz = 844800000,
GPU_SPEED_921MHZ = 921600000
} gpuSpds;
typedef enum
{
RAM_SPEED_0MHz = 0,
RAM_SPEED_40MHz = 40800000,
RAM_SPEED_68MHz = 68000000,
RAM_SPEED_102MHz = 102000000,
RAM_SPEED_204MHz = 204000000,
RAM_SPEED_408MHz = 408000000,
RAM_SPEED_665MHz = 665600000,
RAM_SPEED_800MHz = 800000000,
RAM_SPEED_1065MHz = 1065600000,
RAM_SPEED_1331MHz = 1331200000,
RAM_SPEED_1600MHz = 1600000000
} ramSpds;
//Returns string with date S+ time
std::string getDateTime(int fmt);
//Copys dir list to a menu with 'D: ' + 'F: '
void copyDirListToMenu(const fs::dirList& d, ui::menu& m);
//Removes last folder from '_path'
void removeLastFolderFromString(std::string& _path);
size_t getTotalPlacesInPath(const std::string& _path);
void trimPath(std::string& _path, uint8_t _places);
inline bool isASCII(const uint32_t& t)
{
return t > 30 && t < 127;
}
std::string safeString(const std::string& s);
std::string getStringInput(SwkbdType _type, const std::string& def, const std::string& head, size_t maxLength, unsigned dictCnt, const std::string dictWords[]);
std::string getExtensionFromString(const std::string& get);
std::string getFilenameFromPath(const std::string& get);
std::string generateAbbrev(const uint64_t& tid);
//removes char from C++ string
void stripChar(char _c, std::string& _s);
void replaceStr(std::string& _str, const std::string& _find, const std::string& _rep);
//For future external translation support. Replaces [button] with button chars
void replaceButtonsInString(std::string& rep);
//Creates a basic generic icon for stuff without one
SDL_Texture *createIconGeneric(const char *txt, int fontSize, bool clearBack);
inline u128 accountUIDToU128(AccountUid uid)
{
return ((u128)uid.uid[0] << 64 | uid.uid[1]);
}
inline AccountUid u128ToAccountUID(u128 id)
{
AccountUid ret;
ret.uid[0] = id >> 64;
ret.uid[1] = id;
return ret;
}
inline std::string getIDStr(const uint64_t& _id)
{
char tmp[18];
sprintf(tmp, "%016lX", _id);
return std::string(tmp);
}
inline std::string getIDStrLower(const uint64_t& _id)
{
char tmp[18];
sprintf(tmp, "%08X", (uint32_t)_id);
return std::string(tmp);
}
inline std::string generatePathByTID(const uint64_t& tid)
{
return fs::getWorkDir() + data::getTitleSafeNameByTID(tid) + "/";
}
std::string getSizeString(const uint64_t& _size);
inline void createTitleDirectoryByTID(const uint64_t& tid)
{
std::string makePath = fs::getWorkDir() + data::getTitleSafeNameByTID(tid);
mkdir(makePath.c_str(), 777);
}
Result accountDeleteUser(AccountUid *uid);
void sysBoost();
void sysNormal();
inline bool isApplet()
{
AppletType type = appletGetAppletType();
return type == AppletType_LibraryApplet;
}
void checkForUpdate(void *a);
}

View File

@ -1,53 +0,0 @@
#pragma once
#include <curl/curl.h>
#include <string>
#include <tinyxml2.h>
#include "rfs.h"
namespace rfs {
// Note: Everything declared an "id" is the full path component from the origin to the resource starting with a "/".
// Note: Directories ALWAYS have a trailing / while files NEVER have a trailing /
// e.g. /<basePath>/JKSV/
// e.g. /<basePath>/JKSV/<title-id>/
// e.g. /<basePath>/JKSV/<title-id>/<file>
// e.g. /
// other string arguments never have any leading or trailing "/"
class WebDav : public IRemoteFS {
private:
CURL* curl;
std::string origin;
std::string basePath;
std::string username;
std::string password;
std::vector<RfsItem> parseXMLResponse(const std::string& xml);
bool resourceExists(const std::string& id);
std::string appendResourceToParentId(const std::string& resourceName, const std::string& parentId, bool isDir);
std::string getNamespacePrefix(tinyxml2::XMLElement* root, const std::string& nsURI);
public:
WebDav(const std::string& origin,
const std::string& username,
const std::string& password);
~WebDav();
bool createDir(const std::string& dirName, const std::string& parentId);
bool dirExists(const std::string& dirName, const std::string& parentId);
bool fileExists(const std::string& filename, const std::string& parentId);
void uploadFile(const std::string& filename, const std::string& parentId, curlFuncs::curlUpArgs *_upload);
void updateFile(const std::string& fileID, curlFuncs::curlUpArgs *_upload);
void downloadFile(const std::string& fileID, curlFuncs::curlDlArgs *_download);
void deleteFile(const std::string& fileID);
std::string getFileID(const std::string& name, const std::string& parentId);
std::string getDirID(const std::string& dirName, const std::string& parentId);
std::vector<RfsItem> getListWithParent(const std::string& _parent);
std::string getDisplayNameFromURL(const std::string &url);
};
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 158 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 256 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 249 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 287 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 267 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 290 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 287 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 257 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 253 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 273 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 266 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 279 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 285 B

View File

@ -1,171 +0,0 @@
author = 0, "NULL"
confirmBlacklist = 0, "Are you sure you want to add #%s# to your blacklist?"
confirmCopy = 0, "Are you sure you want to copy #%s# to #%s#?"
confirmCreateAllSaveData = 0, "Are you sure you would like to create all save data on this system for #%s#? This can take a while depending on how many titles are found."
confirmDelete = 0, "Are you sure you want to delete #%s#? *This is permanent*!"
confirmDeleteBackupsAll = 0, "Are you sure you would like to delete *all* of your save backups for all of your games?"
confirmDeleteBackupsTitle = 0, "Are you sure you would like to delete all save backups for #%s#?"
confirmDeleteSaveData = 0, "*WARNING*: This *will* erase the save data for #%s# *from your system*. Are you sure you want to do this?"
confirmDriveOverwrite = 0, "Downloading this backup from drive will overwrite the one on your SD card. Continue?"
confirmOverwrite = 0, "Are you sure you want to overwrite #%s#?"
confirmResetSaveData = 0, "*WARNING*: This *will* reset the save data for this game as if it was never ran before. Are you sure you want to do this?"
confirmRestore = 0, "Are you sure you want to restore #%s#?"
debugStatus = 0, "User Count: "
debugStatus = 1, "Current User: "
debugStatus = 2, "Current Title: "
debugStatus = 3, "Safe Title: "
debugStatus = 4, "Sort Type: "
dialogNo = 0, "No [B]"
dialogOK = 0, "OK [A]"
dialogYes = 0, "Yes [A]"
extrasMenu = 0, "SD to SD Browser"
extrasMenu = 1, "BIS: ProdInfoF"
extrasMenu = 2, "BIS: Safe"
extrasMenu = 3, "BIS: System"
extrasMenu = 4, "BIS: User"
extrasMenu = 5, "Remove Pending Update"
extrasMenu = 6, "Terminate Process"
extrasMenu = 7, "Mount System Save"
extrasMenu = 8, "Rescan Titles"
extrasMenu = 9, "Mount Process RomFS"
extrasMenu = 10, "Backup JKSV Folder"
extrasMenu = 11, "*[DEV]* Output en-US"
fileModeFileProperties = 0, "Path: %s\nSize: %s"
fileModeFolderProperties = 0, "Path: %s\nSub Folders: %u\nFile Count: %u\nTotal Size: %s"
fileModeMenu = 0, "Copy To "
fileModeMenu = 1, "Delete"
fileModeMenu = 2, "Rename"
fileModeMenu = 3, "Make Dir"
fileModeMenu = 4, "Properties"
fileModeMenu = 5, "Close"
fileModeMenu = 6, "Add to Path Filters"
fileModeMenuMkDir = 0, "New"
folderMenuNew = 0, "New Backup"
helpFolder = 0, "[A] Select [Y] Restore [X] Delete [ZR] Upload [B] Close"
helpSettings = 0, "[A] Toggle [X] Defaults [B] Back"
helpTitle = 0, "[A] Select [L][R] Jump [Y] Favorite [X] Title Options [B] Back"
helpUser = 0, "[A] Select [Y] Dump All Saves [X] User Options"
holdingText = 0, "(Hold) "
holdingText = 1, "(Keep Holding) "
holdingText = 2, "(Almost There!) "
infoStatus = 0, "TID: %016lX"
infoStatus = 1, "SID: %016lX"
infoStatus = 2, "Play Time: %02d:%02d"
infoStatus = 3, "Total Launches: %u"
infoStatus = 4, "Publisher: %s"
infoStatus = 5, "Save Type: %s"
infoStatus = 6, "Cache Index: %u"
infoStatus = 7, "User: %s"
infoStatus = 9, ""
loadingStartPage = 0, "Loading..."
mainMenuExtras = 0, "Extras"
mainMenuSettings = 0, "Settings"
onlineErrorConnecting = 0, "Error Connecting!"
onlineNoUpdates = 0, "No Updates Available."
popAddedToPathFilter = 0, "'#%s#' added to path filters."
popCPUBoostEnabled = 0, "CPU Boost Enabled for ZIP."
popChangeOutputError = 0, "#%s# contains illegal or non-ASCII characters."
popChangeOutputFolder = 0, "#%s# changed to #%s#"
popDriveFailed = 0, "Failed to start Google Drive."
popRemoteNotActive = 0, "Remote is not available"
popDriveStarted = 0, "Google Drive started successfully."
popWebdavStarted = 0, "Webdav started successfully."
popWebdavFailed =, 0, "Failed to start Webdav."
popErrorCommittingFile = 0, "Error committing file to save!"
popFolderIsEmpty = 0, "Folder is empty!"
popProcessShutdown = 0, "#%s# successfully shutdown."
popSVIExported = 0, "SVI Exported."
popSaveIsEmpty = 0, "Save data is empty!"
popTrashEmptied = 0, "Trash emptied"
popZipIsEmpty = 0, "ZIP file is empty!"
saveDataBackupDeleted = 0, "#%s# has been deleted."
saveDataBackupMovedToTrash = 0, "#%s# has been moved to trash."
saveDataCreatedForUser = 0, "Save data created for %s!"
saveDataCreationFailed = 0, "Save data creation failed!"
saveDataDeleteAllUser = 0, "*ARE YOU SURE YOU WANT TO DELETE ALL SAVE DATA FOR %s?*"
saveDataDeleteSuccess = 0, "Save data for #%s# deleted!"
saveDataExtendFailed = 0, "Failed to extend save data."
saveDataExtendSuccess = 0, "Save data for #%s# extended!"
saveDataNoneFound = 0, "No saves found for #%s#!"
saveDataResetSuccess = 0, "Save for #%s# reset!"
saveDataTypeText = 0, "System"
saveDataTypeText = 1, "Account"
saveDataTypeText = 2, "BCAT"
saveDataTypeText = 3, "Device"
saveDataTypeText = 4, "Temporary"
saveDataTypeText = 5, "Cache"
saveDataTypeText = 6, "System BCAT"
saveTypeMainMenu = 0, "Device"
saveTypeMainMenu = 1, "BCAT"
saveTypeMainMenu = 2, "Cache"
saveTypeMainMenu = 3, "System"
saveTypeMainMenu = 4, "System BCAT"
saveTypeMainMenu = 5, "SysTemp Storagetem"
settingsMenu = 0, "Empty Trash Bin"
settingsMenu = 1, "Check for Updates"
settingsMenu = 2, "Set JKSV Save Output Folder"
settingsMenu = 3, "Edit Blacklisted Titles"
settingsMenu = 4, "Delete All Save Backups"
settingsMenu = 5, "Include Device Saves With Users: "
settingsMenu = 6, "Auto Backup On Restore: "
settingsMenu = 7, "Auto-Name Backups: "
settingsMenu = 8, "Overclock/CPU Boost: "
settingsMenu = 9, "Hold To Delete: "
settingsMenu = 10, "Hold To Restore: "
settingsMenu = 11, "Hold To Overwrite: "
settingsMenu = 12, "Force Mount: "
settingsMenu = 13, "Account System Saves: "
settingsMenu = 14, "Enable Writing to System Saves: "
settingsMenu = 15, "Use FS Commands Directly: "
settingsMenu = 16, "Export Saves to ZIP: "
settingsMenu = 17, "Force English To Be Used: "
settingsMenu = 18, "Enable Trash Bin: "
settingsMenu = 19, "Title Sorting Type: "
settingsMenu = 20, "Animation Scale: "
settingsOff = 0, "Off"
settingsOn = 0, ">On>"
sortType = 0, "Alphabetical"
sortType = 1, "Time Played"
sortType = 2, "Last Played"
swkbdEnterName = 0, "Enter a new name"
swkbdExpandSize = 0, "Enter New Size in MB"
swkbdMkDir = 0, "Enter a folder name"
swkbdNewSafeTitle = 0, "Input New Output Folder"
swkbdProcessID = 0, "Enter Process ID"
swkbdRename = 0, "Enter a new name for item"
swkbdSaveIndex = 0, "Enter Cache Index"
swkbdSetWorkDir = 0, "Enter a new Output Path"
swkbdSysSavID = 0, "Enter System Save ID"
threadStatusAddingFileToZip = 0, "Adding '#%s#' to ZIP..."
threadStatusCalculatingSaveSize = 0, "Calculating save data size..."
threadStatusCheckingForUpdate = 0, "Checking for updates..."
threadStatusCompressingSaveForUpload = 0, "Compressing #%s# for upload..."
threadStatusCopyingFile = 0, "Copying '#%s#'..."
threadStatusCreatingSaveData = 0, "Creating Save Data for #%s#..."
threadStatusDecompressingFile = 0, "Decompressing '#%s#'..."
threadStatusDeletingFile = 0, "Deleting..."
threadStatusDeletingSaveData = 0, "Deleting Save Data for #%s#..."
threadStatusDeletingUpdate = 0, "Deleting pending update..."
threadStatusDownloadingFile = 0, "Downloading #%s#..."
threadStatusDownloadingUpdate = 0, "Downloading update..."
threadStatusExtendingSaveData = 0, "Extending Save Data for #%s#..."
threadStatusGetDirProps = 0, "Getting Folder Properties..."
threadStatusOpeningFolder = 0, "Opening '#%s#'..."
threadStatusPackingJKSV = 0, "Writing JKSV folder contents to ZIP..."
threadStatusResettingSaveData = 0, "Resetting save data..."
threadStatusSavingTranslations = 0, "Saving the file master..."
threadStatusUploadingFile = 0, "Uploading #%s#..."
titleOptions = 0, "Information"
titleOptions = 1, "Blacklist"
titleOptions = 2, "Change Output Folder"
titleOptions = 3, "Open in File Mode"
titleOptions = 4, "Delete All Save Backups"
titleOptions = 5, "Reset Save Data"
titleOptions = 6, "Delete Save Data"
titleOptions = 7, "Extend Save Data"
titleOptions = 8, "Export SVI"
translationMainPage = 0, "Translation: "
userOptions = 0, "Dump All For "
userOptions = 1, "Create Save Data"
userOptions = 2, "Create All Save Data"
userOptions = 3, "Delete All User Saves"

View File

@ -1,171 +0,0 @@
author = 0, "NULL"
confirmBlacklist = 0, "Are you sure you want to add #%s# to your blacklist?"
confirmCopy = 0, "Are you sure you want to copy #%s# to #%s#?"
confirmCreateAllSaveData = 0, "Are you sure you would like to create all save data on this system for #%s#? This can take a while depending on how many titles are found."
confirmDelete = 0, "Are you sure you want to delete #%s#? *This is permanent*!"
confirmDeleteBackupsAll = 0, "Are you sure you would like to delete *all* of your save backups for all of your games?"
confirmDeleteBackupsTitle = 0, "Are you sure you would like to delete all save backups for #%s#?"
confirmDeleteSaveData = 0, "*WARNING*: This *will* erase the save data for #%s# *from your system*. Are you sure you want to do this?"
confirmDriveOverwrite = 0, "Downloading this backup from drive will overwrite the one on your SD card. Continue?"
confirmOverwrite = 0, "Are you sure you want to overwrite #%s#?"
confirmResetSaveData = 0, "*WARNING*: This *will* reset the save data for this game as if it was never ran before. Are you sure you want to do this?"
confirmRestore = 0, "Are you sure you want to restore #%s#?"
debugStatus = 0, "User Count: "
debugStatus = 1, "Current User: "
debugStatus = 2, "Current Title: "
debugStatus = 3, "Safe Title: "
debugStatus = 4, "Sort Type: "
dialogNo = 0, "No [B]"
dialogOK = 0, "OK [A]"
dialogYes = 0, "Yes [A]"
extrasMenu = 0, "SD to SD Browser"
extrasMenu = 1, "BIS: ProdInfoF"
extrasMenu = 2, "BIS: Safe"
extrasMenu = 3, "BIS: System"
extrasMenu = 4, "BIS: User"
extrasMenu = 5, "Remove Pending Update"
extrasMenu = 6, "Terminate Process"
extrasMenu = 7, "Mount System Save"
extrasMenu = 8, "Rescan Titles"
extrasMenu = 9, "Mount Process RomFS"
extrasMenu = 10, "Backup JKSV Folder"
extrasMenu = 11, "*[DEV]* Output en-US"
fileModeFileProperties = 0, "Path: %s\nSize: %s"
fileModeFolderProperties = 0, "Path: %s\nSub Folders: %u\nFile Count: %u\nTotal Size: %s"
fileModeMenu = 0, "Copy To "
fileModeMenu = 1, "Delete"
fileModeMenu = 2, "Rename"
fileModeMenu = 3, "Make Dir"
fileModeMenu = 4, "Properties"
fileModeMenu = 5, "Close"
fileModeMenu = 6, "Add to Path Filters"
fileModeMenuMkDir = 0, "New"
folderMenuNew = 0, "New Backup"
helpFolder = 0, "[A] Select [Y] Restore [X] Delete [ZR] Upload [B] Close"
helpSettings = 0, "[A] Toggle [X] Defaults [B] Back"
helpTitle = 0, "[A] Select [L][R] Jump [Y] Favorite [X] Title Options [B] Back"
helpUser = 0, "[A] Select [Y] Dump All Saves [X] User Options"
holdingText = 0, "(Hold) "
holdingText = 1, "(Keep Holding) "
holdingText = 2, "(Almost There!) "
infoStatus = 0, "TID: %016lX"
infoStatus = 1, "SID: %016lX"
infoStatus = 2, "Play Time: %02d:%02d"
infoStatus = 3, "Total Launches: %u"
infoStatus = 4, "Publisher: %s"
infoStatus = 5, "Save Type: %s"
infoStatus = 6, "Cache Index: %u"
infoStatus = 7, "User: %s"
infoStatus = 9, ""
loadingStartPage = 0, "Loading..."
mainMenuExtras = 0, "Extras"
mainMenuSettings = 0, "Settings"
onlineErrorConnecting = 0, "Error Connecting!"
onlineNoUpdates = 0, "No Updates Available."
popAddedToPathFilter = 0, "'#%s#' added to path filters."
popCPUBoostEnabled = 0, "CPU Boost Enabled for ZIP."
popChangeOutputError = 0, "#%s# contains illegal or non-ASCII characters."
popChangeOutputFolder = 0, "#%s# changed to #%s#"
popDriveFailed = 0, "Failed to start Google Drive."
popRemoteNotActive = 0, "Remote is not available"
popDriveStarted = 0, "Google Drive started successfully."
popWebdavStarted = 0, "Webdav started successfully."
popWebdavFailed =, 0, "Failed to start Webdav."
popErrorCommittingFile = 0, "Error committing file to save!"
popFolderIsEmpty = 0, "Folder is empty!"
popProcessShutdown = 0, "#%s# successfully shutdown."
popSVIExported = 0, "SVI Exported."
popSaveIsEmpty = 0, "Save data is empty!"
popTrashEmptied = 0, "Trash emptied"
popZipIsEmpty = 0, "ZIP file is empty!"
saveDataBackupDeleted = 0, "#%s# has been deleted."
saveDataBackupMovedToTrash = 0, "#%s# has been moved to trash."
saveDataCreatedForUser = 0, "Save data created for %s!"
saveDataCreationFailed = 0, "Save data creation failed!"
saveDataDeleteAllUser = 0, "*ARE YOU SURE YOU WANT TO DELETE ALL SAVE DATA FOR %s?*"
saveDataDeleteSuccess = 0, "Save data for #%s# deleted!"
saveDataExtendFailed = 0, "Failed to extend save data."
saveDataExtendSuccess = 0, "Save data for #%s# extended!"
saveDataNoneFound = 0, "No saves found for #%s#!"
saveDataResetSuccess = 0, "Save for #%s# reset!"
saveDataTypeText = 0, "System"
saveDataTypeText = 1, "Account"
saveDataTypeText = 2, "BCAT"
saveDataTypeText = 3, "Device"
saveDataTypeText = 4, "Temporary"
saveDataTypeText = 5, "Cache"
saveDataTypeText = 6, "System BCAT"
saveTypeMainMenu = 0, "Device"
saveTypeMainMenu = 1, "BCAT"
saveTypeMainMenu = 2, "Cache"
saveTypeMainMenu = 3, "System"
saveTypeMainMenu = 4, "System BCAT"
saveTypeMainMenu = 5, "SysTemp Storagetem"
settingsMenu = 0, "Empty Trash Bin"
settingsMenu = 1, "Check for Updates"
settingsMenu = 2, "Set JKSV Save Output Folder"
settingsMenu = 3, "Edit Blacklisted Titles"
settingsMenu = 4, "Delete All Save Backups"
settingsMenu = 5, "Include Device Saves With Users: "
settingsMenu = 6, "Auto Backup On Restore: "
settingsMenu = 7, "Auto-Name Backups: "
settingsMenu = 8, "Overclock/CPU Boost: "
settingsMenu = 9, "Hold To Delete: "
settingsMenu = 10, "Hold To Restore: "
settingsMenu = 11, "Hold To Overwrite: "
settingsMenu = 12, "Force Mount: "
settingsMenu = 13, "Account System Saves: "
settingsMenu = 14, "Enable Writing to System Saves: "
settingsMenu = 15, "Use FS Commands Directly: "
settingsMenu = 16, "Export Saves to ZIP: "
settingsMenu = 17, "Force English To Be Used: "
settingsMenu = 18, "Enable Trash Bin: "
settingsMenu = 19, "Title Sorting Type: "
settingsMenu = 20, "Animation Scale: "
settingsOff = 0, "Off"
settingsOn = 0, ">On>"
sortType = 0, "Alphabetical"
sortType = 1, "Time Played"
sortType = 2, "Last Played"
swkbdEnterName = 0, "Enter a new name"
swkbdExpandSize = 0, "Enter New Size in MB"
swkbdMkDir = 0, "Enter a folder name"
swkbdNewSafeTitle = 0, "Input New Output Folder"
swkbdProcessID = 0, "Enter Process ID"
swkbdRename = 0, "Enter a new name for item"
swkbdSaveIndex = 0, "Enter Cache Index"
swkbdSetWorkDir = 0, "Enter a new Output Path"
swkbdSysSavID = 0, "Enter System Save ID"
threadStatusAddingFileToZip = 0, "Adding '#%s#' to ZIP..."
threadStatusCalculatingSaveSize = 0, "Calculating save data size..."
threadStatusCheckingForUpdate = 0, "Checking for updates..."
threadStatusCompressingSaveForUpload = 0, "Compressing #%s# for upload..."
threadStatusCopyingFile = 0, "Copying '#%s#'..."
threadStatusCreatingSaveData = 0, "Creating Save Data for #%s#..."
threadStatusDecompressingFile = 0, "Decompressing '#%s#'..."
threadStatusDeletingFile = 0, "Deleting..."
threadStatusDeletingSaveData = 0, "Deleting Save Data for #%s#..."
threadStatusDeletingUpdate = 0, "Deleting pending update..."
threadStatusDownloadingFile = 0, "Downloading #%s#..."
threadStatusDownloadingUpdate = 0, "Downloading update..."
threadStatusExtendingSaveData = 0, "Extending Save Data for #%s#..."
threadStatusGetDirProps = 0, "Getting Folder Properties..."
threadStatusOpeningFolder = 0, "Opening '#%s#'..."
threadStatusPackingJKSV = 0, "Writing JKSV folder contents to ZIP..."
threadStatusResettingSaveData = 0, "Resetting save data..."
threadStatusSavingTranslations = 0, "Saving the file master..."
threadStatusUploadingFile = 0, "Uploading #%s#..."
titleOptions = 0, "Information"
titleOptions = 1, "Blacklist"
titleOptions = 2, "Change Output Folder"
titleOptions = 3, "Open in File Mode"
titleOptions = 4, "Delete All Save Backups"
titleOptions = 5, "Reset Save Data"
titleOptions = 6, "Delete Save Data"
titleOptions = 7, "Extend Save Data"
titleOptions = 8, "Export SVI"
translationMainPage = 0, "Translation: "
userOptions = 0, "Dump All For "
userOptions = 1, "Create Save Data"
userOptions = 2, "Create All Save Data"
userOptions = 3, "Delete All User Saves"

View File

@ -1,171 +0,0 @@
author = 0, "NULL"
confirmBlacklist = 0, "Are you sure you want to add #%s# to your blacklist?"
confirmCopy = 0, "Are you sure you want to copy #%s# to #%s#?"
confirmCreateAllSaveData = 0, "Are you sure you would like to create all save data on this system for #%s#? This can take a while depending on how many titles are found."
confirmDelete = 0, "Are you sure you want to delete #%s#? *This is permanent*!"
confirmDeleteBackupsAll = 0, "Are you sure you would like to delete *all* of your save backups for all of your games?"
confirmDeleteBackupsTitle = 0, "Are you sure you would like to delete all save backups for #%s#?"
confirmDeleteSaveData = 0, "*WARNING*: This *will* erase the save data for #%s# *from your system*. Are you sure you want to do this?"
confirmDriveOverwrite = 0, "Downloading this backup from drive will overwrite the one on your SD card. Continue?"
confirmOverwrite = 0, "Are you sure you want to overwrite #%s#?"
confirmResetSaveData = 0, "*WARNING*: This *will* reset the save data for this game as if it was never ran before. Are you sure you want to do this?"
confirmRestore = 0, "Are you sure you want to restore #%s#?"
debugStatus = 0, "User Count: "
debugStatus = 1, "Current User: "
debugStatus = 2, "Current Title: "
debugStatus = 3, "Safe Title: "
debugStatus = 4, "Sort Type: "
dialogNo = 0, "No [B]"
dialogOK = 0, "OK [A]"
dialogYes = 0, "Yes [A]"
extrasMenu = 0, "SD to SD Browser"
extrasMenu = 1, "BIS: ProdInfoF"
extrasMenu = 2, "BIS: Safe"
extrasMenu = 3, "BIS: System"
extrasMenu = 4, "BIS: User"
extrasMenu = 5, "Remove Pending Update"
extrasMenu = 6, "Terminate Process"
extrasMenu = 7, "Mount System Save"
extrasMenu = 8, "Rescan Titles"
extrasMenu = 9, "Mount Process RomFS"
extrasMenu = 10, "Backup JKSV Folder"
extrasMenu = 11, "*[DEV]* Output en-US"
fileModeFileProperties = 0, "Path: %s\nSize: %s"
fileModeFolderProperties = 0, "Path: %s\nSub Folders: %u\nFile Count: %u\nTotal Size: %s"
fileModeMenu = 0, "Copy To "
fileModeMenu = 1, "Delete"
fileModeMenu = 2, "Rename"
fileModeMenu = 3, "Make Dir"
fileModeMenu = 4, "Properties"
fileModeMenu = 5, "Close"
fileModeMenu = 6, "Add to Path Filters"
fileModeMenuMkDir = 0, "New"
folderMenuNew = 0, "New Backup"
helpFolder = 0, "[A] Select [Y] Restore [X] Delete [ZR] Upload [B] Close"
helpSettings = 0, "[A] Toggle [X] Defaults [B] Back"
helpTitle = 0, "[A] Select [L][R] Jump [Y] Favorite [X] Title Options [B] Back"
helpUser = 0, "[A] Select [Y] Dump All Saves [X] User Options"
holdingText = 0, "(Hold) "
holdingText = 1, "(Keep Holding) "
holdingText = 2, "(Almost There!) "
infoStatus = 0, "TID: %016lX"
infoStatus = 1, "SID: %016lX"
infoStatus = 2, "Play Time: %02d:%02d"
infoStatus = 3, "Total Launches: %u"
infoStatus = 4, "Publisher: %s"
infoStatus = 5, "Save Type: %s"
infoStatus = 6, "Cache Index: %u"
infoStatus = 7, "User: %s"
infoStatus = 9, ""
loadingStartPage = 0, "Loading..."
mainMenuExtras = 0, "Extras"
mainMenuSettings = 0, "Settings"
onlineErrorConnecting = 0, "Error Connecting!"
onlineNoUpdates = 0, "No Updates Available."
popAddedToPathFilter = 0, "'#%s#' added to path filters."
popCPUBoostEnabled = 0, "CPU Boost Enabled for ZIP."
popChangeOutputError = 0, "#%s# contains illegal or non-ASCII characters."
popChangeOutputFolder = 0, "#%s# changed to #%s#"
popDriveFailed = 0, "Failed to start Google Drive."
popRemoteNotActive = 0, "Remote is not available"
popDriveStarted = 0, "Google Drive started successfully."
popWebdavStarted = 0, "Webdav started successfully."
popWebdavFailed =, 0, "Failed to start Webdav."
popErrorCommittingFile = 0, "Error committing file to save!"
popFolderIsEmpty = 0, "Folder is empty!"
popProcessShutdown = 0, "#%s# successfully shutdown."
popSVIExported = 0, "SVI Exported."
popSaveIsEmpty = 0, "Save data is empty!"
popTrashEmptied = 0, "Trash emptied"
popZipIsEmpty = 0, "ZIP file is empty!"
saveDataBackupDeleted = 0, "#%s# has been deleted."
saveDataBackupMovedToTrash = 0, "#%s# has been moved to trash."
saveDataCreatedForUser = 0, "Save data created for %s!"
saveDataCreationFailed = 0, "Save data creation failed!"
saveDataDeleteAllUser = 0, "*ARE YOU SURE YOU WANT TO DELETE ALL SAVE DATA FOR %s?*"
saveDataDeleteSuccess = 0, "Save data for #%s# deleted!"
saveDataExtendFailed = 0, "Failed to extend save data."
saveDataExtendSuccess = 0, "Save data for #%s# extended!"
saveDataNoneFound = 0, "No saves found for #%s#!"
saveDataResetSuccess = 0, "Save for #%s# reset!"
saveDataTypeText = 0, "System"
saveDataTypeText = 1, "Account"
saveDataTypeText = 2, "BCAT"
saveDataTypeText = 3, "Device"
saveDataTypeText = 4, "Temporary"
saveDataTypeText = 5, "Cache"
saveDataTypeText = 6, "System BCAT"
saveTypeMainMenu = 0, "Device"
saveTypeMainMenu = 1, "BCAT"
saveTypeMainMenu = 2, "Cache"
saveTypeMainMenu = 3, "System"
saveTypeMainMenu = 4, "System BCAT"
saveTypeMainMenu = 5, "SysTemp Storagetem"
settingsMenu = 0, "Empty Trash Bin"
settingsMenu = 1, "Check for Updates"
settingsMenu = 2, "Set JKSV Save Output Folder"
settingsMenu = 3, "Edit Blacklisted Titles"
settingsMenu = 4, "Delete All Save Backups"
settingsMenu = 5, "Include Device Saves With Users: "
settingsMenu = 6, "Auto Backup On Restore: "
settingsMenu = 7, "Auto-Name Backups: "
settingsMenu = 8, "Overclock/CPU Boost: "
settingsMenu = 9, "Hold To Delete: "
settingsMenu = 10, "Hold To Restore: "
settingsMenu = 11, "Hold To Overwrite: "
settingsMenu = 12, "Force Mount: "
settingsMenu = 13, "Account System Saves: "
settingsMenu = 14, "Enable Writing to System Saves: "
settingsMenu = 15, "Use FS Commands Directly: "
settingsMenu = 16, "Export Saves to ZIP: "
settingsMenu = 17, "Force English To Be Used: "
settingsMenu = 18, "Enable Trash Bin: "
settingsMenu = 19, "Title Sorting Type: "
settingsMenu = 20, "Animation Scale: "
settingsOff = 0, "Off"
settingsOn = 0, ">On>"
sortType = 0, "Alphabetical"
sortType = 1, "Time Played"
sortType = 2, "Last Played"
swkbdEnterName = 0, "Enter a new name"
swkbdExpandSize = 0, "Enter New Size in MB"
swkbdMkDir = 0, "Enter a folder name"
swkbdNewSafeTitle = 0, "Input New Output Folder"
swkbdProcessID = 0, "Enter Process ID"
swkbdRename = 0, "Enter a new name for item"
swkbdSaveIndex = 0, "Enter Cache Index"
swkbdSetWorkDir = 0, "Enter a new Output Path"
swkbdSysSavID = 0, "Enter System Save ID"
threadStatusAddingFileToZip = 0, "Adding '#%s#' to ZIP..."
threadStatusCalculatingSaveSize = 0, "Calculating save data size..."
threadStatusCheckingForUpdate = 0, "Checking for updates..."
threadStatusCompressingSaveForUpload = 0, "Compressing #%s# for upload..."
threadStatusCopyingFile = 0, "Copying '#%s#'..."
threadStatusCreatingSaveData = 0, "Creating Save Data for #%s#..."
threadStatusDecompressingFile = 0, "Decompressing '#%s#'..."
threadStatusDeletingFile = 0, "Deleting..."
threadStatusDeletingSaveData = 0, "Deleting Save Data for #%s#..."
threadStatusDeletingUpdate = 0, "Deleting pending update..."
threadStatusDownloadingFile = 0, "Downloading #%s#..."
threadStatusDownloadingUpdate = 0, "Downloading update..."
threadStatusExtendingSaveData = 0, "Extending Save Data for #%s#..."
threadStatusGetDirProps = 0, "Getting Folder Properties..."
threadStatusOpeningFolder = 0, "Opening '#%s#'..."
threadStatusPackingJKSV = 0, "Writing JKSV folder contents to ZIP..."
threadStatusResettingSaveData = 0, "Resetting save data..."
threadStatusSavingTranslations = 0, "Saving the file master..."
threadStatusUploadingFile = 0, "Uploading #%s#..."
titleOptions = 0, "Information"
titleOptions = 1, "Blacklist"
titleOptions = 2, "Change Output Folder"
titleOptions = 3, "Open in File Mode"
titleOptions = 4, "Delete All Save Backups"
titleOptions = 5, "Reset Save Data"
titleOptions = 6, "Delete Save Data"
titleOptions = 7, "Extend Save Data"
titleOptions = 8, "Export SVI"
translationMainPage = 0, "Translation: "
userOptions = 0, "Dump All For "
userOptions = 1, "Create Save Data"
userOptions = 2, "Create All Save Data"
userOptions = 3, "Delete All User Saves"

View File

@ -1,218 +0,0 @@
appletModeWarning = 0, "*ADVERTENCIA*: JKSV se está ejecutando en modo 'applet'. Algunas características no funcionarán."
author = 0, "Impeeza"
confirmBlacklist = 0, "¿Estás seguro que deseas adicionar #%s# a la lista negra?"
confirmCopy = 0, "¿Seguro que desea copiar #%s# a #%s#?"
confirmCreateAllSaveData = 0, "¿Seguro que desea crear todos los Datos de Partidas Guardadas en este sistema para #%s#? ¡Puede tomar un tiempo dependiendo de la cantidad de títulos sean encontrados!"
confirmDelete = 0, "¿Seguro que desea borrar #%s#? *¡Es permanente!*"
confirmDeleteBackupsAll = 0, "¿Seguro que desea borrar *TODOS* los respaldos de partidas guardadas para todos sus juegos?"
confirmDeleteBackupsTitle = 0, "¿Seguro que desea borrar *TODOS* los respaldos de partidas guardadas para #%s#?"
confirmDeleteSaveData = 0, "*ADVERTENCIA*: Ésto eliminará la partida guardada para #%s# *DE SU SISTEMA*. ¿Está seguro que así lo desea?"
#CHANGED=============================================>
confirmDriveOverwrite = 0, "Al descargar este respaldo desde el servidor remoto se reemplazará el que actualmente está en la tarjeta SD, ¿Continuar?"
#<====================================================
confirmOverwrite = 0, "¿Sobrescribir #%s#?"
confirmResetSaveData = 0, "*ADVERTENCIA*: Ésto restablecerá la partida guardada para este juego, como si nunca se hubiera ejecutado. ¿Está seguro que es lo que desea?"
confirmRestore = 0, "¿Seguro que desea restaurar #%s#?"
#CHANGED=============================================>
debugStatus = 0, "Número de Usuarios: "
debugStatus = 1, "Usuario Actual: "
debugStatus = 2, "Título Actual: "
debugStatus = 3, "Título Seguro: "
debugStatus = 4, "Tipo órden: "
#<====================================================
dialogNo = 0, "No [B]"
dialogOK = 0, "OK [A]"
dialogYes = 0, "Si [A]"
extrasMenu = 0, "Navegador de SD a SD"
extrasMenu = 1, "Navegar 'ProdInfo'"
extrasMenu = 2, "Navegar 'Safe'"
extrasMenu = 3, "Navegar 'System'"
extrasMenu = 4, "Navegar 'User'"
extrasMenu = 5, "Eliminar actualizaciones pendientes"
extrasMenu = 6, "Detener proceso"
extrasMenu = 7, "Montar 'System Save'"
extrasMenu = 8, "Recargar Lista de Títulos"
extrasMenu = 9, "Navegar 'Process RomFS'"
extrasMenu = 10, "Realizar respaldo de la carpeta de JKSV"
extrasMenu = 11, "*[DEV]* Extraer Archivos de Lenguaje actuales"
fileModeFileProperties = 0, "Ruta: %s\nTamaño: %s"
fileModeFolderProperties = 0, "Ruta: %s\nSubCarpetas: %u\nCantidad Archivos: %u\nTamaño Total: %s"
fileModeMenu = 0, "Copiar a "
fileModeMenu = 1, "Borrar"
fileModeMenu = 2, "Renombrar"
fileModeMenu = 3, "Crear Carpeta"
fileModeMenu = 4, "Propiedades"
fileModeMenu = 5, "Cerrar"
fileModeMenu = 6, "Adicionar a filtros de Carpetas"
fileModeMenuMkDir = 0, "Nuevo"
folderMenuNew = 0, "Nuevo Respaldo"
#CHANGED=============================================>
helpFolder = 0, "[A] Selecionar [Y] Restaurar [X] Borrar [ZR] Subir [B] Cerrar"
#<====================================================
helpSettings = 0, "[A] Cambiar [X] Predeterminados [B] Atrás"
helpTitle = 0, "[A] Seleccionar [L][R] Cambiar Página [Y] Favoritos [X] Opciones de Títulos [B] Atrás"
helpUser = 0, "[A] Seleccionar [Y] Extraer Todos [X] Opciones de Usuario"
holdingText = 0, "(Sostenga) "
holdingText = 1, "(Siga Sosteniendo) "
holdingText = 2, "(¡Ya Casi!) "
#CHANGED=============================================>
infoStatus = 0, "TID: %016lX"
infoStatus = 1, "SID: %016lX"
infoStatus = 2, "Tiempo Jugado: %02d:%02d"
infoStatus = 3, "Veces Ejecutado: %u"
infoStatus = 4, "Editor: %s"
infoStatus = 5, "Tipo Partida Guardada: %s"
infoStatus = 6, "Índice de Caché: %u"
infoStatus = 7, "Usuario: %s"
infoStatus = 9, ""
#<=====================================================
loadingStartPage = 0, "Cargando..."
mainMenuExtras = 0, "Extras"
mainMenuSettings = 0, "Configs."
onlineErrorConnecting = 0, "¡Error Conectando!"
onlineNoUpdates = 0, "No hay actualizaciones disponibles."
popAddedToPathFilter = 0, "Se adicionó '#%s#' a filtros de carpeta."
popCPUBoostEnabled = 0, "Aumento de CPU para ZIP."
popChangeOutputError = 0, "#%s# contiene carácteres ilegales o no-ASCII."
popChangeOutputFolder = 0, "Se cambia #%s# por #%s#"
#CHANGED=============================================>
popDriveFailed = 0, "Falla al iniciar Google Drive."
popRemoteNotActive = 0, "Servidor Remoto no está disponible."
popDriveStarted = 0, "Se ha iniciado Google Drive correctamente."
popWebdavStarted = 0, "Se ha iniciado Webdav Correctamente."
popWebdavFailed = 0, "Falla al iniciar Webdav."
#<====================================================
popErrorCommittingFile = 0, "¡Error guardando archivo!"
popFolderIsEmpty = 0, "¡La carpeta está vacía!"
popProcessShutdown = 0, "#%s# Apagado satisfactorio."
#CHANGED=============================================>
popSVIExported = 0, "SVI Exportado."
#<====================================================
popSaveIsEmpty = 0, "¡Partida Guardada está vacía!"
popTrashEmptied = 0, "Papelera Vaciada"
popZipIsEmpty = 0, "¡Archivo ZIP está vacío!"
saveDataBackupDeleted = 0, "#%s# ha sido borrado."
saveDataBackupMovedToTrash = 0, "#%s# ha sido movido a papelera."
saveDataCreatedForUser = 0, "Se creó Partida Guardada para %s!"
saveDataCreationFailed = 0, "¡Error en creación de Partida Guardada!"
saveDataDeleteAllUser = 0, "*¿SEGURO QUE DESEA BORRAR TODAS LAS PARTIDAS GUARDADAS DE %s?*"
saveDataDeleteSuccess = 0, "¡Se borró la Partida Guardada de #%s#!"
saveDataExtendFailed = 0, "Error al expandir la partida guardada."
saveDataExtendSuccess = 0, "¡Partida Guardada para #%s# expandida con éxito!"
saveDataIndexText = 0, "Guardar Índice: "
saveDataNoneFound = 0, "¡No se encontraron partidas guardadas para #%s#!"
saveDataResetSuccess = 0, "¡Partida Guardada para #%s# restablecida!"
saveDataTypeText = 0, "Datos de Sistema"
saveDataTypeText = 1, "Partida Guardada"
saveDataTypeText = 2, "BCAT"
saveDataTypeText = 3, "Datos de Dispositivo"
saveDataTypeText = 4, "Almacenamiento Temporal"
saveDataTypeText = 5, "Almacenamiento de Caché"
saveDataTypeText = 6, "System BCAT"
saveTypeMainMenu = 0, "Device"
saveTypeMainMenu = 1, "BCAT"
saveTypeMainMenu = 2, "Caché"
saveTypeMainMenu = 3, "Sistema"
saveTypeMainMenu = 4, "BCAT de Sistema"
saveTypeMainMenu = 5, "SysTemp Storagetem"
settingsMenu = 0, "Vaciar Papelera"
settingsMenu = 1, "Buscar Actualizaciones"
settingsMenu = 2, "Configurar carpeta de salida para JKSV"
settingsMenu = 3, "Editar lista negra de Títulos"
settingsMenu = 4, "Eliminar todos los respaldos"
settingsMenu = 5, "Incluír Datos de Dispositivo con los Usuarios: "
settingsMenu = 6, "Crear respaldo automático al restaurar: "
settingsMenu = 7, "Nombrar Automáticamente los respaldos: "
settingsMenu = 8, "Overclock/Aumento de CPU: "
settingsMenu = 9, "Sostener para Borrar: "
settingsMenu = 10, "Sostener para Restaurar: "
settingsMenu = 11, "Sostener para Sobreescribir: "
settingsMenu = 12, "Montar forzado: "
settingsMenu = 13, "Datos de la cuenta de Sistema: "
settingsMenu = 14, "Habilitar escritura para datos de Sistema: "
settingsMenu = 15, "Usar comandos FS directamente: "
settingsMenu = 16, "Exportar partidas guardadas a archivos ZIP: "
settingsMenu = 17, "Forzar el uso de idioma Inglés: "
settingsMenu = 18, "Habilitar papelera: "
settingsMenu = 19, "Ordenar Títulos: "
settingsMenu = 20, "Escala de Animación: "
settingsMenu = 21, "Subir automáticamente a GDrive/Webdav: "
settingsOff = 0, "Apagado"
settingsOn = 0, ">Encendido>"
sortType = 0, "Alfabéticamente"
sortType = 1, "Por Duración Juegos"
sortType = 2, "Recientemente Jugado"
swkbdEnterName = 0, "Ingrese un nuevo nombre"
swkbdExpandSize = 0, "Ingrese nuevo tamaño en MB"
swkbdMkDir = 0, "Ingrese nombre de carpeta"
swkbdNewSafeTitle = 0, "Ingrese Nueva Carpeta de Salida"
swkbdProcessID = 0, "Ingrese ID de proceso"
swkbdRename = 0, "Ingrese un nuevo nombre para el elemento"
swkbdSaveIndex = 0, "Ingrese Índice de Caché"
swkbdSetWorkDir = 0, "Ingrese Nueva Carpeta de Salida"
swkbdSysSavID = 0, "Ingrese ID de Datos de Sistema"
threadStatusAddingFileToZip = 0, "Agregando '#%s#' a archivo ZIP..."
#CHANGED=============================================>
threadStatusCalculatingSaveSize = 0, "Calculando tamaño de partida guardada..."
#<====================================================
threadStatusCheckingForUpdate = 0, "Verificando actualizaciones..."
#CHANGED=============================================>
threadStatusCompressingSaveForUpload = 0, "Comprimiendo #%s# para subirlo..."
#<====================================================
threadStatusCopyingFile = 0, "Copiando '#%s#'..."
threadStatusCreatingSaveData = 0, "Creando Partida Guardada para #%s#..."
threadStatusDecompressingFile = 0, "Descomprimiendo '#%s#'..."
threadStatusDeletingFile = 0, "Borrando..."
threadStatusDeletingSaveData = 0, "Borrando Partida Guardada para #%s#..."
threadStatusDeletingUpdate = 0, "Borrando Actualización Pendiente..."
#CHANGED=============================================>
threadStatusDownloadingFile = 0, "Descargando #%s#..."
#<====================================================
threadStatusDownloadingUpdate = 0, "Borrando Actualización..."
threadStatusExtendingSaveData = 0, "Expandiendo Datos Guardados para #%s#..."
threadStatusGetDirProps = 0, "Obteniendo propiedades de Carpeta..."
threadStatusOpeningFolder = 0, "Abriendo '#%s#'..."
threadStatusPackingJKSV = 0, "Guardando contenidos de carpeta de JKSV en archivo ZIP..."
threadStatusResettingSaveData = 0, "Restableciendo datos de partida..."
threadStatusSavingTranslations = 0, "Guardando archivo maestro..."
#CHANGED=============================================>
threadStatusUploadingFile = 0, "Subiendo #%s#..."
#<====================================================
titleOptions = 0, "Información"
titleOptions = 1, "Lista Negra"
titleOptions = 2, "Cambiar Carpeta de Salida"
titleOptions = 3, "Abrir en Modo Archivo"
titleOptions = 4, "Borrar todos los respaldos"
titleOptions = 5, "Restablecer Datos de Partida"
titleOptions = 6, "Borrar Datos de Partida"
titleOptions = 7, "Expandir Datos de Partida"
#CHANGED=============================================>
titleOptions = 8, "Exportar SVI"
#<====================================================
translationMainPage = 0, "Traducción: "
userOptions = 0, "Extrar Todo para "
userOptions = 1, "Crear Datos de Partida"
userOptions = 2, "Crear Todos los Datos de Partida"
userOptions = 3, "Borrar Datos de Partida para todos los Usuarios"

View File

@ -1,171 +0,0 @@
author = 0, "NULL"
confirmBlacklist = 0, "Are you sure you want to add #%s# to your blacklist?"
confirmCopy = 0, "Are you sure you want to copy #%s# to #%s#?"
confirmCreateAllSaveData = 0, "Are you sure you would like to create all save data on this system for #%s#? This can take a while depending on how many titles are found."
confirmDelete = 0, "Are you sure you want to delete #%s#? *This is permanent*!"
confirmDeleteBackupsAll = 0, "Are you sure you would like to delete *all* of your save backups for all of your games?"
confirmDeleteBackupsTitle = 0, "Are you sure you would like to delete all save backups for #%s#?"
confirmDeleteSaveData = 0, "*WARNING*: This *will* erase the save data for #%s# *from your system*. Are you sure you want to do this?"
confirmDriveOverwrite = 0, "Downloading this backup from drive will overwrite the one on your SD card. Continue?"
confirmOverwrite = 0, "Are you sure you want to overwrite #%s#?"
confirmResetSaveData = 0, "*WARNING*: This *will* reset the save data for this game as if it was never ran before. Are you sure you want to do this?"
confirmRestore = 0, "Are you sure you want to restore #%s#?"
debugStatus = 0, "User Count: "
debugStatus = 1, "Current User: "
debugStatus = 2, "Current Title: "
debugStatus = 3, "Safe Title: "
debugStatus = 4, "Sort Type: "
dialogNo = 0, "No [B]"
dialogOK = 0, "OK [A]"
dialogYes = 0, "Yes [A]"
extrasMenu = 0, "SD to SD Browser"
extrasMenu = 1, "BIS: ProdInfoF"
extrasMenu = 2, "BIS: Safe"
extrasMenu = 3, "BIS: System"
extrasMenu = 4, "BIS: User"
extrasMenu = 5, "Remove Pending Update"
extrasMenu = 6, "Terminate Process"
extrasMenu = 7, "Mount System Save"
extrasMenu = 8, "Rescan Titles"
extrasMenu = 9, "Mount Process RomFS"
extrasMenu = 10, "Backup JKSV Folder"
extrasMenu = 11, "*[DEV]* Output en-US"
fileModeFileProperties = 0, "Path: %s\nSize: %s"
fileModeFolderProperties = 0, "Path: %s\nSub Folders: %u\nFile Count: %u\nTotal Size: %s"
fileModeMenu = 0, "Copy To "
fileModeMenu = 1, "Delete"
fileModeMenu = 2, "Rename"
fileModeMenu = 3, "Make Dir"
fileModeMenu = 4, "Properties"
fileModeMenu = 5, "Close"
fileModeMenu = 6, "Add to Path Filters"
fileModeMenuMkDir = 0, "New"
folderMenuNew = 0, "New Backup"
helpFolder = 0, "[A] Select [Y] Restore [X] Delete [ZR] Upload [B] Close"
helpSettings = 0, "[A] Toggle [X] Defaults [B] Back"
helpTitle = 0, "[A] Select [L][R] Jump [Y] Favorite [X] Title Options [B] Back"
helpUser = 0, "[A] Select [Y] Dump All Saves [X] User Options"
holdingText = 0, "(Hold) "
holdingText = 1, "(Keep Holding) "
holdingText = 2, "(Almost There!) "
infoStatus = 0, "TID: %016lX"
infoStatus = 1, "SID: %016lX"
infoStatus = 2, "Play Time: %02d:%02d"
infoStatus = 3, "Total Launches: %u"
infoStatus = 4, "Publisher: %s"
infoStatus = 5, "Save Type: %s"
infoStatus = 6, "Cache Index: %u"
infoStatus = 7, "User: %s"
infoStatus = 9, ""
loadingStartPage = 0, "Loading..."
mainMenuExtras = 0, "Extras"
mainMenuSettings = 0, "Settings"
onlineErrorConnecting = 0, "Error Connecting!"
onlineNoUpdates = 0, "No Updates Available."
popAddedToPathFilter = 0, "'#%s#' added to path filters."
popCPUBoostEnabled = 0, "CPU Boost Enabled for ZIP."
popChangeOutputError = 0, "#%s# contains illegal or non-ASCII characters."
popChangeOutputFolder = 0, "#%s# changed to #%s#"
popDriveFailed = 0, "Failed to start Google Drive."
popRemoteNotActive = 0, "Remote is not available"
popDriveStarted = 0, "Google Drive started successfully."
popWebdavStarted = 0, "Webdav started successfully."
popWebdavFailed =, 0, "Failed to start Webdav."
popErrorCommittingFile = 0, "Error committing file to save!"
popFolderIsEmpty = 0, "Folder is empty!"
popProcessShutdown = 0, "#%s# successfully shutdown."
popSVIExported = 0, "SVI Exported."
popSaveIsEmpty = 0, "Save data is empty!"
popTrashEmptied = 0, "Trash emptied"
popZipIsEmpty = 0, "ZIP file is empty!"
saveDataBackupDeleted = 0, "#%s# has been deleted."
saveDataBackupMovedToTrash = 0, "#%s# has been moved to trash."
saveDataCreatedForUser = 0, "Save data created for %s!"
saveDataCreationFailed = 0, "Save data creation failed!"
saveDataDeleteAllUser = 0, "*ARE YOU SURE YOU WANT TO DELETE ALL SAVE DATA FOR %s?*"
saveDataDeleteSuccess = 0, "Save data for #%s# deleted!"
saveDataExtendFailed = 0, "Failed to extend save data."
saveDataExtendSuccess = 0, "Save data for #%s# extended!"
saveDataNoneFound = 0, "No saves found for #%s#!"
saveDataResetSuccess = 0, "Save for #%s# reset!"
saveDataTypeText = 0, "System"
saveDataTypeText = 1, "Account"
saveDataTypeText = 2, "BCAT"
saveDataTypeText = 3, "Device"
saveDataTypeText = 4, "Temporary"
saveDataTypeText = 5, "Cache"
saveDataTypeText = 6, "System BCAT"
saveTypeMainMenu = 0, "Device"
saveTypeMainMenu = 1, "BCAT"
saveTypeMainMenu = 2, "Cache"
saveTypeMainMenu = 3, "System"
saveTypeMainMenu = 4, "System BCAT"
saveTypeMainMenu = 5, "SysTemp Storagetem"
settingsMenu = 0, "Empty Trash Bin"
settingsMenu = 1, "Check for Updates"
settingsMenu = 2, "Set JKSV Save Output Folder"
settingsMenu = 3, "Edit Blacklisted Titles"
settingsMenu = 4, "Delete All Save Backups"
settingsMenu = 5, "Include Device Saves With Users: "
settingsMenu = 6, "Auto Backup On Restore: "
settingsMenu = 7, "Auto-Name Backups: "
settingsMenu = 8, "Overclock/CPU Boost: "
settingsMenu = 9, "Hold To Delete: "
settingsMenu = 10, "Hold To Restore: "
settingsMenu = 11, "Hold To Overwrite: "
settingsMenu = 12, "Force Mount: "
settingsMenu = 13, "Account System Saves: "
settingsMenu = 14, "Enable Writing to System Saves: "
settingsMenu = 15, "Use FS Commands Directly: "
settingsMenu = 16, "Export Saves to ZIP: "
settingsMenu = 17, "Force English To Be Used: "
settingsMenu = 18, "Enable Trash Bin: "
settingsMenu = 19, "Title Sorting Type: "
settingsMenu = 20, "Animation Scale: "
settingsOff = 0, "Off"
settingsOn = 0, ">On>"
sortType = 0, "Alphabetical"
sortType = 1, "Time Played"
sortType = 2, "Last Played"
swkbdEnterName = 0, "Enter a new name"
swkbdExpandSize = 0, "Enter New Size in MB"
swkbdMkDir = 0, "Enter a folder name"
swkbdNewSafeTitle = 0, "Input New Output Folder"
swkbdProcessID = 0, "Enter Process ID"
swkbdRename = 0, "Enter a new name for item"
swkbdSaveIndex = 0, "Enter Cache Index"
swkbdSetWorkDir = 0, "Enter a new Output Path"
swkbdSysSavID = 0, "Enter System Save ID"
threadStatusAddingFileToZip = 0, "Adding '#%s#' to ZIP..."
threadStatusCalculatingSaveSize = 0, "Calculating save data size..."
threadStatusCheckingForUpdate = 0, "Checking for updates..."
threadStatusCompressingSaveForUpload = 0, "Compressing #%s# for upload..."
threadStatusCopyingFile = 0, "Copying '#%s#'..."
threadStatusCreatingSaveData = 0, "Creating Save Data for #%s#..."
threadStatusDecompressingFile = 0, "Decompressing '#%s#'..."
threadStatusDeletingFile = 0, "Deleting..."
threadStatusDeletingSaveData = 0, "Deleting Save Data for #%s#..."
threadStatusDeletingUpdate = 0, "Deleting pending update..."
threadStatusDownloadingFile = 0, "Downloading #%s#..."
threadStatusDownloadingUpdate = 0, "Downloading update..."
threadStatusExtendingSaveData = 0, "Extending Save Data for #%s#..."
threadStatusGetDirProps = 0, "Getting Folder Properties..."
threadStatusOpeningFolder = 0, "Opening '#%s#'..."
threadStatusPackingJKSV = 0, "Writing JKSV folder contents to ZIP..."
threadStatusResettingSaveData = 0, "Resetting save data..."
threadStatusSavingTranslations = 0, "Saving the file master..."
threadStatusUploadingFile = 0, "Uploading #%s#..."
titleOptions = 0, "Information"
titleOptions = 1, "Blacklist"
titleOptions = 2, "Change Output Folder"
titleOptions = 3, "Open in File Mode"
titleOptions = 4, "Delete All Save Backups"
titleOptions = 5, "Reset Save Data"
titleOptions = 6, "Delete Save Data"
titleOptions = 7, "Extend Save Data"
titleOptions = 8, "Export SVI"
translationMainPage = 0, "Translation: "
userOptions = 0, "Dump All For "
userOptions = 1, "Create Save Data"
userOptions = 2, "Create All Save Data"
userOptions = 3, "Delete All User Saves"

View File

@ -1,171 +0,0 @@
author = 0, "NULL"
confirmBlacklist = 0, "Are you sure you want to add #%s# to your blacklist?"
confirmCopy = 0, "Are you sure you want to copy #%s# to #%s#?"
confirmCreateAllSaveData = 0, "Are you sure you would like to create all save data on this system for #%s#? This can take a while depending on how many titles are found."
confirmDelete = 0, "Are you sure you want to delete #%s#? *This is permanent*!"
confirmDeleteBackupsAll = 0, "Are you sure you would like to delete *all* of your save backups for all of your games?"
confirmDeleteBackupsTitle = 0, "Are you sure you would like to delete all save backups for #%s#?"
confirmDeleteSaveData = 0, "*WARNING*: This *will* erase the save data for #%s# *from your system*. Are you sure you want to do this?"
confirmDriveOverwrite = 0, "Downloading this backup from drive will overwrite the one on your SD card. Continue?"
confirmOverwrite = 0, "Are you sure you want to overwrite #%s#?"
confirmResetSaveData = 0, "*WARNING*: This *will* reset the save data for this game as if it was never ran before. Are you sure you want to do this?"
confirmRestore = 0, "Are you sure you want to restore #%s#?"
debugStatus = 0, "User Count: "
debugStatus = 1, "Current User: "
debugStatus = 2, "Current Title: "
debugStatus = 3, "Safe Title: "
debugStatus = 4, "Sort Type: "
dialogNo = 0, "No [B]"
dialogOK = 0, "OK [A]"
dialogYes = 0, "Yes [A]"
extrasMenu = 0, "SD to SD Browser"
extrasMenu = 1, "BIS: ProdInfoF"
extrasMenu = 2, "BIS: Safe"
extrasMenu = 3, "BIS: System"
extrasMenu = 4, "BIS: User"
extrasMenu = 5, "Remove Pending Update"
extrasMenu = 6, "Terminate Process"
extrasMenu = 7, "Mount System Save"
extrasMenu = 8, "Rescan Titles"
extrasMenu = 9, "Mount Process RomFS"
extrasMenu = 10, "Backup JKSV Folder"
extrasMenu = 11, "*[DEV]* Output en-US"
fileModeFileProperties = 0, "Path: %s\nSize: %s"
fileModeFolderProperties = 0, "Path: %s\nSub Folders: %u\nFile Count: %u\nTotal Size: %s"
fileModeMenu = 0, "Copy To "
fileModeMenu = 1, "Delete"
fileModeMenu = 2, "Rename"
fileModeMenu = 3, "Make Dir"
fileModeMenu = 4, "Properties"
fileModeMenu = 5, "Close"
fileModeMenu = 6, "Add to Path Filters"
fileModeMenuMkDir = 0, "New"
folderMenuNew = 0, "New Backup"
helpFolder = 0, "[A] Select [Y] Restore [X] Delete [ZR] Upload [B] Close"
helpSettings = 0, "[A] Toggle [X] Defaults [B] Back"
helpTitle = 0, "[A] Select [L][R] Jump [Y] Favorite [X] Title Options [B] Back"
helpUser = 0, "[A] Select [Y] Dump All Saves [X] User Options"
holdingText = 0, "(Hold) "
holdingText = 1, "(Keep Holding) "
holdingText = 2, "(Almost There!) "
infoStatus = 0, "TID: %016lX"
infoStatus = 1, "SID: %016lX"
infoStatus = 2, "Play Time: %02d:%02d"
infoStatus = 3, "Total Launches: %u"
infoStatus = 4, "Publisher: %s"
infoStatus = 5, "Save Type: %s"
infoStatus = 6, "Cache Index: %u"
infoStatus = 7, "User: %s"
infoStatus = 9, ""
loadingStartPage = 0, "Loading..."
mainMenuExtras = 0, "Extras"
mainMenuSettings = 0, "Settings"
onlineErrorConnecting = 0, "Error Connecting!"
onlineNoUpdates = 0, "No Updates Available."
popAddedToPathFilter = 0, "'#%s#' added to path filters."
popCPUBoostEnabled = 0, "CPU Boost Enabled for ZIP."
popChangeOutputError = 0, "#%s# contains illegal or non-ASCII characters."
popChangeOutputFolder = 0, "#%s# changed to #%s#"
popDriveFailed = 0, "Failed to start Google Drive."
popRemoteNotActive = 0, "Remote is not available"
popDriveStarted = 0, "Google Drive started successfully."
popWebdavStarted = 0, "Webdav started successfully."
popWebdavFailed =, 0, "Failed to start Webdav."
popErrorCommittingFile = 0, "Error committing file to save!"
popFolderIsEmpty = 0, "Folder is empty!"
popProcessShutdown = 0, "#%s# successfully shutdown."
popSVIExported = 0, "SVI Exported."
popSaveIsEmpty = 0, "Save data is empty!"
popTrashEmptied = 0, "Trash emptied"
popZipIsEmpty = 0, "ZIP file is empty!"
saveDataBackupDeleted = 0, "#%s# has been deleted."
saveDataBackupMovedToTrash = 0, "#%s# has been moved to trash."
saveDataCreatedForUser = 0, "Save data created for %s!"
saveDataCreationFailed = 0, "Save data creation failed!"
saveDataDeleteAllUser = 0, "*ARE YOU SURE YOU WANT TO DELETE ALL SAVE DATA FOR %s?*"
saveDataDeleteSuccess = 0, "Save data for #%s# deleted!"
saveDataExtendFailed = 0, "Failed to extend save data."
saveDataExtendSuccess = 0, "Save data for #%s# extended!"
saveDataNoneFound = 0, "No saves found for #%s#!"
saveDataResetSuccess = 0, "Save for #%s# reset!"
saveDataTypeText = 0, "System"
saveDataTypeText = 1, "Account"
saveDataTypeText = 2, "BCAT"
saveDataTypeText = 3, "Device"
saveDataTypeText = 4, "Temporary"
saveDataTypeText = 5, "Cache"
saveDataTypeText = 6, "System BCAT"
saveTypeMainMenu = 0, "Device"
saveTypeMainMenu = 1, "BCAT"
saveTypeMainMenu = 2, "Cache"
saveTypeMainMenu = 3, "System"
saveTypeMainMenu = 4, "System BCAT"
saveTypeMainMenu = 5, "SysTemp Storagetem"
settingsMenu = 0, "Empty Trash Bin"
settingsMenu = 1, "Check for Updates"
settingsMenu = 2, "Set JKSV Save Output Folder"
settingsMenu = 3, "Edit Blacklisted Titles"
settingsMenu = 4, "Delete All Save Backups"
settingsMenu = 5, "Include Device Saves With Users: "
settingsMenu = 6, "Auto Backup On Restore: "
settingsMenu = 7, "Auto-Name Backups: "
settingsMenu = 8, "Overclock/CPU Boost: "
settingsMenu = 9, "Hold To Delete: "
settingsMenu = 10, "Hold To Restore: "
settingsMenu = 11, "Hold To Overwrite: "
settingsMenu = 12, "Force Mount: "
settingsMenu = 13, "Account System Saves: "
settingsMenu = 14, "Enable Writing to System Saves: "
settingsMenu = 15, "Use FS Commands Directly: "
settingsMenu = 16, "Export Saves to ZIP: "
settingsMenu = 17, "Force English To Be Used: "
settingsMenu = 18, "Enable Trash Bin: "
settingsMenu = 19, "Title Sorting Type: "
settingsMenu = 20, "Animation Scale: "
settingsOff = 0, "Off"
settingsOn = 0, ">On>"
sortType = 0, "Alphabetical"
sortType = 1, "Time Played"
sortType = 2, "Last Played"
swkbdEnterName = 0, "Enter a new name"
swkbdExpandSize = 0, "Enter New Size in MB"
swkbdMkDir = 0, "Enter a folder name"
swkbdNewSafeTitle = 0, "Input New Output Folder"
swkbdProcessID = 0, "Enter Process ID"
swkbdRename = 0, "Enter a new name for item"
swkbdSaveIndex = 0, "Enter Cache Index"
swkbdSetWorkDir = 0, "Enter a new Output Path"
swkbdSysSavID = 0, "Enter System Save ID"
threadStatusAddingFileToZip = 0, "Adding '#%s#' to ZIP..."
threadStatusCalculatingSaveSize = 0, "Calculating save data size..."
threadStatusCheckingForUpdate = 0, "Checking for updates..."
threadStatusCompressingSaveForUpload = 0, "Compressing #%s# for upload..."
threadStatusCopyingFile = 0, "Copying '#%s#'..."
threadStatusCreatingSaveData = 0, "Creating Save Data for #%s#..."
threadStatusDecompressingFile = 0, "Decompressing '#%s#'..."
threadStatusDeletingFile = 0, "Deleting..."
threadStatusDeletingSaveData = 0, "Deleting Save Data for #%s#..."
threadStatusDeletingUpdate = 0, "Deleting pending update..."
threadStatusDownloadingFile = 0, "Downloading #%s#..."
threadStatusDownloadingUpdate = 0, "Downloading update..."
threadStatusExtendingSaveData = 0, "Extending Save Data for #%s#..."
threadStatusGetDirProps = 0, "Getting Folder Properties..."
threadStatusOpeningFolder = 0, "Opening '#%s#'..."
threadStatusPackingJKSV = 0, "Writing JKSV folder contents to ZIP..."
threadStatusResettingSaveData = 0, "Resetting save data..."
threadStatusSavingTranslations = 0, "Saving the file master..."
threadStatusUploadingFile = 0, "Uploading #%s#..."
titleOptions = 0, "Information"
titleOptions = 1, "Blacklist"
titleOptions = 2, "Change Output Folder"
titleOptions = 3, "Open in File Mode"
titleOptions = 4, "Delete All Save Backups"
titleOptions = 5, "Reset Save Data"
titleOptions = 6, "Delete Save Data"
titleOptions = 7, "Extend Save Data"
titleOptions = 8, "Export SVI"
translationMainPage = 0, "Translation: "
userOptions = 0, "Dump All For "
userOptions = 1, "Create Save Data"
userOptions = 2, "Create All Save Data"
userOptions = 3, "Delete All User Saves"

View File

@ -1,171 +0,0 @@
author = 0, "Shadow2560"
confirmBlacklist = 0, "Souhaitez-vous vraiment ajouter #%s# à votre liste noire?"
confirmCopy = 0, "Souhaitez-vous vraiment copier #%s# vers #%s#?"
confirmCreateAllSaveData = 0, "Souhaitez-vous vraiment créer toutes les données de sauvegarde de ce système pour #%s# ? Cela peut prendre un certain temps en fonction du nombre de titres trouvés."
confirmDelete = 0, "Souhaitez-vous vraiment supprimer #%s# ? *Ceci sera permanent* !"
confirmDeleteBackupsAll = 0, "Êtes-vous sûr de vouloir supprimer *toutes* vos sauvegardes pour tous vos jeux ?"
confirmDeleteBackupsTitle = 0, "Souhaitez-vous vraiment supprimer toutes les sauvegardes sauvegardées pour #%s#?"
confirmDeleteSaveData = 0, "*ATTENTION* : Ceci *effacera* les données sauvegardées pour #%s# *de votre système*. Êtes-vous sûr de vouloir faire cela ?"
confirmDriveOverwrite = 0, "Le téléchargement de cette sauvegarde depuis le disque dur écrasera celle qui se trouve sur votre carte SD. Continuer?"
confirmOverwrite = 0, "Souhaitez-vous vraiment écraser #%s#?"
confirmResetSaveData = 0, "*ATTENTION* : Cela *réinitialisera* les données de sauvegarde de ce jeu comme s'il n'avait jamais été exécuté auparavant. Êtes-vous sûr de vouloir faire cela ?"
confirmRestore = 0, "Souhaitez-vous vraiment restaurer #%s#?"
debugStatus = 0, "Nombre d'utilisateurs: "
debugStatus = 1, "Utilisateur actuel: "
debugStatus = 2, "Titre actuel: "
debugStatus = 3, "Titre sauvegardé: "
debugStatus = 4, "Type de tri: "
dialogNo = 0, "Non [B]"
dialogOK = 0, "OK [A]"
dialogYes = 0, "Oui [A]"
extrasMenu = 0, "Explorateur SD vers SD"
extrasMenu = 1, "BIS: ProdInfoF"
extrasMenu = 2, "BIS: Safe"
extrasMenu = 3, "BIS: System"
extrasMenu = 4, "BIS: User"
extrasMenu = 5, "Supprimer la mise à jour en attente"
extrasMenu = 6, "Terminer le processus"
extrasMenu = 7, "Monter la sauvegarde système"
extrasMenu = 8, "Re-scanner les titres"
extrasMenu = 9, "Monter le processus RomFS"
extrasMenu = 10, "Sauvegarder le répertoire de JKSV"
extrasMenu = 11, "*[DEV]* Forcer la langue en en-US"
fileModeFileProperties = 0, "Chemin: %s\nTaille: %s"
fileModeFolderProperties = 0, "Chemin: %s\nSous-répertoires: %u\nNombre de fichiers: %u\nTaille totale: %s"
fileModeMenu = 0, "Copier vers "
fileModeMenu = 1, "Supprimer"
fileModeMenu = 2, "Renommer"
fileModeMenu = 3, "Créer un nouveau dossier"
fileModeMenu = 4, "Propriétés"
fileModeMenu = 5, "Fermer"
fileModeMenu = 6, "Ajouter aux filtres de chemins"
fileModeMenuMkDir = 0, "Nouveau"
folderMenuNew = 0, "Nouvelle sauvegarde"
helpFolder = 0, "[A] Sélectionner [Y] Restorer [X] Suprimer [ZR] Upload [B] Fermer"
helpSettings = 0, "[A] Basculer [X] Défauts [B] Retour"
helpTitle = 0, "[A] Sélectionner [L][R] Saut de page [Y] Favorie [X] Options du titre [B] Retour"
helpUser = 0, "[A] Sélectionner [X] Options pour l'utilisateur"
holdingText = 0, "(Maintenir) "
holdingText = 1, "(Garder maintenu) "
holdingText = 2, "(Presque fini!) "
infoStatus = 0, "TID: %016lX"
infoStatus = 1, "SID: %016lX"
infoStatus = 2, "Temps de jeu: %02d:%02d"
infoStatus = 3, "Nombre de fois lancé: %u"
infoStatus = 4, "Auteur: %s"
infoStatus = 5, "Type de sauvegarde: %s"
infoStatus = 6, "Index du Cache: %u"
infoStatus = 7, "Utilisateur: %s"
loadingStartPage = 0, "Chargement..."
mainMenuExtras = 0, "Extras"
mainMenuSettings = 0, "Paramètres"
onlineErrorConnecting = 0, "Erreur de connection!"
onlineNoUpdates = 0, "Aucune mise à jour disponible."
popAddedToPathFilter = 0, "'#%s#' ajouté aux filtres de chemins."
popCPUBoostEnabled = 0, "CPU Boost activé pour les ZIP."
popChangeOutputError = 0, "#%s# contient des caractères incorrects ou non-ASCII."
popChangeOutputFolder = 0, "#%s# modifié en #%s#"
popDriveFailed = 0, "Echec du démarrage de Google Drive."
popRemoteNotActive = 0, "Remote n'est pas utilisable"
popDriveStarted = 0, "Google Drive lancé avec succès."
popWebdavStarted = 0, "Webdav started successfully."
popWebdavFailed =, 0, "Failed to start Webdav."
popErrorCommittingFile = 0, "Erreur d'ajout du fichier à la sauvegarde!"
popFolderIsEmpty = 0, "Le dossier est vide!"
popProcessShutdown = 0, "#%s# terminé avec succès."
popSVIExported = 0, "SVI Exporté."
popSaveIsEmpty = 0, "Les données de la sauvegarde sont vides!"
popTrashEmptied = 0, "Trash emptied"
popZipIsEmpty = 0, "Le fichier ZIP est vide!"
saveDataBackupDeleted = 0, "#%s# a été supprimé."
saveDataBackupMovedToTrash = 0, "#%s# a été déplacé dans la corbeille."
saveDataCreatedForUser = 0, "Données de sauvegarde créée pour %s!"
saveDataCreationFailed = 0, "Echec de la création des données de sauvegarde!"
saveDataDeleteAllUser = 0, "*Souhaitez-vous vraiment supprimer toutes les données de sauvegarde pour %s?*"
saveDataDeleteSuccess = 0, "Données de la sauvegarde pour #%s# Supprimée!"
saveDataExtendFailed = 0, "Echec de l'extention des données de la sauvegarde."
saveDataExtendSuccess = 0, "Données de la sauvegarde pour #%s# étendue!"
saveDataIndexText = 0, "Index de la sauvegarde: "
saveDataNoneFound = 0, "Aucune sauvegarde trouvée pour #%s#!"
saveDataResetSuccess = 0, "Sauvegarde pour #%s# réinitialisée!"
saveDataTypeText = 0, "Sauvegarde système"
saveDataTypeText = 1, "Données de sauvegarde"
saveDataTypeText = 2, "BCAT"
saveDataTypeText = 3, "Sauvegarde de périphérique"
saveDataTypeText = 4, "Stockage temporaire"
saveDataTypeText = 5, "Stockage cache"
saveDataTypeText = 6, "BCAT système"
saveTypeMainMenu = 0, "Périphérique"
saveTypeMainMenu = 1, "BCAT"
saveTypeMainMenu = 2, "Cache"
saveTypeMainMenu = 3, "Système"
saveTypeMainMenu = 4, "BCAT système"
saveTypeMainMenu = 5, "Stockage SysTemp"
settingsMenu = 0, "Vider la corbeille"
settingsMenu = 1, "Vérifier les mises à jour"
settingsMenu = 2, "Définir le dossier de sortie de JKSV"
settingsMenu = 3, "Modifier les titres de la liste noire"
settingsMenu = 4, "Supprimer toutes les sauvegardes sauvegardées"
settingsMenu = 5, "Inclure les sauvegardes du matériel avec les utilisateurs: "
settingsMenu = 6, "Sauvegarder automatiquement avant la restauration: "
settingsMenu = 7, "Nom automatique des sauvegardes: "
settingsMenu = 8, "Overclock/CPU Boost: "
settingsMenu = 9, "Maintenir pour supprimer: "
settingsMenu = 10, "Maintenir pour restaurer: "
settingsMenu = 11, "Maintenir pour écraser: "
settingsMenu = 12, "Forcer le montage: "
settingsMenu = 13, "Compte des sauvegardes système: "
settingsMenu = 14, "Activer l'écriture pour les sauvegardes système: "
settingsMenu = 15, "Utiliser directement les commandes FS : "
settingsMenu = 16, "Exporter les sauvegardes en ZIP: "
settingsMenu = 17, "Forcer l'utilisation de l'anglais: "
settingsMenu = 18, "Activer la corbeille: "
settingsMenu = 19, "Type de tri des titres: "
settingsMenu = 20, "Échelle d'animation: "
settingsOff = 0, "Désactivé"
settingsOn = 0, ">Activé>"
sortType = 0, "Alphabétique"
sortType = 1, "Temps de jeu"
sortType = 2, "Joué dernièrement"
swkbdEnterName = 0, "Entrez un nouveau nom"
swkbdExpandSize = 0, "Entrez la nouvelle taille en MB"
swkbdMkDir = 0, "Entrez un nom de dossier"
swkbdNewSafeTitle = 0, "Entrez un nouveau nom de dossier"
swkbdProcessID = 0, "Entrez l'ID du processus"
swkbdRename = 0, "Entrez un nouveau nom pour l'objet"
swkbdSaveIndex = 0, "Entrez l'index du cache"
swkbdSetWorkDir = 0, "Entrez un nouveau chemin de sortie"
swkbdSysSavID = 0, "Entrez l'ID de la sauvegarde système"
threadStatusAddingFileToZip = 0, "Ajout de '#%s#' au ZIP..."
threadStatusCalculatingSaveSize = 0, "Calcul de la taille de la sauvegarde..."
threadStatusCheckingForUpdate = 0, "Vérification de mises à jour..."
threadStatusCompressingSaveForUpload = 0, "Compression de #%s# pour l'upload..."
threadStatusCopyingFile = 0, "Copie de '#%s#'..."
threadStatusCreatingSaveData = 0, "Création de la sauvegarde pour #%s#..."
threadStatusDecompressingFile = 0, "Décompression de '#%s#'..."
threadStatusDeletingFile = 0, "Suppression..."
threadStatusDeletingSaveData = 0, "Supression de la sauvegarde pour #%s#..."
threadStatusDeletingUpdate = 0, "Suppression de la mise à jour en attente..."
threadStatusDownloadingFile = 0, "Téléchargement de #%s#..."
threadStatusDownloadingUpdate = 0, "Téléchargement de la mise à jour..."
threadStatusExtendingSaveData = 0, "Extention de la sauvegarde pour #%s#..."
threadStatusGetDirProps = 0, "Obtention des propriétés du dossier..."
threadStatusOpeningFolder = 0, "Ouverture de '#%s#'..."
threadStatusPackingJKSV = 0, "Ecriture du contenu du répertoire JKSV dans le ZIP..."
threadStatusResettingSaveData = 0, "Réinitialisation de la sauvegarde..."
threadStatusSavingTranslations = 0, "Saving the file master..."
threadStatusUploadingFile = 0, "Upload de #%s#..."
titleOptions = 0, "Information"
titleOptions = 1, "Liste noir"
titleOptions = 2, "Changer le dossier de sortie"
titleOptions = 3, "Ouvrir en mode fichier"
titleOptions = 4, "Supprimer toutes les sauvegardes de la sauvegarde"
titleOptions = 5, "Réinitialiser la sauvegarde"
titleOptions = 6, "Supprimer la sauvegarde"
titleOptions = 7, "Etendre la sauvegarde"
titleOptions = 8, "Exporter SVI"
translationMainPage = 0, "Traduction: "
userOptions = 0, "Dumper tout pour"
userOptions = 1, "Sauvegarder la sauvegarde"
userOptions = 2, "Sauvegarder toutes les sauvegardes"
userOptions = 3, "Supprimer toutes les sauvegardes de l'utilisateur"

View File

@ -1,171 +0,0 @@
author = 0, "SimoCasa"
confirmBlacklist = 0, "Sei sicuro di voler aggiungere #%s# alla tua blacklist?"
confirmCopy = 0, "Sei sicuro di voler copiare #%s# in #%s#?"
confirmCreateAllSaveData = 0, "Sei sicuro di voler creare tutti i dati di salvataggio su questo sistema per #%s#? Può metterci un po' di tempo in base ai titoli trovati."
confirmDelete = 0, "Sei sicuro di voler cancellare #%s#? *È permanente*!"
confirmDeleteBackupsAll = 0, "Sei sicuro di voler cancellare *tutti* i tuoi backup dei salvataggi di gioco?"
confirmDeleteBackupsTitle = 0, "Sei sicuro di voler cancellare tutti i salvataggi di backup di #%s#?"
confirmDeleteSaveData = 0, "*ATTENZIONE*: Questo *cancellerà* il salvataggio di #%s# *dal tuo sistema*. Sei sicuro di volerlo fare?"
confirmDriveOverwrite = 0, "Scaricando questo backup da Drive sovrascriverai quello nella tua scheda SD. Vuoi continuare?"
confirmOverwrite = 0, "Sei sicuro di voler sovrascrivere #%s#?"
confirmResetSaveData = 0, "*ATTENZIONE*: Questo *resetterà* i dati di salvataggio per questo gioco come se non fosse mai stato eseguito prima. Sei sicuro di volerlo fare?"
confirmRestore = 0, "Sei sicuro di voler ripristinare #%s#?"
debugStatus = 0, "Numero Utenti: "
debugStatus = 1, "Utente Corrente: "
debugStatus = 2, "Titolo Corrente: "
debugStatus = 3, "Safe Title: "
debugStatus = 4, "Tipo Ordinamento: "
dialogNo = 0, "No [B]"
dialogOK = 0, "OK [A]"
dialogYes = 0, "Si [A]"
extrasMenu = 0, "Browser da SD a SD"
extrasMenu = 1, "BIS: ProdInfoF"
extrasMenu = 2, "BIS: Safe"
extrasMenu = 3, "BIS: System"
extrasMenu = 4, "BIS: User"
extrasMenu = 5, "Rimuovi Aggiornamento in attesa"
extrasMenu = 6, "Termina Processo"
extrasMenu = 7, "Monta Salvataggio di Sistema"
extrasMenu = 8, "Riscansiona Titoli"
extrasMenu = 9, "Monta Processo RomFS"
extrasMenu = 10, "Backup cartella JKSV"
extrasMenu = 11, "*[DEV]* Output en-US"
fileModeFileProperties = 0, "Percorso: %s\nDimensione: %s"
fileModeFolderProperties = 0, "Percorso: %s\nSottocartelle: %u\nNumero File: %u\nDimensione totale: %s"
fileModeMenu = 0, "Copia in "
fileModeMenu = 1, "Elimina"
fileModeMenu = 2, "Rinomina"
fileModeMenu = 3, "Crea Cartella"
fileModeMenu = 4, "Proprietà"
fileModeMenu = 5, "Chiudi"
fileModeMenu = 6, "Aggiungi ai Filtri del Percorso"
fileModeMenuMkDir = 0, "Nuovo"
folderMenuNew = 0, "Nuovo Backup"
helpFolder = 0, "[A] Seleziona [Y] Ripristina [X] Cancella [ZR] Upload [B] Chiudi"
helpSettings = 0, "[A] Attiva/Disattiva [X] Predefinite [B] Indietro"
helpTitle = 0, "[A] Seleziona [L][R] Jump [Y] Preferiti [X] Opzioni Titolo [B] Indietro"
helpUser = 0, "[A] Seleziona [Y] Dump di tutti i Salvataggi [X] Opzioni Utente"
holdingText = 0, "(Tieni Premuto) "
holdingText = 1, "(Continua a Premere) "
holdingText = 2, "(Ci sei quasi!) "
infoStatus = 0, "TID: %016lX"
infoStatus = 1, "SID: %016lX"
infoStatus = 2, "Tempo di Gioco: %02d:%02d"
infoStatus = 3, "Avvii Totali: %u"
infoStatus = 4, "Casa Editrice: %s"
infoStatus = 5, "Tipo Salvataggio: %s"
infoStatus = 6, "Indice della Cache: %u"
infoStatus = 7, "Utente: %s"
loadingStartPage = 0, "Caricamento..."
mainMenuExtras = 0, "Extras"
mainMenuSettings = 0, "Impost."
onlineErrorConnecting = 0, "Errore di Connessione!"
onlineNoUpdates = 0, "Nessun Aggiornamento Disponibile."
popAddedToPathFilter = 0, "'#%s#' aggiunto ai filtri del percorso."
popCPUBoostEnabled = 0, "CPU Boost Abilitato per ZIP."
popChangeOutputError = 0, "#%s# contiene caratteri illeciti o non-ASCII."
popChangeOutputFolder = 0, "#%s# cambiato in #%s#"
popDriveFailed = 0, "Impossibile avviare Google Drive."
popRemoteNotActive = 0, "Remote non è Disponibile"
popDriveStarted = 0, "Google Drive avviato con successo."
popWebdavStarted = 0, "Webdav started successfully."
popWebdavFailed =, 0, "Failed to start Webdav."
popErrorCommittingFile = 0, "Errore durante il commiting del file da salvare!"
popFolderIsEmpty = 0, "La cartella è vuota!"
popProcessShutdown = 0, "#%s# spento con successo."
popSVIExported = 0, "SVI Esportato."
popSaveIsEmpty = 0, "Il salvataggio è vuoto!"
popTrashEmptied = 0, "Cestino Svuotato"
popZipIsEmpty = 0, "Il file ZIP è vuoto!"
saveDataBackupDeleted = 0, "#%s# è stato cancellato."
saveDataBackupMovedToTrash = 0, "#%s# è stato spostato nel cestino."
saveDataCreatedForUser = 0, "Salvataggio creato per %s!"
saveDataCreationFailed = 0, "Creazione salvataggio fallita!"
saveDataDeleteAllUser = 0, "*SEI SICURO DI VOLER CANCELLARE TUTTI I SALVATAGGI DI %s?*"
saveDataDeleteSuccess = 0, "Salvataggio di #%s# cancellato!"
saveDataExtendFailed = 0, "Estensione salvataggio fallita."
saveDataExtendSuccess = 0, "Salvataggio di #%s# esteso!"
saveDataIndexText = 0, "Indice di backup: "
saveDataNoneFound = 0, "Nessun Salvataggio trovato per #%s#!"
saveDataResetSuccess = 0, "Salvataggio di #%s# resettato!"
saveDataTypeText = 0, "Sistema"
saveDataTypeText = 1, "Account"
saveDataTypeText = 2, "BCAT"
saveDataTypeText = 3, "Dispositivo"
saveDataTypeText = 4, "Temporanea"
saveDataTypeText = 5, "Cache"
saveDataTypeText = 6, "System BCAT"
saveTypeMainMenu = 0, "Disposit."
saveTypeMainMenu = 1, "BCAT"
saveTypeMainMenu = 2, "Cache"
saveTypeMainMenu = 3, "Sistema"
saveTypeMainMenu = 4, "System BCAT"
saveTypeMainMenu = 5, "SysTemp Storagetem"
settingsMenu = 0, "Svuota Cestino"
settingsMenu = 1, "Controllo Aggiornamenti"
settingsMenu = 2, "Imposta cartella JKSV di Output"
settingsMenu = 3, "Modifica titoli in Blacklist"
settingsMenu = 4, "Cancella tutti i Salvataggi di Backup"
settingsMenu = 5, "Includi Salvataggi Dispositivo con Utenti: "
settingsMenu = 6, "Backup Automatico nel Ripristino: "
settingsMenu = 7, "Auto-Rinominazione Backups: "
settingsMenu = 8, "Overclock/CPU Boost: "
settingsMenu = 9, "Tieni premuto per eliminare: "
settingsMenu = 10, "Tieni premuto per ripristinare: "
settingsMenu = 11, "Tieni premuto per sovrascrivere: "
settingsMenu = 12, "Forza Montaggio: "
settingsMenu = 13, "Account System Saves: "
settingsMenu = 14, "Abilita scrittura su Salvataggi Sistema: "
settingsMenu = 15, "Usa comandi FS direttamente: "
settingsMenu = 16, "Esporta salvataggio in ZIP: "
settingsMenu = 17, "Forza utilizzo Inglese: "
settingsMenu = 18, "Abilita Cestino: "
settingsMenu = 19, "Tipo di ordinamento del Titolo: "
settingsMenu = 20, "Scala di Animazione: "
settingsOff = 0, "Off"
settingsOn = 0, ">On>"
sortType = 0, "Alfabetico"
sortType = 1, "Tempo di Gioco"
sortType = 2, "Ultima Partita"
swkbdEnterName = 0, "Inserisci nuovo nome"
swkbdExpandSize = 0, "Inserisci nuova dimensione in MB"
swkbdMkDir = 0, "Inserisci nome cartella"
swkbdNewSafeTitle = 0, "Inserisci una nuova cartella di output"
swkbdProcessID = 0, "Inserisci Process ID"
swkbdRename = 0, "Inserisci un nuovo nome per elemento"
swkbdSaveIndex = 0, "Inserisci l'Indice della Cache"
swkbdSetWorkDir = 0, "Inserisci un nuovo Percorso Output"
swkbdSysSavID = 0, "Inserisci System Save ID"
threadStatusAddingFileToZip = 0, "Aggiungi '#%s#' a ZIP..."
threadStatusCalculatingSaveSize = 0, "Calcolo dimensione salvataggio..."
threadStatusCheckingForUpdate = 0, "Controllo Aggiornamenti..."
threadStatusCompressingSaveForUpload = 0, "Compressione di #%s# per l'upload..."
threadStatusCopyingFile = 0, "Copiando '#%s#'..."
threadStatusCreatingSaveData = 0, "Creazione salvataggio per #%s#..."
threadStatusDecompressingFile = 0, "Decompressione '#%s#'..."
threadStatusDeletingFile = 0, "Cancellando..."
threadStatusDeletingSaveData = 0, "Cancellazione salvataggio di #%s#..."
threadStatusDeletingUpdate = 0, "Cancellazione dell'aggiornamento in sospeso..."
threadStatusDownloadingFile = 0, "Download di #%s#..."
threadStatusDownloadingUpdate = 0, "Download aggiornamento..."
threadStatusExtendingSaveData = 0, "Estensione Salvataggio per #%s#..."
threadStatusGetDirProps = 0, "Ottenimento le proprietà della cartella..."
threadStatusOpeningFolder = 0, "Apertura '#%s#'..."
threadStatusPackingJKSV = 0, "Scrittura del contenuto della cartella JKSV su ZIP..."
threadStatusResettingSaveData = 0, "Reset salvataggio..."
threadStatusSavingTranslations = 0, "Salvataggio del file master..."
threadStatusUploadingFile = 0, "Upload di #%s#..."
titleOptions = 0, "Informazioni"
titleOptions = 1, "Blacklist"
titleOptions = 2, "Cambia Cartella Output"
titleOptions = 3, "Apri in Modalità File"
titleOptions = 4, "Elimina tutti i Salvataggi di Backup"
titleOptions = 5, "Resetta Salvataggio"
titleOptions = 6, "Elimina Salvataggio"
titleOptions = 7, "Estendi Salvataggio"
titleOptions = 8, "Esporta SVI"
translationMainPage = 0, "Traduzione: "
userOptions = 0, "Dump di tutto per "
userOptions = 1, "Crea salvataggio"
userOptions = 2, "Crea tutti salvataggi"
userOptions = 3, "Cancella tutti salvataggi Utente"

View File

@ -1,215 +0,0 @@
author = 0, "NULL"
confirmBlacklist = 0, "ブラックリストに#%s#を追加してもよろしいですか?"
confirmCopy = 0, "#%s#を#%s#にコピーしてもよろしいですか?"
confirmCreateAllSaveData = 0, "このシステムで#%s#のすべてのセーブデータを作成してもよろしいですか?見つかったタイトルの数によっては、時間がかかる場合があります。"
confirmDelete = 0, "#%s#を削除してもよろしいですか? これは永続的です!"
confirmDeleteBackupsAll = 0, "全てのゲームのセーブバックアップを全て削除してもよろしいですか?"
confirmDeleteBackupsTitle = 0, "#%s#のすべてのセーブデータのバックアップを削除してもよろしいですか?"
confirmDeleteSaveData = 0, "警告: これにより、#%s#のセーブデータがシステムから消去されます。 これを実行してもよろしいですか?"
#CHANGED=============================================>
confirmDriveOverwrite = 0, "このバックアップをドライブからダウンロードすると、SDカードにあるバックアップが上書きされます。続行しますか"
#<====================================================
confirmOverwrite = 0, "#%s#を上書きしてもよろしいですか?"
confirmResetSaveData = 0, "警告: これにより、このゲームのセーブデータが、以前に実行されたことがないかのようにリセットされます。これを実行してもよろしいですか?"
confirmRestore = 0, "#%s#を復元してもよろしいですか?"
#CHANGED=============================================>
debugStatus = 0, "ユーザー数: "
debugStatus = 1, "現在のユーザー: "
debugStatus = 2, "現在のタイトル: "
debugStatus = 3, "安全なタイトル: "
debugStatus = 4, "ソートの種類: "
#<====================================================
dialogNo = 0, "いいえ [B]"
dialogOK = 0, "了解 [A]"
dialogYes = 0, "はい [A]"
extrasMenu = 0, "SDからSDブラウザ"
extrasMenu = 1, "BIS: ProdInfoF"
extrasMenu = 2, "BIS: Safe"
extrasMenu = 3, "BIS: System"
extrasMenu = 4, "BIS: User"
extrasMenu = 5, "保留中のアップデータを削除する"
extrasMenu = 6, "プロセスを終了します"
extrasMenu = 7, "マウントシステムSave"
extrasMenu = 8, "タイトルの再スキャン"
extrasMenu = 9, "マウントプロセスRomFS"
extrasMenu = 10, "JKSVフォルダをバックアップ"
extrasMenu = 11, "*[DEV]* 出力en-US"
fileModeFileProperties = 0, "パス: %s\n容量: %s"
fileModeFolderProperties = 0, "パス: %s\nサブフォルダ: %u\nファイル数: %u\n全体の大きさ: %s"
fileModeMenu = 0, "コピー先 "
fileModeMenu = 1, "削除"
fileModeMenu = 2, "リネーム"
fileModeMenu = 3, "ディレクトリ作成"
fileModeMenu = 4, "プロパティ"
fileModeMenu = 5, "閉じる"
fileModeMenu = 6, "パスフィルターに追加"
fileModeMenuMkDir = 0, "新規"
folderMenuNew = 0, "新規バックアップ"
#CHANGED=============================================>
helpFolder = 0, "[A] 選択 [Y] リストア [X] 削除 [ZR] アップロード [B] 閉じる"
#<====================================================
helpSettings = 0, "[A] トグル [X] デフォルト [B] 戻る"
helpTitle = 0, "[A] 選択 [L][R] ジャンプ [Y] お気に入り [X] タイトルオプション [B] 戻る"
helpUser = 0, "[A] 選択 [X] ユーザー設定"
holdingText = 0, "(所有) "
holdingText = 1, "(保持し続けます) "
holdingText = 2, "(もうすぐです!) "
#CHANGED=============================================>
infoStatus = 0, "TID: %016lX"
infoStatus = 1, "SID: %016lX"
infoStatus = 2, "プレイ時間: %02d:%02d"
infoStatus = 3, "起動回数: %u"
infoStatus = 4, "出版社: %s"
infoStatus = 5, "セーブの種類: %s"
infoStatus = 6, "キャッシュインデックス: %u"
infoStatus = 7, "ユーザー: %s"
#<=====================================================
loadingStartPage = 0, "読み込み中..."
mainMenuExtras = 0, "エクストラ"
mainMenuSettings = 0, "設定"
onlineErrorConnecting = 0, "接続エラー!"
onlineNoUpdates = 0, "利用可能なアップデートはありません。"
popAddedToPathFilter = 0, "'#%s#' パスフィルターに追加されました。"
popCPUBoostEnabled = 0, "ZIPでCPUブーストが有効になっています。"
popChangeOutputError = 0, "#%s# は、不正な文字または非ASCII文字が含まれています。"
popChangeOutputFolder = 0, "#%s# から #%s# に変更"
#CHANGED=============================================>
popDriveFailed = 0, "Google Driveの起動に失敗しました。"
popRemoteNotActive = 0, "Remoteドライブは使用できません"
popDriveStarted = 0, "Google Driveが正常に起動しました。"
popWebdavStarted = 0, "Webdav started successfully."
popWebdavFailed =, 0, "Failed to start Webdav."
#<====================================================
popErrorCommittingFile = 0, "保存するファイルのコミット中にエラーが発生しました!"
popFolderIsEmpty = 0, "フォルダは空です!"
popProcessShutdown = 0, "#%s# 正常にシャットダウンしました。"
#CHANGED=============================================>
popSVIExported = 0, "SVIをエクスポートしました。"
#<====================================================
popSaveIsEmpty = 0, "セーブデータは空です!"
popTrashEmptied = 0, "ゴミ箱を空にする"
popZipIsEmpty = 0, "ZIPファイルは空です!"
saveDataBackupDeleted = 0, "#%s#が削除されました。"
saveDataBackupMovedToTrash = 0, "#%s#はゴミ箱に移動されました"
saveDataCreatedForUser = 0, "#%s#用に作成されたデータを保存する!"
saveDataCreationFailed = 0, "セーブデータの作成に失敗しました!"
saveDataDeleteAllUser = 0, "#%s#のすべての保存データを削除してもよろしいですか?*"
saveDataDeleteSuccess = 0, "#%s#のセーブデータは削除されました!"
saveDataExtendFailed = 0, "セーブデータの拡張に失敗しました。"
saveDataExtendSuccess = 0, "#%s#のセーブデータを拡張!"
saveDataIndexText = 0, "存檔索引號:"
saveDataNoneFound = 0, "#%s#のセーブデータが見つかりません!"
saveDataResetSuccess = 0, "#%s#のセーブデータをリセット!"
saveDataTypeText = 0, "システム\n"
saveDataTypeText = 1, "アカウント\n"
saveDataTypeText = 2, "BCAT\n"
saveDataTypeText = 3, "デバイス\n"
saveDataTypeText = 4, "一時的なもの\n"
saveDataTypeText = 5, "キャッシュ\n"
saveDataTypeText = 6, "システムBCAT\n"
saveTypeMainMenu = 0, "デバイス"
saveTypeMainMenu = 1, "BCAT"
saveTypeMainMenu = 2, "キャッシュ"
saveTypeMainMenu = 3, "システム"
saveTypeMainMenu = 4, "システム BCAT"
saveTypeMainMenu = 5, "システマティックストレージ機器"
settingsMenu = 0, "ゴミ箱を空にする"
settingsMenu = 1, "アップデートを確認する"
settingsMenu = 2, "JKSVセーブデータ保存出力フォルダを設定する"
settingsMenu = 3, "ブラックリストに載っているタイトルを編集する"
settingsMenu = 4, "すべての保存バックアップを削除する"
settingsMenu = 5, "ユーザーと一緒にデバイスのセーブデータを含める: "
settingsMenu = 6, "復元時の自動バックアップ: "
settingsMenu = 7, "自動名前バックアップ: "
settingsMenu = 8, "オーバークロック/CPUブースト: "
settingsMenu = 9, "削除するために保持: "
settingsMenu = 10, "保持して復元: "
settingsMenu = 11, "上書きするために保持: "
settingsMenu = 12, "フォースマウント: "
settingsMenu = 13, "アカウントシステムセーブデータ: "
settingsMenu = 14, "システムセーブデータへの書き込みを有効にする: "
settingsMenu = 15, "FSコマンドを直接使用する: "
settingsMenu = 16, "セーブデータをZIPにエクスポート: "
settingsMenu = 17, "英語を強制的に使用する: "
settingsMenu = 18, "ごみ箱を有効にする: "
settingsMenu = 19, "タイトルの並べ替えタイプ: "
settingsMenu = 20, "アニメーションスケール: "
settingsOff = 0, "オフ"
settingsOn = 0, ">オン>"
sortType = 0, "アルファベット順"
sortType = 1, "プレイ時間"
sortType = 2, "最後にプレイ"
swkbdEnterName = 0, "新しい名前を入力してください"
swkbdExpandSize = 0, "新しいサイズをMBで入力"
swkbdMkDir = 0, "フォルダ名を入力してください"
swkbdNewSafeTitle = 0, "新規出力先フォルダを入力してください"
swkbdProcessID = 0, "プロセスIDを入力してください"
swkbdRename = 0, "アイテムの新しい名前を入力してください"
swkbdSaveIndex = 0, "キャッシュインデックスを入力してください"
swkbdSetWorkDir = 0, "新しい出力パスを入力してください"
swkbdSysSavID = 0, "システムセーブIDを入力してください"
threadStatusAddingFileToZip = 0, "#%s#をZIPに追加中..."
#CHANGED=============================================>
threadStatusCalculatingSaveSize = 0, "保存データサイズの算出中..."
#<====================================================
threadStatusCheckingForUpdate = 0, "アップデートの確認中..."
#CHANGED=============================================>
threadStatusCompressingSaveForUpload = 0, "アップロードのために #%s# を圧縮中..."
#<====================================================
threadStatusCopyingFile = 0, "#%s#をコピーしています..."
threadStatusCreatingSaveData = 0, "#%s#のセームデータの作成中..."
threadStatusDecompressingFile = 0, "#%s#の解凍中..."
threadStatusDeletingFile = 0, "削除中..."
threadStatusDeletingSaveData = 0, "#%s#のセーブデータを削除中..."
threadStatusDeletingUpdate = 0, "保留中のアップデータを削除中..."
#CHANGED=============================================>
threadStatusDownloadingFile = 0, "ダウンロード中 #%s#..."
#<====================================================
threadStatusDownloadingUpdate = 0, "アップデータをダウンロード中..."
threadStatusExtendingSaveData = 0, "#%s#のセーブデータを拡張中..."
threadStatusGetDirProps = 0, "フォルダプロパティの取得中..."
threadStatusOpeningFolder = 0, "#%s#を開き中..."
threadStatusPackingJKSV = 0, "JKSVフォルダの内容をZIPに書き込み中..."
threadStatusResettingSaveData = 0, "セーブデータをリストアしています..."
threadStatusSavingTranslations = 0, "ファイルマスタの保存中..."
#CHANGED=============================================>
threadStatusUploadingFile = 0, "アップロード中 #%s#..."
#<====================================================
titleOptions = 0, "インフォメーション"
titleOptions = 1, "ブラックリスト"
titleOptions = 2, "出力フォルダを変更する"
titleOptions = 3, "ファイルモードで開く"
titleOptions = 4, "すべてのセーブデータバックアップを削除する"
titleOptions = 5, "セーブデータをリセット"
titleOptions = 6, "セーブデータを削除"
titleOptions = 7, "セーブデータを拡張"
#CHANGED=============================================>
titleOptions = 8, "エクスポートSVI"
#<====================================================
translationMainPage = 0, "翻訳: "
userOptions = 0, "すべてをダンプする "
userOptions = 1, "セーブデータを作成"
userOptions = 2, "全てのセーブデータを作成"
userOptions = 3, "全てのユーザーセーブデータを削除"

View File

@ -1,171 +0,0 @@
author = 0, "NULL"
confirmBlacklist = 0, "블랙리스트에 #%s#을(를) 추가하겠습니까?"
confirmCopy = 0, "#%s#을(를) #%s#에 복사하겠습니까?"
confirmCreateAllSaveData = 0, "이 시스템에서 #%s#에 대한 모든 저장 데이터를 생성하겠습니까? 검색된 타이틀 수에 따라 시간이 걸릴 수 있습니다."
confirmDelete = 0, "#%s#을(를) 삭제하겠습니까? *영구적입니다*!"
confirmDeleteBackupsAll = 0, "모든 게임에 대한 *모든* 저장 백업을 삭제하겠습니까?"
confirmDeleteBackupsTitle = 0, "#%s#에 대한 모든 백업 백업을 삭제하겠습니까?"
confirmDeleteSaveData = 0, "경고*: 이렇게 하면 #%s#에 대한 저장 데이터가 *시스템에서* 지워집니다. 정말 하겠습니까?"
confirmDriveOverwrite = 0, "드라이브에서 이 백업을 다운로드하면 SD 카드에 있는 백업을 덮어씁니다. 계속합니까?"
confirmOverwrite = 0, "#%s#을(를) 덮어쓰시겠습니까?"
confirmResetSaveData = 0, "경고*: 이렇게 하면 이 게임의 저장 데이터가 이전에 실행되지 않은 것처럼 *리셋됩니다*. 정말 하겠습니까?"
confirmRestore = 0, "#%s#을(를) 복원하겠습니까?"
debugStatus = 0, "사용자 수: "
debugStatus = 1, "현자 사용자: "
debugStatus = 2, "현재 제목: "
debugStatus = 3, "안전 제목: "
debugStatus = 4, "정렬 유형: "
dialogNo = 0, "아니오 [B]"
dialogOK = 0, "확인 [A]"
dialogYes = 0, "예 [A]"
extrasMenu = 0, "SD에서 SD 브라우저로"
extrasMenu = 1, "BIS: ProdInfoF"
extrasMenu = 2, "BIS: 안전"
extrasMenu = 3, "BIS: 시스템"
extrasMenu = 4, "BIS: 사용자"
extrasMenu = 5, "보류 중인 업데이트 제거"
extrasMenu = 6, "프로세스 종료"
extrasMenu = 7, "시스템 저장 인식"
extrasMenu = 8, "제목 다시 검색"
extrasMenu = 9, "프로세스 RomFS 인식"
extrasMenu = 10, "JKSV 폴더 백업"
extrasMenu = 11, "*[DEV]* 출력 en-US"
fileModeFileProperties = 0, "경로: %s\n크기: %s"
fileModeFolderProperties = 0, "경로: %s\n하위 폴더: %u\n파일 수: %u\n전체 크기: %s"
fileModeMenu = 0, "에게 복사 "
fileModeMenu = 1, "삭제"
fileModeMenu = 2, "이름 바꾸기"
fileModeMenu = 3, "폴더 만들기"
fileModeMenu = 4, "속성"
fileModeMenu = 5, "닫기"
fileModeMenu = 6, "경로 필터에 추가"
fileModeMenuMkDir = 0, "새로 만들기"
folderMenuNew = 0, "새 백업"
helpFolder = 0, "[A] 선택 [Y] 복원 [X] 삭제 [ZR] 업로드 [B] 닫기"
helpSettings = 0, "[A] 전환 [X] 기본 [B] 뒤로가기"
helpTitle = 0, "[A] 선택 [L][R] 점프 [Y] 즐겨찾기 [X] 제목 옵션 [B] 뒤로가기"
helpUser = 0, "[A] 선택 [Y] 모든 세이브 덤프 [X] 사용자 옵션"
holdingText = 0, "(길게 누르기) "
holdingText = 1, "(계속 누르기) "
holdingText = 2, "(거의 완료!) "
infoStatus = 0, "TID: %016lX"
infoStatus = 1, "SID: %016lX"
infoStatus = 2, "즐긴 시간: %02d:%02d"
infoStatus = 3, "총 실행 수: %u"
infoStatus = 4, "발행자: %s"
infoStatus = 5, "저장 유형: %s"
infoStatus = 6, "캐시 인덱스: %u"
infoStatus = 7, "사용자: %s"
infoStatus = 9, ""
loadingStartPage = 0, "로드 중..."
mainMenuExtras = 0, "추가"
mainMenuSettings = 0, "설정"
onlineErrorConnecting = 0, "연결 오류!"
onlineNoUpdates = 0, "사용 가능한 업데이트가 없습니다."
popAddedToPathFilter = 0, "'#%s#'이(가) 경로 필터에 추가되었습니다."
popCPUBoostEnabled = 0, "ZIP를 위한 CPU 부스트가 활성화되었습니다."
popChangeOutputError = 0, "#%s#에 잘못된 또는 ASCII가 아닌 문자가 포함되어 있습니다."
popChangeOutputFolder = 0, "#%s#이(가) #%s#로 변경되었습니다."
popDriveFailed = 0, "구글 드라이브 시작에 실패했습니다."
popRemoteNotActive = 0, "구글 드라이브를 사용할 수 없습니다."
popDriveStarted = 0, "구글 드라이브가 성공적으로 시작되었습니다."
popWebdavStarted = 0, "Webdav가 성공적으로 시작되었습니다."
popWebdavFailed =, 0, "Webdav를 시작하지 못했습니다."
popErrorCommittingFile = 0, "저장할 파일을 커밋하는 동안 오류가 발생했습니다!"
popFolderIsEmpty = 0, "폴더가 비어 있습니다!"
popProcessShutdown = 0, "#%s#이(가) 성공적으로 종료되었습니다."
popSVIExported = 0, "SVI를 내보냈습니다."
popSaveIsEmpty = 0, "저장 데이터가 비어 있습니다!"
popTrashEmptied = 0, "휴지통이 비었습니다."
popZipIsEmpty = 0, "ZIP 파일이 비어 있습니다!"
saveDataBackupDeleted = 0, "#%s#이(가) 삭제되었습니다."
saveDataBackupMovedToTrash = 0, "#%s#이(가) 휴지통으로 이동되었습니다."
saveDataCreatedForUser = 0, "%s에 대해 생성된 데이터 저장!"
saveDataCreationFailed = 0, "저장 데이터 생성 실패!"
saveDataDeleteAllUser = 0, "*%s에 대한 모든 저장 데이터를 삭제하겠습니까?*"
saveDataDeleteSuccess = 0, "#%s#에 대한 저장 데이터가 삭제되었습니다!"
saveDataExtendFailed = 0, "저장 데이터 확장에 실패했습니다."
saveDataExtendSuccess = 0, "#%s#에 대한 데이터 저장이 확장되었습니다!"
saveDataNoneFound = 0, "#%s#에 대한 저장을 찾을 수 없습니다!"
saveDataResetSuccess = 0, "#%s# 재설정을 위해 저장합니다!"
saveDataTypeText = 0, "시스템"
saveDataTypeText = 1, "계정"
saveDataTypeText = 2, "BCAT"
saveDataTypeText = 3, "장치"
saveDataTypeText = 4, "임시"
saveDataTypeText = 5, "캐시"
saveDataTypeText = 6, "시스템 BCAT"
saveTypeMainMenu = 0, "장치"
saveTypeMainMenu = 1, "BCAT"
saveTypeMainMenu = 2, "캐시"
saveTypeMainMenu = 3, "시스템"
saveTypeMainMenu = 4, "시스템 BCAT"
saveTypeMainMenu = 5, "SysTemp 스토리지템"
settingsMenu = 0, "휴지통 비우기"
settingsMenu = 1, "업데이트 확인"
settingsMenu = 2, "JKSV 저장 출력 폴더 설정"
settingsMenu = 3, "블랙리스트에 있는 제목 편집"
settingsMenu = 4, "모든 저장 백업 삭제"
settingsMenu = 5, "사용자와 함께 장치 저장 포함: "
settingsMenu = 6, "복원 시 자동 백업: "
settingsMenu = 7, "자동 이름 백업: "
settingsMenu = 8, "오버클럭/CPU 부스트: "
settingsMenu = 9, "삭제하려면 길게 누르기: "
settingsMenu = 10, "복원하려면 길게 누르기: "
settingsMenu = 11, "덮어쓰려면 길게 누르기: "
settingsMenu = 12, "강제 인식: "
settingsMenu = 13, "계정 시스템 저장: "
settingsMenu = 14, "시스템 저장에 쓰기 활성화: "
settingsMenu = 15, "FS 명령을 직접 사용: "
settingsMenu = 16, "저장된 파일을 ZIP으로 내보내기: "
settingsMenu = 17, "강제 영어 사용: "
settingsMenu = 18, "휴지통 활성화: "
settingsMenu = 19, "제목 정렬 유형: "
settingsMenu = 20, "애니메이션 스케일: "
settingsOff = 0, "끔"
settingsOn = 0, ">켬>"
sortType = 0, "알파벳"
sortType = 1, "즐긴 시간"
sortType = 2, "마지막 실행"
swkbdEnterName = 0, "새 이름 입력"
swkbdExpandSize = 0, "새 MB 크기 입력"
swkbdMkDir = 0, "폴더 이름 입력"
swkbdNewSafeTitle = 0, "새 출력 폴더 입력"
swkbdProcessID = 0, "프로세스 ID 입력"
swkbdRename = 0, "항목의 새 이름을 입력"
swkbdSaveIndex = 0, "캐시 인덱스 입력"
swkbdSetWorkDir = 0, "새 출력 경로 입력"
swkbdSysSavID = 0, "시스템 저장 ID 입력"
threadStatusAddingFileToZip = 0, "'#%s#'을(를) ZIP에 추가하는 중..."
threadStatusCalculatingSaveSize = 0, "저장 데이터 크기 계산 중..."
threadStatusCheckingForUpdate = 0, "업데이트 확인 중..."
threadStatusCompressingSaveForUpload = 0, "업로드를 위해 #%s# 압축 중..."
threadStatusCopyingFile = 0, "'#%s#' 복사 중..."
threadStatusCreatingSaveData = 0, "#%s#에 대한 저장 데이터 생성 중..."
threadStatusDecompressingFile = 0, "'#%s#' 압축 해제 중..."
threadStatusDeletingFile = 0, "삭제 중..."
threadStatusDeletingSaveData = 0, "#%s#에 대한 저장 데이터 삭제 중..."
threadStatusDeletingUpdate = 0, "대기 중인 업데이트 삭제 중..."
threadStatusDownloadingFile = 0, "#%s# 다운로드 중..."
threadStatusDownloadingUpdate = 0, "업데이트 다운로드 중..."
threadStatusExtendingSaveData = 0, "#%s#에 대한 저장 데이터 확장 중..."
threadStatusGetDirProps = 0, "폴더 속성 가져오기..."
threadStatusOpeningFolder = 0, "'#%s#'을(를) 여는 중..."
threadStatusPackingJKSV = 0, "JKSV 폴더 내용을 ZIP에 쓰는 중..."
threadStatusResettingSaveData = 0, "저장 데이터 재설정 중..."
threadStatusSavingTranslations = 0, "마스터 파일 저장 중..."
threadStatusUploadingFile = 0, "#%s# 업로드 중..."
titleOptions = 0, "정보"
titleOptions = 1, "블랙리스트"
titleOptions = 2, "출력 폴더 변경"
titleOptions = 3, "파일 모드에서 열기"
titleOptions = 4, "모든 저장 백업 삭제"
titleOptions = 5, "저장 데이터 재설정"
titleOptions = 6, "저장 데이터 삭제"
titleOptions = 7, "저장 데이터 확장"
titleOptions = 8, "SVI 내보내기"
translationMainPage = 0, "번역: "
userOptions = 0, "에 대해 모두 덤프 "
userOptions = 1, "저장 데이터 생성"
userOptions = 2, "모든 저장 데이터 생성"
userOptions = 3, "모든 사용자 저장 삭제"

View File

@ -1,171 +0,0 @@
author = 0, "NULL"
confirmBlacklist = 0, "Are you sure you want to add #%s# to your blacklist?"
confirmCopy = 0, "Are you sure you want to copy #%s# to #%s#?"
confirmCreateAllSaveData = 0, "Are you sure you would like to create all save data on this system for #%s#? This can take a while depending on how many titles are found."
confirmDelete = 0, "Are you sure you want to delete #%s#? *This is permanent*!"
confirmDeleteBackupsAll = 0, "Are you sure you would like to delete *all* of your save backups for all of your games?"
confirmDeleteBackupsTitle = 0, "Are you sure you would like to delete all save backups for #%s#?"
confirmDeleteSaveData = 0, "*WARNING*: This *will* erase the save data for #%s# *from your system*. Are you sure you want to do this?"
confirmDriveOverwrite = 0, "Downloading this backup from drive will overwrite the one on your SD card. Continue?"
confirmOverwrite = 0, "Are you sure you want to overwrite #%s#?"
confirmResetSaveData = 0, "*WARNING*: This *will* reset the save data for this game as if it was never ran before. Are you sure you want to do this?"
confirmRestore = 0, "Are you sure you want to restore #%s#?"
debugStatus = 0, "User Count: "
debugStatus = 1, "Current User: "
debugStatus = 2, "Current Title: "
debugStatus = 3, "Safe Title: "
debugStatus = 4, "Sort Type: "
dialogNo = 0, "No [B]"
dialogOK = 0, "OK [A]"
dialogYes = 0, "Yes [A]"
extrasMenu = 0, "SD to SD Browser"
extrasMenu = 1, "BIS: ProdInfoF"
extrasMenu = 2, "BIS: Safe"
extrasMenu = 3, "BIS: System"
extrasMenu = 4, "BIS: User"
extrasMenu = 5, "Remove Pending Update"
extrasMenu = 6, "Terminate Process"
extrasMenu = 7, "Mount System Save"
extrasMenu = 8, "Rescan Titles"
extrasMenu = 9, "Mount Process RomFS"
extrasMenu = 10, "Backup JKSV Folder"
extrasMenu = 11, "*[DEV]* Output en-US"
fileModeFileProperties = 0, "Path: %s\nSize: %s"
fileModeFolderProperties = 0, "Path: %s\nSub Folders: %u\nFile Count: %u\nTotal Size: %s"
fileModeMenu = 0, "Copy To "
fileModeMenu = 1, "Delete"
fileModeMenu = 2, "Rename"
fileModeMenu = 3, "Make Dir"
fileModeMenu = 4, "Properties"
fileModeMenu = 5, "Close"
fileModeMenu = 6, "Add to Path Filters"
fileModeMenuMkDir = 0, "New"
folderMenuNew = 0, "New Backup"
helpFolder = 0, "[A] Select [Y] Restore [X] Delete [ZR] Upload [B] Close"
helpSettings = 0, "[A] Toggle [X] Defaults [B] Back"
helpTitle = 0, "[A] Select [L][R] Jump [Y] Favorite [X] Title Options [B] Back"
helpUser = 0, "[A] Select [Y] Dump All Saves [X] User Options"
holdingText = 0, "(Hold) "
holdingText = 1, "(Keep Holding) "
holdingText = 2, "(Almost There!) "
infoStatus = 0, "TID: %016lX"
infoStatus = 1, "SID: %016lX"
infoStatus = 2, "Play Time: %02d:%02d"
infoStatus = 3, "Total Launches: %u"
infoStatus = 4, "Publisher: %s"
infoStatus = 5, "Save Type: %s"
infoStatus = 6, "Cache Index: %u"
infoStatus = 7, "User: %s"
infoStatus = 9, ""
loadingStartPage = 0, "Loading..."
mainMenuExtras = 0, "Extras"
mainMenuSettings = 0, "Settings"
onlineErrorConnecting = 0, "Error Connecting!"
onlineNoUpdates = 0, "No Updates Available."
popAddedToPathFilter = 0, "'#%s#' added to path filters."
popCPUBoostEnabled = 0, "CPU Boost Enabled for ZIP."
popChangeOutputError = 0, "#%s# contains illegal or non-ASCII characters."
popChangeOutputFolder = 0, "#%s# changed to #%s#"
popDriveFailed = 0, "Failed to start Google Drive."
popRemoteNotActive = 0, "Remote is not available"
popDriveStarted = 0, "Google Drive started successfully."
popWebdavStarted = 0, "Webdav started successfully."
popWebdavFailed =, 0, "Failed to start Webdav."
popErrorCommittingFile = 0, "Error committing file to save!"
popFolderIsEmpty = 0, "Folder is empty!"
popProcessShutdown = 0, "#%s# successfully shutdown."
popSVIExported = 0, "SVI Exported."
popSaveIsEmpty = 0, "Save data is empty!"
popTrashEmptied = 0, "Trash emptied"
popZipIsEmpty = 0, "ZIP file is empty!"
saveDataBackupDeleted = 0, "#%s# has been deleted."
saveDataBackupMovedToTrash = 0, "#%s# has been moved to trash."
saveDataCreatedForUser = 0, "Save data created for %s!"
saveDataCreationFailed = 0, "Save data creation failed!"
saveDataDeleteAllUser = 0, "*ARE YOU SURE YOU WANT TO DELETE ALL SAVE DATA FOR %s?*"
saveDataDeleteSuccess = 0, "Save data for #%s# deleted!"
saveDataExtendFailed = 0, "Failed to extend save data."
saveDataExtendSuccess = 0, "Save data for #%s# extended!"
saveDataNoneFound = 0, "No saves found for #%s#!"
saveDataResetSuccess = 0, "Save for #%s# reset!"
saveDataTypeText = 0, "System"
saveDataTypeText = 1, "Account"
saveDataTypeText = 2, "BCAT"
saveDataTypeText = 3, "Device"
saveDataTypeText = 4, "Temporary"
saveDataTypeText = 5, "Cache"
saveDataTypeText = 6, "System BCAT"
saveTypeMainMenu = 0, "Device"
saveTypeMainMenu = 1, "BCAT"
saveTypeMainMenu = 2, "Cache"
saveTypeMainMenu = 3, "System"
saveTypeMainMenu = 4, "System BCAT"
saveTypeMainMenu = 5, "SysTemp Storagetem"
settingsMenu = 0, "Empty Trash Bin"
settingsMenu = 1, "Check for Updates"
settingsMenu = 2, "Set JKSV Save Output Folder"
settingsMenu = 3, "Edit Blacklisted Titles"
settingsMenu = 4, "Delete All Save Backups"
settingsMenu = 5, "Include Device Saves With Users: "
settingsMenu = 6, "Auto Backup On Restore: "
settingsMenu = 7, "Auto-Name Backups: "
settingsMenu = 8, "Overclock/CPU Boost: "
settingsMenu = 9, "Hold To Delete: "
settingsMenu = 10, "Hold To Restore: "
settingsMenu = 11, "Hold To Overwrite: "
settingsMenu = 12, "Force Mount: "
settingsMenu = 13, "Account System Saves: "
settingsMenu = 14, "Enable Writing to System Saves: "
settingsMenu = 15, "Use FS Commands Directly: "
settingsMenu = 16, "Export Saves to ZIP: "
settingsMenu = 17, "Force English To Be Used: "
settingsMenu = 18, "Enable Trash Bin: "
settingsMenu = 19, "Title Sorting Type: "
settingsMenu = 20, "Animation Scale: "
settingsOff = 0, "Off"
settingsOn = 0, ">On>"
sortType = 0, "Alphabetical"
sortType = 1, "Time Played"
sortType = 2, "Last Played"
swkbdEnterName = 0, "Enter a new name"
swkbdExpandSize = 0, "Enter New Size in MB"
swkbdMkDir = 0, "Enter a folder name"
swkbdNewSafeTitle = 0, "Input New Output Folder"
swkbdProcessID = 0, "Enter Process ID"
swkbdRename = 0, "Enter a new name for item"
swkbdSaveIndex = 0, "Enter Cache Index"
swkbdSetWorkDir = 0, "Enter a new Output Path"
swkbdSysSavID = 0, "Enter System Save ID"
threadStatusAddingFileToZip = 0, "Adding '#%s#' to ZIP..."
threadStatusCalculatingSaveSize = 0, "Calculating save data size..."
threadStatusCheckingForUpdate = 0, "Checking for updates..."
threadStatusCompressingSaveForUpload = 0, "Compressing #%s# for upload..."
threadStatusCopyingFile = 0, "Copying '#%s#'..."
threadStatusCreatingSaveData = 0, "Creating Save Data for #%s#..."
threadStatusDecompressingFile = 0, "Decompressing '#%s#'..."
threadStatusDeletingFile = 0, "Deleting..."
threadStatusDeletingSaveData = 0, "Deleting Save Data for #%s#..."
threadStatusDeletingUpdate = 0, "Deleting pending update..."
threadStatusDownloadingFile = 0, "Downloading #%s#..."
threadStatusDownloadingUpdate = 0, "Downloading update..."
threadStatusExtendingSaveData = 0, "Extending Save Data for #%s#..."
threadStatusGetDirProps = 0, "Getting Folder Properties..."
threadStatusOpeningFolder = 0, "Opening '#%s#'..."
threadStatusPackingJKSV = 0, "Writing JKSV folder contents to ZIP..."
threadStatusResettingSaveData = 0, "Resetting save data..."
threadStatusSavingTranslations = 0, "Saving the file master..."
threadStatusUploadingFile = 0, "Uploading #%s#..."
titleOptions = 0, "Information"
titleOptions = 1, "Blacklist"
titleOptions = 2, "Change Output Folder"
titleOptions = 3, "Open in File Mode"
titleOptions = 4, "Delete All Save Backups"
titleOptions = 5, "Reset Save Data"
titleOptions = 6, "Delete Save Data"
titleOptions = 7, "Extend Save Data"
titleOptions = 8, "Export SVI"
translationMainPage = 0, "Translation: "
userOptions = 0, "Dump All For "
userOptions = 1, "Create Save Data"
userOptions = 2, "Create All Save Data"
userOptions = 3, "Delete All User Saves"

Some files were not shown because too many files have changed in this diff Show More