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
59 changes: 59 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
FROM ubuntu:22.04

# Set environment variables
ENV DEBIAN_FRONTEND=noninteractive \
JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64 \
ANDROID_HOME=/root/android-sdk \
PATH=$JAVA_HOME/bin:$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/platform-tools:$PATH

# Install dependencies
RUN apt-get update && apt-get install -y \
wget \
unzip \
git \
openjdk-17-jdk \
android-tools-adb \
android-tools-fastboot \
&& rm -rf /var/lib/apt/lists/*

# Create directories
RUN mkdir -p $ANDROID_HOME/cmdline-tools

# Download and install Android SDK
RUN cd /tmp && \
wget -q https://dl.google.com/android/repository/commandlinetools-linux-9477386_latest.zip && \
unzip -q commandlinetools-linux-9477386_latest.zip && \
mv cmdline-tools $ANDROID_HOME/cmdline-tools/latest && \
rm commandlinetools-linux-9477386_latest.zip

# Accept SDK licenses
RUN mkdir -p ~/.android && touch ~/.android/repositories.cfg && \
yes | sdkmanager --licenses

# Install SDK packages
RUN sdkmanager --install \
"platforms;android-34" \
"build-tools;34.0.0" \
"platform-tools" \
--sdk_root=$ANDROID_HOME

# Set working directory
WORKDIR /workspace

# Copy the project
COPY . .

# Make gradlew executable
RUN chmod +x android/gradlew

# Build the APK
RUN cd android && \
./gradlew assembleDebug

# Output the APK
RUN cp android/app/build/outputs/apk/debug/app-debug.apk /workspace/noop-debug.apk && \
echo "✅ APK built successfully!" && \
ls -lh /workspace/noop-debug.apk

# Default command
CMD ["/bin/bash"]
135 changes: 135 additions & 0 deletions RUSSIAN_LOCALIZATION_GUIDE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,135 @@
# Инструкция по тестированию русской локализации

## Быстрый старт

Этот документ описывает, как собрать и протестировать APK приложения NOOP с русской локализацией.

## Способ 1: Локальная сборка (Рекомендуется)

### Требования:
- JDK 17+
- Android SDK (API 34)
- Gradle 8.5
- Android-устройство или эмулятор с Android 8.0+

### Шаги:

1. **Клонируйте ветку с русской локализацией:**
```bash
git clone https://github.com/7781291/noop.git
cd noop
git checkout feat/russian-localization
```

2. **Перейдите в папку Android:**
```bash
cd android
```

3. **Создайте файл `local.properties` (если его нет):**
```bash
echo "sdk.dir=$HOME/Library/Android/sdk" > local.properties
```
Или на Windows:
```cmd
echo sdk.dir=%USERPROFILE%\AppData\Local\Android\sdk > local.properties
```

4. **Соберите Debug APK:**
```bash
./gradlew assembleDebug
```

5. **Найдите собранный APK:**
```
app/build/outputs/apk/debug/app-debug.apk
```

6. **Установите на устройство:**
```bash
./gradlew installDebug
```

Или вручную через ADB:
```bash
adb install app/build/outputs/apk/debug/app-debug.apk
```

## Способ 2: Использование Android Studio

1. Откройте папку `android/` в Android Studio
2. Выберите меню: **Build → Build Bundle(s) / APK(s) → Build APK(s)**
3. Подождите завершения сборки
4. APK будет в `android/app/build/outputs/apk/debug/`

## Тестирование русской локализации

После установки приложения:

1. **Измените язык системы на русский:**
- Откройте **Параметры → Язык и ввод → Языки**
- Выберите **Русский**

2. **Перезапустите приложение NOOP**

3. **Проверьте переводы:**
- ✅ Названия экранов (Сегодня, Интеллект, Прямой эфир и т.д.)
- ✅ Названия метрик (Восстановление, Нагрузка, Сон и т.д.)
- ✅ Единицы измерения (мс, уд/мин и т.д.)
- ✅ Текст навигации и кнопок
- ✅ Сообщения о данных

## Структура файла локализации

Русский перевод находится в:
```
android/app/src/main/res/values-ru/strings.xml
```

Английский оригинал:
```
android/app/src/main/res/values/strings.xml
```

## Что переведено

✅ **Названия экранов:** 20+ экранов
✅ **Метрики:** Recovery, Strain, Sleep, HRV, RHR, SpO₂ и другие
✅ **UI элементы:** Кнопки, навигация, метки
✅ **Сообщения:** Статус, уведомления, ошибки

## Возможные проблемы

### Проблема: `gradlew: Permission denied`
**Решение:**
```bash
chmod +x gradlew
```

### Проблема: `SDK location not found`
**Решение:** Создайте `local.properties` с правильным путем к SDK

### Проблема: `Java version mismatch`
**Решение:** Убедитесь, что используется JDK 17:
```bash
java -version
```

## Отправка отзыва

Если вы нашли ошибки в переводе или хотите добавить дополнительные строки:

1. Создайте Issue на GitHub
2. Описание проблемы + скриншот
3. Предложенный перевод

## Полезные ссылки

- [Android Localization Guide](https://developer.android.com/guide/topics/resources/localization)
- [NOOP Repository](https://github.com/7781291/noop)
- [Android Studio Setup](https://developer.android.com/studio)

---

**Веточка:** `feat/russian-localization`
**Статус:** Готово к тестированию ✅
125 changes: 125 additions & 0 deletions android/app/src/main/res/values-ru/strings.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">NOOP</string>

<!-- Navigation & Screen Titles -->
<string name="screen_today">Сегодня</string>
<string name="screen_intelligence">Интеллект</string>
<string name="screen_live">Прямой эфир</string>
<string name="screen_intervals">Интервалы</string>
<string name="screen_sleep">Сон</string>
<string name="screen_breathe">Дыхание</string>
<string name="screen_stress">Стресс</string>
<string name="screen_workouts">Тренировки</string>
<string name="screen_trends">Тренды</string>
<string name="screen_coach">Тренер</string>
<string name="screen_insights">Данные</string>
<string name="screen_explore">Исследование</string>
<string name="screen_compare">Сравнение</string>
<string name="screen_health">Здоровье</string>
<string name="screen_apple_health">Apple Health</string>
<string name="screen_automations">Автоматизация</string>
<string name="screen_data_sources">Источники данных</string>
<string name="screen_notifications">Уведомления</string>
<string name="screen_support">Поддержка</string>
<string name="screen_settings">Настройки</string>

<!-- Control Center / Today Screen -->
<string name="control_center_title">Центр управления</string>
<string name="control_center_subtitle">Ваш день во всех деталях</string>
<string name="at_a_glance">С первого взгляда</string>
<string name="todays_synthesis">Синтез дня</string>
<string name="key_metrics">Основные метрики</string>
<string name="today_label">Сегодня</string>
<string name="trend_14_day">Тренд за 14 дней</string>

<!-- Status Words -->
<string name="status_depleted">Истощено</string>
<string name="status_low">Низко</string>
<string name="status_steady">Стабильно</string>
<string name="status_primed">Готово</string>
<string name="status_peak">Пик</string>
<string name="status_no_data">Нет данных</string>

<!-- Metrics Labels -->
<string name="metric_recovery">Восстановление</string>
<string name="metric_strain">Нагрузка</string>
<string name="metric_day_strain">Дневная нагрузка</string>
<string name="metric_sleep">Сон</string>
<string name="metric_hrv">HRV</string>
<string name="metric_resting_hr">Пульс в покое</string>
<string name="metric_blood_oxygen">Кислород крови</string>
<string name="metric_respiratory">Дыхание</string>
<string name="metric_steps">Шаги</string>
<string name="metric_weight">Вес</string>
<string name="metric_calories">Калории</string>

<!-- Metric Values & Units -->
<string name="of_21">из 21</string>
<string name="ms">мс</string>
<string name="bpm">уд/мин</string>
<string name="spo2">SpO₂</string>
<string name="rpm">об/мин</string>
<string name="eff_percent">%% эфф</string>
<string name="today_label_metric">сегодня</string>
<string name="latest_label">последний</string>
<string name="active_label">активно</string>

<!-- Greeting Words -->
<string name="good_morning">Доброе утро</string>
<string name="good_afternoon">Добрый день</string>
<string name="good_evening">Добрый вечер</string>

<!-- Data Messages -->
<string name="live_now_building">Прямой эфир. Ваши результаты строятся.</string>
<string name="live_building_detail">Ваш живой пульс работает от браслета, а восстановление, нагрузка и сон формируются из него в течение следующих нескольких ночей носки, совершенствуясь по мере обучения вашему базовому уровню. Хотите свою полную историю мгновенно? Импортируйте экспорт WHOOP в разделе "Источники данных" и он восстановится примерно за минуту.</string>
<string name="no_metrics_yet">Метрик еще нет. Синхронизируйте браслет для начала.</string>
<string name="recovery_low">Восстановление низко</string>
<string name="recovery_steady">Восстановление стабильно</string>
<string name="recovery_strong">Восстановление сильное</string>
<string name="sleep_short">но сон был короток</string>
<string name="sleep_consistent">и сон был стабилен</string>

<!-- Navigation Drawer Sections -->
<string name="drawer_overview">Обзор</string>
<string name="drawer_live">Прямой эфир</string>
<string name="drawer_recovery">Восстановление</string>
<string name="drawer_activity">Активность</string>
<string name="drawer_insight">Данные</string>
<string name="drawer_health">Здоровье</string>
<string name="drawer_system">Система</string>
<string name="app_strand">Strand</string>
<string name="app_instrument">Инструмент</string>
<string name="demo_label">ДЕМО</string>

<!-- Buttons & Actions -->
<string name="support_noop">Поддержать NOOP</string>
<string name="open_navigation">Открыть навигацию</string>
<string name="coming_soon">Скоро</string>
<string name="coming_soon_text">Этот раздел уже в пути.</string>

<!-- Permissions -->
<string name="permission_ble">Разрешение Bluetooth</string>
<string name="permission_location">Разрешение на определение местоположения</string>
<string name="permission_health">Разрешение на доступ к данным здоровья</string>

<!-- Connection States -->
<string name="connected">Подключено</string>
<string name="disconnected">Отключено</string>
<string name="connecting">Подключение...</string>
<string name="scanning">Сканирование...</string>

<!-- Illness Banner -->
<string name="illness_alert">Предупреждение о здоровье</string>

<!-- General UI -->
<string name="loading">Загрузка...</string>
<string name="error">Ошибка</string>
<string name="retry">Повторить</string>
<string name="cancel">Отмена</string>
<string name="save">Сохранить</string>
<string name="delete">Удалить</string>
<string name="close">Закрыть</string>
<string name="settings">Настройки</string>
<string name="about">О приложении</string>
</resources>
42 changes: 42 additions & 0 deletions build-apk.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
#!/bin/bash
# Build script for NOOP Android APK
# This script builds a debug APK for testing Russian localization

set -e

echo "🚀 Building NOOP Android APK..."
echo "================================"

# Check if we're in the right directory
if [ ! -f "android/gradlew" ]; then
echo "❌ Error: gradlew not found. Run this script from the NOOP root directory."
exit 1
fi

# Make gradlew executable
chmod +x android/gradlew

# Navigate to android directory
cd android

# Build debug APK
echo "📦 Building debug APK..."
./gradlew assembleDebug

# Check if build was successful
if [ -f "app/build/outputs/apk/debug/app-debug.apk" ]; then
echo ""
echo "✅ Build successful!"
echo "📍 APK location: $(pwd)/app/build/outputs/apk/debug/app-debug.apk"
echo ""
echo "📱 To install on device:"
echo " adb install app/build/outputs/apk/debug/app-debug.apk"
echo ""
echo "🌐 Test Russian localization:"
echo " 1. Change Android system language to Russian"
echo " 2. Restart NOOP app"
echo " 3. Verify all translations"
else
echo "❌ Build failed. Check the error messages above."
exit 1
fi