.env.example DELETED
@@ -1,12 +0,0 @@
1
- # Hugging Face Spaces Environment Variables
2
- # Copy this file to .env for local testing
3
- # On HF Spaces, set these as Space secrets
4
-
5
- # Full JSON content of config.json (paste the entire JSON as one line or use multiline)
6
- HF_CONFIG_JSON='{"google_sheets":{"enabled":true,"sync_interval_minutes":5,"credentials_file":"credentials.json","spreadsheets":[{"id":"YOUR_SPREADSHEET_ID_1","sheet_name":"processed_dialects","output_file":"sheets_output/processed_dialects.csv"},{"id":"YOUR_SPREADSHEET_ID_2","sheet_name":"digiwords_grouped","output_file":"sheets_output/digiwords_grouped.csv"}]},"file_watcher":{"enabled":true,"watch_directory":"sheets_output","file_patterns":["*.csv"]},"output":{"json_directory":"data/processed"}}'
7
-
8
- # Full JSON content of credentials.json (paste the entire service account JSON)
9
- HF_CREDENTIALS_JSON='{"type":"service_account","project_id":"your-project","private_key_id":"...","private_key":"-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----\n","client_email":"...@...iam.gserviceaccount.com","client_id":"...","auth_uri":"https://accounts.google.com/o/oauth2/auth","token_uri":"https://oauth2.googleapis.com/token","auth_provider_x509_cert_url":"https://www.googleapis.com/oauth2/v1/certs","client_x509_cert_url":"..."}'
10
-
11
- # Optional: Port for local development (HF Spaces uses 7860 by default)
12
- PORT=7860
 
 
 
 
 
 
 
 
 
 
 
 
 
.gitignore DELETED
@@ -1,48 +0,0 @@
1
- # Python
2
- __pycache__/
3
- *.py[cod]
4
- *$py.class
5
- *.so
6
- .Python
7
- env/
8
- venv/
9
- ENV/
10
- build/
11
- develop-eggs/
12
- dist/
13
- downloads/
14
- eggs/
15
- .eggs/
16
- lib/
17
- lib64/
18
- parts/
19
- sdist/
20
- var/
21
- wheels/
22
- *.egg-info/
23
- .installed.cfg
24
- *.egg
25
-
26
- # Google Credentials (IMPORTANT: Never commit these!)
27
- credentials.json
28
- config.json
29
- token.json
30
- *.json.backup
31
-
32
- # Environment variables
33
- .env
34
- .env.local
35
-
36
- # IDE
37
- .vscode/
38
- .idea/
39
- *.swp
40
- *.swo
41
- *~
42
-
43
- # OS
44
- .DS_Store
45
- Thumbs.db
46
-
47
- # Logs
48
- *.log
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Dockerfile DELETED
@@ -1,30 +0,0 @@
1
- FROM python:3.11-slim
2
-
3
- # Set working directory
4
- WORKDIR /app
5
-
6
- # Install system dependencies
7
- RUN apt-get update && apt-get install -y \
8
- git \
9
- && rm -rf /var/lib/apt/lists/*
10
-
11
- # Copy requirements first for better caching
12
- COPY requirements.txt .
13
-
14
- # Install Python dependencies
15
- RUN pip install --no-cache-dir -r requirements.txt
16
-
17
- # Copy application files
18
- COPY . .
19
-
20
- # Create directories for output
21
- RUN mkdir -p sheets_output data/processed
22
-
23
- # Expose port 7860 (HF Spaces default)
24
- EXPOSE 7860
25
-
26
- # Set environment variable for port
27
- ENV PORT=7860
28
-
29
- # Run the application
30
- CMD ["python", "app.py"]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
QUICKSTART.md DELETED
@@ -1,109 +0,0 @@
1
- # Quick Start Guide
2
-
3
- ## For Local Development
4
-
5
- ### 1. Install Dependencies
6
-
7
- ```bash
8
- cd /home/kashikuldeep/Desktop/dialect-map
9
-
10
- # Install Python dependencies
11
- pip install -r requirements.txt
12
- # OR if you have externally managed Python:
13
- pipx install -r requirements.txt
14
- ```
15
-
16
- ### 2. Configure Secrets
17
-
18
- Choose ONE of these methods:
19
-
20
- #### Method A: Using actual config files (easier for local dev)
21
-
22
- ```bash
23
- # Copy templates
24
- cp config.json.example config.json
25
- cp credentials.json.example credentials.json
26
-
27
- # Edit with your actual Google Cloud credentials
28
- nano config.json # Update spreadsheet IDs
29
- nano credentials.json # Paste your service account JSON
30
- ```
31
-
32
- #### Method B: Using environment variables (simulates HF Spaces)
33
-
34
- ```bash
35
- # Copy .env template
36
- cp .env.example .env
37
-
38
- # Edit .env with your actual JSON content
39
- nano .env
40
-
41
- # Set your actual spreadsheet IDs and credentials
42
- ```
43
-
44
- ### 3. Run the Application
45
-
46
- ```bash
47
- # Start the app
48
- python3 app.py
49
-
50
- # Open your browser to:
51
- # http://localhost:7860/index.html
52
- ```
53
-
54
- The app will:
55
- - ✅ Load secrets from environment or files
56
- - ✅ Start Google Sheets sync automation (every 5 minutes)
57
- - ✅ Serve the interactive map on port 7860
58
-
59
- ---
60
-
61
- ## For Hugging Face Spaces Deployment
62
-
63
- See **[SECRETS_SETUP.md](SECRETS_SETUP.md)** for complete deployment instructions.
64
-
65
- **Quick summary:**
66
- 1. Create a new Space on Hugging Face
67
- 2. Add two secrets in Space settings:
68
- - `HF_CONFIG_JSON` - your entire config.json content
69
- - `HF_CREDENTIALS_JSON` - your entire credentials.json content
70
- 3. Push your code to the Space
71
- 4. Access your live app!
72
-
73
- ---
74
-
75
- ## Files You Need
76
-
77
- | File | Purpose | How to Get |
78
- |------|---------|------------|
79
- | `config.json` | App configuration with spreadsheet IDs | Copy from `config.json.example` and edit |
80
- | `credentials.json` | Google service account credentials | Download from Google Cloud Console |
81
-
82
- **Important:** These files are in `.gitignore` - never commit them!
83
-
84
- ---
85
-
86
- ## Troubleshooting
87
-
88
- **"ModuleNotFoundError: No module named 'google'"**
89
- - Install dependencies: `pip install -r requirements.txt`
90
-
91
- **"HF_CONFIG_JSON not found"**
92
- - You need to either:
93
- - Create `config.json` file locally, OR
94
- - Set `HF_CONFIG_JSON` environment variable
95
-
96
- **"Credentials file not found"**
97
- - Follow [SECRETS_SETUP.md](SECRETS_SETUP.md) steps 1.1-1.4 to get credentials
98
-
99
- ---
100
-
101
- ## What Gets Created
102
-
103
- When you run `app.py`:
104
- - `config.json` - Created from `HF_CONFIG_JSON` env var (if set)
105
- - `credentials.json` - Created from `HF_CREDENTIALS_JSON` env var (if set)
106
- - `sheets_output/*.csv` - Downloaded from Google Sheets
107
- - `data/processed/*.json` - Converted from CSV files
108
-
109
- All of these are in `.gitignore` and safe to regenerate.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
README.md CHANGED
@@ -1,296 +1,11 @@
1
  ---
2
- title: Telugu Dialect Map
3
- emoji: 🗺️
4
- colorFrom: blue
5
  colorTo: purple
6
- sdk: docker
7
  pinned: false
8
- license: mit
9
  ---
10
 
11
- # Telugu Dialect Map
12
-
13
- **Interactive web-based visualization of Telugu dialect words across Telangana and Andhra Pradesh districts.**
14
-
15
- ## 🎯 Features
16
-
17
- - **48 Districts**: 33 Telangana + 15 Andhra Pradesh districts
18
- - **Dynamic Data Loading**: Automatically loads data from JSON sources
19
- - **Interactive Map**: Click districts to explore local vocabulary, meanings, and sources
20
- - **Rich Content**: 3000+ verified dialect terms from crowdsourced and JSONL data
21
- - **Zero Build Required**: Pure static site with automatic data loading
22
- - **Google Sheets Integration**: Automated synchronization with Google Sheets
23
-
24
- ## 🚀 Deployment Options
25
-
26
- ### Option 1: Hugging Face Spaces (Recommended for Public Access)
27
-
28
- Deploy to Hugging Face Spaces with continuous automation:
29
-
30
- 1. **Create a Space** on [Hugging Face](https://huggingface.co/spaces)
31
- 2. **Configure secrets** for `config.json` and `credentials.json`
32
- 3. **Push your code** to the Space repository
33
- 4. **Access your app** at `https://huggingface.co/spaces/YOUR_USERNAME/YOUR_SPACE`
34
-
35
- 📖 **[Complete HF Spaces Setup Guide →](SECRETS_SETUP.md)**
36
-
37
- ### Option 2: Local Development
38
-
39
- ## 🚀 How to Run
40
-
41
- ### **Complete Setup (First Time)**
42
-
43
- ```bash
44
- # 1. Navigate to project directory
45
- cd /home/kashikuldeep/Desktop/swechaworkspace/dilacet-map/indian-dialects-maps
46
-
47
- # 2. Activate virtual environment
48
- source venv/bin/activate
49
-
50
- # 3. Start automation (syncs Google Sheets every 5 minutes)
51
- python scripts/automation_runner.py &
52
-
53
- # 4. Start web server (in new terminal or background)
54
- python -m http.server 8080 &
55
-
56
- # 5. Open in browser
57
- # Navigate to: http://localhost:8080/
58
- ```
59
-
60
- ### **Quick Run (After First Time)**
61
-
62
- ```bash
63
- # Activate virtual environment
64
- source venv/bin/activate
65
-
66
- # Start both services
67
- python scripts/automation_runner.py &
68
- python -m http.server 8080 &
69
-
70
- # Open: http://localhost:8080/
71
- ```
72
-
73
- ### **Stop Services**
74
-
75
- ```bash
76
- # Press Ctrl+C in the terminals, or:
77
- pkill -f automation_runner
78
- pkill -f "http.server 8080"
79
- ```
80
-
81
- **Important:** Use `http://localhost:8080/` not `file://` URLs (browser security blocks JSON loading from file://)
82
-
83
- ---
84
-
85
- ## 🎯 What You'll See
86
-
87
- 1. **Automation Console**: Shows sync status every 5 minutes
88
- 2. **Web Interface**: Interactive map with 48 districts (33 Telangana + 15 Andhra Pradesh)
89
- 3. **Auto-Updates**: Edit Google Sheets → Changes appear within 5 minutes!
90
-
91
- ## 🤖 Automated Data Updates
92
-
93
- The project includes **automated synchronization** from Google Sheets:
94
-
95
- - **File Watcher**: Automatically converts CSV → JSON when files change
96
- - **Google Sheets Sync**: Downloads sheet data every 5 minutes
97
- - **Zero Manual Work**: Update your Google Sheet and changes appear automatically!
98
-
99
- ### Configuration
100
-
101
- Your automation is already configured for:
102
- - **Processed Dialects Sheet**: 901 rows
103
- - **Digiwords Sheet**: 178 rows
104
- - **Sync Interval**: Every 5 minutes
105
-
106
- To modify settings, edit `config.json`:
107
- ```json
108
- {
109
- "google_sheets": {
110
- "enabled": true,
111
- "sync_interval_minutes": 5,
112
- "spreadsheets": [...]
113
- }
114
- }
115
- ```
116
-
117
- 📖 **[Full Automation Setup Guide →](AUTOMATION_SETUP.md)**
118
-
119
- ## 📂 Project Structure
120
-
121
- ```
122
- indian-dialects-maps/
123
- ├── index.html # Main visualization (open this via http server)
124
- ├── data/
125
- │ └── processed/
126
- │ ├── processed_dialects.json # JSONL-processed dialect data
127
- │ └── digiwords_grouped.json # Crowdsourced dialect data
128
- ├── sheets_output/ # CSV files (auto-converted to JSON)
129
- │ ├── processed_dialects.csv
130
- │ └── digiwords_grouped.csv
131
- ├── scripts/ # Automation scripts (NEW!)
132
- │ ├── csv_to_json.py # CSV → JSON converter
133
- │ ├── sheets_sync.py # Google Sheets downloader
134
- │ ├── file_watcher.py # Auto-conversion on file changes
135
- │ └── automation_runner.py # Main automation orchestrator
136
- ├── config.json # Automation configuration
137
- ├── requirements.txt # Python dependencies
138
- ├── AUTOMATION_SETUP.md # Detailed setup guide
139
- └── README.md
140
- ```
141
-
142
- ## 🔄 How It Works
143
-
144
- ### Manual Mode (Original)
145
- 1. **Load `index.html`**: Contains hardcoded data for 33 Telangana districts
146
- 2. **Fetch `processed_dialects.json`**: Enhances/adds districts from JSONL data
147
- 3. **Fetch `digiwords_grouped.json`**:
148
- - Merges additional words into Telangana districts
149
- - Automatically adds 15 Andhra Pradesh districts with coordinates
150
- 4. **Render**: All districts appear on the map with merged data
151
-
152
- ### Automated Mode (NEW!)
153
- 1. **Google Sheets**: Update your dialect data in Google Sheets
154
- 2. **Auto-Sync**: Script downloads sheets as CSV (every 5 min)
155
- 3. **File Watcher**: Detects CSV changes
156
- 4. **Auto-Convert**: CSV files → JSON format
157
- 5. **Browser**: Refresh to see updates on the map!
158
-
159
- **Flow:**
160
- ```
161
- Google Sheet → CSV (sheets_output/) → JSON (data/processed/) → Browser (index.html)
162
- ↓ ↓ ↓
163
- Manual Edit File Watcher Auto-Refresh
164
- ```
165
-
166
- **Smart Merging:**
167
- - Existing districts → Appends new words
168
- - New AP districts → Creates markers automatically
169
- - Graceful fallback if JSON files are missing
170
-
171
- ## 📊 Current Data Coverage
172
-
173
- | State | Districts | Words | Sources |
174
- |-------|-----------|-------|---------|
175
- | **Telangana** | 33 | 2000+ | Hardcoded + JSONL + Digiwords |
176
- | **Andhra Pradesh** | 15 | 1000+ | Digiwords (crowdsourced) |
177
- | **Total** | **48** | **3000+** | Multiple sources |
178
-
179
- ### Andhra Pradesh Districts:
180
- Anantapur, Annamayya, Chittoor, East Godavari, Eluru, Kadapa, Kurnool, Nandyal, Ongole, Tirupati, Srikakulam, Visakhapatnam, Vizianagaram, West Godavari, Rayalaseema
181
-
182
- ## 🎨 Adding New Data
183
-
184
- ### Update Existing JSON Files
185
-
186
- **Edit `data/processed/digiwords_grouped.json`:**
187
- ```json
188
- {
189
- "Telangana": {
190
- "YourDistrict": [
191
- {"t": "తెలుగుపదం", "m": "meaning", "s": "Crowd"}
192
- ]
193
- },
194
- "Andhra Pradesh": {
195
- "YourDistrict": [
196
- {"t": "తెలుగుపదం", "m": "meaning", "s": "Crowd"}
197
- ]
198
- }
199
- }
200
- ```
201
-
202
- **Edit `data/processed/processed_dialects.json`:**
203
- ```json
204
- [
205
- {
206
- "name": "YourDistrict",
207
- "region": "Region Name",
208
- "words": [
209
- {"t": "తెలుగుపదం", "m": "meaning", "s": "Source"}
210
- ]
211
- }
212
- ]
213
- ```
214
-
215
- Then refresh the browser!
216
-
217
- ### Add New AP District Coordinates
218
-
219
- If adding a new Andhra Pradesh district, update `index.html`:
220
-
221
- ```javascript
222
- const AP_COORDINATES = {
223
- "YourDistrict": {
224
- lat: 00.0000,
225
- lng: 00.0000,
226
- region: "Region Name",
227
- history: "Historical context..."
228
- },
229
- // ...
230
- };
231
- ```
232
-
233
- ## 🛠️ Technical Stack
234
-
235
- - **Frontend**: HTML5, Vanilla JavaScript, Leaflet.js
236
- - **Data Format**: JSON (pre-processed)
237
- - **Map Library**: Leaflet with CartoDB basemap
238
- - **Server**: Any HTTP server (Python, Node, etc.)
239
- - **No Build Step**: Pure static site
240
-
241
- ## 🐛 Troubleshooting
242
-
243
- ### Data Not Loading?
244
-
245
- ✅ **Check #1:** Are you using `http://localhost:8000/`?
246
- - ❌ Don't use `file://` URLs
247
- - ✅ Use an HTTP server
248
-
249
- ✅ **Check #2:** Is the server running?
250
- ```bash
251
- python3 -m http.server 8000
252
- ```
253
-
254
- ✅ **Check #3:** Hard refresh the page
255
- - Press `Ctrl + Shift + R` (Windows/Linux)
256
- - Press `Cmd + Shift + R` (Mac)
257
-
258
- ✅ **Check #4:** Check browser console (F12)
259
- - Look for fetch errors
260
- - Should see loading messages
261
-
262
- ### Server Won't Start?
263
-
264
- ```bash
265
- # Kill process on port 8000
266
- lsof -ti:8000 | xargs kill -9
267
-
268
- # Start fresh
269
- python3 -m http.server 8000
270
- ```
271
-
272
- ### Still Not Working?
273
-
274
- 1. Open browser console (F12)
275
- 2. Look for error messages
276
- 3. Check that JSON files exist in `data/processed/`
277
- 4. Verify you're on the correct URL (`localhost:8000` not `127.0.0.1` if redirects are weird)
278
-
279
- ## 📝 Technical Notes
280
-
281
- - Telugu text uses web fonts (Poppins, Ramabhadra)
282
- - Console shows detailed merge logs for debugging
283
- - Map centered at (16.5°N, 79.8°E) to show both states
284
- - Zoom level: 6.5 (fits both Telangana and AP)
285
- - Data loads asynchronously with `async/await`
286
-
287
- ## 🤝 Contributing
288
-
289
- To add more dialect data:
290
- 1. Edit the JSON files in `data/processed/`
291
- 2. Refresh `http://localhost:8000/`
292
- 3. That's it!
293
-
294
- ---
295
-
296
- **Made with ❤️ for preserving Telugu linguistic heritage across Telangana and Andhra Pradesh**
 
1
  ---
2
+ title: Telangana Dialect Map
3
+ emoji: 🐠
4
+ colorFrom: gray
5
  colorTo: purple
6
+ sdk: static
7
  pinned: false
8
+ license: agpl-3.0
9
  ---
10
 
11
+ Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
SECRETS_SETUP.md DELETED
@@ -1,361 +0,0 @@
1
- # Hugging Face Spaces Secrets Setup Guide
2
-
3
- This guide explains how to configure and deploy your Telugu Dialect Map to Hugging Face Spaces with secure secrets management.
4
-
5
- ## Overview
6
-
7
- Your application requires two secret files:
8
- - **`config.json`**: Configuration for Google Sheets sync and automation
9
- - **`credentials.json`**: Google Cloud service account credentials
10
-
11
- These files contain sensitive information and should NEVER be committed to git. Instead, we'll use Hugging Face Spaces **secrets** (environment variables) to store them securely.
12
-
13
- ---
14
-
15
- ## Step 1: Obtain Google Service Account Credentials
16
-
17
- ### 1.1 Create a Google Cloud Project
18
-
19
- 1. Go to [Google Cloud Console](https://console.cloud.google.com/)
20
- 2. Create a new project or select an existing one
21
- 3. Note your project ID
22
-
23
- ### 1.2 Enable Google Sheets API
24
-
25
- 1. In your project, go to **APIs & Services** → **Library**
26
- 2. Search for "Google Sheets API"
27
- 3. Click **Enable**
28
-
29
- ### 1.3 Create a Service Account
30
-
31
- 1. Go to **APIs & Services** → **Credentials**
32
- 2. Click **Create Credentials** → **Service Account**
33
- 3. Fill in the details:
34
- - **Service account name**: `dialect-map-automation`
35
- - **Service account ID**: (auto-generated)
36
- - **Description**: "Service account for dialect map Google Sheets automation"
37
- 4. Click **Create and Continue**
38
- 5. Skip the optional steps (roles and user access)
39
- 6. Click **Done**
40
-
41
- ### 1.4 Create and Download Service Account Key
42
-
43
- 1. Click on the service account you just created
44
- 2. Go to the **Keys** tab
45
- 3. Click **Add Key** → **Create new key**
46
- 4. Select **JSON** format
47
- 5. Click **Create**
48
- 6. A JSON file will be downloaded - this is your `credentials.json`
49
- 7. **Keep this file secure!** It provides full access to your Google Sheets
50
-
51
- ### 1.5 Share Your Google Sheets with the Service Account
52
-
53
- 1. Open your `credentials.json` file
54
- 2. Find the `client_email` field (e.g., `dialect-map-automation@your-project.iam.gserviceaccount.com`)
55
- 3. Copy this email address
56
- 4. Open each Google Sheet you want to sync
57
- 5. Click **Share** button
58
- 6. Paste the service account email
59
- 7. Give it **Editor** or **Viewer** access (Editor if you want to write data back)
60
- 8. Click **Send**
61
-
62
- ---
63
-
64
- ## Step 2: Configure config.json
65
-
66
- Create your `config.json` file with your specific settings:
67
-
68
- ```json
69
- {
70
- "google_sheets": {
71
- "enabled": true,
72
- "sync_interval_minutes": 5,
73
- "credentials_file": "credentials.json",
74
- "spreadsheets": [
75
- {
76
- "id": "YOUR_ACTUAL_SPREADSHEET_ID_HERE",
77
- "sheet_name": "processed_dialects",
78
- "output_file": "sheets_output/processed_dialects.csv"
79
- },
80
- {
81
- "id": "YOUR_ACTUAL_SPREADSHEET_ID_HERE",
82
- "sheet_name": "digiwords_grouped",
83
- "output_file": "sheets_output/digiwords_grouped.csv"
84
- }
85
- ]
86
- },
87
- "file_watcher": {
88
- "enabled": true,
89
- "watch_directory": "sheets_output",
90
- "file_patterns": ["*.csv"]
91
- },
92
- "output": {
93
- "json_directory": "data/processed"
94
- }
95
- }
96
- ```
97
-
98
- ### Finding Your Spreadsheet ID
99
-
100
- Your Google Sheets URL looks like:
101
- ```
102
- https://docs.google.com/spreadsheets/d/1AbC123XyZ456_Example_ID/edit#gid=0
103
- ^^^^^^^^^^^^^^^^^^^^^^^^^
104
- This is your spreadsheet ID
105
- ```
106
-
107
- Copy the ID from your URL and replace `YOUR_ACTUAL_SPREADSHEET_ID_HERE` in the config.
108
-
109
- ---
110
-
111
- ## Step 3: Deploy to Hugging Face Spaces
112
-
113
- ### 3.1 Create a New Space
114
-
115
- 1. Go to [Hugging Face](https://huggingface.co/)
116
- 2. Click your profile → **New Space**
117
- 3. Fill in the details:
118
- - **Space name**: `telugu-dialect-map` (or your choice)
119
- - **License**: Choose appropriate license
120
- - **Space SDK**: Select **Static** (we'll use a custom Python app)
121
- - **Visibility**: Public or Private
122
- 4. Click **Create Space**
123
-
124
- ### 3.2 Push Your Code to the Space
125
-
126
- You can either:
127
-
128
- **Option A: Use Git**
129
- ```bash
130
- # Clone the Space repository
131
- git clone https://huggingface.co/spaces/YOUR_USERNAME/telugu-dialect-map
132
- cd telugu-dialect-map
133
-
134
- # Copy your project files (excluding secrets!)
135
- cp -r /path/to/dialect-map/* .
136
-
137
- # Make sure .gitignore is in place
138
- cat .gitignore # Should include config.json and credentials.json
139
-
140
- # Commit and push
141
- git add .
142
- git commit -m "Initial commit"
143
- git push
144
- ```
145
-
146
- **Option B: Upload via Web Interface**
147
- 1. In your Space, click **Files** tab
148
- 2. Click **Add file** → **Upload files**
149
- 3. Select all your project files (EXCEPT `config.json` and `credentials.json`)
150
- 4. Click **Commit changes**
151
-
152
- ### 3.3 Add Secrets to Your Space
153
-
154
- This is the **critical step** - we'll add your sensitive credentials as secrets.
155
-
156
- 1. In your Space, click the **Settings** tab
157
- 2. Scroll down to **Repository secrets**
158
- 3. Add the following secrets:
159
-
160
- #### Secret 1: HF_CONFIG_JSON
161
-
162
- - **Name**: `HF_CONFIG_JSON`
163
- - **Value**: Paste the **entire contents** of your `config.json` file
164
-
165
- Example (all on one line):
166
- ```
167
- {"google_sheets":{"enabled":true,"sync_interval_minutes":5,"credentials_file":"credentials.json","spreadsheets":[{"id":"1AbC123XyZ456_Example","sheet_name":"processed_dialects","output_file":"sheets_output/processed_dialects.csv"}]},"file_watcher":{"enabled":true,"watch_directory":"sheets_output","file_patterns":["*.csv"]},"output":{"json_directory":"data/processed"}}
168
- ```
169
-
170
- #### Secret 2: HF_CREDENTIALS_JSON
171
-
172
- - **Name**: `HF_CREDENTIALS_JSON`
173
- - **Value**: Paste the **entire contents** of your `credentials.json` file
174
-
175
- Example (all on one line, with escaped newlines in private key):
176
- ```
177
- {"type":"service_account","project_id":"your-project","private_key_id":"abc123...","private_key":"-----BEGIN PRIVATE KEY-----\\nMIIEvQIB...\\n-----END PRIVATE KEY-----\\n","client_email":"name@project.iam.gserviceaccount.com",...}
178
- ```
179
-
180
- 4. Click **Add secret** for each one
181
-
182
- **Important Notes:**
183
- - The entire JSON must be on one line (no newlines except in the `private_key` field where `\n` should be `\\n`)
184
- - Make sure to escape special characters if needed
185
- - You can use a JSON minifier tool to compact your JSON
186
-
187
- ### 3.4 Rebuild Your Space
188
-
189
- After adding secrets:
190
- 1. Your Space should automatically rebuild
191
- 2. Watch the **Logs** tab for any errors
192
- 3. Once built, click **App** tab to view your running application
193
-
194
- ---
195
-
196
- ## Step 4: Verify Deployment
197
-
198
- ### 4.1 Check Space Logs
199
-
200
- 1. Go to your Space's **Logs** tab
201
- 2. You should see:
202
- ```
203
- 🔐 Loading secrets from environment variables...
204
- ✅ Created config.json from HF_CONFIG_JSON secret
205
- ✅ Created credentials.json from HF_CREDENTIALS_JSON secret
206
- 🚀 Starting automation runner...
207
- ✅ Automation runner started
208
- 🌐 Starting web server on port 7860...
209
- ```
210
-
211
- 3. If you see errors, check:
212
- - JSON formatting in your secrets
213
- - Spreadsheet IDs are correct
214
- - Service account has access to sheets
215
-
216
- ### 4.2 Access Your Application
217
-
218
- 1. Click the **App** tab
219
- 2. You should see your Telugu Dialect Map interface
220
- 3. The map should load with data from your Google Sheets
221
-
222
- ### 4.3 Verify Automation
223
-
224
- 1. Edit your Google Sheet (add/modify some dialect data)
225
- 2. Wait 5 minutes (or your configured interval)
226
- 3. Check the Space logs - you should see sync messages
227
- 4. Refresh your app - changes should appear
228
-
229
- ---
230
-
231
- ## Troubleshooting
232
-
233
- ### "HF_CONFIG_JSON not found in environment"
234
-
235
- **Problem**: The secret wasn't added or has the wrong name.
236
-
237
- **Solution**:
238
- 1. Go to Space Settings → Repository secrets
239
- 2. Verify the secret name is exactly `HF_CONFIG_JSON` (case-sensitive)
240
- 3. Add it if missing
241
- 4. Rebuild the Space
242
-
243
- ### "Error parsing HF_CONFIG_JSON"
244
-
245
- **Problem**: The JSON is malformed.
246
-
247
- **Solution**:
248
- 1. Copy your `config.json` content
249
- 2. Use a JSON validator (e.g., [jsonlint.com](https://jsonlint.com/))
250
- 3. Make sure it's valid JSON
251
- 4. Remove all newlines (except `\n` in strings should become `\\n`)
252
- 5. Update the secret with the corrected value
253
-
254
- ### "Connection refused" or "Credentials invalid"
255
-
256
- **Problem**: Google service account credentials are wrong or not shared.
257
-
258
- **Solution**:
259
- 1. Verify `credentials.json` content is correct
260
- 2. Check that you shared your Google Sheets with the service account email
261
- 3. Verify the Sheets API is enabled in Google Cloud Console
262
- 4. Regenerate service account key if needed
263
-
264
- ### "Automation not syncing"
265
-
266
- **Problem**: Automation runner isn't working.
267
-
268
- **Solution**:
269
- 1. Check Space logs for error messages
270
- 2. Verify `spreadsheets.id` values in config.json match your actual sheet IDs
271
- 3. Verify `sheet_name` values match the tab names in your spreadsheets
272
- 4. Check that service account has Editor access (not just Viewer)
273
-
274
- ### Space keeps crashing or restarting
275
-
276
- **Problem**: HF Spaces free tier may have resource limits.
277
-
278
- **Solution**:
279
- 1. Consider upgrading to a paid Space for guaranteed uptime
280
- 2. Reduce sync interval (e.g., 15-30 minutes instead of 5)
281
- 3. Check logs for memory/CPU issues
282
-
283
- ---
284
-
285
- ## Local Testing (Before Deploying)
286
-
287
- Before deploying to HF Spaces, test locally:
288
-
289
- ### 1. Create actual config files
290
-
291
- ```bash
292
- cd /home/kashikuldeep/Desktop/dialect-map
293
-
294
- # Copy examples and fill in real values
295
- cp config.json.example config.json
296
- cp credentials.json.example credentials.json
297
-
298
- # Edit with your actual values
299
- nano config.json
300
- nano credentials.json
301
- ```
302
-
303
- ### 2. Test the app
304
-
305
- ```bash
306
- # Run the app locally
307
- python app.py
308
-
309
- # Should see:
310
- # ✅ Created config.json from HF_CONFIG_JSON secret (if using .env)
311
- # 🚀 Starting automation runner...
312
- # 🌐 Starting web server on port 7860...
313
-
314
- # Open browser to http://localhost:7860
315
- ```
316
-
317
- ### 3. Test with environment variables (simulating HF Spaces)
318
-
319
- ```bash
320
- # Create .env file
321
- cp .env.example .env
322
-
323
- # Edit .env with your actual JSON (minified)
324
- nano .env
325
-
326
- # Load environment and run
327
- python -c "from dotenv import load_dotenv; load_dotenv()" && python app.py
328
- ```
329
-
330
- ---
331
-
332
- ## Security Best Practices
333
-
334
- 1. **Never commit secrets to git**
335
- - Keep `config.json` and `credentials.json` in `.gitignore`
336
- - Double-check before pushing code
337
-
338
- 2. **Rotate credentials regularly**
339
- - Generate new service account keys periodically
340
- - Update HF Spaces secrets
341
-
342
- 3. **Use minimal permissions**
343
- - Service account should only have access to necessary sheets
344
- - Use Viewer access if you don't need to write back
345
-
346
- 4. **Monitor usage**
347
- - Check Google Cloud Console for API usage
348
- - Set up billing alerts
349
- - Review Space logs regularly
350
-
351
- ---
352
-
353
- ## Need Help?
354
-
355
- - **Google Cloud Issues**: [Google Cloud Support](https://cloud.google.com/support)
356
- - **Hugging Face Spaces**: [HF Documentation](https://huggingface.co/docs/hub/spaces)
357
- - **Project Issues**: Check the Space logs first, then review this guide
358
-
359
- ---
360
-
361
- **Happy Mapping! 🗺️**
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app.py DELETED
@@ -1,184 +0,0 @@
1
- #!/usr/bin/env python3
2
- """
3
- Hugging Face Spaces Entry Point
4
- This script:
5
- 1. Loads secrets from HF Spaces environment variables
6
- 2. Creates config.json and credentials.json from those secrets
7
- 3. Starts the automation runner in the background
8
- 4. Serves the static web interface
9
- """
10
-
11
- import os
12
- import json
13
- import subprocess
14
- import signal
15
- import sys
16
- import time
17
- import threading
18
- from pathlib import Path
19
- from http.server import HTTPServer, SimpleHTTPRequestHandler
20
- from functools import partial
21
-
22
- # Configuration
23
- PORT = int(os.getenv('PORT', 7860))
24
- BASE_DIR = Path(__file__).parent
25
- AUTOMATION_RUNNER = BASE_DIR / "scripts" / "automation_runner.py"
26
-
27
- # Global process reference for cleanup
28
- automation_process = None
29
-
30
-
31
- def load_secrets_from_env():
32
- """Load secrets from HF Spaces environment variables and create config files"""
33
- print("🔐 Loading secrets from environment variables...")
34
-
35
- # Load config.json from environment
36
- config_json_str = os.getenv('HF_CONFIG_JSON')
37
- if config_json_str:
38
- try:
39
- config_data = json.loads(config_json_str)
40
- config_file = BASE_DIR / "config.json"
41
- with open(config_file, 'w') as f:
42
- json.dump(config_data, f, indent=2)
43
- print(f"✅ Created config.json from HF_CONFIG_JSON secret")
44
- except json.JSONDecodeError as e:
45
- print(f"❌ Error parsing HF_CONFIG_JSON: {e}")
46
- sys.exit(1)
47
- else:
48
- config_file = BASE_DIR / "config.json"
49
- if not config_file.exists():
50
- print("⚠️ HF_CONFIG_JSON not found in environment")
51
- print("⚠️ Please set HF_CONFIG_JSON secret in your Hugging Face Space settings")
52
- print("⚠️ See SECRETS_SETUP.md for instructions")
53
- # Don't exit - allow the app to run without automation
54
-
55
- # Load credentials.json from environment
56
- credentials_json_str = os.getenv('HF_CREDENTIALS_JSON')
57
- if credentials_json_str:
58
- try:
59
- credentials_data = json.loads(credentials_json_str)
60
- credentials_file = BASE_DIR / "credentials.json"
61
- with open(credentials_file, 'w') as f:
62
- json.dump(credentials_data, f, indent=2)
63
- print(f"✅ Created credentials.json from HF_CREDENTIALS_JSON secret")
64
- except json.JSONDecodeError as e:
65
- print(f"❌ Error parsing HF_CREDENTIALS_JSON: {e}")
66
- sys.exit(1)
67
- else:
68
- credentials_file = BASE_DIR / "credentials.json"
69
- if not credentials_file.exists():
70
- print("⚠️ HF_CREDENTIALS_JSON not found in environment")
71
- print("⚠️ Google Sheets sync will not work without credentials")
72
-
73
- print()
74
-
75
-
76
- def start_automation():
77
- """Start the automation runner in the background"""
78
- global automation_process
79
-
80
- # Check if automation script exists
81
- if not AUTOMATION_RUNNER.exists():
82
- print(f"⚠️ Automation runner not found: {AUTOMATION_RUNNER}")
83
- return
84
-
85
- # Check if config exists
86
- config_file = BASE_DIR / "config.json"
87
- if not config_file.exists():
88
- print("⚠️ config.json not found, skipping automation startup")
89
- return
90
-
91
- print("🚀 Starting automation runner...")
92
- try:
93
- automation_process = subprocess.Popen(
94
- [sys.executable, str(AUTOMATION_RUNNER)],
95
- stdout=subprocess.PIPE,
96
- stderr=subprocess.STDOUT,
97
- text=True,
98
- bufsize=1
99
- )
100
-
101
- # Stream automation output in a separate thread
102
- def stream_output():
103
- for line in automation_process.stdout:
104
- print(f"[AUTOMATION] {line}", end='')
105
-
106
- threading.Thread(target=stream_output, daemon=True).start()
107
- print("✅ Automation runner started\n")
108
- except Exception as e:
109
- print(f"❌ Failed to start automation: {e}\n")
110
-
111
-
112
- def cleanup(signum=None, frame=None):
113
- """Cleanup function to terminate background processes"""
114
- global automation_process
115
- print("\n\n🛑 Shutting down...")
116
-
117
- if automation_process:
118
- print("🧹 Stopping automation runner...")
119
- automation_process.terminate()
120
- automation_process.wait(timeout=5)
121
-
122
- print("✅ Cleanup complete\n")
123
- sys.exit(0)
124
-
125
-
126
- class CustomHTTPRequestHandler(SimpleHTTPRequestHandler):
127
- """Custom handler to serve from the correct directory"""
128
-
129
- def __init__(self, *args, **kwargs):
130
- super().__init__(*args, directory=str(BASE_DIR), **kwargs)
131
-
132
- def log_message(self, format, *args):
133
- """Custom logging to show requests"""
134
- print(f"[WEB] {self.address_string()} - {format % args}")
135
-
136
-
137
- def start_web_server():
138
- """Start the HTTP server to serve the static files"""
139
- print(f"🌐 Starting web server on port {PORT}...")
140
-
141
- handler = CustomHTTPRequestHandler
142
- httpd = HTTPServer(('0.0.0.0', PORT), handler)
143
-
144
- print(f"✅ Web server running at http://0.0.0.0:{PORT}")
145
- print(f"📊 Open the map: http://0.0.0.0:{PORT}/index.html")
146
- print(f"💡 Press Ctrl+C to stop\n")
147
-
148
- try:
149
- httpd.serve_forever()
150
- except KeyboardInterrupt:
151
- pass
152
- finally:
153
- httpd.shutdown()
154
-
155
-
156
- def main():
157
- """Main entry point"""
158
- print("=" * 70)
159
- print("🗺️ Telugu Dialect Map - Hugging Face Spaces")
160
- print("=" * 70)
161
- print()
162
-
163
- # Register signal handlers for graceful shutdown
164
- signal.signal(signal.SIGINT, cleanup)
165
- signal.signal(signal.SIGTERM, cleanup)
166
-
167
- # Load secrets from environment variables
168
- load_secrets_from_env()
169
-
170
- # Start background automation
171
- start_automation()
172
-
173
- # Give automation a moment to start
174
- time.sleep(2)
175
-
176
- # Start web server (blocks here)
177
- start_web_server()
178
-
179
- # Cleanup (if we ever get here)
180
- cleanup()
181
-
182
-
183
- if __name__ == "__main__":
184
- main()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
config.json.example DELETED
@@ -1,27 +0,0 @@
1
- {
2
- "google_sheets": {
3
- "enabled": true,
4
- "sync_interval_minutes": 5,
5
- "credentials_file": "credentials.json",
6
- "spreadsheets": [
7
- {
8
- "id": "YOUR_SPREADSHEET_ID_1_HERE",
9
- "sheet_name": "processed_dialects",
10
- "output_file": "sheets_output/processed_dialects.csv"
11
- },
12
- {
13
- "id": "YOUR_SPREADSHEET_ID_2_HERE",
14
- "sheet_name": "digiwords_grouped",
15
- "output_file": "sheets_output/digiwords_grouped.csv"
16
- }
17
- ]
18
- },
19
- "file_watcher": {
20
- "enabled": true,
21
- "watch_directory": "sheets_output",
22
- "file_patterns": ["*.csv"]
23
- },
24
- "output": {
25
- "json_directory": "data/processed"
26
- }
27
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
credentials.json.example DELETED
@@ -1,12 +0,0 @@
1
- {
2
- "type": "service_account",
3
- "project_id": "your-project-id",
4
- "private_key_id": "your-private-key-id",
5
- "private_key": "-----BEGIN PRIVATE KEY-----\nYOUR_PRIVATE_KEY_HERE\n-----END PRIVATE KEY-----\n",
6
- "client_email": "your-service-account@your-project.iam.gserviceaccount.com",
7
- "client_id": "your-client-id",
8
- "auth_uri": "https://accounts.google.com/o/oauth2/auth",
9
- "token_uri": "https://oauth2.googleapis.com/token",
10
- "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
11
- "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/your-service-account%40your-project.iam.gserviceaccount.com"
12
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
data/processed/digiwords_grouped.json DELETED
@@ -1,962 +0,0 @@
1
- {
2
- "Telangana": {
3
- "Adilabad": [
4
- {
5
- "t": "చోలోట్",
6
- "m": "మంచి (Good)",
7
- "s": "Crowd"
8
- },
9
- {
10
- "t": "వంచెడ్ చిబడ్",
11
- "m": "అంటు ముట్టుకోడం",
12
- "s": "Crowd"
13
- },
14
- {
15
- "t": "వడోగు",
16
- "m": "దూడ (Calf)",
17
- "s": "Crowd"
18
- },
19
- {
20
- "t": "ముచిలి పడన్",
21
- "m": "ఎర్ర తుమ్మెద",
22
- "s": "Crowd"
23
- },
24
- {
25
- "t": "సర్కార్",
26
- "m": "నాశనం",
27
- "s": "Crowd"
28
- },
29
- {
30
- "t": "వజీర్",
31
- "m": "ముసలి",
32
- "s": "Crowd"
33
- },
34
- {
35
- "t": "ఖైని",
36
- "m": "వదిన",
37
- "s": "Crowd"
38
- },
39
- {
40
- "t": "సూన్",
41
- "m": "కోడలు",
42
- "s": "Crowd"
43
- },
44
- {
45
- "t": "Poral batal",
46
- "m": "Temple term (Keslapur)",
47
- "s": "Crowd"
48
- }
49
- ],
50
- "Gadwal": [
51
- {
52
- "t": "ఓల్లి",
53
- "m": "No",
54
- "s": "Crowd"
55
- },
56
- {
57
- "t": "కూడు తింటవా",
58
- "m": "తిన్నారా",
59
- "s": "Crowd"
60
- },
61
- {
62
- "t": "తువ్వ",
63
- "m": "ఎర్ర పొలం",
64
- "s": "Crowd"
65
- },
66
- {
67
- "t": "పురకోస",
68
- "m": "జూట్ దార",
69
- "s": "Crowd"
70
- },
71
- {
72
- "t": "జుముజలమ్మ",
73
- "m": "దేవత",
74
- "s": "Crowd"
75
- },
76
- {
77
- "t": "తలుగు ఎల్లమ్మ",
78
- "m": "దేవత",
79
- "s": "Crowd"
80
- },
81
- {
82
- "t": "తెల్వది",
83
- "m": "Don't know",
84
- "s": "Crowd"
85
- },
86
- {
87
- "t": "మడసంగ",
88
- "m": "నెమ్మదిగా/జాగ్రత్తగా",
89
- "s": "Crowd"
90
- },
91
- {
92
- "t": "రప్పున",
93
- "m": "జల్ది",
94
- "s": "Crowd"
95
- },
96
- {
97
- "t": "మడసంగ",
98
- "m": "Careful",
99
- "s": "Crowd"
100
- }
101
- ],
102
- "Hyderabad": [
103
- {
104
- "t": "కిటికీ",
105
- "m": "Window",
106
- "s": "Crowd"
107
- },
108
- {
109
- "t": "అంగీ",
110
- "m": "Shirt",
111
- "s": "Crowd"
112
- },
113
- {
114
- "t": "కుక్క",
115
- "m": "Dog",
116
- "s": "Crowd"
117
- },
118
- {
119
- "t": "కుర్చీ",
120
- "m": "Chair",
121
- "s": "Crowd"
122
- },
123
- {
124
- "t": "Amma buvva pettava",
125
- "m": "Mother feed me",
126
- "s": "Crowd"
127
- },
128
- {
129
- "t": "Chaderghat",
130
- "m": "Location",
131
- "s": "Crowd"
132
- },
133
- {
134
- "t": "తొవ్వ దారి",
135
- "m": "Way/Path",
136
- "s": "Crowd"
137
- },
138
- {
139
- "t": "పాతాళగరిసె",
140
- "m": "Tool to remove bucket",
141
- "s": "Crowd"
142
- },
143
- {
144
- "t": "అంబటాలు",
145
- "m": "Afternoon time",
146
- "s": "Crowd"
147
- },
148
- {
149
- "t": "ఇన్సురాయి",
150
- "m": "Stone tool",
151
- "s": "Crowd"
152
- },
153
- {
154
- "t": "బుక్కెట్",
155
- "m": "Tool for well",
156
- "s": "Crowd"
157
- }
158
- ],
159
- "Jangaon": [
160
- {
161
- "t": "ఏమైంది",
162
- "m": "What happened",
163
- "s": "Crowd"
164
- }
165
- ],
166
- "Karimnagar": [
167
- {
168
- "t": "బూరెలు",
169
- "m": "భక్ష్యాలు",
170
- "s": "Crowd"
171
- },
172
- {
173
- "t": "అచ్చినం",
174
- "m": "వచ్చాము",
175
- "s": "Crowd"
176
- },
177
- {
178
- "t": "పాయినం",
179
- "m": "వెళ్ళాము",
180
- "s": "Crowd"
181
- },
182
- {
183
- "t": "సవాలు",
184
- "m": "Question/Challenge",
185
- "s": "Crowd"
186
- },
187
- {
188
- "t": "గటక",
189
- "m": "Food item",
190
- "s": "Crowd"
191
- },
192
- {
193
- "t": "వస్తున్నావ",
194
- "m": "వస్తున్నావు",
195
- "s": "Crowd"
196
- },
197
- {
198
- "t": "ఊశము",
199
- "m": "బద్ధకం/అలసత్వం",
200
- "s": "Crowd"
201
- },
202
- {
203
- "t": "వందంగా ఉంది",
204
- "m": "బాగా",
205
- "s": "Crowd"
206
- },
207
- {
208
- "t": "రువిడ్లు",
209
- "m": "Shelf",
210
- "s": "Crowd"
211
- },
212
- {
213
- "t": "కార్యపాలు",
214
- "m": "వస్తున్నం/పోతున్నాం",
215
- "s": "Crowd"
216
- },
217
- {
218
- "t": "బావి",
219
- "m": "నూతి",
220
- "s": "Crowd"
221
- },
222
- {
223
- "t": "గంప",
224
- "m": "గుల్ల",
225
- "s": "Crowd"
226
- },
227
- {
228
- "t": "బం��ి",
229
- "m": "Ball",
230
- "s": "Crowd"
231
- }
232
- ],
233
- "Mahabubnagar": [
234
- {
235
- "t": "వీధి",
236
- "m": "Street",
237
- "s": "Crowd"
238
- },
239
- {
240
- "t": "జల్ది",
241
- "m": "తొందరగా",
242
- "s": "Crowd"
243
- },
244
- {
245
- "t": "జింగిడి",
246
- "m": "బర్రెల గుంపు",
247
- "s": "Crowd"
248
- },
249
- {
250
- "t": "బాగమ్",
251
- "m": "Exhibition",
252
- "s": "Crowd"
253
- },
254
- {
255
- "t": "చలక",
256
- "m": "Field",
257
- "s": "Crowd"
258
- },
259
- {
260
- "t": "ఈల పేట",
261
- "m": "కత్తి పేట",
262
- "s": "Crowd"
263
- }
264
- ],
265
- "Mahabubabad": [
266
- {
267
- "t": "బొచ్చెడు",
268
- "m": "చాలా (A lot)",
269
- "s": "Crowd"
270
- },
271
- {
272
- "t": "ఏ మయింది అన్నా",
273
- "m": "What happened",
274
- "s": "Crowd"
275
- }
276
- ],
277
- "Medak": [
278
- {
279
- "t": "కీసా",
280
- "m": "జేబు",
281
- "s": "Crowd"
282
- },
283
- {
284
- "t": "పైను",
285
- "m": "ఆరు (Six)",
286
- "s": "Crowd"
287
- }
288
- ],
289
- "Nagar Kurnool": [
290
- {
291
- "t": "అంబటాలు",
292
- "m": "Morning meal time",
293
- "s": "Crowd"
294
- },
295
- {
296
- "t": "మంకర",
297
- "m": "Winter cold",
298
- "s": "Crowd"
299
- },
300
- {
301
- "t": "లాడు",
302
- "m": "తల్లి కూతురు",
303
- "s": "Crowd"
304
- },
305
- {
306
- "t": "గెనిమ",
307
- "m": "పొలం గట్టు",
308
- "s": "Crowd"
309
- },
310
- {
311
- "t": "కోంత లోలు",
312
- "m": "Old name for Nagar Kurnool",
313
- "s": "Crowd"
314
- }
315
- ],
316
- "Nalgonda": [
317
- {
318
- "t": "Dupa aithundhi",
319
- "m": "దాహం వేస్తుంది",
320
- "s": "Crowd"
321
- },
322
- {
323
- "t": "సేరు",
324
- "m": "1kg measuring device",
325
- "s": "Crowd"
326
- },
327
- {
328
- "t": "Kurdedu Biyam",
329
- "m": "Amount of rice",
330
- "s": "Crowd"
331
- },
332
- {
333
- "t": "Anglam dundu",
334
- "m": "అగ్గి పెట్టె",
335
- "s": "Crowd"
336
- },
337
- {
338
- "t": "సది",
339
- "m": "Take the box",
340
- "s": "Crowd"
341
- },
342
- {
343
- "t": "తట్ట",
344
- "m": "పళ్ళెం",
345
- "s": "Crowd"
346
- },
347
- {
348
- "t": "కోవెల",
349
- "m": "గుడి",
350
- "s": "Crowd"
351
- },
352
- {
353
- "t": "ఊసలు",
354
- "m": "Weaving technique",
355
- "s": "Crowd"
356
- },
357
- {
358
- "t": "బువ్వ",
359
- "m": "Cooked rice",
360
- "s": "Crowd"
361
- },
362
- {
363
- "t": "తవాచీ",
364
- "m": "Shelf with doors",
365
- "s": "Crowd"
366
- },
367
- {
368
- "t": "తపుకు",
369
- "m": "Plate on vessel",
370
- "s": "Crowd"
371
- },
372
- {
373
- "t": "లడ్లు",
374
- "m": "అరిసెలు",
375
- "s": "Crowd"
376
- },
377
- {
378
- "t": "దారి",
379
- "m": "బాట",
380
- "s": "Crowd"
381
- }
382
- ],
383
- "Narayanpet": [
384
- {
385
- "t": "బుబ్బి",
386
- "m": "అమ్మ",
387
- "s": "Crowd"
388
- },
389
- {
390
- "t": "పడం",
391
- "m": "మట్టి",
392
- "s": "Crowd"
393
- },
394
- {
395
- "t": "చెముక్కలు",
396
- "m": "మోకాళ్ళు",
397
- "s": "Crowd"
398
- },
399
- {
400
- "t": "మొర",
401
- "m": "మంచం",
402
- "s": "Crowd"
403
- },
404
- {
405
- "t": "అబుత",
406
- "m": "జుట్టు",
407
- "s": "Crowd"
408
- },
409
- {
410
- "t": "జేజి",
411
- "m": "Fat",
412
- "s": "Crowd"
413
- },
414
- {
415
- "t": "అంబలి",
416
- "m": "జావ",
417
- "s": "Crowd"
418
- }
419
- ],
420
- "Nizamabad": [
421
- {
422
- "t": "పంపేవుడు",
423
- "m": "పంపించడం",
424
- "s": "Crowd"
425
- },
426
- {
427
- "t": "Pillodu",
428
- "m": "Bindu",
429
- "s": "Crowd"
430
- },
431
- {
432
- "t": "వచ్చిండు",
433
- "m": "అచ్చిండు",
434
- "s": "Crowd"
435
- }
436
- ],
437
- "Peddapally": [
438
- {
439
- "t": "గుమ్ము",
440
- "m": "Storage",
441
- "s": "Crowd"
442
- },
443
- {
444
- "t": "గట్టు",
445
- "m": "దారి",
446
- "s": "Crowd"
447
- }
448
- ],
449
- "Rangareddy": [
450
- {
451
- "t": "వీరునో",
452
- "m": "తెలుగు",
453
- "s": "Crowd"
454
- },
455
- {
456
- "t": "తొక్కుడు",
457
- "m": "మంచం",
458
- "s": "Crowd"
459
- },
460
- {
461
- "t": "మూర",
462
- "m": "ముంగిలి",
463
- "s": "Crowd"
464
- },
465
- {
466
- "t": "కారం",
467
- "m": "పచ్చడి",
468
- "s": "Crowd"
469
- },
470
- {
471
- "t": "ఈ గడ",
472
- "m": "కడ",
473
- "s": "Crowd"
474
- }
475
- ],
476
- "Siddipet": [
477
- {
478
- "t": "అంగీ",
479
- "m": "Shirt",
480
- "s": "Crowd"
481
- },
482
- {
483
- "t": "పొయ్యిర్రు",
484
- "m": "వెళ్ళారు",
485
- "s": "Crowd"
486
- },
487
- {
488
- "t": "మెగులుతుంది",
489
- "m": "వర్షం వచ్చి ఆగిన",
490
- "s": "Crowd"
491
- },
492
- {
493
- "t": "అలుకురు",
494
- "m": "Pre cultivation",
495
- "s": "Crowd"
496
- },
497
- {
498
- "t": "పయిలం",
499
- "m": "జాగ్రత్త",
500
- "s": "Crowd"
501
- },
502
- {
503
- "t": "తప్పెలు",
504
- "m": "Rice plate",
505
- "s": "Crowd"
506
- },
507
- {
508
- "t": "పందిట్లు",
509
- "m": "పందిరి",
510
- "s": "Crowd"
511
- },
512
- {
513
- "t": "రాకొచ్చింది",
514
- "m": "రాదు",
515
- "s": "Crowd"
516
- },
517
- {
518
- "t": "పోకొచ్చింది",
519
- "m": "పోదు",
520
- "s": "Crowd"
521
- },
522
- {
523
- "t": "కుకో",
524
- "m": "కూర్చో",
525
- "s": "Crowd"
526
- },
527
- {
528
- "t": "ఏడారు",
529
- "m": "Afternoon time",
530
- "s": "Crowd"
531
- }
532
- ],
533
- "Wanaparthy": [
534
- {
535
- "t": "చెప్పలకాయలు",
536
- "m": "గొంకరకాయలు",
537
- "s": "Crowd"
538
- },
539
- {
540
- "t": "మలంచా",
541
- "m": "చెంబు",
542
- "s": "Crowd"
543
- },
544
- {
545
- "t": "సొరకాయ",
546
- "m": "ఆనకాయ",
547
- "s": "Crowd"
548
- },
549
- {
550
- "t": "పాశాల",
551
- "m": "Clothes",
552
- "s": "Crowd"
553
- },
554
- {
555
- "t": "మట్టుగుండు",
556
- "m": "Keep calm",
557
- "s": "Crowd"
558
- },
559
- {
560
- "t": "అంబరుంది",
561
- "m": "Excellent",
562
- "s": "Crowd"
563
- }
564
- ],
565
- "Warangal": [
566
- {
567
- "t": "చేను",
568
- "m": "Crop/చలక",
569
- "s": "Crowd"
570
- },
571
- {
572
- "t": "పొయ్యం రారా",
573
- "m": "ఇన్నానిల్లు",
574
- "s": "Crowd"
575
- },
576
- {
577
- "t": "అసుంట",
578
- "m": "అటు వైపు",
579
- "s": "Crowd"
580
- },
581
- {
582
- "t": "ఇసుంట",
583
- "m": "ఇటు వైపు",
584
- "s": "Crowd"
585
- },
586
- {
587
- "t": "చద్దెర",
588
- "m": "Bed sheet",
589
- "s": "Crowd"
590
- }
591
- ]
592
- },
593
- "Andhra Pradesh": {
594
- "Anantapur": [
595
- {
596
- "t": "దిండు",
597
- "m": "Pillows",
598
- "s": "Crowd"
599
- }
600
- ],
601
- "Annamayya": [
602
- {
603
- "t": "ఆ తుప్పాస్",
604
- "m": "Nonsense/Useless",
605
- "s": "Crowd"
606
- }
607
- ],
608
- "Chittoor": [
609
- {
610
- "t": "ముడ్దులు",
611
- "m": "అంగడి",
612
- "s": "Crowd"
613
- },
614
- {
615
- "t": "సెమిరేసినావ",
616
- "m": "Prepared",
617
- "s": "Crowd"
618
- },
619
- {
620
- "t": "వంకాయ పులగూర్",
621
- "m": "కూర",
622
- "s": "Crowd"
623
- },
624
- {
625
- "t": "ఈరి మోది",
626
- "m": "పచ్చడి",
627
- "s": "Crowd"
628
- },
629
- {
630
- "t": "అబ్బ",
631
- "m": "Grandfather",
632
- "s": "Crowd"
633
- },
634
- {
635
- "t": "జెడి",
636
- "m": "Hair knot",
637
- "s": "Crowd"
638
- }
639
- ],
640
- "East Godavari": [
641
- {
642
- "t": "దుకాణం",
643
- "m": "కొట్టు",
644
- "s": "Crowd"
645
- },
646
- {
647
- "t": "పైరు",
648
- "m": "బంగాళదుంప",
649
- "s": "Crowd"
650
- },
651
- {
652
- "t": "బువ్వ",
653
- "m": "Food",
654
- "s": "Crowd"
655
- },
656
- {
657
- "t": "గుడి",
658
- "m": "దేవాలయం",
659
- "s": "Crowd"
660
- },
661
- {
662
- "t": "సామానం",
663
- "m": "ఆలస్యం చేయడం",
664
- "s": "Crowd"
665
- },
666
- {
667
- "t": "బేగ రా",
668
- "m": "తొందరగా రా",
669
- "s": "Crowd"
670
- }
671
- ],
672
- "Eluru": [
673
- {
674
- "t": "శనగపప్పు",
675
- "m": "వేరుశనగ",
676
- "s": "Crowd"
677
- },
678
- {
679
- "t": "చాలా బాగుంది",
680
- "m": "Very good",
681
- "s": "Crowd"
682
- }
683
- ],
684
- "Kadapa": [
685
- {
686
- "t": "కంత",
687
- "m": "రంధ్రం (Hole)",
688
- "s": "Crowd"
689
- },
690
- {
691
- "t": "బాగా ఎక్కువగా",
692
- "m": "Exceedingly",
693
- "s": "Crowd"
694
- },
695
- {
696
- "t": "చాపు మాటలు",
697
- "m": "పెద్ద మాటలు",
698
- "s": "Crowd"
699
- },
700
- {
701
- "t": "బొరుగులు",
702
- "m": "మరమరాలు",
703
- "s": "Crowd"
704
- },
705
- {
706
- "t": "రామాడం",
707
- "m": "మెత్తగా చేయడం",
708
- "s": "Crowd"
709
- },
710
- {
711
- "t": "ఎనుము",
712
- "m": "బర్రె",
713
- "s": "Crowd"
714
- },
715
- {
716
- "t": "ముక్కొల్",
717
- "m": "3 వాడిముళ్ళు",
718
- "s": "Crowd"
719
- }
720
- ],
721
- "Kurnool": [
722
- {
723
- "t": "బుడ్డల నూనె",
724
- "m": "పల్లి oil (Peanut oil)",
725
- "s": "Crowd"
726
- }
727
- ],
728
- "Nandyal": [
729
- {
730
- "t": "తంగాది",
731
- "m": "కొట్టుదు ఇచ్చింది మధ్యన",
732
- "s": "Crowd"
733
- },
734
- {
735
- "t": "గుడి",
736
- "m": "దేవాలయము",
737
- "s": "Crowd"
738
- },
739
- {
740
- "t": "హితాలు",
741
- "m": "బువ్వ తిన్నారా",
742
- "s": "Crowd"
743
- },
744
- {
745
- "t": "తద్దినం",
746
- "m": "పితృ దేవతల కార్యం",
747
- "s": "Crowd"
748
- },
749
- {
750
- "t": "తువాయి",
751
- "m": "ఆవు దూడ (Calf)",
752
- "s": "Crowd"
753
- },
754
- {
755
- "t": "పురుకోస",
756
- "m": "Jute thread twisted",
757
- "s": "Crowd"
758
- }
759
- ],
760
- "Ongole": [
761
- {
762
- "t": "బయట వెళ్ళాడు",
763
- "m": "బయటకు వెళ్ళాడు",
764
- "s": "Crowd"
765
- }
766
- ],
767
- "P.R. నియోజకవర్గం": [
768
- {
769
- "t": "ఎర్రగడ్డ",
770
- "m": "Onion",
771
- "s": "Crowd"
772
- },
773
- {
774
- "t": "తెల్ల గడ్డ",
775
- "m": "వెల్లుల్లి",
776
- "s": "Crowd"
777
- },
778
- {
779
- "t": "ఉల్లగడ్డ",
780
- "m": "Potato",
781
- "s": "Crowd"
782
- },
783
- {
784
- "t": "ఖిన్నారా",
785
- "m": "అద్దెకు రా",
786
- "s": "Crowd"
787
- },
788
- {
789
- "t": "ముడక",
790
- "m": "నాగలి",
791
- "s": "Crowd"
792
- },
793
- {
794
- "t": "కొక",
795
- "m": "చీర",
796
- "s": "Crowd"
797
- },
798
- {
799
- "t": "రైన",
800
- "m": "జాకెట్",
801
- "s": "Crowd"
802
- },
803
- {
804
- "t": "కడ్డీలు",
805
- "m": "అగరబత్తిలు",
806
- "s": "Crowd"
807
- },
808
- {
809
- "t": "పెద్ద నాన్న",
810
- "m": "నాన్న అన్న",
811
- "s": "Crowd"
812
- },
813
- {
814
- "t": "చిన్న నాన్న",
815
- "m": "నాన్న తమ్ముడు",
816
- "s": "Crowd"
817
- },
818
- {
819
- "t": "పెద్దమ్మ",
820
- "m": "నాన్న అన్న భార్య",
821
- "s": "Crowd"
822
- },
823
- {
824
- "t": "చిన్నమ్మ",
825
- "m": "నాన్న తమ్ముడు భార్య",
826
- "s": "Crowd"
827
- },
828
- {
829
- "t": "పొద్దు పొయ్యింది",
830
- "m": "సాయంత్రం సమయం",
831
- "s": "Crowd"
832
- }
833
- ],
834
- "Rayalaseema": [
835
- {
836
- "t": "లోపల",
837
- "m": "Inside",
838
- "s": "Crowd"
839
- },
840
- {
841
- "t": "బొగాలు",
842
- "m": "Keys",
843
- "s": "Crowd"
844
- }
845
- ],
846
- "Srikakulam": [
847
- {
848
- "t": "డొంక",
849
- "m": "తలుపు (Door)",
850
- "s": "Crowd"
851
- },
852
- {
853
- "t": "కుంక",
854
- "m": "Pillodu",
855
- "s": "Crowd"
856
- },
857
- {
858
- "t": "ఖాగి",
859
- "m": "వేగంగా",
860
- "s": "Crowd"
861
- },
862
- {
863
- "t": "బాతె",
864
- "m": "చావు",
865
- "s": "Crowd"
866
- },
867
- {
868
- "t": "అమ్మ",
869
- "m": "Mother",
870
- "s": "Crowd"
871
- },
872
- {
873
- "t": "తెల్లారితే",
874
- "m": "వేకువన",
875
- "s": "Crowd"
876
- }
877
- ],
878
- "Tirupati": [
879
- {
880
- "t": "ఊరాల్",
881
- "m": "Nonsense",
882
- "s": "Crowd"
883
- }
884
- ],
885
- "Vizianagaram": [
886
- {
887
- "t": "ఉకుజురు",
888
- "m": "Egg Burji",
889
- "s": "Crowd"
890
- },
891
- {
892
- "t": "వర్ర",
893
- "m": "కారం",
894
- "s": "Crowd"
895
- },
896
- {
897
- "t": "బేపి",
898
- "m": "కుక్క",
899
- "s": "Crowd"
900
- },
901
- {
902
- "t": "పైనా",
903
- "m": "పైన",
904
- "s": "Crowd"
905
- },
906
- {
907
- "t": "దొడ్డ",
908
- "m": "పెద్ద అమ్మ",
909
- "s": "Crowd"
910
- },
911
- {
912
- "t": "జిజ బేగరా",
913
- "m": "తొందరగా రా",
914
- "s": "Crowd"
915
- },
916
- {
917
- "t": "బంగాళదుంప",
918
- "m": "ఆలుగడ్డ",
919
- "s": "Crowd"
920
- },
921
- {
922
- "t": "ఉల్లిపాయ",
923
- "m": "ఎర్రగడ్డ",
924
- "s": "Crowd"
925
- },
926
- {
927
- "t": "అప్ప",
928
- "m": "అక్క",
929
- "s": "Crowd"
930
- },
931
- {
932
- "t": "గుంత",
933
- "m": "రంధ్రం",
934
- "s": "Crowd"
935
- },
936
- {
937
- "t": "గెడ/బర్రె",
938
- "m": "Buffalo",
939
- "s": "Crowd"
940
- },
941
- {
942
- "t": "గడ్డి",
943
- "m": "చిన్న సెలయేరు",
944
- "s": "Crowd"
945
- }
946
- ],
947
- "West Godavari": [
948
- {
949
- "t": "రాతు తడి",
950
- "m": "Irrigation term",
951
- "s": "Crowd"
952
- }
953
- ],
954
- "Guntur": [
955
- {
956
- "t": "నగబు ",
957
- "m": "An ancient word for snake",
958
- "s": "Crowd"
959
- }
960
- ]
961
- }
962
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
data/processed/processed_dialects.json DELETED
The diff for this file is too large to render. See raw diff
 
index.html CHANGED
@@ -4,7 +4,7 @@
4
  <head>
5
  <meta charset="UTF-8">
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
7
- <title>Telugu Dialect Map - Telangana & Andhra Pradesh</title>
8
 
9
  <link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css"
10
  integrity="sha256-p4NxAoJBhIIN+hmNHrzRCf9tD/miZyoHS5obTRR9BMY=" crossorigin="" />
@@ -122,6 +122,19 @@
122
  font-size: 0.95rem;
123
  }
124
 
 
 
 
 
 
 
 
 
 
 
 
 
 
125
  #map {
126
  flex-grow: 1;
127
  height: 100%;
@@ -151,8 +164,8 @@
151
 
152
  <div id="sidebar">
153
  <div class="header">
154
- <h1>Telugu Dialect Map</h1>
155
- <p id="district-counter">Loading districts...</p>
156
  </div>
157
  <div id="info-panel">
158
  <div style="text-align: center; color: #888; margin-top: 60px;">
@@ -168,31 +181,14 @@
168
  integrity="sha256-20nQCchB9co0qIjJZRGuk2/Z9VM+kNiyxNV1lvTlZBo=" crossorigin=""></script>
169
 
170
  <script>
171
- // --- 1. THE DATA (TELANGANA - 33 DISTRICTS) ---
172
- const dialectData = [
 
173
  // === NORTHERN TELANGANA ===
174
  {
175
  name: "Adilabad", lat: 19.6641, lng: 78.5320, region: "Northern Forest",
176
  history: "Heavily influenced by Gondi tribal dialects and Marathi due to the Maharashtra border.",
177
  words: [
178
- { t: "చోలోట్", m: "మంచి (Good)", s: "Crowd" },
179
- { t: "వంచెడ్ చిబడ్", m: "అంటు ముట్టుకోడం", s: "Crowd" },
180
- { t: "వడోగు", m: "దూడ (Calf)", s: "Crowd" },
181
- { t: "ముచిలి పడన్", m: "ఎర్ర తుమ్మెద", s: "Crowd" },
182
- { t: "సర్కార్", m: "నాశనం", s: "Crowd" },
183
- { t: "వజీర్", m: "ముసలి", s: "Crowd" },
184
- { t: "ఖైని", m: "వదిన", s: "Crowd" },
185
- { t: "సూన్", m: "కోడలు", s: "Crowd" },
186
- { t: "Poral batal", m: "Temple term (Keslapur)", s: "Crowd" },
187
- { t: "చోలోట్", m: "మంచి (Good)", s: "Crowd" },
188
- { t: "వంచెడ్ చిబడ్", m: "అంటు ముట్టుకోడం", s: "Crowd" },
189
- { t: "వడోగు", m: "దూడ (Calf)", s: "Crowd" },
190
- { t: "ముచిలి పడన్", m: "ఎర్ర తుమ్మెద", s: "Crowd" },
191
- { t: "సర్కార్", m: "నాశనం", s: "Crowd" },
192
- { t: "వజీర్", m: "ముసలి", s: "Crowd" },
193
- { t: "ఖైని", m: "వదిన", s: "Crowd" },
194
- { t: "సూన్", m: "కోడలు", s: "Crowd" },
195
- { t: "Poral batal", m: "Temple term (Keslapur)", s: "Crowd" },
196
  { t: "కోయంగ్", m: "Dialect/Language", s: "Gondi" }, { t: "పైలం", m: "Careful", s: "Mandalikalu" },
197
  { t: "ఆడ", m: "There", s: "General" }, { t: "కాకా", m: "Uncle", s: "Marathi Infl." },
198
  { t: "పటేల్", m: "Village Head", s: "Tribal" }, { t: "గూడ", m: "Hamlet", s: "Rural" },
@@ -238,12 +234,6 @@
238
  name: "Nizamabad", lat: 18.6725, lng: 78.0941, region: "Indur Agrarian",
239
  history: "Rich agricultural zone (Turmeric). Strong Dakhni Urdu influence from the Nizam era.",
240
  words: [
241
- { t: "పంపేవుడు", m: "పంపించడం", s: "Crowd" },
242
- { t: "Pillodu", m: "Bindu", s: "Crowd" },
243
- { t: "వచ్చిండు", m: "అచ్చిండు", s: "Crowd" },
244
- { t: "పంపేవుడు", m: "పంపించడం", s: "Crowd" },
245
- { t: "Pillodu", m: "Bindu", s: "Crowd" },
246
- { t: "వచ్చిండు", m: "అచ్చిండు", s: "Crowd" },
247
  { t: "పసుపు", m: "Turmeric", s: "Agri" }, { t: "ఐగలు", m: "Priest", s: "Mandalikalu" },
248
  { t: "హామీ", m: "Assurance", s: "Urdu Infl." }, { t: "జీరా", m: "Boundary", s: "Agri" },
249
  { t: "పుంటికూర", m: "Gongura", s: "Food" }, { t: "అంగడి", m: "Shop", s: "Rural" },
@@ -267,32 +257,6 @@
267
  name: "Karimnagar", lat: 18.4386, lng: 79.1288, region: "Cultural Core",
268
  history: "Considered the standard for 'Telangana Slang' in media. Sharp, distinct pronunciation.",
269
  words: [
270
- { t: "బూరెలు", m: "భక్ష్యాలు", s: "Crowd" },
271
- { t: "అచ్చినం", m: "వచ్చాము", s: "Crowd" },
272
- { t: "పాయినం", m: "వెళ్ళాము", s: "Crowd" },
273
- { t: "సవాలు", m: "Question/Challenge", s: "Crowd" },
274
- { t: "గటక", m: "Food item", s: "Crowd" },
275
- { t: "వస్తున్నావ", m: "వస్తున్నావు", s: "Crowd" },
276
- { t: "ఊశము", m: "బద్ధకం/అలసత్వం", s: "Crowd" },
277
- { t: "వందంగా ఉంది", m: "బాగా", s: "Crowd" },
278
- { t: "రువిడ్లు", m: "Shelf", s: "Crowd" },
279
- { t: "కార్యపాలు", m: "వస్తున్నం/పోతున్నాం", s: "Crowd" },
280
- { t: "బావి", m: "నూతి", s: "Crowd" },
281
- { t: "గంప", m: "గుల్ల", s: "Crowd" },
282
- { t: "బంతి", m: "Ball", s: "Crowd" },
283
- { t: "బూరెలు", m: "భక్ష్యాలు", s: "Crowd" },
284
- { t: "అచ్చినం", m: "వచ్చాము", s: "Crowd" },
285
- { t: "పాయినం", m: "వెళ్ళాము", s: "Crowd" },
286
- { t: "సవాలు", m: "Question/Challenge", s: "Crowd" },
287
- { t: "గటక", m: "Food item", s: "Crowd" },
288
- { t: "వస్తున్నావ", m: "వస్తున్నావు", s: "Crowd" },
289
- { t: "ఊశము", m: "బద్ధకం/అలసత్వం", s: "Crowd" },
290
- { t: "వందంగా ఉంది", m: "బాగా", s: "Crowd" },
291
- { t: "రువిడ్లు", m: "Shelf", s: "Crowd" },
292
- { t: "కార్యపాలు", m: "వస్తున్నం/పోతున్నాం", s: "Crowd" },
293
- { t: "బావి", m: "నూతి", s: "Crowd" },
294
- { t: "గంప", m: "గుల్ల", s: "Crowd" },
295
- { t: "బంతి", m: "Ball", s: "Crowd" },
296
  { t: "తోపు", m: "Great/Top", s: "Slang" }, { t: "కేక", m: "Super", s: "Slang" },
297
  { t: "లొల్లి", m: "Fight/Noise", s: "General" }, { t: "శాన", m: "Very", s: "Mandalikalu" },
298
  { t: "పైసల్", m: "Money", s: "General" }, { t: "గత్తర", m: "Mess", s: "Slang" },
@@ -315,10 +279,6 @@
315
  name: "Peddapalli", lat: 18.6146, lng: 79.3705, region: "Industrial Hub",
316
  history: "Home to NTPC and Coal mines. Vocabulary is a mix of rural and industrial English loan words.",
317
  words: [
318
- { t: "గుమ్ము", m: "Storage", s: "Crowd" },
319
- { t: "గట్టు", m: "దారి", s: "Crowd" },
320
- { t: "గుమ్ము", m: "Storage", s: "Crowd" },
321
- { t: "గట్టు", m: "దారి", s: "Crowd" },
322
  { t: "బొగ్గు", m: "Coal", s: "Mining" }, { t: "కరెంట్", m: "Power", s: "Utility" },
323
  { t: "క్వార్టర్", m: "Housing", s: "Industry" }, { t: "షిఫ్ట్", m: "Work Shift", s: "Labor" },
324
  { t: "గేట్", m: "Entrance", s: "General" }, { t: "పోరడు", m: "Boy", s: "General" },
@@ -342,16 +302,6 @@
342
  name: "Warangal", lat: 17.9689, lng: 79.5941, region: "Kakatiya Rural",
343
  history: "Historic Orugallu. Retains classical Telugu terms mixed with rural agricultural slang.",
344
  words: [
345
- { t: "చేను", m: "Crop/చలక", s: "Crowd" },
346
- { t: "పొయ్యం రారా", m: "ఇన్నానిల్లు", s: "Crowd" },
347
- { t: "అసుంట", m: "అటు వైపు", s: "Crowd" },
348
- { t: "ఇసుంట", m: "ఇటు వైపు", s: "Crowd" },
349
- { t: "చద్దెర", m: "Bed sheet", s: "Crowd" },
350
- { t: "చేను", m: "Crop/చలక", s: "Crowd" },
351
- { t: "పొయ్యం రారా", m: "ఇన్నానిల్లు", s: "Crowd" },
352
- { t: "అసుంట", m: "అటు వైపు", s: "Crowd" },
353
- { t: "ఇసుంట", m: "ఇటు వైపు", s: "Crowd" },
354
- { t: "చద్దెర", m: "Bed sheet", s: "Crowd" },
355
  { t: "చెల్క", m: "Field", s: "Agri" }, { t: "గ���్డపార", m: "Crowbar", s: "Tools" },
356
  { t: "నాగలి", m: "Plough", s: "Agri" }, { t: "ఎడ్లు", m: "Bulls", s: "Agri" },
357
  { t: "పంట", m: "Crop", s: "Agri" }, { t: "ఎరువ", m: "Fertilizer", s: "Agri" },
@@ -374,8 +324,6 @@
374
  name: "Jangaon", lat: 17.7226, lng: 79.1685, region: "Central Junction",
375
  history: "A crossroads district. Famous for Jatharas and rural festivals.",
376
  words: [
377
- { t: "ఏమైంది", m: "What happened", s: "Crowd" },
378
- { t: "ఏమైంది", m: "What happened", s: "Crowd" },
379
  { t: "గుట్ట", m: "Hillock", s: "Geo" }, { t: "జాతర", m: "Fair", s: "Culture" },
380
  { t: "బోనం", m: "Offering", s: "Ritual" }, { t: "సాక", m: "Branch", s: "Nature" },
381
  { t: "కోడి", m: "Chicken", s: "Food" }, { t: "మేక", m: "Goat", s: "Agri" },
@@ -398,10 +346,6 @@
398
  name: "Mahabubabad", lat: 17.5956, lng: 80.0053, region: "Tribal Corridor",
399
  history: "Strong Lambadi/Banjara tribal presence influences the local lexicon.",
400
  words: [
401
- { t: "బొచ్చెడు", m: "చాలా (A lot)", s: "Crowd" },
402
- { t: "ఏ మయింది అన్నా", m: "What happened", s: "Crowd" },
403
- { t: "బొచ్చెడు", m: "చాలా (A lot)", s: "Crowd" },
404
- { t: "ఏ మయింది అన్నా", m: "What happened", s: "Crowd" },
405
  { t: "తండా", m: "Hamlet", s: "Tribal" }, { t: "బంజారా", m: "Tribe", s: "Community" },
406
  { t: "గూడు", m: "Nest/Hut", s: "General" }, { t: "తవ్వు", m: "Dig", s: "Action" },
407
  { t: "పాట", m: "Song", s: "Culture" }, { t: "ఆట", m: "Dance/Play", s: "Culture" },
@@ -447,18 +391,6 @@
447
  name: "Mahabubnagar", lat: 16.7488, lng: 78.0035, region: "Palamuru",
448
  history: "Palamuru region. Known for migration (Valasa) and distinct, rougher intonation.",
449
  words: [
450
- { t: "వీధి", m: "Street", s: "Crowd" },
451
- { t: "జల్ది", m: "తొందరగా", s: "Crowd" },
452
- { t: "జింగిడి", m: "బర్రెల గుంపు", s: "Crowd" },
453
- { t: "బాగమ్", m: "Exhibition", s: "Crowd" },
454
- { t: "చలక", m: "Field", s: "Crowd" },
455
- { t: "ఈల పేట", m: "కత్తి పేట", s: "Crowd" },
456
- { t: "వీధి", m: "Street", s: "Crowd" },
457
- { t: "జల్ది", m: "తొందరగా", s: "Crowd" },
458
- { t: "జింగిడి", m: "బర్రెల గుంపు", s: "Crowd" },
459
- { t: "బాగమ్", m: "Exhibition", s: "Crowd" },
460
- { t: "చలక", m: "Field", s: "Crowd" },
461
- { t: "ఈల పేట", m: "కత్తి పేట", s: "Crowd" },
462
  { t: "పాలమూరు", m: "Mahabubnagar", s: "Place" }, { t: "వలస", m: "Migration", s: "Social" },
463
  { t: "కూలీ", m: "Laborer", s: "Social" }, { t: "అడ్డా", m: "Stand/Place", s: "Social" },
464
  { t: "అప్ప", m: "Father", s: "Seema Infl." }, { t: "అయ్య", m: "Father", s: "General" },
@@ -470,18 +402,6 @@
470
  name: "Nagarkurnool", lat: 16.4856, lng: 78.3305, region: "Nallamalla Zone",
471
  history: "Covers the Nallamalla forest. Chenchu tribal words are part of the local mix.",
472
  words: [
473
- { t: "అంబటాలు", m: "Morning meal time", s: "Crowd" },
474
- { t: "మంకర", m: "Winter cold", s: "Crowd" },
475
- { t: "లాడు", m: "తల్లి కూతురు", s: "Crowd" },
476
- { t: "గెనిమ", m: "పొలం గట్టు", s: "Crowd" },
477
- { t: "కోంత లోలు", m: "Old name for Nagar Kurnool", s: "Crowd" },
478
- { t: "బుడ్డల నూనె", m: "పల్లి oil (Peanut oil)", s: "Crowd" },
479
- { t: "అంబటాలు", m: "Morning meal time", s: "Crowd" },
480
- { t: "మంకర", m: "Winter cold", s: "Crowd" },
481
- { t: "లాడు", m: "తల్లి కూతురు", s: "Crowd" },
482
- { t: "గెనిమ", m: "పొలం గట్టు", s: "Crowd" },
483
- { t: "కోంత లోలు", m: "Old name for Nagar Kurnool", s: "Crowd" },
484
- { t: "బుడ్డల నూనె", m: "పల్లి oil (Peanut oil)", s: "Crowd" },
485
  { t: "నల్ల", m: "Black", s: "General" }, { t: "మళ్ళ", m: "Again", s: "General" },
486
  { t: "కొండ", m: "Hill", s: "Geo" }, { t: "వాగు", m: "Stream", s: "Geo" },
487
  { t: "చెంచు", m: "Tribe", s: "Community" }, { t: "తేనె", m: "Honey", s: "Forest" },
@@ -493,18 +413,6 @@
493
  name: "Wanaparthy", lat: 16.3621, lng: 78.0617, region: "Samsthanam",
494
  history: "A historic Samsthanam (Estate). The dialect reflects a feudal/royal past.",
495
  words: [
496
- { t: "చెప్పలకాయలు", m: "గొంకరకాయలు", s: "Crowd" },
497
- { t: "మలంచా", m: "చెంబు", s: "Crowd" },
498
- { t: "సొరకాయ", m: "ఆనకాయ", s: "Crowd" },
499
- { t: "పాశాల", m: "Clothes", s: "Crowd" },
500
- { t: "మట్టుగుండు", m: "Keep calm", s: "Crowd" },
501
- { t: "అంబరుంది", m: "Excellent", s: "Crowd" },
502
- { t: "చెప్పలకాయలు", m: "గొంకరకాయలు", s: "Crowd" },
503
- { t: "మలంచా", m: "చెంబు", s: "Crowd" },
504
- { t: "సొరకాయ", m: "ఆనకాయ", s: "Crowd" },
505
- { t: "పాశాల", m: "Clothes", s: "Crowd" },
506
- { t: "మట్టుగుండు", m: "Keep calm", s: "Crowd" },
507
- { t: "అంబరుంది", m: "Excellent", s: "Crowd" },
508
  { t: "సంస్థానం", m: "Estate", s: "History" }, { t: "రాజా", m: "King", s: "History" },
509
  { t: "కోట", m: "Fort", s: "History" }, { t: "బంగారు", m: "Golden", s: "General" },
510
  { t: "పట్టు", m: "Silk", s: "Textile" }, { t: "చీర", m: "Saree", s: "Textile" },
@@ -516,26 +424,6 @@
516
  name: "Jogulamba Gadwal", lat: 16.2343, lng: 77.7289, region: "River Doab",
517
  history: "Between Krishna and Tungabhadra rivers. Known for Handlooms and temples.",
518
  words: [
519
- { t: "ఓల్లి", m: "No", s: "Crowd" },
520
- { t: "కూడు తింటవా", m: "తిన్నారా", s: "Crowd" },
521
- { t: "తువ్వ", m: "ఎర్ర పొలం", s: "Crowd" },
522
- { t: "పురకోస", m: "జూట్ దార", s: "Crowd" },
523
- { t: "జుముజలమ్మ", m: "దేవత", s: "Crowd" },
524
- { t: "తలుగు ఎల్లమ్మ", m: "దేవత", s: "Crowd" },
525
- { t: "తెల్వది", m: "Don\'t know", s: "Crowd" },
526
- { t: "మడసంగ", m: "నెమ్మదిగా/జాగ్రత్తగా", s: "Crowd" },
527
- { t: "రప్పున", m: "జల్ది", s: "Crowd" },
528
- { t: "మడసంగ", m: "Careful", s: "Crowd" },
529
- { t: "ఓల్లి", m: "No", s: "Crowd" },
530
- { t: "కూడు తింటవా", m: "తిన్నారా", s: "Crowd" },
531
- { t: "తువ్వ", m: "ఎర్ర పొలం", s: "Crowd" },
532
- { t: "పురకోస", m: "జూట్ దార", s: "Crowd" },
533
- { t: "జుముజలమ్మ", m: "దేవత", s: "Crowd" },
534
- { t: "తలుగు ఎల్లమ్మ", m: "దేవత", s: "Crowd" },
535
- { t: "తెల్వది", m: "Don\'t know", s: "Crowd" },
536
- { t: "మడసంగ", m: "నెమ్మదిగా/జాగ్రత్తగా", s: "Crowd" },
537
- { t: "రప్పున", m: "జల్ది", s: "Crowd" },
538
- { t: "మడసంగ", m: "Careful", s: "Crowd" },
539
  { t: "నడుము", m: "Waist/Middle", s: "Body" }, { t: "గడ్డ", m: "Land/Bank", s: "Geo" },
540
  { t: "కృష్ణ", m: "River", s: "Geo" }, { t: "తుంగభద్ర", m: "River", s: "Geo" },
541
  { t: "పదిహేను", m: "Fifteen", s: "Standard" }, { t: "పదహైదు", m: "Fifteen", s: "Local" },
@@ -547,20 +435,6 @@
547
  name: "Narayanpet", lat: 16.7323, lng: 77.4988, region: "Karnataka Border",
548
  history: "Strong Kannada influence due to location. Cuisine terms (Rotti) are common.",
549
  words: [
550
- { t: "బుబ్బి", m: "అమ్మ", s: "Crowd" },
551
- { t: "పడం", m: "మట్టి", s: "Crowd" },
552
- { t: "చెముక్కలు", m: "మోకాళ్ళు", s: "Crowd" },
553
- { t: "మొర", m: "మంచం", s: "Crowd" },
554
- { t: "అబుత", m: "జుట్టు", s: "Crowd" },
555
- { t: "జేజి", m: "Fat", s: "Crowd" },
556
- { t: "��ంబలి", m: "జావ", s: "Crowd" },
557
- { t: "బుబ్బి", m: "అమ్మ", s: "Crowd" },
558
- { t: "పడం", m: "మట్టి", s: "Crowd" },
559
- { t: "చెముక్కలు", m: "మోకాళ్ళు", s: "Crowd" },
560
- { t: "మొర", m: "మంచం", s: "Crowd" },
561
- { t: "అబుత", m: "జుట్టు", s: "Crowd" },
562
- { t: "జేజి", m: "Fat", s: "Crowd" },
563
- { t: "అంబలి", m: "జావ", s: "Crowd" },
564
  { t: "పేట", m: "Town", s: "Suffix" }, { t: "చీర", m: "Saree", s: "Textile" },
565
  { t: "మగ్గ", m: "Loom", s: "Textile" }, { t: "బోర్డర్", m: "Border", s: "Geo" },
566
  { t: "కన్నడ", m: "Language", s: "Influence" }, { t: "రొట్టి", m: "Bread", s: "Food" },
@@ -572,32 +446,6 @@
572
  name: "Nalgonda", lat: 17.0577, lng: 79.2683, region: "Southern Plains",
573
  history: "Known for the Nalgonda movement. Dialect is direct, sharp, and iconic.",
574
  words: [
575
- { t: "Dupa aithundhi", m: "దాహం వేస్తుంది", s: "Crowd" },
576
- { t: "సేరు", m: "1kg measuring device", s: "Crowd" },
577
- { t: "Kurdedu Biyam", m: "Amount of rice", s: "Crowd" },
578
- { t: "Anglam dundu", m: "అగ్గి పెట్టె", s: "Crowd" },
579
- { t: "సది", m: "Take the box", s: "Crowd" },
580
- { t: "తట్ట", m: "పళ్ళెం", s: "Crowd" },
581
- { t: "కోవెల", m: "గుడి", s: "Crowd" },
582
- { t: "ఊసలు", m: "Weaving technique", s: "Crowd" },
583
- { t: "బువ్వ", m: "Cooked rice", s: "Crowd" },
584
- { t: "తవాచీ", m: "Shelf with doors", s: "Crowd" },
585
- { t: "తపుకు", m: "Plate on vessel", s: "Crowd" },
586
- { t: "లడ్లు", m: "అరిసెలు", s: "Crowd" },
587
- { t: "దారి", m: "బాట", s: "Crowd" },
588
- { t: "Dupa aithundhi", m: "దాహం వేస్తుంది", s: "Crowd" },
589
- { t: "సేరు", m: "1kg measuring device", s: "Crowd" },
590
- { t: "Kurdedu Biyam", m: "Amount of rice", s: "Crowd" },
591
- { t: "Anglam dundu", m: "అగ్గి పెట్టె", s: "Crowd" },
592
- { t: "సది", m: "Take the box", s: "Crowd" },
593
- { t: "తట్ట", m: "పళ్ళెం", s: "Crowd" },
594
- { t: "కోవెల", m: "గుడి", s: "Crowd" },
595
- { t: "ఊసలు", m: "Weaving technique", s: "Crowd" },
596
- { t: "బువ్వ", m: "Cooked rice", s: "Crowd" },
597
- { t: "తవాచీ", m: "Shelf with doors", s: "Crowd" },
598
- { t: "తపుకు", m: "Plate on vessel", s: "Crowd" },
599
- { t: "లడ్లు", m: "అరిసెలు", s: "Crowd" },
600
- { t: "దారి", m: "బాట", s: "Crowd" },
601
  { t: "నల్ల", m: "Black", s: "General" }, { t: "కొండ", m: "Hill", s: "Geo" },
602
  { t: "ఫ్లోరోసిస్", m: "Disease", s: "History" }, { t: "నీళ్ళు", m: "Water", s: "General" },
603
  { t: "బావి", m: "Well", s: "Agri" }, { t: "ఏడ", m: "Where", s: "Grammar" },
@@ -632,10 +480,6 @@
632
  name: "Medak", lat: 18.0487, lng: 78.2657, region: "Heritage West",
633
  history: "Historical seat of power. 'Metuku' (rice grain) is the etymological root.",
634
  words: [
635
- { t: "కీసా", m: "జేబు", s: "Crowd" },
636
- { t: "పైను", m: "ఆరు (Six)", s: "Crowd" },
637
- { t: "కీసా", m: "జేబు", s: "Crowd" },
638
- { t: "పైను", m: "ఆరు (Six)", s: "Crowd" },
639
  { t: "చర్చి", m: "Church", s: "Landmark" }, { t: "మెతుకు", m: "Rice Grain", s: "Etymology" },
640
  { t: "దుర్గం", m: "Fort", s: "History" }, { t: "కోట", m: "Fort", s: "History" },
641
  { t: "గడి", m: "Room", s: "Rural" }, { t: "సింహ", m: "Lion", s: "Art" },
@@ -658,28 +502,6 @@
658
  name: "Siddipet", lat: 18.1018, lng: 78.8520, region: "Political Hub",
659
  history: "A vibrant, politically active district. Home to Komuravelli Mallanna.",
660
  words: [
661
- { t: "అంగీ", m: "Shirt", s: "Crowd" },
662
- { t: "పొయ్యిర్రు", m: "వెళ్ళారు", s: "Crowd" },
663
- { t: "మెగులుతుంది", m: "వర్షం వచ్���ి ఆగిన", s: "Crowd" },
664
- { t: "అలుకురు", m: "Pre cultivation", s: "Crowd" },
665
- { t: "పయిలం", m: "జాగ్రత్త", s: "Crowd" },
666
- { t: "తప్పెలు", m: "Rice plate", s: "Crowd" },
667
- { t: "పందిట్లు", m: "పందిరి", s: "Crowd" },
668
- { t: "రాకొచ్చింది", m: "రాదు", s: "Crowd" },
669
- { t: "పోకొచ్చింది", m: "పోదు", s: "Crowd" },
670
- { t: "కుకో", m: "కూర్చో", s: "Crowd" },
671
- { t: "ఏడారు", m: "Afternoon time", s: "Crowd" },
672
- { t: "అంగీ", m: "Shirt", s: "Crowd" },
673
- { t: "పొయ్యిర్రు", m: "వెళ్ళారు", s: "Crowd" },
674
- { t: "మెగులుతుంది", m: "వర్షం వచ్చి ఆగిన", s: "Crowd" },
675
- { t: "అలుకురు", m: "Pre cultivation", s: "Crowd" },
676
- { t: "పయిలం", m: "జాగ్రత్త", s: "Crowd" },
677
- { t: "తప్పెలు", m: "Rice plate", s: "Crowd" },
678
- { t: "పందిట్లు", m: "పందిరి", s: "Crowd" },
679
- { t: "రాకొచ్చింది", m: "రాదు", s: "Crowd" },
680
- { t: "పోకొచ్చింది", m: "పోదు", s: "Crowd" },
681
- { t: "కుకో", m: "కూర్చో", s: "Crowd" },
682
- { t: "ఏడారు", m: "Afternoon time", s: "Crowd" },
683
  { t: "కోటి", m: "Monkey", s: "Local" }, { t: "మల్లన్న", m: "God Name", s: "Religion" },
684
  { t: "పట్నం", m: "City", s: "General" }, { t: "చెరువు", m: "Lake", s: "Geo" },
685
  { t: "బతుకమ్మ", m: "Festival", s: "Culture" }, { t: "పూలు", m: "Flowers", s: "Nature" },
@@ -691,16 +513,6 @@
691
  name: "Rangareddy", lat: 17.3457, lng: 78.5522, region: "Peri-Urban",
692
  history: "Surrounds Hyderabad. Mix of rural farms and real estate boom vocabulary.",
693
  words: [
694
- { t: "వీరునో", m: "తెలుగు", s: "Crowd" },
695
- { t: "తొక్కుడు", m: "మంచం", s: "Crowd" },
696
- { t: "మూర", m: "ముంగిలి", s: "Crowd" },
697
- { t: "కారం", m: "పచ్చడి", s: "Crowd" },
698
- { t: "ఈ గడ", m: "కడ", s: "Crowd" },
699
- { t: "వీరునో", m: "తెలుగు", s: "Crowd" },
700
- { t: "తొక్కుడు", m: "మంచం", s: "Crowd" },
701
- { t: "మూర", m: "ముంగిలి", s: "Crowd" },
702
- { t: "కారం", m: "పచ్చడి", s: "Crowd" },
703
- { t: "ఈ గడ", m: "కడ", s: "Crowd" },
704
  { t: "ఎయిర్పోర్ట్", m: "Airport", s: "Infra" }, { t: "ఫ్లైట్", m: "Plane", s: "Transport" },
705
  { t: "రియల్ ఎస్టేట్", m: "Land Biz", s: "Biz" }, { t: "ప్లాట్", m: "Plot", s: "Biz" },
706
  { t: "రేటు", m: "Price", s: "Biz" }, { t: "మచ్చ", m: "Friend", s: "Slang" },
@@ -734,28 +546,6 @@
734
  name: "Hyderabad", lat: 17.3850, lng: 78.4867, region: "Capital",
735
  history: "The historic capital. Famous for the unique Dakhni-Telugu fusion dialect.",
736
  words: [
737
- { t: "కిటికీ", m: "Window", s: "Crowd" },
738
- { t: "అంగీ", m: "Shirt", s: "Crowd" },
739
- { t: "కుక్క", m: "Dog", s: "Crowd" },
740
- { t: "కుర్చీ", m: "Chair", s: "Crowd" },
741
- { t: "Amma buvva pettava", m: "Mother feed me", s: "Crowd" },
742
- { t: "Chaderghat", m: "Location", s: "Crowd" },
743
- { t: "తొవ్వ దారి", m: "Way/Path", s: "Crowd" },
744
- { t: "పాతాళగరిసె", m: "Tool to remove bucket", s: "Crowd" },
745
- { t: "అంబటాలు", m: "Afternoon time", s: "Crowd" },
746
- { t: "ఇన్సురాయి", m: "Stone tool", s: "Crowd" },
747
- { t: "బుక్కెట్", m: "Tool for well", s: "Crowd" },
748
- { t: "కిటికీ", m: "Window", s: "Crowd" },
749
- { t: "అంగీ", m: "Shirt", s: "Crowd" },
750
- { t: "కుక్క", m: "Dog", s: "Crowd" },
751
- { t: "కుర్చీ", m: "Chair", s: "Crowd" },
752
- { t: "Amma buvva pettava", m: "Mother feed me", s: "Crowd" },
753
- { t: "Chaderghat", m: "Location", s: "Crowd" },
754
- { t: "తొవ్వ దారి", m: "Way/Path", s: "Crowd" },
755
- { t: "పాతాళగరిసె", m: "Tool to remove bucket", s: "Crowd" },
756
- { t: "అంబటాలు", m: "Afternoon time", s: "Crowd" },
757
- { t: "ఇన్సురాయి", m: "Stone tool", s: "Crowd" },
758
- { t: "బుక్కెట్", m: "Tool for well", s: "Crowd" },
759
  { t: "కైకు", m: "Why", s: "Dakhni" }, { t: "నక్కో", m: "No", s: "Dakhni" },
760
  { t: "హౌ", m: "Yes", s: "Dakhni" }, { t: "బైగన్", m: "Useless", s: "Slang" },
761
  { t: "చిచ్చా", m: "Uncle", s: "Slang" }, { t: "పోట్టి", m: "Girl", s: "Slang" },
@@ -765,162 +555,537 @@
765
  }
766
  ];
767
 
768
- // --- 1.5. DYNAMIC DATA LOADING & MERGING ---
769
-
770
- // AP District Coordinate Mapping
771
- const AP_COORDINATES = {
772
- "Alluri Sitharama Raju": { "lat": 17.7000, "lng": 81.9000, "region": "Coastal Andhra", "history": "Named after the legendary freedom fighter; a hub of tribal culture and the Rampa Rebellion." },
773
- "Anakapalli": { "lat": 17.6913, "lng": 83.0039, "region": "Coastal Andhra", "history": "Historical Buddhist site (Bojjanakonda) and a major center for the jaggery trade." },
774
- "Anantapur": { "lat": 14.6856, "lng": 77.6006, "region": "Rayalaseema", "history": "Ancient cultural zone with Kannada and Marathi influences; home to the Gooty Fort." },
775
- "Annamayya": { "lat": 13.9744, "lng": 78.9647, "region": "Rayalaseema", "history": "Named after the saint-poet Tallapaka Annamacharya; rich in spiritual and forest heritage." },
776
- "Bapatla": { "lat": 15.9045, "lng": 80.4682, "region": "Coastal Andhra", "history": "Known for its historical Suryalanka beach and prominent educational institutions since the British era." },
777
- "Chittoor": { "lat": 13.2172, "lng": 79.1003, "region": "Rayalaseema", "history": "A major gateway to South India with deep links to the Vijayanagara Empire." },
778
- "Dr. B.R. Ambedkar Konaseema": { "lat": 16.6360, "lng": 81.9961, "region": "Coastal Andhra", "history": "The 'Kerala of Andhra'; a lush delta region known for Vedic culture and coconut groves." },
779
- "East Godavari": { "lat": 17.0005, "lng": 81.7729, "region": "Coastal Andhra", "history": "The rice bowl of AP; historically a cultural epicenter of the Telugu language." },
780
- "Eluru": { "lat": 16.7107, "lng": 81.1018, "region": "Coastal Andhra", "history": "Former Buddhist center and capital of the Vengi dynasty." },
781
- "Guntur": { "lat": 16.3067, "lng": 80.4365, "region": "Coastal Andhra", "history": "Ancient seat of learning (Amaravati) and a global hub for the spice trade." },
782
- "Kakinada": { "lat": 16.9891, "lng": 82.2475, "region": "Coastal Andhra", "history": "Known as the 'Pensioner's Paradise'; a key port city during the Dutch and British eras." },
783
- "Konaseema": { "lat": 16.5000, "lng": 82.0000, "region": "Coastal Andhra", "history": "Famous for its lush greenery and traditional Brahminical scholarship." },
784
- "Krishna": { "lat": 16.1800, "lng": 81.1300, "region": "Coastal Andhra", "history": "Named after the sacred river; the heartland of the Kuchipudi dance form." },
785
- "Kurnool": { "lat": 15.8281, "lng": 78.0373, "region": "Rayalaseema", "history": "The first capital of Andhra State (1953-1956) and home to the Konda Reddy Fort." },
786
- "Nandyal": { "lat": 15.4811, "lng": 78.4862, "region": "Rayalaseema", "history": "Surrounded by the 'Nava Nandulu' temples and a gateway to the Nallamala forests." },
787
- "NTR": { "lat": 16.5062, "lng": 80.6480, "region": "Coastal Andhra", "history": "Named after the legendary actor-politician N.T. Rama Rao; encompasses the bustling city of Vijayawada." },
788
- "Palnadu": { "lat": 16.2900, "lng": 79.9100, "region": "Coastal Andhra", "history": "Famous for the historic 'Battle of Palnadu' often compared to the Mahabharata." },
789
- "Parvathipuram Manyam": { "lat": 18.7781, "lng": 83.4219, "region": "Coastal Andhra", "history": "A tribal-dominated hill region with rich folk traditions and forest history." },
790
- "Prakasam": { "lat": 15.5057, "lng": 80.0493, "region": "Coastal Andhra", "history": "Named after Tanguturi Prakasam Pantulu; contains ancient Buddhist sites and Motupalli port." },
791
- "Sri Potti Sriramulu Nellore": { "lat": 14.4426, "lng": 79.9865, "region": "Coastal Andhra", "history": "Home to the Satish Dhawan Space Centre and historically famous for its mica mines." },
792
- "Sri Sathya Sai": { "lat": 14.1670, "lng": 77.8111, "region": "Rayalaseema", "history": "Named after the spiritual leader Sathya Sai Baba; includes the spiritual hub of Puttaparthi." },
793
- "Srikakulam": { "lat": 18.2949, "lng": 83.8938, "region": "Coastal Andhra", "history": "Ancient land of the Kalinga Empire with prominent sun temples and Buddhist ruins." },
794
- "Tirupati": { "lat": 13.6288, "lng": 79.4192, "region": "Rayalaseema", "history": "The spiritual capital of AP; home to the world-famous Lord Venkateswara Temple." },
795
- "Visakhapatnam": { "lat": 17.6868, "lng": 83.2185, "region": "Coastal Andhra", "history": "A major naval center and historical port known as the 'City of Destiny'." },
796
- "Vizianagaram": { "lat": 18.1124, "lng": 83.3956, "region": "Coastal Andhra", "history": "Meaning 'City of Victory'; historically ruled by the Pusapati Rajas." },
797
- "West Godavari": { "lat": 16.7110, "lng": 81.5230, "region": "Coastal Andhra", "history": "A prosperous agricultural region known for its extensive canal system and Kolleru Lake." },
798
- "YSR Kadapa": { "lat": 14.4673, "lng": 78.8242, "region": "Rayalaseema", "history": "Heart of the Rayalaseema region; home to the Gandikota canyon and rich mineral deposits." }
799
- };
800
-
801
- async function loadAndMergeDynamicData() {
802
- try {
803
- // Load processed_dialects.json
804
- const response1 = await fetch('data/processed/processed_dialects.json');
805
- if (response1.ok) {
806
- const dynamicDistricts = await response1.json();
807
- console.log(`✓ Loaded ${dynamicDistricts.length} districts from processed_dialects.json`);
808
-
809
- dynamicDistricts.forEach(dynamicDistrict => {
810
- const existingDistrict = dialectData.find(d => d.name === dynamicDistrict.name);
811
-
812
- if (existingDistrict) {
813
- console.log(` → Enhancing ${dynamicDistrict.name} with ${dynamicDistrict.words.length} additional words`);
814
- existingDistrict.words = [...existingDistrict.words, ...dynamicDistrict.words];
815
- } else {
816
- console.log(` → Adding new district: ${dynamicDistrict.name} with ${dynamicDistrict.words.length} words`);
817
- dialectData.push(dynamicDistrict);
818
- }
819
- });
820
- }
821
-
822
- // Load digiwords_grouped.json
823
- const response2 = await fetch('data/processed/digiwords_grouped.json');
824
- if (response2.ok) {
825
- const digiwords = await response2.json();
826
-
827
- // Process both Telangana and Andhra Pradesh districts
828
- ['Telangana', 'Andhra Pradesh'].forEach(state => {
829
- const stateDistricts = digiwords[state] || {};
830
- console.log(`\n✓ Processing ${Object.keys(stateDistricts).length} districts from ${state}`);
831
-
832
- Object.entries(stateDistricts).forEach(([districtName, wordsArray]) => {
833
- const existingDistrict = dialectData.find(d => d.name === districtName);
834
-
835
- if (existingDistrict) {
836
- // Merge words into existing district
837
- console.log(` → Merging ${wordsArray.length} words into ${districtName}`);
838
- existingDistrict.words = [...existingDistrict.words, ...wordsArray];
839
- } else {
840
- // Create new district for AP (Telangana districts should already exist)
841
- const coords = AP_COORDINATES[districtName];
842
- if (coords) {
843
- const newDistrict = {
844
- name: districtName,
845
- lat: coords.lat,
846
- lng: coords.lng,
847
- region: coords.region,
848
- history: coords.history,
849
- words: wordsArray
850
- };
851
- console.log(` → Adding new AP district: ${districtName} with ${wordsArray.length} words`);
852
- dialectData.push(newDistrict);
853
- } else {
854
- console.warn(` ⚠ Skipping ${districtName}: No coordinates found`);
855
- }
856
- }
857
- });
858
- });
859
- }
860
-
861
- console.log(`\n✅ Total districts loaded: ${dialectData.length}`);
862
-
863
- } catch (error) {
864
- console.error('Error loading dynamic data:', error);
865
- console.log('Continuing with hardcoded data only.');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
866
  }
867
- }
 
 
 
868
 
869
  // --- 2. MAP SETUP ---
870
- // Initialize map after data is loaded
871
- let map;
872
-
873
- async function initializeMap() {
874
- // Load dynamic data first
875
- await loadAndMergeDynamicData();
876
-
877
- // Update district counter
878
- const telanganaCount = dialectData.filter(d => !AP_COORDINATES[d.name]).length;
879
- const apCount = dialectData.filter(d => AP_COORDINATES[d.name]).length;
880
- document.getElementById('district-counter').textContent =
881
- `Telangana: ${telanganaCount} Andhra Pradesh: ${apCount} • Total: ${dialectData.length} Districts`;
882
-
883
- // Center map to show both Telangana and Andhra Pradesh
884
- map = L.map('map').setView([16.5, 79.8], 6.5);
885
-
886
- L.tileLayer('https://{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}{r}.png', {
887
- attribution: '&copy; OSM contributors'
888
- }).addTo(map);
889
-
890
- // --- 3. MARKERS & INTERACTION ---
891
- const sidebarPanel = document.getElementById('info-panel');
892
-
893
- // Red Marker Style
894
- const redIcon = L.divIcon({
895
- className: 'custom-marker',
896
- html: '📍',
897
- iconSize: [30, 30],
898
- iconAnchor: [15, 30]
899
- });
900
 
901
- dialectData.forEach(d => {
902
- const marker = L.marker([d.lat, d.lng], { icon: redIcon }).addTo(map);
 
903
 
904
- // Hover Label
905
- marker.bindTooltip(`<b>${d.name}</b>`, { direction: 'top', offset: [0, -5] });
906
 
907
- // Click Action
908
- marker.on('click', () => {
909
- map.flyTo([d.lat, d.lng], 9, { duration: 1.2 });
910
- updateSidebar(d);
911
- });
912
  });
 
913
 
914
- function updateSidebar(data) {
915
- const rows = data.words.map(w => `
 
 
 
 
 
 
916
  <tr>
917
  <td class="telugu-word">${w.t}</td>
918
  <td>${w.m}</td>
919
- <td style="color:#777; font-size:0.7rem;">${w.s}</td>
920
  </tr>
921
- `).join('');
 
922
 
923
- sidebarPanel.innerHTML = `
924
  <div style="animation:fadeIn 0.4s;">
925
  <h2 class="district-title">${data.name}</h2>
926
  <span class="region-tag">${data.region}</span>
@@ -931,11 +1096,7 @@
931
  </table>
932
  </div>
933
  `;
934
- }
935
  }
936
-
937
- // Start the application
938
- initializeMap();
939
  </script>
940
  </body>
941
 
 
4
  <head>
5
  <meta charset="UTF-8">
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
7
+ <title>Telugu States Digital Dialect Map</title>
8
 
9
  <link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css"
10
  integrity="sha256-p4NxAoJBhIIN+hmNHrzRCf9tD/miZyoHS5obTRR9BMY=" crossorigin="" />
 
122
  font-size: 0.95rem;
123
  }
124
 
125
+ /* Hyperlink Styles */
126
+ .source-link {
127
+ color: #3498db;
128
+ text-decoration: none;
129
+ font-size: 0.75rem;
130
+ border-bottom: 1px dotted #3498db;
131
+ }
132
+
133
+ .source-link:hover {
134
+ color: #2980b9;
135
+ border-bottom: 1px solid #2980b9;
136
+ }
137
+
138
  #map {
139
  flex-grow: 1;
140
  height: 100%;
 
164
 
165
  <div id="sidebar">
166
  <div class="header">
167
+ <h1>Telugu States Dialect Map</h1>
168
+ <p>Verified Data • Telangana & Andhra Pradesh</p>
169
  </div>
170
  <div id="info-panel">
171
  <div style="text-align: center; color: #888; margin-top: 60px;">
 
181
  integrity="sha256-20nQCchB9co0qIjJZRGuk2/Z9VM+kNiyxNV1lvTlZBo=" crossorigin=""></script>
182
 
183
  <script>
184
+ // --- 1. THE DATA ---
185
+
186
+ const Telangana_Data = [
187
  // === NORTHERN TELANGANA ===
188
  {
189
  name: "Adilabad", lat: 19.6641, lng: 78.5320, region: "Northern Forest",
190
  history: "Heavily influenced by Gondi tribal dialects and Marathi due to the Maharashtra border.",
191
  words: [
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
192
  { t: "కోయంగ్", m: "Dialect/Language", s: "Gondi" }, { t: "పైలం", m: "Careful", s: "Mandalikalu" },
193
  { t: "ఆడ", m: "There", s: "General" }, { t: "కాకా", m: "Uncle", s: "Marathi Infl." },
194
  { t: "పటేల్", m: "Village Head", s: "Tribal" }, { t: "గూడ", m: "Hamlet", s: "Rural" },
 
234
  name: "Nizamabad", lat: 18.6725, lng: 78.0941, region: "Indur Agrarian",
235
  history: "Rich agricultural zone (Turmeric). Strong Dakhni Urdu influence from the Nizam era.",
236
  words: [
 
 
 
 
 
 
237
  { t: "పసుపు", m: "Turmeric", s: "Agri" }, { t: "ఐగలు", m: "Priest", s: "Mandalikalu" },
238
  { t: "హామీ", m: "Assurance", s: "Urdu Infl." }, { t: "జీరా", m: "Boundary", s: "Agri" },
239
  { t: "పుంటికూర", m: "Gongura", s: "Food" }, { t: "అంగడి", m: "Shop", s: "Rural" },
 
257
  name: "Karimnagar", lat: 18.4386, lng: 79.1288, region: "Cultural Core",
258
  history: "Considered the standard for 'Telangana Slang' in media. Sharp, distinct pronunciation.",
259
  words: [
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
260
  { t: "తోపు", m: "Great/Top", s: "Slang" }, { t: "కేక", m: "Super", s: "Slang" },
261
  { t: "లొల్లి", m: "Fight/Noise", s: "General" }, { t: "శాన", m: "Very", s: "Mandalikalu" },
262
  { t: "పైసల్", m: "Money", s: "General" }, { t: "గత్తర", m: "Mess", s: "Slang" },
 
279
  name: "Peddapalli", lat: 18.6146, lng: 79.3705, region: "Industrial Hub",
280
  history: "Home to NTPC and Coal mines. Vocabulary is a mix of rural and industrial English loan words.",
281
  words: [
 
 
 
 
282
  { t: "బొగ్గు", m: "Coal", s: "Mining" }, { t: "కరెంట్", m: "Power", s: "Utility" },
283
  { t: "క్వార్టర్", m: "Housing", s: "Industry" }, { t: "షిఫ్ట్", m: "Work Shift", s: "Labor" },
284
  { t: "గేట్", m: "Entrance", s: "General" }, { t: "పోరడు", m: "Boy", s: "General" },
 
302
  name: "Warangal", lat: 17.9689, lng: 79.5941, region: "Kakatiya Rural",
303
  history: "Historic Orugallu. Retains classical Telugu terms mixed with rural agricultural slang.",
304
  words: [
 
 
 
 
 
 
 
 
 
 
305
  { t: "చెల్క", m: "Field", s: "Agri" }, { t: "గ���్డపార", m: "Crowbar", s: "Tools" },
306
  { t: "నాగలి", m: "Plough", s: "Agri" }, { t: "ఎడ్లు", m: "Bulls", s: "Agri" },
307
  { t: "పంట", m: "Crop", s: "Agri" }, { t: "ఎరువ", m: "Fertilizer", s: "Agri" },
 
324
  name: "Jangaon", lat: 17.7226, lng: 79.1685, region: "Central Junction",
325
  history: "A crossroads district. Famous for Jatharas and rural festivals.",
326
  words: [
 
 
327
  { t: "గుట్ట", m: "Hillock", s: "Geo" }, { t: "జాతర", m: "Fair", s: "Culture" },
328
  { t: "బోనం", m: "Offering", s: "Ritual" }, { t: "సాక", m: "Branch", s: "Nature" },
329
  { t: "కోడి", m: "Chicken", s: "Food" }, { t: "మేక", m: "Goat", s: "Agri" },
 
346
  name: "Mahabubabad", lat: 17.5956, lng: 80.0053, region: "Tribal Corridor",
347
  history: "Strong Lambadi/Banjara tribal presence influences the local lexicon.",
348
  words: [
 
 
 
 
349
  { t: "తండా", m: "Hamlet", s: "Tribal" }, { t: "బంజారా", m: "Tribe", s: "Community" },
350
  { t: "గూడు", m: "Nest/Hut", s: "General" }, { t: "తవ్వు", m: "Dig", s: "Action" },
351
  { t: "పాట", m: "Song", s: "Culture" }, { t: "ఆట", m: "Dance/Play", s: "Culture" },
 
391
  name: "Mahabubnagar", lat: 16.7488, lng: 78.0035, region: "Palamuru",
392
  history: "Palamuru region. Known for migration (Valasa) and distinct, rougher intonation.",
393
  words: [
 
 
 
 
 
 
 
 
 
 
 
 
394
  { t: "పాలమూరు", m: "Mahabubnagar", s: "Place" }, { t: "వలస", m: "Migration", s: "Social" },
395
  { t: "కూలీ", m: "Laborer", s: "Social" }, { t: "అడ్డా", m: "Stand/Place", s: "Social" },
396
  { t: "అప్ప", m: "Father", s: "Seema Infl." }, { t: "అయ్య", m: "Father", s: "General" },
 
402
  name: "Nagarkurnool", lat: 16.4856, lng: 78.3305, region: "Nallamalla Zone",
403
  history: "Covers the Nallamalla forest. Chenchu tribal words are part of the local mix.",
404
  words: [
 
 
 
 
 
 
 
 
 
 
 
 
405
  { t: "నల్ల", m: "Black", s: "General" }, { t: "మళ్ళ", m: "Again", s: "General" },
406
  { t: "కొండ", m: "Hill", s: "Geo" }, { t: "వాగు", m: "Stream", s: "Geo" },
407
  { t: "చెంచు", m: "Tribe", s: "Community" }, { t: "తేనె", m: "Honey", s: "Forest" },
 
413
  name: "Wanaparthy", lat: 16.3621, lng: 78.0617, region: "Samsthanam",
414
  history: "A historic Samsthanam (Estate). The dialect reflects a feudal/royal past.",
415
  words: [
 
 
 
 
 
 
 
 
 
 
 
 
416
  { t: "సంస్థానం", m: "Estate", s: "History" }, { t: "రాజా", m: "King", s: "History" },
417
  { t: "కోట", m: "Fort", s: "History" }, { t: "బంగారు", m: "Golden", s: "General" },
418
  { t: "పట్టు", m: "Silk", s: "Textile" }, { t: "చీర", m: "Saree", s: "Textile" },
 
424
  name: "Jogulamba Gadwal", lat: 16.2343, lng: 77.7289, region: "River Doab",
425
  history: "Between Krishna and Tungabhadra rivers. Known for Handlooms and temples.",
426
  words: [
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
427
  { t: "నడుము", m: "Waist/Middle", s: "Body" }, { t: "గడ్డ", m: "Land/Bank", s: "Geo" },
428
  { t: "కృష్ణ", m: "River", s: "Geo" }, { t: "తుంగభద్ర", m: "River", s: "Geo" },
429
  { t: "పదిహేను", m: "Fifteen", s: "Standard" }, { t: "పదహైదు", m: "Fifteen", s: "Local" },
 
435
  name: "Narayanpet", lat: 16.7323, lng: 77.4988, region: "Karnataka Border",
436
  history: "Strong Kannada influence due to location. Cuisine terms (Rotti) are common.",
437
  words: [
 
 
 
 
 
 
 
 
 
 
 
 
 
 
438
  { t: "పేట", m: "Town", s: "Suffix" }, { t: "చీర", m: "Saree", s: "Textile" },
439
  { t: "మగ్గ", m: "Loom", s: "Textile" }, { t: "బోర్డర్", m: "Border", s: "Geo" },
440
  { t: "కన్నడ", m: "Language", s: "Influence" }, { t: "రొట్టి", m: "Bread", s: "Food" },
 
446
  name: "Nalgonda", lat: 17.0577, lng: 79.2683, region: "Southern Plains",
447
  history: "Known for the Nalgonda movement. Dialect is direct, sharp, and iconic.",
448
  words: [
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
449
  { t: "నల్ల", m: "Black", s: "General" }, { t: "కొండ", m: "Hill", s: "Geo" },
450
  { t: "ఫ్లోరోసిస్", m: "Disease", s: "History" }, { t: "నీళ్ళు", m: "Water", s: "General" },
451
  { t: "బావి", m: "Well", s: "Agri" }, { t: "ఏడ", m: "Where", s: "Grammar" },
 
480
  name: "Medak", lat: 18.0487, lng: 78.2657, region: "Heritage West",
481
  history: "Historical seat of power. 'Metuku' (rice grain) is the etymological root.",
482
  words: [
 
 
 
 
483
  { t: "చర్చి", m: "Church", s: "Landmark" }, { t: "మెతుకు", m: "Rice Grain", s: "Etymology" },
484
  { t: "దుర్గం", m: "Fort", s: "History" }, { t: "కోట", m: "Fort", s: "History" },
485
  { t: "గడి", m: "Room", s: "Rural" }, { t: "సింహ", m: "Lion", s: "Art" },
 
502
  name: "Siddipet", lat: 18.1018, lng: 78.8520, region: "Political Hub",
503
  history: "A vibrant, politically active district. Home to Komuravelli Mallanna.",
504
  words: [
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
505
  { t: "కోటి", m: "Monkey", s: "Local" }, { t: "మల్లన్న", m: "God Name", s: "Religion" },
506
  { t: "పట్నం", m: "City", s: "General" }, { t: "చెరువు", m: "Lake", s: "Geo" },
507
  { t: "బతుకమ్మ", m: "Festival", s: "Culture" }, { t: "పూలు", m: "Flowers", s: "Nature" },
 
513
  name: "Rangareddy", lat: 17.3457, lng: 78.5522, region: "Peri-Urban",
514
  history: "Surrounds Hyderabad. Mix of rural farms and real estate boom vocabulary.",
515
  words: [
 
 
 
 
 
 
 
 
 
 
516
  { t: "ఎయిర్పోర్ట్", m: "Airport", s: "Infra" }, { t: "ఫ్లైట్", m: "Plane", s: "Transport" },
517
  { t: "రియల్ ఎస్టేట్", m: "Land Biz", s: "Biz" }, { t: "ప్లాట్", m: "Plot", s: "Biz" },
518
  { t: "రేటు", m: "Price", s: "Biz" }, { t: "మచ్చ", m: "Friend", s: "Slang" },
 
546
  name: "Hyderabad", lat: 17.3850, lng: 78.4867, region: "Capital",
547
  history: "The historic capital. Famous for the unique Dakhni-Telugu fusion dialect.",
548
  words: [
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
549
  { t: "కైకు", m: "Why", s: "Dakhni" }, { t: "నక్కో", m: "No", s: "Dakhni" },
550
  { t: "హౌ", m: "Yes", s: "Dakhni" }, { t: "బైగన్", m: "Useless", s: "Slang" },
551
  { t: "చిచ్చా", m: "Uncle", s: "Slang" }, { t: "పోట్టి", m: "Girl", s: "Slang" },
 
555
  }
556
  ];
557
 
558
+ const andhraData = [
559
+ // === UTTARANDHRA REGION ===
560
+ {
561
+ name: "Srikakulam",
562
+ lat: 18.2949, lng: 83.8938,
563
+ region: "Kalingandhra",
564
+ history: "Bordering Odisha, this dialect (Srikakulam Mandalikam) is distinct with 'Elugu' sounds and Odiya influence. It preserves archaic Telugu forms.",
565
+ words: [
566
+ { t: "ఎలుగు", m: "Bear", s: "Local Usage", l: "https://en.wikipedia.org/wiki/Srikakulam_district" },
567
+ { t: "బయ", m: "Fear", s: "Mandalikalu", l: "https://archive.org/details/mandalikalu_vol1" },
568
+ { t: "కాడ", m: "Stalk/Stick", s: "Agri", l: "https://andhrabharati.com" },
569
+ { t: "మునగాకు", m: "Drumstick Leaf", s: "Food", l: "https://andhrabharati.com" },
570
+ { t: "పైడి", m: "Gold/Money", s: "Community", l: "https://en.wikipedia.org/wiki/Paidi" },
571
+ { t: "దొర", m: "Lord/Master", s: "Caste Title", l: "https://en.wikipedia.org/wiki/Velama" },
572
+ { t: "వలి", m: "Wind", s: "Nature", l: "https://andhrabharati.com" },
573
+ { t: "నీళ్ళు", m: "Water (Neellu)", s: "General", l: "https://andhrabharati.com" },
574
+ { t: "బువ్వ", m: "Rice", s: "Food", l: "https://andhrabharati.com" },
575
+ { t: "అమ్మోరు", m: "Goddess", s: "Religion", l: "https://en.wikipedia.org/wiki/Gramadevata" }
576
+ ]
577
+ },
578
+ {
579
+ name: "Vizianagaram",
580
+ lat: 18.1067, lng: 83.3956,
581
+ region: "Kalingandhra",
582
+ history: "A hub of education and culture (Vidyanagaram). The dialect is soft, musical, and heavily influenced by the Gajapati kingdom's history.",
583
+ words: [
584
+ { t: "గెడ్డ", m: "Buffalo", s: "Rural", l: "https://andhrabharati.com" },
585
+ { t: "సరే", m: "Okay", s: "Common", l: "https://en.wiktionary.org/wiki/sare" },
586
+ { t: "ఆయ", m: "Yes", s: "Uttarandhra", l: "https://en.wiktionary.org/wiki/avunu" },
587
+ { t: "పులస", m: "Hilsa Fish", s: "Food", l: "https://en.wikipedia.org/wiki/Tenualosa_ilisha" },
588
+ { t: "తోట", m: "Garden/Farm", s: "Agri", l: "https://andhrabharati.com" },
589
+ { t: "అయ్య", m: "Father", s: "Relations", l: "https://andhrabharati.com" },
590
+ { t: "కోడి", m: "Chicken", s: "Food", l: "https://andhrabharati.com" },
591
+ { t: "పండుగ", m: "Festival", s: "Culture", l: "https://en.wikipedia.org/wiki/Sankranti" },
592
+ { t: "గుడి", m: "Temple", s: "Religion", l: "https://en.wikipedia.org/wiki/Hindu_temple" },
593
+ { t: "ఊరు", m: "Village", s: "General", l: "https://en.wikipedia.org/wiki/Village" }
594
+ ]
595
+ },
596
+ {
597
+ name: "Parvathipuram Manyam",
598
+ lat: 18.7800, lng: 83.4300,
599
+ region: "Manyam (Tribal)",
600
+ history: "Carved from Vizianagaram/Srikakulam. Heavily tribal (Savara/Jatapu) population. 'Manyam' refers to the forest/hill region.",
601
+ words: [
602
+ { t: "బిరింద", m: "Family/Clan", s: "Savara Tribe", l: "http://s3-ap-southeast-1.amazonaws.com/ijmer/pdf/volume10/volume10-issue12(2)/1.pdf" },
603
+ { t: "గూడ", m: "Hamlet", s: "Savara/Jatapu", l: "http://s3-ap-southeast-1.amazonaws.com/ijmer/pdf/volume10/volume10-issue12(2)/1.pdf" },
604
+ { t: "సవర", m: "Tribe Name", s: "Community", l: "https://en.wikipedia.org/wiki/Sora_people" },
605
+ { t: "జాతాపు", m: "Tribe Name", s: "Community", l: "https://en.wikipedia.org/wiki/Jatapu" },
606
+ { t: "పోడు", m: "Shifting Culti.", s: "Agri", l: "https://en.wikipedia.org/wiki/Podu_(agriculture)" },
607
+ { t: "కొండ", m: "Hill", s: "Geo", l: "https://andhrabharati.com" },
608
+ { t: "ఏరు", m: "Stream", s: "Geo", l: "https://andhrabharati.com" },
609
+ { t: "వేట", m: "Hunt", s: "Tribal", l: "https://andhrabharati.com" },
610
+ { t: "విల్లు", m: "Bow", s: "Weapon", l: "https://andhrabharati.com" },
611
+ { t: "తేనె", m: "Honey", s: "Forest Produce", l: "https://andhrabharati.com" }
612
+ ]
613
+ },
614
+ {
615
+ name: "Visakhapatnam",
616
+ lat: 17.6868, lng: 83.2185,
617
+ region: "Coastal Metro",
618
+ history: "A cosmopolitan port city. The 'Vizag' dialect mixes Uttarandhra rural slang with English/Hindi industrial loan words.",
619
+ words: [
620
+ { t: "యా", m: "What (Etla)", s: "Slang", l: "https://en.wikipedia.org/wiki/Visakhapatnam" },
621
+ { t: "మత్స్య", m: "Fish/Marine", s: "Fishing", l: "https://en.wikipedia.org/wiki/Fisheries" },
622
+ { t: "రేవు", m: "Port/Harbor", s: "Maritime", l: "https://en.wikipedia.org/wiki/Visakhapatnam_Port" },
623
+ { t: "షిప్పు", m: "Ship", s: "Industrial", l: "https://en.wikipedia.org/wiki/Hindustan_Shipyard" },
624
+ { t: "స్టీలు", m: "Steel", s: "Industrial", l: "https://en.wikipedia.org/wiki/Visakhapatnam_Steel_Plant" },
625
+ { t: "బీచ్", m: "Beach", s: "Tourism", l: "https://en.wikipedia.org/wiki/RK_Beach" },
626
+ { t: "కొండ", m: "Hill (Dolphin Nose)", s: "Geo", l: "https://en.wikipedia.org/wiki/Dolphin%27s_Nose" },
627
+ { t: "లోవ", m: "Valley", s: "Geo", l: "https://andhrabharati.com" },
628
+ { t: "సిటీ", m: "City", s: "Urban", l: "https://en.wikipedia.org/wiki/Smart_Cities_Mission" },
629
+ { t: "ఆంధ్రా", m: "Andhra Univ.", s: "Edu", l: "https://www.andhrauniversity.edu.in/" }
630
+ ]
631
+ },
632
+ {
633
+ name: "Anakapalli",
634
+ lat: 17.6913, lng: 83.0039,
635
+ region: "North Coastal Rural",
636
+ history: "Famous for its Jaggery market (Bellam). The dialect is typical rural Visakha, distinct from the urban port city.",
637
+ words: [
638
+ { t: "బెల్లం", m: "Jaggery", s: "Trade", l: "https://en.wikipedia.org/wiki/Anakapalle#Economy" },
639
+ { t: "చెరకు", m: "Sugarcane", s: "Agri", l: "https://en.wikipedia.org/wiki/Sugarcane" },
640
+ { t: "సంత", m: "Market", s: "Trade", l: "https://en.wikipedia.org/wiki/Market" },
641
+ { t: "ఏటికొప్పాక", m: "Toy Town", s: "Craft", l: "https://en.wikipedia.org/wiki/Etikoppaka" },
642
+ { t: "బొమ్మ", m: "Toy", s: "Craft", l: "https://en.wikipedia.org/wiki/Etikoppaka_toys" },
643
+ { t: "లక్క", m: "Lacquer", s: "Craft", l: "https://en.wikipedia.org/wiki/Lac" },
644
+ { t: "నూకమ్మ", m: "Goddess", s: "Religion", l: "https://en.wikipedia.org/wiki/Nookambika_Temple" },
645
+ { t: "జాతర", m: "Fair", s: "Culture", l: "https://en.wikipedia.org/wiki/Jatra" },
646
+ { t: "ఏరు", m: "River (Sarada)", s: "Geo", l: "https://en.wikipedia.org/wiki/Sarada_River" },
647
+ { t: "రైతు", m: "Farmer", s: "Agri", l: "https://andhrabharati.com" }
648
+ ]
649
+ },
650
+ {
651
+ name: "Alluri Sitharama Raju",
652
+ lat: 18.0667, lng: 82.6500,
653
+ region: "Agency/Tribal",
654
+ history: "Named after the freedom fighter. Home to the Rampa Rebellion. Dialect is heavily influenced by Koya, Konda, and other tribal languages.",
655
+ words: [
656
+ { t: "మన్యం", m: "Forest/Hill Area", s: "History", l: "https://en.wikipedia.org/wiki/Manyam_Rebellion" },
657
+ { t: "ఫితూరీ", m: "Rebellion", s: "History", l: "https://en.wikipedia.org/wiki/Rampa_Rebellion_of_1922" },
658
+ { t: "రాముడు", m: "Alluri (God)", s: "Legend", l: "https://en.wikipedia.org/wiki/Alluri_Sitarama_Raju" },
659
+ { t: "పోడు", m: "Shifting Agri", s: "Tribal", l: "https://en.wikipedia.org/wiki/Podu" },
660
+ { t: "కాఫీ", m: "Coffee", s: "Agri", l: "https://en.wikipedia.org/wiki/Araku_Valley_Coffee" },
661
+ { t: "లోయ", m: "Valley (Araku)", s: "Geo", l: "https://en.wikipedia.org/wiki/Araku_Valley" },
662
+ { t: "బొర్రా", m: "Cave/Hole", s: "Geo", l: "https://en.wikipedia.org/wiki/Borra_Caves" },
663
+ { t: "గిరిజన", m: "Tribal", s: "Admin", l: "https://en.wikipedia.org/wiki/Scheduled_Tribes_in_India" },
664
+ { t: "విల్లు", m: "Bow", s: "Weapon", l: "https://andhrabharati.com" },
665
+ { t: "బాణం", m: "Arrow", s: "Weapon", l: "https://andhrabharati.com" }
666
+ ]
667
+ },
668
+
669
+ // === GODAVARI REGION ===
670
+ {
671
+ name: "Kakinada",
672
+ lat: 16.9891, lng: 82.2475,
673
+ region: "East Godavari",
674
+ history: "The 'Pensioner's Paradise'. Known for the distinct 'Aay' (Yes) and polite, drawn-out Godavari accent. Famous for Kaja.",
675
+ words: [
676
+ { t: "కాజా", m: "Sweet", s: "Food", l: "https://en.wikipedia.org/wiki/Kakinada_Kaja" },
677
+ { t: "బాసు", m: "Boss (Friend)", s: "Slang", l: "https://en.wiktionary.org/wiki/boss" },
678
+ { t: "రేవు", m: "Port", s: "Marine", l: "https://en.wikipedia.org/wiki/Kakinada_Port" },
679
+ { t: "పిఠాపురం", m: "Place Name", s: "History", l: "https://en.wikipedia.org/wiki/Pithapuram" },
680
+ { t: "శక్తి", m: "Power (Peetham)", s: "Religion", l: "https://en.wikipedia.org/wiki/Puruhutika_Devi_Temple" },
681
+ { t: "బీచ్", m: "Beach", s: "Tourism", l: "https://en.wikipedia.org/wiki/Uppada_Beach" },
682
+ { t: "పట్టు", m: "Silk (Uppada)", s: "Textile", l: "https://en.wikipedia.org/wiki/Uppada_Jamdani_Sari" },
683
+ { t: "నౌక", m: "Boat/Ship", s: "Marine", l: "https://andhrabharati.com" },
684
+ { t: "వంట", m: "Cooking", s: "Culture", l: "https://andhrabharati.com" },
685
+ { t: "మర్యాద", m: "Respect", s: "Culture", l: "https://andhrabharati.com" }
686
+ ]
687
+ },
688
+ {
689
+ name: "Dr. B.R. Ambedkar Konaseema",
690
+ lat: 16.5794, lng: 81.9930,
691
+ region: "Konaseema",
692
+ history: "The Delta region. Extremely fertile, known for coconut groves and distinct river-island vocabulary like 'Lanka' and 'Revu'.",
693
+ words: [
694
+ { t: "లంక", m: "Island", s: "Geo", l: "https://te.wikipedia.org/wiki/%E0%B0%97%E0%B1%8B%E0%B0%A6%E0%B0%BE%E0%B0%B5%E0%B0%B0%E0%B0%BF_%E0%B0%AF%E0%B0%BE%E0%B0%B8" },
695
+ { t: "రేవు", m: "River Bank", s: "Geo", l: "https://te.wikipedia.org/wiki/%E0%B0%97%E0%B1%8B%E0%B0%A6%E0%B0%BE%E0%B0%B5%E0%B0%B0%E0%B0%BF_%E0%B0%AF%E0%B0%BE%E0%B0%B8" },
696
+ { t: "కొబ్బరి", m: "Coconut", s: "Agri", l: "http://jaganalluri.blogspot.com/2010/10/konaseema-telugu-is-delta-located-in.html" },
697
+ { t: "డిబ్బ", m: "Mound/Islet", s: "Geo", l: "http://jaganalluri.blogspot.com/2010/10/konaseema-telugu-is-delta-located-in.html" },
698
+ { t: "ఆయ్", m: "Yes (Respectful)", s: "Slang", l: "http://jaganalluri.blogspot.com/2010/10/konaseema-telugu-is-delta-located-in.html" },
699
+ { t: "పంటి", m: "Raft/Ferry", s: "Transport", l: "http://jaganalluri.blogspot.com/2010/10/konaseema-telugu-is-delta-located-in.html" },
700
+ { t: "గోదారి", m: "Godavari", s: "Geo", l: "http://jaganalluri.blogspot.com/2010/10/konaseema-telugu-is-delta-located-in.html" },
701
+ { t: "అరిటాకు", m: "Banana Leaf", s: "Food", l: "https://andhrabharati.com" },
702
+ { t: "పూతరేకు", m: "Paper Sweet", s: "Food", l: "https://en.wikipedia.org/wiki/Pootharekulu" },
703
+ { t: "అన్నం", m: "Rice", s: "Food", l: "https://andhrabharati.com" }
704
+ ]
705
+ },
706
+ {
707
+ name: "East Godavari",
708
+ lat: 17.0005, lng: 81.8040,
709
+ region: "Godavari",
710
+ history: "Headquartered at Rajamahendravaram. Cultural capital of Andhra. Standard Telugu ('Grandhika') has strong roots here.",
711
+ words: [
712
+ { t: "పుష్కర", m: "River Festival", s: "Culture", l: "https://en.wikipedia.org/wiki/Godavari_Pushkaralu" },
713
+ { t: "ఘాట్", m: "Bathing Steps", s: "Religion", l: "https://en.wikipedia.org/wiki/Ghat" },
714
+ { t: "ఆదికవి", m: "First Poet (Nannaya)", s: "Lit", l: "https://en.wikipedia.org/wiki/Nannayya" },
715
+ { t: "బ్యారేజ్", m: "Barrage", s: "Infra", l: "https://en.wikipedia.org/wiki/Dowleswaram_Barrage" },
716
+ { t: "నర్సరీ", m: "Plant Nursery", s: "Agri", l: "https://en.wikipedia.org/wiki/Kadiyam" },
717
+ { t: "పువ్వులు", m: "Flowers", s: "Agri", l: "https://en.wikipedia.org/wiki/Kadiyam" },
718
+ { t: "రోజా", m: "Rose", s: "Agri", l: "https://andhrabharati.com" },
719
+ { t: "రైలు", m: "Train (Bridge)", s: "Transport", l: "https://en.wikipedia.org/wiki/Godavari_Bridge" },
720
+ { t: "గోదావరి", m: "River", s: "Geo", l: "https://en.wikipedia.org/wiki/Godavari_River" },
721
+ { t: "సంస్కృతి", m: "Culture", s: "General", l: "https://andhrabharati.com" }
722
+ ]
723
+ },
724
+ {
725
+ name: "West Godavari",
726
+ lat: 16.5417, lng: 81.5233,
727
+ region: "Godavari Delta",
728
+ history: "Centered around Bhimavaram. Known for aquaculture (Prawns/Fish) and cockfights (Kodi Pandem) during Sankranti.",
729
+ words: [
730
+ { t: "రొయ్యలు", m: "Prawns", s: "Aqua", l: "https://en.wikipedia.org/wiki/Aquaculture_in_India" },
731
+ { t: "చేపలు", m: "Fish", s: "Aqua", l: "https://en.wikipedia.org/wiki/Fish_farming" },
732
+ { t: "పందెం", m: "Bet/Race", s: "Culture", l: "https://en.wikipedia.org/wiki/Cockfight" },
733
+ { t: "సంక్రాంతి", m: "Harvest Fest", s: "Culture", l: "https://en.wikipedia.org/wiki/Sankranti" },
734
+ { t: "కోడి", m: "Rooster", s: "Culture", l: "https://en.wikipedia.org/wiki/Cockfight" },
735
+ { t: "బరి", m: "Arena", s: "Culture", l: "https://andhrabharati.com" },
736
+ { t: "కత్తి", m: "Knife (Cockfight)", s: "Tool", l: "https://andhrabharati.com" },
737
+ { t: "చెరువు", m: "Pond (Aqua)", s: "Agri", l: "https://en.wikipedia.org/wiki/Fish_pond" },
738
+ { t: "గట్టు", m: "Bund", s: "Geo", l: "https://andhrabharati.com" },
739
+ { t: "ఊరు", m: "Village", s: "General", l: "https://andhrabharati.com" }
740
+ ]
741
+ },
742
+ {
743
+ name: "Eluru",
744
+ lat: 16.7107, lng: 81.0952,
745
+ region: "Kolleru Belt",
746
+ history: "Between Krishna and Godavari. Home to Kolleru Lake. Famous for carpets and woolen piles.",
747
+ words: [
748
+ { t: "కొల్లేరు", m: "Lake Name", s: "Geo", l: "https://en.wikipedia.org/wiki/Kolleru_Lake" },
749
+ { t: "పక్షులు", m: "Birds", s: "Nature", l: "https://en.wikipedia.org/wiki/Kolleru_Bird_Sanctuary" },
750
+ { t: "తివాచీ", m: "Carpet", s: "Craft", l: "https://en.wikipedia.org/wiki/Eluru#Economy" },
751
+ { t: "ఉన్ని", m: "Wool", s: "Material", l: "https://andhrabharati.com" },
752
+ { t: "ద్వారకా", m: "Tirumala (Little)", s: "Religion", l: "https://en.wikipedia.org/wiki/Dwaraka_Tirumala" },
753
+ { t: "గుడి", m: "Temple", s: "Religion", l: "https://andhrabharati.com" },
754
+ { t: "మొక్కు", m: "Vow", s: "Religion", l: "https://andhrabharati.com" },
755
+ { t: "లంక", m: "Island", s: "Geo", l: "https://andhrabharati.com" },
756
+ { t: "పొలము", m: "Field", s: "Agri", l: "https://andhrabharati.com" },
757
+ { t: "వరి", m: "Paddy", s: "Agri", l: "https://en.wikipedia.org/wiki/Paddy" }
758
+ ]
759
+ },
760
+
761
+ // === KRISHNA-GUNTUR REGION ===
762
+ {
763
+ name: "Krishna",
764
+ lat: 16.1808, lng: 81.1303,
765
+ region: "Krishna Delta",
766
+ history: "Headquartered at Machilipatnam. Historic port town with Dutch/British influence. Famous for Kalamkari.",
767
+ words: [
768
+ { t: "కలంకారీ", m: "Pen Art", s: "Art", l: "https://en.wikipedia.org/wiki/Kalamkari" },
769
+ { t: "బందరు", m: "Machilipatnam", s: "Place", l: "https://en.wikipedia.org/wiki/Machilipatnam" },
770
+ { t: "లడ్డు", m: "Sweet (Bandar)", s: "Food", l: "https://en.wikipedia.org/wiki/Bandar_Laddu" },
771
+ { t: "బీచ్", m: "Beach", s: "Tourism", l: "https://en.wikipedia.org/wiki/Manginapudi_Beach" },
772
+ { t: "కోట", m: "Fort (Dutch)", s: "History", l: "https://en.wikipedia.org/wiki/Machilipatnam#History" },
773
+ { t: "నగల", m: "Imitation Gold", s: "Craft", l: "https://en.wikipedia.org/wiki/Machilipatnam" },
774
+ { t: "డచ్", m: "Dutch", s: "History", l: "https://en.wikipedia.org/wiki/Dutch_Coromandel" },
775
+ { t: "ఓడరేవు", m: "Seaport", s: "Marine", l: "https://andhrabharati.com" },
776
+ { t: "చేనేత", m: "Handloom", s: "Craft", l: "https://andhrabharati.com" },
777
+ { t: "నది", m: "River", s: "Geo", l: "https://andhrabharati.com" }
778
+ ]
779
+ },
780
+ {
781
+ name: "NTR",
782
+ lat: 16.5062, lng: 80.6480,
783
+ region: "Central Capital",
784
+ history: "Vijayawada region. The political and commercial heart. Standard Telugu is spoken here but with a distinct speed.",
785
+ words: [
786
+ { t: "బెజవాడ", m: "Vijayawada", s: "Place", l: "https://en.wikipedia.org/wiki/Vijayawada" },
787
+ { t: "దుర్గమ్మ", m: "Goddess", s: "Religion", l: "https://en.wikipedia.org/wiki/Kanaka_Durga_Temple" },
788
+ { t: "ప్రకాశం", m: "Barrage", s: "Infra", l: "https://en.wikipedia.org/wiki/Prakasam_Barrage" },
789
+ { t: "రైలు", m: "Train (Junction)", s: "Transport", l: "https://en.wikipedia.org/wiki/Vijayawada_Junction_railway_station" },
790
+ { t: "రాజధాని", m: "Capital", s: "Admin", l: "https://en.wikipedia.org/wiki/Amaravati" },
791
+ { t: "రాజకీయం", m: "Politics", s: "Society", l: "https://en.wikipedia.org/wiki/Politics_of_Andhra_Pradesh" },
792
+ { t: "వ్యాపారం", m: "Business", s: "Economy", l: "https://andhrabharati.com" },
793
+ { t: "కొండ", m: "Hill (Indrakeeladri)", s: "Geo", l: "https://en.wikipedia.org/wiki/Indrakeeladri" },
794
+ { t: "నది", m: "River (Krishna)", s: "Geo", l: "https://en.wikipedia.org/wiki/Krishna_River" },
795
+ { t: "ఆటో", m: "Auto", s: "Transport", l: "https://en.wikipedia.org/wiki/Auto_rickshaw" }
796
+ ]
797
+ },
798
+ {
799
+ name: "Guntur",
800
+ lat: 16.3067, lng: 80.4365,
801
+ region: "Central Andhra",
802
+ history: "Known for Chillies and Education. The dialect here is crisp and considered 'textbook' standard.",
803
+ words: [
804
+ { t: "మిరప", m: "Chilli", s: "Agri", l: "https://en.wikipedia.org/wiki/Guntur_chilli" },
805
+ { t: "కారం", m: "Spicy", s: "Food", l: "https://andhrabharati.com" },
806
+ { t: "గోంగూర", m: "Sorrel Leaf", s: "Food", l: "https://en.wikipedia.org/wiki/Gongura" },
807
+ { t: "పచ్చడి", m: "Pickle", s: "Food", l: "https://en.wikipedia.org/wiki/South_Indian_pickle" },
808
+ { t: "పొగాకు", m: "Tobacco", s: "Agri", l: "https://en.wikipedia.org/wiki/Tobacco" },
809
+ { t: "యార్డు", m: "Market Yard", s: "Trade", l: "https://en.wikipedia.org/wiki/Guntur" },
810
+ { t: "జిన్నా", m: "Tower Name", s: "Landmark", l: "https://en.wikipedia.org/wiki/Jinnah_Tower" },
811
+ { t: "చదువు", m: "Education", s: "General", l: "https://andhrabharati.com" },
812
+ { t: "ఉప్పు", m: "Salt", s: "Food", l: "https://andhrabharati.com" },
813
+ { t: "రాళ్ళు", m: "Stones", s: "General", l: "https://andhrabharati.com" }
814
+ ]
815
+ },
816
+ {
817
+ name: "Palnadu",
818
+ lat: 16.2366, lng: 80.0515,
819
+ region: "Palnadu",
820
+ history: "Historic battlefield of Palnati Yuddham. Known for bravery and specific factional history. 'Pourusham' (Valor) is a key theme.",
821
+ words: [
822
+ { t: "పౌరుషం", m: "Valor", s: "History", l: "https://en.wikipedia.org/wiki/Palnadu" },
823
+ { t: "యుద్ధం", m: "War", s: "History", l: "https://te.wikipedia.org/wiki/%E0%B0%AA%E0%B0%B2%E0%B1%8D%E0%B0%A8%E0%B0%BE%E0%B0%9F%E0%B0%BF_%E0%B0%AF%E0%B1%81%E0%B0%A6%E0%B1%8D%E0%B0%A7%E0%B0%82" },
824
+ { t: "బ్రహ్మనాయుడు", m: "Hero Name", s: "Legend", l: "https://en.wikipedia.org/wiki/Brahma_Naidu" },
825
+ { t: "నాగమ్మ", m: "Leader Name", s: "Legend", l: "https://en.wikipedia.org/wiki/Nayakuralu_Nagamma" },
826
+ { t: "కోడి", m: "Rooster (Fight)", s: "History", l: "https://en.wikipedia.org/wiki/Palnati_Yuddham_(1947_film)" },
827
+ { t: "బొంగరం", m: "Top (Game)", s: "Culture", l: "https://te.wikipedia.org/wiki/%E0%B0%AA%E0%B0%B2%E0%B1%8D%E0%B0%A8%E0%B0%BE%E0%B0%9F%E0%B0%BF_%E0%B0%AF%E0%B1%81%E0%B0%A6%E0%B1%8D%E0%B0%A7%E0%B0%82" },
828
+ { t: "సమరం", m: "Battle", s: "History", l: "https://te.wikipedia.org/wiki/%E0%B0%AA%E0%B0%B2%E0%B1%8D%E0%B0%A8%E0%B0%BE%E0%B0%9F%E0%B0%BF_%E0%B0%AF%E0%B1%81%E0%B0%A6%E0%B1%8D%E0%B0%A7%E0%B0%82" },
829
+ { t: "పల్నాడు", m: "Region", s: "Geo", l: "https://en.wikipedia.org/wiki/Palnadu_district" },
830
+ { t: "కత్తి", m: "Sword", s: "Weapon", l: "https://andhrabharati.com" },
831
+ { t: "రక్తం", m: "Blood", s: "General", l: "https://andhrabharati.com" }
832
+ ]
833
+ },
834
+ {
835
+ name: "Bapatla",
836
+ lat: 15.9038, lng: 80.4682,
837
+ region: "Coastal Guntur",
838
+ history: "Includes Chirala and Bapatla. Known for Weaving (Chirala) and Air Force Base. Coastal dialect.",
839
+ words: [
840
+ { t: "చీరాల", m: "Place Name", s: "Geo", l: "https://en.wikipedia.org/wiki/Chirala" },
841
+ { t: "నేత", m: "Weaving", s: "Craft", l: "https://en.wikipedia.org/wiki/Chirala" },
842
+ { t: "బీచ్", m: "Beach (Suryalanka)", s: "Tourism", l: "https://en.wikipedia.org/wiki/Suryalanka_Beach" },
843
+ { t: "జీడిపప్పు", m: "Cashew", s: "Agri", l: "https://andhrabharati.com" },
844
+ { t: "ఇసుక", m: "Sand", s: "Geo", l: "https://andhrabharati.com" },
845
+ { t: "వాయుసేన", m: "Air Force", s: "Defense", l: "https://en.wikipedia.org/wiki/Suryalanka_Air_Force_Station" },
846
+ { t: "భావనారాయణ", m: "God Name", s: "Religion", l: "https://en.wikipedia.org/wiki/Bhavanarayana_Temple" },
847
+ { t: "గుడి", m: "Temple", s: "Religion", l: "https://andhrabharati.com" },
848
+ { t: "సముద్రం", m: "Sea", s: "Geo", l: "https://andhrabharati.com" },
849
+ { t: "పడవ", m: "Boat", s: "Marine", l: "https://andhrabharati.com" }
850
+ ]
851
+ },
852
+ {
853
+ name: "Prakasam",
854
+ lat: 15.5057, lng: 80.0499,
855
+ region: "South Coastal",
856
+ history: "Ongole is famous for its Bulls. The dialect is a transition between Guntur and Nellore.",
857
+ words: [
858
+ { t: "గిత్త", m: "Bull", s: "Agri", l: "https://en.wikipedia.org/wiki/Ongole_cattle" },
859
+ { t: "ఒంగోలు", m: "Ongole", s: "Place", l: "https://en.wikipedia.org/wiki/Ongole" },
860
+ { t: "పాల", m: "Milk (Galaxy)", s: "Industry", l: "https://en.wikipedia.org/wiki/Dairy" },
861
+ { t: "గ్రానైట్", m: "Granite", s: "Industry", l: "https://en.wikipedia.org/wiki/Granite" },
862
+ { t: "బండ", m: "Rock", s: "Geo", l: "https://andhrabharati.com" },
863
+ { t: "పలక", m: "Slate (Markapur)", s: "Mining", l: "https://en.wikipedia.org/wiki/Markapur" },
864
+ { t: "అడవి", m: "Forest (Nallamala)", s: "Geo", l: "https://en.wikipedia.org/wiki/Nallamala_Hills" },
865
+ { t: "నీళ్లు", m: "Water", s: "General", l: "https://andhrabharati.com" },
866
+ { t: "వేట", m: "Hunt", s: "Action", l: "https://andhrabharati.com" },
867
+ { t: "రైతు", m: "Farmer", s: "Agri", l: "https://andhrabharati.com" }
868
+ ]
869
+ },
870
+ {
871
+ name: "Sri Potti Sriramulu Nellore",
872
+ lat: 14.4426, lng: 79.9865,
873
+ region: "Nellore",
874
+ history: "Distinct dialect ('Yeta' for 'Atu'). Famous for Ranganayaka Swamy and ISRO (Sriharikota). Transition to Tamil influence starts here.",
875
+ words: [
876
+ { t: "ఏటి", m: "What (Yeti)", s: "Nellore Slang", l: "https://en.wikipedia.org/wiki/Nellore" },
877
+ { t: "చేప", m: "Fish", s: "Food", l: "https://en.wikipedia.org/wiki/Nellore#Economy" },
878
+ { t: "మందు", m: "Medicine", s: "General", l: "https://en.wikipedia.org/wiki/Anandaiah_COVID-19_Herbal_Cure" },
879
+ { t: "రాకెట్", m: "Rocket", s: "Science", l: "https://en.wikipedia.org/wiki/Satish_Dhawan_Space_Centre" },
880
+ { t: "చెరువు", m: "Lake (Pulicat)", s: "Geo", l: "https://en.wikipedia.org/wiki/Pulicat_Lake" },
881
+ { t: "పక్షి", m: "Bird (Flamingo)", s: "Nature", l: "https://en.wikipedia.org/wiki/Nelapattu_Bird_Sanctuary" },
882
+ { t: "పెన్న", m: "Penna River", s: "Geo", l: "https://en.wikipedia.org/wiki/Penna_River" },
883
+ { t: "వడ్లు", m: "Paddy", s: "Agri", l: "https://en.wikipedia.org/wiki/Rice" },
884
+ { t: "కారం", m: "Spicy", s: "Food", l: "https://andhrabharati.com" },
885
+ { t: "దోవ", m: "Way/Path", s: "Rural", l: "https://www.reddit.com/r/Dravidiology/comments/1cmmve7/nellorekurrapalli_telugu_swadesh_list/" }
886
+ ]
887
+ },
888
+
889
+ // === RAYALASEEMA REGION ===
890
+ {
891
+ name: "Kurnool",
892
+ lat: 15.8281, lng: 78.0373,
893
+ region: "Rayalaseema",
894
+ history: "Gateway to Rayalaseema. Historic capital. Dialect uses 'Emappa' and has rougher intonations.",
895
+ words: [
896
+ { t: "కొండ", m: "Reddy (Fort)", s: "History", l: "https://en.wikipedia.org/wiki/Konda_Reddy_Fort" },
897
+ { t: "బూర్జు", m: "Bastion", s: "History", l: "https://en.wikipedia.org/wiki/Konda_Reddy_Fort" },
898
+ { t: "అప్ప", m: "Friend/Father", s: "Slang", l: "https://www.quora.com/What-are-some-common-phrases-in-the-Rayalaseema-Dialect-of-Telugu" },
899
+ { t: "ఏమప్ప", m: "What man?", s: "Slang", l: "https://www.quora.com/What-are-some-common-phrases-in-the-Rayalaseema-Dialect-of-Telugu" },
900
+ { t: "కర్నూలు", m: "City Name", s: "Place", l: "https://en.wikipedia.org/wiki/Kurnool" },
901
+ { t: "తుంగభద్ర", m: "River", s: "Geo", l: "https://en.wikipedia.org/wiki/Tungabhadra_River" },
902
+ { t: "సంగం", m: "Confluence", s: "Geo", l: "https://en.wikipedia.org/wiki/Sangameswara_Temple,_Kurnool" },
903
+ { t: "రాళ్లు", m: "Stones", s: "Geo", l: "https://andhrabharati.com" },
904
+ { t: "పులుసు", m: "Stew", s: "Food", l: "https://andhrabharati.com" },
905
+ { t: "చేను", m: "Field", s: "Agri", l: "https://www.quora.com/What-are-some-common-phrases-in-the-Rayalaseema-Dialect-of-Telugu" }
906
+ ]
907
+ },
908
+ {
909
+ name: "Nandyal",
910
+ lat: 15.4849, lng: 78.4867,
911
+ region: "Rayalaseema",
912
+ history: "Splintered from Kurnool. Famous for Mahanandi and Agriculture. 'Nandi' (Bull) is central to its identity.",
913
+ words: [
914
+ { t: "నంది", m: "Bull", s: "Religion", l: "https://en.wikipedia.org/wiki/Mahanandi" },
915
+ { t: "ఆలయం", m: "Temple", s: "Religion", l: "https://en.wikipedia.org/wiki/Mahanandi" },
916
+ { t: "నీరు", m: "Water", s: "General", l: "https://andhrabharati.com" },
917
+ { t: "మహానంది", m: "Place Name", s: "Geo", l: "https://en.wikipedia.org/wiki/Mahanandi" },
918
+ { t: "అడవి", m: "Forest", s: "Geo", l: "https://en.wikipedia.org/wiki/Nallamala_Hills" },
919
+ { t: "పులి", m: "Tiger", s: "Wildlife", l: "https://en.wikipedia.org/wiki/Nagarjunsagar-Srisailam_Tiger_Reserve" },
920
+ { t: "విత్తనాలు", m: "Seeds", s: "Agri", l: "https://en.wikipedia.org/wiki/Nandyal" },
921
+ { t: "పంట", m: "Crop", s: "Agri", l: "https://andhrabharati.com" },
922
+ { t: "కొండ", m: "Hill", s: "Geo", l: "https://andhrabharati.com" },
923
+ { t: "రైతు", m: "Farmer", s: "Agri", l: "https://andhrabharati.com" }
924
+ ]
925
+ },
926
+ {
927
+ name: "Ananthapuramu",
928
+ lat: 14.6819, lng: 77.6006,
929
+ region: "Rayalaseema",
930
+ history: "Driest region. Groundnut (Verusenaga) is the main crop. Dialect is distinct Rayalaseema.",
931
+ words: [
932
+ { t: "వేరుశనగ", m: "Groundnut", s: "Agri", l: "https://en.wikipedia.org/wiki/Anantapur_district#Economy" },
933
+ { t: "కరవు", m: "Drought", s: "Climate", l: "https://en.wikipedia.org/wiki/Anantapur_district#Climate" },
934
+ { t: "సీమ", m: "Region", s: "Geo", l: "https://en.wikipedia.org/wiki/Rayalaseema" },
935
+ { t: "రాళ్లు", m: "Rocks", s: "Geo", l: "https://andhrabharati.com" },
936
+ { t: "పవన", m: "Wind", s: "Energy", l: "https://en.wikipedia.org/wiki/Wind_power_in_India" },
937
+ { t: "విద్యుత్", m: "Power", s: "Energy", l: "https://en.wikipedia.org/wiki/Solar_power_in_India" },
938
+ { t: "కోట", m: "Fort (Gooty)", s: "History", l: "https://en.wikipedia.org/wiki/Gooty_Fort" },
939
+ { t: "ట్యాంక్", m: "Tank", s: "Water", l: "https://en.wikipedia.org/wiki/Anantapur" },
940
+ { t: "పొలము", m: "Field", s: "Agri", l: "https://andhrabharati.com" },
941
+ { t: "లేపాక్షి", m: "Lepakshi", s: "Art", l: "https://en.wikipedia.org/wiki/Lepakshi" }
942
+ ]
943
+ },
944
+ {
945
+ name: "Sri Sathya Sai",
946
+ lat: 14.1683, lng: 77.8117,
947
+ region: "Spiritual Rayalaseema",
948
+ history: "Headquartered at Puttaparthi. Global influence due to Sathya Sai Baba. Vocabulary includes spiritual terms.",
949
+ words: [
950
+ { t: "సాయి", m: "Sai Baba", s: "Religion", l: "https://en.wikipedia.org/wiki/Sathya_Sai_Baba" },
951
+ { t: "సేవ", m: "Service", s: "Religion", l: "https://www.sathyasai.org/resources/indic-glossary" },
952
+ { t: "భక్తి", m: "Devotion", s: "Religion", l: "https://www.sathyasai.org/resources/indic-glossary" },
953
+ { t: "ఆశ్రమం", m: "Ashram", s: "Place", l: "https://en.wikipedia.org/wiki/Prasanthi_Nilayam" },
954
+ { t: "విమానం", m: "Airport", s: "Transport", l: "https://en.wikipedia.org/wiki/Sri_Sathya_Sai_Airport" },
955
+ { t: "వైద్యం", m: "Medicine", s: "Health", l: "https://en.wikipedia.org/wiki/Sri_Sathya_Sai_Institute_of_Higher_Medical_Sciences,_Prasanthigram" },
956
+ { t: "ప్రశాంతి", m: "Peace", s: "Philosophy", l: "https://en.wikipedia.org/wiki/Prasanthi_Nilayam" },
957
+ { t: "నిలయం", m: "Abode", s: "Place", l: "https://en.wikipedia.org/wiki/Prasanthi_Nilayam" },
958
+ { t: "హారతి", m: "Offering", s: "Ritual", l: "https://www.sathyasai.org/resources/indic-glossary" },
959
+ { t: "దర్శనం", m: "Sight/View", s: "Ritual", l: "https://www.sathyasai.org/resources/indic-glossary" }
960
+ ]
961
+ },
962
+ {
963
+ name: "YSR Kadapa",
964
+ lat: 14.4673, lng: 78.8242,
965
+ region: "Rayalaseema",
966
+ history: "Heart of Rayalaseema. Known for 'Kadapa' (Threshold). Dialect uses strong words like 'Biddā' (Child/Son).",
967
+ words: [
968
+ { t: "బిడ్డ", m: "Child/Son", s: "Slang", l: "https://kadapa.info/tag/rayalaseema-dialect/" },
969
+ { t: "రాయి", m: "Stone (Kadapa)", s: "Geo", l: "https://en.wikipedia.org/wiki/Kadapa_Stone" },
970
+ { t: "గడప", m: "Threshold", s: "Etymology", l: "https://en.wikipedia.org/wiki/Kadapa" },
971
+ { t: "దేవుడు", m: "God (Balaji)", s: "Religion", l: "https://en.wikipedia.org/wiki/Venkateswara" },
972
+ { t: "దర్గా", m: "Shrine", s: "Religion", l: "https://en.wikipedia.org/wiki/Ameen_Peer_Dargah" },
973
+ { t: "మసీదు", m: "Mosque", s: "Religion", l: "https://en.wikipedia.org/wiki/Ameen_Peer_Dargah" },
974
+ { t: "గండి", m: "Gorge", s: "Geo", l: "https://en.wikipedia.org/wiki/Gandikota" },
975
+ { t: "కోట", m: "Fort (Gandikota)", s: "History", l: "https://en.wikipedia.org/wiki/Gandikota" },
976
+ { t: "ఏరు", m: "River (Penna)", s: "Geo", l: "https://en.wikipedia.org/wiki/Penna_River" },
977
+ { t: "ఊరు", m: "Village", s: "General", l: "https://andhrabharati.com" }
978
+ ]
979
+ },
980
+ {
981
+ name: "Annamayya",
982
+ lat: 14.0772, lng: 79.0267,
983
+ region: "Rayalaseema",
984
+ history: "Named after Tallapaka Annamayya. Rayachoti is HQ. Dialect is a blend of Kadapa and Chittoor.",
985
+ words: [
986
+ { t: "సంకీర్తన", m: "Song/Hymn", s: "Culture", l: "https://en.wikipedia.org/wiki/Annamacharya" },
987
+ { t: "వెంకన్న", m: "Lord Venkateswara", s: "Religion", l: "https://en.wikipedia.org/wiki/Venkateswara" },
988
+ { t: "తాళ్ళపాక", m: "Place Name", s: "History", l: "https://en.wikipedia.org/wiki/Tallapaka" },
989
+ { t: "రాచవీడు", m: "Rayachoti (Old)", s: "Etymology", l: "https://en.wikipedia.org/wiki/Rayachoti" },
990
+ { t: "కొండ", m: "Hill (Horsley)", s: "Geo", l: "https://en.wikipedia.org/wiki/Horsley_Hills" },
991
+ { t: "మదనపల్లె", m: "Place Name", s: "Geo", l: "https://en.wikipedia.org/wiki/Madanapalle" },
992
+ { t: "టమోటా", m: "Tomato", s: "Agri", l: "https://en.wikipedia.org/wiki/Madanapalle#Economy" },
993
+ { t: "పట్టు", m: "Silk", s: "Textile", l: "https://annamayya.ap.gov.in/te/" },
994
+ { t: "చీర", m: "Saree", s: "Textile", l: "https://annamayya.ap.gov.in/te/" },
995
+ { t: "పాట", m: "Song", s: "Culture", l: "https://en.wikipedia.org/wiki/Annamacharya" }
996
+ ]
997
+ },
998
+ {
999
+ name: "Tirupati",
1000
+ lat: 13.6288, lng: 79.4192,
1001
+ region: "Pilgrimage Zone",
1002
+ history: "The Spiritual Capital. Dialect has Tamil influence due to proximity to Chennai and millions of pilgrims.",
1003
+ words: [
1004
+ { t: "గోవిందా", m: "God's Name", s: "Religion", l: "https://en.wikipedia.org/wiki/Govinda" },
1005
+ { t: "లడ్డు", m: "Prasadam", s: "Food", l: "https://en.wikipedia.org/wiki/Tirupati_Laddu" },
1006
+ { t: "కొండ", m: "Hill (Seven)", s: "Geo", l: "https://en.wikipedia.org/wiki/Tirumala" },
1007
+ { t: "ఏడు", m: "Seven", s: "Number", l: "https://en.wikipedia.org/wiki/Tirumala_Venkateswara_Temple" },
1008
+ { t: "వెంకటేశ్వర", m: "God", s: "Religion", l: "https://en.wikipedia.org/wiki/Venkateswara" },
1009
+ { t: "కళ్యాణ", m: "Wedding", s: "Ritual", l: "https://en.wikipedia.org/wiki/Kalyanotsavam" },
1010
+ { t: "జుట్టు", m: "Hair (Tonsure)", s: "Ritual", l: "https://en.wikipedia.org/wiki/Tirumala_Venkateswara_Temple#Tonsure" },
1011
+ { t: "దర్శనం", m: "View", s: "Religion", l: "https://en.wikipedia.org/wiki/Darshan" },
1012
+ { t: "జూ", m: "Zoo", s: "Tourism", l: "https://en.wikipedia.org/wiki/Sri_Venkateswara_Zoological_Park" },
1013
+ { t: "శ్రీహరికోట", m: "Spaceport", s: "Science", l: "https://en.wikipedia.org/wiki/Satish_Dhawan_Space_Centre" }
1014
+ ]
1015
+ },
1016
+ {
1017
+ name: "Chittoor",
1018
+ lat: 13.2172, lng: 79.1003,
1019
+ region: "Southern Border",
1020
+ history: "Strong Tamil influence (Chittoor slang). Words like 'Maa' (Mango) and dairy terms are common.",
1021
+ words: [
1022
+ { t: "మామిడి", m: "Mango", s: "Agri", l: "https://en.wikipedia.org/wiki/Chittoor_district#Economy" },
1023
+ { t: "పాలు", m: "Milk", s: "Agri", l: "https://en.wikipedia.org/wiki/Dairy" },
1024
+ { t: "గ్రానైట్", m: "Granite", s: "Industry", l: "https://en.wikipedia.org/wiki/Granite" },
1025
+ { t: "కాణిపాకం", m: "Place Name", s: "Religion", l: "https://en.wikipedia.org/wiki/Kanipakam" },
1026
+ { t: "వినాయకుడు", m: "Ganesha", s: "Religion", l: "https://en.wikipedia.org/wiki/Kanipakam_Vinayaka_Temple" },
1027
+ { t: "బెల్లం", m: "Jaggery", s: "Food", l: "https://en.wikipedia.org/wiki/Jaggery" },
1028
+ { t: "అరగొండ", m: "Half Hill", s: "Place", l: "https://en.wikipedia.org/wiki/Aragonda" },
1029
+ { t: "చెరకు", m: "Sugarcane", s: "Agri", l: "https://en.wikipedia.org/wiki/Sugarcane" },
1030
+ { t: "తమిళం", m: "Tamil", s: "Influence", l: "https://en.wikipedia.org/wiki/Chittoor_district#Demographics" },
1031
+ { t: "టెంకాయ", m: "Coconut (Tenkaaya)", s: "Slang", l: "https://andhrabharati.com" }
1032
+ ]
1033
  }
1034
+ ];
1035
+
1036
+ // COMBINE DATA FOR ALL DISTRICTS
1037
+ const allDistrictsData = [...Telangana_Data, ...andhraData];
1038
 
1039
  // --- 2. MAP SETUP ---
1040
+ // Center on the Telugu States region
1041
+ const map = L.map('map').setView([17.0, 80.0], 7);
1042
+
1043
+ L.tileLayer('https://{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}{r}.png', {
1044
+ attribution: '&copy; OSM contributors'
1045
+ }).addTo(map);
1046
+
1047
+ // --- 3. MARKERS & INTERACTION ---
1048
+ const sidebarPanel = document.getElementById('info-panel');
1049
+
1050
+ // Red Marker Style
1051
+ const iconConfig = L.divIcon({
1052
+ className: 'custom-icon',
1053
+ html: `<div style="background:#e74c3c; width:12px; height:12px; border-radius:50%; border:2px solid white; box-shadow:0 0 4px rgba(0,0,0,0.4);"></div>`,
1054
+ iconSize: [14, 14],
1055
+ iconAnchor: [7, 7]
1056
+ });
 
 
 
 
 
 
 
 
 
 
 
 
 
1057
 
1058
+ // Loop through the combined data
1059
+ allDistrictsData.forEach(d => {
1060
+ const marker = L.marker([d.lat, d.lng], { icon: iconConfig }).addTo(map);
1061
 
1062
+ // Hover Label
1063
+ marker.bindTooltip(`<b>${d.name}</b>`, { direction: 'top', offset: [0, -5] });
1064
 
1065
+ // Click Action
1066
+ marker.on('click', () => {
1067
+ map.flyTo([d.lat, d.lng], 9, { duration: 1.2 });
1068
+ updateSidebar(d);
 
1069
  });
1070
+ });
1071
 
1072
+ function updateSidebar(data) {
1073
+ const rows = data.words.map(w => {
1074
+ // Check if a link exists ('l' property)
1075
+ const sourceContent = w.l
1076
+ ? `<a href="${w.l}" target="_blank" class="source-link">${w.s}</a>`
1077
+ : w.s;
1078
+
1079
+ return `
1080
  <tr>
1081
  <td class="telugu-word">${w.t}</td>
1082
  <td>${w.m}</td>
1083
+ <td style="color:#777; font-size:0.7rem;">${sourceContent}</td>
1084
  </tr>
1085
+ `;
1086
+ }).join('');
1087
 
1088
+ sidebarPanel.innerHTML = `
1089
  <div style="animation:fadeIn 0.4s;">
1090
  <h2 class="district-title">${data.name}</h2>
1091
  <span class="region-tag">${data.region}</span>
 
1096
  </table>
1097
  </div>
1098
  `;
 
1099
  }
 
 
 
1100
  </script>
1101
  </body>
1102
 
requirements.txt DELETED
@@ -1,6 +0,0 @@
1
- google-auth>=2.25.0
2
- google-auth-oauthlib>=1.2.0
3
- google-auth-httplib2>=0.2.0
4
- google-api-python-client>=2.110.0
5
- watchdog>=3.0.0
6
- python-dotenv>=1.0.0
 
 
 
 
 
 
 
scripts/automation_runner.py DELETED
@@ -1,169 +0,0 @@
1
- #!/usr/bin/env python3
2
- """
3
- Automation Runner
4
- Main orchestrator that runs all automation tasks:
5
- - File watching
6
- - Scheduled Google Sheets sync
7
- - Initial conversion
8
- """
9
-
10
- import json
11
- import time
12
- import signal
13
- import sys
14
- import threading
15
- import subprocess
16
- from pathlib import Path
17
- from datetime import datetime
18
-
19
- # Paths
20
- BASE_DIR = Path(__file__).parent.parent
21
- CONFIG_FILE = BASE_DIR / "config.json"
22
- SHEETS_SYNC_SCRIPT = BASE_DIR / "scripts" / "sheets_sync.py"
23
- FILE_WATCHER_SCRIPT = BASE_DIR / "scripts" / "file_watcher.py"
24
- CSV_TO_JSON_SCRIPT = BASE_DIR / "scripts" / "csv_to_json.py"
25
-
26
-
27
- class AutomationRunner:
28
- """Manages all automation tasks"""
29
-
30
- def __init__(self):
31
- self.config = self.load_config()
32
- self.running = True
33
- self.watcher_process = None
34
- self.sync_thread = None
35
-
36
- # Set up signal handlers for graceful shutdown
37
- signal.signal(signal.SIGINT, self.signal_handler)
38
- signal.signal(signal.SIGTERM, self.signal_handler)
39
-
40
- def signal_handler(self, sig, frame):
41
- """Handle shutdown signals"""
42
- print("\n\n🛑 Shutdown signal received...")
43
- self.running = False
44
-
45
- def load_config(self):
46
- """Load configuration"""
47
- if not CONFIG_FILE.exists():
48
- print(f"❌ Config file not found: {CONFIG_FILE}")
49
- sys.exit(1)
50
-
51
- with open(CONFIG_FILE, 'r') as f:
52
- return json.load(f)
53
-
54
- def run_initial_conversion(self):
55
- """Run initial CSV-to-JSON conversion"""
56
- print("🔄 Running initial CSV-to-JSON conversion...")
57
- try:
58
- subprocess.run([sys.executable, str(CSV_TO_JSON_SCRIPT)], check=True)
59
- except subprocess.CalledProcessError:
60
- print("⚠️ Initial conversion failed (this is OK if CSV files don't exist yet)")
61
-
62
- def start_file_watcher(self):
63
- """Start the file watcher in a separate process"""
64
- if not self.config.get('file_watcher', {}).get('enabled', True):
65
- print("⚠️ File watcher disabled in config")
66
- return
67
-
68
- print("👀 Starting file watcher...")
69
- self.watcher_process = subprocess.Popen(
70
- [sys.executable, str(FILE_WATCHER_SCRIPT)],
71
- stdout=subprocess.PIPE,
72
- stderr=subprocess.STDOUT,
73
- text=True,
74
- bufsize=1
75
- )
76
-
77
- # Stream output in a separate thread
78
- def stream_output():
79
- for line in self.watcher_process.stdout:
80
- print(line, end='')
81
-
82
- threading.Thread(target=stream_output, daemon=True).start()
83
-
84
- def sync_sheets_once(self):
85
- """Run Google Sheets sync once"""
86
- print(f"\n⏰ [{datetime.now().strftime('%H:%M:%S')}] Running Google Sheets sync...")
87
- try:
88
- result = subprocess.run(
89
- [sys.executable, str(SHEETS_SYNC_SCRIPT)],
90
- capture_output=True,
91
- text=True
92
- )
93
- print(result.stdout)
94
- if result.returncode != 0:
95
- print(result.stderr)
96
- except Exception as e:
97
- print(f"❌ Sync error: {e}")
98
-
99
- def start_scheduled_sync(self):
100
- """Start scheduled Google Sheets sync"""
101
- sheets_config = self.config.get('google_sheets', {})
102
-
103
- if not sheets_config.get('enabled', False):
104
- print("⚠️ Google Sheets sync disabled in config")
105
- return
106
-
107
- interval_minutes = sheets_config.get('sync_interval_minutes', 5)
108
- print(f"⏰ Starting scheduled sync (every {interval_minutes} minutes)...")
109
-
110
- def sync_loop():
111
- # Run initial sync
112
- self.sync_sheets_once()
113
-
114
- # Continue syncing at intervals
115
- while self.running:
116
- time.sleep(interval_minutes * 60)
117
- if self.running:
118
- self.sync_sheets_once()
119
-
120
- self.sync_thread = threading.Thread(target=sync_loop, daemon=True)
121
- self.sync_thread.start()
122
-
123
- def run(self):
124
- """Main run loop"""
125
- print("=" * 60)
126
- print("🚀 Dialect Map Automation System")
127
- print("=" * 60)
128
- print()
129
-
130
- # Run initial conversion
131
- self.run_initial_conversion()
132
- print()
133
-
134
- # Start file watcher
135
- self.start_file_watcher()
136
-
137
- # Start scheduled sync
138
- self.start_scheduled_sync()
139
-
140
- print()
141
- print("=" * 60)
142
- print("✅ All automation tasks started!")
143
- print("=" * 60)
144
- print("\n💡 Press Ctrl+C to stop all automation\n")
145
-
146
- # Keep running until stopped
147
- try:
148
- while self.running:
149
- time.sleep(1)
150
- except KeyboardInterrupt:
151
- pass
152
-
153
- # Cleanup
154
- print("\n🧹 Cleaning up...")
155
- if self.watcher_process:
156
- self.watcher_process.terminate()
157
- self.watcher_process.wait()
158
-
159
- print("✅ Automation stopped gracefully\n")
160
-
161
-
162
- def main():
163
- """Main entry point"""
164
- runner = AutomationRunner()
165
- runner.run()
166
-
167
-
168
- if __name__ == "__main__":
169
- main()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
scripts/check_sheet_names.py DELETED
@@ -1,63 +0,0 @@
1
- #!/usr/bin/env python3
2
- """
3
- Check Sheet Names
4
- Quick utility to list all sheet tab names from Google Sheets
5
- """
6
-
7
- import json
8
- from pathlib import Path
9
- from google.oauth2 import service_account
10
- from googleapiclient.discovery import build
11
-
12
- # Paths
13
- BASE_DIR = Path(__file__).parent.parent
14
- CONFIG_FILE = BASE_DIR / "config.json"
15
- CREDS_FILE = BASE_DIR / "credentials.json"
16
-
17
-
18
- def get_sheet_names(spreadsheet_id, service):
19
- """Get all sheet names from a spreadsheet"""
20
- try:
21
- sheet_metadata = service.spreadsheets().get(spreadsheetId=spreadsheet_id).execute()
22
- sheets = sheet_metadata.get('sheets', [])
23
- return [sheet['properties']['title'] for sheet in sheets]
24
- except Exception as e:
25
- print(f"❌ Error: {e}")
26
- return []
27
-
28
-
29
- def main():
30
- # Load config
31
- with open(CONFIG_FILE, 'r') as f:
32
- config = json.load(f)
33
-
34
- # Authenticate
35
- print("🔐 Authenticating with Google Sheets API...\n")
36
- credentials = service_account.Credentials.from_service_account_file(
37
- CREDS_FILE,
38
- scopes=['https://www.googleapis.com/auth/spreadsheets.readonly']
39
- )
40
- service = build('sheets', 'v4', credentials=credentials)
41
-
42
- # Check each spreadsheet
43
- for sheet_config in config['google_sheets']['spreadsheets']:
44
- name = sheet_config['name']
45
- spreadsheet_id = sheet_config['spreadsheet_id']
46
-
47
- print(f"📊 {name}")
48
- print(f" ID: {spreadsheet_id[:20]}...")
49
-
50
- sheet_names = get_sheet_names(spreadsheet_id, service)
51
-
52
- if sheet_names:
53
- print(f" ✅ Found {len(sheet_names)} tab(s):")
54
- for tab_name in sheet_names:
55
- print(f" - '{tab_name}'")
56
- else:
57
- print(" ❌ No tabs found or error occurred")
58
-
59
- print()
60
-
61
-
62
- if __name__ == "__main__":
63
- main()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
scripts/csv_to_json.py DELETED
@@ -1,160 +0,0 @@
1
- #!/usr/bin/env python3
2
- """
3
- CSV to JSON Converter
4
- Converts dialect CSV files from sheets_output/ to JSON format for index.html
5
- """
6
-
7
- import csv
8
- import json
9
- import os
10
- from pathlib import Path
11
- from collections import defaultdict
12
-
13
- # Paths
14
- BASE_DIR = Path(__file__).parent.parent
15
- SHEETS_OUTPUT_DIR = BASE_DIR / "sheets_output"
16
- JSON_OUTPUT_DIR = BASE_DIR / "data" / "processed"
17
-
18
-
19
- def convert_processed_dialects():
20
- """Convert processed_dialects.csv to JSON format"""
21
- csv_file = SHEETS_OUTPUT_DIR / "processed_dialects.csv"
22
- json_file = JSON_OUTPUT_DIR / "processed_dialects.json"
23
-
24
- if not csv_file.exists():
25
- print(f"⚠️ CSV file not found: {csv_file}")
26
- return False
27
-
28
- try:
29
- districts = []
30
-
31
- with open(csv_file, 'r', encoding='utf-8') as f:
32
- reader = csv.DictReader(f)
33
-
34
- # Group words by district
35
- district_words = defaultdict(lambda: {
36
- 'name': '',
37
- 'lat': 0,
38
- 'lng': 0,
39
- 'region': '',
40
- 'history': '',
41
- 'words': []
42
- })
43
-
44
- for row in reader:
45
- district_name = row.get('District', '').strip()
46
- if not district_name:
47
- continue
48
-
49
- # Set district metadata (from first occurrence)
50
- if not district_words[district_name]['name']:
51
- district_words[district_name]['name'] = district_name
52
- district_words[district_name]['lat'] = float(row.get('Latitude', 0))
53
- district_words[district_name]['lng'] = float(row.get('Longitude', 0))
54
- district_words[district_name]['region'] = row.get('Region', '')
55
- district_words[district_name]['history'] = row.get('History', '')
56
-
57
- # Add word entry
58
- word_entry = {
59
- 't': row.get('Telugu_Word', ''),
60
- 'm': row.get('Meaning', ''),
61
- 's': row.get('Source', '')
62
- }
63
-
64
- if word_entry['t']: # Only add if Telugu word exists
65
- district_words[district_name]['words'].append(word_entry)
66
-
67
- # Convert to list
68
- districts = list(district_words.values())
69
-
70
- # Write JSON
71
- JSON_OUTPUT_DIR.mkdir(parents=True, exist_ok=True)
72
- with open(json_file, 'w', encoding='utf-8') as f:
73
- json.dump(districts, f, ensure_ascii=False, indent=2)
74
-
75
- print(f"✅ Converted {csv_file.name} → {json_file.name}")
76
- print(f" {len(districts)} districts, {sum(len(d['words']) for d in districts)} words")
77
- return True
78
-
79
- except Exception as e:
80
- print(f"❌ Error converting processed_dialects.csv: {e}")
81
- return False
82
-
83
-
84
- def convert_digiwords_grouped():
85
- """Convert digiwords_grouped.csv to JSON format"""
86
- csv_file = SHEETS_OUTPUT_DIR / "digiwords_grouped.csv"
87
- json_file = JSON_OUTPUT_DIR / "digiwords_grouped.json"
88
-
89
- if not csv_file.exists():
90
- print(f"⚠️ CSV file not found: {csv_file}")
91
- return False
92
-
93
- try:
94
- data = {
95
- "Telangana": defaultdict(list),
96
- "Andhra Pradesh": defaultdict(list)
97
- }
98
-
99
- with open(csv_file, 'r', encoding='utf-8') as f:
100
- reader = csv.DictReader(f)
101
-
102
- for row in reader:
103
- state = row.get('State', '').strip()
104
- district = row.get('District', '').strip()
105
-
106
- if not state or not district:
107
- continue
108
-
109
- word_entry = {
110
- 't': row.get('Telugu_Word', ''),
111
- 'm': row.get('Meaning', ''),
112
- 's': row.get('Source', 'Crowd')
113
- }
114
-
115
- if word_entry['t'] and state in data:
116
- data[state][district].append(word_entry)
117
-
118
- # Convert defaultdict to regular dict
119
- output = {
120
- state: dict(districts)
121
- for state, districts in data.items()
122
- }
123
-
124
- # Write JSON
125
- JSON_OUTPUT_DIR.mkdir(parents=True, exist_ok=True)
126
- with open(json_file, 'w', encoding='utf-8') as f:
127
- json.dump(output, f, ensure_ascii=False, indent=2)
128
-
129
- tg_count = sum(len(words) for words in output.get("Telangana", {}).values())
130
- ap_count = sum(len(words) for words in output.get("Andhra Pradesh", {}).values())
131
-
132
- print(f"✅ Converted {csv_file.name} → {json_file.name}")
133
- print(f" Telangana: {len(output.get('Telangana', {}))} districts, {tg_count} words")
134
- print(f" Andhra Pradesh: {len(output.get('Andhra Pradesh', {}))} districts, {ap_count} words")
135
- return True
136
-
137
- except Exception as e:
138
- print(f"❌ Error converting digiwords_grouped.csv: {e}")
139
- return False
140
-
141
-
142
- def main():
143
- """Convert all CSV files to JSON"""
144
- print("🔄 Starting CSV to JSON conversion...")
145
- print(f"📂 Input: {SHEETS_OUTPUT_DIR}")
146
- print(f"📂 Output: {JSON_OUTPUT_DIR}\n")
147
-
148
- success_count = 0
149
-
150
- if convert_processed_dialects():
151
- success_count += 1
152
-
153
- if convert_digiwords_grouped():
154
- success_count += 1
155
-
156
- print(f"\n✨ Conversion complete: {success_count}/2 files successfully converted")
157
-
158
-
159
- if __name__ == "__main__":
160
- main()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
scripts/file_watcher.py DELETED
@@ -1,129 +0,0 @@
1
- #!/usr/bin/env python3
2
- """
3
- File Watcher
4
- Monitors sheets_output/ directory and triggers CSV-to-JSON conversion on changes
5
- """
6
-
7
- import time
8
- import json
9
- import subprocess
10
- from pathlib import Path
11
- from watchdog.observers import Observer
12
- from watchdog.events import FileSystemEventHandler
13
-
14
- # Paths
15
- BASE_DIR = Path(__file__).parent.parent
16
- CONFIG_FILE = BASE_DIR / "config.json"
17
- CONVERTER_SCRIPT = BASE_DIR / "scripts" / "csv_to_json.py"
18
-
19
-
20
- class CSVChangeHandler(FileSystemEventHandler):
21
- """Handles CSV file changes"""
22
-
23
- def __init__(self, debounce_seconds=2):
24
- self.debounce_seconds = debounce_seconds
25
- self.last_modified = {}
26
-
27
- def on_modified(self, event):
28
- """Called when a file is modified"""
29
- if event.is_directory:
30
- return
31
-
32
- # Only process CSV files
33
- if not event.src_path.endswith('.csv'):
34
- return
35
-
36
- # Debounce: ignore rapid consecutive changes
37
- now = time.time()
38
- if event.src_path in self.last_modified:
39
- if now - self.last_modified[event.src_path] < self.debounce_seconds:
40
- return
41
-
42
- self.last_modified[event.src_path] = now
43
-
44
- print(f"\n📝 Detected change: {Path(event.src_path).name}")
45
- self.trigger_conversion()
46
-
47
- def on_created(self, event):
48
- """Called when a file is created"""
49
- if not event.is_directory and event.src_path.endswith('.csv'):
50
- print(f"\n📄 New file: {Path(event.src_path).name}")
51
- self.trigger_conversion()
52
-
53
- def trigger_conversion(self):
54
- """Run the CSV-to-JSON converter"""
55
- print("🔄 Running CSV-to-JSON conversion...")
56
-
57
- try:
58
- result = subprocess.run(
59
- ['python3', str(CONVERTER_SCRIPT)],
60
- capture_output=True,
61
- text=True,
62
- cwd=str(BASE_DIR)
63
- )
64
-
65
- if result.returncode == 0:
66
- print(result.stdout)
67
- else:
68
- print(f"❌ Conversion failed:")
69
- print(result.stderr)
70
-
71
- except Exception as e:
72
- print(f"❌ Error running converter: {e}")
73
-
74
-
75
- def load_config():
76
- """Load configuration"""
77
- if not CONFIG_FILE.exists():
78
- return {
79
- 'file_watcher': {
80
- 'enabled': True,
81
- 'watch_directory': 'sheets_output',
82
- 'debounce_seconds': 2
83
- }
84
- }
85
-
86
- with open(CONFIG_FILE, 'r') as f:
87
- return json.load(f)
88
-
89
-
90
- def main():
91
- """Start file watcher"""
92
- config = load_config()
93
- watcher_config = config.get('file_watcher', {})
94
-
95
- if not watcher_config.get('enabled', True):
96
- print("⚠️ File watcher is disabled in config.json")
97
- return
98
-
99
- watch_dir = BASE_DIR / watcher_config.get('watch_directory', 'sheets_output')
100
- debounce = watcher_config.get('debounce_seconds', 2)
101
-
102
- if not watch_dir.exists():
103
- print(f"❌ Watch directory not found: {watch_dir}")
104
- print(f"Creating directory: {watch_dir}")
105
- watch_dir.mkdir(parents=True, exist_ok=True)
106
-
107
- print("👀 File Watcher Started")
108
- print(f"📂 Watching: {watch_dir}")
109
- print(f"⏱️ Debounce: {debounce} seconds")
110
- print("\nWaiting for CSV file changes... (Press Ctrl+C to stop)\n")
111
-
112
- event_handler = CSVChangeHandler(debounce_seconds=debounce)
113
- observer = Observer()
114
- observer.schedule(event_handler, str(watch_dir), recursive=False)
115
- observer.start()
116
-
117
- try:
118
- while True:
119
- time.sleep(1)
120
- except KeyboardInterrupt:
121
- print("\n\n👋 Stopping file watcher...")
122
- observer.stop()
123
-
124
- observer.join()
125
- print("✅ File watcher stopped")
126
-
127
-
128
- if __name__ == "__main__":
129
- main()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
scripts/sheets_sync.py DELETED
@@ -1,190 +0,0 @@
1
- #!/usr/bin/env python3
2
- """
3
- Google Sheets Sync
4
- Downloads data from Google Sheets and saves as CSV files
5
- """
6
-
7
- import json
8
- import os
9
- import sys
10
- from pathlib import Path
11
- from google.auth.transport.requests import Request
12
- from google.oauth2.credentials import Credentials
13
- from google.oauth2 import service_account
14
- from google_auth_oauthlib.flow import InstalledAppFlow
15
- from googleapiclient.discovery import build
16
- from googleapiclient.errors import HttpError
17
-
18
- # If modifying these scopes, delete the file token.json.
19
- SCOPES = ['https://www.googleapis.com/auth/spreadsheets.readonly']
20
-
21
- # Paths
22
- BASE_DIR = Path(__file__).parent.parent
23
- CONFIG_FILE = BASE_DIR / "config.json"
24
- SHEETS_OUTPUT_DIR = BASE_DIR / "sheets_output"
25
-
26
-
27
- def load_config():
28
- """Load configuration from config.json"""
29
- if not CONFIG_FILE.exists():
30
- print(f"❌ Config file not found: {CONFIG_FILE}")
31
- sys.exit(1)
32
-
33
- with open(CONFIG_FILE, 'r') as f:
34
- return json.load(f)
35
-
36
-
37
- def get_credentials(config):
38
- """Get Google Sheets API credentials"""
39
- creds = None
40
- credentials_file = BASE_DIR / config['google_sheets']['credentials_file']
41
- token_file = BASE_DIR / 'token.json'
42
-
43
- # Check if credentials file exists
44
- if not credentials_file.exists():
45
- print(f"❌ Credentials file not found: {credentials_file}")
46
- print("\n📝 To set up Google Sheets API:")
47
- print("1. Go to https://console.cloud.google.com/")
48
- print("2. Create a new project or select existing")
49
- print("3. Enable Google Sheets API")
50
- print("4. Create credentials (OAuth 2.0 or Service Account)")
51
- print(f"5. Download credentials.json to {BASE_DIR}")
52
- sys.exit(1)
53
-
54
- # Try service account first (recommended for automation)
55
- try:
56
- creds = service_account.Credentials.from_service_account_file(
57
- str(credentials_file), scopes=SCOPES)
58
- print("✅ Using service account credentials")
59
- return creds
60
- except Exception:
61
- pass
62
-
63
- # Fall back to OAuth flow
64
- if token_file.exists():
65
- creds = Credentials.from_authorized_user_file(str(token_file), SCOPES)
66
-
67
- # If there are no (valid) credentials available, let the user log in.
68
- if not creds or not creds.valid:
69
- if creds and creds.expired and creds.refresh_token:
70
- creds.refresh(Request())
71
- else:
72
- flow = InstalledAppFlow.from_client_secrets_file(
73
- str(credentials_file), SCOPES)
74
- creds = flow.run_local_server(port=0)
75
-
76
- # Save the credentials for the next run
77
- with open(token_file, 'w') as token:
78
- token.write(creds.to_json())
79
-
80
- print("✅ Using OAuth credentials")
81
- return creds
82
-
83
-
84
- def download_sheet_as_csv(service, spreadsheet_id, sheet_name, output_filename):
85
- """Download a specific sheet as CSV"""
86
- try:
87
- # Get the sheet data
88
- result = service.spreadsheets().values().get(
89
- spreadsheetId=spreadsheet_id,
90
- range=f"{sheet_name}!A:Z" # Adjust range as needed
91
- ).execute()
92
-
93
- values = result.get('values', [])
94
-
95
- if not values:
96
- print(f"⚠️ No data found in sheet: {sheet_name}")
97
- return False
98
-
99
- # Write to CSV
100
- output_file = SHEETS_OUTPUT_DIR / output_filename
101
- SHEETS_OUTPUT_DIR.mkdir(parents=True, exist_ok=True)
102
-
103
- import csv
104
- with open(output_file, 'w', newline='', encoding='utf-8') as f:
105
- writer = csv.writer(f)
106
- writer.writerows(values)
107
-
108
- print(f"✅ Downloaded {sheet_name} → {output_filename}")
109
- print(f" {len(values)} rows")
110
- return True
111
-
112
- except HttpError as error:
113
- print(f"❌ Error downloading {sheet_name}: {error}")
114
- return False
115
-
116
-
117
- def sync_all_sheets():
118
- """Sync all configured sheets from Google Sheets"""
119
- config = load_config()
120
-
121
- if not config['google_sheets']['enabled']:
122
- print("⚠️ Google Sheets sync is disabled in config.json")
123
- return False
124
-
125
- # Check if using new multi-spreadsheet config
126
- spreadsheets = config['google_sheets'].get('spreadsheets', [])
127
-
128
- if not spreadsheets:
129
- # Fallback to old single spreadsheet config
130
- spreadsheet_id = config['google_sheets'].get('spreadsheet_id', 'YOUR_SHEET_ID_HERE')
131
- if spreadsheet_id == "YOUR_SHEET_ID_HERE":
132
- print("❌ Please update config.json with your spreadsheet IDs")
133
- print("\n📝 To find your spreadsheet ID:")
134
- print("Open your Google Sheet and copy the ID from the URL:")
135
- print("https://docs.google.com/spreadsheets/d/[SPREADSHEET_ID]/edit")
136
- return False
137
-
138
- # Convert old format to new format for processing
139
- spreadsheets = [{
140
- 'name': 'Main Spreadsheet',
141
- 'spreadsheet_id': spreadsheet_id,
142
- 'sheets': config['google_sheets'].get('sheets', {})
143
- }]
144
-
145
- print("🔄 Starting Google Sheets sync...")
146
- print(f"📊 Syncing from {len(spreadsheets)} spreadsheet(s)\n")
147
-
148
- try:
149
- creds = get_credentials(config)
150
- service = build('sheets', 'v4', credentials=creds)
151
-
152
- total_success = 0
153
- total_sheets = 0
154
-
155
- # Process each spreadsheet
156
- for spreadsheet in spreadsheets:
157
- spreadsheet_id = spreadsheet.get('spreadsheet_id', '')
158
- spreadsheet_name = spreadsheet.get('name', 'Unnamed')
159
- sheets_config = spreadsheet.get('sheets', {})
160
-
161
- if not spreadsheet_id or spreadsheet_id.startswith('YOUR_'):
162
- print(f"⚠️ Skipping '{spreadsheet_name}': ID not configured")
163
- continue
164
-
165
- print(f"📋 {spreadsheet_name}")
166
- print(f" ID: {spreadsheet_id[:20]}...")
167
-
168
- # Download each sheet from this spreadsheet
169
- for csv_name, sheet_name in sheets_config.items():
170
- total_sheets += 1
171
- if download_sheet_as_csv(service, spreadsheet_id, sheet_name, f"{csv_name}.csv"):
172
- total_success += 1
173
-
174
- print() # Blank line between spreadsheets
175
-
176
- print(f"✨ Sync complete: {total_success}/{total_sheets} sheets downloaded")
177
- return total_success > 0
178
-
179
- except Exception as e:
180
- print(f"❌ Error during sync: {e}")
181
- return False
182
-
183
-
184
- def main():
185
- """Main entry point"""
186
- sync_all_sheets()
187
-
188
-
189
- if __name__ == '__main__':
190
- main()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
sheets_output/digiwords_grouped.csv DELETED
@@ -1,179 +0,0 @@
1
- State,District,Telugu_Word,Meaning,Source
2
- Andhra Pradesh,Anantapur,దిండు,Pillows,Crowd
3
- Andhra Pradesh,Annamayya,ఆ తుప్పాస్,Nonsense/Useless,Crowd
4
- Andhra Pradesh,Chittoor,ముడ్దులు,అంగడి,Crowd
5
- Andhra Pradesh,Chittoor,సెమిరేసినావ,Prepared,Crowd
6
- Andhra Pradesh,Chittoor,వంకాయ పులగూర్,కూర,Crowd
7
- Andhra Pradesh,Chittoor,ఈరి మోది,పచ్చడి,Crowd
8
- Andhra Pradesh,Chittoor,అబ్బ,Grandfather,Crowd
9
- Andhra Pradesh,Chittoor,జెడి,Hair knot,Crowd
10
- Andhra Pradesh,East Godavari,దుకాణం,కొట్టు,Crowd
11
- Andhra Pradesh,East Godavari,పైరు,బంగాళదుంప,Crowd
12
- Andhra Pradesh,East Godavari,బువ్వ,Food,Crowd
13
- Andhra Pradesh,East Godavari,గుడి,దేవాలయం,Crowd
14
- Andhra Pradesh,East Godavari,సామానం,ఆలస్యం చేయడం,Crowd
15
- Andhra Pradesh,East Godavari,బేగ రా,తొందరగా రా,Crowd
16
- Andhra Pradesh,Eluru,శనగపప్పు,వేరుశనగ,Crowd
17
- Andhra Pradesh,Eluru,చాలా బాగుంది,Very good,Crowd
18
- Andhra Pradesh,Kadapa,కంత,రంధ్రం (Hole),Crowd
19
- Andhra Pradesh,Kadapa,బాగా ఎక్కువగా,Exceedingly,Crowd
20
- Andhra Pradesh,Kadapa,చాపు మాటలు,పెద్ద మాటలు,Crowd
21
- Andhra Pradesh,Kadapa,బొరుగులు,మరమరాలు,Crowd
22
- Andhra Pradesh,Kadapa,రామాడం,మెత్తగా చేయడం,Crowd
23
- Andhra Pradesh,Kadapa,ఎనుము,బర్రె,Crowd
24
- Andhra Pradesh,Kadapa,ముక్కొల్,3 వాడిముళ్ళు,Crowd
25
- Andhra Pradesh,Kurnool,బుడ్డల నూనె,పల్లి oil (Peanut oil),Crowd
26
- Andhra Pradesh,Nandyal,తంగాది,కొట్టుదు ఇచ్చింది మధ్యన,Crowd
27
- Andhra Pradesh,Nandyal,గుడి,దేవాలయము,Crowd
28
- Andhra Pradesh,Nandyal,హితాలు,బువ్వ తిన్నారా,Crowd
29
- Andhra Pradesh,Nandyal,తద్దినం,పితృ దేవతల కార్యం,Crowd
30
- Andhra Pradesh,Nandyal,తువాయి,ఆవు దూడ (Calf),Crowd
31
- Andhra Pradesh,Nandyal,పురుకోస,Jute thread twisted,Crowd
32
- Andhra Pradesh,Ongole,బయట వెళ్ళాడు,బయటకు వెళ్ళాడు,Crowd
33
- Andhra Pradesh,P.R. నియోజకవర్గం,ఎర్రగడ్డ,Onion,Crowd
34
- Andhra Pradesh,P.R. నియోజకవర్గం,తెల్ల గడ్డ,వెల్లుల్లి,Crowd
35
- Andhra Pradesh,P.R. నియోజకవర్గం,ఉల్లగడ్డ,Potato,Crowd
36
- Andhra Pradesh,P.R. నియోజకవర్గం,ఖిన్నారా,అద్దెకు రా,Crowd
37
- Andhra Pradesh,P.R. నియోజకవర్గం,ముడక,నాగలి,Crowd
38
- Andhra Pradesh,P.R. నియోజకవర్గం,కొక,చీర,Crowd
39
- Andhra Pradesh,P.R. నియోజకవర్గం,రైన,జాకెట్,Crowd
40
- Andhra Pradesh,P.R. నియోజకవర్గం,కడ్డీలు,అగరబత్తిలు,Crowd
41
- Andhra Pradesh,P.R. నియోజకవర్గం,పెద్ద నాన్న,నాన్న అన్న,Crowd
42
- Andhra Pradesh,P.R. నియోజకవర్గం,చిన్న నాన్న,నాన్న తమ్ముడు,Crowd
43
- Andhra Pradesh,P.R. నియోజకవర్గం,పెద్దమ్మ,నాన్న అన్న భార్య,Crowd
44
- Andhra Pradesh,P.R. నియోజకవర్గం,చిన్నమ్మ,నాన్న తమ్ముడు భార్య,Crowd
45
- Andhra Pradesh,P.R. నియోజకవర్గం,పొద్దు పొయ్యింది,సాయంత్రం సమయం,Crowd
46
- Andhra Pradesh,Rayalaseema,లోపల,Inside,Crowd
47
- Andhra Pradesh,Rayalaseema,బొగాలు,Keys,Crowd
48
- Andhra Pradesh,Srikakulam,డొంక,తలుపు (Door),Crowd
49
- Andhra Pradesh,Srikakulam,కుంక,Pillodu,Crowd
50
- Andhra Pradesh,Srikakulam,ఖాగి,వేగంగా,Crowd
51
- Andhra Pradesh,Srikakulam,బాతె,చావు,Crowd
52
- Andhra Pradesh,Srikakulam,అమ్మ,Mother,Crowd
53
- Andhra Pradesh,Srikakulam,తెల్లారితే,వేకువన,Crowd
54
- Andhra Pradesh,Tirupati,ఊరాల్,Nonsense,Crowd
55
- Andhra Pradesh,Vizianagaram,ఉకుజురు,Egg Burji,Crowd
56
- Andhra Pradesh,Vizianagaram,వర్ర,కారం,Crowd
57
- Andhra Pradesh,Vizianagaram,బేపి,కుక్క,Crowd
58
- Andhra Pradesh,Vizianagaram,పైనా,పైన,Crowd
59
- Andhra Pradesh,Vizianagaram,దొడ్డ,పెద్ద అమ్మ,Crowd
60
- Andhra Pradesh,Vizianagaram,జిజ బేగరా,తొందరగా రా,Crowd
61
- Andhra Pradesh,Vizianagaram,బంగాళదుంప,ఆలుగడ్డ,Crowd
62
- Andhra Pradesh,Vizianagaram,ఉల్లిపాయ,ఎర్రగ���్డ,Crowd
63
- Andhra Pradesh,Vizianagaram,అప్ప,అక్క,Crowd
64
- Andhra Pradesh,Vizianagaram,గుంత,రంధ్రం,Crowd
65
- Andhra Pradesh,Vizianagaram,గెడ/బర్రె,Buffalo,Crowd
66
- Andhra Pradesh,Vizianagaram,గడ్డి,చిన్న సెలయేరు,Crowd
67
- Andhra Pradesh,West Godavari,రాతు తడి,Irrigation term,Crowd
68
- Telangana,Adilabad,చోలోట్,మంచి (Good),Crowd
69
- Telangana,Adilabad,వంచెడ్ చిబడ్,అంటు ముట్టుకోడం,Crowd
70
- Telangana,Adilabad,వడోగు,దూడ (Calf),Crowd
71
- Telangana,Adilabad,ముచిలి పడన్,ఎర్ర తుమ్మెద,Crowd
72
- Telangana,Adilabad,సర్కార్,నాశనం,Crowd
73
- Telangana,Adilabad,వజీర్,ముసలి,Crowd
74
- Telangana,Adilabad,ఖైని,వదిన,Crowd
75
- Telangana,Adilabad,సూన్,కోడలు,Crowd
76
- Telangana,Adilabad,Poral batal,Temple term (Keslapur),Crowd
77
- Telangana,Gadwal,ఓల్లి,No,Crowd
78
- Telangana,Gadwal,కూడు తింటవా,తిన్నారా,Crowd
79
- Telangana,Gadwal,తువ్వ,ఎర్ర పొలం,Crowd
80
- Telangana,Gadwal,పురకోస,జూట్ దార,Crowd
81
- Telangana,Gadwal,జుముజలమ్మ,దేవత,Crowd
82
- Telangana,Gadwal,తలుగు ఎల్లమ్మ,దేవత,Crowd
83
- Telangana,Gadwal,తెల్వది,Don't know,Crowd
84
- Telangana,Gadwal,మడసంగ,నెమ్మదిగా/జాగ్రత్తగా,Crowd
85
- Telangana,Gadwal,రప్పున,జల్ది,Crowd
86
- Telangana,Gadwal,మడసంగ,Careful,Crowd
87
- Telangana,Hyderabad,కిటికీ,Window,Crowd
88
- Telangana,Hyderabad,అంగీ,Shirt,Crowd
89
- Telangana,Hyderabad,కుక్క,Dog,Crowd
90
- Telangana,Hyderabad,కుర్చీ,Chair,Crowd
91
- Telangana,Hyderabad,Amma buvva pettava,Mother feed me,Crowd
92
- Telangana,Hyderabad,Chaderghat,Location,Crowd
93
- Telangana,Hyderabad,తొవ్వ దారి,Way/Path,Crowd
94
- Telangana,Hyderabad,పాతాళగరిసె,Tool to remove bucket,Crowd
95
- Telangana,Hyderabad,అంబటాలు,Afternoon time,Crowd
96
- Telangana,Hyderabad,ఇన్సురాయి,Stone tool,Crowd
97
- Telangana,Hyderabad,బుక్కెట్,Tool for well,Crowd
98
- Telangana,Jangaon,ఏమైంది,What happened,Crowd
99
- Telangana,Karimnagar,బూరెలు,భక్ష్యాలు,Crowd
100
- Telangana,Karimnagar,అచ్చినం,వచ్చాము,Crowd
101
- Telangana,Karimnagar,పాయినం,వెళ్ళాము,Crowd
102
- Telangana,Karimnagar,సవాలు,Question/Challenge,Crowd
103
- Telangana,Karimnagar,గటక,Food item,Crowd
104
- Telangana,Karimnagar,వస్తున్నావ,వస్తున్నావు,Crowd
105
- Telangana,Karimnagar,ఊశము,బద్ధకం/అలసత్వం,Crowd
106
- Telangana,Karimnagar,వందంగా ఉంది,బాగా,Crowd
107
- Telangana,Karimnagar,రువిడ్లు,Shelf,Crowd
108
- Telangana,Karimnagar,కార్యపాలు,వస్తున్నం/పోతున్నాం,Crowd
109
- Telangana,Karimnagar,బావి,నూతి,Crowd
110
- Telangana,Karimnagar,గంప,గుల్ల,Crowd
111
- Telangana,Karimnagar,బంతి,Ball,Crowd
112
- Telangana,Mahabubnagar,వీధి,Street,Crowd
113
- Telangana,Mahabubnagar,జల్ది,తొందరగా,Crowd
114
- Telangana,Mahabubnagar,జింగిడి,బర్రెల గుంపు,Crowd
115
- Telangana,Mahabubnagar,బాగమ్,Exhibition,Crowd
116
- Telangana,Mahabubnagar,చలక,Field,Crowd
117
- Telangana,Mahabubnagar,ఈల పేట,కత్తి పేట,Crowd
118
- Telangana,Mahabubabad,బొచ్చెడు,చాలా (A lot),Crowd
119
- Telangana,Mahabubabad,ఏ మయింది అన్నా,What happened,Crowd
120
- Telangana,Medak,కీసా,జేబు,Crowd
121
- Telangana,Medak,పైను,ఆరు (Six),Crowd
122
- Telangana,Nagar Kurnool,అంబటాలు,Morning meal time,Crowd
123
- Telangana,Nagar Kurnool,మంకర,Winter cold,Crowd
124
- Telangana,Nagar Kurnool,లాడు,తల్లి కూతురు,Crowd
125
- Telangana,Nagar Kurnool,గెనిమ,పొలం గట్టు,Crowd
126
- Telangana,Nagar Kurnool,కోంత లోలు,Old name for Nagar Kurnool,Crowd
127
- Telangana,Nalgonda,Dupa aithundhi,దాహం వేస్తుంది,Crowd
128
- Telangana,Nalgonda,సేరు,1kg measuring device,Crowd
129
- Telangana,Nalgonda,Kurdedu Biyam,Amount of rice,Crowd
130
- Telangana,Nalgonda,Anglam dundu,అగ్గి పెట్టె,Crowd
131
- Telangana,Nalgonda,సది,Take the box,Crowd
132
- Telangana,Nalgonda,తట్ట,పళ్ళెం,Crowd
133
- Telangana,Nalgonda,కోవెల,గుడి,Crowd
134
- Telangana,Nalgonda,ఊసలు,Weaving technique,Crowd
135
- Telangana,Nalgonda,బువ్వ,Cooked rice,Crowd
136
- Telangana,Nalgonda,తవాచీ,Shelf with doors,Crowd
137
- Telangana,Nalgonda,తపుకు,Plate on vessel,Crowd
138
- Telangana,Nalgonda,లడ్లు,అరిసెలు,Crowd
139
- Telangana,Nalgonda,దారి,బాట,Crowd
140
- Telangana,Narayanpet,బుబ్బి,అమ్మ,Crowd
141
- Telangana,Narayanpet,పడం,మట్టి,Crowd
142
- Telangana,Narayanpet,చెముక్కలు,మోకాళ్ళు,Crowd
143
- Telangana,Narayanpet,మొర,మంచం,Crowd
144
- Telangana,Narayanpet,అబుత,జుట్టు,Crowd
145
- Telangana,Narayanpet,జేజి,Fat,Crowd
146
- Telangana,Narayanpet,అంబలి,జావ,Crowd
147
- Telangana,Nizamabad,పంపేవుడు,పంపించడం,Crowd
148
- Telangana,Nizamabad,Pillodu,Bindu,Crowd
149
- Telangana,Nizamabad,వచ్చిండు,అచ్చిండు,Crowd
150
- Telangana,Peddapally,గుమ్ము,Storage,Crowd
151
- Telangana,Peddapally,గట్టు,దారి,Crowd
152
- Telangana,Rangareddy,వీరునో,తెలుగు,Crowd
153
- Telangana,Rangareddy,తొక్కుడు,మంచం,Crowd
154
- Telangana,Rangareddy,మూర,ముంగిలి,Crowd
155
- Telangana,Rangareddy,కారం,పచ్చడి,Crowd
156
- Telangana,Rangareddy,ఈ గడ,కడ,Crowd
157
- Telangana,Siddipet,అంగీ,Shirt,Crowd
158
- Telangana,Siddipet,పొయ్యిర్రు,వెళ్ళారు,Crowd
159
- Telangana,Siddipet,మెగులుతుంది,వర్షం వచ్చి ఆగిన,Crowd
160
- Telangana,Siddipet,అలుకురు,Pre cultivation,Crowd
161
- Telangana,Siddipet,పయిలం,జాగ్రత్త,Crowd
162
- Telangana,Siddipet,తప్పెలు,Rice plate,Crowd
163
- Telangana,Siddipet,పందిట్లు,పందిరి,Crowd
164
- Telangana,Siddipet,రాకొచ్చింది,రాదు,Crowd
165
- Telangana,Siddipet,పోకొచ్చింది,పోదు,Crowd
166
- Telangana,Siddipet,కుకో,కూర్చో,Crowd
167
- Telangana,Siddipet,ఏడారు,Afternoon time,Crowd
168
- Telangana,Wanaparthy,చెప్పలకాయలు,గొంకరకాయలు,Crowd
169
- Telangana,Wanaparthy,మలంచా,చెంబు,Crowd
170
- Telangana,Wanaparthy,సొరకాయ,ఆనకాయ,Crowd
171
- Telangana,Wanaparthy,పాశాల,Clothes,Crowd
172
- Telangana,Wanaparthy,మట్టుగుండు,Keep calm,Crowd
173
- Telangana,Wanaparthy,అంబరుంది,Excellent,Crowd
174
- Telangana,Warangal,చేను,Crop/చలక,Crowd
175
- Telangana,Warangal,పొయ్యం రారా,ఇన్నానిల్లు,Crowd
176
- Telangana,Warangal,అసుంట,అటు వైపు,Crowd
177
- Telangana,Warangal,ఇసుంట,ఇటు వైపు,Crowd
178
- Telangana,Warangal,చద్దెర,Bed sheet,Crowd
179
- Andhra Pradesh,Guntur,నగబు ,An ancient word for snake,Crowd
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
sheets_output/processed_dialects.csv DELETED
The diff for this file is too large to render. See raw diff