Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ A simple Android app that checks whether your device has root access. Displays d
- Device info display (model, marketing name, Android version)
- Material 3 theming with dynamic colors
- Splash screen with custom exit animation
- Localized in English, German, and Arabic
- Localized in English, German, Arabic, and Russian

## Requirements

Expand Down Expand Up @@ -37,3 +37,4 @@ A simple Android app that checks whether your device has root access. Displays d

## Todo
* Magisk root check
* In-app language picker in the settings screen
2 changes: 1 addition & 1 deletion app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ android {
versionCode = 44
versionName = "v2.0vc$versionCode"
@Suppress("UnstableApiUsage")
androidResources.localeFilters += listOf("en", "ar", "de")
androidResources.localeFilters += listOf("en", "ar", "de", "ru")
buildConfigField("String", "TELEMETRY_DECK_APP_ID", "\"613251CD-B223-443A-9583-3A18586FAB55\"")
}
buildTypes {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,5 @@ import androidx.compose.ui.tooling.preview.Preview
@Preview(showBackground = true, locale = "en")
@Preview(showBackground = true, locale = "de")
@Preview(showBackground = true, locale = "ar")
@Preview(showBackground = true, locale = "ru")
annotation class PreviewLocales
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,15 @@ import androidx.compose.ui.tooling.preview.Preview
@Preview(name = "Phone - English", group = "Phone", showBackground = true, locale = "en", device = "spec:width=411dp,height=891dp")
@Preview(name = "Phone - German", group = "Phone", showBackground = true, locale = "de", device = "spec:width=411dp,height=891dp")
@Preview(name = "Phone - Arabic", group = "Phone", showBackground = true, locale = "ar", device = "spec:width=411dp,height=891dp")
@Preview(name = "Phone - Russian", group = "Phone", showBackground = true, locale = "ru", device = "spec:width=411dp,height=891dp")
// 7-inch Tablet
@Preview(name = "7-inch Tablet - English", group = "7-inch Tablet", showBackground = true, locale = "en", device = "spec:width=600dp,height=960dp,dpi=240")
@Preview(name = "7-inch Tablet - German", group = "7-inch Tablet", showBackground = true, locale = "de", device = "spec:width=600dp,height=960dp,dpi=240")
@Preview(name = "7-inch Tablet - Arabic", group = "7-inch Tablet", showBackground = true, locale = "ar", device = "spec:width=600dp,height=960dp,dpi=240")
@Preview(name = "7-inch Tablet - Russian", group = "7-inch Tablet", showBackground = true, locale = "ru", device = "spec:width=600dp,height=960dp,dpi=240")
// 10-inch Tablet
@Preview(name = "10-inch Tablet - English", group = "10-inch Tablet", showBackground = true, locale = "en", device = "spec:width=1280dp,height=800dp,dpi=240")
@Preview(name = "10-inch Tablet - German", group = "10-inch Tablet", showBackground = true, locale = "de", device = "spec:width=1280dp,height=800dp,dpi=240")
@Preview(name = "10-inch Tablet - Arabic", group = "10-inch Tablet", showBackground = true, locale = "ar", device = "spec:width=1280dp,height=800dp,dpi=240")
@Preview(name = "10-inch Tablet - Russian", group = "10-inch Tablet", showBackground = true, locale = "ru", device = "spec:width=1280dp,height=800dp,dpi=240")
annotation class PreviewPlayStoreListing
61 changes: 61 additions & 0 deletions app/src/main/res/values-ru/strings.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Basic Root Checker</string>

<!-- Main Strings-->
<string name="textView_Disclaimer"><![CDATA[Это приложение <b>НЕ</b> предоставит root-доступ устройству.<br>Оно лишь показывает, имеется ли root-доступ на устройстве.]]></string>
<string name="textView_checkForRoot">Нажмите кнопку «#» в правом нижнем углу, чтобы проверить наличие root-доступа</string>
<string name="rootAvailable">На устройстве есть root-доступ</string>
<string name="rootUnknown">Не удалось определить наличие root-доступа</string>
<string name="rootNotAvailable">На устройстве нет root-доступа</string>
<string name="action_licence">Лицензии</string>
<string name="action_about">О приложении</string>
<string name="action_settings">Настройки</string>
<string name="action_privacy_policy">Политика конфиденциальности</string>

<!-- Settings Strings -->
<string name="settings_telemetry_title">Отправлять анонимные данные об использовании</string>
<string name="settings_telemetry_description">Помогает улучшать приложение через TelemetryDeck. Изменения вступают в силу при следующем запуске приложения.</string>
<string name="settings_privacy_policy_description">Открыть политику конфиденциальности в браузере</string>
<string name="textViewAndroidVersion">Android</string>
<string name="string_your_device">Ваше устройство</string>
<string name="string_checking_for_root">Проверка root-доступа…</string>

<!-- About Strings -->
<string name="about_part1">Copyright 2026 &#169; iboalali\n\n
Это приложение НЕ предоставляет root-доступ.\n
Для работы требуется root-доступ — используйте на свой страх и риск.\n
Приложение не собирает никаких данных и личной информации.\n\n\n
Связаться со мной:</string>
<string name="about_visit_website">Посетить мой сайт</string>
<string name="about_not_affiliated">Это приложение не связано с topjohnwu и libsu и не одобрено ими</string>

<!-- Style Strings -->
<string name="content_description_check_for_root">Проверить root-доступ</string>
<string name="content_description_marketing_name">Маркетинговое название</string>
<string name="content_description_model_name">Название модели</string>
<string name="content_description_android_version">Версия Android</string>

<!-- Device Info Labels -->
<string name="label_device_name">Название устройства</string>
<string name="label_model">Модель</string>
<string name="label_android_version">Версия Android</string>
<string name="toast_content_copied">Скопировано</string>

<!-- In-app updates -->
<string name="update_available_title">Доступно обновление</string>
<string name="update_available_body">Новая версия приложения готова к загрузке.</string>
<string name="update_action_update">Обновить</string>
<string name="update_downloading">Загрузка обновления…</string>
<string name="update_progress_megabytes">%1$s / %2$s МБ</string>
<string name="update_downloaded_title">Обновление загружено</string>
<string name="update_action_install">Установить сейчас</string>
<string name="update_failed">Не удалось загрузить обновление. Повторная попытка будет выполнена автоматически.</string>
<string name="app_updated_snackbar">Приложение обновлено</string>

<!-- Other Apps -->
<string name="other_apps_title">Другие приложения</string>
<string name="other_apps_billboard_description">Это приложение помогает выводить крупный текст на экран и автоматически подбирает максимально возможный размер шрифта без обрезания текста.\n\nПодходит для совещаний — для голосования по теме числом или словом.</string>
<string name="other_apps_hide_notifications_description">Выберите постоянное уведомление, которое нужно скрыть, и оно будет оставаться скрытым, пока установлено это приложение.</string>

</resources>
1 change: 1 addition & 0 deletions app/src/main/res/xml/app_locales_config.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,5 @@
<locale android:name="en"/>
<locale android:name="de"/>
<locale android:name="ar"/>
<locale android:name="ru"/>
</locale-config>
30 changes: 30 additions & 0 deletions docs/russian-translation-notes.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# Russian Translation Notes

Reference notes documenting the choices made when adding the Russian (`ru`) localization in `app/src/main/res/values-ru/strings.xml`. Useful for future reviewers and for keeping subsequent string additions consistent.

## Translation choices worth flagging for review

- **Term: "root-доступ"** (Latin "root" + Cyrillic suffix) is used throughout. This is the standard Russian tech-press convention and matches how the app already presents the term in other locales. The alternative ("права суперпользователя") was rejected as inconsistent and overly literal.

- **Register: formal / impersonal.** Russian wording uses **"Ваше устройство"**, **"Нажмите"**, **"Выберите"** rather than the informal "ты" form (which the existing German and Arabic translations use). This was an explicit choice for a more professional tone.

- **Disclaimer phrasing is impersonal** ("Это приложение НЕ предоставит…") rather than addressing the user directly, which reads more professional in Russian than a literal translation of the English source.

- **`toast_content_copied` → "Скопировано".** This fixes a bug-by-omission in the existing `values-de` and `values-ar` files, where this string was left as the literal English "Content Copied". Russian translates it properly; consider back-porting fixes to the de/ar files.

- **`app_name` kept as "Basic Root Checker"** (Latin script). Both the German and Arabic files keep it in Latin; it is the marketed product name.

- **Brand / proper-noun preservation:** "TelemetryDeck", "topjohnwu", "libsu", "Android", "iboalali", and all URLs are kept verbatim.

- **"МБ"** is the standard Russian abbreviation for megabytes, used in `update_progress_megabytes`.

- **License texts (Apache 2.0, libsu notice, AndroidDeviceNames notice) were NOT translated** — they remain in English because the source XML marks them `translatable="false"`. This is intentional: legal text must stay verbatim, and translating them would also trigger Lint `ExtraTranslation` errors.

## Things preserved verbatim from the English source

These are not translation choices but are worth noting because they are easy to break in subsequent edits:

- `<![CDATA[…]]>` wrapper and `<b>` / `<br>` HTML tags inside `textView_Disclaimer`.
- `%1$s` / `%2$s` positional placeholders in `update_progress_megabytes` (consumed by the in-app update flow — order must not change).
- The `#` glyph reference in `textView_checkForRoot`, which refers to the on-screen FAB symbol.
- Escape sequences: `\n`, `\"`, `\'`, `&#169;`.