diff --git a/README.md b/README.md
index 46ae54e5..4184b2bd 100644
--- a/README.md
+++ b/README.md
@@ -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
@@ -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
diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index c8b3a5d4..ad4a52ac 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -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 {
diff --git a/app/src/main/java/com/iboalali/basicrootchecker/util/PreviewLocales.kt b/app/src/main/java/com/iboalali/basicrootchecker/util/PreviewLocales.kt
index 4d4a3769..f1e3fc94 100644
--- a/app/src/main/java/com/iboalali/basicrootchecker/util/PreviewLocales.kt
+++ b/app/src/main/java/com/iboalali/basicrootchecker/util/PreviewLocales.kt
@@ -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
\ No newline at end of file
diff --git a/app/src/main/java/com/iboalali/basicrootchecker/util/PreviewPlayStoreListing.kt b/app/src/main/java/com/iboalali/basicrootchecker/util/PreviewPlayStoreListing.kt
index bb6d3aa9..faa74dfb 100644
--- a/app/src/main/java/com/iboalali/basicrootchecker/util/PreviewPlayStoreListing.kt
+++ b/app/src/main/java/com/iboalali/basicrootchecker/util/PreviewPlayStoreListing.kt
@@ -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
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
new file mode 100644
index 00000000..14f6b63a
--- /dev/null
+++ b/app/src/main/res/values-ru/strings.xml
@@ -0,0 +1,61 @@
+
+
+ Basic Root Checker
+
+
+ НЕ предоставит root-доступ устройству.
Оно лишь показывает, имеется ли root-доступ на устройстве.]]>
+ Нажмите кнопку «#» в правом нижнем углу, чтобы проверить наличие root-доступа
+ На устройстве есть root-доступ
+ Не удалось определить наличие root-доступа
+ На устройстве нет root-доступа
+ Лицензии
+ О приложении
+ Настройки
+ Политика конфиденциальности
+
+
+ Отправлять анонимные данные об использовании
+ Помогает улучшать приложение через TelemetryDeck. Изменения вступают в силу при следующем запуске приложения.
+ Открыть политику конфиденциальности в браузере
+ Android
+ Ваше устройство
+ Проверка root-доступа…
+
+
+ Copyright 2026 © iboalali\n\n
+ Это приложение НЕ предоставляет root-доступ.\n
+ Для работы требуется root-доступ — используйте на свой страх и риск.\n
+ Приложение не собирает никаких данных и личной информации.\n\n\n
+ Связаться со мной:
+ Посетить мой сайт
+ Это приложение не связано с topjohnwu и libsu и не одобрено ими
+
+
+ Проверить root-доступ
+ Маркетинговое название
+ Название модели
+ Версия Android
+
+
+ Название устройства
+ Модель
+ Версия Android
+ Скопировано
+
+
+ Доступно обновление
+ Новая версия приложения готова к загрузке.
+ Обновить
+ Загрузка обновления…
+ %1$s / %2$s МБ
+ Обновление загружено
+ Установить сейчас
+ Не удалось загрузить обновление. Повторная попытка будет выполнена автоматически.
+ Приложение обновлено
+
+
+ Другие приложения
+ Это приложение помогает выводить крупный текст на экран и автоматически подбирает максимально возможный размер шрифта без обрезания текста.\n\nПодходит для совещаний — для голосования по теме числом или словом.
+ Выберите постоянное уведомление, которое нужно скрыть, и оно будет оставаться скрытым, пока установлено это приложение.
+
+
diff --git a/app/src/main/res/xml/app_locales_config.xml b/app/src/main/res/xml/app_locales_config.xml
index d8db341e..b0acf51b 100644
--- a/app/src/main/res/xml/app_locales_config.xml
+++ b/app/src/main/res/xml/app_locales_config.xml
@@ -3,4 +3,5 @@
+
\ No newline at end of file
diff --git a/docs/russian-translation-notes.md b/docs/russian-translation-notes.md
new file mode 100644
index 00000000..232d7332
--- /dev/null
+++ b/docs/russian-translation-notes.md
@@ -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:
+
+- `` wrapper and `` / `
` 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`, `\"`, `\'`, `©`.