Observed since 20 Oct, 16:54 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
Multilingual African Languages Extension for AAEP — first-class Yoruba, Hausa, Igbo support
A canonical AAEP extension demonstrating first-class support for Yoruba, Hausa, and Igbo — three of the most widely-spoken African languages, together used by approximately 150 million people across West Africa and the diaspora.
This extension serves two purposes:
Referenced from Specification Chapter 7 §7.7.1 and Chapter 11 as the canonical multilingual extension example.
AAEP's core specification is canonical-English by convention (matching W3C and IETF practice). But the protocol's stated purpose — making AI agents accessible to everyone — would fail if accessibility tooling could only speak English to Yoruba grandmothers, Hausa traders, or Igbo students.
The standard pattern for accessibility specs is: launch in English, accept patches for other languages over years. We do better. This extension ships in v1.0.0 alongside the core specification, treating these three languages as first-class from launch, not as afterthoughts to be retrofitted.
The pattern this extension establishes is reusable. A Swahili, Wolof, Amharic, or any-other-language extension follows the same shape.
Standard BCP 47 language tags with our extension namespace:
| Language | Tag | Native name | Estimated speakers |
|---|---|---|---|
| Yoruba | yo | Yorùbá | ~50 million |
| Hausa | ha | Hausa | ~80 million |
| Igbo | ig | Asụsụ Igbo | ~30 million |
For each event type, the extension provides idiomatic translations of the summary_normal, summary_terse, and summary_detailed fields. Producers can opt-in to multilingual output by setting:
{
"language": "yo",
"summary_normal": "Mò ń mú orúkọ rẹ wá",
"summary_terse": "Ìpadàbọ̀",
"summary_detailed": "Mò ń mú orúkọ tó wà ní ìwé àkọsílẹ̀ rẹ wá",
"localization_hints": {
"primary_language": "yo",
"available_languages": ["yo", "en"]
}
}
The extension provides the canonical translation tables in translations/ so producers don't have to translate from scratch.
Different languages have different natural speaking rates. The extension provides recommended pace_wpm ranges:
| Language | Recommended pace_wpm range | Notes |
|---|---|---|
| Yoruba | 110–150 | Tonal language; slower pace aids comprehension of tone marks |
| Hausa | 130–170 | Faster, syllable-timed |
| Igbo | 110–150 | Tonal; similar to Yoruba |
| English (reference) | 140–180 | Stress-timed |
Subscribers can use these as defaults when negotiating with producers (see Capability Negotiation in Chapter 5).
Yoruba and Igbo are tonal languages where diacritics are not optional decorations — they encode meaning. The extension defines normative rules:
ọ not o)localization_hints.fallback_applied = trueThese three languages handle pluralization differently from English:
The extension includes pluralize() helper functions that apply the correct rules per language.
All three languages are typically written left-to-right in modern usage. However, Hausa has historical use in Ajami (Arabic script, right-to-left). The extension acknowledges this and reserves localization_hints.script values:
latin — default for all three languagesajami — for Hausa in Arabic script (RTL); sets text_direction: "rtl"cd examples/extensions/multilingual-african-languages
pip install -e .
Requires Python 3.10 or newer. Runtime dependencies are minimal (aaep-minimal-producer for the emitter API).
from aaep_minimal_producer.emitter import AAEPEmitter
from aaep_ext_african_languages import translate_summary, recommended_pace
emitter = AAEPEmitter(send_event=my_transport, agent_id="my-agent")
session_id = emitter.start_session(
summary_normal=translate_summary("session.started", language="yo"),
request_text="Mo nilo iranlowo pẹlu owó-mi",
localization_hints={
"primary_language": "yo",
"available_languages": ["yo", "en"],
"pace_wpm": recommended_pace("yo"),
},
)
from aaep_ext_african_languages import select_summary
def on_event(event):
# Pick the best language for the user
text = select_summary(event, preferred_languages=["yo", "en"])
speak(text)
The helper functions handle the gritty work: choosing the right available language, applying fallback chains, preserving tone marks when supported.
The extension ships canonical translation tables in translations/:
translations/
├── yo.json # Yoruba
├── ha.json # Hausa
└── ig.json # Igbo
Each file maps AAEP event type → translation block. Translators can contribute updates via the standard ACP process.
Example excerpt from yo.json:
{
"language": "yo",
"name_native": "Yorùbá",
"events": {
"aaep:agent.session.started": {
"summary_terse": "Ìbẹ̀rẹ̀",
"summary_normal": "Mò ń bẹ̀rẹ̀ iṣẹ́ rẹ",
"summary_detailed": "Mò ń bẹ̀rẹ̀ iṣẹ́ tó béèrè nípa..."
},
"aaep:agent.tool.invoked": {
"summary_terse": "Lílo ohun-èlò",
"summary_normal": "Mò ń lo {tool}",
"summary_detailed": "Mò ń lo ohun-èlò {tool} pẹ̀lú àwọn àlàyé"
},
"aaep:agent.awaiting.confirmation": {
"summary_terse": "Béèrè ìfọwọ́sí",
"summary_normal": "Ṣé kí n ṣe {action}?",
"summary_detailed": "Mò ń béèrè ìfọwọ́sí rẹ kí n tó ṣe {action}. {consequence}"
}
}
}
Producers use a simple format-string interpolation: {tool}, {action}, {consequence} get replaced from the event's structured fields.
The translations shipped in v1.0.0 are reviewed by native speakers but should be considered community-driven and iterable. Contributions welcome:
To contribute translations:
governance/CONTRIBUTING.md §7.1 on translation contributionstranslations/<lang>.jsonmultilingual-african-languages/
├── README.md
├── extension.json # Extension manifest
├── pyproject.toml
├── aaep_ext_african_languages/
│ ├── __init__.py
│ ├── translations.py # Translation lookup + interpolation
│ └── locale_data.py # Speech rates, scripts, pluralization
├── translations/
│ ├── yo.json
│ ├── ha.json
│ └── ig.json
└── tests/
└── test_translations.py
This extension is non-normative (per AAEP Chapter 7 §7.3). Producers MAY implement it; subscribers MAY support it. The extension does not modify any normative requirement in core AAEP.
Conformance to the extension itself is signaled via the supported_extensions capability:
{
"supported_extensions": ["aaep-ext-african-languages-1.0"]
}
Producers and subscribers exchanging this in handshake know they can use the extension's features.
AAEP's success depends on serving users globally, not just English speakers. By shipping a worked multilingual extension in v1.0.0:
This extension is what the broader accessibility community needed but hasn't gotten from English-centric specs.
../medical-hipaa/ — sister extension for healthcare contextsDownload counts and popularity will appear here as the collector receives them.
| Version | Published | Direct dependencies | Open version |
|---|---|---|---|
| 1.0.0 | 4 Jun 2026 | 4 |
This describes our collected data; it is not a security assessment.
Observed since 20 Oct, 16:54 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package:b0d2c753686ff246ff29ae070c77750d929c038d124704d5bedb3aac59c08975