Merge pull request #42 from yazmorukyaz/hindi (Add Hindi exercise instructions)

Resolved README.md conflict with #34: kept both the instructions.hi row and
the instruction_steps.<lang> row (extended to include hi).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Hasan Emir Yıldırım
2026-07-09 20:54:12 +03:00
co-authored by Claude Opus 4.8
4 changed files with 13039 additions and 1340 deletions
+13 -8
View File
@@ -11,12 +11,12 @@
<img src="videos/0334-DsgkuIt.gif" width="120" alt="dumbbell lateral raise" />
</p>
**A comprehensive, ready-to-use fitness exercise dataset with 1,324 exercises — each with an animation GIF, 180×180 thumbnail image, category, body-part, equipment, target and muscle-group data, and step-by-step instructions in 6 languages (English, Spanish, Italian, Turkish, Russian, Chinese).**
**A comprehensive, ready-to-use fitness exercise dataset with 1,324 exercises — each with an animation GIF, 180×180 thumbnail image, category, body-part, equipment, target and muscle-group data, and step-by-step instructions in 7 languages (English, Spanish, Italian, Turkish, Russian, Chinese, Hindi).**
[![Exercises](https://img.shields.io/badge/Exercises-1324-blue?style=flat-square)](data/exercises.json)
[![Animation GIFs](https://img.shields.io/badge/Animation%20GIFs-1324-brightgreen?style=flat-square)](videos/)
[![Thumbnails](https://img.shields.io/badge/Thumbnails-1324-orange?style=flat-square)](images/)
[![Languages](https://img.shields.io/badge/Languages-6-green?style=flat-square)](#-overview)
[![Languages](https://img.shields.io/badge/Languages-7-green?style=flat-square)](#-overview)
[![Mobile App](https://img.shields.io/badge/App-LogPress-111111?style=flat-square&logo=react)](https://github.com/hasaneyldrm/logpress-public)
[![License](https://img.shields.io/badge/License-MIT%20%2B%20media%20terms-blue?style=flat-square)](LICENSE)
@@ -32,7 +32,7 @@
- 1,324 exercises with category, body-part, equipment, target and muscle-group data
- an animation GIF + 180×180 thumbnail for every exercise (media © [Gym visual](https://gymvisual.com/) — see [License](#-license--use))
- step-by-step instructions in 6 languages (🇬🇧 English, 🇪🇸 Spanish, 🇮🇹 Italian, 🇹🇷 Turkish, 🇷🇺 Russian, 🇨🇳 Chinese)
- step-by-step instructions in 7 languages (🇬🇧 English, 🇪🇸 Spanish, 🇮🇹 Italian, 🇹🇷 Turkish, 🇷🇺 Russian, 🇨🇳 Chinese, 🇮🇳 Hindi)
- the interactive browser (`index.html`) and developer setup guide (`setup.html`)
---
@@ -71,7 +71,7 @@ Each exercise entry contains:
| Muscle Group | Supporting / synergist muscles |
| Equipment | Equipment required (or `body weight` for bodyweight) |
| Instructions | Step-by-step instructions for each exercise |
| Available Languages | 🇬🇧 English · 🇪🇸 Spanish · 🇮🇹 Italian · 🇹🇷 Turkish · 🇷🇺 Russian · 🇨🇳 Chinese |
| Available Languages | 🇬🇧 English · 🇪🇸 Spanish · 🇮🇹 Italian · 🇹🇷 Turkish · 🇷🇺 Russian · 🇨🇳 Chinese · 🇮🇳 Hindi |
| Media | 180×180 thumbnail (`image`) + animation GIF (`gif_url`) per exercise — media © Gym visual, see [License](#-license--use) |
---
@@ -88,7 +88,7 @@ A fully client-side exercise explorer with:
- Live search across all 1,324 exercises
- Filter by category, equipment, and target muscle
- Infinite scroll grid
- Click any card to see full details and instructions in English, Spanish, Italian, Turkish, Russian, or Chinese
- Click any card to see full details and instructions in English, Spanish, Italian, Turkish, Russian, Chinese, or Hindi
### `setup.html` — Developer Setup Guide
@@ -131,7 +131,7 @@ exercises-dataset/
| Metric | Count |
|---|---|
| Total Exercises | **1,324** |
| Instruction Languages | **6** |
| Instruction Languages | **7** |
### Exercises by Body Part
@@ -186,7 +186,8 @@ Each record in `data/exercises.json` follows this structure. A machine-readable
| `instructions.tr` | `string` | Full step-by-step instructions in Turkish |
| `instructions.ru` | `string` | Full step-by-step instructions in Russian |
| `instructions.zh` | `string` | Full step-by-step instructions in Chinese |
| `instruction_steps.<lang>` | `array[string]` | Same instructions split into an ordered array of steps, per language (`en`, `es`, `it`, `tr`, `ru`, `zh`) |
| `instructions.hi` | `string` | Full step-by-step instructions in Hindi |
| `instruction_steps.<lang>` | `array[string]` | Same instructions split into an ordered array of steps, per language (`en`, `es`, `it`, `tr`, `ru`, `zh`, `hi`) |
| `muscle_group` | `string` | Primary synergist muscle group |
| `secondary_muscles` | `array[string]` | Additional muscles involved |
| `target` | `string` | Primary target muscle (e.g. `"biceps"`, `"pectoralis major"`) |
@@ -211,7 +212,8 @@ Each record in `data/exercises.json` follows this structure. A machine-readable
"it": "Sdraiati sulla schiena con le ginocchia piegate e i piedi appoggiati a terra. ...",
"tr": "Sırt üstü yatın, dizlerinizi bükün ve ayaklarınızı yere düz koyun. ...",
"ru": "Лягте на спину, согните колени и поставьте ступни на землю. ...",
"zh": "平躺,膝盖弯曲,双脚平放在地上。..."
"zh": "平躺,膝盖弯曲,双脚平放在地上。...",
"hi": "अपने घुटनों को मोड़कर और पैरों को ज़मीन पर सपाट रखते हुए अपनी पीठ के बल लेट जाएँ।..."
},
"muscle_group": "hip flexors",
"secondary_muscles": ["hip flexors", "lower back"],
@@ -326,6 +328,7 @@ print(ex["instructions"]["it"]) # Italian
print(ex["instructions"]["tr"]) # Turkish
print(ex["instructions"]["ru"]) # Russian
print(ex["instructions"]["zh"]) # Chinese
print(ex["instructions"]["hi"]) # Hindi
```
### Python — Load with Pandas
@@ -374,6 +377,7 @@ console.log(ex.instructions.it); // Italian
console.log(ex.instructions.tr); // Turkish
console.log(ex.instructions.ru); // Russian
console.log(ex.instructions.zh); // Chinese
console.log(ex.instructions.hi); // Hindi
```
### TypeScript — Type-safe Usage
@@ -392,6 +396,7 @@ interface Exercise {
tr: string;
ru: string;
zh: string;
hi: string;
};
muscle_group: string;
secondary_muscles: string[];
+13007 -1325
View File
File diff suppressed because it is too large Load Diff
+11 -5
View File
File diff suppressed because one or more lines are too long
+8 -2
View File
@@ -748,6 +748,7 @@ const DB_SQL = {
instructions_tr NVARCHAR(MAX),
instructions_ru NVARCHAR(MAX),
instructions_zh NVARCHAR(MAX),
instructions_hi NVARCHAR(MAX),
muscle_group NVARCHAR(100),
secondary_muscles NVARCHAR(MAX), -- JSON array stored as string
target NVARCHAR(100),
@@ -767,6 +768,7 @@ const DB_SQL = {
instructions_tr TEXT,
instructions_ru TEXT,
instructions_zh TEXT,
instructions_hi TEXT,
muscle_group VARCHAR(100),
secondary_muscles JSONB,
target VARCHAR(100),
@@ -786,6 +788,7 @@ const DB_SQL = {
instructions_tr TEXT,
instructions_ru TEXT,
instructions_zh TEXT,
instructions_hi TEXT,
muscle_group VARCHAR(100),
secondary_muscles JSON,
target VARCHAR(100),
@@ -805,6 +808,7 @@ const DB_SQL = {
instructions_tr TEXT,
instructions_ru TEXT,
instructions_zh TEXT,
instructions_hi TEXT,
muscle_group TEXT,
secondary_muscles TEXT, -- JSON array stored as string
target TEXT,
@@ -1389,7 +1393,7 @@ function buildLlmPrompt(fwKey, dbKey) {
## Dataset Overview
- 1,324 fitness exercises
- Fields: id (string, e.g. "0001"), name, category, body_part, equipment, instructions_en (full text), instructions_es (Spanish text), instructions_it (Italian text), instructions_tr (Turkish text), instructions_ru (Russian text), instructions_zh (Chinese text), muscle_group, secondary_muscles (JSON array of strings), target, image (relative path like "images/0001.jpg"), gif_url (relative path like "videos/0001.gif"), created_at
- Fields: id (string, e.g. "0001"), name, category, body_part, equipment, instructions_en (full text), instructions_es (Spanish text), instructions_it (Italian text), instructions_tr (Turkish text), instructions_ru (Russian text), instructions_zh (Chinese text), instructions_hi (Hindi text), muscle_group, secondary_muscles (JSON array of strings), target, image (relative path like "images/0001.jpg"), gif_url (relative path like "videos/0001.gif"), created_at
## Database Schema (${db.name})
\`\`\`sql
@@ -1517,6 +1521,7 @@ function buildInserts(exercises, db) {
const instrTr = ex.instructions && ex.instructions.tr ? ex.instructions.tr : '';
const instrRu = ex.instructions && ex.instructions.ru ? ex.instructions.ru : '';
const instrZh = ex.instructions && ex.instructions.zh ? ex.instructions.zh : '';
const instrHi = ex.instructions && ex.instructions.hi ? ex.instructions.hi : '';
const vals = [
escStr(ex.id, db),
@@ -1530,6 +1535,7 @@ function buildInserts(exercises, db) {
escStr(instrTr, db),
escStr(instrRu, db),
escStr(instrZh, db),
escStr(instrHi, db),
escStr(ex.muscle_group, db),
escStr(muscles, db),
escStr(ex.target, db),
@@ -1538,7 +1544,7 @@ function buildInserts(exercises, db) {
escStr(ex.created_at, db),
].join(', ');
lines.push(`INSERT INTO exercises (id, name, category, body_part, equipment, instructions_en, instructions_es, instructions_it, instructions_tr, instructions_ru, instructions_zh, muscle_group, secondary_muscles, target, image, gif_url, created_at) VALUES (${vals});`);
lines.push(`INSERT INTO exercises (id, name, category, body_part, equipment, instructions_en, instructions_es, instructions_it, instructions_tr, instructions_ru, instructions_zh, instructions_hi, muscle_group, secondary_muscles, target, image, gif_url, created_at) VALUES (${vals});`);
if (db === 'mssql' && (i + 1) % 50 === 0 && i + 1 < exercises.length) {
lines.push('GO');