mirror of
https://github.com/TrianguloY/UrlChecker.git
synced 2024-09-19 11:52:14 +02:00
json editor as activity
This commit is contained in:
parent
baaf2e7431
commit
aaa689f904
@ -26,6 +26,7 @@
|
||||
<activity android:name=".activities.ModulesActivity" />
|
||||
<activity android:name=".activities.SettingsActivity" />
|
||||
<activity android:name=".activities.TutorialActivity" />
|
||||
<activity android:name=".activities.JsonEditorActivity" />
|
||||
<activity
|
||||
android:name=".dialogs.MainDialog"
|
||||
android:excludeFromRecents="true"
|
||||
|
@ -0,0 +1,210 @@
|
||||
package com.trianguloy.urlchecker.activities;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.AlertDialog;
|
||||
import android.content.Context;
|
||||
import android.os.Bundle;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.trianguloy.urlchecker.R;
|
||||
import com.trianguloy.urlchecker.utilities.AndroidSettings;
|
||||
import com.trianguloy.urlchecker.utilities.methods.AndroidUtils;
|
||||
import com.trianguloy.urlchecker.utilities.methods.LocaleUtils;
|
||||
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
/** Activity for editing a json */
|
||||
public class JsonEditorActivity extends Activity {
|
||||
|
||||
public static final String EXTRA_CLASS = "data";
|
||||
|
||||
private static final int INDENT_SPACES = 2;
|
||||
|
||||
private JsonEditorInterface provider;
|
||||
private TextView editor;
|
||||
private View info;
|
||||
|
||||
// ------------------- listeners -------------------
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
AndroidSettings.setTheme(this, false);
|
||||
LocaleUtils.setLocale(this);
|
||||
setContentView(R.layout.activity_json_editor);
|
||||
setTitle(R.string.json_editor);
|
||||
AndroidUtils.configureUp(this);
|
||||
|
||||
|
||||
try {
|
||||
// this is a bit dangerous
|
||||
provider = ((Class<JsonEditorInterface>) getIntent().getSerializableExtra(EXTRA_CLASS)).getConstructor(Context.class).newInstance(this);
|
||||
} catch (Exception e) {
|
||||
AndroidUtils.assertError("Unable to instantiate the JsonEditorInterface", e);
|
||||
Toast.makeText(this, R.string.toast_invalid, Toast.LENGTH_SHORT).show();
|
||||
finish();
|
||||
return;
|
||||
}
|
||||
|
||||
info = findViewById(R.id.info);
|
||||
this.<TextView>findViewById(R.id.description).setText(provider.getEditorDescription());
|
||||
|
||||
editor = findViewById(R.id.data);
|
||||
editor.setText(noFailToString(provider.getJson()));
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCreateOptionsMenu(Menu menu) {
|
||||
getMenuInflater().inflate(R.menu.activity_json_editor, menu);
|
||||
AndroidUtils.fixMenuIconColor(menu.findItem(R.id.menu_format), this);
|
||||
return super.onCreateOptionsMenu(menu);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
switch (item.getItemId()) {
|
||||
// press the 'back' button in the action bar to go back
|
||||
case android.R.id.home -> onBackPressed();
|
||||
// format content
|
||||
case R.id.menu_format -> format();
|
||||
// save
|
||||
case R.id.menu_save -> save();
|
||||
// discard
|
||||
case R.id.menu_discard -> discard();
|
||||
// reset
|
||||
case R.id.menu_reset -> reset();
|
||||
// toggle info visibility
|
||||
case R.id.menu_show_info -> {
|
||||
item.setChecked(!item.isChecked());
|
||||
info.setVisibility(item.isChecked() ? View.VISIBLE : View.GONE);
|
||||
}
|
||||
|
||||
default -> {
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBackPressed() {
|
||||
// validate
|
||||
JSONObject currentData;
|
||||
try {
|
||||
currentData = new JSONObject(editor.getText().toString());
|
||||
} catch (JSONException e) {
|
||||
new AlertDialog.Builder(this)
|
||||
.setTitle(R.string.toast_invalid)
|
||||
.setMessage(R.string.json_ignore)
|
||||
.setPositiveButton(R.string.json_discard_close, (dialog, which) -> finish())
|
||||
.setNegativeButton(android.R.string.cancel, null)
|
||||
.show();
|
||||
return;
|
||||
}
|
||||
|
||||
// check changes, exit if there are none
|
||||
if (Objects.equals(noFailToString(currentData), noFailToString(provider.getJson()))) {
|
||||
finish();
|
||||
return;
|
||||
}
|
||||
|
||||
// ask to save or discard
|
||||
new AlertDialog.Builder(this)
|
||||
.setTitle(R.string.save)
|
||||
.setMessage(R.string.json_save)
|
||||
.setPositiveButton(R.string.save, (dialog, which) -> {
|
||||
var result = provider.saveJson(currentData);
|
||||
if (result == null) {
|
||||
// all ok, exit
|
||||
finish();
|
||||
} else {
|
||||
// error while saving
|
||||
new AlertDialog.Builder(this)
|
||||
.setTitle(R.string.toast_invalid)
|
||||
.setMessage(getString(R.string.json_save_error, result))
|
||||
.setPositiveButton(android.R.string.ok, null)
|
||||
.show();
|
||||
}
|
||||
})
|
||||
.setNeutralButton(R.string.discard, (dialog, which) -> finish())
|
||||
.setNegativeButton(android.R.string.cancel, null)
|
||||
.show();
|
||||
}
|
||||
|
||||
/* ------------------- actions ------------------- */
|
||||
|
||||
/** Formats the editor content, shows a dialog if invalid */
|
||||
private void format() {
|
||||
try {
|
||||
editor.setText(new JSONObject(editor.getText().toString()).toString(INDENT_SPACES));
|
||||
} catch (JSONException e) {
|
||||
// invalid json
|
||||
new AlertDialog.Builder(this)
|
||||
.setTitle(R.string.toast_invalid)
|
||||
.setMessage(R.string.json_format_error)
|
||||
.setPositiveButton(android.R.string.ok, null)
|
||||
.show();
|
||||
}
|
||||
}
|
||||
|
||||
/** Discard the editor changes and restore the saved contents */
|
||||
private void discard() {
|
||||
new AlertDialog.Builder(this)
|
||||
.setTitle(R.string.discard)
|
||||
.setMessage(R.string.json_discard)
|
||||
.setPositiveButton(android.R.string.yes, (dialog, which) -> editor.setText(noFailToString(provider.getJson())))
|
||||
.setNegativeButton(android.R.string.cancel, null)
|
||||
.show();
|
||||
}
|
||||
|
||||
/** Discard the editor changes and restore the built-in contents */
|
||||
private void reset() {
|
||||
new AlertDialog.Builder(this)
|
||||
.setTitle(R.string.reset)
|
||||
.setMessage(R.string.json_reset)
|
||||
.setPositiveButton(android.R.string.yes, (dialog, which) -> editor.setText(noFailToString(provider.getBuiltInJson())))
|
||||
.setNegativeButton(android.R.string.cancel, null)
|
||||
.show();
|
||||
}
|
||||
|
||||
/** Saved current content. Display a dialog if it's not valid json or the saving failed */
|
||||
private void save() {
|
||||
String result;
|
||||
try {
|
||||
result = provider.saveJson(new JSONObject(editor.getText().toString()));
|
||||
} catch (JSONException e) {
|
||||
// invalid json
|
||||
result = getString(R.string.json_format_error);
|
||||
}
|
||||
|
||||
if (result != null) {
|
||||
// error while saving
|
||||
new AlertDialog.Builder(this)
|
||||
.setTitle(R.string.toast_invalid)
|
||||
.setMessage(getString(R.string.json_save_error, result))
|
||||
.setPositiveButton(android.R.string.ok, null)
|
||||
.show();
|
||||
}
|
||||
}
|
||||
|
||||
/* ------------------- utils ------------------- */
|
||||
|
||||
/** Formats a json into a valid string that doesn't throws a JSON exception */
|
||||
private static String noFailToString(JSONObject content) {
|
||||
try {
|
||||
return content.toString(INDENT_SPACES);
|
||||
} catch (JSONException e) {
|
||||
// panic, don't format then
|
||||
return content.toString();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,37 @@
|
||||
package com.trianguloy.urlchecker.activities;
|
||||
|
||||
import static com.trianguloy.urlchecker.activities.JsonEditorActivity.EXTRA_CLASS;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
|
||||
import org.json.JSONObject;
|
||||
|
||||
/**
|
||||
* If a class implements this, it will be able to show a JSON editor.
|
||||
* IMPORTANT! The class must also have a constructor with a single Context parameter.
|
||||
*/
|
||||
public interface JsonEditorInterface {
|
||||
|
||||
/* ------------------------- implementation ------------------------- */
|
||||
|
||||
/** Should return the currently saved json */
|
||||
JSONObject getJson();
|
||||
|
||||
/** Should return the built-in json */
|
||||
JSONObject getBuiltInJson();
|
||||
|
||||
/** Should saves a json. Return null if all ok, a message string to display if not */
|
||||
String saveJson(JSONObject data);
|
||||
|
||||
/** The string id of the description to show in the editor */
|
||||
int getEditorDescription();
|
||||
|
||||
/* ------------------------- usage ------------------------- */
|
||||
|
||||
/** Displays a generic editor for json content. */
|
||||
default void showEditor(Context cntx) {
|
||||
cntx.startActivity(new Intent(cntx, JsonEditorActivity.class)
|
||||
.putExtra(EXTRA_CLASS, this.getClass()));
|
||||
}
|
||||
}
|
@ -1,94 +0,0 @@
|
||||
package com.trianguloy.urlchecker.dialogs;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.AlertDialog;
|
||||
import android.view.View;
|
||||
import android.view.WindowManager;
|
||||
import android.widget.EditText;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.trianguloy.urlchecker.R;
|
||||
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
|
||||
/**
|
||||
* @see this#show
|
||||
*/
|
||||
public class JsonEditor {
|
||||
|
||||
public interface Listener {
|
||||
/**
|
||||
* Current data that the user wants to save.
|
||||
* Return true if it is ok and the dialog should be dismissed, false otherwise.
|
||||
*/
|
||||
boolean onSave(JSONObject content);
|
||||
}
|
||||
|
||||
/**
|
||||
* Displays a generic editor for json content.
|
||||
*/
|
||||
public static void show(JSONObject content, JSONObject reset, int description, Activity cntx, Listener onSave) {
|
||||
|
||||
// prepare dialog content
|
||||
View views = cntx.getLayoutInflater().inflate(R.layout.json_editor, null);
|
||||
views.<TextView>findViewById(R.id.description).setText(description);
|
||||
|
||||
// init rules
|
||||
EditText data = views.findViewById(R.id.data);
|
||||
data.setText(noFailToString(content));
|
||||
|
||||
// formatter
|
||||
views.findViewById(R.id.format).setOnClickListener(v -> {
|
||||
try {
|
||||
data.setText(new JSONObject(data.getText().toString()).toString(2));
|
||||
} catch (JSONException e) {
|
||||
e.printStackTrace();
|
||||
Toast.makeText(cntx, R.string.toast_invalid, Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
});
|
||||
|
||||
// prepare dialog
|
||||
AlertDialog dialog = new AlertDialog.Builder(cntx)
|
||||
.setView(views)
|
||||
.setPositiveButton(R.string.save, null) // set below
|
||||
.setNegativeButton(android.R.string.cancel, null)
|
||||
.setNeutralButton(R.string.reset, null) // set below
|
||||
.setCancelable(false)
|
||||
.show();
|
||||
|
||||
dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
|
||||
|
||||
// prepare more dialog
|
||||
// these are configured here to disable automatic auto-closing when they are pressed
|
||||
dialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(v -> {
|
||||
try {
|
||||
if (onSave.onSave(new JSONObject(data.getText().toString()))) {
|
||||
dialog.dismiss();
|
||||
}
|
||||
} catch (JSONException e) {
|
||||
e.printStackTrace();
|
||||
Toast.makeText(cntx, R.string.toast_invalid, Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
});
|
||||
dialog.getButton(AlertDialog.BUTTON_NEUTRAL).setOnClickListener(v -> {
|
||||
// clear catalog and reload internal
|
||||
data.setText(noFailToString(reset));
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Formats a json into a valid string that doesn't throws a JSON exception
|
||||
* (as a function because I needed a final string)
|
||||
*/
|
||||
private static String noFailToString(JSONObject content) {
|
||||
try {
|
||||
return content.toString(2);
|
||||
} catch (JSONException e) {
|
||||
// panic, don't format then
|
||||
return content.toString();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -11,7 +11,7 @@ import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.trianguloy.urlchecker.R;
|
||||
import com.trianguloy.urlchecker.dialogs.JsonEditor;
|
||||
import com.trianguloy.urlchecker.activities.JsonEditorInterface;
|
||||
import com.trianguloy.urlchecker.utilities.generics.GenericPref;
|
||||
import com.trianguloy.urlchecker.utilities.methods.AndroidUtils;
|
||||
import com.trianguloy.urlchecker.utilities.methods.HttpUtils;
|
||||
@ -31,7 +31,7 @@ import java.util.List;
|
||||
/**
|
||||
* Manages the local catalog with the rules
|
||||
*/
|
||||
public class ClearUrlCatalog {
|
||||
public class ClearUrlCatalog implements JsonEditorInterface {
|
||||
|
||||
/* ------------------- constants ------------------- */
|
||||
|
||||
@ -182,16 +182,34 @@ public class ClearUrlCatalog {
|
||||
* Show the rules editor dialog
|
||||
*/
|
||||
public void showEditor() {
|
||||
JsonEditor.show(getCatalog(), getBuiltIn(), R.string.mClear_editor, cntx, content -> {
|
||||
if (setRules(content, false) != Result.ERROR) {
|
||||
// saved data, close dialog
|
||||
return true;
|
||||
} else {
|
||||
// invalid data, keep dialog and show why
|
||||
Toast.makeText(cntx, R.string.toast_invalid, Toast.LENGTH_LONG).show();
|
||||
return false;
|
||||
}
|
||||
});
|
||||
showEditor(cntx);
|
||||
}
|
||||
|
||||
@Override
|
||||
public JSONObject getJson() {
|
||||
return getCatalog();
|
||||
}
|
||||
|
||||
@Override
|
||||
public JSONObject getBuiltInJson() {
|
||||
return getBuiltIn();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String saveJson(JSONObject data) {
|
||||
if (setRules(data, false) != Result.ERROR) {
|
||||
// saved data, close dialog
|
||||
return null;
|
||||
} else {
|
||||
// invalid data, keep dialog and show why
|
||||
Toast.makeText(cntx, R.string.toast_invalid, Toast.LENGTH_LONG).show();
|
||||
return "Invalid";
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getEditorDescription() {
|
||||
return R.string.mClear_editor;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -9,7 +9,6 @@ import com.trianguloy.urlchecker.R;
|
||||
import com.trianguloy.urlchecker.utilities.generics.JsonCatalog;
|
||||
import com.trianguloy.urlchecker.utilities.methods.HttpUtils;
|
||||
import com.trianguloy.urlchecker.utilities.methods.JavaUtils;
|
||||
import com.trianguloy.urlchecker.utilities.methods.StreamUtils;
|
||||
import com.trianguloy.urlchecker.utilities.wrappers.InternalFile;
|
||||
import com.trianguloy.urlchecker.utilities.wrappers.ProgressDialog;
|
||||
|
||||
@ -55,7 +54,7 @@ public class Hosts {
|
||||
);
|
||||
|
||||
if (showEditor) builder
|
||||
.setNeutralButton(R.string.json_edit, (dialog, which) -> data.showEditor());
|
||||
.setNeutralButton(R.string.json_editor, (dialog, which) -> data.showEditor());
|
||||
|
||||
builder.show();
|
||||
}
|
||||
|
@ -1,6 +1,5 @@
|
||||
package com.trianguloy.urlchecker.modules.companions;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
|
||||
import com.trianguloy.urlchecker.R;
|
||||
@ -15,7 +14,7 @@ import org.json.JSONObject;
|
||||
*/
|
||||
public class PatternCatalog extends JsonCatalog {
|
||||
|
||||
public PatternCatalog(Activity cntx) {
|
||||
public PatternCatalog(Context cntx) {
|
||||
super(cntx, "patterns", R.string.mPttrn_editor);
|
||||
}
|
||||
|
||||
|
@ -1,9 +1,8 @@
|
||||
package com.trianguloy.urlchecker.utilities.generics;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
|
||||
import com.trianguloy.urlchecker.dialogs.JsonEditor;
|
||||
import com.trianguloy.urlchecker.activities.JsonEditorInterface;
|
||||
import com.trianguloy.urlchecker.utilities.wrappers.InternalFile;
|
||||
|
||||
import org.json.JSONException;
|
||||
@ -12,13 +11,13 @@ import org.json.JSONObject;
|
||||
/**
|
||||
* Represents a generic catalog
|
||||
*/
|
||||
public abstract class JsonCatalog {
|
||||
public abstract class JsonCatalog implements JsonEditorInterface {
|
||||
|
||||
private final Activity cntx;
|
||||
private final Context cntx;
|
||||
private final InternalFile custom;
|
||||
private final int editorDescription;
|
||||
|
||||
public JsonCatalog(Activity cntx, String fileName, int editorDescription) {
|
||||
public JsonCatalog(Context cntx, String fileName, int editorDescription) {
|
||||
this.cntx = cntx;
|
||||
this.editorDescription = editorDescription;
|
||||
custom = new InternalFile(fileName, cntx);
|
||||
@ -71,11 +70,30 @@ public abstract class JsonCatalog {
|
||||
return custom.set(content.toString());
|
||||
}
|
||||
|
||||
/**
|
||||
* Shows a dialog to manually edit the catalog
|
||||
*/
|
||||
|
||||
@Override
|
||||
public JSONObject getJson() {
|
||||
return getCatalog();
|
||||
}
|
||||
|
||||
@Override
|
||||
public JSONObject getBuiltInJson() {
|
||||
return getBuiltIn();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String saveJson(JSONObject data) {
|
||||
return save(data) ? null : "Unable to save";
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getEditorDescription() {
|
||||
return editorDescription;
|
||||
}
|
||||
|
||||
|
||||
public void showEditor() {
|
||||
JsonEditor.show(getCatalog(), getBuiltIn(), editorDescription, cntx, this::save);
|
||||
showEditor(cntx);
|
||||
}
|
||||
|
||||
}
|
@ -14,9 +14,7 @@ import java.util.List;
|
||||
*/
|
||||
public interface JavaUtils {
|
||||
|
||||
/**
|
||||
* Converts an iterator to a list
|
||||
*/
|
||||
/** Converts an iterator to a list */
|
||||
static <T> List<T> toList(Iterator<T> iterator) {
|
||||
List<T> list = new ArrayList<>();
|
||||
while (iterator.hasNext()) {
|
||||
@ -25,9 +23,7 @@ public interface JavaUtils {
|
||||
return list;
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts a string into a json object, returns empty on failure
|
||||
*/
|
||||
/** Converts a string into a json object, returns empty on failure */
|
||||
static JSONObject toJson(String content) {
|
||||
try {
|
||||
return new JSONObject(content);
|
||||
@ -37,9 +33,7 @@ public interface JavaUtils {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Clamps a value between two other values.
|
||||
*/
|
||||
/** Clamps a value between two other values. */
|
||||
static int clamp(int min, int value, int max) {
|
||||
return min <= max ? Math.max(min, Math.min(value, max))
|
||||
// just in case
|
||||
@ -108,17 +102,13 @@ public interface JavaUtils {
|
||||
else list.add(element);
|
||||
}
|
||||
|
||||
/**
|
||||
* java.util.function.Consumer requires api 24
|
||||
*/
|
||||
/** java.util.function.Consumer requires api 24 */
|
||||
@FunctionalInterface
|
||||
interface Consumer<T> {
|
||||
void accept(T t);
|
||||
}
|
||||
|
||||
/**
|
||||
* java.util.function.Function requires api 24
|
||||
*/
|
||||
/** java.util.function.Function requires api 24 */
|
||||
@FunctionalInterface
|
||||
interface Function<T, R> {
|
||||
R apply(T t);
|
||||
@ -129,9 +119,7 @@ public interface JavaUtils {
|
||||
return t -> !function.apply(t);
|
||||
}
|
||||
|
||||
/**
|
||||
* java.util.function.UnaryOperator requires api 24
|
||||
*/
|
||||
/** java.util.function.UnaryOperator requires api 24 */
|
||||
@FunctionalInterface
|
||||
interface UnaryOperator<T> extends Function<T, T> {
|
||||
}
|
||||
|
@ -5,6 +5,6 @@
|
||||
android:width="24dp"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<path
|
||||
android:fillColor="@color/app"
|
||||
android:fillColor="@android:color/white"
|
||||
android:pathData="M9.4,16.6L4.8,12l4.6,-4.6L8,6l-6,6 6,6 1.4,-1.4zM14.6,16.6l4.6,-4.6 -4.6,-4.6L16,6l6,6 -6,6 -1.4,-1.4z" />
|
||||
</vector>
|
||||
|
36
app/src/main/res/layout/activity_json_editor.xml
Normal file
36
app/src/main/res/layout/activity_json_editor.xml
Normal file
@ -0,0 +1,36 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical">
|
||||
|
||||
<ScrollView
|
||||
android:id="@+id/info"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_weight="1"
|
||||
android:fillViewport="true">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/description"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/json_info" />
|
||||
</ScrollView>
|
||||
|
||||
<ScrollView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_weight="2"
|
||||
android:fillViewport="true">
|
||||
|
||||
<EditText
|
||||
android:id="@+id/data"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="top"
|
||||
android:hint="{...}"
|
||||
android:inputType="textMultiLine" />
|
||||
</ScrollView>
|
||||
|
||||
</LinearLayout>
|
@ -53,7 +53,7 @@
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:text="@string/json_edit" />
|
||||
android:text="@string/json_editor" />
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
@ -14,13 +14,15 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal">
|
||||
<Button
|
||||
android:id="@+id/edit"
|
||||
style="?android:attr/buttonBarButtonStyle"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:text="@string/json_edit" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/edit"
|
||||
style="?android:attr/buttonBarButtonStyle"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:text="@string/json_editor" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/rebuild"
|
||||
style="?android:attr/buttonBarButtonStyle"
|
||||
@ -30,4 +32,4 @@
|
||||
android:text="@string/mHosts_build" />
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
@ -14,7 +14,7 @@
|
||||
style="?android:attr/buttonBarButtonStyle"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/json_edit" />
|
||||
android:text="@string/json_editor" />
|
||||
|
||||
<Switch
|
||||
android:id="@+id/regex_fix"
|
||||
|
@ -1,51 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical"
|
||||
android:padding="@dimen/smallPadding">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:autoLink="web"
|
||||
android:text="@string/json_desc" />
|
||||
|
||||
<View
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="2dp"
|
||||
android:background="?android:attr/listDivider" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/description"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:autoLink="web" />
|
||||
|
||||
<FrameLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0dp"
|
||||
android:layout_weight="1">
|
||||
|
||||
<EditText
|
||||
android:id="@+id/data"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:ems="10"
|
||||
android:gravity="start|top"
|
||||
android:inputType="textMultiLine" />
|
||||
|
||||
<ImageButton
|
||||
android:id="@+id/format"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="right|top|end"
|
||||
android:src="@drawable/format" />
|
||||
</FrameLayout>
|
||||
</LinearLayout>
|
||||
</ScrollView>
|
27
app/src/main/res/menu/activity_json_editor.xml
Normal file
27
app/src/main/res/menu/activity_json_editor.xml
Normal file
@ -0,0 +1,27 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item
|
||||
android:id="@+id/menu_format"
|
||||
android:icon="@drawable/format"
|
||||
android:showAsAction="ifRoom"
|
||||
android:title="@string/format" />
|
||||
<item
|
||||
android:id="@+id/menu_save"
|
||||
android:icon="@android:drawable/ic_menu_save"
|
||||
android:showAsAction="ifRoom"
|
||||
android:title="@string/save" />
|
||||
<item
|
||||
android:id="@+id/menu_discard"
|
||||
android:showAsAction="ifRoom"
|
||||
android:title="@string/discard" />
|
||||
<item
|
||||
android:id="@+id/menu_reset"
|
||||
android:showAsAction="ifRoom"
|
||||
android:title="@string/reset" />
|
||||
<item
|
||||
android:id="@+id/menu_show_info"
|
||||
android:showAsAction="ifRoom"
|
||||
android:checkable="true"
|
||||
android:checked="true"
|
||||
android:title="@string/json_info" />
|
||||
</menu>
|
@ -91,7 +91,7 @@
|
||||
<string name="next">التالي</string>
|
||||
<string name="back">السابق</string>
|
||||
<string name="dismiss">تجاهل</string>
|
||||
<string name="json_edit">محرر متقدم</string>
|
||||
<string name="json_editor">محرر متقدم</string>
|
||||
<string name="shortcut_checkClipboard">التحقق من عناوين الويب URLs الموجودة في الحافظة</string>
|
||||
<string name="mPttrn_name">فحص النمط</string>
|
||||
<string name="mPttrn_regexfix">إصلاح مجموعات الفحص النمطية الاختيارية (تعطيلها إذا كان الفحص النمطي لا يعمل بشكل صحيح)</string>
|
||||
@ -163,7 +163,6 @@
|
||||
<string name="btn_tutorialEnd">إنهاء الدليل التعليمي</string>
|
||||
<string name="reset">إعادة الضبط</string>
|
||||
<string name="noLinks">لم يتم اكتشاف أي روابط</string>
|
||||
<string name="json_desc">[ميزة تجريبية] هذا محرر متقدم، يجب تنسيق المحتوى إلى JSON صالح. يمكنك الضغط على الزر في الزاوية العلوية اليمنى لتنسيقه والتحقق من صحته.</string>
|
||||
<string name="mPttrn_desc">هذه الوحدة تقوم بفحص عنوان الويب باستخدام أنماط الفحص النمطية التي تحذر، تقترح أو تطبق الاستبدالات. يمكنك تعديل أو إنشاء أنماط خاصة بك، أو حتى استخدام أنماط تم إنشاؤها من قبل المستخدمين.
|
||||
\nالأنماط المضمنة تشمل:
|
||||
\n- تحذير عندما يحتوي على أحرف غير ascii مثل الحروف اليونانية. يمكن استخدام هذا للصيد الاحتيالي: googĺe.com بدلاً من google.com
|
||||
|
@ -122,7 +122,7 @@
|
||||
\n- \'enabled\': boolean: nastavte na false, abyste vzor deaktivovali.
|
||||
\nPoznámka: Pokud si vzory upravíte, nové výchozí vzory z aktualizací aplikace se automaticky nepřidají (můžete je obnovit pomocí možnosti reset).</string>
|
||||
<string name="mOpen_with">Otevřít v %s</string>
|
||||
<string name="json_edit">Pokročilý editor</string>
|
||||
<string name="json_editor">Pokročilý editor</string>
|
||||
<string name="link_changelog">Seznam změn</string>
|
||||
<string name="txt_conf">Zde jsou uvedeny všechny dostupné moduly, u kterých si můžete zkontrolovat jejich popis a nastavení. Můžete také změnit jejich pořadí, přepnout viditelnost názvu či je povolit/zakázat.</string>
|
||||
<string name="txt_openLinks">Otevírání odkazů v této aplikaci: V průběhu let Android změnil způsob nastavení otevírání odkazů a značně se tak liší mezi jednotlivými verzemi. Níže najdete výběr možných kroků nastavení pro vaše zařízení. Pokud se odkazy v této aplikaci neotevírají, vyzkoušejte je všechny.</string>
|
||||
@ -145,7 +145,6 @@
|
||||
\n
|
||||
\nSeznam modulů otevřete na hlavní obrazovce nebo klepnutím na tlačítko níže.</string>
|
||||
<string name="back">Zpět</string>
|
||||
<string name="json_desc">[Funkce v betě] Toto je pokročilý editor, obsah musí být naformátován do platného JSON. Stisknutím pravého horního tlačítka jej naformátujete a potvrdíte.</string>
|
||||
<string name="shortcut_checkClipboard">Najít URL odkaz(y) ve schránce</string>
|
||||
<string name="mPttrn_desc">Tento modul kontroluje adresu URL pomocí vzorů regulárních výrazů (regex), které varují, navrhují či nahrazují. Můžete upravovat nebo vytvářet své vlastní vzory, nebo dokonce používat ty vytvořené uživatelem.
|
||||
\nMezi vestavěné vzory patří:
|
||||
|
@ -34,7 +34,7 @@
|
||||
<string name="deviceDefault">Geräte-Standard</string>
|
||||
<string name="next">Weiter</string>
|
||||
<string name="back">Zurück</string>
|
||||
<string name="json_edit">Erweiterter Editor</string>
|
||||
<string name="json_editor">Erweiterter Editor</string>
|
||||
<string name="shortcut_checkClipboard">URLs aus der Zwischenablage prüfen</string>
|
||||
<string name="txt_sample">Tippen Sie zum Testen auf folgenden Link:</string>
|
||||
<string name="a_modules">Module</string>
|
||||
@ -56,7 +56,6 @@
|
||||
<string name="translators">T</string>
|
||||
<string name="txt_info">Diese App fungiert als Zwischenschritt beim Öffnen angeklickter Links. Wenn diese App zum Öffnen ausgewählt wurde, wird ein Dialog mit einigen Informationen über den Link angezeigt. Über den Module-Button unten können Sie alle verfügbaren Module prüfen und konfigurieren.</string>
|
||||
<string name="menu_toggleDecorations">Alle Titel umschalten</string>
|
||||
<string name="json_desc">[Beta-Funktion] Dies ist ein erweiterter Editor, der Inhalt muss gültiges JSON sein. Sie können die Schaltfläche oben rechts drücken, um das JSON zu formatieren und zu validieren.</string>
|
||||
<string name="mPttrn_name">Muster (RegEx)</string>
|
||||
<string name="mOpen_name">Öffnen und Teilen</string>
|
||||
<string name="mOpen_ctabs">Benutzerdefinierte Tabs:</string>
|
||||
|
@ -99,8 +99,15 @@ Hay algunos enlaces cuyo único propósito es redirigirte a otro enlace. Si el e
|
||||
<!--
|
||||
json
|
||||
-->
|
||||
<string name="json_desc">[Funcionalidad beta] Este es un editor avanzado, el contenido debe ser JSON válido. Puedes pulsar el botón de arriba a la derecha para formatearlo y validarlo.</string>
|
||||
<string name="json_edit">Editor avanzado</string>
|
||||
<string name="json_editor">Editor JSON</string>
|
||||
<string name="json_info">Mostrar información</string>
|
||||
<string name="json_ignore">El contenido no es JSON válido. Quieres descartarlo y cerrar el editor?</string>
|
||||
<string name="json_discard_close">Descartar y cerrar</string>
|
||||
<string name="json_save">Hay cambios sin guardar, quieres guardarlos o descartarlos?</string>
|
||||
<string name="json_save_error">No se ha podido guardar: %s</string>
|
||||
<string name="json_format_error">El contenido no es JSON válido, no se puede validar.</string>
|
||||
<string name="json_discard">Cuidado, esto reemplazará el contenido del editor con el json guardado. Todos los cambios realizados se perderán. Quieres continuar?</string>
|
||||
<string name="json_reset">Cuidado, esto reemplazará el contenido del editor con el json por defecto. Todos los cambios realizados se perderán, aunque el contenido guardado no se modificará a no ser que se guarde manualmente. Quieres continuar?</string>
|
||||
<!--
|
||||
shortcuts
|
||||
-->
|
||||
|
@ -95,8 +95,7 @@ Ceci est le didacticiel, si vous souhaitez l'ignorer vous pouvez le faire en uti
|
||||
<!--
|
||||
json
|
||||
-->
|
||||
<string name="json_desc">[Fonctionnalité bêta] Il s\'agit d\'un éditeur avancé, le contenu doit être formaté en JSON valide. Vous pouvez appuyer sur le bouton en haut à droite pour le formater et le valider.</string>
|
||||
<string name="json_edit">Éditeur avancé</string>
|
||||
<string name="json_editor">Éditeur avancé</string>
|
||||
<!--
|
||||
shortcuts
|
||||
-->
|
||||
|
@ -50,7 +50,6 @@
|
||||
<string name="mPttrn_wrongSchemaHttp">अमान्य http scheme बड़ा किया।</string>
|
||||
<string name="mChg_current">वर्तमान संस्करण: %s</string>
|
||||
<string name="mPttrn_regexfix">वैकल्पिक regex समूहों को ठीक करें (यदि regex सही ढंग से काम नहीं कर रहा है तो अक्षम करें)</string>
|
||||
<string name="json_desc">[बीटा सुविधा] यह एक उन्नत संपादक है, सामग्री को वैध JSON में स्वरूपित किया जाना चाहिए। आप इसे प्रारूपित करने और सत्यापित करने के लिए शीर्ष-दाएं बटन दबा सकते हैं।</string>
|
||||
<string name="mPttrn_http">HTTP लिंक। HTTPS का उपयोग विचारें।</string>
|
||||
<string name="next">अगला</string>
|
||||
<string name="mPttrn_userContent">उपयोगकर्ता द्वारा बनाए गए अन्य उपयोगी पैटर्न की सूची: %s</string>
|
||||
@ -85,7 +84,7 @@
|
||||
<string name="mPttrn_fix">लागू</string>
|
||||
<string name="mPttrn_noSchemeHttp">HTTP scheme अनुपलब्ध।</string>
|
||||
<string name="mPttrn_wrongSchemaHttps">अमान्य https scheme बड़ा किया।</string>
|
||||
<string name="json_edit">उन्नत संपादक</string>
|
||||
<string name="json_editor">उन्नत संपादक</string>
|
||||
<string name="mPttrn_fixed">लागू किया - %s</string>
|
||||
<string name="mOpen_clipboard">यूआरएल क्लिपबोर्ड पर कॉपी किया गया</string>
|
||||
<string name="share">साझा</string>
|
||||
|
@ -58,7 +58,6 @@
|
||||
<string name="mClear_desc">Modul ini menghilangkan pelacakan, perujuk, dan parameter lain yang tidak bermanfaat di URL. Ia juga bisa melacak pengalihan URL luring yang umum digunakan.</string>
|
||||
<string name="mVT_connectError">Tidak dapat melakukan koneksi ke VirusTotal. Pastikan Anda terhubung ke internet, atau coba lagi nanti.</string>
|
||||
<string name="mPttrn_regexfix">Perbaiki grup regex yang opsional (nonaktifkan jika regex tidak bekerja dengan baik)</string>
|
||||
<string name="json_desc">[Fitur beta] Berikut ini adalah editor tingkat lanjut, konten terkait harus berupa JSON yang valid. Anda bisa menekan tombol di sebelah kanan atas untuk memformat dan memvalidasinya.</string>
|
||||
<string name="mPttrn_http">Link HTTP. Pertimbangkan untuk beralih ke HTTPS.</string>
|
||||
<string name="mStatus_check">Cek status</string>
|
||||
<string name="mD_desc">Jika Anda mengubah urutan modul, modul baru yang ditambahkan pada pembaruan selanjutnya akan diletakkan di atas modul ini.
|
||||
@ -152,7 +151,7 @@
|
||||
<string name="mPttrn_fix">Terapkan</string>
|
||||
<string name="mPttrn_noSchemeHttp">Skema HTTP tidak ditemukan.</string>
|
||||
<string name="mPttrn_wrongSchemaHttps">Skema https tidak valid.</string>
|
||||
<string name="json_edit">Editor tingkat lanjut</string>
|
||||
<string name="json_editor">Editor tingkat lanjut</string>
|
||||
<string name="mPttrn_fixed">%s - telah diterapkan</string>
|
||||
<string name="mD_name">Modul Awakutu/Penanda</string>
|
||||
<string name="mOpen_clipboard">URL telah disalin ke papan klip</string>
|
||||
|
@ -57,8 +57,7 @@ Traduzioni: %s."</string>
|
||||
<string name="share">Condividi</string>
|
||||
<string name="canceled">Cancellato</string>
|
||||
<string name="deviceDefault">Impostazioni predefinite</string>
|
||||
<string name="json_desc">"[Funzionalità beta] Questo è un editor avanzato, il contenuto dev'essere formattato in JSON. Puoi premere il pulsante in alto a destra per formattare e controllare."</string>
|
||||
<string name="json_edit">Editor avanzato</string>
|
||||
<string name="json_editor">Editor avanzato</string>
|
||||
<!-- modules -->
|
||||
<string name="mPttrn_name">Controllo dei pattern</string>
|
||||
<string name="mPttrn_desc">"Controlla cose comuni nell'url. Patterns inclusi:
|
||||
|
@ -31,8 +31,7 @@
|
||||
<string name="save">להציל</string>
|
||||
<string name="reset">איפוס</string>
|
||||
<string name="share">שתף אפליקציה</string>
|
||||
<string name="json_desc">[תכונת בטא] זהו עורך מתקדם, התוכן חייב להיות בפורמט ל-JSON חוקי. אתה יכול ללחוץ על הכפתור הימני העליון כדי לעצב ולאמת אותו.</string>
|
||||
<string name="json_edit">עורך מתקדם</string>
|
||||
<string name="json_editor">עורך מתקדם</string>
|
||||
<!-- modules -->
|
||||
<string name="mPttrn_name">בודק דפוסים</string>
|
||||
<string name="mPttrn_desc">"בודק בעיות נפוצות בכתובת האתר. דפוסים מובנים:
|
||||
|
@ -57,8 +57,7 @@
|
||||
<string name="share">このアプリを友達に自慢する</string>
|
||||
<string name="canceled">キャンセルされました</string>
|
||||
<string name="deviceDefault">デバイスの設定に従う</string>
|
||||
<string name="json_desc">[ベータ機能] これは上級者向けのエディタです。内容は有効な JSON にフォーマットされている必要があります。右上のボタンをタップすると、フォーマット・検証ができます。</string>
|
||||
<string name="json_edit">上級者向けエディタ</string>
|
||||
<string name="json_editor">上級者向けエディタ</string>
|
||||
<!-- modules -->
|
||||
<string name="mPttrn_name">パターンチェッカー</string>
|
||||
<string name="mPttrn_desc">"正規表現パターンで URL をチェックし、警告・提案・置換をします。パターンは変更したり、独自に作成したり、あるいは他のユーザーが作成したものを使用することもできます。
|
||||
|
@ -85,12 +85,11 @@
|
||||
<string name="mClear_editor">카탈로그 규칙: https://docs.clearurls.xyz/latest/specs/rules/ 의 형식을 따라야 합니다.
|
||||
\n부모 객체인 \'providers\'는 업데이트되었을 때 덮어씌어진다는 점을 주의하세요. 만약 개인적으로 규칙을 만들고 싶다면 아무 이름이나로 다른 부모 객체를 만들어서 규칙을 설정하세요.</string>
|
||||
<string name="toast_invalid">유효하지 않음</string>
|
||||
<string name="json_desc">[베타 기능] 이 고급 편집에서는 유효한 JSON 파일이 반드시 포함되어야 합니다. 오른쪽 위 버튼을 눌러서 유효한지 확인하세요.</string>
|
||||
<string name="clear">지우기</string>
|
||||
<string name="shortcut_checkClipboard">클립보드에서 URL 확인하기</string>
|
||||
<string name="mVT_warningUrl">주의: %d/%d 엔진이 URL을 감지했습니다. (%s 기준)</string>
|
||||
<string name="mVT_scan">스캔하기</string>
|
||||
<string name="json_edit">고급 편집</string>
|
||||
<string name="json_editor">고급 편집</string>
|
||||
<string name="mVT_tm">VirusTotal™은 Google, Inc.의 트레이드마크입니다.</string>
|
||||
<string name="mVT_scanning">스캔 중…</string>
|
||||
<string name="mVT_desc">이 모듈이 활성화되어 있을 때 VirusTotal을 이용해 URL을 검사할 수 있습니다. 개인 VirusTotal API 키가 필요하며, 키는 https://www.virustotal.com/gui/join-us 에서 무료로 회원가입 후 받을 수 있습니다.</string>
|
||||
|
@ -26,7 +26,7 @@
|
||||
<string name="deviceDefault">Enhetsforvalg</string>
|
||||
<string name="next">Neste</string>
|
||||
<string name="back">Tilbake</string>
|
||||
<string name="json_edit">Avansert tekstbehandler</string>
|
||||
<string name="json_editor">Avansert tekstbehandler</string>
|
||||
<string name="mPttrn_fix">Bruk</string>
|
||||
<string name="shortcut_checkClipboard">Sjekk nettadresser fra utklippstavlen</string>
|
||||
<string name="mPttrn_http">HTTP-lenke. Overvei å bruke HTTPS.</string>
|
||||
|
@ -20,7 +20,6 @@
|
||||
<string name="btn_tutorialSettings">Herhaal tutorial</string>
|
||||
<string name="mVT_connectError">Kan geen verbinding maken met VirusTotal. Zorg ervoor dat u verbonden bent met internet of probeer het later opnieuw.</string>
|
||||
<string name="mPttrn_regexfix">Optionele regex-groepen repareren (uitschakelen als regex niet correct werkt)</string>
|
||||
<string name="json_desc">[Bètafunctie] Dit is een geavanceerde editor, de inhoud moet worden opgemaakt in geldige JSON. U kunt op de knop rechtsboven drukken om deze te formatteren en te valideren.</string>
|
||||
<string name="tutorial">Tutorial</string>
|
||||
<string name="toast_defaultSet">De app is nu de standaardwebbrowser</string>
|
||||
<string name="mPttrn_http">HTTP-link. Overweeg het gebruik van HTTPS.</string>
|
||||
@ -155,7 +154,7 @@
|
||||
\n
|
||||
\nOpen de lijst met modules vanuit het hoofdscherm of door op de onderstaande knop te tikken.</string>
|
||||
<string name="mPttrn_wrongSchemaHttps">Ongeldig hoofdlettergebruik van https-schema.</string>
|
||||
<string name="json_edit">Geavanceerde editor</string>
|
||||
<string name="json_editor">Geavanceerde editor</string>
|
||||
<string name="mPttrn_fixed">Toegepast - %s</string>
|
||||
<string name="mD_name">Debug/Marker-module</string>
|
||||
<string name="mOpen_clipboard">URL gekopieerd naar klembord</string>
|
||||
|
@ -7,7 +7,7 @@
|
||||
<string name="tutorial">Tutorial</string>
|
||||
<string name="canceled">Cancelado</string>
|
||||
<string name="next">Próximo</string>
|
||||
<string name="json_edit">Editor avançado</string>
|
||||
<string name="json_editor">Editor avançado</string>
|
||||
<string name="defaultOff">Desabilitado por padrão</string>
|
||||
<string name="mClear_clear">Aplicar</string>
|
||||
<string name="mLog_empty">Sem dados</string>
|
||||
@ -129,7 +129,6 @@
|
||||
<string name="mClear_tm">Catálogo embutido copiado do ClearURLs: https://docs.clearurls.xyz/latest/specs/rules/</string>
|
||||
<string name="mClear_blocked">- BLOQUEADO!</string>
|
||||
<string name="mClear_exception">- ignorado devido a exceção %s</string>
|
||||
<string name="json_desc">[Função Beta] Este é um editor avançado, o conteúdo deve ser formatado em JSON válido. Você pode pressionar o botão no canto superior direito para formatá-lo e validá-lo.</string>
|
||||
<string name="mPttrn_noSchemeHttps">Esquema HTTPS ausente.</string>
|
||||
<string name="mPttrn_ok">Não há padrões correspondentes.</string>
|
||||
<string name="mStatus_autoCheck">Verifique automaticamente as URLs que correspondem ao seguinte padrão de expressão regular. Aviso! É aconselhável especificar um padrão restritivo (e não .* para todos) caso contrário, servidores mal-intencionados podem registrar seu endereço IP.</string>
|
||||
|
@ -68,8 +68,7 @@ Translations: %s."</string>
|
||||
<!--
|
||||
json
|
||||
-->
|
||||
<string name="json_desc">[Função Beta] Isto é um editor avançado, o conteudo tem que estar formatado em JSON válido. Podes pressionar o botão no canto superior direito para formatar e validar.</string>
|
||||
<string name="json_edit">Editor Avançado</string>
|
||||
<string name="json_editor">Editor Avançado</string>
|
||||
<!--
|
||||
modules
|
||||
-->
|
||||
|
@ -98,8 +98,7 @@
|
||||
<string name="deviceDefault">Dispozitiv implicit</string>
|
||||
<string name="next">Următor</string>
|
||||
<string name="back">Înapoi</string>
|
||||
<string name="json_desc">[Funcția beta] Acesta este un editor avansat, conținutul trebuie formatat în JSON valid. Puteți apăsa butonul din dreapta sus pentru a-l formata și valida.</string>
|
||||
<string name="json_edit">Editor avansat</string>
|
||||
<string name="json_editor">Editor avansat</string>
|
||||
<string name="mPttrn_desc">Acest modul verifică adresa URL cu modele regex care avertizează, sugerează sau aplică înlocuiri. Puteți modifica sau crea propriile modele sau chiar să le utilizați pe cele create de utilizator.
|
||||
\nModelele încorporate includ:
|
||||
\n- Avertizare când conține caractere non-ascii, cum ar fi literele grecești. Acesta poate fi folosit pentru phishing: googĺe.com vs google.com
|
||||
|
@ -76,7 +76,7 @@
|
||||
\nВажно: Все действия выполняются вручную. Приложение не будет ничего модифицировать, а также не будет подключаться к интернету, если вы отдельно не разрешите этого, но некоторые действия при вашем желании могут применяться автоматически.
|
||||
\n
|
||||
\nОткройте список модулей на главном экране или нажав на кнопку ниже.</string>
|
||||
<string name="json_edit">Продвинутый редактор</string>
|
||||
<string name="json_editor">Продвинутый редактор</string>
|
||||
<string name="share">Поделиться</string>
|
||||
<string name="defaultOff">Выключено по умолчанию</string>
|
||||
<string name="title_choose">Выберите приложение</string>
|
||||
@ -89,7 +89,6 @@
|
||||
<string name="mClear_lastUpdate">Последнее обновление:</string>
|
||||
<string name="mVT_connectError">Невозможно подключиться к VirusTotal. Удостоверьтесь, что вы подключены к интернету, или попробуйте позже.</string>
|
||||
<string name="mPttrn_regexfix">Исправить необязательные группы регулярных выражений (отключите, если регулярные выражения работают неправильно)</string>
|
||||
<string name="json_desc">[Бета-функция] Это продвинутый редактор, содержимое обязано быть форматировано в допустимый JSON. Вы можете нажать кнопку в правом верхнем углу для форматирования и проверки.</string>
|
||||
<string name="mPttrn_http">HTTP ссылка. Лучше использовать HTTPS.</string>
|
||||
<string name="mStatus_check">Проверить состояние</string>
|
||||
<string name="mD_desc">Если вы переставите модули, то те, добавленные в будущих обновлениях, будут размещены выше этого.
|
||||
|
@ -100,8 +100,7 @@ Umarım uygulamayı yararlı bulursunuz! Ve özellikler önermekten, hataları b
|
||||
<!--
|
||||
json
|
||||
-->
|
||||
<string name="json_desc">[Beta özelliği] Bu gelişmiş bir düzenleyicidir, içerik geçerli JSON olarak biçimlendirilmelidir. Biçimlendirmek ve doğrulamak için sağ üstteki butona basabilirsiniz.</string>
|
||||
<string name="json_edit">Gelişmiş düzenleyici</string>
|
||||
<string name="json_editor">Gelişmiş düzenleyici</string>
|
||||
<!--
|
||||
shortcuts
|
||||
-->
|
||||
|
@ -179,8 +179,7 @@
|
||||
<string name="mOpen_closeCopy">Đóng hộp thoại sau khi sao chép</string>
|
||||
<string name="dismiss">Bỏ qua</string>
|
||||
<string name="back">Quay lại</string>
|
||||
<string name="json_desc">[Tính năng Beta] Đây là trình chỉnh sửa nâng cao, nội dung phải được định dạng thành JSON hợp lệ. Bạn có thể nhấn nút trên cùng bên phải để định dạng và xác nhận nó.</string>
|
||||
<string name="json_edit">Trình chỉnh sửa nâng cao</string>
|
||||
<string name="json_editor">Trình chỉnh sửa nâng cao</string>
|
||||
<string name="shortcut_checkClipboard">Kiểm tra URL từ clipboard</string>
|
||||
<string name="mPttrn_name">Trình kiểm tra mẫu</string>
|
||||
<string name="mPttrn_regexfix">Sửa các nhóm biểu thức chính quy tùy chọn (vô hiệu hóa nếu biểu thức chính quy không hoạt động chính xác)</string>
|
||||
|
@ -86,8 +86,7 @@
|
||||
<string name="next">下一步</string>
|
||||
<string name="back">返回</string>
|
||||
<!-- json -->
|
||||
<string name="json_desc">[测试功能] 这是一个进阶编辑器,内容必须为有效的 JSON 格式。您可以点击右上角的按钮进行格式化和验证。</string>
|
||||
<string name="json_edit">进阶编辑器</string>
|
||||
<string name="json_editor">进阶编辑器</string>
|
||||
<!-- shortcuts -->
|
||||
<string name="shortcut_checkClipboard">检查剪贴板中的链接</string>
|
||||
<!-- modules -->
|
||||
|
@ -86,7 +86,7 @@
|
||||
<string name="mUnshort_checking">檢查中…</string>
|
||||
<string name="mClear_updateNow">立即更新</string>
|
||||
<string name="mPttrn_fix">套用</string>
|
||||
<string name="json_edit">進階編輯器</string>
|
||||
<string name="json_editor">進階編輯器</string>
|
||||
<string name="mOpen_clipboard">已將網址複製到剪貼簿</string>
|
||||
<string name="share">分享</string>
|
||||
<string name="mLog_edit">編輯記錄檔</string>
|
||||
@ -138,7 +138,6 @@
|
||||
<string name="mUnshort_name">縮址還原器</string>
|
||||
<string name="mHosts_malware">廣告/惡意軟體</string>
|
||||
<string name="mPttrn_ok">未與任何型樣相符</string>
|
||||
<string name="json_desc">[測試版功能] 此為進階編輯器,輸入的內容必須符合 JSON 的格式規範。點選右上角的按鈕即可自動排版並驗證之。</string>
|
||||
<string name="mUnshort_error">伺服器錯誤:%s</string>
|
||||
<string name="mClear_noRules">未與任何規則相符</string>
|
||||
<string name="mPttrn_name">型樣檢查器</string>
|
||||
|
@ -142,11 +142,20 @@ Hope you find the app useful! And don't hesitate to suggest features, report bug
|
||||
<string name="small">Small</string>
|
||||
<string name="normal">Normal</string>
|
||||
<string name="big">Big</string>
|
||||
<string name="format">Format</string>
|
||||
<string name="discard">Discard</string>
|
||||
<!--
|
||||
json
|
||||
-->
|
||||
<string name="json_desc">[Beta feature] This is an advanced editor, the content must be formatted into valid JSON. You can press the top-right button to format and validate it.</string>
|
||||
<string name="json_edit">Advanced editor</string>
|
||||
<string name="json_editor">JSON editor</string>
|
||||
<string name="json_info">Show info</string>
|
||||
<string name="json_ignore">The content is not valid JSON. Do you want to discard it and close the editor?</string>
|
||||
<string name="json_discard_close">Discard and close</string>
|
||||
<string name="json_save">There are unsaved changes, do you want to save or discard them?</string>
|
||||
<string name="json_save_error">Unable to save: %s</string>
|
||||
<string name="json_format_error">The content is not valid JSON, can\'t be parsed.</string>
|
||||
<string name="json_discard">Warning, this will replace the editor content with the saved json. All changes made will be lost. Do you want to continue?</string>
|
||||
<string name="json_reset">Warning, this will replace the editor content with the built-in json. All editor changes made will be lost, but saved content will not be modified unless manually saved. Do you want to continue?</string>
|
||||
<!--
|
||||
shortcuts
|
||||
-->
|
||||
|
Loading…
Reference in New Issue
Block a user