summaryrefslogtreecommitdiffstats
path: root/gui
diff options
context:
space:
mode:
Diffstat (limited to 'gui')
-rw-r--r--gui/gui.cpp2
-rw-r--r--gui/input.cpp467
-rw-r--r--gui/objects.hpp14
-rw-r--r--gui/pages.cpp383
-rw-r--r--gui/pages.hpp14
-rw-r--r--gui/resources.cpp19
-rw-r--r--gui/resources.hpp11
-rw-r--r--gui/text.cpp35
-rw-r--r--gui/theme/common/languages/hu.xml35
-rw-r--r--gui/theme/common/languages/it.xml670
-rw-r--r--gui/theme/common/languages/ru.xml104
11 files changed, 1142 insertions, 612 deletions
diff --git a/gui/gui.cpp b/gui/gui.cpp
index c2a439acb..4cf80a482 100644
--- a/gui/gui.cpp
+++ b/gui/gui.cpp
@@ -765,7 +765,7 @@ extern "C" int gui_loadResources(void)
check = 1;
}
- if (check == 0 && PageManager::LoadPackage("TWRP", "/script/ui.xml", "main"))
+ if (check == 0)
{
std::string theme_path;
diff --git a/gui/input.cpp b/gui/input.cpp
index c12ecc2b2..4bf01ada2 100644
--- a/gui/input.cpp
+++ b/gui/input.cpp
@@ -1,5 +1,5 @@
/*
- Copyright 2012 bigbiff/Dees_Troy TeamWin
+ Copyright 2012 to 2016 bigbiff/Dees_Troy TeamWin
This file is part of TWRP/TeamWin Recovery Project.
TWRP is free software: you can redistribute it and/or modify
@@ -46,6 +46,8 @@ extern "C" {
#include "objects.hpp"
#include "../data.hpp"
+#define TW_INPUT_NO_UPDATE -1000 // Magic value for HandleTextLocation when no change in scrolling has occurred
+
GUIInput::GUIInput(xml_node<>* node)
: GUIObject(node)
{
@@ -63,12 +65,13 @@ GUIInput::GUIInput(xml_node<>* node)
isLocalChange = true;
HasAllowed = false;
HasDisabled = false;
- skipChars = scrollingX = mFontHeight = mFontY = lastX = 0;
+ cursorX = textWidth = scrollingX = mFontHeight = mFontY = lastX = 0;
mBackgroundX = mBackgroundY = mBackgroundW = mBackgroundH = MinLen = MaxLen = 0;
mCursorLocation = -1; // -1 is always the end of the string
CursorWidth = 3;
ConvertStrToColor("black", &mBackgroundColor);
ConvertStrToColor("white", &mCursorColor);
+ displayValue = "";
if (!node)
return;
@@ -136,11 +139,6 @@ GUIInput::GUIInput(xml_node<>* node)
DataManager::SetValue(mVariable, attr->value());
mMask = LoadAttrString(child, "mask");
HasMask = !mMask.empty();
- attr = child->first_attribute("maskvariable");
- if (attr)
- mMaskVariable = attr->value();
- else
- mMaskVariable = mVariable;
}
// Load input restrictions
@@ -166,10 +164,7 @@ GUIInput::GUIInput(xml_node<>* node)
mFontY = mRenderY;
if (mInputText)
- mInputText->SetMaxWidth(mRenderW);
-
- isLocalChange = false;
- HandleTextLocation(-3);
+ mInputText->SetMaxWidth(0);
}
GUIInput::~GUIInput()
@@ -178,17 +173,40 @@ GUIInput::~GUIInput()
delete mAction;
}
-int GUIInput::HandleTextLocation(int x)
-{
- int textWidth;
- string displayValue, originalValue, insertChar;
+void GUIInput::HandleTextLocation(int x) {
+ mRendered = false;
+ if (textWidth <= mRenderW) {
+ if (x != TW_INPUT_NO_UPDATE)
+ lastX = x;
+ scrollingX = 0;
+ return;
+ }
+ if (scrollingX + textWidth < mRenderW) {
+ scrollingX = mRenderW - textWidth;
+ }
+
+ if (x == TW_INPUT_NO_UPDATE)
+ return;
+
+ scrollingX += x - lastX;
+ if (scrollingX > 0)
+ scrollingX = 0;
+ else if (scrollingX + textWidth < mRenderW)
+ scrollingX = mRenderW - textWidth;
+ lastX = x;
+}
+
+void GUIInput::UpdateTextWidth() {
void* fontResource = NULL;
- if (mFont)
+ if (mFont) {
fontResource = mFont->GetResource();
+ } else {
+ textWidth = 0;
+ return;
+ }
- DataManager::GetValue(mVariable, originalValue);
- displayValue = originalValue;
+ DataManager::GetValue(mVariable, displayValue);
if (HasMask) {
int index, string_size = displayValue.size();
string maskedValue;
@@ -197,153 +215,80 @@ int GUIInput::HandleTextLocation(int x)
displayValue = maskedValue;
}
textWidth = gr_ttf_measureEx(displayValue.c_str(), fontResource);
- if (textWidth <= mRenderW) {
- lastX = x;
- scrollingX = 0;
- skipChars = 0;
- mInputText->SkipCharCount(skipChars);
- mRendered = false;
- return 0;
- }
-
- if (skipChars && skipChars < displayValue.size())
- displayValue.erase(0, skipChars);
-
- textWidth = gr_ttf_measureEx(displayValue.c_str(), fontResource);
- mRendered = false;
+}
- int deltaX, deltaText, newWidth;
+void GUIInput::HandleCursorByTouch(int x) {
+// Uses x to find mCursorLocation and cursorX
+ if (displayValue.size() == 0) {
+ mCursorLocation = -1;
+ cursorX = mRenderX;
+ return;
+ }
- if (x < -1000) {
- // No change in scrolling
- if (x == -1003)
- mCursorLocation = -1;
+ void* fontResource = NULL;
+ if (mFont) {
+ fontResource = mFont->GetResource();
+ } else {
+ return;
+ }
- if (mCursorLocation == -1) {
- displayValue = originalValue;
- skipChars = 0;
- textWidth = gr_ttf_measureEx(displayValue.c_str(), fontResource);
- while (textWidth > mRenderW) {
- displayValue.erase(0, 1);
- skipChars++;
- textWidth = gr_ttf_measureEx(displayValue.c_str(), fontResource);
+ string cursorString;
+ unsigned index = 0, displaySize = displayValue.size();
+ int prevX = mRenderX + scrollingX;
+
+ for(index = 0; index <= displaySize; index++) {
+ cursorString = displayValue.substr(0, index);
+ cursorX = gr_ttf_measureEx(cursorString.c_str(), fontResource) + mRenderX + scrollingX;
+ if (cursorX > x) {
+ if (index > 0 && x <= cursorX - ((x - prevX) / 2) && prevX >= mRenderX) {
+ // This helps make sure that we can place the cursor before the very first char if the first char is
+ // is fully visible while also still letting us place the cursor after the last char if fully visible
+ mCursorLocation = index - 1;
+ cursorX = prevX;
+ return;
}
- scrollingX = mRenderW - textWidth;
- mInputText->SkipCharCount(skipChars);
- } else if (x == -1001) {
- // Added a new character
- int adjust_scrollingX = 0;
- string cursorLocate;
-
- cursorLocate = displayValue;
- cursorLocate.resize(mCursorLocation);
- textWidth = gr_ttf_measureEx(cursorLocate.c_str(), fontResource);
- while (textWidth > mRenderW) {
- skipChars++;
+ mCursorLocation = index;
+ if (cursorX > mRenderX + mRenderW) {
+ cursorX = prevX; // This makes sure that the cursor doesn't get placed after the end of the input box
mCursorLocation--;
- cursorLocate.erase(0, 1);
- textWidth = gr_ttf_measureEx(cursorLocate.c_str(), fontResource);
- adjust_scrollingX = -1;
- }
- if (adjust_scrollingX) {
- scrollingX = mRenderW - textWidth;
- if (scrollingX < 0)
- scrollingX = 0;
- }
- mInputText->SkipCharCount(skipChars);
- } else if (x == -1002) {
- // Deleted a character
- while (-1) {
- if (skipChars == 0) {
- scrollingX = 0;
- mInputText->SkipCharCount(skipChars);
- return 0;
- }
- insertChar = originalValue.substr(skipChars - 1, 1);
- displayValue.insert(0, insertChar);
- newWidth = gr_ttf_measureEx(displayValue.c_str(), fontResource);
- deltaText = newWidth - textWidth;
- if (newWidth > mRenderW) {
- scrollingX = mRenderW - textWidth;
- if (scrollingX < 0)
- scrollingX = 0;
- mInputText->SkipCharCount(skipChars);
- return 0;
- } else {
- textWidth = newWidth;
- skipChars--;
- mCursorLocation++;
- }
+ return;
}
- } else
- LOGINFO("GUIInput::HandleTextLocation -> We really shouldn't ever get here...\n");
- } else if (x > lastX) {
- // Dragging to right, scrolling left
- while (-1) {
- deltaX = x - lastX + scrollingX;
- if (skipChars == 0 || deltaX == 0) {
- scrollingX = 0;
- lastX = x;
- mInputText->SkipCharCount(skipChars);
- return 0;
- }
- insertChar = originalValue.substr(skipChars - 1, 1);
- displayValue.insert(0, insertChar);
- newWidth = gr_ttf_measureEx(displayValue.c_str(), fontResource);
- deltaText = newWidth - textWidth;
- if (deltaText < deltaX) {
- lastX += deltaText;
- textWidth = newWidth;
- skipChars--;
- } else {
- scrollingX = deltaX;
- lastX = x;
- mInputText->SkipCharCount(skipChars);
- return 0;
- }
- }
- } else if (x < lastX) {
- // Dragging to left, scrolling right
- if (textWidth <= mRenderW) {
- lastX = x;
- scrollingX = mRenderW - textWidth;
- return 0;
- }
- if (scrollingX) {
- deltaX = lastX - x;
- if (scrollingX > deltaX) {
- scrollingX -= deltaX;
- lastX = x;
- return 0;
- } else {
- lastX -= deltaX;
- scrollingX = 0;
- }
- }
- while (-1) {
- deltaX = lastX - x;
- displayValue.erase(0, 1);
- skipChars++;
- newWidth = gr_ttf_measureEx(displayValue.c_str(), fontResource);
- deltaText = textWidth - newWidth;
- if (newWidth <= mRenderW) {
- scrollingX = mRenderW - newWidth;
- lastX = x;
- mInputText->SkipCharCount(skipChars);
- return 0;
- }
- if (deltaText < deltaX) {
- lastX -= deltaText;
- textWidth = newWidth;
- } else {
- scrollingX = deltaText - deltaX;
- lastX = x;
- mInputText->SkipCharCount(skipChars);
- return 0;
+ if (cursorX >= mRenderX) {
+ return; // This makes sure that the cursor doesn't get placed before the beginning of the input box
}
}
+ prevX = cursorX;
+ }
+ mCursorLocation = -1; // x is at or past the end of the string
+}
+
+void GUIInput::HandleCursorByText() {
+// Uses mCursorLocation to find cursorX
+ if (!DrawCursor)
+ return;
+
+ void* fontResource = NULL;
+ if (mFont) {
+ fontResource = mFont->GetResource();
+ } else {
+ return;
+ }
+
+ int cursorWidth = textWidth;
+
+ if (mCursorLocation != -1) {
+ string cursorDisplay = displayValue;
+ cursorDisplay.resize(mCursorLocation);
+ cursorWidth = gr_ttf_measureEx(cursorDisplay.c_str(), fontResource);
+ }
+ cursorX = mRenderX + cursorWidth + scrollingX;
+ if (cursorX >= mRenderX + mRenderW) {
+ scrollingX = mRenderW - cursorWidth;
+ cursorX = mRenderX + mRenderW - CursorWidth;
+ } else if (cursorX < mRenderX) {
+ scrollingX = cursorWidth * -1;
+ cursorX = mRenderX;
}
- return 0;
}
int GUIInput::Render(void)
@@ -372,58 +317,18 @@ int GUIInput::Render(void)
int ret = 0;
// Render the text
- mInputText->SetRenderPos(mRenderX + scrollingX, mFontY);
- mInputText->SetMaxWidth(mRenderW - scrollingX);
- if (mInputText) ret = mInputText->Render();
- if (ret < 0) return ret;
+ if (mInputText) {
+ mInputText->SetRenderPos(mRenderX + scrollingX, mFontY);
+ mInputText->SetText(displayValue);
+ gr_clip(mRenderX, mRenderY, mRenderW, mRenderH);
+ ret = mInputText->Render();
+ gr_noclip();
+ }
+ if (ret < 0)
+ return ret;
if (HasInputFocus && DrawCursor) {
// Render the cursor
- string displayValue;
- int cursorX;
- DataManager::GetValue(mVariable, displayValue);
- if (HasMask) {
- int index, string_size = displayValue.size();
- string maskedValue;
- for (index=0; index<string_size; index++)
- maskedValue += mMask;
- displayValue = maskedValue;
- }
- if (displayValue.size() == 0) {
- skipChars = 0;
- mCursorLocation = -1;
- cursorX = mRenderX;
- } else {
- if (skipChars && skipChars < displayValue.size()) {
- displayValue.erase(0, skipChars);
- }
- if (mCursorLocation == 0) {
- // Cursor is at the beginning
- cursorX = mRenderX;
- } else if (mCursorLocation > 0) {
- // Cursor is in the middle
- if (displayValue.size() > (unsigned)mCursorLocation) {
- string cursorDisplay;
-
- cursorDisplay = displayValue;
- cursorDisplay.resize(mCursorLocation);
- cursorX = gr_ttf_measureEx(cursorDisplay.c_str(), fontResource) + mRenderX;
- } else {
- // Cursor location is after the end of the text - reset to -1
- mCursorLocation = -1;
- cursorX = gr_ttf_measureEx(displayValue.c_str(), fontResource) + mRenderX;
- }
- } else {
- // Cursor is at the end (-1)
- cursorX = gr_ttf_measureEx(displayValue.c_str(), fontResource) + mRenderX;
- }
- }
- cursorX += scrollingX;
- // Make sure that the cursor doesn't go past the boundaries of the box
- if (cursorX + (int)CursorWidth > mRenderX + mRenderW)
- cursorX = mRenderX + mRenderW - CursorWidth;
-
- // Set the color for the cursor
gr_color(mCursorColor.red, mCursorColor.green, mCursorColor.blue, 255);
gr_fill(cursorX, mFontY, CursorWidth, mFontHeight);
}
@@ -454,8 +359,6 @@ int GUIInput::GetSelection(int x, int y)
int GUIInput::NotifyTouch(TOUCH_STATE state, int x, int y)
{
static int startSelection = -1;
- int textWidth;
- string displayValue, originalValue;
void* fontResource = NULL;
if (mFont) fontResource = mFont->GetResource();
@@ -507,43 +410,9 @@ int GUIInput::NotifyTouch(TOUCH_STATE state, int x, int y)
case TOUCH_RELEASE:
// We've moved the cursor location
- int relativeX = x - mRenderX;
-
mRendered = false;
DrawCursor = true;
- DataManager::GetValue(mVariable, displayValue);
- if (HasMask) {
- int index, string_size = displayValue.size();
- string maskedValue;
- for (index=0; index<string_size; index++)
- maskedValue += mMask;
- displayValue = maskedValue;
- }
- if (displayValue.size() == 0) {
- skipChars = 0;
- mCursorLocation = -1;
- return 0;
- } else if (skipChars && skipChars < displayValue.size()) {
- displayValue.erase(0, skipChars);
- }
-
- string cursorString;
- int cursorX = 0;
- unsigned index = 0;
-
- for(index=0; index<displayValue.size(); index++)
- {
- cursorString = displayValue.substr(0, index);
- cursorX = gr_ttf_measureEx(cursorString.c_str(), fontResource) + mRenderX;
- if (cursorX > x) {
- if (index > 0)
- mCursorLocation = index - 1;
- else
- mCursorLocation = index;
- return 0;
- }
- }
- mCursorLocation = -1;
+ HandleCursorByTouch(x);
break;
}
}
@@ -554,10 +423,19 @@ int GUIInput::NotifyVarChange(const std::string& varName, const std::string& val
{
GUIObject::NotifyVarChange(varName, value);
- if (varName == mVariable && !isLocalChange) {
- HandleTextLocation(-1003);
+ if (varName == mVariable) {
+ if (!isLocalChange) {
+ UpdateTextWidth();
+ HandleTextLocation(TW_INPUT_NO_UPDATE);
+ } else
+ isLocalChange = false;
return 0;
}
+ if (varName.empty()) {
+ UpdateTextWidth();
+ HandleTextLocation(TW_INPUT_NO_UPDATE);
+ HandleCursorByText();
+ }
return 0;
}
@@ -566,54 +444,48 @@ int GUIInput::NotifyKey(int key, bool down)
if (!HasInputFocus || !down)
return 1;
- string variableValue;
switch (key)
{
case KEY_LEFT:
- if (mCursorLocation == 0 && skipChars == 0)
+ if (mCursorLocation == 0)
return 0; // we're already at the beginning
if (mCursorLocation == -1) {
- DataManager::GetValue(mVariable, variableValue);
- if (variableValue.size() == 0)
+ if (displayValue.size() == 0) {
+ cursorX = mRenderX;
return 0;
- mCursorLocation = variableValue.size() - skipChars - 1;
- } else if (mCursorLocation == 0) {
- skipChars--;
- HandleTextLocation(-1002);
+ }
+ mCursorLocation = displayValue.size() - 1;
} else {
mCursorLocation--;
- HandleTextLocation(-1002);
}
mRendered = false;
+ HandleCursorByText();
return 0;
case KEY_RIGHT:
if (mCursorLocation == -1)
return 0; // we're already at the end
mCursorLocation++;
- DataManager::GetValue(mVariable, variableValue);
- if (variableValue.size() <= mCursorLocation + skipChars)
+ if ((int)displayValue.size() <= mCursorLocation)
mCursorLocation = -1;
- HandleTextLocation(-1001);
+ HandleCursorByText();
mRendered = false;
return 0;
case KEY_HOME:
case KEY_UP:
- DataManager::GetValue(mVariable, variableValue);
- if (variableValue.size() == 0)
+ if (displayValue.size() == 0)
return 0;
mCursorLocation = 0;
- skipChars = 0;
mRendered = false;
- HandleTextLocation(-1002);
+ cursorX = mRenderX;
return 0;
case KEY_END:
case KEY_DOWN:
mCursorLocation = -1;
mRendered = false;
- HandleTextLocation(-1003);
+ HandleCursorByText();
return 0;
}
@@ -622,58 +494,38 @@ int GUIInput::NotifyKey(int key, bool down)
int GUIInput::NotifyCharInput(int key)
{
- string variableValue;
-
if (HasInputFocus) {
if (key == KEYBOARD_BACKSPACE) {
//Backspace
- DataManager::GetValue(mVariable, variableValue);
- if (variableValue.size() > 0 && (mCursorLocation + skipChars != 0 || mCursorLocation == -1)) {
+ if (displayValue.size() > 0 && mCursorLocation != 0) {
if (mCursorLocation == -1) {
- variableValue.resize(variableValue.size() - 1);
+ displayValue.resize(displayValue.size() - 1);
} else {
- variableValue.erase(mCursorLocation + skipChars - 1, 1);
- if (mCursorLocation > 0)
- mCursorLocation--;
- else if (skipChars > 0)
- skipChars--;
+ displayValue.erase(mCursorLocation - 1, 1);
+ mCursorLocation--;
}
isLocalChange = true;
- DataManager::SetValue(mVariable, variableValue);
- isLocalChange = false;
-
- if (HasMask) {
- int index, string_size = variableValue.size();
- string maskedValue;
- for (index=0; index<string_size; index++)
- maskedValue += mMask;
- DataManager::SetValue(mMaskVariable, maskedValue);
- }
- HandleTextLocation(-1002);
+ DataManager::SetValue(mVariable, displayValue);
+ UpdateTextWidth();
+ HandleTextLocation(TW_INPUT_NO_UPDATE);
+ HandleCursorByText();
}
} else if (key == KEYBOARD_SWIPE_LEFT) {
// Delete all
isLocalChange = true;
if (mCursorLocation == -1) {
DataManager::SetValue (mVariable, "");
- if (HasMask)
- DataManager::SetValue(mMaskVariable, "");
+ displayValue = "";
+ textWidth = 0;
mCursorLocation = -1;
} else {
- DataManager::GetValue(mVariable, variableValue);
- variableValue.erase(0, mCursorLocation + skipChars);
- DataManager::SetValue(mVariable, variableValue);
- if (HasMask) {
- DataManager::GetValue(mMaskVariable, variableValue);
- variableValue.erase(0, mCursorLocation + skipChars);
- DataManager::SetValue(mMaskVariable, variableValue);
- }
+ displayValue.erase(0, mCursorLocation);
+ DataManager::SetValue(mVariable, displayValue);
+ UpdateTextWidth();
mCursorLocation = 0;
}
- skipChars = 0;
+ cursorX = mRenderX;
scrollingX = 0;
- mInputText->SkipCharCount(skipChars);
- isLocalChange = false;
mRendered = false;
return 0;
} else if (key >= 32) {
@@ -684,33 +536,24 @@ int GUIInput::NotifyCharInput(int key)
if (HasDisabled && DisabledList.find((char)key) != string::npos) {
return 0;
}
- DataManager::GetValue(mVariable, variableValue);
- if (MaxLen != 0 && variableValue.size() >= MaxLen) {
+ if (MaxLen != 0 && displayValue.size() >= MaxLen) {
return 0;
}
if (mCursorLocation == -1) {
- variableValue += key;
+ displayValue += key;
} else {
- variableValue.insert(mCursorLocation + skipChars, 1, key);
+ displayValue.insert(mCursorLocation, 1, key);
mCursorLocation++;
}
isLocalChange = true;
- DataManager::SetValue(mVariable, variableValue);
- HandleTextLocation(-1001);
- isLocalChange = false;
-
- if (HasMask) {
- int index, string_size = variableValue.size();
- string maskedValue;
- for (index=0; index<string_size; index++)
- maskedValue += mMask;
- DataManager::SetValue(mMaskVariable, maskedValue);
- }
+ DataManager::SetValue(mVariable, displayValue);
+ UpdateTextWidth();
+ HandleTextLocation(TW_INPUT_NO_UPDATE);
+ HandleCursorByText();
} else if (key == KEYBOARD_ACTION) {
// Action
- DataManager::GetValue(mVariable, variableValue);
if (mAction) {
- unsigned inputLen = variableValue.length();
+ unsigned inputLen = displayValue.length();
if (inputLen < MinLen)
return 0;
else if (MaxLen != 0 && inputLen > MaxLen)
diff --git a/gui/objects.hpp b/gui/objects.hpp
index 6c6fa5eb0..7913b36cb 100644
--- a/gui/objects.hpp
+++ b/gui/objects.hpp
@@ -192,8 +192,7 @@ public:
// Set maximum width in pixels
virtual int SetMaxWidth(unsigned width);
- // Set number of characters to skip (for scrolling)
- virtual int SkipCharCount(unsigned skip);
+ void SetText(string newtext);
public:
bool isHighlighted;
@@ -209,7 +208,6 @@ protected:
int mIsStatic;
int mVarChanged;
int mFontHeight;
- unsigned charSkip;
};
// GUIImage - Used for static image
@@ -1001,7 +999,10 @@ protected:
virtual int GetSelection(int x, int y);
// Handles displaying the text properly when chars are added, deleted, or for scrolling
- virtual int HandleTextLocation(int x);
+ void HandleTextLocation(int x);
+ void UpdateTextWidth();
+ void HandleCursorByTouch(int x);
+ void HandleCursorByText();
protected:
GUIText* mInputText;
@@ -1013,15 +1014,16 @@ protected:
std::string mLastValue;
std::string mVariable;
std::string mMask;
- std::string mMaskVariable;
+ std::string displayValue;
COLOR mBackgroundColor;
COLOR mCursorColor;
int scrollingX;
+ int cursorX;
int lastX;
int mCursorLocation;
int mBackgroundX, mBackgroundY, mBackgroundW, mBackgroundH;
int mFontY;
- unsigned skipChars;
+ int textWidth;
unsigned mFontHeight;
unsigned CursorWidth;
bool mRendered;
diff --git a/gui/pages.cpp b/gui/pages.cpp
index cfe306773..115d6b35d 100644
--- a/gui/pages.cpp
+++ b/gui/pages.cpp
@@ -55,9 +55,6 @@ extern "C" {
extern int gGuiRunning;
-// From ../twrp.cpp
-extern bool datamedia;
-
// From console.cpp
extern size_t last_message_count;
extern std::vector<std::string> gConsole;
@@ -621,7 +618,7 @@ int Page::NotifyCharInput(int ch)
if (ret == 0)
return 0;
else if (ret < 0)
- LOGERR("A char input handler has returned an error");
+ LOGERR("A char input handler has returned an error\n");
}
return 1;
}
@@ -637,7 +634,7 @@ int Page::SetKeyBoardFocus(int inFocus)
if (ret == 0)
return 0;
else if (ret < 0)
- LOGERR("An input focus handler has returned an error");
+ LOGERR("An input focus handler has returned an error\n");
}
return 1;
}
@@ -663,13 +660,42 @@ int Page::NotifyVarChange(std::string varName, std::string value)
return 0;
}
-PageSet::PageSet(const char* xmlFile)
+
+// transient data for loading themes
+struct LoadingContext
+{
+ ZipArchive* zip; // zip to load theme from, or NULL for the stock theme
+ std::set<std::string> filenames; // to detect cyclic includes
+ std::string basepath; // if zip is NULL, base path to load includes from with trailing slash, otherwise empty
+ std::vector<xml_document<>*> xmldocs; // all loaded xml docs
+ std::vector<char*> xmlbuffers; // text buffers with xml content
+ std::vector<xml_node<>*> styles; // refer to <styles> nodes inside xmldocs
+ std::vector<xml_node<>*> templates; // refer to <templates> nodes inside xmldocs
+
+ LoadingContext()
+ {
+ zip = NULL;
+ }
+
+ ~LoadingContext()
+ {
+ // free all xml buffers
+ for (std::vector<char*>::iterator it = xmlbuffers.begin(); it != xmlbuffers.end(); ++it)
+ free(*it);
+ }
+
+};
+
+// for FindStyle
+LoadingContext* PageManager::currentLoadingContext = NULL;
+
+
+PageSet::PageSet()
{
mResources = new ResourceManager;
mCurrentPage = NULL;
- if (!xmlFile)
- mCurrentPage = new Page(NULL, NULL);
+ set_scale_values(1, 1); // Reset any previous scaling values
}
PageSet::~PageSet()
@@ -681,6 +707,105 @@ PageSet::~PageSet()
delete mResources;
}
+int PageSet::Load(LoadingContext& ctx, const std::string& filename)
+{
+ bool isMain = ctx.xmlbuffers.empty(); // if we have no files yet, remember that this is the main XML file
+
+ if (!ctx.filenames.insert(filename).second)
+ // ignore already loaded files to prevent crash with cyclic includes
+ return 0;
+
+ // load XML into buffer
+ char* xmlbuffer = PageManager::LoadFileToBuffer(filename, ctx.zip);
+ if (!xmlbuffer)
+ return -1; // error already displayed by LoadFileToBuffer
+ ctx.xmlbuffers.push_back(xmlbuffer);
+
+ // parse XML
+ xml_document<>* doc = new xml_document<>();
+ doc->parse<0>(xmlbuffer);
+ ctx.xmldocs.push_back(doc);
+
+ xml_node<>* root = doc->first_node("recovery");
+ if (!root)
+ root = doc->first_node("install");
+ if (!root) {
+ LOGERR("Unknown root element in %s\n", filename.c_str());
+ return -1;
+ }
+
+ if (isMain) {
+ int rc = LoadDetails(ctx, root);
+ if (rc != 0)
+ return rc;
+ }
+
+ LOGINFO("Loading resources...\n");
+ xml_node<>* child = root->first_node("resources");
+ if (child)
+ mResources->LoadResources(child, ctx.zip, "theme");
+
+ LOGINFO("Loading variables...\n");
+ child = root->first_node("variables");
+ if (child)
+ LoadVariables(child);
+
+ LOGINFO("Loading mouse cursor...\n");
+ child = root->first_node("mousecursor");
+ if (child)
+ PageManager::LoadCursorData(child);
+
+ LOGINFO("Loading pages...\n");
+ child = root->first_node("templates");
+ if (child)
+ ctx.templates.push_back(child);
+
+ child = root->first_node("styles");
+ if (child)
+ ctx.styles.push_back(child);
+
+ // Load pages
+ child = root->first_node("pages");
+ if (child) {
+ if (LoadPages(ctx, child)) {
+ LOGERR("PageSet::Load returning -1\n");
+ return -1;
+ }
+ }
+
+ // process includes recursively
+ child = root->first_node("include");
+ if (child) {
+ xml_node<>* include = child->first_node("xmlfile");
+ while (include != NULL) {
+ xml_attribute<>* attr = include->first_attribute("name");
+ if (!attr) {
+ LOGERR("Skipping include/xmlfile with no name\n");
+ continue;
+ }
+
+ string filename = ctx.basepath + attr->value();
+ LOGINFO("Including file: %s...\n", filename.c_str());
+ int rc = Load(ctx, filename);
+ if (rc != 0)
+ return rc;
+
+ include = include->next_sibling("xmlfile");
+ }
+ }
+
+ return 0;
+}
+
+void PageSet::MakeEmergencyConsoleIfNeeded()
+{
+ if (mPages.empty()) {
+ mCurrentPage = new Page(NULL, NULL); // fallback console page
+ // TODO: since removal of non-TTF fonts, the emergency console doesn't work without a font, which might be missing too
+ mPages.push_back(mCurrentPage);
+ }
+}
+
int PageSet::LoadLanguage(char* languageFile, ZipArchive* package)
{
xml_document<> lang;
@@ -724,26 +849,9 @@ int PageSet::LoadLanguage(char* languageFile, ZipArchive* package)
return ret;
}
-int PageSet::Load(ZipArchive* package, char* xmlFile, char* languageFile, char* baseLanguageFile)
+int PageSet::LoadDetails(LoadingContext& ctx, xml_node<>* root)
{
- xml_document<> mDoc;
- xml_node<>* parent;
- xml_node<>* child;
- xml_node<>* xmltemplate;
- xml_node<>* xmlstyle;
-
- mDoc.parse<0>(xmlFile);
- parent = mDoc.first_node("recovery");
- if (!parent)
- parent = mDoc.first_node("install");
-
- set_scale_values(1, 1); // Reset any previous scaling values
-
- if (baseLanguageFile)
- LoadLanguage(baseLanguageFile, NULL);
-
- // Now, let's parse the XML
- child = parent->first_node("details");
+ xml_node<>* child = root->first_node("details");
if (child) {
int theme_ver = 0;
xml_node<>* themeversion = child->first_node("themeversion");
@@ -754,9 +862,8 @@ int PageSet::Load(ZipArchive* package, char* xmlFile, char* languageFile, char*
}
if (theme_ver != TW_THEME_VERSION) {
LOGINFO("theme version from xml: %i, expected %i\n", theme_ver, TW_THEME_VERSION);
- if (package) {
+ if (ctx.zip) {
gui_err("theme_ver_err=Custom theme version does not match TWRP version. Using stock theme.");
- mDoc.clear();
return TW_THEME_VER_ERR;
} else {
gui_print_color("warning", "Stock theme version does not match TWRP version.\n");
@@ -810,151 +917,6 @@ int PageSet::Load(ZipArchive* package, char* xmlFile, char* languageFile, char*
LOGINFO("XML contains no details tag, no scaling will be applied.\n");
}
- if (languageFile)
- LoadLanguage(languageFile, package);
-
- LOGINFO("Loading resources...\n");
- child = parent->first_node("resources");
- if (child)
- mResources->LoadResources(child, package, "theme");
-
- LOGINFO("Loading variables...\n");
- child = parent->first_node("variables");
- if (child)
- LoadVariables(child);
-
- LOGINFO("Loading mouse cursor...\n");
- child = parent->first_node("mousecursor");
- if(child)
- PageManager::LoadCursorData(child);
-
- LOGINFO("Loading pages...\n");
- // This may be NULL if no templates are present
- xmltemplate = parent->first_node("templates");
- if (xmltemplate)
- templates.push_back(xmltemplate);
-
- // Load styles if present
- xmlstyle = parent->first_node("styles");
- if (xmlstyle)
- styles.push_back(xmlstyle);
-
- child = parent->first_node("pages");
- if (child) {
- if (LoadPages(child)) {
- LOGERR("PageSet::Load returning -1\n");
- mDoc.clear();
- return -1;
- }
- }
-
- int ret = CheckInclude(package, &mDoc);
- mDoc.clear();
- templates.clear();
- return ret;
-}
-
-int PageSet::CheckInclude(ZipArchive* package, xml_document<> *parentDoc)
-{
- xml_node<>* par;
- xml_node<>* par2;
- xml_node<>* chld;
- xml_node<>* parent;
- xml_node<>* child;
- xml_node<>* xmltemplate;
- xml_node<>* xmlstyle;
- long len;
- char* xmlFile = NULL;
- string filename;
- xml_document<> *doc = NULL;
-
- par = parentDoc->first_node("recovery");
- if (!par) {
- par = parentDoc->first_node("install");
- }
- if (!par) {
- return 0;
- }
-
- par2 = par->first_node("include");
- if (!par2)
- return 0;
- chld = par2->first_node("xmlfile");
- while (chld != NULL) {
- xml_attribute<>* attr = chld->first_attribute("name");
- if (!attr)
- break;
-
- if (!package) {
- // We can try to load the XML directly...
- filename = TWRES;
- filename += attr->value();
- } else {
- filename += attr->value();
- }
- xmlFile = PageManager::LoadFileToBuffer(filename, package);
- if (xmlFile == NULL) {
- LOGERR("PageSet::CheckInclude unable to load '%s'\n", filename.c_str());
- return -1;
- }
-
- doc = new xml_document<>();
- doc->parse<0>(xmlFile);
-
- parent = doc->first_node("recovery");
- if (!parent)
- parent = doc->first_node("install");
-
- // Now, let's parse the XML
- LOGINFO("Loading included resources...\n");
- child = parent->first_node("resources");
- if (child)
- mResources->LoadResources(child, package, "theme");
-
- LOGINFO("Loading included variables...\n");
- child = parent->first_node("variables");
- if (child)
- LoadVariables(child);
-
- LOGINFO("Loading mouse cursor...\n");
- child = parent->first_node("mousecursor");
- if(child)
- PageManager::LoadCursorData(child);
-
- LOGINFO("Loading included pages...\n");
- // This may be NULL if no templates are present
- xmltemplate = parent->first_node("templates");
- if (xmltemplate)
- templates.push_back(xmltemplate);
-
- // Load styles if present
- xmlstyle = parent->first_node("styles");
- if (xmlstyle)
- styles.push_back(xmlstyle);
-
- child = parent->first_node("pages");
- if (child && LoadPages(child))
- {
- templates.pop_back();
- doc->clear();
- delete doc;
- free(xmlFile);
- return -1;
- }
-
- if (CheckInclude(package, doc)) {
- doc->clear();
- delete doc;
- free(xmlFile);
- return -1;
- }
- doc->clear();
- delete doc;
- free(xmlFile);
-
- chld = chld->next_sibling("xmlfile");
- }
-
return 0;
}
@@ -1089,7 +1051,7 @@ int PageSet::LoadVariables(xml_node<>* vars)
return 0;
}
-int PageSet::LoadPages(xml_node<>* pages)
+int PageSet::LoadPages(LoadingContext& ctx, xml_node<>* pages)
{
xml_node<>* child;
@@ -1099,7 +1061,7 @@ int PageSet::LoadPages(xml_node<>* pages)
child = pages->first_node("page");
while (child != NULL)
{
- Page* page = new Page(child, &templates);
+ Page* page = new Page(child, &ctx.templates);
if (page->GetName().empty())
{
LOGERR("Unable to process load page\n");
@@ -1356,10 +1318,8 @@ void PageManager::LoadLanguage(string filename) {
int PageManager::LoadPackage(std::string name, std::string package, std::string startpage)
{
- int fd;
- ZipArchive zip, *pZip = NULL;
- long len;
- char* xmlFile = NULL;
+ std::string mainxmlfilename = package;
+ ZipArchive zip;
char* languageFile = NULL;
char* baseLanguageFile = NULL;
PageSet* pageSet = NULL;
@@ -1369,6 +1329,9 @@ int PageManager::LoadPackage(std::string name, std::string package, std::string
mReloadTheme = false;
mStartPage = startpage;
+ // init the loading context
+ LoadingContext ctx;
+
// Open the XML file
LOGINFO("Loading package: %s (%s)\n", name.c_str(), package.c_str());
if (package.size() > 4 && package.substr(package.size() - 4) != ".zip")
@@ -1376,8 +1339,11 @@ int PageManager::LoadPackage(std::string name, std::string package, std::string
LOGINFO("Load XML directly\n");
tw_x_offset = TW_X_OFFSET;
tw_y_offset = TW_Y_OFFSET;
- LoadLanguageList(NULL);
- languageFile = LoadFileToBuffer(TWRES "languages/en.xml", NULL);
+ if (name != "splash") {
+ LoadLanguageList(NULL);
+ languageFile = LoadFileToBuffer(TWRES "languages/en.xml", NULL);
+ }
+ ctx.basepath = TWRES;
}
else
{
@@ -1395,26 +1361,32 @@ int PageManager::LoadPackage(std::string name, std::string package, std::string
sysReleaseMap(&map);
goto error;
}
- pZip = &zip;
- package = "ui.xml";
- LoadLanguageList(pZip);
- languageFile = LoadFileToBuffer("languages/en.xml", pZip);
+ ctx.zip = &zip;
+ mainxmlfilename = "ui.xml";
+ LoadLanguageList(ctx.zip);
+ languageFile = LoadFileToBuffer("languages/en.xml", ctx.zip);
baseLanguageFile = LoadFileToBuffer(TWRES "languages/en.xml", NULL);
}
- xmlFile = LoadFileToBuffer(package, pZip);
- if (xmlFile == NULL) {
- goto error;
- }
-
// Before loading, mCurrentSet must be the loading package so we can find resources
pageSet = mCurrentSet;
- mCurrentSet = new PageSet(xmlFile);
- ret = mCurrentSet->Load(pZip, xmlFile, languageFile, baseLanguageFile);
+ mCurrentSet = new PageSet();
+
+ if (baseLanguageFile) {
+ mCurrentSet->LoadLanguage(baseLanguageFile, NULL);
+ free(baseLanguageFile);
+ }
+
if (languageFile) {
+ mCurrentSet->LoadLanguage(languageFile, ctx.zip);
free(languageFile);
- languageFile = NULL;
}
+
+ // Load and parse the XML and all includes
+ currentLoadingContext = &ctx; // required to find styles
+ ret = mCurrentSet->Load(ctx, mainxmlfilename);
+ currentLoadingContext = NULL;
+
if (ret == 0) {
mCurrentSet->SetPage(startpage);
mPageSets.insert(std::pair<std::string, PageSet*>(name, mCurrentSet));
@@ -1423,25 +1395,21 @@ int PageManager::LoadPackage(std::string name, std::string package, std::string
LOGERR("Package %s failed to load.\n", name.c_str());
}
+ // reset to previous pageset
mCurrentSet = pageSet;
- if (pZip) {
- mzCloseZipArchive(pZip);
+ if (ctx.zip) {
+ mzCloseZipArchive(ctx.zip);
sysReleaseMap(&map);
}
- free(xmlFile);
- if (languageFile)
- free(languageFile);
return ret;
error:
// Sometimes we get here without a real error
- if (pZip) {
- mzCloseZipArchive(pZip);
+ if (ctx.zip) {
+ mzCloseZipArchive(ctx.zip);
sysReleaseMap(&map);
}
- if (xmlFile)
- free(xmlFile);
return -1;
}
@@ -1466,6 +1434,7 @@ PageSet* PageManager::SelectPackage(std::string name)
if (tmp)
{
mCurrentSet = tmp;
+ mCurrentSet->MakeEmergencyConsoleIfNeeded();
mCurrentSet->NotifyVarChange("", "");
}
else
@@ -1620,7 +1589,13 @@ HardwareKeyboard *PageManager::GetHardwareKeyboard()
xml_node<>* PageManager::FindStyle(std::string name)
{
- for (std::vector<xml_node<>*>::iterator itr = mCurrentSet->styles.begin(); itr != mCurrentSet->styles.end(); itr++) {
+ if (!currentLoadingContext)
+ {
+ LOGERR("FindStyle works only while loading a theme.\n");
+ return NULL;
+ }
+
+ for (std::vector<xml_node<>*>::iterator itr = currentLoadingContext->styles.begin(); itr != currentLoadingContext->styles.end(); itr++) {
xml_node<>* node = (*itr)->first_node("style");
while (node) {
diff --git a/gui/pages.hpp b/gui/pages.hpp
index 927f3fc01..4bfd5b0e5 100644
--- a/gui/pages.hpp
+++ b/gui/pages.hpp
@@ -88,16 +88,18 @@ protected:
bool ProcessNode(xml_node<>* page, std::vector<xml_node<>*> *templates, int depth);
};
+struct LoadingContext;
+
class PageSet
{
public:
- PageSet(const char* xmlFile);
+ PageSet();
virtual ~PageSet();
public:
+ int Load(LoadingContext& ctx, const std::string& filename);
int LoadLanguage(char* languageFile, ZipArchive* package);
- int Load(ZipArchive* package, char* xmlFile, char* languageFile, char* baseLanguageFile);
- int CheckInclude(ZipArchive* package, xml_document<> *parentDoc);
+ void MakeEmergencyConsoleIfNeeded();
Page* FindPage(std::string name);
int SetPage(std::string page);
@@ -117,17 +119,16 @@ public:
int SetKeyBoardFocus(int inFocus);
int NotifyVarChange(std::string varName, std::string value);
- std::vector<xml_node<>*> styles;
void AddStringResource(std::string resource_source, std::string resource_name, std::string value);
protected:
- int LoadPages(xml_node<>* pages);
+ int LoadDetails(LoadingContext& ctx, xml_node<>* root);
+ int LoadPages(LoadingContext& ctx, xml_node<>* pages);
int LoadVariables(xml_node<>* vars);
protected:
ResourceManager* mResources;
std::vector<Page*> mPages;
- std::vector<xml_node<>*> templates;
Page* mCurrentPage;
std::vector<Page*> mOverlays; // Special case for popup dialogs and the lock screen
};
@@ -187,6 +188,7 @@ protected:
static HardwareKeyboard *mHardwareKeyboard;
static bool mReloadTheme;
static std::string mStartPage;
+ static LoadingContext* currentLoadingContext;
};
#endif // _PAGES_HEADER_HPP
diff --git a/gui/resources.cpp b/gui/resources.cpp
index e7611dd9f..9c97dad18 100644
--- a/gui/resources.cpp
+++ b/gui/resources.cpp
@@ -54,24 +54,27 @@ int Resource::ExtractResource(ZipArchive* pZip, std::string folderName, std::str
return ret;
}
-void Resource::LoadImage(ZipArchive* pZip, std::string file, gr_surface* source)
+void Resource::LoadImage(ZipArchive* pZip, std::string file, gr_surface* surface)
{
+ int rc = 0;
if (ExtractResource(pZip, "images", file, ".png", TMP_RESOURCE_NAME) == 0)
{
- res_create_surface(TMP_RESOURCE_NAME, source);
+ rc = res_create_surface(TMP_RESOURCE_NAME, surface);
unlink(TMP_RESOURCE_NAME);
}
else if (ExtractResource(pZip, "images", file, "", TMP_RESOURCE_NAME) == 0)
{
// JPG includes the .jpg extension in the filename so extension should be blank
- res_create_surface(TMP_RESOURCE_NAME, source);
+ rc = res_create_surface(TMP_RESOURCE_NAME, surface);
unlink(TMP_RESOURCE_NAME);
}
else if (!pZip)
{
// File name in xml may have included .png so try without adding .png
- res_create_surface(file.c_str(), source);
+ rc = res_create_surface(file.c_str(), surface);
}
+ if (rc != 0)
+ LOGINFO("Failed to load image from %s%s, error %d\n", file.c_str(), pZip ? " (zip)" : "", rc);
}
void Resource::CheckAndScaleImage(gr_surface source, gr_surface* destination, int retain_aspect)
@@ -122,7 +125,6 @@ void FontResource::LoadFont(xml_node<>* node, ZipArchive* pZip)
if(file.size() >= 4 && file.compare(file.size()-4, 4, ".ttf") == 0)
{
- m_type = TYPE_TTF;
int font_size = 0;
if (origFontSize != 0) {
@@ -144,10 +146,11 @@ void FontResource::LoadFont(xml_node<>* node, ZipArchive* pZip)
if(attr)
dpi = atoi(attr->value());
- if (ExtractResource(pZip, "fonts", file, "", TMP_RESOURCE_NAME) == 0)
+ // we can't use TMP_RESOURCE_NAME here because the ttf subsystem is caching the name and scaling needs to reload the font
+ std::string tmpname = "/tmp/" + file;
+ if (ExtractResource(pZip, "fonts", file, "", tmpname) == 0)
{
- mFont = gr_ttf_loadFont(TMP_RESOURCE_NAME, font_size, dpi);
- unlink(TMP_RESOURCE_NAME);
+ mFont = gr_ttf_loadFont(tmpname.c_str(), font_size, dpi);
}
else
{
diff --git a/gui/resources.hpp b/gui/resources.hpp
index 4548c10b4..528fecc14 100644
--- a/gui/resources.hpp
+++ b/gui/resources.hpp
@@ -29,21 +29,13 @@ private:
protected:
static int ExtractResource(ZipArchive* pZip, std::string folderName, std::string fileName, std::string fileExtn, std::string destFile);
- static void LoadImage(ZipArchive* pZip, std::string file, gr_surface* source);
+ static void LoadImage(ZipArchive* pZip, std::string file, gr_surface* surface);
static void CheckAndScaleImage(gr_surface source, gr_surface* destination, int retain_aspect);
};
class FontResource : public Resource
{
public:
- enum Type
- {
- TYPE_TWRP,
-#ifndef TW_DISABLE_TTF
- TYPE_TTF,
-#endif
- };
-
FontResource(xml_node<>* node, ZipArchive* pZip);
virtual ~FontResource();
@@ -54,7 +46,6 @@ public:
protected:
void* mFont;
- Type m_type;
private:
void LoadFont(xml_node<>* node, ZipArchive* pZip);
diff --git a/gui/text.cpp b/gui/text.cpp
index 6498af62c..49e27a104 100644
--- a/gui/text.cpp
+++ b/gui/text.cpp
@@ -1,3 +1,21 @@
+/*
+ Copyright 2012 to 2016 bigbiff/Dees_Troy TeamWin
+ This file is part of TWRP/TeamWin Recovery Project.
+
+ TWRP is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ TWRP is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with TWRP. If not, see <http://www.gnu.org/licenses/>.
+*/
+
// text.cpp - GUIText object
#include <stdarg.h>
@@ -33,7 +51,6 @@ GUIText::GUIText(xml_node<>* node)
mVarChanged = 0;
mFontHeight = 0;
maxWidth = 0;
- charSkip = 0;
scaleWidth = true;
isHighlighted = false;
mText = "";
@@ -94,22 +111,18 @@ int GUIText::Render(void)
return -1;
mLastValue = gui_parse_text(mText);
- string displayValue = mLastValue;
-
- if (charSkip)
- displayValue.erase(0, charSkip);
mVarChanged = 0;
int x = mRenderX, y = mRenderY;
- int width = gr_ttf_measureEx(displayValue.c_str(), fontResource);
+ int width = gr_ttf_measureEx(mLastValue.c_str(), fontResource);
if (isHighlighted)
gr_color(mHighlightColor.red, mHighlightColor.green, mHighlightColor.blue, mHighlightColor.alpha);
else
gr_color(mColor.red, mColor.green, mColor.blue, mColor.alpha);
- gr_textEx_scaleW(mRenderX, mRenderY, displayValue.c_str(), fontResource, maxWidth, mPlacement, scaleWidth);
+ gr_textEx_scaleW(mRenderX, mRenderY, mLastValue.c_str(), fontResource, maxWidth, mPlacement, scaleWidth);
return 0;
}
@@ -164,13 +177,13 @@ int GUIText::NotifyVarChange(const std::string& varName, const std::string& valu
int GUIText::SetMaxWidth(unsigned width)
{
maxWidth = width;
+ if (!maxWidth)
+ scaleWidth = false;
mVarChanged = 1;
return 0;
}
-int GUIText::SkipCharCount(unsigned skip)
+void GUIText::SetText(string newtext)
{
- charSkip = skip;
- mVarChanged = 1;
- return 0;
+ mText = newtext;
}
diff --git a/gui/theme/common/languages/hu.xml b/gui/theme/common/languages/hu.xml
index 718dd172e..8f88751d6 100644
--- a/gui/theme/common/languages/hu.xml
+++ b/gui/theme/common/languages/hu.xml
@@ -2,6 +2,7 @@
<!--Generated by crowdin.com-->
<language>
<display>Hungarian</display>
+
<resources>
<!-- Font overrides - only change these if your language requires special characters -->
<resource name="font_l" type="fontoverride" filename="RobotoCondensed-Regular.ttf" scale="100" />
@@ -9,6 +10,7 @@
<resource name="font_s" type="fontoverride" filename="RobotoCondensed-Regular.ttf" scale="100" />
<resource name="fixed" type="fontoverride" filename="DroidSansMono.ttf" scale="100" />
+ <!-- Partition display names -->
<string name="system">Rendszer</string>
<string name="system_image">Rendszerkép</string>
<string name="vendor">Gyártó</string>
@@ -23,9 +25,12 @@
<string name="usbotg">USB OTG</string>
<string name="android_secure">Android Secure</string>
<string name="dalvik">Dalvik / ART-gyorsítótár</string>
+ <!-- This is a rarely used partition on a Micro SD card for a very old app2sd system -->
<string name="sdext">SD-EXT</string>
<string name="adopted_data">Adoptált adatok</string>
<string name="adopted_storage">Adoptált tároló</string>
+
+ <!-- GUI XML strings -->
<string name="twrp_header">Team Win Recovery Project</string>
<string name="twrp_watch_header">TWRP %tw_version%</string>
<string name="cpu_temp">CPU: %tw_cpu_temp% °C</string>
@@ -43,6 +48,7 @@
<string name="tab_screen">KÉPERNYŐ</string>
<string name="tab_vibration">REZGÉS</string>
<string name="tab_language">NYELV</string>
+
<string name="install_btn">Telepítés</string>
<string name="wipe_btn">Törlés</string>
<string name="backup_btn">Biztonsági mentés</string>
@@ -144,7 +150,8 @@
<string name="format_data_wtc2">mentését és médiáját. Nem lehet visszavonni.</string>
<string name="format_data_undo">Ezt nem lehet visszavonni.</string>
<string name="format_data_complete">Adatok formázása kész</string>
- <string name="yes_continue">Folytatáshoz gépelje be: igen. Nyomja meg a vissza gombot a megszakításhoz.</string>
+ <!-- Translator note: the word "yes" must remain English! -->
+ <string name="yes_continue">Folytatáshoz gépelje be: yes. Nyomja meg a vissza gombot a megszakításhoz.</string>
<string name="part_opt_hdr">Partíció lehetőségei: %tw_partition_name%</string>
<string name="sel_act_hdr">Válasszon műveletet</string>
<string name="file_sys_opt">Fájlrendszer beállítások</string>
@@ -234,7 +241,7 @@
<string name="restore_sel_part">Válassza ki a visszaállítandó partíciókat:</string>
<string name="restore_enable_md5_chk">A biztonsági mentési fájlok MD5 ellenőrzésének engedélyezése</string>
<string name="restore_complete">Mentés helyreállítása kész</string>
- <string name="swipe_restore">Csúsztasson a visszaállítshoz</string>
+ <string name="swipe_restore">Csúsztasson a visszaállításhoz</string>
<string name="swipe_restore_s"> Visszaállítás</string>
<string name="rename_backup_hdr">Biztonsági mentés átnevezése</string>
<string name="rename_backup_confirm">Biztonsági mentés átnevezése?</string>
@@ -300,6 +307,8 @@
<string name="settings_language_btn">Nyelv</string>
<string name="time_zone_hdr">Időzóna</string>
<string name="sel_tz_list">Időzóna választása:</string>
+ <!-- Translator note: if it does not make sense to translate the locations or if it makes more sense,
+ feel free to change the location listed or drop the location entirely and just call it UTC -6 -->
<string name="utcm11">(UTC-11) Szamoa, Midway-szigetek</string>
<string name="utcm10">(UTC-10) Hawaii</string>
<string name="utcm9">(UTC-9) Alaszka</string>
@@ -356,6 +365,7 @@
<string name="copy_log_confirm">Napló másolása SD-kártyára?</string>
<string name="copying_log">Napló másolása az SD-kártyára...</string>
<string name="copy_log_complete">Napló másolása kész</string>
+ <string name="fix_context_btn">Kontextus javítása</string>
<string name="part_sd_btn">SD-kártya particionálása</string>
<string name="part_sd_s_btn">SD-kártya</string>
<string name="file_manager_btn">Fájlkezelő</string>
@@ -427,6 +437,8 @@
<string name="decrypt_data_hdr">Adat dekódolása</string>
<string name="decrypt_data_enter_pass">Adja meg a jelszót.</string>
<string name="decrypt_data_enter_pattern">Adja meg a mintát.</string>
+ <string name="decrypt_data_failed">Helytelen jelszó, próbálja újra!</string>
+ <string name="decrypt_data_failed_pattern">Helytelen minta, próbálja újra!</string>
<string name="decrypt_data_trying">Dekódolás megpróbálása</string>
<string name="term_hdr">Terminál parancs</string>
<string name="term_s_hdr">Terminál</string>
@@ -440,6 +452,14 @@
<string name="sideload_confirm">ADB Sideload</string>
<string name="sideload_usage">Használat: adb sideload fájlnév.zip</string>
<string name="sideload_complete">ADB Sideload kész</string>
+ <string name="fix_contexts_hdr">Kontextus javítása</string>
+ <string name="fix_contexts_note1">Megjegyzés: kontextus javítására ritkán van szükség.</string>
+ <string name="fix_contexts_note2">SELinux kontextus javítása a készülék</string>
+ <string name="fix_contexts_note3">nem megfelelő elindulását okozhatja.</string>
+ <string name="swipe_to_fix_contexts">Csúsztasson a kontextus javításához</string>
+ <string name="swipe_fix_contexts"> Kontextus javítása</string>
+ <string name="fixing_contexts">Kontextus javítása...</string>
+ <string name="fix_contexts_complete">Kontextus javítása kész</string>
<string name="reboot_hdr">Újraindítás</string>
<string name="su_hdr">SuperSU ellenőrzés</string>
<string name="su_note1">A készüléke nem tűnik rootoltnak.</string>
@@ -451,6 +471,8 @@
<string name="su_installing">SuperSU telepítése</string>
<string name="sel_storage_list">Válasszon tárolót</string>
<string name="ok_btn">OK</string>
+
+ <!-- Various console messages - these consist of user displayed messages, oftentimes errors -->
<string name="no_kernel_selinux">Kernel nem támogatja a SELinux összefüggések olvasását.</string>
<string name="full_selinux">Teljes SELinux támogatás jelen van.</string>
<string name="no_selinux">Nincs SELinux támogatás (nincs libselinux).</string>
@@ -459,6 +481,7 @@
<string name="decrypt_success">Sikeresen visszafejtve az alapértelmezett jelszóval.</string>
<string name="unable_to_decrypt">Visszafejtés sikertelen az alapértelmezett jelszóval. Szükség lehet az adatok formázására.</string>
<string name="generating_md51">MD5 generálása</string>
+ <!-- Message displayed during a backup if we are generating an MD5, ideally, leave the leading " * " to help align and separate this text from other console text -->
<string name="generating_md52"> * MD5 generálása...</string>
<string name="md5_created"> * MD5 létrehozva.</string>
<string name="md5_error"> * MD5 hiba!</string>
@@ -481,6 +504,8 @@
<string name="backup_completed">[BIZTONSÁGI MENTÉS KÉSZ {1} MÁSODPERC ALATT]</string>
<string name="restore_started">[VISSZAÁLLÍTÁS ELINDÍTVA]</string>
<string name="restore_folder">Mappa visszaállítása: \'{1}\'</string>
+ <!-- {1} is the partition display name and {2} is the number of seconds -->
+ <string name="restore_part_done">[{1} kész ({2} másodperc)]</string>
<string name="verifying_md5">MD5 ellenőrzése</string>
<string name="skip_md5">MD5 ellenőrzés átugrása felhasználói beállítás alapján.</string>
<string name="calc_restore">Visszaállítási részletek számítása...</string>
@@ -491,6 +516,7 @@
<string name="total_restore_size">Teljes visszaállítás mérete: {1}MB</string>
<string name="updating_system_details">Rendszer részleteinek frissítése</string>
<string name="restore_completed">[VISSZAÁLLÍTÁS BEFEJEZŐDÖTT {1} MÁSODPERC ALATT]</string>
+ <!-- {1} is the path we could not open, {2} is strerror output -->
<string name="error_opening_strerr">Megnyitási hiba: \'{1}\' ({2})</string>
<string name="unable_locate_part_backup_name">Nem található partíció a biztonsági mentés neve alapján: \'{1}\'</string>
<string name="unable_find_part_path">Nem található partíció a(z) \'{1}\' elérési útnak</string>
@@ -534,8 +560,11 @@
<string name="repairing_using">{1} javítása {2} segítségével...</string>
<string name="unable_repair">{1} nem javítható.</string>
<string name="mount_data_footer">Nem sikerült csatolni az /adat partíciót és a titkosítási lábléc sem található.</string>
+ <!-- {1} is the folder name that we could not create, {2} is strerror output -->
<string name="create_folder_strerr">\'{1}\' mappa létrehozása sikertelen ({2}).</string>
+ <!-- {1} is the folder name that we could not mount, {2} is strerror output -->
<string name="fail_mount">\'{1}\' csatolása sikertlelen ({2})</string>
+ <!-- {1} is the folder name that we could not unmount, {2} is strerror output -->
<string name="fail_unmount">\'{1}\' leválasztása sikertlelen ({2})</string>
<string name="cannot_resize">{1} átméretezése sikertelen.</string>
<string name="repair_resize">{1} javítása az átméretezés előtt.</string>
@@ -611,6 +640,7 @@
<string name="backup_error">Hiba a biztonsági mentés létrehozásakor.</string>
<string name="restore_error">Hiba a visszaállítási folyamat közben.</string>
<string name="split_thread">{1} szálazonosító tördelése {2} archívumba</string>
+ <!-- These 2 items are saved in the data manager instead of resource manager, so %llu, etc is correct instead of {1} -->
<string name="file_progress">%llu / %llu fájl, %i%%</string>
<string name="size_progress">%lluMB / %lluMB, %i%%</string>
<string name="decrypt_cmd">Adatpartíció visszafejtésének megpróbálása parancssor segítségével.</string>
@@ -635,5 +665,6 @@
<string name="cancel_sideload">ADB sideload megszakítva...</string>
<string name="change_fs_err">Fájlrendszer módosítási hiba.</string>
<string name="theme_ver_err">Egyéni téma verziója nem egyezik a TWRP verziójával. Gyári téma használata.</string>
+ <string name="up_a_level">(Egy szinttel feljebb)</string>
</resources>
</language>
diff --git a/gui/theme/common/languages/it.xml b/gui/theme/common/languages/it.xml
new file mode 100644
index 000000000..04187ef94
--- /dev/null
+++ b/gui/theme/common/languages/it.xml
@@ -0,0 +1,670 @@
+<?xml version="1.0"?>
+
+<language>
+ <display>Italiano</display>
+
+ <resources>
+ <!-- Font overrides - only change these if your language requires special characters -->
+ <resource name="font_l" type="fontoverride" filename="RobotoCondensed-Regular.ttf" scale="100" />
+ <resource name="font_m" type="fontoverride" filename="RobotoCondensed-Regular.ttf" scale="100" />
+ <resource name="font_s" type="fontoverride" filename="RobotoCondensed-Regular.ttf" scale="100" />
+ <resource name="fixed" type="fontoverride" filename="DroidSansMono.ttf" scale="100" />
+
+ <!-- Partition display names -->
+ <string name="system">System</string>
+ <string name="system_image">Immagine System</string>
+ <string name="vendor">Vendor</string>
+ <string name="vendor_image">Immagine Vendor</string>
+ <string name="boot">Boot</string>
+ <string name="recovery">Recovery</string>
+ <string name="cache">Cache</string>
+ <string name="data">Data</string>
+ <string name="sdcard">SDCard</string>
+ <string name="internal">Archivio interno</string>
+ <string name="microsd">Micro SD</string>
+ <string name="usbotg">USB OTG</string>
+ <string name="android_secure">Android Secure</string>
+ <string name="dalvik">Dalvik / ART Cache</string>
+ <!-- This is a rarely used partition on a Micro SD card for a very old app2sd system -->
+ <string name="sdext">SD-EXT</string>
+ <string name="adopted_data">Data annessa</string>
+ <string name="adopted_storage">Archivio annesso</string>
+
+ <!-- GUI XML strings -->
+ <string name="twrp_header">Team Win Recovery Project</string>
+ <string name="twrp_watch_header">TWRP %tw_version%</string>
+ <string name="cpu_temp">CPU: %tw_cpu_temp% &#xB0;C</string>
+ <string name="battery_pct">Batteria: %tw_battery%</string>
+ <string name="sort_by_name">Ordina per Nome</string>
+ <string name="sort_by_date">Ordina per Data</string>
+ <string name="sort_by_size">Ordina per Dimensione</string>
+ <string name="sort_by_name_only">Nome</string>
+ <string name="sort_by_date_only">Data</string>
+ <string name="sort_by_size_only">Dimensione</string>
+ <string name="tab_general">GENERALE</string>
+ <string name="tab_options">OPZIONI</string>
+ <string name="tab_backup">BACKUP</string>
+ <string name="tab_time_zone">FUSO ORARIO</string>
+ <string name="tab_screen">SCHERMO</string>
+ <string name="tab_vibration">VIBRAZIONE</string>
+ <string name="tab_language">LINGUA</string>
+
+ <string name="install_btn">Installa</string>
+ <string name="wipe_btn">Pulisci</string>
+ <string name="backup_btn">Backup</string>
+ <string name="restore_btn">Ripristina</string>
+ <string name="mount_btn">Monta</string>
+ <string name="settings_btn">Impostazioni</string>
+ <string name="advanced_btn">Avanzate</string>
+ <string name="reboot_btn">Riavvia</string>
+ <string name="files_btn">File</string>
+ <string name="copy_log_btn">Copia Log</string>
+ <string name="select_type_hdr">Scegli tipologia</string>
+ <string name="install_zip_hdr">Installa Zip</string>
+ <string name="install_zip_btn">Installa Zip</string>
+ <string name="install_image_hdr">Installa Immagine</string>
+ <string name="install_image_btn">Installa Immagine</string>
+ <string name="install_select_file_hdr">Seleziona il file</string>
+ <string name="file_selector_folders_hdr">Cartelle</string>
+ <string name="select_file_from_storage">Seleziona il file da %tw_storage_display_name% (%tw_storage_free_size% MB)</string>
+ <string name="adb_sideload_btn">ADB Sideload</string>
+ <string name="install_hdr">Installa</string>
+ <string name="select_storage_hdr">Scegli archivio</string>
+ <string name="select_storage_btn">Scegli archivio</string>
+ <string name="queue_hdr">Coda</string>
+ <string name="zip_queue_count">%tw_zip_queue_count% file accodati su un max di 10</string>
+ <string name="zip_queue_count_s">File %tw_zip_queue_count% di 10:</string>
+ <string name="zip_warn1">Questa operazione potrebbe installare software</string>
+ <string name="zip_warn2">incompatibile e rendere il tuo dispositivo inutilizzabile.</string>
+ <string name="zip_back_cancel">Premi indietro per annullare la selezione di questo file.</string>
+ <string name="zip_back_clear">Premi indietro per eliminare la coda di Zip.</string>
+ <string name="folder">Cartella:</string>
+ <string name="file">File:</string>
+ <string name="zip_sig_chk">Verifica della firma del file Zip</string>
+ <string name="inject_twrp_chk">Esegui TWRP Inject dopo l'installazione</string>
+ <string name="options_hdr">Opzioni</string>
+ <string name="confirm_flash_hdr">Conferma installazione</string>
+ <string name="zip_queue">Coda:</string>
+ <string name="options">Opzioni:</string>
+ <string name="swipe_confirm"> Conferma</string>
+ <string name="zip_add_btn">Aggiungi altri Zip</string>
+ <string name="zip_clear_btn">Elimina la coda di Zip</string>
+ <string name="install_zip_count_hdr">Installazione Zip %tw_zip_index% di %tw_zip_queue_count%</string>
+ <string name="installing_zip_xml">Installazione Zip %tw_file% in corso...</string>
+ <string name="failed">Operazione fallita</string>
+ <string name="successful">Operazione riuscita</string>
+ <string name="install_failed">Installazione fallita</string>
+ <string name="install_successful">Installazione riuscita</string>
+ <string name="wipe_cache_dalvik_btn">Pulisci Cache/Dalvik</string>
+ <string name="reboot_system_btn">Riavvia sistema</string>
+ <string name="install_sel_target">Scegli partizione</string>
+ <string name="flash_image_select">Scegli la partizione su cui installare:</string>
+ <string name="target_partition">Partizione scelta:</string>
+ <string name="flashing_image">Installazione Immagine...</string>
+ <string name="image_flashed">Immagine installata</string>
+ <string name="wipe_cache_dalvik_confirm">Pulire Cache &amp; Dalvik?</string>
+ <string name="wiping_cache_dalvik">Pulizia Cache &amp; Dalvik...</string>
+ <string name="wipe_cache_dalvik_complete">Pulizia Cache &amp; Dalvik completata</string>
+ <string name="swipe_wipe">Scorri per pulire</string>
+ <string name="swipe_wipe_s"> Pulisci</string>
+ <string name="no_os1">Nessun SO installato. Sei</string>
+ <string name="no_osrb">certo di voler riavviare?</string>
+ <string name="no_ospo">certo di voler spegnere?</string>
+ <string name="rebooting">Riavvio...</string>
+ <string name="swipe_reboot">Scorri per riavviare</string>
+ <string name="swipe_reboot_s"> Riavvia</string>
+ <string name="swipe_flash">Scorri per installare</string>
+ <string name="confirm_action">Conferma l'azione</string>
+ <string name="back_cancel">Premi indietro per annullare.</string>
+ <string name="cancel_btn">Annulla</string>
+ <string name="wipe_hdr">Pulizia</string>
+ <string name="factory_reset_hdr">Reset di fabbrica</string>
+ <string name="factory_reset_btn">Reset di fabbrica</string>
+ <string name="factory_reset1">Data, Cache e Dalvik saranno puliti</string>
+ <string name="factory_reset2">(l'archivio interno sarà escluso)</string>
+ <string name="factory_reset3">La maggior parte delle volte, questo</string>
+ <string name="factory_reset4">sarà l'unico tipo di pulizia necessario.</string>
+ <string name="factory_resetting">Reset in corso...</string>
+ <string name="advanced_wipe_hdr">Pulizia avanzata</string>
+ <string name="advanced_wipe_btn">Pulizia avanzata</string>
+ <string name="wipe_enc_confirm">Eliminare la crittografia da Data?</string>
+ <string name="formatting_data">Formattazione di Data in corso...</string>
+ <string name="swipe_format_data">Scorri per formattare Data...</string>
+ <string name="swipe_format_data_s"> Formattazione Data</string>
+ <string name="factory_reset_complete">Reset di fabbrica completato</string>
+ <string name="sel_part_hdr">Selezione partizioni</string>
+ <string name="wipe_sel_confirm">Pulire questa(e) partizione(i)?</string>
+ <string name="wiping_part">Pulizia partizione(i) in corso...</string>
+ <string name="wipe_complete">Pulizia completata</string>
+ <string name="sel_part_wipe">Scegli le partizioni da pulire:</string>
+ <string name="invalid_part_sel">Scelta non valida</string>
+ <string name="format_data_hdr">Formattazione Data</string>
+ <string name="format_data_btn">Formatta Data</string>
+ <string name="format_data_ptr1">Formattare Data eliminerà tutte le tue app,</string>
+ <string name="format_data_ptr2">backup, immagini, video e file. Inoltre, la</string>
+ <string name="format_data_ptr3">crittografia dell'archivio interno sarà rimossa.</string>
+ <string name="format_data_adopted">Includi Archivio annesso</string>
+ <string name="format_data_lcp1">Formattare Data eliminerà tutte le app, backup, immagini, video e file.</string>
+ <string name="format_data_lcp2">Inoltre, la crittografia dell'archivio interno sarà rimossa.</string>
+ <string name="format_data_wtc1">Formattare Data eliminerà tutte le tue app,</string>
+ <string name="format_data_wtc2">backup e file. L'operazione è irreversibile.</string>
+ <string name="format_data_undo">L'operazione è irreversibile.</string>
+ <string name="format_data_complete">Formattazione di Data completata</string>
+ <!-- Translator note: the word "yes" must remain English! -->
+ <string name="yes_continue">Scrivi yes per continuare. Premi indietro per annullare.</string>
+ <string name="part_opt_hdr">Opzioni partizione per: %tw_partition_name%</string>
+ <string name="sel_act_hdr">Scegli azione</string>
+ <string name="file_sys_opt">Opzioni filesystem</string>
+ <string name="partition">Partizione: %tw_partition_name%</string>
+ <string name="part_mount_point">Punto di montaggio: %tw_partition_mount_point%</string>
+ <string name="part_curr_fs">Filesystem: %tw_partition_file_system%</string>
+ <string name="part_present_yes">Presente: Sì</string>
+ <string name="part_present_no">Presente: No</string>
+ <string name="part_removable_yes">Rimovibile: Sì</string>
+ <string name="part_removable_no">Rimovibile: No</string>
+ <string name="part_size">Dimensione: %tw_partition_size%MB</string>
+ <string name="part_used">Utilizzati: %tw_partition_used%MB</string>
+ <string name="part_free">Liberi: %tw_partition_free%MB</string>
+ <string name="part_backup_size">Dimensione backup: %tw_partition_backup_size%MB</string>
+ <string name="resize_btn">Ridimensiona filesystem</string>
+ <string name="resize_btn_s">Ridimensiona</string>
+ <string name="resize_confirm">Ridimensionare %tw_partition_name%?</string>
+ <string name="resizing">Ridimensionamento in corso...</string>
+ <string name="resize_complete">Ridimensionamento completato</string>
+ <string name="swipe_resize">Scorri per ridimensionare</string>
+ <string name="swipe_resize_s"> Ridimensiona</string>
+ <string name="repair_btn">Ripara filesystem</string>
+ <string name="repair_btn_s">Ripara</string>
+ <string name="repair_confirm">Riparare %tw_partition_name%?</string>
+ <string name="repairing">Riparazione in corso...</string>
+ <string name="repair_complete">Riparazione completata</string>
+ <string name="swipe_repair">Scorri per riparare</string>
+ <string name="swipe_repair_s"> Ripara</string>
+ <string name="change_fs_btn">Cambia filesystem</string>
+ <string name="change_fs_btn_s">Cambia</string>
+ <string name="change_fs_for_hdr">Cambia il filesystem di: %tw_partition_name%</string>
+ <string name="change_fs_for_hdr_s">Partizione: %tw_partition_name% &gt; Scegli filesystem</string>
+ <string name="change_fs_warn1">Alcune ROM o kernel non supportano determinati</string>
+ <string name="change_fs_warn2">filesystem. Procedi con cautela!</string>
+ <string name="change_fs_confirm">Modificare %tw_partition_name%?</string>
+ <string name="formatting">Formattazione in corso...</string>
+ <string name="format_complete">Formattazione completata</string>
+ <string name="swipe_change_fs">Scorri per modificare</string>
+ <string name="swipe_change_s"> Modifica</string>
+ <string name="back_btn">Indietro</string>
+ <string name="wipe_enc_btn">Elimina crittografia</string>
+ <string name="swipe_factory_reset">Scorri per eseguire reset di fabbrica</string>
+ <string name="repair_change_btn">Ripara o Modifica filesystem</string>
+ <string name="storage_hdr">Archivio: %tw_storage_display_name% (%tw_storage_free_size% MB)</string>
+ <string name="backup_hdr">Backup</string>
+ <string name="backup_confirm_hdr">Conferma Backup</string>
+ <string name="encryption_tab">CRITTOGRAFIA</string>
+ <string name="encryption">Crittografia:</string>
+ <string name="name">Nome:</string>
+ <string name="sel_part_backup">Seleziona le partizioni di cui eseguire un Backup:</string>
+ <string name="storage">Archivio:</string>
+ <string name="enc_disabled">disabilitata - imposta una password per abilitarla</string>
+ <string name="enc_enabled">abilitata</string>
+ <string name="enable_backup_comp_chk">Abilita compressione</string>
+ <string name="skip_md5_backup_chk">Salta la generazione di MD5 durante il backup</string>
+ <string name="disable_backup_space_chk">Disabilita controllo dello spazio libero</string>
+ <string name="refresh_sizes_btn">Aggiorna dimensioni</string>
+ <string name="swipe_backup">Scorri per eseguire il backup</string>
+ <string name="append_date_btn">Includi la data</string>
+ <string name="backup_name_exists">Esiste già un backup con lo stesso nome!</string>
+ <string name="encrypt_backup">Crittografare il backup?</string>
+ <string name="enter_pass">Inserisci una password:</string>
+ <string name="enter_pass2">Inserisci nuovamente la password:</string>
+ <string name="pass_not_match">Le password non corrispondono!</string>
+ <string name="partitions">Partizioni:</string>
+ <string name="disabled">Disabilitato</string>
+ <string name="enabled">Abilitato</string>
+ <string name="backup_name_hdr">Imposta nome backup</string>
+ <string name="progress">Avanzamento:</string>
+ <string name="backup_complete">Backup completato</string>
+ <string name="restore_hdr">Ripristina backup</string>
+ <string name="sel_backup_hdr">Scegli backup</string>
+ <string name="restore_sel_store_hdr">Seleziona un backup da %tw_storage_display_name% (%tw_storage_free_size% MB)</string>
+ <string name="restore_sel_pack_fs">Scegli i contenuti da ripristinare:</string>
+ <string name="restore_enc_backup_hdr">Backup crittografato</string>
+ <string name="restore_dec_fail">Password errata! Riprova.</string>
+ <string name="del_backup_btn">Elimina backup</string>
+ <string name="del_backup_confirm">Eliminare il backup?</string>
+ <string name="del_backup_confirm2">L'operazione è irreversibile!</string>
+ <string name="deleting_backup">Eliminazione backup in corso...</string>
+ <string name="backup_deleted">Eliminazione backup completata</string>
+ <string name="swipe_delete">Scorri per eliminare</string>
+ <string name="swipe_delete_s"> Elimina</string>
+ <string name="restore_try_decrypt">Backup crittografato - tentativo di decriptazione</string>
+ <string name="restore_try_decrypt_s">Tentativo di decriptazione</string>
+ <string name="restore_backup_date">Backup creato il %tw_restore_file_date%</string>
+ <string name="restore_sel_part">Seleziona le partizioni da ripristinare:</string>
+ <string name="restore_enable_md5_chk">Abilita verifica MD5</string>
+ <string name="restore_complete">Ripristino completato</string>
+ <string name="swipe_restore">Scorri per ripristinare</string>
+ <string name="swipe_restore_s"> Ripristina</string>
+ <string name="rename_backup_hdr">Rinomina backup</string>
+ <string name="rename_backup_confirm">Rinominare il backup?</string>
+ <string name="rename_backup_confirm2">L'operazione è irreversibile!</string>
+ <string name="renaming_backup">Rinominazione del backup in corso...</string>
+ <string name="rename_backup_complete">Rinominazione del backup completata</string>
+ <string name="swipe_to_rename">Scorri per rinominare</string>
+ <string name="swipe_rename"> Rinomina</string>
+ <string name="confirm_hdr">Conferma</string>
+ <string name="mount_hdr">Monta</string>
+ <string name="mount_sel_part">Seleziona le partizioni da montare:</string>
+ <string name="mount_sys_ro_chk">Monta la partizione System in sola lettura</string>
+ <string name="mount_sys_ro_s_chk">Monta System in sola lettura</string>
+ <string name="decrypt_data_btn">Decripta Data</string>
+ <string name="disable_mtp_btn">Disabilita MTP</string>
+ <string name="enable_mtp_btn">Abilita MTP</string>
+ <string name="mount_usb_storage_btn">Monta archivio USB</string>
+ <string name="usb_storage_hdr">Archivio USB</string>
+ <string name="usb_stor_mnt1">Archivio USB montato</string>
+ <string name="usb_stor_mnt2">Accertati di aver eseguito la rimozione sicura</string>
+ <string name="usb_stor_mnt3">dal tuo computer prima di smontare l'archivio!</string>
+ <string name="unmount_btn">Smonta</string>
+ <string name="rb_system_btn">Sistema</string>
+ <string name="rb_poweroff_btn">Spegni</string>
+ <string name="rb_recovery_btn">Recovery</string>
+ <string name="rb_bootloader_btn">Bootloader</string>
+ <string name="rb_download_btn">Download</string>
+ <string name="turning_off">Spegnimento in corso...</string>
+ <string name="swipe_power_off">Scorri per spegnere</string>
+ <string name="swipe_power_off_s">Spegni</string>
+ <string name="sys_ro_hdr">Partizione System non modificata</string>
+ <string name="sys_ro_keep">Mantenere System in sola lettura?</string>
+ <string name="sys_rop1">TWRP può preservare la partizione System dalle modifiche</string>
+ <string name="sys_rop2">per facilitarti l'installazione di aggiornamenti ufficiali.</string>
+ <string name="sys_rop3">TWRP non potrà prevenire la sostituzione della Recovery da parte</string>
+ <string name="sys_rop4">della ROM, e non ti chiederà se desideri ottenere accesso root.</string>
+ <string name="sys_rop5">Installare Zip o eseguire operazioni mediante adb</string>
+ <string name="sys_rop6">potrà ugualmente operare modifiche su System.</string>
+ <string name="sys_rol1">TWRP può preservare la partizione System dalle modifiche per facilitarti l'installazione di aggiornamenti ufficiali.</string>
+ <string name="sys_rol2">TWRP non potrà prevenire la sostituzione della Recovery da parte della ROM, e non ti chiederà se desideri ottenere accesso root.</string>
+ <string name="sys_rol3">Installare Zip o eseguire operazioni mediante adb potrà ugualmente operare modifiche su System.</string>
+ <string name="sys_ro_never_show_chk">Non mostrare più questa schermata all'avvio</string>
+ <string name="sys_ro_keep_ro_btn">Mantieni sola lettura</string>
+ <string name="swipe_allow_mod">Scorri per permettere le modifiche</string>
+ <string name="swipe_allow_mod_s">Permetti modifiche</string>
+ <string name="settings_hdr">Impostazioni</string>
+ <string name="settings_gen_hdr">Generale</string>
+ <string name="settings_gen_s_hdr">Generale</string>
+ <string name="settings_gen_btn">Generale</string>
+ <string name="use_rmrf_chk">Usa rm -rf invece di formattare</string>
+ <string name="use24clock_chk">Usa orologio a 24 ore</string>
+ <string name="rev_navbar_chk">Rovescia la navbar</string>
+ <string name="simact_chk">Simula le azioni per il testing dei temi</string>
+ <string name="simfail_chk">Simula fallimenti per le azioni</string>
+ <string name="ctr_navbar_rdo">Centra pulsanti della navbar</string>
+ <string name="lft_navbar_rdo">Allinea pulsanti della navbar a SX</string>
+ <string name="rht_navbar_rdo">Allinea pulsanti della navbar a DX</string>
+ <string name="restore_defaults_btn">Ripristina predefinite</string>
+ <string name="settings_tz_btn">Fuso orario</string>
+ <string name="settings_screen_btn">Schermo</string>
+ <string name="settings_screen_bright_btn">Luminosità</string>
+ <string name="settings_vibration_btn">Vibrazione</string>
+ <string name="settings_language_btn">Lingua</string>
+ <string name="time_zone_hdr">Fuso orario</string>
+ <string name="sel_tz_list">Scegli fuso orario:</string>
+ <!-- Translator note: if it does not make sense to translate the locations or if it makes more sense,
+ feel free to change the location listed or drop the location entirely and just call it UTC -6 -->
+ <string name="utcm11">(UTC -11) Samoa, Midway Island</string>
+ <string name="utcm10">(UTC -10) Hawaii</string>
+ <string name="utcm9">(UTC -9) Alaska</string>
+ <string name="utcm8">(UTC -8) Pacific Time</string>
+ <string name="utcm7">(UTC -7) Mountain Time</string>
+ <string name="utcm6">(UTC -6) Central Time</string>
+ <string name="utcm5">(UTC -5) Eastern Time</string>
+ <string name="utcm4">(UTC -4) Atlantic Time</string>
+ <string name="utcm3">(UTC -3) Brazil, Buenos Aires</string>
+ <string name="utcm2">(UTC -2) Mid-Atlantic</string>
+ <string name="utcm1">(UTC -1) Azores, Cape Verde</string>
+ <string name="utc0">(UTC 0) London, Dublin, Lisbon</string>
+ <string name="utcp1">(UTC +1) Berlin, Brussels, Paris</string>
+ <string name="utcp2">(UTC +2) Athens, Istanbul, South Africa</string>
+ <string name="utcp3">(UTC +3) Moscow, Baghdad</string>
+ <string name="utcp4">(UTC +4) Abu Dhabi, Tbilisi, Muscat</string>
+ <string name="utcp5">(UTC +5) Yekaterinburg, Islamabad</string>
+ <string name="utcp6">(UTC +6) Almaty, Dhaka, Colombo</string>
+ <string name="utcp7">(UTC +7) Bangkok, Hanoi, Jakarta</string>
+ <string name="utcp8">(UTC +8) Beijing, Singapore, Hong Kong</string>
+ <string name="utcp9">(UTC +9) Tokyo, Seoul, Yakutsk</string>
+ <string name="utcp10">(UTC +10) Eastern Australia, Guam</string>
+ <string name="utcp11">(UTC +11) Vladivostok, Solomon Islands</string>
+ <string name="utcp12">(UTC +12) Auckland, Wellington, Fiji</string>
+ <string name="sel_tz_offset">Scegli offset (solitamente 0): %tw_time_zone_guioffset%</string>
+ <string name="tz_offset_none">Nessuno</string>
+ <string name="tz_offset_0">0</string>
+ <string name="tz_offset_15">15</string>
+ <string name="tz_offset_30">30</string>
+ <string name="tz_offset_45">45</string>
+ <string name="use_dst_chk">Usa ora legale</string>
+ <string name="curr_tz">Fuso orario attuale: %tw_time_zone%</string>
+ <string name="curr_tz_s">Fuso orario attuale:</string>
+ <string name="set_tz_btn">Imposta fuso orario</string>
+ <string name="settings_screen_hdr">Schermo</string>
+ <string name="settings_screen_timeout_hdr">Timeout schermo</string>
+ <string name="enable_timeout_chk">Abilita timeout schermo</string>
+ <string name="screen_to_slider">Timeout in secondi:</string>
+ <string name="screen_to_slider_s">Timeout in secondi (0=disabilitato): %tw_screen_timeout_secs%</string>
+ <string name="screen_to_na">Impostazione del timeout non disponibile</string>
+ <string name="screen_bright_slider">Luminosità: %tw_brightness_pct%%</string>
+ <string name="screen_bright_na">Impostazione luminosità non disponibile</string>
+ <string name="vibration_hdr">Vibrazione</string>
+ <string name="button_vibration_hdr">Vibrazione pulsanti</string>
+ <string name="kb_vibration_hdr">Vibrazione tastiera</string>
+ <string name="act_vibration_hdr">Vibrazione azioni</string>
+ <string name="button_vibration">Vibrazione pulsanti:</string>
+ <string name="kb_vibration">Vibrazione tastiera:</string>
+ <string name="act_vibration">Vibrazione azioni:</string>
+ <string name="select_language">Scegli lingua:</string>
+ <string name="sel_lang_btn">Scegli lingua</string>
+ <string name="set_language_btn">Imposta lingua</string>
+ <string name="advanced_hdr">Avanzate</string>
+ <string name="copy_log_confirm">Copiare il log su scheda SD?</string>
+ <string name="copying_log">Copia del log in corso...</string>
+ <string name="copy_log_complete">Copia del log completata</string>
+ <string name="fix_context_btn">Ripara contesti</string>
+ <string name="part_sd_btn">Partiziona SD</string>
+ <string name="part_sd_s_btn">Scheda SD</string>
+ <string name="file_manager_btn">File manager</string>
+ <string name="language_hdr">Lingua</string>
+ <string name="terminal_btn">Terminale</string>
+ <string name="reload_theme_btn">Ricarica tema</string>
+ <string name="dumlock_btn">HTC Dumlock</string>
+ <string name="inject_twrp_btn">TWRP Inject</string>
+ <string name="inject_twrp_confirm">Eseguire nuovamente TWRP Inject?</string>
+ <string name="injecting_twrp">Esecuzione di TWRP Inject in corso...</string>
+ <string name="inject_twrp_complete">TWRP Inject completato</string>
+ <string name="swipe_to_confirm">Scorri per confermare</string>
+ <string name="part_sd_hdr">Partiziona scheda SD</string>
+ <string name="invalid_partsd_sel">Devi selezionare un dispositivo rimovibile</string>
+ <string name="part_sd_lose">Tutti i file sulla scheda SD andranno perduti!</string>
+ <string name="part_sd_undo">L'operazione è irreversibile!</string>
+ <string name="part_sd_ext_sz">Dimensione EXT:</string>
+ <string name="part_sd_swap_sz">Dimensione Swap:</string>
+ <string name="part_sd_m">-</string>
+ <string name="part_sd_p">+</string>
+ <string name="file_system">Filesystem:</string>
+ <string name="swipe_part_sd">Scorri per partizionare</string>
+ <string name="swipe_part_sd_s">Partiziona</string>
+ <string name="partitioning_sd">Partizionamento scheda SD in corso...</string>
+ <string name="partitioning_sd2">Ci vorranno un paio di minuti.</string>
+ <string name="part_sd_complete">Partizionamento completato</string>
+ <string name="dumlock_hdr">HTC Dumlock</string>
+ <string name="dumlock_restore_btn">Ripristina Boot originale</string>
+ <string name="dumlock_restore_confirm">Ripristinare l'immagine di Boot originale?</string>
+ <string name="dumlock_restoring">Ripristino del Boot originale in corso...</string>
+ <string name="dumlock_restore_complete">Ripristino del Boot originale completato</string>
+ <string name="dumlock_reflash_btn">Reinstalla Recovery</string>
+ <string name="dumlock_reflash_confirm">Reinstallare la Recovery in Boot?</string>
+ <string name="dumlock_reflashing">Installazione Recovery in Boot in corso...</string>
+ <string name="dumlock_reflash_complete">Installazione della Recovery in Boot completata</string>
+ <string name="dumlock_install_btn">Installa HTC Dumlock</string>
+ <string name="dumlock_install_confirm">Installare i file di HTC Dumlock nella ROM?</string>
+ <string name="dumlock_installing">Installazione di HTC Dumlock in corso...</string>
+ <string name="dumlock_install_complete">Installazione di HTC Dumlock Install completata</string>
+ <string name="swipe_to_unlock">Scorri per sbloccare</string>
+ <string name="swipe_unlock"> Sblocca</string>
+ <string name="fm_hdr">File manager</string>
+ <string name="fm_sel_file">Seleziona un file o una cartella</string>
+ <string name="fm_type_folder">Cartella</string>
+ <string name="fm_type_file">File</string>
+ <string name="fm_choose_act">Scegli azione</string>
+ <string name="fm_selected">%tw_fm_type% selezionato(a):</string>
+ <string name="fm_copy_btn">Copia</string>
+ <string name="fm_copy_file_btn">Copia</string>
+ <string name="fm_copy_folder_btn">Copia</string>
+ <string name="fm_copying">Copia di</string>
+ <string name="fm_move_btn">Sposta</string>
+ <string name="fm_moving">Spostamento di</string>
+ <string name="fm_chmod755_btn">chmod 755</string>
+ <string name="fm_chmod755ing">chmod 755 di</string>
+ <string name="fm_chmod_btn">chmod</string>
+ <string name="fm_delete_btn">Elimina</string>
+ <string name="fm_deleting">Eliminazione di</string>
+ <string name="fm_rename_btn">Rinomina</string>
+ <string name="fm_rename_file_btn">Rinomina</string>
+ <string name="fm_rename_folder_btn">Rinomina</string>
+ <string name="fm_renaming">Rinominazione di</string>
+ <string name="fm_sel_dest">Scegli cartella di destinazione</string>
+ <string name="fm_sel_curr_folder">Scegli cartella attuale</string>
+ <string name="fm_rename_hdr">Rinomina</string>
+ <string name="fm_set_perms_hdr">Imposta permessi</string>
+ <string name="fm_perms">Permessi:</string>
+ <string name="fm_complete">Operazione completata</string>
+ <string name="decrypt_data_hdr">Decripta Data</string>
+ <string name="decrypt_data_enter_pass">Inserisci la password.</string>
+ <string name="decrypt_data_failed">Password errata! Riprova.</string>
+ <string name="decrypt_data_failed_pattern">Sequenza errata! Riprova.</string>
+ <string name="decrypt_data_enter_pattern">Inserisci sequenza di sblocco.</string>
+ <string name="decrypt_data_trying">Tentativo di decriptazione in corso...</string>
+ <string name="term_hdr">Terminale</string>
+ <string name="term_s_hdr">Terminale</string>
+ <string name="term_kill_btn">TERMINA</string>
+ <string name="term_sel_folder_hdr">Scegli la cartella d'inizio</string>
+ <string name="adb_sideload_hdr">ADB Sideload</string>
+ <string name="sideload_wipe_dalvik_chk">Pulisci la cache Dalvik</string>
+ <string name="sideload_wipe_cache_chk">Pulisci Cache</string>
+ <string name="swipe_to_sideload">Scorri per avviare Sideload</string>
+ <string name="swipe_sideload"> Avvia</string>
+ <string name="sideload_confirm">ADB Sideload</string>
+ <string name="sideload_usage">Utilizzo: adb sideload nomefile.zip</string>
+ <string name="sideload_complete">ADB Sideload completato</string>
+ <string name="fix_contexts_hdr">Ripristina contesti</string>
+ <string name="fix_contexts_note1">Nota: il ripristino dei contesti è raramente necessario.</string>
+ <string name="fix_contexts_note2">Il ripristino dei contesti SELinux può impedire</string>
+ <string name="fix_contexts_note3">il corretto avvio del tuo dispositivo.</string>
+ <string name="swipe_to_fix_contexts">Scorri per ripristinare i contesti</string>
+ <string name="swipe_fix_contexts"> Ripristina contesti</string>
+ <string name="fixing_contexts">Ripristino dei contesti in corso...</string>
+ <string name="fix_contexts_complete">Ripristino dei contesti completato</string>
+ <string name="reboot_hdr">Riavvio</string>
+ <string name="su_hdr">Verifica SuperSU</string>
+ <string name="su_note1">Il tuo dispositivo non sembra disporre di accesso root.</string>
+ <string name="su_note2">Installare SuperSU ora?</string>
+ <string name="su_note3">Ciò ti garantirà privilegi di root.</string>
+ <string name="su_cancel">Non installare</string>
+ <string name="swipe_su_to_install">Scorri per installare</string>
+ <string name="swipe_su_install"> Installa</string>
+ <string name="su_installing">Installazione di SuperSU in corso...</string>
+ <string name="sel_storage_list">Scegli archivio</string>
+ <string name="ok_btn">OK</string>
+
+ <!-- Various console messages - these consist of user displayed messages, oftentimes errors -->
+ <string name="no_kernel_selinux">Il kernel non supporta la lettura dei contesti SELinux.</string>
+ <string name="full_selinux">Supporto per SELinux completo non presente.</string>
+ <string name="no_selinux">Nessun supporto per SELinux (libselinux assente).</string>
+ <string name="mtp_enabled">MTP abilitato</string>
+ <string name="mtp_crash">MTP si è arrestato. Non sarà più inizializzato all'avvio.</string>
+ <string name="decrypt_success">Decriptazione con password predefinita avvenuta con successo.</string>
+ <string name="unable_to_decrypt">Impossibile decriptare con password predefinita. Potresti dover formattare Data.</string>
+ <string name="generating_md51">Generazione MD5 in corso...</string>
+ <!-- Message displayed during a backup if we are generating an MD5, ideally, leave the leading " * " to help align and separate this text from other console text -->
+ <string name="generating_md52"> * Generazione MD5 in corso...</string>
+ <string name="md5_created"> * MD5 creato.</string>
+ <string name="md5_error"> * Errore nell'MD5!</string>
+ <string name="md5_compute_error"> * Errore nel calcolo dell'MD5.</string>
+ <string name="current_date">(Data attuale)</string>
+ <string name="auto_generate">(Genera automaticamente)</string>
+ <string name="unable_to_locate_partition">Impossibile localizzare la partizione '{1}' per il calcolo delle dimensioni del backup.</string>
+ <string name="no_partition_selected">Nessuna partizione selezionata.</string>
+ <string name="total_partitions_backup"> * Numero di partizioni di cui eseguire il backup: {1}</string>
+ <string name="total_backup_size"> * Dimensione complessiva: {1}MB</string>
+ <string name="available_space"> * Spazio disponibile: {1}MB</string>
+ <string name="unable_locate_storage">Impossibile localizzare l'archivio.</string>
+ <string name="no_space">Lo spazio libero dell'archivio scelto è insufficiente.</string>
+ <string name="backup_started">[INIZIO DEL BACKUP]</string>
+ <string name="backup_folder"> * Cartella dei backup: {1}</string>
+ <string name="fail_backup_folder">Creazione della cartella dei backup fallita.</string>
+ <string name="avg_backup_fs">Velocità media di backup del filesystem: {1} MB/sec</string>
+ <string name="avg_backup_img">Velocità media di backup del drive: {1} MB/sec</string>
+ <string name="total_backed_size">[DIMENSIONE TOTALE SALVATA: {1} MB]</string>
+ <string name="backup_completed">[BACKUP COMPLETATO IN {1} SECONDI]</string>
+ <string name="restore_started">[INIZIO DEL RIPRISTINO]</string>
+ <string name="restore_folder">Cartella da cui ripristinare: '{1}'</string>
+ <!-- {1} is the partition display name and {2} is the number of seconds -->
+ <string name="restore_part_done">[Partizione {1} ripristinata ({2} secondi)]</string>
+ <string name="verifying_md5">Verifica MD5 in corso...</string>
+ <string name="skip_md5">Saltando la verifica del MD5 in base alle impostazioni stabilite.</string>
+ <string name="calc_restore">Calcolo dei dettagli del ripristino in corso...</string>
+ <string name="restore_read_only">Impossibile ripristinare {1} -- partizione montata in sola lettura.</string>
+ <string name="restore_unable_locate">Impossibile localizzare la partizione '{1}' per il ripristino.</string>
+ <string name="no_part_restore">Nessuna partizione selezionata per il ripristino.</string>
+ <string name="restore_part_count">Ripristino di {1} partizioni in corso...</string>
+ <string name="total_restore_size">Dimensione complessiva da ripristinare: {1}MB</string>
+ <string name="updating_system_details">Aggiornamento dei dettagli di System...</string>
+ <string name="restore_completed">[RIPRISTINO COMPLETATO IN {1} SECONDI]</string>
+ <!-- {1} is the path we could not open, {2} is strerror output -->
+ <string name="error_opening_strerr">Errore durante l'apertura di: '{1}' ({2})</string>
+ <string name="unable_locate_part_backup_name">Impossibile localizzare la partizione dal nome di backup: '{1}'</string>
+ <string name="unable_find_part_path">Impossibile localizzare la partizione associata al percorso '{1}'</string>
+ <string name="update_part_details">Aggiornamento dei dettagli della partizione...</string>
+ <string name="update_part_details_done">...fatto</string>
+ <string name="wiping_dalvik">Pulizia delle cartelle della cache Dalvik...</string>
+ <string name="cleaned">Cartella pulita: {1}...</string>
+ <string name="dalvik_done">-- pulizia delle cartelle della cache Dalvik completata!</string>
+ <string name="no_andsec">Nessuna partizione Android protetta trovata.</string>
+ <string name="unable_to_locate">Impossibile localizzare {1}.</string>
+ <string name="wiping_datamedia">Pulizia dell'archivio interno -- /data/media...</string>
+ <string name="unable_to_mount">Impossibile montare {1}</string>
+ <string name="unable_to_mount_internal">Impossibile montare l'archivio interno</string>
+ <string name="unable_to_mount_storage">Impossibile montare l'archivio</string>
+ <string name="fail_decrypt">Decriptazione dei dati fallita.</string>
+ <string name="no_crypto_support">In questa build non è stato integrato alcun supporto per la crittografia.</string>
+ <string name="decrypt_success_dev">Dati decriptati con successo. Nuovo dispositivo di memoria: '{1}'</string>
+ <string name="done">Fatto.</string>
+ <string name="start_partition_sd">Partizionamento scheda SD in corso...</string>
+ <string name="partition_sd_locate">Impossibile localizzare il dispositivo da partizionare.</string>
+ <string name="ext_swap_size">La dimensione complessiva di EXT e Swap eccede la capacità della scheda SD.</string>
+ <string name="remove_part_table">Rimozione della tabella delle partizioni in corso...</string>
+ <string name="unable_rm_part">Impossibile rimuovere la tabella delle partizioni.</string>
+ <string name="create_part">Creazione della partizione {1} in corso...</string>
+ <string name="unable_to_create_part">Impossibile creare la partizione {1}.</string>
+ <string name="format_sdext_as">Formattazione di sd-ext come {1}...</string>
+ <string name="part_complete">Partizionamento completato.</string>
+ <string name="unable_to_open">Impossibile aprire '{1}'.</string>
+ <string name="mtp_already_enabled">MTP è stato già abilitato</string>
+ <string name="mtp_fail">Impossibile abilitare MTP</string>
+ <string name="no_mtp">Supporto per MTP non incluso</string>
+ <string name="image_flash_start">[INIZIO INSTALLAZIONE DELL'IMMAGINE]</string>
+ <string name="img_to_flash">Immagine da installare: '{1}'</string>
+ <string name="flash_unable_locate">Impossibile localizzare la partizione '{1}' per l'installazione.</string>
+ <string name="no_part_flash">Nessuna partizione scelta per l'installazione.</string>
+ <string name="too_many_flash">Troppe partizioni scelte per l'installazione.</string>
+ <string name="invalid_flash">La partizione specificata non è valida.</string>
+ <string name="flash_done">[INSTALLAZIONE COMPLETATA]</string>
+ <string name="wiping">Pulizia di {1} in corso...</string>
+ <string name="repair_not_exist">{1} non esiste! Impossibile riparare!</string>
+ <string name="repairing_using">Riparazione di {1} utilizzando {2}...</string>
+ <string name="unable_repair">Impossibile riparare {1}.</string>
+ <string name="mount_data_footer">Impossibile montare la partizione Data. Footer criptato non trovato.</string>
+ <!-- {1} is the folder name that we could not create, {2} is strerror output -->
+ <string name="create_folder_strerr">Impossibile creare la cartella '{1}' ({2}).</string>
+ <!-- {1} is the folder name that we could not mount, {2} is strerror output -->
+ <string name="fail_mount">Impossibile montare '{1}' ({2}).</string>
+ <!-- {1} is the folder name that we could not unmount, {2} is strerror output -->
+ <string name="fail_unmount">Impossibile smontare '{1}' ({2}).</string>
+ <string name="cannot_resize">Impossibile ridimensionare {1}.</string>
+ <string name="repair_resize">Riparazione di {1} prima del ridimensionamento.</string>
+ <string name="unable_resize">Impossibile ridimensionare {1}.</string>
+ <string name="no_md5_found">Nessun MD5 trovato per '{1}'. Deseleziona "Abilita verifica MD5" per procedere con il ripristino.</string>
+ <string name="md5_fail_match">Il valore MD5 non corrisponde per '{1}'.</string>
+ <string name="fail_decrypt_tar">Decriptazione fallita per il file Tar '{1}'</string>
+ <string name="format_data_msg">Potresti dover riavviare la Recovery per accedere nuovamente a Data.</string>
+ <string name="format_data_err">Impossibile formattare al fine di rimuovere la crittografia.</string>
+ <string name="formatting_using">Formattazione di {1} tramite {2}...</string>
+ <string name="unable_to_wipe">Impossibile pulire {1}.</string>
+ <string name="cannot_wipe">La partizione {1} non può essere pulita.</string>
+ <string name="remove_all">Eliminazione di tutti i file in '{1}'...</string>
+ <string name="wiping_data">Pulizia di Data tralasciando /data/media...</string>
+ <string name="backing_up">Backup di {1} in corso...</string>
+ <string name="backing">Backup in corso...</string>
+ <string name="backup_size">La dimensione del backup di '{1}' è 0 byte.</string>
+ <string name="datamedia_fs_restore">ATTENZIONE: Il backup di Data è stato fatto mentre il filesystem era {1}! Il dispositivo potrebbe non avviarsi finché non reimposti il filesystem {1}.</string>
+ <string name="restoring">Ripristino di {1} in corso...</string>
+ <string name="restoring_hdr">Ripristino in corso...</string>
+ <string name="recreate_folder_err">Impossibile ripristinare la cartella {1}.</string>
+ <string name="img_size_err">La dimensione dell'immagine eccede la capacità del dispositivo</string>
+ <string name="flashing">Installazione di {1}...</string>
+ <string name="backup_folder_set">Cartella dei backup impostata in '{1}'</string>
+ <string name="locate_backup_err">Impossibile localizzare il backup '{1}'</string>
+ <string name="set_restore_opt">Impostazione opzioni di ripristino: '{1}':</string>
+ <string name="md5_check_skip">Tralascia controllo MD5: attivo</string>
+ <string name="ors_encrypt_restore_err">Impossibile utilizzare OpenRecoveryScript per ripristinare un backup criptato.</string>
+ <string name="mounting">Montaggio</string>
+ <string name="unmounting">Smontaggio</string>
+ <string name="mounted">'{1}' montata</string>
+ <string name="unmounted">'{1}' smontata</string>
+ <string name="setting">Impostazione di '{1}' a '{2}'</string>
+ <string name="setting_empty">Impostazione di '{1}' a vuoto</string>
+ <string name="making_dir1">Creazione cartella</string>
+ <string name="making_dir2">Creazione cartella: '{1}'</string>
+ <string name="running_command">Esecuzione comando</string>
+ <string name="sideload">ADB Sideload</string>
+ <string name="start_sideload">Avvio di ADB Sideload...</string>
+ <string name="need_new_adb">Necessiti di adb 1.0.32 o più recente, per inviare dati tramite Sideload.</string>
+ <string name="no_pwd">Nessuna password fornita.</string>
+ <string name="done_ors">Elaborazione script terminata</string>
+ <string name="injecttwrp">Installazione di TWRP in Boot tramite TWRP Inject...</string>
+ <string name="zip_err">Errore durante l'installazione dello Zip '{1}'</string>
+ <string name="installing_zip">Installazione dello Zip '{1}' in corso...</string>
+ <string name="select_backup_opt">Impostazione opzioni di backup:</string>
+ <string name="compression_on">La compressione è attiva</string>
+ <string name="md5_off">La generazione di MD5 è disattiva</string>
+ <string name="backup_fail">Backup non riuscito</string>
+ <string name="backup_clean">Backup non riuscito. Pulizia della cartella dei backup in corso...</string>
+ <string name="running_recovery_commands">Esecuzione dei comandi di ripristino...</string>
+ <string name="recovery_commands_complete">Esecuzione dei comandi completata</string>
+ <string name="running_ors">Esecuzione di OpenRecoveryScript...</string>
+ <string name="ors_complete">Esecuzione di OpenRecoveryScript completata</string>
+ <string name="no_updater_binary">Impossibile trovare '{1}' nel file Zip.</string>
+ <string name="check_for_md5">Controllo sull'MD5 in corso...</string>
+ <string name="fail_sysmap">Impossibile mappare '{1}'</string>
+ <string name="verify_zip_sig">Verifica della firma dello Zip in corso...</string>
+ <string name="verify_zip_fail">Verifica della firma non riuscita!</string>
+ <string name="verify_zip_done">Verifica della firma completata con successo.</string>
+ <string name="zip_corrupt">Il file Zip è corrotto!</string>
+ <string name="no_md5">Nessun MD5 trovato: la verifica non sarà eseguita</string>
+ <string name="md5_fail">L'MD5 non corrisponde</string>
+ <string name="md5_match">L'MD5 corrisponde</string>
+ <string name="pid_signal">Il processo {1} è terminato con segnale: {2}</string>
+ <string name="pid_error">Il processo {1} è terminato con ERRORE: {2}</string>
+ <string name="install_dumlock">Installazione di HTC Dumlock in System...</string>
+ <string name="dumlock_restore">Ripristino del Boot originale...</string>
+ <string name="dumlock_reflash">Reinstallazione della Recovery in Boot...</string>
+ <string name="run_script">Esecuzione dello script {1}...</string>
+ <string name="rename_stock">Il file della Recovery stock, in System, è stato rinominato per prevenire la sostituzione di TWRP da paete della ROM.</string>
+ <string name="split_backup">Divisione del backup in archivi multipli...</string>
+ <string name="backup_error">Errore nella creazione del backup.</string>
+ <string name="restore_error">Errore durante il ripristino.</string>
+ <string name="split_thread">Divisione del thread {1} nell'archivio {2}</string>
+ <!-- These 2 items are saved in the data manager instead of resource manager, so %llu, etc is correct instead of {1} -->
+ <string name="file_progress">File %llu di %llu, %i%%</string>
+ <string name="size_progress">%lluMB di %lluMB, %i%%</string>
+ <string name="decrypt_cmd">Tentativo di decriptare Data da riga di comando.</string>
+ <string name="base_pkg_err">Errore nel caricamento dei pacchetti base.</string>
+ <string name="simulating">Simulazione azioni in corso...</string>
+ <string name="backup_cancel">Backup annullato</string>
+ <string name="config_twrp">Configurazione di TWRP in corso...</string>
+ <string name="config_twrp_err">Impossibile configurare TWRP con questo kernel.</string>
+ <string name="copy_log">Log della Recovery copiato in {1}.</string>
+ <string name="max_queue">È stata raggiunta la dimensione massima della coda di Zip!</string>
+ <string name="min_queue">È stata raggiunta la dimensione minima della coda di Zip!</string>
+ <string name="screenshot_saved">Lo screenshot è stato salvato in {1}</string>
+ <string name="screenshot_err">Cattura dello screenshot non riuscita!</string>
+ <string name="zip_wipe_cache">Uno o più Zip ha richiesto la pulizia della Cache -- La Cache sarà pulita immediatamente.</string>
+ <string name="and_sec_wipe_err">Impossibile pulire android_secure</string>
+ <string name="dalvik_wipe_err">Pulizia della cache Dalvik fallita</string>
+ <string name="auto_gen">(Genera automaticamente)</string>
+ <string name="curr_date">(Data attuale)</string>
+ <string name="backup_name_len">Il nome del backup eccede la lunghezza massima.</string>
+ <string name="backup_name_invalid">Il nome del backup '{1}' contiene uno o più caratteri non validi: '{1}'</string>
+ <string name="no_real_sdcard">Questo dispositivo non possiede una scheda SD reale! Interruzione immediata!</string>
+ <string name="cancel_sideload">Annullamento di ADB sideload...</string>
+ <string name="change_fs_err">Errore nella modifica del filesystem.</string>
+ <string name="theme_ver_err">La versione del tema personalizzato non corrisponde alla versione di TWRP. Sarà utilizzato il tema predefinito.</string>
+ <string name="up_a_level">(Livello superiore)</string>
+ </resources>
+</language>
diff --git a/gui/theme/common/languages/ru.xml b/gui/theme/common/languages/ru.xml
index 57a99656d..ee3b0691f 100644
--- a/gui/theme/common/languages/ru.xml
+++ b/gui/theme/common/languages/ru.xml
@@ -2,7 +2,7 @@
<language>
<display>Русский</display>
- <!-- Translated by Jemmini, 2016 -->
+ <!-- Translated by Jemmini; modified by agur4ik, SevenMaxs, S-trace 2016 -->
<resources>
<!-- Font overrides - only change these if your language requires special characters -->
@@ -21,11 +21,11 @@
<string name="cache">Cache</string>
<string name="data">Data</string>
<string name="sdcard">SDcard</string>
- <string name="internal">Внутр.память</string>
+ <string name="internal">Память устройства</string>
<string name="microsd">Micro SDCard</string>
<string name="usbotg">USB OTG</string>
<string name="android_secure">Android Secure</string>
- <string name="dalvik">Dalvik / ART Cache</string>
+ <string name="dalvik">Dalvik/ART Cache</string>
<!-- This is a rarely used partition on a Micro SD card for a very old app2sd system -->
<string name="sdext">SD-EXT</string>
<string name="adopted_data">Adopted Data</string>
@@ -50,7 +50,7 @@
<string name="tab_vibration">ВИБРАЦИЯ</string>
<string name="tab_language">ЯЗЫК</string>
- <string name="install_btn">Установить</string>
+ <string name="install_btn">Установка</string>
<string name="wipe_btn">Очистка</string>
<string name="backup_btn">Резервное коп-ние</string>
<string name="restore_btn">Восстановление</string>
@@ -63,14 +63,14 @@
<string name="select_type_hdr">Выбор типа</string>
<string name="install_zip_hdr">Установка Zip</string>
<string name="install_zip_btn">Установка Zip</string>
- <string name="install_image_hdr">Установка образа</string>
- <string name="install_image_btn">Установка образа</string>
+ <string name="install_image_hdr">Установка Img-образа</string>
+ <string name="install_image_btn">Установка Img</string>
<string name="install_select_file_hdr">Выбор файла</string>
<string name="file_selector_folders_hdr">Папки</string>
- <string name="select_file_from_storage">Выбор файла из %tw_storage_display_name% (%tw_storage_free_size% MB)</string>
+ <string name="select_file_from_storage">Текущий накопитель: %tw_storage_display_name% (%tw_storage_free_size% МБ)</string>
<string name="adb_sideload_btn">ADB sideload</string>
<string name="install_hdr">Установка</string>
- <string name="select_storage_hdr">Выбор накопителя</string>
+ <string name="select_storage_hdr">Выберите накопитель</string>
<string name="select_storage_btn">Выбор накопителя</string>
<string name="queue_hdr">Очередь</string>
<string name="zip_queue_count">Файлов в очереди: %tw_zip_queue_count% из 10 возможных</string>
@@ -81,10 +81,10 @@
<string name="zip_back_clear">Нажмите назад для очистки очереди.</string>
<string name="folder">Папка:</string>
<string name="file">Файл:</string>
- <string name="zip_sig_chk">Проверка Zip сигнатуры</string>
+ <string name="zip_sig_chk">Проверка подписи Zip</string>
<string name="inject_twrp_chk">Интегрировать TWRP после установки</string>
<string name="options_hdr">Опции</string>
- <string name="confirm_flash_hdr">Confirm Flash</string>
+ <string name="confirm_flash_hdr">Подтвердите установку</string>
<string name="zip_queue">Очередь:</string>
<string name="options">Опции:</string>
<string name="swipe_confirm"> Подтвердить</string>
@@ -97,7 +97,7 @@
<string name="install_failed">Установка не удалась</string>
<string name="install_successful">Установка выполнена успешно</string>
<string name="wipe_cache_dalvik_btn">Очистка cache/dalvik</string>
- <string name="reboot_system_btn">Перезагрузка в сист.</string>
+ <string name="reboot_system_btn">Перезагрузка в ОС</string>
<string name="install_sel_target">Выбор раздела</string>
<string name="flash_image_select">Выберите раздел для прошивки образа:</string>
<string name="target_partition">Целевой раздел:</string>
@@ -163,17 +163,17 @@
<string name="part_present_no">Присутствует: нет</string>
<string name="part_removable_yes">Съемное: да</string>
<string name="part_removable_no">Съемное: нет</string>
- <string name="part_size">Размер: %tw_partition_size%MB</string>
- <string name="part_used">Использовано: %tw_partition_used%MB</string>
- <string name="part_free">Свободно: %tw_partition_free%MB</string>
- <string name="part_backup_size">Размер резервных копий: %tw_partition_backup_size%MB</string>
- <string name="resize_btn">Исправ. размер</string>
- <string name="resize_btn_s">Испр. размер</string>
- <string name="resize_confirm">Исправить размер %tw_partition_name%?</string>
- <string name="resizing">Исправление размера...</string>
- <string name="resize_complete">Размер партиции исправлен</string>
- <string name="swipe_resize">Свайп для испр-ния размера</string>
- <string name="swipe_resize_s"> Испр. размер</string>
+ <string name="part_size">Размер: %tw_partition_size% МБ</string>
+ <string name="part_used">Использовано: %tw_partition_used% МБ</string>
+ <string name="part_free">Свободно: %tw_partition_free% МБ</string>
+ <string name="part_backup_size">Размер резервных копий: %tw_partition_backup_size% МБ</string>
+ <string name="resize_btn">Измен. размер</string>
+ <string name="resize_btn_s">Изм. размер</string>
+ <string name="resize_confirm">Изменить размер %tw_partition_name%?</string>
+ <string name="resizing">Изменение размера...</string>
+ <string name="resize_complete">Размер раздела изменён</string>
+ <string name="swipe_resize">Свайп для изменения размера</string>
+ <string name="swipe_resize_s"> Измен. размер</string>
<string name="repair_btn">Восст-ть файл. систему</string>
<string name="repair_btn_s">Восстановление</string>
<string name="repair_confirm">Восстановить %tw_partition_name%?</string>
@@ -196,7 +196,7 @@
<string name="wipe_enc_btn">Стереть шифрование</string>
<string name="swipe_factory_reset">Свайп для подтверждения</string>
<string name="repair_change_btn">Восстановить или изменить файловую систему</string>
- <string name="storage_hdr">Хранилище: %tw_storage_display_name% (%tw_storage_free_size% MB)</string>
+ <string name="storage_hdr">Текущий накопитель: %tw_storage_display_name% (%tw_storage_free_size% МБ)</string>
<string name="backup_hdr">Резервное копирование</string>
<string name="backup_confirm_hdr">Подтверждение резервного копирования</string>
<string name="encryption_tab">ШИФРОВАНИЕ</string>
@@ -225,7 +225,7 @@
<string name="backup_complete">Резервное копирование завершено</string>
<string name="restore_hdr">Восстановление</string>
<string name="sel_backup_hdr">Выбор резервной копии</string>
- <string name="restore_sel_store_hdr">Выбор резервной копии из %tw_storage_display_name% (%tw_storage_free_size% MB)</string>
+ <string name="restore_sel_store_hdr">Текущий накопитель: %tw_storage_display_name% (%tw_storage_free_size% МБ)</string>
<string name="restore_sel_pack_fs">Выбор резервной копии для восстановления:</string>
<string name="restore_enc_backup_hdr">Зашифрованная резервная копия</string>
<string name="restore_dec_fail">Пароль неверный, попробуйте снова!</string>
@@ -238,7 +238,7 @@
<string name="swipe_delete_s"> Удаление</string>
<string name="restore_try_decrypt">Зашифрованная резервная копия - попытка расшифровки</string>
<string name="restore_try_decrypt_s">Попытка расшифровки</string>
- <string name="restore_backup_date">Резервная копия создана %tw_restore_file_date%</string>
+ <string name="restore_backup_date">Резервная копия создана: %tw_restore_file_date%</string>
<string name="restore_sel_part">Выбор раздела для восстановления:</string>
<string name="restore_enable_md5_chk">Включить проверку MD5 файлов резервной копии</string>
<string name="restore_complete">Восстановление завершено</string>
@@ -259,12 +259,12 @@
<string name="decrypt_data_btn">Расшифровать данные</string>
<string name="disable_mtp_btn">Выключить MTP</string>
<string name="enable_mtp_btn">Включить MTP</string>
- <string name="mount_usb_storage_btn">Смонтировать как USB-накопит.</string>
+ <string name="mount_usb_storage_btn">Включить UMS</string>
<string name="usb_storage_hdr">USB накопитель</string>
- <string name="usb_stor_mnt1">USB накопитель смонтирован</string>
- <string name="usb_stor_mnt2">Для безопасного отключения вашего устройства</string>
- <string name="usb_stor_mnt3">от компьютера, выполните размонтирование!</string>
- <string name="unmount_btn">Размонтировать</string>
+ <string name="usb_stor_mnt1">Режим USB накопителя включен</string>
+ <string name="usb_stor_mnt2">Перед отключением вашего устройства от компьютера,</string>
+ <string name="usb_stor_mnt3">выполните размонтирование (выключите UMS)!</string>
+ <string name="unmount_btn">Выключить UMS</string>
<string name="rb_system_btn">Система</string>
<string name="rb_poweroff_btn">Выключение</string>
<string name="rb_recovery_btn">Рекавери</string>
@@ -300,7 +300,7 @@
<string name="ctr_navbar_rdo">Кнопки нав.панели по центру</string>
<string name="lft_navbar_rdo">Выровнять кнопки нав.панели слева</string>
<string name="rht_navbar_rdo">Выровнять кнопки нав.панели справа</string>
- <string name="restore_defaults_btn">Восстановить настр-ки</string>
+ <string name="restore_defaults_btn">Сброс настроек</string>
<string name="settings_tz_btn">Часовой пояс</string>
<string name="settings_screen_btn">Экран</string>
<string name="settings_screen_bright_btn">Яркость</string>
@@ -329,9 +329,9 @@
<string name="utcp5">(UTC +5) Ташкент, Исламабад, Карачи</string>
<string name="utcp6">(UTC +6) Алматы, Астана, Дхака, Екатеринбург</string>
<string name="utcp7">(UTC +7) Омск, Новосибирск, Бангкок, Джакарта, Ханой</string>
- <string name="utcp8">(UTC +8) Красноярск, Гонконг, Пекин, Улан-Батор</string>
- <string name="utcp9">(UTC +9) Иркутск, Осака, Саппоро, Токио, Сеул</string>
- <string name="utcp10">(UTC +10) Якутск, Гуам, Канберра, Мельбурн, Сидней</string>
+ <string name="utcp8">(UTC +8) Красноярск, Пекин, Улан-Батор, Иркутск</string>
+ <string name="utcp9">(UTC +9) Осака, Саппоро, Токио, Сеул, Якутск</string>
+ <string name="utcp10">(UTC +10) Гуам, Канберра, Мельбурн, Сидней</string>
<string name="utcp11">(UTC +11) Владивосток, Сахалин, Соломоновы о-ва</string>
<string name="utcp12">(UTC +12) Магадан, Камчатка, Фиджи, Маршаловы о-ва</string>
<string name="sel_tz_offset">Выбор смещения (как правило 0): %tw_time_zone_guioffset%</string>
@@ -437,8 +437,8 @@
<string name="fm_complete">Операция завершена</string>
<string name="decrypt_data_hdr">Расшифровать данные</string>
<string name="decrypt_data_enter_pass">Введите пароль.</string>
- <string name="decryt_data_failed">Пароль неверный, попробуйте снова!</string>
- <string name="decryt_data_failed_pattern">Шаблон неверный, попробуйте снова!</string>
+ <string name="decrypt_data_failed">Пароль неверный, попробуйте снова!</string>
+ <string name="decrypt_data_failed_pattern">Шаблон неверный, попробуйте снова!</string>
<string name="decrypt_data_enter_pattern">Введите шаблон.</string>
<string name="decrypt_data_trying">Попытка расшифровки</string>
<string name="term_hdr">Команда терминала</string>
@@ -470,7 +470,7 @@
<string name="swipe_su_to_install">Свайп для установки</string>
<string name="swipe_su_install"> Установка</string>
<string name="su_installing">Установка SuperSU</string>
- <string name="sel_storage_list">Выбор хранилища</string>
+ <string name="sel_storage_list">Выберите накопитель</string>
<string name="ok_btn">OK</string>
<!-- Various console messages - these consist of user displayed messages, oftentimes errors -->
@@ -492,17 +492,17 @@
<string name="unable_to_locate_partition">Не удается найти '{1}' раздел для расчета копирования.</string>
<string name="no_partition_selected">Не выбраны разделы для резервного копирования.</string>
<string name="total_partitions_backup"> * Общее количество разделов для резервного копирования: {1}</string>
- <string name="total_backup_size"> * Общий объем данных: {1}MB</string>
- <string name="available_space"> * Доступный объем: {1}MB</string>
+ <string name="total_backup_size"> * Общий объем данных: {1} МБ</string>
+ <string name="available_space"> * Доступный объем: {1} МБ</string>
<string name="unable_locate_storage">Не удается найти накопитель для хранения.</string>
<string name="no_space">В накопителе для хранения недостаточно свободного места.</string>
<string name="backup_started">[РЕЗЕРВНОЕ КОПИРОВАНИЕ НАЧАТО]</string>
<string name="backup_folder"> * Папка для резервной копии: {1}</string>
<string name="fail_backup_folder">Не удается создать папку для резервной копии.</string>
- <string name="avg_backup_fs">Средняя скорость копирования для файлов: {1} MB/sec</string>
- <string name="avg_backup_img">Средняя скорость копирования для образов: {1} MB/sec</string>
- <string name="total_backed_size">[{1} MB ВСЕГО СКОПИРОВАНО]</string>
- <string name="backup_completed">[КОПИРОВАНИЕ ЗАВЕРШЕНО ЗА {1} СЕКУНД]</string>
+ <string name="avg_backup_fs">Средняя скорость копирования для файлов: {1} МБ/сек</string>
+ <string name="avg_backup_img">Средняя скорость копирования для образов: {1} МБ/сек</string>
+ <string name="total_backed_size">[ВСЕГО СКОПИРОВАНО {1} МБ]</string>
+ <string name="backup_completed">[КОПИРОВАНИЕ ЗАВЕРШЕНО ЗА {1} СЕКУНД(Ы)]</string>
<string name="restore_started">[ВОССТАНОВЛЕНИЕ НАЧАТО]</string>
<string name="restore_folder">Папка для восстановления: '{1}'</string>
<!-- {1} is the partition display name and {2} is the number of seconds -->
@@ -514,9 +514,9 @@
<string name="restore_unable_locate">Не удается найти '{1}' раздел для восстановления.</string>
<string name="no_part_restore">Не выбраны разделы для восстановления.</string>
<string name="restore_part_count">Восстановление {1} разделов...</string>
- <string name="total_restore_size">Общий размер для восстановления: {1}MB</string>
+ <string name="total_restore_size">Общий размер для восстановления: {1} МБ</string>
<string name="updating_system_details">Обновление информации о системе</string>
- <string name="restore_completed">[ВОССТАНОВЛЕНИЕ ЗАВЕРШЕНО ЗА {1} СЕКУНД]</string>
+ <string name="restore_completed">[ВОССТАНОВЛЕНИЕ ЗАВЕРШЕНО ЗА {1} СЕКУНД(Ы)]</string>
<!-- {1} is the path we could not open, {2} is strerror output -->
<string name="error_opening_strerr">Ошибка открытия: '{1}' ({2})</string>
<string name="unable_locate_part_backup_name">Не удается найти раздел для копирования: '{1}'</string>
@@ -533,9 +533,9 @@
<string name="unable_to_mount_internal">Не удается смонтировать internal_storage</string>
<string name="unable_to_mount_storage">Не удается смонтировать накопитель</string>
<string name="fail_decrypt">Не удается расшифровать data.</string>
- <string name="no_crypto_support">Шифрование не добавлено в эту сборки, пинайте разработчика.</string>
+ <string name="no_crypto_support">Шифрование не добавлено в эту сборку, пинайте разработчика.</string>
<string name="decrypt_success_dev">Data успешно расшифрован, новое блочное устройство: '{1}'</string>
- <string name="done">Done.</string>
+ <string name="done">Готово.</string>
<string name="start_partition_sd">Разметка SD-карты...</string>
<string name="partition_sd_locate">Не удалось найти устройство для разметки.</string>
<string name="ext_swap_size">Размер EXT + Swap превышает размер sdcard.</string>
@@ -622,10 +622,10 @@
<string name="ors_complete">OpenRecoveryScript выполнен</string>
<string name="no_updater_binary">'{1}' не найден в zip файле.</string>
<string name="check_for_md5">Проверка MD5-файлов...</string>
- <string name="fail_sysmap">Failed to map file '{1}'</string>
- <string name="verify_zip_sig">Проверка zip сигнатуры...</string>
- <string name="verify_zip_fail">Zip сигнатура не прошла проверку!</string>
- <string name="verify_zip_done">Zip сигнатура проверена успешно.</string>
+ <string name="fail_sysmap">Не удалось отобразить в память файл '{1}'</string>
+ <string name="verify_zip_sig">Проверка подписи zip...</string>
+ <string name="verify_zip_fail">Подпись Zip не прошла проверку!</string>
+ <string name="verify_zip_done">Подпись Zip проверена успешно.</string>
<string name="zip_corrupt">Zip-файл поврежден!</string>
<string name="no_md5">Пропуск проверки MD5: не найден MD5-файл</string>
<string name="md5_fail">MD5 не соответствует</string>
@@ -643,7 +643,7 @@
<string name="split_thread">Разделение идентификатора потока {1} в архив {2}</string>
<!-- These 2 items are saved in the data manager instead of resource manager, so %llu, etc is correct instead of {1} -->
<string name="file_progress">%llu из %llu файлов, %i%%</string>
- <string name="size_progress">%lluMB из %lluMB, %i%%</string>
+ <string name="size_progress">%llu МБ из %llu МБ, %i%%</string>
<string name="decrypt_cmd">Попытка расшифровать раздел данных с помощью командной строки.</string>
<string name="base_pkg_err">Неудача при загрузке базовых пакетов.</string>
<string name="simulating">Имитация действий...</string>