diff --git a/docs/sw/docs/_llm-test.md b/docs/sw/docs/_llm-test.md
new file mode 100644
index 0000000000..22086a072c
--- /dev/null
+++ b/docs/sw/docs/_llm-test.md
@@ -0,0 +1,495 @@
+# Faili ya majaribio ya LLM { #llm-test-file }
+
+Hati hii inajaribu kama LLM, inayotafsiri nyaraka, inaelewa `general_prompt` katika `scripts/translate.py` na prompt maalumu ya lugha katika `docs/{language code}/llm-prompt.md`. Prompt maalumu ya lugha huongezwa mwishoni mwa `general_prompt`.
+
+Majaribio yanayoongezwa hapa yataonekana kwa wabunifu wote wa prompt maalumu za lugha.
+
+Tumia kama ifuatavyo:
+
+* Kuwa na prompt maalumu ya lugha - `docs/{language code}/llm-prompt.md`.
+* Tafsiri hati hii upya kwenda lugha unayolenga (tazama, kwa mfano, amri ya `translate-page` ya `translate.py`). Hii itaunda tafsiri katika `docs/{language code}/docs/_llm-test.md`.
+* Kagua kama kila kitu kiko sawa katika tafsiri.
+* Ikihitajika, boresha prompt yako maalumu ya lugha, prompt ya jumla, au hati ya Kiingereza.
+* Kisha rekebisha mwenyewe matatizo yaliyobaki katika tafsiri, ili iwe tafsiri nzuri.
+* Tafsiri tena, huku tafsiri hiyo nzuri ikiwa tayari ipo. Matokeo bora yangekuwa kwamba LLM haifanyi tena mabadiliko yoyote kwenye tafsiri. Hiyo inamaanisha kwamba prompt ya jumla na prompt yako maalumu ya lugha ni bora kadiri iwezekanavyo (Wakati mwingine itafanya mabadiliko machache yanayoonekana kuwa ya nasibu; sababu ni kwamba [LLM si algoriti zinazotoa matokeo yaleyale kila mara kwa ingizo lilelile](https://doublespeak.chat/#/handbook#deterministic-output)).
+
+Majaribio:
+
+## Vipande vya msimbo { #code-snippets }
+
+//// tab | Jaribio
+
+Hiki ni kipande cha msimbo: `foo`. Na hiki ni kipande kingine cha msimbo: `bar`. Na kingine: `baz quux`.
+
+////
+
+//// tab | Maelezo
+
+Maudhui ya vipande vya msimbo yanapaswa kuachwa kama yalivyo.
+
+Tazama sehemu ya `### Content of code snippets` katika prompt ya jumla katika `scripts/translate.py`.
+
+////
+
+## Alama za kunukuu { #quotes }
+
+//// tab | Jaribio
+
+Jana, rafiki yangu aliandika: "Ukiandika neno kimakosa kwa usahihi, umeliandika kimakosa". Nikamjibu: "Sahihi, lakini 'kimakosa' ni kimakosa, si '"kimakosa"'".
+
+/// note | Tanbihi
+
+Huenda LLM ikatafsiri hili vibaya. Kinachovutia tu ni kama itahifadhi tafsiri iliyorekebishwa wakati wa kutafsiri tena.
+
+///
+
+////
+
+//// tab | Maelezo
+
+Mbunifu wa prompt anaweza kuchagua kama anataka kubadilisha alama za kunukuu zilizonyooka kuwa alama za kunukuu za uchapaji. Ni sawa kuziacha kama zilivyo.
+
+Tazama, kwa mfano, sehemu ya `### Quotes` katika `docs/de/llm-prompt.md`.
+
+////
+
+## Alama za kunukuu katika vipande vya msimbo { #quotes-in-code-snippets }
+
+//// tab | Jaribio
+
+`pip install "foo[bar]"`
+
+Mifano ya string literals katika vipande vya msimbo: `"this"`, `'that'`.
+
+Mfano mgumu wa string literals katika vipande vya msimbo: `f"I like {'oranges' if orange else "apples"}"`
+
+Mgumu sana: `Yesterday, my friend wrote: "If you spell incorrectly correctly, you have spelled it incorrectly". To which I answered: "Correct, but 'incorrectly' is incorrectly not '"incorrectly"'"`
+
+////
+
+//// tab | Maelezo
+
+... Hata hivyo, alama za kunukuu ndani ya vipande vya msimbo lazima zibaki kama zilivyo.
+
+////
+
+## Vitalu vya msimbo { #code-blocks }
+
+//// tab | Jaribio
+
+Mfano wa msimbo wa Bash...
+
+```bash
+# Chapisha salamu kwa ulimwengu
+echo "Hello universe"
+```
+
+...na mfano wa msimbo wa console...
+
+```console
+$ fastapi run main.py
+ FastAPI Starting server
+ Searching for package file structure
+```
+
+...na mfano mwingine wa msimbo wa console...
+
+```console
+// Unda saraka "Code"
+$ mkdir code
+// Hamia kwenye saraka hiyo
+$ cd code
+```
+
+...na mfano wa msimbo wa Python...
+
+```Python
+wont_work() # Hii haitafanya kazi 😱
+works(foo="bar") # Hii inafanya kazi 🎉
+```
+
+...na ni hayo tu.
+
+////
+
+//// tab | Maelezo
+
+Msimbo katika vitalu vya msimbo haupaswi kubadilishwa, isipokuwa maoni.
+
+Tazama sehemu ya `### Content of code blocks` katika prompt ya jumla katika `scripts/translate.py`.
+
+////
+
+## Vichupo na visanduku vya rangi { #tabs-and-colored-boxes }
+
+//// tab | Jaribio
+
+/// note | Tanbihi
+Maandishi fulani
+///
+
+/// note | Maelezo ya kiufundi
+Maandishi fulani
+///
+
+/// tip | Kidokezo
+Maandishi fulani
+///
+
+/// warning | Onyo
+Maandishi fulani
+///
+
+/// danger | Hatari
+Maandishi fulani
+///
+
+////
+
+//// tab | Maelezo
+
+Vichupo na vitalu vya `Info`/`Note`/`Warning`/n.k. vinapaswa kuongezewa tafsiri ya kichwa chake baada ya mstari wima (`|`).
+
+Tazama sehemu za `### Special blocks` na `### Tab blocks` katika prompt ya jumla katika `scripts/translate.py`.
+
+////
+
+## Viungo vya wavuti na vya ndani { #web-and-internal-links }
+
+//// tab | Jaribio
+
+Maandishi ya kiungo yanapaswa kutafsiriwa, anwani ya kiungo ibaki bila kubadilishwa:
+
+* [Kiungo cha kichwa kilicho juu](#code-snippets)
+* [Kiungo cha ndani](index.md#installation)
+* [Kiungo cha nje](https://sqlmodel.tiangolo.com/)
+* [Kiungo cha mtindo](https://fastapi.tiangolo.com/css/styles.css)
+* [Kiungo cha script](https://fastapi.tiangolo.com/js/logic.js)
+* [Kiungo cha picha](https://fastapi.tiangolo.com/img/foo.jpg)
+
+Maandishi ya kiungo yanapaswa kutafsiriwa, anwani ya kiungo ielekeze kwenye tafsiri:
+
+* [Kiungo cha FastAPI](https://fastapi.tiangolo.com/sw/)
+
+////
+
+//// tab | Maelezo
+
+Viungo vinapaswa kutafsiriwa, lakini anwani zake zibaki bila kubadilishwa. Isipokuwa ni viungo vyenye anwani kamili vya kurasa za nyaraka za FastAPI. Katika hali hiyo, kiungo kinapaswa kuelekeza kwenye tafsiri.
+
+Tazama sehemu ya `### Links` katika prompt ya jumla katika `scripts/translate.py`.
+
+////
+
+## Vipengele vya HTML vya "abbr" { #html-abbr-elements }
+
+//// tab | Jaribio
+
+Hapa kuna baadhi ya vitu vilivyowekwa ndani ya vipengele vya HTML vya "abbr" (Baadhi vimebuniwa):
+
+### abbr inatoa kifungu kamili cha maneno { #the-abbr-gives-a-full-phrase }
+
+* GTD
+* lt
+* XWT
+* PSGI
+
+### abbr inatoa kifungu kamili cha maneno na ufafanuzi { #the-abbr-gives-a-full-phrase-and-an-explanation }
+
+* MDN
+* I/O.
+
+////
+
+//// tab | Maelezo
+
+Sifa za "title" za vipengele vya "abbr" hutafsiriwa kwa kufuata maagizo maalumu.
+
+Tafsiri zinaweza kuongeza vipengele vyake vya "abbr" ambavyo LLM haipaswi kuondoa. Kwa mfano, ili kufafanua maneno ya Kiingereza.
+
+Tazama sehemu ya `### HTML abbr elements` katika prompt ya jumla katika `scripts/translate.py`.
+
+////
+
+## Vipengele vya HTML vya "dfn" { #html-dfn-elements }
+
+* cluster
+* Ujifunzaji wa Kina
+
+## Vichwa { #headings }
+
+//// tab | Jaribio
+
+### Unda programu ya wavuti - mafunzo { #develop-a-webapp-a-tutorial }
+
+Habari.
+
+### Vidokezo na viashirio vya aina { #type-hints-and-annotations }
+
+Habari tena.
+
+### Madarasa ya msingi na madarasa yanayotokana nayo { #super-and-subclasses }
+
+Habari tena.
+
+////
+
+//// tab | Maelezo
+
+Kanuni pekee ya lazima kwa vichwa ni kwamba LLM iache sehemu ya hash iliyo ndani ya mabano ya mawimbi bila kubadilishwa, jambo linalohakikisha kwamba viungo haviathiriki.
+
+Tazama sehemu ya `### Headings` katika prompt ya jumla katika `scripts/translate.py`.
+
+Kwa baadhi ya maagizo maalumu ya lugha, tazama, kwa mfano, sehemu ya `### Headings` katika `docs/de/llm-prompt.md`.
+
+////
+
+## Istilahi zinazotumiwa katika nyaraka { #terms-used-in-the-docs }
+
+//// tab | Jaribio
+
+* wewe
+* yako
+
+* k.m.
+* n.k.
+
+* `foo` kama `int`
+* `bar` kama `str`
+* `baz` kama `list`
+
+* Mafunzo - Mwongozo wa Mtumiaji
+* Mwongozo wa Mtumiaji wa Kiwango cha Juu
+* nyaraka za SQLModel
+* nyaraka za API
+* nyaraka zinazozalishwa kiotomatiki
+
+* Sayansi ya Data
+* Ujifunzaji wa Kina
+* Ujifunzaji wa Mashine
+* Uingizaji wa Vitegemezi
+* uthibitishaji wa utambulisho wa HTTP Basic
+* HTTP Digest
+* umbizo la ISO
+* kiwango cha JSON Schema
+* schema ya JSON
+* ufafanuzi wa schema
+* Mtiririko wa Nenosiri
+* Simu za mkononi
+
+* iliyopitwa na wakati na isiyopendekezwa tena
+* iliyoundwa
+* isiyo halali
+* wakati wa utekelezaji
+* ya kawaida
+* ya chaguo-msingi
+* inayotofautisha herufi kubwa na ndogo
+* isiyotofautisha herufi kubwa na ndogo
+
+* kuendesha programu ili ipatikane kwa watumiaji
+* kutoa ukurasa kwa mteja
+
+* app
+* programu
+
+* ombi
+* jibu
+* jibu la hitilafu
+
+* operesheni ya njia
+* decorator ya operesheni ya njia
+* function ya operesheni ya njia
+
+* mwili
+* mwili wa ombi
+* mwili wa jibu
+* mwili wa JSON
+* mwili wa fomu
+* mwili wa faili
+* mwili wa function
+
+* kigezo
+* kigezo cha mwili
+* kigezo cha njia
+* kigezo cha query
+* kigezo cha cookie
+* kigezo cha kichwa
+* kigezo cha fomu
+* kigezo cha function
+
+* tukio
+* tukio la kuanza
+* kuanza kwa seva
+* tukio la kuzimwa
+* tukio la muda wa uhai
+
+* kishughulikiaji
+* kishughulikiaji cha tukio
+* kishughulikiaji cha exception
+* kushughulikia
+
+* modeli
+* modeli ya Pydantic
+* modeli ya data
+* modeli ya hifadhidata
+* modeli ya fomu
+* objekti ya modeli
+
+* darasa
+* darasa la msingi
+* darasa mzazi
+* darasa linalotokana na darasa jingine
+* darasa mtoto
+* darasa lenye mzazi yuleyule
+* method ya darasa
+
+* kichwa
+* vichwa
+* kichwa cha uidhinishaji
+* kichwa cha `Authorization`
+* kichwa kilichopitishwa
+
+* mfumo wa uingizaji wa vitegemezi
+* kitegemezi
+* kinachoweza kutegemewa
+* kinachotegemea kingine
+
+* I/O bound
+* CPU bound
+* concurrency
+* parallelism
+* multiprocessing
+
+* env var
+* kigeu cha mazingira
+* `PATH`
+* kigeu cha `PATH`
+
+* uthibitishaji wa utambulisho
+* mtoa huduma ya uthibitishaji wa utambulisho
+* uidhinishaji
+* fomu ya uidhinishaji
+* mtoa huduma ya uidhinishaji
+* mtumiaji anathibitisha utambulisho wake
+* mfumo unathibitisha utambulisho wa mtumiaji
+
+* CLI
+* kiolesura cha mstari wa amri
+
+* seva
+* mteja
+
+* mtoa huduma za wingu
+* huduma ya wingu
+
+* uundaji wa programu
+* hatua za uundaji wa programu
+
+* dict
+* kamusi
+* enumeration
+* enum
+* mwanachama wa enum
+
+* kisimbaji
+* kisimbuaji
+* kusimba
+* kusimbua
+
+* exception
+* kuibua exception
+
+* expression
+* statement
+
+* frontend
+* backend
+
+* mjadala wa GitHub
+* suala la GitHub
+
+* utendaji
+* uboreshaji wa utendaji
+
+* aina ya thamani inayorudishwa
+* thamani inayorudishwa
+
+* usalama
+* mpango wa usalama
+
+* kazi
+* kazi ya chinichini
+* function ya kazi
+
+* kiolezo
+* injini ya violezo
+
+* kiashirio cha aina
+* kidokezo cha aina
+
+* worker wa seva
+* worker wa Uvicorn
+* Worker wa Gunicorn
+* mchakato wa worker
+* darasa la worker
+* mzigo wa kazi
+
+* uwekaji wa programu ili iweze kuendeshwa
+* kuweka programu ili iweze kuendeshwa
+
+* SDK
+* zana za uundaji wa programu
+
+* `APIRouter`
+* `requirements.txt`
+* Tokeni ya Bearer
+* mabadiliko yanayovunja utangamano
+* hitilafu ya programu
+* kitufe
+* callable
+* msimbo
+* commit
+* kidhibiti cha muktadha
+* coroutine
+* kipindi cha hifadhidata
+* diski
+* kikoa
+* injini
+* X bandia
+* mbinu ya HTTP GET
+* kipengee
+* maktaba
+* muda wa uhai
+* kufuli
+* middleware
+* programu ya simu
+* moduli
+* mounting
+* mtandao
+* asili
+* ubatilishaji
+* payload
+* kichakataji
+* sifa
+* seva wakilishi
+* pull request
+* query
+* RAM
+* mashine ya mbali
+* msimbo wa hali
+* mfuatano wa herufi
+* lebo
+* framework ya wavuti
+* wildcard
+* kurudisha
+* kuhakiki uhalali
+
+////
+
+//// tab | Maelezo
+
+Hii si orodha kamili wala orodha inayoweka kanuni za istilahi (nyingi zikiwa za kiufundi) zinazopatikana katika nyaraka. Inaweza kumsaidia mbunifu wa prompt kubaini istilahi ambazo LLM inahitaji msaada nazo. Kwa mfano, inapozidi kubadilisha tafsiri nzuri na kuirudisha kwenye tafsiri isiyo nzuri sana. Au inapokuwa na matatizo ya kunyambua au kupatanisha kisarufi istilahi katika lugha yako.
+
+Tazama, kwa mfano, sehemu ya `### List of English terms and their preferred German translations` katika `docs/de/llm-prompt.md`.
+
+////
diff --git a/docs/sw/docs/async.md b/docs/sw/docs/async.md
new file mode 100644
index 0000000000..4ed5f440ed
--- /dev/null
+++ b/docs/sw/docs/async.md
@@ -0,0 +1,444 @@
+# Concurrency na async / await { #concurrency-and-async-await }
+
+Maelezo kuhusu sintaksia ya `async def` kwa *vitendakazi vya operesheni za njia* na maelezo ya msingi kuhusu msimbo wa asynchronous, concurrency, na parallelism.
+
+## Una haraka? { #in-a-hurry }
+
+TL;DR:
+
+Ikiwa unatumia maktaba za wahusika wengine zinazokuambia uziite kwa `await`, kama:
+
+```Python
+results = await some_library()
+```
+
+Basi, tangaza *vitendakazi vyako vya operesheni za njia* kwa `async def` kama:
+
+```Python hl_lines="2"
+@app.get("/")
+async def read_results():
+ results = await some_library()
+ return results
+```
+
+/// note | Kumbuka
+
+Unaweza kutumia `await` ndani ya vitendakazi vilivyoundwa kwa `async def` pekee.
+
+///
+
+---
+
+Ikiwa unatumia maktaba ya mhusika mwingine inayowasiliana na kitu fulani (hifadhidata, API, mfumo wa faili, n.k.) na haina uwezo wa kutumia `await`, (kwa sasa hali hii inahusu maktaba nyingi za hifadhidata), basi tangaza *vitendakazi vyako vya operesheni za njia* kama kawaida, kwa `def` tu, kama:
+
+```Python hl_lines="2"
+@app.get("/")
+def results():
+ results = some_library()
+ return results
+```
+
+---
+
+Ikiwa programu yako (kwa namna fulani) haihitaji kuwasiliana na kitu kingine chochote na kusubiri kijibu, tumia `async def`, hata kama huhitaji kutumia `await` ndani yake.
+
+---
+
+Ikiwa hujui cha kuchagua, tumia `def` ya kawaida.
+
+---
+
+**Kumbuka**: Unaweza kuchanganya `def` na `async def` katika *vitendakazi vyako vya operesheni za njia* kadiri unavyohitaji na kufafanua kila kimoja kwa chaguo linalokufaa zaidi. FastAPI itavishughulikia ipasavyo.
+
+Kwa vyovyote vile, katika hali zote zilizo hapo juu, FastAPI bado itafanya kazi kwa namna ya asynchronous na itakuwa na kasi kubwa sana.
+
+Lakini kwa kufuata hatua zilizo hapo juu, itaweza kuboresha utendaji kwa namna fulani.
+
+## Maelezo ya Kiufundi { #technical-details }
+
+Matoleo ya kisasa ya Python yana uwezo wa kutumia **"msimbo wa asynchronous"** kwa kutumia kitu kinachoitwa **"coroutines"**, kwa sintaksia ya **`async` na `await`**.
+
+Hebu tuangalie kauli hiyo sehemu kwa sehemu katika sehemu zilizo hapa chini:
+
+* **Msimbo wa Asynchronous**
+* **`async` na `await`**
+* **Coroutines**
+
+## Msimbo wa Asynchronous { #asynchronous-code }
+
+Msimbo wa asynchronous unamaanisha tu kwamba lugha 💬 ina njia ya kuiambia kompyuta / programu 🤖 kwamba katika sehemu fulani ya msimbo, itabidi 🤖 isubiri *kitu kingine* kikamilike mahali pengine. Tuseme *kitu hicho kingine* kinaitwa "faili-linalochelewa" 📝.
+
+Kwa hiyo, wakati huo, kompyuta inaweza kwenda kufanya kazi nyingine, huku "faili-linalochelewa" 📝 likikamilika.
+
+Kisha kompyuta / programu 🤖 itarudi kila inapopata nafasi kwa sababu inasubiri tena, au kila inapomaliza 🤖 kazi zote ilizokuwa nazo wakati huo. Nayo 🤖 itaangalia kama kuna kazi zozote ilizokuwa ikizisubiri ambazo tayari zimemaliza kufanya zilichopaswa kufanya.
+
+Halafu, 🤖 itachukua kazi ya kwanza kukamilika (tuseme, "faili-linalochelewa" 📝 letu) na kuendelea na chochote ilichopaswa kufanya nayo.
+
+Huko "kusubiri kitu kingine" kwa kawaida kunarejelea operesheni za I/O ambazo ni za "polepole" kwa kulinganisha (na kasi ya kichakataji na kumbukumbu ya RAM), kama kusubiri:
+
+* data kutoka kwa mteja itumwe kupitia mtandao
+* data iliyotumwa na programu yako ipokelewe na mteja kupitia mtandao
+* yaliyomo kwenye faili lililo kwenye diski yasomwe na mfumo na kupewa programu yako
+* yaliyomo ambayo programu yako iliupa mfumo yaandikwe kwenye diski
+* operesheni ya API ya mbali
+* operesheni ya hifadhidata ikamilike
+* hoja ya hifadhidata irudishe matokeo
+* n.k.
+
+Kwa kuwa muda mwingi wa utekelezaji hutumika kusubiri operesheni za I/O, operesheni hizo huitwa "I/O bound".
+
+Inaitwa "asynchronous" kwa sababu kompyuta / programu haihitaji "kusawazishwa" na kazi ya polepole, ikisubiri wakati uleule ambapo kazi inakamilika, bila kufanya chochote, ili iweze kuchukua matokeo ya kazi na kuendelea kufanya kazi.
+
+Badala yake, kwa kuwa ni mfumo wa "asynchronous", baada ya kukamilika, kazi inaweza kusubiri kwenye foleni kwa muda mfupi (mikrosekunde chache) ili kompyuta / programu imalize chochote ilichoenda kufanya, kisha irudi kuchukua matokeo na kuendelea kuyafanyia kazi.
+
+Kwa "synchronous" (kinyume cha "asynchronous"), kwa kawaida pia hutumia neno "sequential", yaani kwa mfuatano, kwa sababu kompyuta / programu hufuata hatua zote kwa mfuatano kabla ya kuhamia kazi tofauti, hata kama hatua hizo zinahusisha kusubiri.
+
+### Concurrency na Baga { #concurrency-and-burgers }
+
+Wazo hili la msimbo wa **asynchronous** lililoelezwa hapo juu pia wakati mwingine huitwa **"concurrency"**. Ni tofauti na **"parallelism"**.
+
+**Concurrency** na **parallelism** zote zinahusiana na "mambo tofauti yanayotokea takribani wakati mmoja".
+
+Lakini maelezo ya *concurrency* na *parallelism* yanatofautiana sana.
+
+Ili kuona tofauti, fikiria hadithi ifuatayo kuhusu baga:
+
+### Baga kwa Concurrency { #concurrent-burgers }
+
+Unaenda na mtu unayempenda kupata chakula cha haraka, unasimama kwenye foleni huku mhudumu wa malipo akipokea oda kutoka kwa watu walio mbele yako. 😍
+
+
+
+Kisha zamu yako inafika, unaagiza baga 2 za kifahari sana kwa ajili yako na mtu unayempenda. 🍔🍔
+
+
+
+Mhudumu wa malipo anamwambia mpishi aliye jikoni kitu fulani ili ajue kwamba anapaswa kuandaa baga zenu (hata ingawa kwa sasa anaandaa za wateja waliotangulia).
+
+
+
+Unalipa. 💸
+
+Mhudumu wa malipo anakupa namba ya zamu yako.
+
+
+
+Wakati unasubiri, unaenda na mtu unayempenda kuchagua meza, mnaketi na kuzungumza kwa muda mrefu (kwa kuwa baga zenu ni za kifahari sana na zinachukua muda kuandaliwa).
+
+Mkiwa mmeketi mezani pamoja, huku mkisubiri baga, unaweza kutumia muda huo kuvutiwa na jinsi mtu unayempenda alivyo wa ajabu, wa kupendeza na mwenye akili ✨😍✨.
+
+
+
+Unaposubiri na kuzungumza na mtu unayempenda, mara kwa mara unaangalia namba inayoonyeshwa kwenye kaunta ili kuona kama zamu yako imefika tayari.
+
+Kisha wakati fulani, hatimaye zamu yako inafika. Unaenda kwenye kaunta, unachukua baga zenu na kurudi mezani.
+
+
+
+Wewe na mtu unayempenda mnakula baga na kufurahia muda wenu pamoja. ✨
+
+
+
+/// note | Kumbuka
+
+Michoro mizuri imetengenezwa na [Ketrina Thompson](https://www.instagram.com/ketrinadrawsalot). 🎨
+
+///
+
+---
+
+Fikiria wewe ndiye kompyuta / programu 🤖 katika hadithi hiyo.
+
+Ukiwa kwenye foleni, hufanyi kitu 😴, unasubiri zamu yako, bila kufanya chochote chenye "tija" sana. Lakini foleni inasonga haraka kwa sababu mhudumu wa malipo anapokea oda tu (haziandai), kwa hiyo hilo si tatizo.
+
+Kisha, zamu yako inapofika, unafanya kazi halisi yenye "tija": unasoma menyu, unaamua unachotaka, unapata chaguo la mtu unayempenda, unalipa, unahakikisha unatoa noti au kadi sahihi, unahakikisha umetozwa kiasi sahihi, unahakikisha oda ina vitu sahihi, n.k.
+
+Lakini baadaye, hata ingawa bado hamjapata baga zenu, kazi yako na mhudumu wa malipo "imesitishwa kwa muda" ⏸, kwa sababu unapaswa kusubiri 🕙 baga zenu ziwe tayari.
+
+Lakini unapoondoka kauntani na kuketi mezani ukiwa na namba ya zamu yako, unaweza kuhamisha 🔀 umakini wako kwa mtu unayempenda, na "kufanyia kazi" ⏯ 🤓 hilo. Hapo unakuwa tena unafanya kitu chenye "tija" sana, kama vile kumtongoza mtu unayempenda 😍.
+
+Kisha mhudumu wa malipo 💁 anasema "Nimemaliza kuandaa baga" kwa kuweka namba yako kwenye skrini ya kaunta, lakini huruki kama kichaa mara tu namba inayoonyeshwa inapobadilika kuwa namba ya zamu yako. Unajua hakuna atakayeiba baga zenu kwa sababu una namba ya zamu yako, na wengine wana zao.
+
+Kwa hiyo unasubiri mtu unayempenda amalize hadithi yake (kumaliza kazi ya sasa ⏯ / kazi inayoshughulikiwa 🤓), unatabasamu kwa upole na kusema kwamba unaenda kuchukua baga ⏸.
+
+Kisha unaenda kauntani 🔀, kwenye kazi ya awali ambayo sasa imekamilika ⏯, unachukua baga, unashukuru na kuzipeleka mezani. Hilo linakamilisha hatua / kazi hiyo ya kushughulika na kaunta ⏹. Hiyo nayo inaunda kazi mpya, ya "kula baga" 🔀 ⏯, lakini ile ya awali ya "kupata baga" imekamilika ⏹.
+
+### Baga kwa Parallelism { #parallel-burgers }
+
+Sasa hebu tufikirie hizi si "Baga kwa Concurrency", bali "Baga kwa Parallelism".
+
+Unaenda na mtu unayempenda kupata chakula cha haraka kwa parallelism.
+
+Unasimama kwenye foleni huku wahudumu kadhaa wa malipo (tuseme 8), ambao pia ni wapishi, wakipokea oda kutoka kwa watu walio mbele yako.
+
+Kila mtu aliye mbele yako anasubiri baga zake ziwe tayari kabla ya kuondoka kauntani, kwa sababu kila mmoja wa wahudumu 8 wa malipo anaenda kuandaa baga mara moja kabla ya kupokea oda inayofuata.
+
+
+
+Kisha hatimaye zamu yako inafika, unaagiza baga 2 za kifahari sana kwa ajili yako na mtu unayempenda.
+
+Unalipa 💸.
+
+
+
+Mhudumu wa malipo anaenda jikoni.
+
+Unasubiri, ukiwa umesimama mbele ya kaunta 🕙, ili mtu mwingine asichukue baga zenu kabla yako, kwa kuwa hakuna namba za zamu.
+
+
+
+Kwa kuwa wewe na mtu unayempenda mko bize kuzuia mtu yeyote asiingie mbele yenu na kuchukua baga zenu zinapofika, huwezi kumwelekezea umakini mtu unayempenda. 😞
+
+Hii ni kazi ya "synchronous", "umesawazishwa" na mhudumu wa malipo/mpishi 👨🍳. Unapaswa kusubiri 🕙 na kuwepo wakati uleule mhudumu wa malipo/mpishi 👨🍳 anapomaliza baga na kukupa, la sivyo, mtu mwingine anaweza kuzichukua.
+
+
+
+Kisha mhudumu wako wa malipo/mpishi 👨🍳 hatimaye anarudi na baga zenu, baada ya kusubiri 🕙 kwa muda mrefu hapo mbele ya kaunta.
+
+
+
+Unachukua baga zenu na kwenda mezani na mtu unayempenda.
+
+Mnazila tu, na mmemaliza. ⏹
+
+
+
+Hakukuwa na mazungumzo mengi wala kutongozana kwani muda mwingi ulitumika kusubiri 🕙 mbele ya kaunta. 😞
+
+/// note | Kumbuka
+
+Michoro mizuri imetengenezwa na [Ketrina Thompson](https://www.instagram.com/ketrinadrawsalot). 🎨
+
+///
+
+---
+
+Katika hali hii ya baga kwa parallelism, wewe ni kompyuta / programu 🤖 yenye vichakataji viwili (wewe na mtu unayempenda), vyote vikisubiri 🕙 na kuelekeza umakini wao ⏯ kwenye "kusubiri kauntani" 🕙 kwa muda mrefu.
+
+Duka la chakula cha haraka lina vichakataji 8 (wahudumu wa malipo/wapishi). Ilhali duka la baga kwa concurrency huenda lilikuwa na 2 tu (mhudumu mmoja wa malipo na mpishi mmoja).
+
+Lakini bado, uzoefu wa mwisho si mzuri zaidi. 😞
+
+---
+
+Hii ndiyo ingekuwa hadithi inayolingana ya baga kwa parallelism. 🍔
+
+Kwa mfano wa hili ulio karibu zaidi na "maisha halisi", fikiria benki.
+
+Hadi hivi karibuni, benki nyingi zilikuwa na wahudumu wengi wa malipo 👨💼👨💼👨💼👨💼 na foleni kubwa 🕙🕙🕙🕙🕙🕙🕙🕙.
+
+Wahudumu wote wakifanya kazi yote na mteja mmoja baada ya mwingine 👨💼⏯.
+
+Na unapaswa kusubiri 🕙 kwenye foleni kwa muda mrefu, la sivyo unapoteza zamu yako.
+
+Huenda usingependa kwenda na mtu unayempenda 😍 kufanya shughuli zako benki 🏦.
+
+### Hitimisho la Baga { #burger-conclusion }
+
+Katika hali hii ya "baga za chakula cha haraka na mtu unayempenda", kwa kuwa kuna kusubiri kwingi 🕙, inaleta maana zaidi kuwa na mfumo wa concurrency ⏸🔀⏯.
+
+Hii ndiyo hali ya programu nyingi za wavuti.
+
+Watumiaji ni wengi sana, lakini seva yako inasubiri 🕙 miunganisho yao isiyo mizuri sana itume maombi yao.
+
+Na kisha inasubiri 🕙 tena majibu yarudi.
+
+Huku "kusubiri" 🕙 hupimwa kwa mikrosekunde, lakini bado, ukijumlisha yote, mwishowe ni muda mwingi wa kusubiri.
+
+Ndiyo maana inaleta maana sana kutumia msimbo wa asynchronous ⏸🔀⏯ kwa API za wavuti.
+
+Namna hii ya kufanya kazi kwa asynchronous ndiyo iliyofanya NodeJS iwe maarufu (hata ingawa NodeJS haitumii parallelism) na huo ndio uwezo mkuu wa Go kama lugha ya programu.
+
+Na hicho ndicho kiwango cha utendaji unachopata kwa **FastAPI**.
+
+Na kwa kuwa unaweza kuwa na parallelism na asynchronous kwa wakati mmoja, unapata utendaji wa juu kuliko framework nyingi za NodeJS zilizojaribiwa, na unaolingana na Go, ambayo ni lugha inayotumia compiler iliyo karibu zaidi na C [(yote haya kutokana na Starlette)](https://www.techempower.com/benchmarks/#section=data-r17&hw=ph&test=query&l=zijmkf-1).
+
+### Je, concurrency ni bora kuliko parallelism? { #is-concurrency-better-than-parallelism }
+
+La hasha! Hilo si fundisho la hadithi hii.
+
+Concurrency ni tofauti na parallelism. Na ni bora katika hali **maalumu** zinazohusisha kusubiri kwingi. Kwa sababu hiyo, kwa ujumla ni bora sana kuliko parallelism kwa uundaji wa programu za wavuti. Lakini si kwa kila kitu.
+
+Kwa hiyo, ili kusawazisha hilo, fikiria hadithi fupi ifuatayo:
+
+> Unapaswa kusafisha nyumba kubwa iliyo chafu.
+
+*Ndiyo, hiyo ndiyo hadithi yote*.
+
+---
+
+Hakuna kusubiri 🕙 popote, ni kazi nyingi tu zinazopaswa kufanywa, katika sehemu nyingi za nyumba.
+
+Unaweza kufanya kwa zamu kama katika mfano wa baga, kwanza sebule, kisha jikoni, lakini kwa kuwa husubiri 🕙 kitu chochote, unasafisha tu mfululizo, zamu hazitabadilisha kitu chochote.
+
+Ingechukua muda uleule kumaliza ukiwa na zamu (concurrency) au bila zamu, na ungekuwa umefanya kiasi kilekile cha kazi.
+
+Lakini katika hali hii, kama ungeweza kuwaleta wale 8 waliokuwa wahudumu wa malipo/wapishi na ambao sasa ni wasafishaji, na kila mmoja wao (pamoja na wewe) achukue sehemu ya nyumba aisafishe, mngeweza kufanya kazi yote kwa **parallelism**, kwa msaada huo wa ziada, na kumaliza mapema zaidi.
+
+Katika hali hii, kila mmoja wa wasafishaji (pamoja na wewe) angekuwa kichakataji, akifanya sehemu yake ya kazi.
+
+Na kwa kuwa muda mwingi wa utekelezaji unatumika kufanya kazi halisi (badala ya kusubiri), na kazi katika kompyuta hufanywa na CPU, matatizo haya huitwa "CPU bound".
+
+---
+
+Mifano ya kawaida ya operesheni za CPU bound ni vitu vinavyohitaji uchakataji wa hesabu changamano.
+
+Kwa mfano:
+
+* **Uchakataji wa sauti** au **picha**.
+* **Computer vision**: picha inaundwa na mamilioni ya pikseli, kila pikseli ina thamani / rangi 3, na kuichakata kwa kawaida kunahitaji kufanya hesabu fulani kwenye pikseli hizo, zote kwa wakati mmoja.
+* **Machine Learning**: kwa kawaida inahitaji uzidishaji mwingi wa "matrix" na "vector". Fikiria lahajedwali kubwa lenye namba na kuzizidisha zote pamoja kwa wakati mmoja.
+* **Deep Learning**: hii ni tawi la Machine Learning, kwa hiyo, hali hiyo hiyo inatumika. Tofauti ni kwamba hakuna lahajedwali moja tu la namba za kuzidisha, bali kuna kundi kubwa la lahajedwali hizo, na katika hali nyingi, unatumia kichakataji maalumu kujenga na / au kutumia modeli hizo.
+
+### Concurrency + Parallelism: Wavuti + Machine Learning { #concurrency-parallelism-web-machine-learning }
+
+Kwa **FastAPI** unaweza kunufaika na concurrency ambayo ni ya kawaida sana katika uundaji wa programu za wavuti (kivutio kikuu hichohicho cha NodeJS).
+
+Lakini pia unaweza kutumia manufaa ya parallelism na multiprocessing (kuwa na michakato mingi inayotekelezwa kwa parallelism) kwa kazi za **CPU bound** kama zile za mifumo ya Machine Learning.
+
+Hilo, pamoja na ukweli rahisi kwamba Python ndiyo lugha kuu ya **Sayansi ya Data**, Machine Learning na hasa Deep Learning, hufanya FastAPI ifae sana kwa API na programu za wavuti za Sayansi ya Data / Machine Learning (miongoni mwa nyingine nyingi).
+
+Ili kuona jinsi ya kufanikisha parallelism hii katika mazingira ya matumizi halisi, angalia sehemu kuhusu [Deployment](deployment/index.md).
+
+## `async` na `await` { #async-and-await }
+
+Matoleo ya kisasa ya Python yana njia rahisi sana kueleweka ya kufafanua msimbo wa asynchronous. Hii hufanya uonekane kama msimbo wa kawaida wa "mfuatano" na kufanya "kusubiri" kwa niaba yako katika nyakati zinazofaa.
+
+Kunapokuwa na operesheni itakayohitaji kusubiri kabla ya kutoa matokeo na ambayo ina uwezo wa kutumia vipengele hivi vipya vya Python, unaweza kuiandika hivi:
+
+```Python
+burgers = await get_burgers(2)
+```
+
+Jambo muhimu hapa ni `await`. Inaiambia Python kwamba inapaswa kusubiri ⏸ `get_burgers(2)` imalize kufanya kazi yake 🕙 kabla ya kuhifadhi matokeo kwenye `burgers`. Kwa hilo, Python itajua kwamba inaweza kwenda kufanya kitu kingine 🔀 ⏯ wakati huo (kama kupokea ombi jingine).
+
+Ili `await` ifanye kazi, lazima iwe ndani ya kitendakazi kinachowezesha namna hii ya kufanya kazi kwa asynchronous. Ili kufanya hivyo, unakitangaza tu kwa `async def`:
+
+```Python hl_lines="1"
+async def get_burgers(number: int):
+ # Fanya mambo fulani kwa asynchronous ili kuandaa baga
+ return burgers
+```
+
+...badala ya `def`:
+
+```Python hl_lines="2"
+# Hii si asynchronous
+def get_sequential_burgers(number: int):
+ # Fanya mambo fulani kwa mfuatano ili kuandaa baga
+ return burgers
+```
+
+Kwa `async def`, Python inajua kwamba, ndani ya kitendakazi hicho, inapaswa kuzingatia semi za `await`, na kwamba inaweza "kusitisha kwa muda" ⏸ utekelezaji wa kitendakazi hicho na kwenda kufanya kitu kingine 🔀 kabla ya kurudi.
+
+Unapotaka kuita kitendakazi cha `async def`, unapaswa kukisubiri kwa `await`. Kwa hiyo, hii haitafanya kazi:
+
+```Python
+# Hii haitafanya kazi, kwa sababu get_burgers ilifafanuliwa kwa: async def
+burgers = get_burgers(2)
+```
+
+---
+
+Kwa hiyo, ikiwa unatumia maktaba inayokuambia kwamba unaweza kuiita kwa `await`, unahitaji kuunda *vitendakazi vya operesheni za njia* vinavyoitumia kwa `async def`, kama katika:
+
+```Python hl_lines="2-3"
+@app.get("/burgers")
+async def read_burgers():
+ burgers = await get_burgers(2)
+ return burgers
+```
+
+### Maelezo zaidi ya kiufundi { #more-technical-details }
+
+Huenda umeona kwamba `await` inaweza kutumika tu ndani ya vitendakazi vilivyofafanuliwa kwa `async def`.
+
+Lakini wakati huo huo, vitendakazi vilivyofafanuliwa kwa `async def` vinapaswa "kusubiriwa" kwa `await`. Kwa hiyo, vitendakazi vyenye `async def` vinaweza kuitwa tu ndani ya vitendakazi ambavyo pia vimefafanuliwa kwa `async def`.
+
+Kwa hiyo, kuhusu yai na kuku, unaitaje kitendakazi cha kwanza cha `async`?
+
+Ikiwa unatumia **FastAPI**, huhitaji kuwa na wasiwasi kuhusu hilo, kwa sababu kitendakazi hicho cha "kwanza" kitakuwa *kitendakazi chako cha operesheni ya njia*, na FastAPI itajua jinsi ya kufanya jambo linalofaa.
+
+Lakini ikiwa unataka kutumia `async` / `await` bila FastAPI, unaweza kufanya hivyo pia.
+
+### Andika msimbo wako mwenyewe wa async { #write-your-own-async-code }
+
+Starlette (na **FastAPI**) zimejengwa juu ya [AnyIO](https://anyio.readthedocs.io/en/stable/), ambayo inazifanya ziendane na [asyncio](https://docs.python.org/3/library/asyncio-task.html) ya maktaba ya kawaida ya Python pamoja na [Trio](https://trio.readthedocs.io/en/stable/).
+
+Hasa, unaweza kutumia [AnyIO](https://anyio.readthedocs.io/en/stable/) moja kwa moja kwa matumizi yako ya hali ya juu ya concurrency yanayohitaji mifumo ya hali ya juu zaidi katika msimbo wako.
+
+Na hata kama hutumii FastAPI, unaweza pia kuandika programu zako mwenyewe za async kwa [AnyIO](https://anyio.readthedocs.io/en/stable/) ili ziwe na uoanifu mkubwa na kupata manufaa yake (k.m. *structured concurrency*).
+
+Niliunda maktaba nyingine juu ya AnyIO, kama tabaka jepesi juu yake, ili kuboresha kidogo maelezo ya aina na kupata **ukamilishaji wa kiotomatiki** bora zaidi, **makosa yanayoonyeshwa ndani ya msimbo**, n.k. Pia ina utangulizi na mafunzo rahisi kufuata ili kukusaidia **kuelewa** na kuandika **msimbo wako mwenyewe wa async**: [Asyncer](https://asyncer.tiangolo.com/). Ingefaa hasa ikiwa unahitaji **kuchanganya msimbo wa async na msimbo wa kawaida** (blocking/synchronous).
+
+### Aina nyingine za msimbo wa asynchronous { #other-forms-of-asynchronous-code }
+
+Mtindo huu wa kutumia `async` na `await` ni mpya kiasi katika lugha hii.
+
+Lakini unafanya kazi na msimbo wa asynchronous iwe rahisi zaidi.
+
+Sintaksia hii hii (au inayokaribia kufanana kabisa) pia iliongezwa hivi karibuni katika matoleo ya kisasa ya JavaScript (kwenye Kivinjari na NodeJS).
+
+Lakini kabla ya hapo, kushughulikia msimbo wa asynchronous kulikuwa na uchangamano na ugumu zaidi.
+
+Katika matoleo ya awali ya Python, ungeweza kutumia threads au [Gevent](https://www.gevent.org/). Lakini msimbo huo ni changamano zaidi kuuelewa, kutafuta na kurekebisha makosa yake, na kuufikiria.
+
+Katika matoleo ya awali ya NodeJS / JavaScript ya Kivinjari, ungetumia "callbacks". Jambo linalosababisha "callback hell".
+
+## Coroutines { #coroutines }
+
+**Coroutine** ni neno la kitaalamu tu kwa kitu kinachorudishwa na kitendakazi cha `async def`. Python inajua kwamba ni kitu kinachofanana na kitendakazi, ambacho inaweza kukianzisha na ambacho kitakamilika wakati fulani, lakini ambacho pia kinaweza kusitishwa kwa muda ⏸ ndani yake, kila kunapokuwa na `await` ndani yake.
+
+Lakini utendaji huu wote wa kutumia msimbo wa asynchronous kwa `async` na `await` mara nyingi hufupishwa kama kutumia "coroutines". Unalinganishwa na kipengele kikuu muhimu cha Go, "Goroutines".
+
+## Hitimisho { #conclusion }
+
+Hebu tuangalie kauli ileile ya hapo juu:
+
+> Matoleo ya kisasa ya Python yana uwezo wa kutumia **"msimbo wa asynchronous"** kwa kutumia kitu kinachoitwa **"coroutines"**, kwa sintaksia ya **`async` na `await`**.
+
+Hiyo sasa inapaswa kueleweka zaidi. ✨
+
+Hayo yote ndiyo yanayowezesha FastAPI kufanya kazi (kupitia Starlette) na kuifanya iwe na utendaji wa kuvutia kiasi hicho.
+
+## Maelezo ya Kina Sana ya Kiufundi { #very-technical-details }
+
+/// warning | Onyo
+
+Huenda unaweza kuruka sehemu hii.
+
+Haya ni maelezo ya kina sana ya kiufundi kuhusu jinsi **FastAPI** inavyofanya kazi ndani yake.
+
+Ikiwa una ujuzi wa kutosha wa kiufundi (coroutines, threads, blocking, n.k.) na una shauku ya kujua jinsi FastAPI inavyoshughulikia `async def` ikilinganishwa na `def` ya kawaida, endelea.
+
+///
+
+### Vitendakazi vya operesheni za njia { #path-operation-functions }
+
+Unapotangaza *kitendakazi cha operesheni ya njia* kwa `def` ya kawaida badala ya `async def`, kinaendeshwa katika threadpool ya nje ambayo kisha husubiriwa kwa `await`, badala ya kuitwa moja kwa moja (kwani kingezuia seva kuendelea na kazi nyingine).
+
+Ikiwa unatoka kwenye framework nyingine ya async ambayo haifanyi kazi kwa namna iliyoelezwa hapo juu na umezoea kufafanua *vitendakazi vya operesheni za njia* rahisi vya kufanya hesabu tu kwa `def` ya kawaida ili kupata ongezeko dogo la utendaji (takribani nanosekunde 100), tafadhali kumbuka kwamba katika **FastAPI** matokeo yatakuwa kinyume kabisa. Katika hali hizi, ni bora kutumia `async def` isipokuwa *vitendakazi vyako vya operesheni za njia* vinatumia msimbo unaofanya operesheni za I/O zinazozuia utekelezaji kuendelea.
+
+Hata hivyo, katika hali zote mbili, kuna uwezekano kwamba **FastAPI** [bado itakuwa na kasi zaidi](index.md#performance) kuliko (au angalau kulingana na) framework yako ya awali.
+
+### Vitegemezi { #dependencies }
+
+Hali hiyo hiyo inatumika kwa [vitegemezi](tutorial/dependencies/index.md). Ikiwa kitegemezi ni kitendakazi cha kawaida cha `def` badala ya `async def`, kinaendeshwa katika threadpool ya nje.
+
+### Vitegemezi vya vitegemezi vingine { #sub-dependencies }
+
+Unaweza kuwa na vitegemezi vingi na [vitegemezi vya vitegemezi vingine](tutorial/dependencies/sub-dependencies.md) vinavyohitajiana (kama vigezo katika ufafanuzi wa vitendakazi), baadhi yake vinaweza kuundwa kwa `async def` na vingine kwa `def` ya kawaida. Bado vitafanya kazi, na vile vilivyoundwa kwa `def` ya kawaida vitaitwa kwenye thread ya nje (kutoka kwenye threadpool) badala ya "kusubiriwa" kwa `await`.
+
+### Vitendakazi vingine vya usaidizi { #other-utility-functions }
+
+Kitendakazi kingine chochote cha usaidizi unachokiita moja kwa moja kinaweza kuundwa kwa `def` ya kawaida au `async def`, na FastAPI haitaathiri namna unavyokiita.
+
+Hii ni tofauti na vitendakazi ambavyo FastAPI inaita kwa niaba yako: *vitendakazi vya operesheni za njia* na vitegemezi.
+
+Ikiwa kitendakazi chako cha usaidizi ni kitendakazi cha kawaida chenye `def`, kitaitwa moja kwa moja (kama unavyokiandika katika msimbo wako), si katika threadpool; ikiwa kitendakazi kimeundwa kwa `async def`, basi unapaswa kutumia `await` kwa kitendakazi hicho unapokiita katika msimbo wako.
+
+---
+
+Kwa mara nyingine, haya ni maelezo ya kina sana ya kiufundi ambayo huenda yakawa na manufaa ikiwa ulikuja kuyatafuta.
+
+Vinginevyo, miongozo ya sehemu iliyo hapo juu inapaswa kukutosha: Una haraka?.
diff --git a/docs/sw/docs/index.md b/docs/sw/docs/index.md
new file mode 100644
index 0000000000..826eee1333
--- /dev/null
+++ b/docs/sw/docs/index.md
@@ -0,0 +1,581 @@
+---
+include_yaml:
+ sponsors: data/sponsors.yml
+---
+
+# FastAPI { #fastapi }
+
+
+
+
+ Framework ya FastAPI, yenye utendaji wa juu, rahisi kujifunza, ya haraka kuandika msimbo, tayari kwa matumizi halisi +
+ + +--- + +**Nyaraka**: [https://fastapi.tiangolo.com/sw](https://fastapi.tiangolo.com/sw) + +**Msimbo Chanzo**: [https://github.com/fastapi/fastapi](https://github.com/fastapi/fastapi) + +--- + +FastAPI ni framework ya wavuti ya kisasa, ya haraka (yenye utendaji wa juu), ya kujenga API kwa Python kwa kutumia vidokezo vya aina vya kawaida vya Python. + +Vipengele vyake muhimu ni: + +* **Haraka**: Utendaji wa juu sana, sawa na **NodeJS** na **Go** (shukrani kwa Starlette na Pydantic). [Mojawapo ya framework za Python zenye kasi kubwa zaidi zinazopatikana](#performance). +* **Haraka kuandika msimbo**: Ongeza kasi ya kuunda vipengele kwa takribani 200% hadi 300%. * +* **Hitilafu chache**: Punguza takribani 40% ya makosa yanayosababishwa na binadamu (waundaji wa programu). * +* **Rahisi kuelewa**: Usaidizi mzuri katika kihariri. Ukamilishaji kila mahali. Muda mchache wa kutafuta na kurekebisha hitilafu. +* **Rahisi**: Imebuniwa kuwa rahisi kutumia na kujifunza. Muda mchache wa kusoma nyaraka. +* **Fupi**: Punguza urudiaji wa msimbo. Vipengele vingi kutokana na kila tamko la kigezo. Hitilafu chache. +* **Imara**: Pata msimbo ulio tayari kwa matumizi halisi. Pamoja na nyaraka shirikishi zinazozalishwa kiotomatiki. +* **Inafuata viwango**: Inategemea (na inaendana kikamilifu na) viwango huria vya API: [OpenAPI](https://github.com/OAI/OpenAPI-Specification) (iliyokuwa ikijulikana kama Swagger) na [JSON Schema](https://json-schema.org/). + +* makadirio yanayotokana na majaribio yaliyofanywa na timu ya ndani ya uundaji wa programu, ikijenga programu kwa matumizi halisi. + +## Wadhamini { #sponsors } + + + +### Mdhamini Mkuu { #keystone-sponsor } + + + +### Wadhamini wa Dhahabu { #gold-sponsors } + + + +### Wadhamini wa Fedha { #silver-sponsors } + + + + + +[Wadhamini wengine](https://fastapi.tiangolo.com/sw/fastapi-people/#sponsors) + +## Maoni { #opinions } + + +"Ninatumia FastAPI sana siku hizi. Kwa kweli ninapanga kuitumia kwa huduma zote za ML za timu yangu katika Microsoft. Baadhi yake zinaunganishwa kwenye bidhaa kuu ya Windows na baadhi ya bidhaa za Office."+
"Tulichagua maktaba ya FastAPI kuanzisha seva ya REST inayoweza kuulizwa ili kupata utabiri." [kwa Ludwig]+
"Netflix inafuraha kutangaza kutolewa kwa framework yetu ya uratibu wa usimamizi wa migogoro kama programu ya msimbo huria: Dispatch!" [imejengwa kwa FastAPI]+
"Ikiwa mtu yeyote anataka kujenga API ya Python kwa matumizi halisi, ningependekeza sana FastAPI. Imebuniwa kwa ustadi, ni rahisi kutumia na ina uwezo mkubwa wa kukua kulingana na mahitaji — imekuwa sehemu muhimu ya mkakati wetu wa uundaji wa programu unaotanguliza API."+
+
+## **Typer**, FastAPI ya CLI { #typer-the-fastapi-of-clis }
+
+async def...fastapi dev...
+
+Na modeli zote mbili zitatumiwa katika nyaraka shirikishi za API:
+
+
+
+## Vidokezo Vingine vya Aina ya Thamani Inayorejeshwa { #other-return-type-annotations }
+
+Huenda kukawa na hali ambapo unarejesha kitu ambacho si uga halali wa Pydantic na unakiwekea kidokezo cha aina katika kitendakazi, ili tu kupata usaidizi unaotolewa na zana (kihariri, mypy, n.k.).
+
+### Rejesha Response Moja kwa Moja { #return-a-response-directly }
+
+Hali ya kawaida zaidi ingekuwa [kurejesha Response moja kwa moja kama ilivyoelezwa baadaye katika nyaraka za kina](../advanced/response-directly.md).
+
+{* ../../docs_src/response_model/tutorial003_02_py310.py hl[8,10:11] *}
+
+Hali hii rahisi hushughulikiwa kiotomatiki na FastAPI kwa sababu kidokezo cha aina ya thamani inayorejeshwa ni class ya `Response` (au class inayotokana nayo).
+
+Na zana pia hazitaonyesha hitilafu kwa sababu `RedirectResponse` na `JSONResponse` zote mbili ni class zinazotokana na `Response`, hivyo kidokezo cha aina ni sahihi.
+
+### Tumia Kidokezo cha Aina ya Class Inayotokana na Response { #annotate-a-response-subclass }
+
+Unaweza pia kutumia class inayotokana na `Response` katika kidokezo cha aina:
+
+{* ../../docs_src/response_model/tutorial003_03_py310.py hl[8:9] *}
+
+Hili pia litafanya kazi kwa sababu `RedirectResponse` ni class inayotokana na `Response`, na FastAPI itashughulikia hali hii rahisi kiotomatiki.
+
+### Vidokezo Visivyo Halali vya Aina ya Thamani Inayorejeshwa { #invalid-return-type-annotations }
+
+Lakini unaporejesha objekti nyingine yoyote ambayo si aina halali ya Pydantic (k.m. objekti ya hifadhidata) na kuiwekea kidokezo hicho katika kitendakazi, FastAPI itajaribu kuunda modeli ya jibu ya Pydantic kutokana na kidokezo hicho cha aina, na itashindwa.
+
+Hilo pia lingetokea ikiwa ungekuwa na kitu kama muungano wa aina tofauti ambapo moja au zaidi si aina halali za Pydantic, kwa mfano hili lingeshindwa 💥:
+
+{* ../../docs_src/response_model/tutorial003_04_py310.py hl[8] *}
+
+...hili linashindwa kwa sababu kidokezo cha aina si aina ya Pydantic wala si class moja tu ya `Response` au class inayotokana nayo; ni muungano (yoyote kati ya hizo mbili) wa `Response` na `dict`.
+
+### Zima Modeli ya Jibu { #disable-response-model }
+
+Tukiendelea na mfano hapo juu, huenda usitake uhakiki wa uhalali wa data, uundaji wa nyaraka, uchujaji, n.k. unaofanywa na FastAPI kwa chaguo-msingi.
+
+Lakini huenda bado ukataka kuweka kidokezo cha aina ya thamani inayorejeshwa katika kitendakazi ili kupata usaidizi kutoka kwa zana kama vihariri na vikaguzi vya aina (k.m. mypy).
+
+Katika hali hii, unaweza kuzima uzalishaji wa modeli ya jibu kwa kuweka `response_model=None`:
+
+{* ../../docs_src/response_model/tutorial003_05_py310.py hl[7] *}
+
+Hili litaifanya FastAPI iruke uzalishaji wa modeli ya jibu na kwa njia hiyo unaweza kuwa na vidokezo vyovyote vya aina ya thamani inayorejeshwa unavyohitaji bila kuathiri programu yako ya FastAPI. 🤓
+
+## Vigezo vya usimbaji wa Modeli ya Jibu { #response-model-encoding-parameters }
+
+Modeli yako ya jibu inaweza kuwa na thamani za chaguo-msingi, kama vile:
+
+{* ../../docs_src/response_model/tutorial004_py310.py hl[9,11:12] *}
+
+* `description: Union[str, None] = None` (au `str | None = None` katika Python 3.10) ina thamani ya chaguo-msingi ya `None`.
+* `tax: float = 10.5` ina thamani ya chaguo-msingi ya `10.5`.
+* `tags: List[str] = []` ina thamani ya chaguo-msingi ya orodha tupu: `[]`.
+
+lakini huenda ukataka kuziondoa kwenye matokeo ikiwa hazikuhifadhiwa kwa kweli.
+
+Kwa mfano, ikiwa una modeli zenye sifa nyingi za hiari katika hifadhidata ya NoSQL, lakini hutaki kutuma majibu marefu sana ya JSON yaliyojaa thamani za chaguo-msingi.
+
+### Tumia kigezo cha `response_model_exclude_unset` { #use-the-response-model-exclude-unset-parameter }
+
+Unaweza kuweka kigezo cha *decorator ya operesheni ya njia* kuwa `response_model_exclude_unset=True`:
+
+{* ../../docs_src/response_model/tutorial004_py310.py hl[22] *}
+
+na thamani hizo za chaguo-msingi hazitajumuishwa katika jibu, ila thamani zilizowekwa kweli pekee.
+
+Kwa hiyo, ukituma ombi kwa *operesheni hiyo ya njia* kwa kipengee chenye ID `foo`, jibu (bila kujumuisha thamani za chaguo-msingi) litakuwa:
+
+```JSON
+{
+ "name": "Foo",
+ "price": 50.2
+}
+```
+
+/// note | Kumbuka
+
+Unaweza pia kutumia:
+
+* `response_model_exclude_defaults=True`
+* `response_model_exclude_none=True`
+
+kama ilivyoelezwa katika [nyaraka za Pydantic](https://pydantic.dev/docs/validation/latest/concepts/serialization/#excluding-and-including-fields-based-on-their-value) kuhusu `exclude_defaults` na `exclude_none`.
+
+///
+
+#### Data yenye thamani za nyuga zenye chaguo-msingi { #data-with-values-for-fields-with-defaults }
+
+Lakini ikiwa data yako ina thamani za nyuga za modeli zilizo na thamani za chaguo-msingi, kama kipengee chenye ID `bar`:
+
+
+```Python hl_lines="3 5"
+{
+ "name": "Bar",
+ "description": "The bartenders",
+ "price": 62,
+ "tax": 20.2
+}
+```
+
+
+thamani hizo zitajumuishwa katika jibu.
+
+#### Data yenye thamani zinazolingana na za chaguo-msingi { #data-with-the-same-values-as-the-defaults }
+
+Ikiwa data ina thamani zinazolingana na zile za chaguo-msingi, kama kipengee chenye ID `baz`:
+
+
+```Python hl_lines="3 5-6"
+{
+ "name": "Baz",
+ "description": None,
+ "price": 50.2,
+ "tax": 10.5,
+ "tags": []
+}
+```
+
+
+FastAPI ina uwezo wa kutambua (kwa kweli, Pydantic ndiyo yenye uwezo huo) kwamba, ingawa `description`, `tax`, na `tags` zina thamani zinazolingana na zile za chaguo-msingi, ziliwekwa waziwazi (badala ya kuchukuliwa kutoka kwenye chaguo-msingi).
+
+Kwa hiyo, zitajumuishwa katika jibu la JSON.
+
+/// tip | Kidokezo
+
+Zingatia kwamba thamani za chaguo-msingi zinaweza kuwa chochote, si `None` pekee.
+
+Zinaweza kuwa orodha (`[]`), `float` ya `10.5`, n.k.
+
+///
+
+### `response_model_include` na `response_model_exclude` { #response-model-include-and-response-model-exclude }
+
+Unaweza pia kutumia vigezo vya *decorator ya operesheni ya njia* vya `response_model_include` na `response_model_exclude`.
+
+Vinapokea `set` ya `str` yenye majina ya sifa za kujumuisha (ukiacha nyingine zote) au za kuondoa (ukijumuisha nyingine zote).
+
+Hii inaweza kutumiwa kama njia ya mkato ya haraka ikiwa una modeli moja tu ya Pydantic na unataka kuondoa baadhi ya data kutoka kwenye matokeo.
+
+/// tip | Kidokezo
+
+Lakini bado inapendekezwa kutumia mawazo yaliyo hapo juu, ya kutumia class nyingi, badala ya vigezo hivi.
+
+Hii ni kwa sababu JSON Schema inayozalishwa katika OpenAPI ya programu yako (na nyaraka) bado itakuwa ya modeli nzima, hata ukitumia `response_model_include` au `response_model_exclude` kuondoa baadhi ya sifa.
+
+Hili pia linahusu `response_model_by_alias` inayofanya kazi kwa namna inayofanana.
+
+///
+
+{* ../../docs_src/response_model/tutorial005_py310.py hl[29,35] *}
+
+/// tip | Kidokezo
+
+Sintaksia ya `{"name", "description"}` huunda `set` yenye thamani hizo mbili.
+
+Ni sawa na `set(["name", "description"])`.
+
+///
+
+#### Kutumia `list` badala ya `set` { #using-lists-instead-of-sets }
+
+Ukisahau kutumia `set` na badala yake ukatumia `list` au `tuple`, FastAPI bado itaibadilisha kuwa `set` na itafanya kazi kwa usahihi:
+
+{* ../../docs_src/response_model/tutorial006_py310.py hl[29,35] *}
+
+## Muhtasari { #recap }
+
+Tumia kigezo cha `response_model` cha *decorator ya operesheni ya njia* kufafanua modeli za jibu na hasa kuhakikisha kwamba data ya faragha inachujwa na kuondolewa.
+
+Tumia `response_model_exclude_unset` kurejesha tu thamani zilizowekwa waziwazi.
diff --git a/docs/sw/docs/tutorial/security/oauth2-jwt.md b/docs/sw/docs/tutorial/security/oauth2-jwt.md
new file mode 100644
index 0000000000..cea0b22d67
--- /dev/null
+++ b/docs/sw/docs/tutorial/security/oauth2-jwt.md
@@ -0,0 +1,277 @@
+# OAuth2 yenye Nenosiri (na hashing), Bearer yenye tokeni za JWT { #oauth2-with-password-and-hashing-bearer-with-jwt-tokens }
+
+Sasa kwa kuwa tuna mtiririko mzima wa usalama, tuifanye programu iwe salama kweli, kwa kutumia tokeni za JWT na hashing salama ya nywila.
+
+Huu ni msimbo unaoweza kuutumia katika programu yako, kuhifadhi hash za nywila kwenye hifadhidata yako, n.k.
+
+Tutaanzia pale tulipoishia katika sura iliyotangulia na kuuongeza.
+
+## Kuhusu JWT { #about-jwt }
+
+JWT inamaanisha "JSON Web Tokens".
+
+Ni kiwango cha kusimba object ya JSON kuwa mfuatano mrefu wa herufi ulioshikamana bila nafasi. Inaonekana hivi:
+
+```
+eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
+```
+
+Haijasimbwa kwa njia fiche, kwa hivyo mtu yeyote anaweza kurejesha taarifa kutoka kwenye yaliyomo.
+
+Lakini imetiwa saini. Kwa hivyo, unapopokea tokeni uliyotoa, unaweza kuthibitisha kuwa wewe ndiye uliyeitoa.
+
+Kwa njia hiyo, unaweza kuunda tokeni yenye muda wa kuisha wa, tuseme, wiki 1. Kisha mtumiaji anaporudi siku inayofuata akiwa na tokeni hiyo, unajua kuwa mtumiaji huyo bado ameingia kwenye mfumo wako.
+
+Baada ya wiki moja, tokeni itakuwa imeisha muda wake na mtumiaji hataruhusiwa kuendelea; itabidi aingie tena ili apate tokeni mpya. Na ikiwa mtumiaji (au mtu mwingine) angejaribu kurekebisha tokeni ili kubadilisha muda wake wa kuisha, ungeweza kugundua hilo, kwa sababu saini hazingelingana.
+
+Ikiwa unataka kufanya majaribio na tokeni za JWT na kuona jinsi zinavyofanya kazi, angalia [https://jwt.io](https://jwt.io/).
+
+## Sakinisha `PyJWT` { #install-pyjwt }
+
+Tunahitaji kusakinisha `PyJWT` ili kutengeneza na kuthibitisha tokeni za JWT katika Python.
+
+Ongeza `pyjwt` kwenye mradi wako:
+
+
+
+Idhinisha programu kwa njia ile ile ya awali.
+
+Kwa kutumia taarifa hizi za kuingia:
+
+Jina la mtumiaji: `johndoe`
+Nenosiri: `secret`
+
+/// tip | Kidokezo
+
+Tambua kuwa hakuna mahali popote kwenye msimbo palipo na nenosiri la maandishi ya kawaida "`secret`", tuna hash yake tu.
+
+///
+
+
+
+Ita endpoint `/users/me/`, utapata jibu kama hili:
+
+```JSON
+{
+ "username": "johndoe",
+ "email": "johndoe@example.com",
+ "full_name": "John Doe",
+ "disabled": false
+}
+```
+
+
+
+Ukifungua zana za msanidi programu, unaweza kuona jinsi data inayotumwa inavyojumuisha tokeni pekee; nenosiri hutumwa tu katika ombi la kwanza ili kuthibitisha utambulisho wa mtumiaji na kupata tokeni hiyo ya ufikiaji, lakini si baada ya hapo:
+
+
+
+/// note | Tanbihi
+
+Tambua kichwa `Authorization`, chenye thamani inayoanza na `Bearer `.
+
+///
+
+## Matumizi ya hali ya juu yenye `scopes` { #advanced-usage-with-scopes }
+
+OAuth2 ina dhana ya "scopes".
+
+Unaweza kuzitumia kuongeza seti maalumu ya ruhusa kwenye tokeni ya JWT.
+
+Kisha unaweza kumpa mtumiaji tokeni hiyo moja kwa moja au kuipatia mhusika mwingine, ili kuwasiliana na API yako kwa kufuata vizuizi fulani.
+
+Unaweza kujifunza jinsi ya kuzitumia na jinsi zinavyounganishwa na **FastAPI** baadaye katika **Mwongozo wa Kina wa Mtumiaji**.
+
+## Muhtasari { #recap }
+
+Kwa yale ambayo umeona hadi sasa, unaweza kuandaa programu salama ya **FastAPI** kwa kutumia viwango kama OAuth2 na JWT.
+
+Katika takribani kila framework, kushughulikia usalama huwa jambo changamani kwa haraka sana.
+
+Vifurushi vingi vinavyorahisisha jambo hilo sana hulazimika kuweka vikwazo vingi kwenye modeli ya data, hifadhidata, na vipengele vinavyopatikana. Na baadhi ya vifurushi hivi vinavyorahisisha mambo kupita kiasi kwa kweli vina dosari za usalama zisizoonekana wazi.
+
+---
+
+**FastAPI** haiweki vikwazo katika uchaguzi wa hifadhidata, modeli ya data au zana yoyote.
+
+Inakupa unyumbufu wote wa kuchagua zile zinazofaa zaidi mradi wako.
+
+Na unaweza kutumia moja kwa moja vifurushi vingi vinavyotunzwa vizuri na vinavyotumika sana kama `pwdlib` na `PyJWT`, kwa sababu **FastAPI** haihitaji mifumo changamani ya kuunganisha vifurushi vya nje.
+
+Lakini inakupa zana za kurahisisha mchakato kadiri iwezekanavyo bila kuathiri unyumbufu, uimara, au usalama.
+
+Na unaweza kutumia na kutekeleza itifaki salama za viwango vinavyokubalika, kama OAuth2, kwa njia rahisi kiasi.
+
+Unaweza kujifunza zaidi katika **Mwongozo wa Kina wa Mtumiaji** kuhusu jinsi ya kutumia "scopes" za OAuth2, kwa mfumo wa ruhusa wenye udhibiti wa kina zaidi, kwa kufuata viwango hivi hivi. OAuth2 yenye scopes ndiyo njia inayotumiwa na watoa huduma wengi wakubwa wa uthibitishaji wa utambulisho, kama Facebook, Google, GitHub, Microsoft, X (Twitter), n.k. kuidhinisha programu za wahusika wengine kuwasiliana na API zao kwa niaba ya watumiaji wao.