From 3dd4e4df3808df914cce611ed326908966f6877e Mon Sep 17 00:00:00 2001 From: Erik Kiznov <46452865+k1zn@users.noreply.github.com> Date: Sat, 13 Aug 2022 22:37:30 +0500 Subject: [PATCH] translate all strings to RU/EN --- .../com/aefyr/tsg/g2/NotificationsHelper.java | 15 +- .../ru/vtosters/lite/dnr/DNRInjector.java | 9 +- .../lite/downloaders/AudioDownloader.java | 10 +- .../lite/downloaders/VideoDownloader.java | 13 +- .../notifications/NotificationChannels.java | 4 +- .../ru/vtosters/lite/hooks/JsonInjectors.java | 12 +- .../lite/hooks/OnlineFormatterHook.java | 30 +- .../ru/vtosters/lite/hooks/ProxyHook.java | 15 +- .../java/ru/vtosters/lite/music/FFMpeg.java | 2 +- .../ru/vtosters/lite/music/MP3Downloader.java | 2 +- .../ru/vtosters/lite/music/Scrobbler.java | 7 +- .../lite/services/LogWriterService.java | 6 +- .../ui/activities/APKInstallActivity.java | 4 +- .../ui/adapters/MessagesPreviewAdapter.java | 4 +- .../lite/ui/components/BackupManager.java | 11 +- .../ui/components/NewsfeedListManager.java | 11 +- .../ui/components/SuperAppEditorManager.java | 28 +- .../lite/ui/dialogs/MessageSettings.java | 23 +- .../ui/dialogs/RoundingSeekbarDialog.java | 9 +- .../vtosters/lite/ui/dialogs/Translate.java | 9 +- .../lite/ui/fragments/FeedFragment.java | 10 +- .../lite/ui/fragments/IconsFragment.java | 16 +- .../lite/ui/fragments/InterfaceFragment.java | 5 +- .../lite/ui/fragments/MediaFragment.java | 33 +- .../lite/ui/fragments/OtherFragment.java | 38 +- .../lite/ui/fragments/VTSettings.java | 4 +- .../ru/vtosters/lite/ui/vkui/MenuBuilder.java | 13 +- .../ui/wallpapers/WallpaperMenuFragment.java | 37 +- .../lite/ui/wallpapers/WallpapersHooks.java | 24 +- .../java/ru/vtosters/lite/utils/About.java | 4 +- .../ru/vtosters/lite/utils/AndroidUtils.java | 4 + .../ru/vtosters/lite/utils/CacheUtils.java | 2 +- .../ru/vtosters/lite/utils/RenameTool.java | 27 +- smali/res/values-ru/arrays.xml | 25 ++ smali/res/values-ru/strings.xml | 341 +++++++++++++++- smali/res/values/arrays.xml | 25 ++ smali/res/values/strings.xml | 366 ++++++++++++++++-- smali/res/xml/preferences_activity.xml | 32 +- smali/res/xml/preferences_debug.xml | 102 ++--- smali/res/xml/preferences_feed.xml | 22 +- smali/res/xml/preferences_general.xml | 4 +- .../res/xml/preferences_general_milkshake.xml | 4 +- smali/res/xml/preferences_gms.xml | 42 +- smali/res/xml/preferences_interface.xml | 30 +- smali/res/xml/preferences_media.xml | 60 +-- smali/res/xml/preferences_messages.xml | 24 +- smali/res/xml/preferences_other.xml | 16 +- smali/res/xml/preferences_themes.xml | 12 +- 48 files changed, 1136 insertions(+), 410 deletions(-) diff --git a/app/src/main/java/com/aefyr/tsg/g2/NotificationsHelper.java b/app/src/main/java/com/aefyr/tsg/g2/NotificationsHelper.java index ba0d341a6..33b41d4f3 100755 --- a/app/src/main/java/com/aefyr/tsg/g2/NotificationsHelper.java +++ b/app/src/main/java/com/aefyr/tsg/g2/NotificationsHelper.java @@ -16,6 +16,7 @@ import com.aefyr.tsg.g2.stickersgrabber.TelegramStickersGrabber; import java.util.HashMap; import java.util.concurrent.atomic.AtomicLong; +import ru.vtosters.lite.utils.AndroidUtils; /** * Created by Aefyr on 20.05.2018. @@ -39,7 +40,7 @@ public class NotificationsHelper { downloadingPacksNotificationsIds = new HashMap<>(); if (oreo()) { - NotificationChannel notificationChan = new NotificationChannel(NOTIFICATION_CHANNEL_ID, "Сервис стикеров Telegram в VTLite", NotificationManager.IMPORTANCE_HIGH); + NotificationChannel notificationChan = new NotificationChannel(NOTIFICATION_CHANNEL_ID, AndroidUtils.getString("telegram_stickers_service"), NotificationManager.IMPORTANCE_HIGH); ((NotificationManager) c.getSystemService(Context.NOTIFICATION_SERVICE)).createNotificationChannel(notificationChan); } } @@ -49,8 +50,8 @@ public class NotificationsHelper { downloadingPacksNotificationsIds.put(pack, notificationId); Notification.Builder builder = commonBuilder(); - builder.setContentTitle(pack.state == TelegramStickersPack.DOWNLOADING ? pack.title + ": загрузка" : pack.title + ": обновление"); - builder.setContentText("Получение информации"); + builder.setContentTitle(pack.state == TelegramStickersPack.DOWNLOADING ? pack.title + AndroidUtils.getString("telegram_stickers_downloading") : pack.title + AndroidUtils.getString("telegram_stickers_updating")); + builder.setContentText(AndroidUtils.getString("telegram_stickers_gettinginfo")); builder.setOngoing(true); manager.notify(notificationId, builder.build()); @@ -63,7 +64,7 @@ public class NotificationsHelper { lastNotificationTime.set(System.currentTimeMillis()); Notification.Builder builder = commonBuilder(); - builder.setContentTitle(pack.state == TelegramStickersPack.DOWNLOADING ? pack.title + ": загрузка" : pack.title + ": обновление"); + builder.setContentTitle(pack.state == TelegramStickersPack.DOWNLOADING ? pack.title + AndroidUtils.getString("telegram_stickers_downloading") : pack.title + AndroidUtils.getString("telegram_stickers_updating")); builder.setContentText(downloadProgress + "/" + pack.stickersCount); builder.setProgress(pack.stickersCount, downloadProgress, false); builder.setOngoing(true); @@ -77,13 +78,13 @@ public class NotificationsHelper { Notification.Builder builder = commonBuilder(); builder.setProgress(0, 0, false); builder.setOngoing(false); - builder.setContentTitle("Сервис стикеров Telegram в VTLite"); + builder.setContentTitle(AndroidUtils.getString("telegram_stickers_service")); String text; if (success) - text = wasUpdate ? pack.title + " успешно обновлен" : pack.title + " успешно загружен"; + text = wasUpdate ? pack.title + AndroidUtils.getString("telegram_stickers_updated") : pack.title + AndroidUtils.getString("telegram_stickers_downloaded"); else - text = wasUpdate ? pack.title + ": ошибка при обновлении" : pack.title + ": ошибка при загрузке"; + text = wasUpdate ? pack.title + AndroidUtils.getString("telegram_stickers_error_update") : pack.title + AndroidUtils.getString("telegram_stickers_error_download"); if (e instanceof TelegramStickersGrabber.TSGException) { text = pack.title + ": " + e.getMessage(); diff --git a/app/src/main/java/ru/vtosters/lite/dnr/DNRInjector.java b/app/src/main/java/ru/vtosters/lite/dnr/DNRInjector.java index 48218fcbe..5ccf34e46 100644 --- a/app/src/main/java/ru/vtosters/lite/dnr/DNRInjector.java +++ b/app/src/main/java/ru/vtosters/lite/dnr/DNRInjector.java @@ -38,6 +38,7 @@ import okhttp3.Headers; import okhttp3.OkHttpClient; import okhttp3.Request; import ru.vtosters.lite.ui.dialogs.Translate; +import ru.vtosters.lite.utils.AndroidUtils; public class DNRInjector { public static void inject(Dialog dialog, List list) { @@ -196,13 +197,13 @@ public class DNRInjector { if (action == MsgAction.valueOf("TRANSLATE")) { if (isTextExist && isReplyExist) { - Translate.showTranslatedText(context, text + "\n\nРеплай:\n" + reply); + Translate.showTranslatedText(context, text + "\n\n" + AndroidUtils.getString("translator_reply") + "\n" + reply); } else if (isReplyExist) { - Translate.showTranslatedText(context, "Реплай:\n" + reply); + Translate.showTranslatedText(context, AndroidUtils.getString("translator_reply") + "\n" + reply); } else if (isTextExist) { Translate.showTranslatedText(context, text); } else { - sendToast("Нет текста для перевода"); + sendToast(AndroidUtils.getString("translator_no_text")); } } @@ -230,7 +231,7 @@ public class DNRInjector { thread.start(); - sendToast("Диалог успешно " + (needToBePinned ? "закреплен" : "откреплен")); + sendToast(AndroidUtils.getString("pin_dialog") + (needToBePinned ? AndroidUtils.getString("dialog_pinned") : AndroidUtils.getString("dialog_unpinned"))); } public static void setDnr(Dialog dialog, boolean value) { diff --git a/app/src/main/java/ru/vtosters/lite/downloaders/AudioDownloader.java b/app/src/main/java/ru/vtosters/lite/downloaders/AudioDownloader.java index f1b275a71..f3863631b 100644 --- a/app/src/main/java/ru/vtosters/lite/downloaders/AudioDownloader.java +++ b/app/src/main/java/ru/vtosters/lite/downloaders/AudioDownloader.java @@ -31,7 +31,7 @@ public class AudioDownloader { public static void downloadM3U8(MusicTrack track) { if (track.D == null) { - ToastUtils.a("Не удалось найти ссылку на аудиозапись"); + ToastUtils.a(AndroidUtils.getString("link_audio_error")); return; } @@ -64,7 +64,7 @@ public class AudioDownloader { var success = FFMpeg.convert(downloadPath, musicPath + File.separator + fileName + ".mp3"); if (success) { notification - .setContentText("Загрузка завершена") + .setContentText(AndroidUtils.getString("player_download_finished")) .setProgress(0, 0, false) .setSmallIcon(android.R.drawable.stat_sys_download_done); notificationManager.notify(tempId, notification.build()); @@ -72,7 +72,7 @@ public class AudioDownloader { onFailure(); } } catch (UnsatisfiedLinkError e) { - Log.e("AudioDownloader", "Опять эти нативные либы"); + Log.e("AudioDownloader", "native libs"); Log.e("AudioDownloader", e.getMessage()); onFailure(); } @@ -80,7 +80,7 @@ public class AudioDownloader { @Override public void onFailure() { - notification.setContentText("Не удалось загрузить аудиозапись").setProgress(0, 0, false); + notification.setContentText(AndroidUtils.getString("load_audio_error")).setProgress(0, 0, false); notificationManager.notify(tempId, notification.build()); } @@ -109,7 +109,7 @@ public class AudioDownloader { private static NotificationCompat.Builder buildDownloadNotification(MusicTrack track, int id) { var notificationBuilder = new NotificationCompat.Builder(AndroidUtils.getGlobalContext(), NotificationChannels.MUSIC_DOWNLOAD_CHANNEL_ID) .setSmallIcon(android.R.drawable.stat_sys_download) - .setContentTitle("Загрузка аудиозаписи") + .setContentTitle(AndroidUtils.getString("audio_downloading")) .setContentText(track.toString()) .setPriority(NotificationCompat.PRIORITY_LOW) .setCategory(NotificationCompat.CATEGORY_PROGRESS) diff --git a/app/src/main/java/ru/vtosters/lite/downloaders/VideoDownloader.java b/app/src/main/java/ru/vtosters/lite/downloaders/VideoDownloader.java index cdc73286e..1a51a92ff 100644 --- a/app/src/main/java/ru/vtosters/lite/downloaders/VideoDownloader.java +++ b/app/src/main/java/ru/vtosters/lite/downloaders/VideoDownloader.java @@ -28,6 +28,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Objects; +import ru.vtosters.lite.utils.AndroidUtils; import ru.vtosters.lite.utils.ExternalLinkParser; public class VideoDownloader { @@ -123,13 +124,13 @@ public class VideoDownloader { } public static void parseVideoLink(String url, Context ctx) { - if (url.contains("vk.com/story")) { - ToastUtils.a("Не поддерживается загрузка историй"); + if (url.startsWith("vk.com/story") || url.startsWith("http://vk.com/story") || url.startsWith("https://vk.com/story")) { + ToastUtils.a(AndroidUtils.getString("video_dl_stories_not_supported")); return; } - if (!url.contains("vk.com/video")) { - ToastUtils.a("Неверная ссылка"); + if (!url.startsWith("http://vk.com/video") || !url.startsWith("https://vk.com/video") || !url.startsWith("vk.com/video")) { + ToastUtils.a(AndroidUtils.getString("video_dl_wrong_link")); return; } @@ -137,7 +138,7 @@ public class VideoDownloader { String ownerId = videoId.split("_")[0]; final ProgressDialog progressDialog = new ProgressDialog(ctx); - progressDialog.setMessage("Обработка видео"); + progressDialog.setMessage(AndroidUtils.getString("video_dl_progress")); progressDialog.show(); makeRequest("https://" + "api.vk.com" + "/method/video.get?owner_id=" + ownerId + "&videos=" + videoId + "&v=5.99&access_token=" + getUserToken(), @@ -153,7 +154,7 @@ public class VideoDownloader { downloadVideo(videoFile, ctx); } catch (JSONException e) { e.printStackTrace(); - Toast.makeText(ctx, "Видео нельзя скачать", Toast.LENGTH_SHORT).show(); + Toast.makeText(ctx, AndroidUtils.getString("video_dl_error"), Toast.LENGTH_SHORT).show(); } }); } diff --git a/app/src/main/java/ru/vtosters/lite/downloaders/notifications/NotificationChannels.java b/app/src/main/java/ru/vtosters/lite/downloaders/notifications/NotificationChannels.java index b7937baf9..d8ae04781 100644 --- a/app/src/main/java/ru/vtosters/lite/downloaders/notifications/NotificationChannels.java +++ b/app/src/main/java/ru/vtosters/lite/downloaders/notifications/NotificationChannels.java @@ -12,8 +12,8 @@ import ru.vtosters.lite.utils.AndroidUtils; public class NotificationChannels { public static final String MUSIC_DOWNLOAD_CHANNEL_ID = "music_download_channel"; - public static final String MUSIC_DOWNLOAD_CHANNEL_NAME = "Загрузка музыки"; - public static final String MUSIC_DOWNLOAD_CHANNEL_DESCRIPTION = "Прогресс загрузки музыки"; + public static final String MUSIC_DOWNLOAD_CHANNEL_NAME = AndroidUtils.getString("music_dl_title"); + public static final String MUSIC_DOWNLOAD_CHANNEL_DESCRIPTION = AndroidUtils.getString("music_dl_progress"); @RequiresApi(api = Build.VERSION_CODES.O) public static void createChannels() { diff --git a/app/src/main/java/ru/vtosters/lite/hooks/JsonInjectors.java b/app/src/main/java/ru/vtosters/lite/hooks/JsonInjectors.java index f98d35db1..16aa5d93c 100644 --- a/app/src/main/java/ru/vtosters/lite/hooks/JsonInjectors.java +++ b/app/src/main/java/ru/vtosters/lite/hooks/JsonInjectors.java @@ -73,7 +73,7 @@ public class JsonInjectors { } public static JSONObject donateRecomm() throws JSONException { - var title = "Помоги проекту донатом и получи бонус!"; + var title = AndroidUtils.getString("donate_to_vtl"); var link = "https://vk.com/vtosters_official"; var text_color = "2D81E0"; @@ -114,7 +114,7 @@ public class JsonInjectors { } public static JSONObject vktesters(int id) throws JSONException { - var title = "Карточка Тестера"; + var title = AndroidUtils.getString("tester_profile"); var text_color = "2D81E0"; var link = "https://static.vk.com/bugs?lang=" + LangUtils.a() + "#/reporter" + id; @@ -158,7 +158,7 @@ public class JsonInjectors { var peerid = Objects.requireNonNull(orig.optJSONObject("peer")).optInt("id"); var pic = "https://image.pngaaa.com/641/326641-middle.png"; // can be null - var text = "Я не загрузил данные (9(9(("; + var text = AndroidUtils.getString("no_data_error"); var link = "https://vtosters.app"; // can be null var linktitle = "Test button"; // can be null @@ -175,9 +175,9 @@ public class JsonInjectors { if (!hasIcon) icon = ""; if (!hasButton) buttons = ""; - if (isVerified(peerid)) text = "Я купил VTosters Premium"; - if (isPrometheus(peerid)) text = "Я купил VTosters Premium Gold Prime Pro Plus"; - if (isDeveloper(peerid)) text = "Я создал говно"; + if (isVerified(peerid)) text = AndroidUtils.getString("i_bought") + " VTosters Premium"; + if (isPrometheus(peerid)) text = AndroidUtils.getString("i_bought") + " VTosters Premium Gold Prime Pro Plus"; + if (isDeveloper(peerid)) text = AndroidUtils.getString("i_created_poop"); if (!isVerified(peerid) || text.equals("")) { if (getBoolValue("convBarRecomm", false)) { return null; diff --git a/app/src/main/java/ru/vtosters/lite/hooks/OnlineFormatterHook.java b/app/src/main/java/ru/vtosters/lite/hooks/OnlineFormatterHook.java index bc21e390e..eb6c389fa 100644 --- a/app/src/main/java/ru/vtosters/lite/hooks/OnlineFormatterHook.java +++ b/app/src/main/java/ru/vtosters/lite/hooks/OnlineFormatterHook.java @@ -17,6 +17,8 @@ import org.json.JSONObject; import java.io.IOException; import java.text.ParseException; +import ru.vtosters.lite.utils.AndroidUtils; + public class OnlineFormatterHook { private static String AppName; @@ -59,37 +61,37 @@ public class OnlineFormatterHook { case 5027722: return "VK Messenger (Desktop)"; case 6146827: - return "VK Мессенджер (Android)"; + return AndroidUtils.getString("vk_messenger") + " (Android)"; // VK Мессенджер (Android) case 6482950: - return "VK Мессенджер (iPhone)"; + return AndroidUtils.getString("vk_messenger") + " (iPhone)"; // VK Мессенджер (iPhone) case 6481715: - return "VK Мессенджер Dev (iPhone)"; + return AndroidUtils.getString("vk_messenger") + " Dev (iPhone)"; // VK Мессенджер Dev (iPhone) case 7799655: - return "VK Почта"; + return AndroidUtils.getString("vk_mail_online"); // VK Почта case 7598572: - return "Сферум (Android)"; + return AndroidUtils.getString("sferum_online") + " (Android)"; // Сферум (Android) case 7571751: - return "Сферум (iPhone)"; + return AndroidUtils.getString("sferum_online") + " (iPhone)"; // Сферум (iPhone) case 7556576: - return "Сферум"; + return AndroidUtils.getString("sferum_online"); // Сферум case 7497650: return "VK ID"; case 8094476: - return "VK Звонки (Android)"; + return AndroidUtils.getString("vk_calls_online") + " (Android)"; // VK Звонки (Android) case 8093730: - return "VK Звонки (iPhone)"; + return AndroidUtils.getString("vk_calls_online") + " (iPhone)"; // VK Звонки (iPhone) case 7793118: - return "VK Звонки (Desktop)"; + return AndroidUtils.getString("vk_calls_online") + " (Desktop)"; // VK Звонки (Desktop) case 6767438: - return "VK Музыка (Android)"; + return AndroidUtils.getString("vk_music_online") + " (Android)"; // VK Музыка (Android) case 8113297: - return "VK Клипы (Android)"; + return AndroidUtils.getString("vk_clips_online") + " (Android)"; // VK Клипы (Android) case 8106428: - return "VK Клипы (iPhone)"; + return AndroidUtils.getString("vk_clips_online") + " (iPhone)"; // VK Клипы (iPhone) case 5044491: return "Candy"; case 8114066: - return "VK Видео"; + return AndroidUtils.getString("vk_video_online"); // VK Видео case 4894723: return "Phoenix Lite"; case 4994316: diff --git a/app/src/main/java/ru/vtosters/lite/hooks/ProxyHook.java b/app/src/main/java/ru/vtosters/lite/hooks/ProxyHook.java index c9fa1c689..2b5905ccf 100644 --- a/app/src/main/java/ru/vtosters/lite/hooks/ProxyHook.java +++ b/app/src/main/java/ru/vtosters/lite/hooks/ProxyHook.java @@ -27,11 +27,12 @@ import com.vk.auth.ui.VkAuthTextView; import com.vk.navigation.Navigator; import ru.vtosters.lite.ui.fragments.ProxySettingsFragment; +import ru.vtosters.lite.utils.AndroidUtils; public class ProxyHook { public static void hookAuth(View v) { VkAuthTextView button = (VkAuthTextView) v; - button.setText("Настроить прокси"); + button.setText(AndroidUtils.getString("proxy_setup")); button.setOnClickListener(v1 -> callProxyDialog(v1.getContext())); } @@ -50,20 +51,20 @@ public class ProxyHook { rg.setPadding(dp2px(18f), dp2px(12f), dp2px(18f), 0); - rgDefault.setText("Отключить"); + rgDefault.setText(AndroidUtils.getString("proxy_disable")); rgDefault.setTextColor(getTextAttr()); - rgProxy.setText("Включить (Zaborona)"); + rgProxy.setText(AndroidUtils.getString("proxy_enable") + " (Zaborona)"); rgProxy.setTextColor(getTextAttr()); rgProxy.setChecked(isZaboronaEnabled()); rgDefault.setChecked(!isZaboronaEnabled()); AlertDialog.Builder builder = new AlertDialog.Builder(ctx, getAlertStyle()); - builder.setTitle("Прокси"); - builder.setMessage("Zaborona никак не связана с ВТостерс и мы не можем гарантировать её работу и безопасность"); + builder.setTitle(AndroidUtils.getString("vtlproxy")); + builder.setMessage(AndroidUtils.getString("proxy_warning")); builder.setView(rg); - builder.setPositiveButton("Применить", ((dialog, which) -> { + builder.setPositiveButton(AndroidUtils.getString("vtl_confirm"), ((dialog, which) -> { // Применить if (rgProxy.isChecked()) { edit().putString("proxy", "zaborona").commit(); restartApplication(); @@ -77,7 +78,7 @@ public class ProxyHook { } })); - builder.setNeutralButton("Настройки прокси", ((dialog, which) -> { + builder.setNeutralButton(AndroidUtils.getString("proxy_settings"), ((dialog, which) -> { Intent a2 = new Navigator(ProxySettingsFragment.class).b(ctx); a2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); ctx.startActivity(a2); diff --git a/app/src/main/java/ru/vtosters/lite/music/FFMpeg.java b/app/src/main/java/ru/vtosters/lite/music/FFMpeg.java index fc5c96522..40a5a56b0 100644 --- a/app/src/main/java/ru/vtosters/lite/music/FFMpeg.java +++ b/app/src/main/java/ru/vtosters/lite/music/FFMpeg.java @@ -41,7 +41,7 @@ public class FFMpeg { private static void checkFFMpegLibs() { var lib = new File(AndroidUtils.getGlobalContext().getFilesDir(), "libffmpegkit_abidetect.so"); if (!lib.exists()) { - ToastUtils.a("Копирование библиотеки ffmpegkit"); + ToastUtils.a(AndroidUtils.getString("ffmpegkit_copy")); copyAssets(); } } diff --git a/app/src/main/java/ru/vtosters/lite/music/MP3Downloader.java b/app/src/main/java/ru/vtosters/lite/music/MP3Downloader.java index aacf4daf1..bc62999de 100644 --- a/app/src/main/java/ru/vtosters/lite/music/MP3Downloader.java +++ b/app/src/main/java/ru/vtosters/lite/music/MP3Downloader.java @@ -34,7 +34,7 @@ public class MP3Downloader { public static void execute(MusicTrack track) { var token = AndroidUtils.getPreferences().getString("vk_admin_token", ""); if (token.isEmpty()) { - Toast.makeText(AndroidUtils.getGlobalContext(), "Обновите токен VK Admin в настройках", Toast.LENGTH_SHORT).show(); + Toast.makeText(AndroidUtils.getGlobalContext(), AndroidUtils.getString("update_vk_admin_token"), Toast.LENGTH_SHORT).show(); return; } var request = new Request.a() diff --git a/app/src/main/java/ru/vtosters/lite/music/Scrobbler.java b/app/src/main/java/ru/vtosters/lite/music/Scrobbler.java index 5c56575b9..fc9b94711 100644 --- a/app/src/main/java/ru/vtosters/lite/music/Scrobbler.java +++ b/app/src/main/java/ru/vtosters/lite/music/Scrobbler.java @@ -24,6 +24,7 @@ import ru.vtosters.lite.net.NetCallback; import ru.vtosters.lite.net.NetClient; import ru.vtosters.lite.net.NetRequest; import ru.vtosters.lite.net.NetResponse; +import ru.vtosters.lite.utils.AndroidUtils; public class Scrobbler { private static final String key = "5965d63402414776c54c266db0211746"; @@ -103,7 +104,7 @@ public class Scrobbler { public static void auth(String login, String pass) { if (login == null || pass == null) { - sendToast("Логин или пароль не заданы"); + sendToast(AndroidUtils.getString("lastfm_credentials_empty")); return; } @@ -119,7 +120,7 @@ public class Scrobbler { @Override public void onFailure(NetCall call, IOException e) { Log.d("Scrobbler", "Auth failed", e); - sendToast("Ошибка входа"); + sendToast(AndroidUtils.getString("lastfm_auth_error")); } @Override @@ -155,7 +156,7 @@ public class Scrobbler { edit().remove("username").apply(); edit().remove("sessionKey").apply(); scrobbled.clear(); - sendToast("Вы успешно вышли из учетной записи"); + sendToast(AndroidUtils.getString("lastfm_logout_success")); } public static boolean needToBeScrobble(String uid) { diff --git a/app/src/main/java/ru/vtosters/lite/services/LogWriterService.java b/app/src/main/java/ru/vtosters/lite/services/LogWriterService.java index d076125f3..d0408e189 100644 --- a/app/src/main/java/ru/vtosters/lite/services/LogWriterService.java +++ b/app/src/main/java/ru/vtosters/lite/services/LogWriterService.java @@ -22,6 +22,8 @@ import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; +import ru.vtosters.lite.utils.AndroidUtils; + public class LogWriterService extends Service { public LogWriterService() { } @@ -44,12 +46,12 @@ public class LogWriterService extends Service { writeLog(intent, file); } catch (Exception e) { e.printStackTrace(); - makeText(getGlobalContext(), "Не удалось сохранить лог-файл", LENGTH_SHORT).show(); + makeText(getGlobalContext(), AndroidUtils.getString("logfile_error"), LENGTH_SHORT).show(); } var notificationId = intent.getIntExtra("notificationId", 1); var manager = (NotificationManager) getGlobalContext().getSystemService(Context.NOTIFICATION_SERVICE); manager.cancel(notificationId); - makeText(getGlobalContext(), "Лог-файл был сохранен", LENGTH_SHORT).show(); + makeText(getGlobalContext(), AndroidUtils.getString("logfile_saved"), LENGTH_SHORT).show(); stopSelf(); return START_NOT_STICKY; diff --git a/app/src/main/java/ru/vtosters/lite/ui/activities/APKInstallActivity.java b/app/src/main/java/ru/vtosters/lite/ui/activities/APKInstallActivity.java index f024a22d7..d6b71840f 100644 --- a/app/src/main/java/ru/vtosters/lite/ui/activities/APKInstallActivity.java +++ b/app/src/main/java/ru/vtosters/lite/ui/activities/APKInstallActivity.java @@ -11,6 +11,8 @@ import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; +import ru.vtosters.lite.utils.AndroidUtils; + public class APKInstallActivity extends AppCompatActivity { public static final int REQUEST_INSTALL_PERMISSION = 1; @@ -65,7 +67,7 @@ public class APKInstallActivity extends AppCompatActivity { startActivity(intent); } catch (Exception e) { - Toast.makeText(this, "Ошибка установки обновления " + e.getLocalizedMessage(), Toast.LENGTH_LONG).show(); + Toast.makeText(this, AndroidUtils.getString("apk_install_error") + e.getLocalizedMessage(), Toast.LENGTH_LONG).show(); } finish(); diff --git a/app/src/main/java/ru/vtosters/lite/ui/adapters/MessagesPreviewAdapter.java b/app/src/main/java/ru/vtosters/lite/ui/adapters/MessagesPreviewAdapter.java index 1ea99e214..e874c7f23 100644 --- a/app/src/main/java/ru/vtosters/lite/ui/adapters/MessagesPreviewAdapter.java +++ b/app/src/main/java/ru/vtosters/lite/ui/adapters/MessagesPreviewAdapter.java @@ -23,9 +23,7 @@ public class MessagesPreviewAdapter extends RecyclerView.Adapter(); if (filtersSet.size() == 0) { - sendToast("Обновите ленту для получения списка доступных пунктов"); + sendToast(AndroidUtils.getString("newsfeed_update_feed")); return; } @@ -35,10 +36,10 @@ public class NewsfeedListManager { } VBottomSheetBuilder.show(activity, new VBottomSheetBuilder.VBSContent( - "Выберите пункты для скрытия", + AndroidUtils.getString("newsfeed_list_choose_to_hide"), buildListOf(activity, list), new VBottomSheetBuilder.VBSContent.VBSButton( - "Сохранить", + AndroidUtils.getString("save"), () -> { var newSelectedItems = ""; for (VBListItem item : list) @@ -47,7 +48,7 @@ public class NewsfeedListManager { getDefaultPrefs().edit() .putString("news_feed_selected_items", newSelectedItems) .apply(); - sendToast("Для применения изменений обновите ленту"); + sendToast(AndroidUtils.getString("newsfeed_list_update_feed_to_work")); } ) )); @@ -57,6 +58,6 @@ public class NewsfeedListManager { getDefaultPrefs().edit() .putString("news_feed_selected_items", "") .apply(); - sendToast("Сброшены пункты для скрытия"); + sendToast(AndroidUtils.getString("newsfeed_list_hidden_reseted")); } } diff --git a/app/src/main/java/ru/vtosters/lite/ui/components/SuperAppEditorManager.java b/app/src/main/java/ru/vtosters/lite/ui/components/SuperAppEditorManager.java index 3c3444f23..1801238b0 100644 --- a/app/src/main/java/ru/vtosters/lite/ui/components/SuperAppEditorManager.java +++ b/app/src/main/java/ru/vtosters/lite/ui/components/SuperAppEditorManager.java @@ -89,33 +89,33 @@ public class SuperAppEditorManager { private SuperAppItem getItemByTag(String tag) { switch (tag) { case "menu": - return SuperAppItem.valuesOf("menu", "Меню приложения"); + return SuperAppItem.valuesOf("menu", AndroidUtils.getString("superapp_menu")); case "miniapps": - return SuperAppItem.valuesOf("miniapps", "Mini Apps: виджет"); + return SuperAppItem.valuesOf("miniapps", AndroidUtils.getString("superapp_miniapps")); case "vkpay_slim": - return SuperAppItem.valuesOf("vkpay_slim", "VK Pay"); + return SuperAppItem.valuesOf("vkpay_slim", AndroidUtils.getString("superapp_vkpay")); case "greeting": - return SuperAppItem.valuesOf("greeting", "Приветствие"); + return SuperAppItem.valuesOf("greeting", AndroidUtils.getString("superapp_greeting")); case "promo": - return SuperAppItem.valuesOf("promo", "Mini Apps: промо"); + return SuperAppItem.valuesOf("promo", AndroidUtils.getString("superapp_miniapps_promo")); case "holiday": - return SuperAppItem.valuesOf("holiday", "Дни рождения у друзей"); + return SuperAppItem.valuesOf("holiday", AndroidUtils.getString("superapp_holiday")); case "weather": - return SuperAppItem.valuesOf("weather", "Погода"); + return SuperAppItem.valuesOf("weather", AndroidUtils.getString("superapp_weather")); case "sport": - return SuperAppItem.valuesOf("sport", "Спортивные события"); + return SuperAppItem.valuesOf("sport", AndroidUtils.getString("superapp_sport")); case "games": - return SuperAppItem.valuesOf("games", "Игры"); + return SuperAppItem.valuesOf("games", AndroidUtils.getString("superapp_games")); case "informer": - return SuperAppItem.valuesOf("informer", "Информер"); + return SuperAppItem.valuesOf("informer", AndroidUtils.getString("superapp_informer")); case "food": - return SuperAppItem.valuesOf("food", "Еда"); + return SuperAppItem.valuesOf("food", AndroidUtils.getString("superapp_food")); case "event": - return SuperAppItem.valuesOf("event", "Мероприятия"); + return SuperAppItem.valuesOf("event", AndroidUtils.getString("superapp_event")); case "music": - return SuperAppItem.valuesOf("music", "Музыка"); + return SuperAppItem.valuesOf("music", AndroidUtils.getString("superapp_music")); case "vk_run": - return SuperAppItem.valuesOf("vk_run", "VK Run"); + return SuperAppItem.valuesOf("vk_run", AndroidUtils.getString("superapp_vk_run")); default: return null; } diff --git a/app/src/main/java/ru/vtosters/lite/ui/dialogs/MessageSettings.java b/app/src/main/java/ru/vtosters/lite/ui/dialogs/MessageSettings.java index e93476ecc..c926d0c7e 100644 --- a/app/src/main/java/ru/vtosters/lite/ui/dialogs/MessageSettings.java +++ b/app/src/main/java/ru/vtosters/lite/ui/dialogs/MessageSettings.java @@ -15,6 +15,7 @@ import androidx.appcompat.widget.SwitchCompat; import com.vk.core.dialogs.alert.VkAlertDialog; +import ru.vtosters.lite.utils.AndroidUtils; import ru.vtosters.lite.utils.LayoutUtils; public class MessageSettings { @@ -50,12 +51,12 @@ public class MessageSettings { four.setTextSize(TypedValue.COMPLEX_UNIT_PX, dp2px(14f)); five.setTextSize(TypedValue.COMPLEX_UNIT_PX, dp2px(14f)); - zero.setText("Отключить"); - one.setText("15 секунд"); - two.setText("1 минута"); - three.setText("5 минут"); - four.setText("1 час"); - five.setText("24 часа"); + zero.setText(AndroidUtils.getString("proxy_disable")); // Отключить + one.setText(AndroidUtils.getString("message_self_destruct_15sec")); + two.setText(AndroidUtils.getString("message_self_destruct_1min")); + three.setText(AndroidUtils.getString("message_self_destruct_5min")); + four.setText(AndroidUtils.getString("message_self_destruct_1hour")); + five.setText(AndroidUtils.getString("message_self_destruct_24hours")); zero.setTextColor(getTextAttr()); one.setTextColor(getTextAttr()); @@ -87,7 +88,7 @@ public class MessageSettings { @SuppressLint("UseSwitchCompatOrMaterialCode") var silentSwitch = new SwitchCompat(new ContextThemeWrapper(context, com.vtosters.lite.R.style.Widget_AppCompat_CompoundButton_Switch)); - silentSwitch.setText("Бесшумные сообщения"); + silentSwitch.setText(AndroidUtils.getString("silent_messages")); silentSwitch.setTextSize(TypedValue.COMPLEX_UNIT_PX, dp2px(14f)); silentSwitch.setTextColor(getTextAttr()); silentSwitch.setChecked(isSilentEnabled); @@ -104,12 +105,12 @@ public class MessageSettings { mContainer.addView(silentSwitch, LayoutUtils.createLinear(-1, -2)); VkAlertDialog.Builder builder = new VkAlertDialog.Builder(context); - builder.setTitle("Настройки отправки"); - builder.setMessage("Выберите время исчезновения сообщения"); + builder.setTitle(AndroidUtils.getString("message_send_settings_title")); + builder.setMessage(AndroidUtils.getString("silent_messages_time_select")); builder.setCancelable(true); - builder.setNegativeButton("Отмена", null); + builder.setNegativeButton(AndroidUtils.getString("cancel"), null); builder.setView(mContainer); - builder.setPositiveButton("Применить", (dialog, which) -> { + builder.setPositiveButton(AndroidUtils.getString("vtl_confirm"), (dialog, which) -> { // Применить var checked = rg.getCheckedRadioButtonId(); if (checked == zero.getId()) { diff --git a/app/src/main/java/ru/vtosters/lite/ui/dialogs/RoundingSeekbarDialog.java b/app/src/main/java/ru/vtosters/lite/ui/dialogs/RoundingSeekbarDialog.java index 833a69902..a57ae65da 100644 --- a/app/src/main/java/ru/vtosters/lite/ui/dialogs/RoundingSeekbarDialog.java +++ b/app/src/main/java/ru/vtosters/lite/ui/dialogs/RoundingSeekbarDialog.java @@ -11,6 +11,7 @@ import android.widget.SeekBar; import com.vk.core.dialogs.alert.VkAlertDialog; +import ru.vtosters.lite.utils.AndroidUtils; import ru.vtosters.lite.utils.LayoutUtils; public class RoundingSeekbarDialog{ @@ -25,12 +26,12 @@ public class RoundingSeekbarDialog{ mContainer.addView(seek, LayoutUtils.createLinear(-1, -2)); VkAlertDialog.Builder builder = new VkAlertDialog.Builder(context); - builder.setTitle("Выберите размер закругления углов"); - builder.setMessage("Для отключения функции закругления углов введите 0"); + builder.setTitle(AndroidUtils.getString("pic_rounding_title")); + builder.setMessage(AndroidUtils.getString("pic_rounding_info")); builder.setCancelable(true); - builder.setNegativeButton("Отмена", null); + builder.setNegativeButton(AndroidUtils.getString("cancel"), null); builder.setView(mContainer); - builder.setPositiveButton("Применить", (dialog, which) -> { + builder.setPositiveButton(AndroidUtils.getString("vtl_confirm"), (dialog, which) -> { edit().putInt("pic_rounding", seek.getProgress()).commit(); restartApplicationWithTimer(); }); diff --git a/app/src/main/java/ru/vtosters/lite/ui/dialogs/Translate.java b/app/src/main/java/ru/vtosters/lite/ui/dialogs/Translate.java index 66022318d..32b952ed0 100644 --- a/app/src/main/java/ru/vtosters/lite/ui/dialogs/Translate.java +++ b/app/src/main/java/ru/vtosters/lite/ui/dialogs/Translate.java @@ -10,6 +10,7 @@ import android.util.Log; import com.vk.core.dialogs.alert.VkAlertDialog; import ru.vtosters.lite.translators.BaseTranslator; +import ru.vtosters.lite.utils.AndroidUtils; public class Translate { public static void showTranslatedText(Context context, String text) { @@ -27,16 +28,16 @@ public class Translate { private static void showDialog(Context context, String text) { VkAlertDialog.Builder alertDialog = new VkAlertDialog.Builder(context); - alertDialog.setTitle("Переводчик"); + alertDialog.setTitle(AndroidUtils.getString("translator_title")); alertDialog.setMessage(text); - alertDialog.setPositiveButton("Закрыть", (dialog, which) -> { + alertDialog.setPositiveButton(AndroidUtils.getString("close"), (dialog, which) -> { dialog.cancel(); }); - alertDialog.setNeutralButton("Скопировать", (dialog, which) -> { + alertDialog.setNeutralButton(AndroidUtils.getString("copy"), (dialog, which) -> { android.content.ClipboardManager clipboard = (android.content.ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE); android.content.ClipData clip = android.content.ClipData.newPlainText("Copied Text", text); clipboard.setPrimaryClip(clip); - sendToast("Скопировано в буфер обмена"); + sendToast(AndroidUtils.getString("copied_to_clipboard")); }); var alert = alertDialog.create(); alert.show(); diff --git a/app/src/main/java/ru/vtosters/lite/ui/fragments/FeedFragment.java b/app/src/main/java/ru/vtosters/lite/ui/fragments/FeedFragment.java index cbd749136..3cc8c4ce0 100644 --- a/app/src/main/java/ru/vtosters/lite/ui/fragments/FeedFragment.java +++ b/app/src/main/java/ru/vtosters/lite/ui/fragments/FeedFragment.java @@ -17,6 +17,7 @@ import com.vk.newsfeed.NewsfeedSettingsFragment; import com.vtosters.lite.general.fragments.MaterialPreferenceToolbarFragment; import ru.vtosters.lite.ui.components.NewsfeedListManager; +import ru.vtosters.lite.utils.AndroidUtils; public class FeedFragment extends MaterialPreferenceToolbarFragment { @Override @@ -39,9 +40,8 @@ public class FeedFragment extends MaterialPreferenceToolbarFragment { }); var str = getDefaultPrefs().getString("news_feed_selected_items", ""); findPreference("newsfeedlistmanager").setSummary( - "Скрыто " - + (!TextUtils.isEmpty(str) ? str.split(",").length : 0) - + " лент новостей"); + String.format(AndroidUtils.getString("feed_hidden"), (!TextUtils.isEmpty(str) ? str.split(",").length : 0)) + ); findPreference("newsfeedlistmanager_reset").setOnPreferenceClickListener(preference -> { NewsfeedListManager.resetHideItems(); return true; @@ -53,9 +53,9 @@ public class FeedFragment extends MaterialPreferenceToolbarFragment { var count = text.split(", ").length; if (count < 1 || text.isEmpty()) { - return "Нет добавленных элементов"; + return AndroidUtils.getString("feed_no_elements"); } else { - return "Добавлено " + count + " элементов"; + return String.format(AndroidUtils.getString("feed_elements_count"), count); } } diff --git a/app/src/main/java/ru/vtosters/lite/ui/fragments/IconsFragment.java b/app/src/main/java/ru/vtosters/lite/ui/fragments/IconsFragment.java index c5514aa63..2f2f32b93 100644 --- a/app/src/main/java/ru/vtosters/lite/ui/fragments/IconsFragment.java +++ b/app/src/main/java/ru/vtosters/lite/ui/fragments/IconsFragment.java @@ -37,6 +37,8 @@ import androidx.core.content.res.ResourcesCompat; import com.vtosters.lite.general.fragments.MaterialPreferenceToolbarFragment; +import ru.vtosters.lite.utils.AndroidUtils; + public class IconsFragment extends MaterialPreferenceToolbarFragment { @SuppressLint("SetTextI18n") public static void callSelectDialog(Context ctx, String appicon) { @@ -70,9 +72,9 @@ public class IconsFragment extends MaterialPreferenceToolbarFragment { rgDefault.setChecked(!isZaboronaEnabled()); AlertDialog.Builder builder = new AlertDialog.Builder(ctx, getAlertStyle()); - builder.setTitle("Выберите название приложения"); + builder.setTitle(AndroidUtils.getString("app_name_select_title")); builder.setView(rg); - builder.setPositiveButton("Применить", ((dialog, which) -> { + builder.setPositiveButton(AndroidUtils.getString("vtl_confirm"), ((dialog, which) -> { var defname = preferences.getString("appname", "vt"); var deficon = preferences.getString("selectedicon", "vt"); @@ -93,7 +95,7 @@ public class IconsFragment extends MaterialPreferenceToolbarFragment { switchComponent(appicon, "vkontakte", deficon, defname); } })); - builder.setNegativeButton("Отмена", ((dialog, which) -> { + builder.setNegativeButton(AndroidUtils.getString("cancel"), ((dialog, which) -> { dialog.dismiss(); })); @@ -114,13 +116,13 @@ public class IconsFragment extends MaterialPreferenceToolbarFragment { this.addPreferencesFromResource(vtosterXml); if (!hasVerification() && !getBoolValue("dialogrecomm", false)) { - addPreference(this, "", "Доступны не все функции!", "Для разблокировки необходимо сделать пожертование от 99р", "ic_about_outline_28", preference -> { + addPreference(this, "", AndroidUtils.getString("icons_warning"), AndroidUtils.getString("icons_warning_info"), "ic_about_outline_28", preference -> { getContext().startActivity(new Intent("android.intent.action.VIEW").setData(Uri.parse("https://vtosters.app"))); return false; }); } - addPreferenceCategory(this, "Иконки"); + addPreferenceCategory(this, AndroidUtils.getString("icons_title")); for (var i = 0; i < icons().size(); i++) { if (icons().get(i) == null || iconsValues().get(i) == null) return; @@ -151,7 +153,7 @@ public class IconsFragment extends MaterialPreferenceToolbarFragment { } if (!hasVerification() && !getBoolValue("dialogrecomm", false)) { - addPreferenceCategory(this, "Недоступные иконки"); + addPreferenceCategory(this, AndroidUtils.getString("unavailable_icons")); for (var i = 2; i < sIconsPlusNames.size(); i++) { if (sIconsPlusNames.get(i) == null || sIconsPlus.get(i) == null) return; @@ -176,7 +178,7 @@ public class IconsFragment extends MaterialPreferenceToolbarFragment { } addPreferenceDrawable(this, icon, iconname, "", drawable, preference -> { - sendToast("Иконка доступна только обладателям верификации"); + sendToast(AndroidUtils.getString("unavailable_icon_warning")); return false; }); } diff --git a/app/src/main/java/ru/vtosters/lite/ui/fragments/InterfaceFragment.java b/app/src/main/java/ru/vtosters/lite/ui/fragments/InterfaceFragment.java index 8e00c4c91..85ed01514 100644 --- a/app/src/main/java/ru/vtosters/lite/ui/fragments/InterfaceFragment.java +++ b/app/src/main/java/ru/vtosters/lite/ui/fragments/InterfaceFragment.java @@ -11,6 +11,7 @@ import androidx.preference.Preference; import com.vtosters.lite.general.fragments.MaterialPreferenceToolbarFragment; import ru.vtosters.lite.ui.dialogs.RoundingSeekbarDialog; +import ru.vtosters.lite.utils.AndroidUtils; public class InterfaceFragment extends MaterialPreferenceToolbarFragment { @Override @@ -31,9 +32,9 @@ public class InterfaceFragment extends MaterialPreferenceToolbarFragment { }); if (getPreferences().getInt("pic_rounding", 0) == 0) { - findPreference("customrounding").setSummary("Отключено"); + findPreference("customrounding").setSummary(AndroidUtils.getString("disabled")); } else { - findPreference("customrounding").setSummary("Размер закругления: " + getPreferences().getInt("pic_rounding", 0) + "dp"); + findPreference("customrounding").setSummary(String.format(AndroidUtils.getString("rounding_size"), getPreferences().getInt("pic_rounding", 0))); } } diff --git a/app/src/main/java/ru/vtosters/lite/ui/fragments/MediaFragment.java b/app/src/main/java/ru/vtosters/lite/ui/fragments/MediaFragment.java index a7e08d2c8..6da86aa78 100644 --- a/app/src/main/java/ru/vtosters/lite/ui/fragments/MediaFragment.java +++ b/app/src/main/java/ru/vtosters/lite/ui/fragments/MediaFragment.java @@ -42,6 +42,7 @@ import okhttp3.Request; import ru.vtosters.lite.downloaders.VideoDownloader; import ru.vtosters.lite.music.Scrobbler; import ru.vtosters.lite.ui.adapters.ImagineArrayAdapter; +import ru.vtosters.lite.utils.AndroidUtils; import ru.vtosters.lite.utils.FileUriUtils; import ru.vtosters.lite.utils.Preferences; @@ -113,19 +114,19 @@ public class MediaFragment extends MaterialPreferenceToolbarFragment { }); findPreference("downloads_directory").setSummary( - "Текущая папка: " + Preferences.getDownloadsDir() + AndroidUtils.getString("current_download_folder") + " " + Preferences.getDownloadsDir() ); findPreference("photos_directory").setSummary( - "Текущая папка: " + Preferences.getPhotosDir() + AndroidUtils.getString("current_download_folder") + " " + Preferences.getPhotosDir() ); findPreference("videos_directory").setSummary( - "Текущая папка: " + Preferences.getVideosDir() + AndroidUtils.getString("current_download_folder") + " " + Preferences.getVideosDir() ); findPreference("music_directory").setSummary( - "Текущая папка: " + Preferences.getMusicDir() + AndroidUtils.getString("current_download_folder") + " " + Preferences.getMusicDir() ); findPreference("downloads_directory").setOnPreferenceClickListener(preference -> { @@ -157,7 +158,7 @@ public class MediaFragment extends MaterialPreferenceToolbarFragment { }); if (isLoggedIn()) { - findPreference("lastfm_auth").setSummary("Вы авторизованы как " + Scrobbler.getUserName()); + findPreference("lastfm_auth").setSummary(AndroidUtils.getString("lastfm_authorized_as") + Scrobbler.getUserName()); } else { findPreference("lastfm_enabled").setEnabled(false); } @@ -191,7 +192,7 @@ public class MediaFragment extends MaterialPreferenceToolbarFragment { linearLayout.setOrientation(LinearLayout.VERTICAL); final EditText fn = new EditText(ctx); - fn.setHint("Логин"); + fn.setHint(AndroidUtils.getString("lastfm_login")); fn.setTextColor(getTextAttr()); fn.setHintTextColor(getSTextAttr()); fn.setBackgroundTintList(ColorStateList.valueOf(getAccentColor())); @@ -202,7 +203,7 @@ public class MediaFragment extends MaterialPreferenceToolbarFragment { fn.setLayoutParams(margin); final EditText ln = new EditText(ctx); - ln.setHint("Пароль"); + ln.setHint(AndroidUtils.getString("lastfm_password")); ln.setTextColor(getTextAttr()); ln.setHintTextColor(getSTextAttr()); ln.setBackgroundTintList(ColorStateList.valueOf(getAccentColor())); @@ -211,10 +212,10 @@ public class MediaFragment extends MaterialPreferenceToolbarFragment { ln.setLayoutParams(margin); AlertDialog.Builder alertDialog = new AlertDialog.Builder(ctx, getAlertStyle()); - alertDialog.setTitle("Введите логин и пароль"); + alertDialog.setTitle(AndroidUtils.getString("lastfm_enter_credentials")); alertDialog.setView(linearLayout); - alertDialog.setPositiveButton("Войти", (dialog, which) -> { + alertDialog.setPositiveButton(AndroidUtils.getString("lastfm_enter"), (dialog, which) -> { String login = fn.getText().toString(); String pass = ln.getText().toString(); @@ -227,12 +228,12 @@ public class MediaFragment extends MaterialPreferenceToolbarFragment { private void logout(Context ctx) { VkAlertDialog.Builder alertDialog = new VkAlertDialog.Builder(ctx); - alertDialog.setTitle("Вы уверены?"); - alertDialog.setMessage("Вы действительно хотите выйти из аккаунта?"); - alertDialog.setPositiveButton("Да", (dialog, which) -> { + alertDialog.setTitle(AndroidUtils.getString("lastfm_logout_title")); + alertDialog.setMessage(AndroidUtils.getString("lastfm_logout_confirm")); + alertDialog.setPositiveButton(AndroidUtils.getString("vkim_yes"), (dialog, which) -> { Scrobbler.logout(); }); - alertDialog.setNeutralButton("Нет", (dialog, which) -> { + alertDialog.setNeutralButton(AndroidUtils.getString("vkim_no"), (dialog, which) -> { dialog.cancel(); }); var alert = alertDialog.create(); @@ -262,12 +263,12 @@ public class MediaFragment extends MaterialPreferenceToolbarFragment { thread.start(); - sendToast("История просмотра видео очищена"); + sendToast(AndroidUtils.getString("video_history_cleaned")); } public static void download(Context ctx) { AlertDialog.Builder alertDialog = new AlertDialog.Builder(ctx, getAlertStyle()); - alertDialog.setTitle("Введите ссылку на видео"); + alertDialog.setTitle(AndroidUtils.getString("video_dl_enter_link")); final EditText input = new EditText(ctx); LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams( @@ -277,7 +278,7 @@ public class MediaFragment extends MaterialPreferenceToolbarFragment { input.setTextColor(getTextAttr()); input.setBackgroundTintList(ColorStateList.valueOf(getAccentColor())); alertDialog.setView(input); - alertDialog.setPositiveButton("Скачать", (dialog, which) -> VideoDownloader.parseVideoLink(input.getText().toString(), ctx)); + alertDialog.setPositiveButton(AndroidUtils.getString("download"), (dialog, which) -> VideoDownloader.parseVideoLink(input.getText().toString(), ctx)); var alert = alertDialog.create(); alert.show(); alert.getButton(DialogInterface.BUTTON_POSITIVE).setTextColor(getAccentColor()); diff --git a/app/src/main/java/ru/vtosters/lite/ui/fragments/OtherFragment.java b/app/src/main/java/ru/vtosters/lite/ui/fragments/OtherFragment.java index ad23fc5b6..3bb30b6bd 100644 --- a/app/src/main/java/ru/vtosters/lite/ui/fragments/OtherFragment.java +++ b/app/src/main/java/ru/vtosters/lite/ui/fragments/OtherFragment.java @@ -77,7 +77,7 @@ public class OtherFragment extends MaterialPreferenceToolbarFragment { String token = data.getStringExtra("token"); AndroidUtils.getPreferences().edit().putString("vk_admin_token", token).apply(); Log.d("VkAdminToken", token); - Toast.makeText(getContext(), "Токен успешно сохранён", LENGTH_SHORT).show(); + Toast.makeText(getContext(), AndroidUtils.getString("token_saved"), LENGTH_SHORT).show(); } } } @@ -98,29 +98,29 @@ public class OtherFragment extends MaterialPreferenceToolbarFragment { findPreference("resetfolders").setOnPreferenceClickListener(preference -> { edit().remove("photos_directory").remove("videos_directory").remove("audios_directory").remove("downloads_directory").apply(); - Toast.makeText(getContext(), "Папки успешно сброшены", LENGTH_SHORT).show(); + Toast.makeText(getContext(), AndroidUtils.getString("download_folders_reseted"), LENGTH_SHORT).show(); return true; }); var pref = getDefaultPrefs().getString("autoclearcache", "Default"); switch (pref) { case "Default": - findPreference("autoclearcache").setSummary("Не включено"); + findPreference("autoclearcache").setSummary(AndroidUtils.getString("cache_disabled")); break; case "100mb": - findPreference("autoclearcache").setSummary("Очищать кеш при не менее 100 Мб"); + findPreference("autoclearcache").setSummary(AndroidUtils.getString("cache_100mb")); break; case "500mb": - findPreference("autoclearcache").setSummary("Очищать кеш при не менее 500 Мб"); + findPreference("autoclearcache").setSummary(AndroidUtils.getString("cache_500mb")); break; case "1gb": - findPreference("autoclearcache").setSummary("Очищать кеш при не менее 1 Гб"); + findPreference("autoclearcache").setSummary(AndroidUtils.getString("cache_1gb")); break; case "2gb": - findPreference("autoclearcache").setSummary("Очищать кеш при не менее 2 Гб"); + findPreference("autoclearcache").setSummary(AndroidUtils.getString("cache_2gb")); break; case "5gb": - findPreference("autoclearcache").setSummary("Очищать кеш при не менее 5 Гб"); + findPreference("autoclearcache").setSummary(AndroidUtils.getString("cache_5gb")); break; } @@ -192,12 +192,12 @@ public class OtherFragment extends MaterialPreferenceToolbarFragment { five.setChecked(val == 5); VkAlertDialog.Builder builder = new VkAlertDialog.Builder(getContext()); - builder.setTitle("Очистка кеша"); - builder.setMessage("Выберите объём кеша для очистки"); + builder.setTitle(AndroidUtils.getString("cache_clean_title")); + builder.setMessage(AndroidUtils.getString("cache_select_size")); builder.setCancelable(true); - builder.setNegativeButton("Отмена", null); + builder.setNegativeButton(AndroidUtils.getString("cancel"), null); builder.setView(rg); - builder.setPositiveButton("Сохранить", (dialog, which) -> { + builder.setPositiveButton(AndroidUtils.getString("save"), (dialog, which) -> { var pref = getDefaultPrefs().edit(); var checked = rg.getCheckedRadioButtonId(); @@ -228,8 +228,8 @@ public class OtherFragment extends MaterialPreferenceToolbarFragment { private void cacheCleanDialog() { VkAlertDialog.Builder builder = new VkAlertDialog.Builder(getContext()); - builder.setTitle("Выберите что вы хотите очистить"); - builder.setItems(new String[]{"Очистить весь кеш", "Очистить кеш стикеров", "Очистить кеш изображений", "Очистить кеш видео", "Очистить кеш сообщений", "Очистить кеш WebView"}, (dialog, which) -> { + builder.setTitle(AndroidUtils.getString("select_which_clean")); + builder.setItems(AndroidUtils.getArray("cache_cleaner"), (dialog, which) -> { switch (which) { case 0: { SharedPreferences prefs2 = getContext().getSharedPreferences("stickers_storage", Context.MODE_PRIVATE); @@ -270,7 +270,7 @@ public class OtherFragment extends MaterialPreferenceToolbarFragment { break; } - Toast.makeText(getContext(), "Кеш очищен", LENGTH_SHORT).show(); + Toast.makeText(getContext(), AndroidUtils.getString("cache_cleaned"), LENGTH_SHORT).show(); }); builder.create().show(); } @@ -289,7 +289,7 @@ public class OtherFragment extends MaterialPreferenceToolbarFragment { try { backupOnlines(); } catch (IOException e) { - Toast.makeText(getContext(), "Нет данных для резервного копирования", LENGTH_SHORT).show(); + Toast.makeText(getContext(), AndroidUtils.getString("no_data_to_backup"), LENGTH_SHORT).show(); } return true; } @@ -359,14 +359,14 @@ public class OtherFragment extends MaterialPreferenceToolbarFragment { var arr = BackupManager.getBackupsNames(); var adapter = new ArrayAdapter(getContext(), android.R.layout.simple_list_item_1, arr); new VkAlertDialog.Builder(getContext()) - .setTitle("Выберите бэкап") + .setTitle(AndroidUtils.getString("select_backup")) .setAdapter(adapter, (dialog, which) -> { try { restoreBackup(arr[which]); - Toast.makeText(getContext(), "Настройки восстановлены", LENGTH_LONG).show(); + Toast.makeText(getContext(), AndroidUtils.getString("backup_success"), LENGTH_LONG).show(); } catch (IOException e) { e.printStackTrace(); - Toast.makeText(getContext(), "Ошибка, Настройки не восстановлены", LENGTH_LONG).show(); + Toast.makeText(getContext(), AndroidUtils.getString("backup_error"), LENGTH_LONG).show(); } }).create().show(); return true; diff --git a/app/src/main/java/ru/vtosters/lite/ui/fragments/VTSettings.java b/app/src/main/java/ru/vtosters/lite/ui/fragments/VTSettings.java index d7bbecc94..d49bd4ea3 100644 --- a/app/src/main/java/ru/vtosters/lite/ui/fragments/VTSettings.java +++ b/app/src/main/java/ru/vtosters/lite/ui/fragments/VTSettings.java @@ -114,7 +114,7 @@ public class VTSettings extends MaterialPreferenceToolbarFragment { public static String getSuperappsumm() { if (disableSettingsSumms()) return null; - return "Скрыто элементов" + ": " + SuperAppEditorManager.getInstance().getDisabledTabs().size(); + return AndroidUtils.getString("elements_hidden_count") + ": " + SuperAppEditorManager.getInstance().getDisabledTabs().size(); } public static String getCachesumm() { @@ -330,7 +330,7 @@ public class VTSettings extends MaterialPreferenceToolbarFragment { }); } } else { - addPreference(this, "", "Внимание!", "Некоторые пункты настроек были скрыты из-за режима VK Мессенджер \n\nДля отключения режима перейдите в настройки Сообщений", "ic_about_outline_28", preference -> false); + addPreference(this, "", AndroidUtils.getString("debug_warning"), AndroidUtils.getString("vkme_mode_info"), "ic_about_outline_28", preference -> false); } addPreference(this, "", AndroidUtils.getString("vtlmedia"), mediasumm, "ic_media_outline_28", preference -> { diff --git a/app/src/main/java/ru/vtosters/lite/ui/vkui/MenuBuilder.java b/app/src/main/java/ru/vtosters/lite/ui/vkui/MenuBuilder.java index 70fd6fc18..d5b5a8435 100644 --- a/app/src/main/java/ru/vtosters/lite/ui/vkui/MenuBuilder.java +++ b/app/src/main/java/ru/vtosters/lite/ui/vkui/MenuBuilder.java @@ -24,6 +24,7 @@ import java.util.Objects; import kotlin.Unit; import kotlin.jvm.b.Functions; +import ru.vtosters.lite.utils.AndroidUtils; import ru.vtosters.lite.utils.RenameTool; public class MenuBuilder { @@ -55,17 +56,17 @@ public class MenuBuilder { final ExtendedUserProfile eup = (ExtendedUserProfile) pfambObject.get(mb); final Context ctx = ((View) Objects.requireNonNull(apView.get(builder))).getContext(); - addItem(builder, "Скопировать ID", () -> { + addItem(builder, AndroidUtils.getString("menu_copy_id"), () -> { copy(ctx, String.valueOf(getUserID(eup))); return Unit.a; }); - addItem(builder, "Дополнительная информация", () -> { + addItem(builder, AndroidUtils.getString("menu_addon_info"), () -> { loadAndShow(ctx, getUserID(eup)); return Unit.a; }); - addItem(builder, "Изменить имя", () -> { + addItem(builder, AndroidUtils.getString("menu_change_name"), () -> { RenameTool.createDialog(eup, ctx); return Unit.a; }); @@ -80,12 +81,12 @@ public class MenuBuilder { final ExtendedCommunityProfile ecp = (ExtendedCommunityProfile) cfambObject.get(mb); final Context ctx = ((View) apView.get(builder)).getContext(); - addItem(builder, "Скопировать ID", () -> { + addItem(builder, AndroidUtils.getString("menu_copy_id"), () -> { copy(ctx, String.valueOf(getUserID(ecp))); return Unit.a; }); - addItem(builder, "Изменить имя", () -> { + addItem(builder, AndroidUtils.getString("menu_addon_info"), () -> { RenameTool.createDialogGroup(ecp, ctx); return Unit.a; }); @@ -100,7 +101,7 @@ public class MenuBuilder { ClipData clip = ClipData.newPlainText("MBH-ST", txt); clipboard.setPrimaryClip(clip); - sendToast("Скопировано!"); + sendToast(AndroidUtils.getString("menu_copied")); } public static void addItem(final ActionsPopup.b builder, final String title, final Functions onClick) throws InvocationTargetException, IllegalAccessException { diff --git a/app/src/main/java/ru/vtosters/lite/ui/wallpapers/WallpaperMenuFragment.java b/app/src/main/java/ru/vtosters/lite/ui/wallpapers/WallpaperMenuFragment.java index 3bcec9992..5b585c58f 100644 --- a/app/src/main/java/ru/vtosters/lite/ui/wallpapers/WallpaperMenuFragment.java +++ b/app/src/main/java/ru/vtosters/lite/ui/wallpapers/WallpaperMenuFragment.java @@ -31,6 +31,7 @@ import java.io.InputStream; import java.io.OutputStream; import ru.vtosters.lite.ui.PreferencesUtil; +import ru.vtosters.lite.utils.AndroidUtils; public class WallpaperMenuFragment extends MaterialPreferenceToolbarFragment { @@ -56,20 +57,20 @@ public class WallpaperMenuFragment extends MaterialPreferenceToolbarFragment { int vtosterXml = getIdentifier("empty", "xml"); addPreferencesFromResource(vtosterXml); - PreferencesUtil.addPreferenceCategory(this, "Предпросмотр"); + PreferencesUtil.addPreferenceCategory(this, AndroidUtils.getString("vkim_settings_appearance_chat_preview_title")); mWPPreviewPref = new WallpaperPreferences(getContext()); mWPPreviewPref.setIcon(null); mWPPreviewPref.setIconSpaceReserved(false); getPreferenceScreen().addPreference(mWPPreviewPref); - PreferencesUtil.addPreference(this, "wp_set", "Выбрать обои", "из галереи", "ic_picture_outline_28", preference -> { + PreferencesUtil.addPreference(this, "wp_set", AndroidUtils.getString("wallpaper_select"), AndroidUtils.getString("wallpaper_from_gallery"), "ic_picture_outline_28", preference -> { startActivityForResult(new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI), 1488); removeStickCache(); return true; }); - PreferencesUtil.addPreference(this, "wp_clear", "Удалить обои", "", "ic_delete_outline_28", preference -> { + PreferencesUtil.addPreference(this, "wp_clear", AndroidUtils.getString("wallpaper_remove"), "", "ic_delete_outline_28", preference -> { removeWallpaper(); requestUpdateWallpaper(); mWPPreviewPref.redraw(); @@ -77,36 +78,30 @@ public class WallpaperMenuFragment extends MaterialPreferenceToolbarFragment { return true; }); - PreferencesUtil.addPreferenceCategory(this, "Фильтры"); + PreferencesUtil.addPreferenceCategory(this, AndroidUtils.getString("vtlfilters")); if (!hasVerification() && !getBoolValue("dialogrecomm", false)) { - PreferencesUtil.addPreference(this, "", "Доступны не все фильтры!", "Для разблокировки необходимо сделать пожертование от 99р", null, preference -> { + PreferencesUtil.addPreference(this, "", AndroidUtils.getString("filters_warning"), AndroidUtils.getString("icons_warning_info"), null, preference -> { getContext().startActivity(new Intent("android.intent.action.VIEW").setData(Uri.parse("https://vtosters.app"))); return false; }); } - PreferencesUtil.addListPreference(this, "msg_blur_radius", "disabled", "Размытие фона сообщений", new CharSequence[]{ - "Отключено", "Низкое (15px)", "Среднее (25px)", "Высокое (50px)" - }, new String[]{ + PreferencesUtil.addListPreference(this, "msg_blur_radius", "disabled", AndroidUtils.getString("filter_blur"), AndroidUtils.getArray("filter_types"), new String[]{ "disabled", "low", "med", "high" }); - PreferencesUtil.addListPreference(this, "msg_dim", "off", "Затемнение изображения", new CharSequence[]{ - "Отключено", "Затемнить", "Осветлить" - }, new String[]{ + PreferencesUtil.addListPreference(this, "msg_dim", "off", AndroidUtils.getString("filter_dim"), AndroidUtils.getArray("filter_dim_types"), new String[]{ "off", "dim_black", "dim_white" }); - PreferencesUtil.addListPreference(this, "msg_mosaic", "disabled", "Мозаика", new CharSequence[]{ - "Отключено", "Низкое", "Среднее", "Высокое" - }, new String[]{ + PreferencesUtil.addListPreference(this, "msg_mosaic", "disabled", AndroidUtils.getString("filter_mosaic"), AndroidUtils.getArray("filter_types"), new String[]{ "disabled", "low", "med", "high" }); if (hasVerification()) { - PreferencesUtil.addMaterialSwitchPreference(this, "msg_monochrome", "Черно-белый фон", "", null, false, (preference, o) -> { + PreferencesUtil.addMaterialSwitchPreference(this, "msg_monochrome", AndroidUtils.getString("filter_monochrome"), "", null, false, (preference, o) -> { boolean value = (boolean) o; edit().putBoolean("msg_monochrome", value).commit(); requestUpdateWallpaper(); @@ -114,7 +109,7 @@ public class WallpaperMenuFragment extends MaterialPreferenceToolbarFragment { return true; }); - PreferencesUtil.addMaterialSwitchPreference(this, "msg_invert", "Инвертировать цвета", "", null, false, (preference, o) -> { + PreferencesUtil.addMaterialSwitchPreference(this, "msg_invert", AndroidUtils.getString("filter_invert_colors"), "", null, false, (preference, o) -> { boolean value = (boolean) o; edit().putBoolean("msg_invert", value).commit(); requestUpdateWallpaper(); @@ -122,7 +117,7 @@ public class WallpaperMenuFragment extends MaterialPreferenceToolbarFragment { return true; }); - PreferencesUtil.addMaterialSwitchPreference(this, "msg_sepia", "Эффект сепии", "", null, false, (preference, o) -> { + PreferencesUtil.addMaterialSwitchPreference(this, "msg_sepia", AndroidUtils.getString("filter_sepia"), "", null, false, (preference, o) -> { boolean value = (boolean) o; edit().putBoolean("msg_sepia", value).commit(); requestUpdateWallpaper(); @@ -130,7 +125,7 @@ public class WallpaperMenuFragment extends MaterialPreferenceToolbarFragment { return true; }); - PreferencesUtil.addMaterialSwitchPreference(this, "msg_emboss", "Emboss фильтр", "Возможна нагрузка на устройство", null, false, (preference, o) -> { + PreferencesUtil.addMaterialSwitchPreference(this, "msg_emboss", AndroidUtils.getString("filter_emboss"), AndroidUtils.getString("filter_maybe_lag"), null, false, (preference, o) -> { boolean value = (boolean) o; edit().putBoolean("msg_emboss", value).commit(); requestUpdateWallpaper(); @@ -138,7 +133,7 @@ public class WallpaperMenuFragment extends MaterialPreferenceToolbarFragment { return true; }); - PreferencesUtil.addMaterialSwitchPreference(this, "msg_engrave", "Engrave фильтр", "Возможна нагрузка на устройство", null, false, (preference, o) -> { + PreferencesUtil.addMaterialSwitchPreference(this, "msg_engrave", AndroidUtils.getString("filter_engrave"), AndroidUtils.getString("filter_maybe_lag"), null, false, (preference, o) -> { boolean value = (boolean) o; edit().putBoolean("msg_engrave", value).commit(); requestUpdateWallpaper(); @@ -146,7 +141,7 @@ public class WallpaperMenuFragment extends MaterialPreferenceToolbarFragment { return true; }); - PreferencesUtil.addMaterialSwitchPreference(this, "msg_flea", "Flea фильтр", "", null, false, (preference, o) -> { + PreferencesUtil.addMaterialSwitchPreference(this, "msg_flea", AndroidUtils.getString("filter_flea"), "", null, false, (preference, o) -> { boolean value = (boolean) o; edit().putBoolean("msg_flea", value).commit(); requestUpdateWallpaper(); @@ -154,7 +149,7 @@ public class WallpaperMenuFragment extends MaterialPreferenceToolbarFragment { return true; }); - PreferencesUtil.addMaterialSwitchPreference(this, "msg_snow", "Эффект снега", "", null, false, (preference, o) -> { + PreferencesUtil.addMaterialSwitchPreference(this, "msg_snow", AndroidUtils.getString("filter_flea"), "", null, false, (preference, o) -> { boolean value = (boolean) o; edit().putBoolean("msg_snow", value).commit(); requestUpdateWallpaper(); diff --git a/app/src/main/java/ru/vtosters/lite/ui/wallpapers/WallpapersHooks.java b/app/src/main/java/ru/vtosters/lite/ui/wallpapers/WallpapersHooks.java index d6d7978de..5973bc042 100644 --- a/app/src/main/java/ru/vtosters/lite/ui/wallpapers/WallpapersHooks.java +++ b/app/src/main/java/ru/vtosters/lite/ui/wallpapers/WallpapersHooks.java @@ -16,6 +16,8 @@ import android.widget.ImageView; import java.io.File; +import ru.vtosters.lite.utils.AndroidUtils; + public class WallpapersHooks { private static File mWallpaperFile; @@ -91,13 +93,13 @@ public class WallpapersHooks { String radius = getPreferences().getString("msg_blur_radius", "disabled"); switch (radius) { case "low": - return "Низкое"; + return AndroidUtils.getString("wallpapers_low"); case "med": - return "Среднее"; + return AndroidUtils.getString("wallpapers_med"); case "high": - return "Высокое"; + return AndroidUtils.getString("wallpapers_high"); default: - return "Отключено"; + return AndroidUtils.getString("wallpapers_disabled"); } } @@ -105,11 +107,11 @@ public class WallpapersHooks { String radius = getPreferences().getString("msg_dim", "disabled"); switch (radius) { case "dim_black": - return "Затемнить"; + return AndroidUtils.getString("wallpapers_dim_black"); case "dim_white": - return "Осветлить"; + return AndroidUtils.getString("wallpapers_dim_white"); default: - return "Отключено"; + return AndroidUtils.getString("wallpapers_disabled"); } } @@ -117,13 +119,13 @@ public class WallpapersHooks { String radius = getPreferences().getString("msg_mosaic", "disabled"); switch (radius) { case "low": - return "Низкое"; + return AndroidUtils.getString("wallpapers_low"); case "med": - return "Среднее"; + return AndroidUtils.getString("wallpapers_med"); case "high": - return "Высокое"; + return AndroidUtils.getString("wallpapers_high"); default: - return "Отключено"; + return AndroidUtils.getString("wallpapers_disabled"); } } diff --git a/app/src/main/java/ru/vtosters/lite/utils/About.java b/app/src/main/java/ru/vtosters/lite/utils/About.java index 8cbf0a867..b171835bd 100644 --- a/app/src/main/java/ru/vtosters/lite/utils/About.java +++ b/app/src/main/java/ru/vtosters/lite/utils/About.java @@ -22,10 +22,10 @@ public class About { public static void injectToToolBar(View view) { view.setOnLongClickListener(v -> { if (devmenu()) { - sendToast("Меню для разработчиков уже активировано"); + sendToast(AndroidUtils.getString("debug_menu_already_activated")); } else { edit().putBoolean("devmenu", true).apply(); - sendToast("Меню для разработчиков активировано"); + sendToast(AndroidUtils.getString("debug_menu_activated")); } return true; }); diff --git a/app/src/main/java/ru/vtosters/lite/utils/AndroidUtils.java b/app/src/main/java/ru/vtosters/lite/utils/AndroidUtils.java index 69fcced1a..ce67c19f1 100644 --- a/app/src/main/java/ru/vtosters/lite/utils/AndroidUtils.java +++ b/app/src/main/java/ru/vtosters/lite/utils/AndroidUtils.java @@ -63,6 +63,10 @@ public class AndroidUtils { return 0; } // Get res id + public static String[] getArray(String resourcename) { + return getResources().getStringArray(getIdentifier(resourcename, "array")); + } // Get array from arrays.xml + public static String getString(String resourcename) { return getGlobalContext().getString(getIdentifier(resourcename, "string")); } // Get string via getIdentifier diff --git a/app/src/main/java/ru/vtosters/lite/utils/CacheUtils.java b/app/src/main/java/ru/vtosters/lite/utils/CacheUtils.java index b15356749..01a0704b9 100644 --- a/app/src/main/java/ru/vtosters/lite/utils/CacheUtils.java +++ b/app/src/main/java/ru/vtosters/lite/utils/CacheUtils.java @@ -56,7 +56,7 @@ public class CacheUtils { size = IOUtils.getDirSize(getGlobalContext().getCacheDir()); if (size >= getSizeForDelete()) { - if (dev()) sendToast("Кеш очищен"); + if (dev()) sendToast(AndroidUtils.getString("cache_cleaned")); VKImageLoader.e(); ImAudioMsgPlayerProvider.b().e(PlayerActionSources.a); ImAudioMsgPlayerProvider.b().d(PlayerActionSources.a); diff --git a/app/src/main/java/ru/vtosters/lite/utils/RenameTool.java b/app/src/main/java/ru/vtosters/lite/utils/RenameTool.java index 0873e82f7..58bf46da4 100644 --- a/app/src/main/java/ru/vtosters/lite/utils/RenameTool.java +++ b/app/src/main/java/ru/vtosters/lite/utils/RenameTool.java @@ -152,7 +152,7 @@ public class RenameTool { linearLayout.setOrientation(LinearLayout.VERTICAL); final EditText fn = new EditText(ctx); - fn.setHint("Имя"); + fn.setHint(AndroidUtils.getString("vk_auth_sign_up_first_name")); fn.setTextColor(getTextAttr()); fn.setHintTextColor(getSTextAttr()); fn.setBackgroundTintList(ColorStateList.valueOf(getAccentColor())); @@ -163,7 +163,7 @@ public class RenameTool { fn.setLayoutParams(margin); final EditText ln = new EditText(ctx); - ln.setHint("Фамилия"); + ln.setHint(AndroidUtils.getString("vk_auth_sign_up_last_name")); ln.setTextColor(getTextAttr()); ln.setHintTextColor(getSTextAttr()); ln.setBackgroundTintList(ColorStateList.valueOf(getAccentColor())); @@ -178,8 +178,8 @@ public class RenameTool { int id = AccountManagerUtils.getUserID(profile); AlertDialog.Builder builder = new AlertDialog.Builder(ctx, getAlertStyle()); - builder.setTitle("Смена имени"); - builder.setMessage("Это локальное изменение, которое будет отображатся только в данном клиенте."); + builder.setTitle(AndroidUtils.getString("rename_title")); + builder.setMessage(AndroidUtils.getString("rename_message")); builder.setView(linearLayout); builder.setPositiveButton("OK", (dialog, which) -> { String firstName = fn.getText().toString(); @@ -197,19 +197,20 @@ public class RenameTool { } ctx.sendBroadcast(new Intent("com.vkontakte.android.ACTION_PROFILE_UPDATED").putExtra("uid", id)); - sendToast("Пользователь успешно переименован!"); + sendToast(AndroidUtils.getString("rename_success")); } catch (Exception e) { e.printStackTrace(); + sendToast(AndroidUtils.getString("rename_error")); } }); - if (isChangedName(id)) builder.setNeutralButton("Сбросить", (dialog, which) -> { + if (isChangedName(id)) builder.setNeutralButton(AndroidUtils.getString("rename_reset"), (dialog, which) -> { getHelper().getWritableDatabase().execSQL(String.format("DELETE FROM %s WHERE %s='%s'", TABLE_NAME, COLUMN_VKID, id)); if (id == AccountManagerUtils.getUserId()) { ctx.sendBroadcast(new Intent("com.vkontakte.android.USER_NAME_CHANGED")); } updateRequested = true; ctx.sendBroadcast(new Intent("com.vkontakte.android.ACTION_PROFILE_UPDATED").putExtra("uid", id)); - sendToast("Пользователь успешно удален из базы данных!"); + sendToast(AndroidUtils.getString("rename_remove_from_bd_success")); }); var alert = builder.create(); @@ -225,7 +226,7 @@ public class RenameTool { linearLayout.setOrientation(LinearLayout.VERTICAL); final EditText fn = new EditText(ctx); - fn.setHint("Имя"); + fn.setHint(AndroidUtils.getString("vk_auth_sign_up_first_name")); fn.setHintTextColor(getSTextAttr()); fn.setTextColor(getTextAttr()); fn.setBackgroundTintList(ColorStateList.valueOf(getAccentColor())); @@ -244,8 +245,8 @@ public class RenameTool { final int id = fid; AlertDialog.Builder builder = new AlertDialog.Builder(ctx, getAlertStyle()); - builder.setTitle("Смена имени"); - builder.setMessage("Это локальное изменение, которое будет отображатся только в данном клиенте"); + builder.setTitle(AndroidUtils.getString("rename_title")); + builder.setMessage(AndroidUtils.getString("rename_message")); builder.setView(linearLayout); builder.setPositiveButton("OK", (dialog, which) -> { String firstName = fn.getText().toString(); @@ -257,15 +258,15 @@ public class RenameTool { writableDatabase.execSQL(String.format("INSERT INTO %s (%s, %s) VALUES (%s, '%s')", TABLE_NAME_GROUP, COLUMN_VKID, COLUMN_NAME, id, URLEncoder.encode(firstName, "UTF-8"))); } updateRequested = true; - sendToast("Сообщество успешно переименовано!"); + sendToast(AndroidUtils.getString("rename_group_success")); } catch (Exception e) { e.printStackTrace(); } }); - if (isChangedNameGroup(id)) builder.setNeutralButton("Сбросить", (dialog, which) -> { + if (isChangedNameGroup(id)) builder.setNeutralButton(AndroidUtils.getString("rename_reset"), (dialog, which) -> { getHelper().getWritableDatabase().execSQL(String.format("DELETE FROM %s WHERE %s='%s'", TABLE_NAME_GROUP, COLUMN_VKID, id)); updateRequested = true; - sendToast("Сообщество успешно удалено из базы данных!"); + sendToast(AndroidUtils.getString("rename_remove_group_from_bd_success")); }); var alert = builder.create(); diff --git a/smali/res/values-ru/arrays.xml b/smali/res/values-ru/arrays.xml index 1e39121da..c4c332f04 100644 --- a/smali/res/values-ru/arrays.xml +++ b/smali/res/values-ru/arrays.xml @@ -651,4 +651,29 @@ 15 апреля в 18:42:28 15 апреля 2022 в 18:42:28 + + Доброе время + Доброе утро, день, вечер, ночь + Как живёшь? + Не мёртвый, и то хорошо + + + Очистить весь кеш + Очистить кеш стикеров + Очистить кеш изображений + Очистить кеш видео + Очистить кеш сообщений + Очистить кеш WebView + + + Отключено + Низкое + Среднее + Высокое + + + Отключено + Затемнить + Осветлить + diff --git a/smali/res/values-ru/strings.xml b/smali/res/values-ru/strings.xml index ea8d7a566..57e4522db 100644 --- a/smali/res/values-ru/strings.xml +++ b/smali/res/values-ru/strings.xml @@ -282,6 +282,9 @@ Музыкант Трансляция аудиозаписей Аудиозапись удалена + Произошла ошибка. Вы пытаетесь воспроизвести пустой плейлист. + Произошла ошибка + Произошла ошибка. Проверьте соединение и повторите попытку. Текст песни Голосовое сообщение Удерживайте, чтобы записать @@ -350,6 +353,7 @@ Обсуждения Комментарий отправлен Закладки + Токен удален Магазин Закешировать мою музыку Во время эфира нельзя изменять ориентацию съёмки @@ -599,6 +603,20 @@ Назад Продолжить просмотр Завершение покупки... + Контекстное меню + Основные + Нижняя кнопка + Кнопки + Диалоги + Поля ввода + Интро/Промо + Лоадеры + Заглушки + Снекбар + Заглушки + Текст + VK UI компоненты + Тултипы Подтверждение Подтверждение действия Вы действительно хотите заблокировать %s? @@ -5348,6 +5366,8 @@ Пример: #реклама, Выиграйте сегодня, НОВИНКА! Фильтры не чувствительны к регистру!" Фильтр слов и выражений + Фильтр ссылок в источнике + Фильтр по названию источника Стандартный фильтр рекламы Фильтр для блокировки постов с пометкой #реклама и тд Использовать VKUI @@ -5357,6 +5377,32 @@ Запись голосовых сообщений Иконка записи голосовых сообщений в поле ввода сообщения Покрасить панель навигации + Посты с возможной рекламой + Блокировать посты с источником где есть ссылка на VK / Telegram (группу, страницу или посты) или на другие возможные ресурсы + Репосты с ссылками + Блокировать посты с репостом внутри которых есть ссылка на VK / Telegram + Почему не обновляются новости? + Возможно у вас включена Интересная лента \n\nЕсли вы хотите поменять ленту на Временную, то вы можете сменить ее нажав на пункт выше + Списки новостей + Настройки списков новостей + Сбросить список новостей + Где настройки кеша? + Они переехали в настройки мода во вкладку Другое + О GMS + Что такое GMS? + GMS - Google Mobile Services, необходимый компонент для нормальной работы приложений. Все уведомления, вход в игры, Google Play и прочие функции устройства используют этот компонент + Зачем мне нужен GMS для этого приложения? + GMS необходим для работы уведомлений, для работы музыки и ещё очень многих компонентов приложения + Как скачать? + Что тогда делать? + Вам необходимо скачать MicroG. + Что такое MicroG? + Это открытая альтернатива сервисам GMS с возможностью установить её на устройство без GMS + Официальный сайт MicroG + Скачать MicroG + Что делать дальше? + Что делать после установки MicroG? + Обновите регистрацию Firebase в настройках в разделе "Другое" Помочь проекту dd MMMM yyyy в HH:mm:ss dd MMMM в HH:mm:ss @@ -5449,6 +5495,62 @@ "Сокращать текст в постах Показать полностью..." + Результаты опросов + Показывать результаты в опросах без участия в них + Загрузки + Текущая папка: + Папка для загрузок + Папка для фото + Папка для видео + Папка для музыки + Отключение значительно улучшит качество загружаемых фотографий + Отключение значительно улучшит качество загружаемых видео + Аккаунт + Ошибка входа + Вы не вошли в аккаунт + Вы успешно вышли из учетной записи + Включить скробблинг + Полезный сервис по учету прослушивания песен + Логин или пароль не заданы + Музыка + Новый раздел музыки + Новый каталог музыкального раздела с динамическим контентом + Выберите раздел по умолчанию + Раздел музыки по умолчанию + Видео + Скачать видео + Новый раздел видео + Новый каталог видео раздела с динамическим контентом + Очистить историю видео + Очистка истории просмотра видео удалит все видео из истории просмотра и рекомендации основанные на них + Фото + Выбор движка для поиска фото + Обои в сообщениях + Скрыть рекомендации + Скрыть блок рекомендаций добавления в друзья в сообщениях и других советов + VK Мессенджер + Переводчик + Выберите язык + Язык переводчика + Сервис переводов + Автоматический перевод + Автоматически переводить ваши исходящие сообщения + Автоматический перевод всего + Автоматически переводить все сообщения\n\nМогут быть проблемы с загрузкой сообщений + Очистка кеша приложения + Сбросить пути папок + Токен от VK Admin + Бэкапы + Сохранить список онлайнов + Сохранить список AppId и их названия в файл + Сохранить настройки + Восстановить настройки + Милкшейк + Глобальный редизайн ВКонтакте как на новых версиях + Докбар + Использовать акцент для иконок + Выбрать иконку приложения + Большой выбор иконок для приложения Лента Боковая камера в новостях Работает только с классическим дизайном новостей @@ -5510,6 +5612,41 @@ Фильтр очистки постов с РФ и действиями связанными на Украине\n\nМогут быть ошибочные срабатывания Показывать истории Блок истории в верхней части ленты + Блок написания поста в ленте + Показывать блок поста + Показ лайков в посте справа + Размер закругления картинок + Редизайн видеопостов + Текст к видео будет отображаться под видеоматериалом + Блок миниаппов + Показывать Miniapps/Игры в меню + Блок VK Pay + Показывать VK Pay в меню + Супераппы + Новый вид меню как в новых версиях ВКонтакте + Скрыть друзей + Скрыть блок рекомендаций друзей в друзьях + Расширенный онлайн + Показывать с какого приложения/клиента человек в онлайне + Голосовые сообщения + Функция позволяет не отправлять статус прослушивания голосовых сообщений человека вами + Отключить статус прослушивания + Скрытый онлайн VK Me + Показывать онлайн пользователей в профилях если у вас включен режим скрытия онлайна из VK Messenger + Обходить онлайн + Глобальный обход онлайна + Может вызывать долгие загрузки разделов и большое потребление трафика \n\nНе рекомендуется включать данную функцию + Сохранять настройки сообщений + Сохранять положение тумблеров в настройках сообщений + Отключить детект скриншотов + Отключить уведомление о том, что вы сделали скриншот + Отключить отправку метрики + Отключить отправку информации об устройстве пользователя и вашем местоположении + Использовать новый AdBlock (Beta) + Добавить каталог подкастов + Использовать новые настройки + Фикс музыки v2 + Новый способ скачивания музыки Отключить рекомендации Показывать специальные верификации Показывать верификации @@ -5605,6 +5742,7 @@ Анти-удаление сообщений Пометка удалённого сообщения + Выберите пометку удалённого сообщения Оставлять удалённые сообщения Может не сохранять вложения @@ -5641,6 +5779,8 @@ Проверить обновления + Значения toggles не были получены с сервера + Внимание! Данное меню предназначено только для тестирования работоспособности приложения. Если вы являетесь рядовым юзером, то вам не следует ничего не трогать в данных настройках (пожалуйста) Показывать пункт дебага в настройках @@ -5683,17 +5823,26 @@ Отображать ошибки api с помощью тоста Моментальная отправка статы Дебаг WebView - Визуализация view_post_timen + Визуализация view_post_time Подсвечивать посты при регистрации события view_post_time + Разрешить брекпоинты + Разрешить брекпоинты запросов через Proxy (Charles) Применять дырки Применять дырки для сообщений после long poll history Включить MemLeak detect + Сеть + Кэш Очистить хэш 2фа Очистить кеш WebView + Удалить токен VK Pay для оплаты по QR + Очистить кеш стикеров Очистить видео кеш + Зона кликабельного стикера + Зоны стикера при создании + Системные Подменить язык Завершить процесс @@ -5710,6 +5859,10 @@ Демо карусель карточек VK UI Uri (для теста) Тест VK UI + Тестовый тултип + + Список версий + Сбросить токен баг-трекера Официальный прокси ВК Вкшные костыли для своего прокси @@ -5717,6 +5870,9 @@ Не работает Прочее + Отключить рекламу + Прокси + Использовать libverify для авторизации Включить нечиталку Отключить нечиталку @@ -5798,4 +5954,187 @@ Прочитать до Перевести + + Сервис стикеров Telegram в VTLite + : загрузка + : обновление + Получение информации + успешно обновлен + успешно загружен + : ошибка при обновлении + : ошибка при загрузке + + Вы авторизованы как + Логин + Пароль + Введите логин и пароль + Войти + Вы уверены? + Вы действительно хотите выйти из аккаунта? + + История просмотра видео очищена + + Введите ссылку на видео + + Загрузка музыки + Прогресс загрузки музыки + + Копирование библиотеки ffmpegkit + + Не удалось сохранить лог-файл + Лог-файл был сохранен + + Скопировать ID + Дополнительная информация + Изменить имя + Скопировано! + + Применить + + Выберите размер закругления углов + Для отключения функции закругления углов поставьте 0 + + + Отключено + Низкое + Среднее + Высокое + Затемнить + Осветлить + + Реплай: + Нет текста для перевода + + Диалог успешно + закреплен + откреплен + + Меню для разработчиков уже активировано + Меню для разработчиков активировано + + Некоторые пункты настроек были скрыты из-за режима VK Мессенджер \n\nДля отключения режима перейдите в настройки Сообщений + + Скрыто элементов + + Помоги проекту донатом и получи бонус! + Карточка Тестера + Я купил + Я создал говно + Я не загрузил данные (9(9(( + + Токен успешно сохранён + Папки успешно сброшены + + Не включено + Очищать кеш при не менее 100 Мб + Очищать кеш при не менее 500 Мб + Очищать кеш при не менее 1 Гб + Очищать кеш при не менее 2 Гб + Очищать кеш при не менее 5 Гб + Очистка кеша + Выберите объём кеша для очистки + Выберите, что вы хотите очистить + Кеш очищен + + Нет данных для резервного копирования + Выберите бэкап + Настройки восстановлены + Ошибка: настройки не восстановлены + + Смена имени + Это локальное изменение, которое будет отображаться только в данном клиенте. + Пользователь успешно переименован! + Ошибка при переименовании пользователя + Сбросить + Пользователь успешно удалён из базы данных! + Сообщество успешно переименовано! + Сообщество успешно удалено из базы данных! + + Не удалось найти ссылку на аудиозапись + Не удалось загрузить аудиозапись + Загрузка аудиозаписи + + Настроить прокси + Отключить + Включить + Zaborona никак не связана с ВТостерс и мы не можем гарантировать её работу и безопасность + Настройки прокси + + Ошибка установки обновления + + 15 секунд + 1 минута + 5 минут + 1 час + 24 часа + + Бесшумные сообщения + Настройки отправки + Выберите время исчезновения сообщения + + Обновите токен VK Admin в настройках в разделе Другое + + Сохранено в файл + Не удалось сохранить файл + + Обновите ленту для получения списка доступных пунктов + Выберите пункты для скрытия + Для применения изменений обновите ленту + Сброшены пункты для скрытия + + Загрузка историй не поддерживается + Неверная ссылка + Обработка видео + Видео нельзя скачать + + Меню приложения + MiniApps: виджет + VK Pay + Приветствие + MiniApps: промо + Дни рождения у друзей + Погода + Спортивные события + Игры + Информер + Еда + Мероприятия + Музыка + VK Run + + Скрыто %1$d лент новостей + Нет добавленных элементов + Добавлено %1$d элементов + + Выберите название приложения + Доступны не все функции! + Для разблокировки необходимо сделать пожертование от 99 рублей + Иконки + Недоступные иконки + Иконка доступна только обладателям верификации + + Размер закругления: %1$ddp + + Сферум + VK Звонки + VK Музыка + VK Клипы + VK Видео + VK Почта + + Выбрать обои + из галереи + Удалить обои + Доступны не все фильтры! + Возможна нагрузка на устройство + Размытие фона сообщений + Затемнение изображения + Мозаика + Черно-белый фон + Инвертировать цвета + Эффект сепии + Emboss фильтр + Engrave фильтр + Flea фильтр + Эффект снега diff --git a/smali/res/values/arrays.xml b/smali/res/values/arrays.xml index b994d56c4..b46d37f5f 100644 --- a/smali/res/values/arrays.xml +++ b/smali/res/values/arrays.xml @@ -853,4 +853,29 @@ noyear full + + Good time + Good morning, afternoon, evening, night + How are you? + Not dead, that\'s good + + + Clear all cache + Clear stickers cache + Clear images cache + Clear videos cache + Clear messages cache + Clear WebView cache + + + Disabled + Low + Average + High + + + Disabled + Dim + Lighten + diff --git a/smali/res/values/strings.xml b/smali/res/values/strings.xml index 708e87c90..fde3d707e 100644 --- a/smali/res/values/strings.xml +++ b/smali/res/values/strings.xml @@ -297,9 +297,9 @@ Artist Broadcast music Track deleted - Произошла ошибка. Вы пытаетесь воспроизвести пустой плейлист. - Произошла ошибка - Произошла ошибка. Проверьте соединение и повторите попытку. + An error has occurred. You are trying to play an empty playlist. + An error has occurred + An error has occurred. Check the connection and try again. Lyrics Voice message Hold to record @@ -371,7 +371,7 @@ You can use the menu on a user’s profile to block them." Comment sent Bookmarks com.google.android.material.bottomsheet.BottomSheetBehavior - Токен удален + Token removed Store Cache my music "You can't change your frame orientation while streaming" @@ -627,20 +627,20 @@ no results" Back Continue Completing purchase... - Контекстное меню - Основные - Нижняя кнопка - Кнопки - Диалоги - Поля ввода - Интро/Промо - Лоадеры - Заглушки - Снекбар - Заглушки - Текст - VK UI компоненты - Тултипы + Context menu + Basics + Bottom button + Buttons + Dialogs + Input fields + Intro/Promo + Loaders + Stubs + Snackbar + Stubs + Text + VK UI components + Tooltips Confirmation Confirm action Are you sure you want to block %s? @@ -694,7 +694,7 @@ no results" sans-serif-light Month grid of days Hints - Значения toggles не были получены с сервера + No toggles values were received from the server Toggles Default Progressbar: 841415684880-i5q85vkpnnj8fgbd1qde5o9kq87656dk.apps.googleusercontent.com @@ -3717,7 +3717,7 @@ photo" Sticker Active Add to favorites - Добавление недоступно + Adding unavailable Buy for %1$s Free Settings @@ -5488,8 +5488,8 @@ with video" All your questions are answered here Our site Install Google Play Services - Disable Ads - Disable Groups Ads + Disable ads + Disable groups ads Posts with ads mark Disable ad carousel Disable ads in stories @@ -5498,8 +5498,10 @@ with video" How to make filters? "Filter format: words or sentences, separated by a comma with a space Example: #sponsored, Free gift cards, #PROMO -Filters are case-sensitive!" +Filters are not case-sensitive!" Filter words and expressions + Source link filter + Source name filter Standard adblock filter Blocks posts with common tags, such as #ad, #pr and so on Use VKUI @@ -5509,6 +5511,32 @@ Filters are case-sensitive!" Recording voice messages The icon for recording voice messages in the message input field Color navigation bar + Posts with possible advertising + Block posts with a source where there is a link to VK / Telegram (group, page or posts) or to other possible resources + Reposts with links + Block posts with repost inside which there is a link to VK / Telegram + Why is the news not updated? + Perhaps you have the Interesting feed turned on \n\nIf you want to change the feed to the Temporary feed, you can change it by clicking on the item above + Newsfeed list + Newsfeed list settings + Reset newsfeed list + Where is cache settings? + They moved to the mod settings in the Other tab + About GMS + What is GMS? + GMS - Google Mobile Services, a necessary component for the normal operation of applications. All notifications, logging into games, Google Play and other device functions use this component + Why do I need GMS for this app? + GMS is necessary for notifications to work, for music to work, and for many other application components + How to download? + What to do then? + You need to download MicroG. + What is MicroG? + It is an open alternative to GMS services with the ability to install it on a non-GMS device + MicroG official website + Download MicroG + What to do next? + What to do after installing MicroG? + Update Firebase registration in Other settings Donate dd MMMM yyyy HH:mm:ss dd MMMM HH:mm:ss @@ -5601,6 +5629,62 @@ Registration date:" "Shorten the text in posts Expand text..." + Poll results + Show results in polls without voting in them + Downloads + Current folder: + Folder for downloads + Folder for photos + Folder for videos + Folder for music + Disabling will significantly improve the quality of uploaded photos + Disabling will significantly improve the quality of uploaded videos + Account + Login failed + You are not logged in + You have successfully logged out + Enable scrobbling + Useful song tracking service + Username or password not set + Music + New music catalog + New music catalog with dynamic content + Select default section + Default music section + Video + Download video + New video catalog + New video catalog with dynamic content + Clear video history + Clearing video history will remove all videos from your watch history and recommendations based on them + Photo + Selecting a photo search engine + Wallpaper in Messages + Hide recommendations + Hide friend recommendation section in messages and other tips + VK Messenger + Translator + Choose a language + Translator language + Translation service + Auto-translate + Automatically translate your outgoing messages + Auto-translate everything + Automatically translate all messages\n\nThere may be problems loading messages + Clear app cache + Reset download folders paths + Token from VK Admin + Backups + Save online list + Save the list of AppIds and their names to a file + Save preferences + Restore preferences + Milkshake + Global redesign of VK as on new versions + Dockbar + Use accent for icons + Select app icon + Great selection of app icons Feed Side camera in the news Works only with classic newsfeed design @@ -5662,6 +5746,41 @@ You need to restart the application to apply proxy settings" Filter for cleaning posts with the Russian Federation and actions related in Ukraine\n\nThere may be incorrect triggers Show stories The story section at the top of the feed + Section of writing a post at the feed + Show the post section + Show likes to the right of the post + Image rounding size + Video post redesign + The text for the video will be displayed below the video + Miniapps section + Show Miniapps/Games in menu + VK Pay section + Show VK Pay in the menu + Superapps + New menu view as in new versions of VK + Hide friends + Hide the block of recommendations of friends in friends section + Extended online indicator + Show what app/device a person is online from + Voice messages + The function allows you not to send the status of listening to the person\'s voice messages by you + Disable listening status + Hidden VK Me online + Show online users in profiles if you have the mode of hiding online from VK Messenger enabled + Bypass online indicator + Global online bypass + May cause slow partition loading and high traffic consumption \n\nIt is not recommended to enable this feature + Save message settings + Save the position of the toggle switches in the message settings + Disable screenshot detection + Turn off the notification that you took a screenshot + Disable sending metric + Disable sending information about the user\'s device and your location + Use new AdBlock (Beta) + Add podcast catalog + Use new settings + Music fix v2 + New way to download music Disable recommendations Show special verifications Show verifications @@ -5724,7 +5843,7 @@ May look like a fake leaving the online" Recommend popular authors\' posts friends Recommend posts that your friends like - Audo update news + Auto update news Choose update type Sort comments Sort comments by newest @@ -5849,9 +5968,13 @@ May look like a fake leaving the online" Apply spaces for messages after longpoll history Turn on MemLeak detect + Network + Cache - Clear 2fa hash + Clear 2FA hash Clear WebView cache + Remove VK Pay token for QR payment + Clear stickers cache Clear video cache System @@ -5861,6 +5984,9 @@ May look like a fake leaving the online" Copy push token Update Google Now + Clickable sticker border + Sticker border on create + Tests Test BD notification Test need_validation error @@ -5870,6 +5996,10 @@ May look like a fake leaving the online" pretty_cards demo Test VK UI uri Test VK UI + Test tooltip + + App versions list + Drop bugtracker token Official VK Proxy Force VK Proxy features @@ -5878,6 +6008,9 @@ May look like a fake leaving the online" Won\'t work Other + Disable ads + Proxy + Use libverify for authorization Enable Do Not Read Disable Do Not Read @@ -5959,4 +6092,187 @@ May look like a fake leaving the online" Disable protection VK has started blocking the use of third-party applications, so for the stable operation of all parts of the application, it is necessary to disable Protection from suspicious applications \n\nVK ID -> Security and Login -> Protection from suspicious applications + + Telegram stickers service in VTLite + : downloading + : update + Getting info + updated successfully + downloaded successfully + : update failed + : download failed + + You are authorized as + Login + Password + Enter your username and password + Login + Are you sure? + Are you sure you want to log out? + + Video history cleared + + Enter video link + + Music downloading + Music downloading progress + + Copying the ffmpegkit library + + Failed to save log file + The log file has been saved + + Copy ID + Addon info + Change name + Copied! + + Apply + + Select the size of the rounding corners + Set to 0 to disable corner rounding + + + Disabled + Low + Medium + High + Dim + Lighten + + Reply: + No text to translate + + Dialog successfully + pinned + unpinned + + Developer menu already activated + Developer menu activated + + Some settings were hidden due to VK Messenger mode \n\nTo disable the mode, go to the Messages settings + + Elements hidden + + Help the project with a donation and get a bonus! + Tester\'s profile + I bought + I created a poop + I didn\'t get data (9(9(( + + Token saved successfully + Download folders reset successfully + + Not enabled + Clear cache at least 100mb + Clear cache at least 500mb + Clear cache at least 1 GB + Clear cache at least 2 GB + Clear cache at least 5 GB + Cache cleaning + Select the amount of cache to clear + Select what you want to clean + Cache cleared + + No data to backup + Choose a backup + Settings restored + Error: Settings not restored + + Name change + This is a local change that will only be visible at this client. + User renamed successfully! + Error while renaming user + Reset + User successfully removed from database! + Community renamed successfully! + Community was successfully removed from the database! + + Audio link could not be found + Unable to load audio + Audio downloading + + Set up proxy + Disable + Enable + Zaborona is not associated with VTosters in any way and we cannot guarantee its work and security + Proxy settings + + Error installing update + + 15 seconds + 1 minute + 5 minutes + 1 hour + 24 hours + + Silent messages + Send settings + Select the time when the message disappears + + Update VK Admin token in Other settings + + Saved to file + Failed to save file + + Update the feed to get a list of available items + Choose items to hide + Update the feed to apply changes + Hidden items reset + + Downloading stories is not supported + Invalid link + Video processing + Video cannot be downloaded + + App menu + MiniApps widget + VK Pay + Greeting + MiniApps promo + Friends\' birthdays + Weather + Sport events + Games + Informer + Food + Events + Music + VK Run + + %1$d feeds are hidden + No items added + %1$d items added + + Select app title + Not all features are available! + To unlock, you need to make a donation of at least 99 rubles + Icons + Unavailable icons + The icon is only available to verified owners + + Rounding size: %1$ddp + + Sferum + VK Calls + VK Music + VK Clips + VK Video + VK Mail + + Select wallpaper + from gallery + Remove wallpaper + Not all filters are available! + Device may be loaded + Blur message background + Dimming an image + Mosaic + Black and white background + Invert colors + Sepia effect + Emboss filter + Engrave filter + Flea filter + Snow effect diff --git a/smali/res/xml/preferences_activity.xml b/smali/res/xml/preferences_activity.xml index e03dbbe23..19cf525c7 100644 --- a/smali/res/xml/preferences_activity.xml +++ b/smali/res/xml/preferences_activity.xml @@ -29,8 +29,8 @@ + android:summary="@string/onlineformatter_summ" + android:title="@string/onlineformatter_title" /> - + + android:title="@string/listen_v_title" /> - + + android:summary="@string/onlinefix_summ" + android:title="@string/onlinefix_title" /> + android:summary="@string/globalUsersOnline_summ" + android:title="@string/globalUsersOnline_title" /> + android:summary="@string/savemsgsett_summ" + android:title="@string/savemsgsett_title" /> + android:summary="@string/screenshotdetect_summ" + android:title="@string/screenshotdetect_title" /> + android:summary="@string/hideDeviceInfo_summ" + android:title="@string/hideDeviceInfo_title" /> \ No newline at end of file diff --git a/smali/res/xml/preferences_debug.xml b/smali/res/xml/preferences_debug.xml index d2771cc29..a3d76aea3 100644 --- a/smali/res/xml/preferences_debug.xml +++ b/smali/res/xml/preferences_debug.xml @@ -25,11 +25,11 @@ + android:title="@string/newadblock_title" /> + android:title="@string/podcastcatalog_title" /> + android:title="@string/useNewSettings_title" /> + android:title="@string/musicFixNew_title" /> + android:title="@string/new_music_downloading_way_title" /> + android:title="@string/debug_domains"> + android:title="@string/debug_domains_api" /> + android:title="@string/debug_domains_oauth" /> + android:title="@string/debug_domains_awayphp" /> + android:title="@string/debug_network"> + android:title="@string/debug_logging"> + android:title="@string/debug_logging_api" /> + android:title="@string/debug_logging_force_stats_sending" /> + android:title="@string/debug_logging_webview" /> + android:summary="@string/debug_logging_visualise_viewposttime_summary" + android:title="@string/debug_logging_visualise_viewposttime" /> + android:summary="@string/debug_logging_breakpoints_summary" + android:title="@string/debug_logging_breakpoints" /> + android:summary="@string/debug_logging_apply_spaces_summary" + android:title="@string/debug_logging_apply_spaces" /> + android:title="@string/debug_logging_memleak" /> + android:title="@string/debug_logging_api_errors" /> + android:summary="@string/debug_logging_file_summary" + android:title="@string/debug_logging_file" /> + android:title="@string/debug_cache"> + android:title="@string/debug_cache_trusted_hash" /> + android:title="@string/debug_cache_webview" /> + android:title="@string/debug_cache_vkpay_token" /> + android:title="@string/debug_cache_stickers" /> + android:title="@string/debug_system"> + android:title="@string/debug_system_language" /> + android:title="@string/debug_system_terminate" /> + android:title="@string/debug_system_fcm" /> + android:title="@string/debug_system_fcm_copy_token" /> + android:title="@string/stories"> + android:title="@string/debug_clickable_sticker_border_title" /> + android:title="@string/debug_create_sticker_border_title" /> + android:title="@string/debug_tests"> + android:title="@string/debug_tests_bd" /> + android:title="@string/debug_tests_validation" /> + android:title="@string/debug_tests_captcha" /> + android:title="@string/debug_tests_crash" /> + android:title="@string/debug_tests_spa_uri" /> + android:title="@string/debug_tests_tooltip" /> + android:title="@string/bugs"> + android:title="@string/debug_app_versions_list_title" /> + android:title="@string/debug_drop_bugtracker_token_title" /> + android:title="@string/debug_other"> + android:title="@string/debug_no_ads_title" /> + android:title="@string/debug_proxy_enable_title" /> + android:title="@string/debug_use_libverify_for_auth_title" /> \ No newline at end of file diff --git a/smali/res/xml/preferences_feed.xml b/smali/res/xml/preferences_feed.xml index 0056608c3..6ed207495 100644 --- a/smali/res/xml/preferences_feed.xml +++ b/smali/res/xml/preferences_feed.xml @@ -34,11 +34,11 @@ + android:title="@string/vtlsourcenamefilter" /> + android:title="@string/vtllinkfilter" /> + android:summary="@string/cringecopyright_summ" + android:title="@string/cringecopyright_title" /> + android:summary="@string/cringerepost_summ" + android:title="@string/cringerepost_title" /> + android:summary="@string/why_news_not_updated_summ" + android:title="@string/why_news_not_updated_title" /> + android:summary="@string/newsfeedlistmanager_summ" + android:title="@string/newsfeedlistmanager_title" /> + android:title="@string/newsfeedlistmanager_reset_title" /> diff --git a/smali/res/xml/preferences_general.xml b/smali/res/xml/preferences_general.xml index 4811f8862..67f0f5f55 100644 --- a/smali/res/xml/preferences_general.xml +++ b/smali/res/xml/preferences_general.xml @@ -96,8 +96,8 @@ android:title="@string/sett_clear_audio_cache" /> + android:summary="@string/where_is_cache_settings_summ" + android:title="@string/where_is_cache_settings" /> \ No newline at end of file diff --git a/smali/res/xml/preferences_general_milkshake.xml b/smali/res/xml/preferences_general_milkshake.xml index fd145a56c..afe785912 100644 --- a/smali/res/xml/preferences_general_milkshake.xml +++ b/smali/res/xml/preferences_general_milkshake.xml @@ -96,7 +96,7 @@ android:title="@string/sett_clear_audio_cache" /> + android:summary="@string/where_is_cache_settings_summ" + android:title="@string/where_is_cache_settings" /> \ No newline at end of file diff --git a/smali/res/xml/preferences_gms.xml b/smali/res/xml/preferences_gms.xml index 9ebb78a6d..bf3bc58ab 100644 --- a/smali/res/xml/preferences_gms.xml +++ b/smali/res/xml/preferences_gms.xml @@ -1,43 +1,43 @@ - + + android:summary="@string/gms_what_is_summ" + android:title="@string/gms_what_is_title" /> + android:summary="@string/gms_why_need_summ" + android:title="@string/gms_why_need_title" /> - + + android:summary="@string/gms_what_to_do_then_summ" + android:title="@string/gms_what_to_do_then" /> + android:summary="@string/gms_what_is_microg_summ" + android:title="@string/gms_what_is_microg" /> + android:title="@string/gms_microg_site"> + + + - - - - + + android:summary="@string/gms_what_to_do_after_microg_summ" + android:title="@string/gms_what_to_do_after_microg_title" /> \ No newline at end of file diff --git a/smali/res/xml/preferences_interface.xml b/smali/res/xml/preferences_interface.xml index ab56baaac..4142f05af 100644 --- a/smali/res/xml/preferences_interface.xml +++ b/smali/res/xml/preferences_interface.xml @@ -13,12 +13,12 @@ + android:summary="@string/whatsnew_summ" + android:title="@string/whatsnew_title" /> + android:title="@string/right_likes" /> + android:title="@string/customrounding_title" /> + android:summary="@string/postsredesign_summ" + android:title="@string/postsredesign_title" /> - + + android:summary="@string/miniapps_summ" + android:title="@string/miniapps_title" /> + android:summary="@string/show_vkpay_summ" + android:title="@string/show_vkpay_title" /> + android:summary="@string/show_superapps_summ" + android:title="@string/show_superapps_title" /> + android:summary="@string/friendsblock_summ" + android:title="@string/friendsblock_title" /> + android:summary="@string/pollresults_summ" + android:title="@string/pollresults_title" /> - + + android:summary="@string/current_download_folder" + android:title="@string/folder_for_downloads" /> + android:summary="@string/current_download_folder" + android:title="@string/folder_for_photos" /> + android:summary="@string/current_download_folder" + android:title="@string/folder_for_videos" /> + android:summary="@string/current_download_folder" + android:title="@string/folder_for_music" /> + android:summary="@string/lastfm_auth_summ" + android:title="@string/lastfm_auth_title" /> + android:summary="@string/lastfm_enabled_summ" + android:title="@string/lastfm_enabled_title" /> - + + android:summary="@string/musicnewcatalog_summ" + android:title="@string/musicnewcatalog_title" /> + android:title="@string/musicdefcatalog_title" /> - + + android:title="@string/vtl_download_video_title" /> + android:summary="@string/videonewcatalog_summ" + android:title="@string/videonewcatalog_title" /> + android:summary="@string/clearvideohistory_summ" + android:title="@string/clearvideohistory_title" /> - + + android:title="@string/photo_search_engine_title" /> + android:title="@string/wallpapers_title" /> + android:summary="@string/convBarRecomm_summ" + android:title="@string/convBarRecomm_title" /> - + - + + android:title="@string/translator_translate_language" /> + android:title="@string/translator_translate_service" /> + android:summary="@string/autotranslate_summ" + android:title="@string/autotranslate_title" /> + android:summary="@string/autoalltranslate_summ" + android:title="@string/autoalltranslate_title" /> + android:title="@string/clearcache_other_title" /> @@ -21,29 +21,29 @@ android:title="@string/killappbtn" /> + android:title="@string/reset_folders_locations" /> + android:title="@string/vk_admin_token_title" /> - + + android:summary="@string/saveonlines_summ" + android:title="@string/saveonlines_title" /> + android:title="@string/saveprefs_title" /> + android:title="@string/restoreprefs_title" /> + android:summary="@string/milkshake_summ" + android:title="@string/milkshake_title" /> - + + android:title="@string/dockbar_accent_title" /> + android:summary="@string/iconmanager_summ" + android:title="@string/iconmanager_title" />