# qasimcyrus/multilanguage architecture

> Architecture diagram of the GitHub repository qasimcyrus/multilanguage, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/qasimcyrus/multilanguage
- Repository: https://github.com/qasimcyrus/multilanguage

## Overview

MultiLanguage is an Android localization library, demonstrated by an app that lets users select a language or follow the system setting. The runtime flow initializes system-locale tracking, applies the saved locale when contexts attach, persists explicit changes, and builds locale-specific resources and strings. The library also exposes a replaceable language-store interface and handles Android-version-specific configuration behavior. The README documents these APIs; the graph uses sampled source for call relationships and omits implementation details of unsampled Android resources and manifests.

Main entry points: [`language/src/main/java/com/cyrus/language/LanguageHelper.kt`](https://github.com/qasimcyrus/multilanguage/blob/master/language/src/main/java/com/cyrus/language/LanguageHelper.kt) (LanguageHelper), [`app/src/main/java/com/cyrus/languagedemo/MainActivity.kt`](https://github.com/qasimcyrus/multilanguage/blob/master/app/src/main/java/com/cyrus/languagedemo/MainActivity.kt) (Language chooser), [`language/src/main/java/com/cyrus/language/LanguageUtils.kt`](https://github.com/qasimcyrus/multilanguage/blob/master/language/src/main/java/com/cyrus/language/LanguageUtils.kt) (LanguageUtils), [`language/src/main/java/com/cyrus/language/SystemLanguage.kt`](https://github.com/qasimcyrus/multilanguage/blob/master/language/src/main/java/com/cyrus/language/SystemLanguage.kt) (SystemLanguage)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_demo["Demo app"]
  node_app["Application<br/>[App.kt]"]
  node_activity["Language chooser<br/>[MainActivity.kt]"]
  node_demo_strings["Localized strings<br/>[strings.xml]"]
end

subgraph group_api["Language API"]
  node_helper["LanguageHelper<br/>[LanguageHelper.kt]"]
  node_store_api["LanguageStore<br/>[LanguageStore.kt]"]
end

subgraph group_runtime["Locale runtime"]
  node_utils["LanguageUtils<br/>[LanguageUtils.kt]"]
  node_system_locale["SystemLanguage<br/>[SystemLanguage.kt]"]
end

subgraph group_state["Locale state"]
  node_store_impl[("Preferences store")]
end

node_user(("User"))
node_android["Android platform"]

node_user -->|"chooses language"| node_activity
node_app -->|"initializes; attaches"| node_helper
node_activity -->|"reads; updates"| node_helper
node_activity -->|"displays labels"| node_demo_strings
node_helper -->|"reads; saves"| node_store_api
node_helper -->|"updates configuration; gets resources"| node_utils
node_helper -->|"registers; reads locale"| node_system_locale
node_store_impl -->|"uses preferences"| node_android
node_system_locale -->|"registers callback"| node_android
node_utils -->|"creates configured contexts"| node_android

click node_app "https://github.com/qasimcyrus/multilanguage/blob/master/app/src/main/java/com/cyrus/languagedemo/App.kt"
click node_activity "https://github.com/qasimcyrus/multilanguage/blob/master/app/src/main/java/com/cyrus/languagedemo/MainActivity.kt"
click node_demo_strings "https://github.com/qasimcyrus/multilanguage/blob/master/app/src/main/res/values/strings.xml"
click node_helper "https://github.com/qasimcyrus/multilanguage/blob/master/language/src/main/java/com/cyrus/language/LanguageHelper.kt"
click node_store_api "https://github.com/qasimcyrus/multilanguage/blob/master/language/src/main/java/com/cyrus/language/LanguageStore.kt"
click node_utils "https://github.com/qasimcyrus/multilanguage/blob/master/language/src/main/java/com/cyrus/language/LanguageUtils.kt"
click node_system_locale "https://github.com/qasimcyrus/multilanguage/blob/master/language/src/main/java/com/cyrus/language/SystemLanguage.kt"
click node_store_impl "https://github.com/qasimcyrus/multilanguage/blob/master/language/src/main/java/com/cyrus/language/LanguageStoreImpl.kt"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_app,node_activity,node_demo_strings,node_user toneBlue
class node_helper,node_store_api toneAmber
class node_utils,node_system_locale toneMint
class node_store_impl toneRose
class node_android toneIndigo
```

## Components

### Demo app

- [Application](https://github.com/qasimcyrus/multilanguage/blob/master/app/src/main/java/com/cyrus/languagedemo/App.kt): `app/src/main/java/com/cyrus/languagedemo/App.kt`
- [Language chooser](https://github.com/qasimcyrus/multilanguage/blob/master/app/src/main/java/com/cyrus/languagedemo/MainActivity.kt): `app/src/main/java/com/cyrus/languagedemo/MainActivity.kt`
- [Localized strings](https://github.com/qasimcyrus/multilanguage/blob/master/app/src/main/res/values/strings.xml): `app/src/main/res/values/strings.xml`

### Language API

- [LanguageHelper](https://github.com/qasimcyrus/multilanguage/blob/master/language/src/main/java/com/cyrus/language/LanguageHelper.kt): `language/src/main/java/com/cyrus/language/LanguageHelper.kt`
- [LanguageStore](https://github.com/qasimcyrus/multilanguage/blob/master/language/src/main/java/com/cyrus/language/LanguageStore.kt): `language/src/main/java/com/cyrus/language/LanguageStore.kt`

### Locale runtime

- [LanguageUtils](https://github.com/qasimcyrus/multilanguage/blob/master/language/src/main/java/com/cyrus/language/LanguageUtils.kt): `language/src/main/java/com/cyrus/language/LanguageUtils.kt`
- [SystemLanguage](https://github.com/qasimcyrus/multilanguage/blob/master/language/src/main/java/com/cyrus/language/SystemLanguage.kt): `language/src/main/java/com/cyrus/language/SystemLanguage.kt`

### Locale state

- [Preferences store](https://github.com/qasimcyrus/multilanguage/blob/master/language/src/main/java/com/cyrus/language/LanguageStoreImpl.kt): `language/src/main/java/com/cyrus/language/LanguageStoreImpl.kt`

### Other components

- **User**
- **Android platform**

## Connections

- User → Language chooser: chooses language
- Application → LanguageHelper: initializes; attaches
- Language chooser → LanguageHelper: reads; updates
- Language chooser → Localized strings: displays labels
- LanguageHelper → LanguageStore: reads; saves
- LanguageHelper → LanguageUtils: updates configuration; gets resources
- LanguageHelper → SystemLanguage: registers; reads locale
- Preferences store → Android platform: uses preferences
- SystemLanguage → Android platform: registers callback
- LanguageUtils → Android platform: creates configured contexts
