Multilingual Kistanigna dictionary with 9,924 records built for iOS.
# Kistane Dictionary
Kistane is a multilingual iOS dictionary designed to make Kistanigna easier to access, learn, and preserve digitally.
Kistanigna · English · Amharic
## Why I Built It
Kistanigna is spoken by the Kistane community in Ethiopia and throughout the diaspora, but it has far fewer digital resources than widely supported languages. When a language is difficult to find in the tools people use every day, vocabulary and cultural knowledge become harder to pass on—especially for younger generations growing up away from home.
I built Kistane Dictionary to give the community a practical way to search words, study vocabulary, and explore traditions from an iPhone. The goal is modest but important: make Kistanigna easier to access today while helping preserve it in digital form for the future.
## Features
- Browse 9,924 local dictionary records across Kistanigna, English, and Amharic
- Search all three languages with exact, prefix, and substring relevance scoring
- Switch the primary display language without reloading the dataset
- Save favorite entries locally on the device
- Practice vocabulary through category-based, seven-question quizzes and answer review
- Explore six traditions with cultural descriptions and image galleries
## Architecture
The app uses a view-driven SwiftUI structure rather than a formal MVVM layer.
```text
SwiftUI app and tab navigation
│
├── Dictionary and search views
├── Favorites views
├── Quiz views
└── Traditions gallery
│
View-owned application state
│
DictionaryLoader + UserDefaults
│
Bundled JSON dictionary
```
`DictionaryLoader` decodes the bundled JSON file into `DictionaryEntry` values. The home view loads a small preview first, then decodes and caches the complete dataset on a background queue. Search work is debounced and performed away from the main rendering path before grouped sections are applied to the UI.
Favorites are represented by stable entry keys and persisted with SwiftUI's `@AppStorage`, backed by …