Internationalisation¶
Challenge factories that emit human-readable prompts (EmojiGrid,
Math) accept an optional PromptTranslator and locale so you can
show the prompt in the user's language.
Bundled translator¶
from captchakit import (
DefaultTranslator,
EmojiGridChallengeFactory,
MathChallengeFactory,
)
translator = DefaultTranslator()
grid = EmojiGridChallengeFactory(translator=translator, locale="tr")
math = MathChallengeFactory(translator=translator, locale="de")
Built-in locales: en, tr, de, es. Unknown locales fall back to English.
Keys¶
| Key | Used by | Params |
|---|---|---|
grid.pick |
EmojiGridChallengeFactory |
emoji |
math.ask |
MathChallengeFactory |
a, op, b |
TextChallengeFactory and WordChallengeFactory emit the solution as
the prompt — no translation needed.
Custom catalog¶
from captchakit import DefaultTranslator
translator = DefaultTranslator(
catalog={
"fr": {
"grid.pick": "Quelle case contient {emoji} ? Réponds avec le numéro.",
"math.ask": "{a} {op} {b} = ?",
},
},
)
The constructor starts from the bundled catalogue; your overrides merge on top per-locale.
Bring your own¶
PromptTranslator is a Protocol: any object with
translate(key, locale, /, **params) -> str works. Wire it to
gettext, Django's translation engine, or a pre-loaded JSON bundle —
captchakit doesn't care.