Skip to content

Commit 6501910

Browse files
committed
finishing on translations
1 parent e683744 commit 6501910

File tree

1 file changed

+71
-22
lines changed

1 file changed

+71
-22
lines changed

src/content/learn/tutorial-tic-tac-toe.md

Lines changed: 71 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@ Mafunzo haya yameundwa kwa ajili ya watu wanaopendelea **kujifunza kwa kufanya**
1717
Mafunzo haya yamegawanywa katika sehemu kadhaa:
1818

1919
- [Mpanglio wa mafunzo](#setup-for-the-tutorial) utakupa **sehemu ya kuanzia** kufuata mafunzo.
20-
- [Muhtasari](#overview) utakufundisha **misingi** ya React: vipengele, props, na hali.
20+
- [Muhtasari](#overview) utakufunza **misingi** ya React: vipengele, props, na hali.
2121
- [Kukamilisha mchezo](#completing-the-game) itakufundisha **mbinu za kawaida zaidi** katika maendeleo ya React.
22-
- [Kuongeza safari ya muda](#adding-time-travel) itakupa **ufahamu wa kina zaidi** wa nguvu za kipekee za React.
22+
- [Kuongeza safari ya wakati](#adding-time-travel) itakupa **ufahamu wa kina zaidi** wa nguvu za kipekee za React.
2323

2424
### Unajenga nini? {/*what-are-you-building*/}
2525

@@ -358,7 +358,7 @@ export default function Square() {
358358
}
359359
```
360360

361-
Utapata makosa haya:
361+
Utapata kosa hili:
362362

363363
<ConsoleBlock level="error">
364364

@@ -381,13 +381,13 @@ export default function Square() {
381381

382382
Sasa unapaswa kuona:
383383

384-
![vitufe viwili vyenye X](../images/tutorial/two-x-filled-squares.png)
384+
![miraba miwili yenye X](../images/tutorial/two-x-filled-squares.png)
385385

386386
Vizuri! Sasa unahitaji tu kunakili na kubandika mara kadhaa ili kuongeza mraba tisa na...
387387

388388
![miraba tisa yenye X katika mstari](../images/tutorial/nine-x-filled-squares.png)
389389

390-
Hapana! Miraba yote ziko katika mstari mmoja tu, si katika gridi kama inavyohitajika kwa bodi yetu. Ili kutatua hili, utahitaji kundi la mraba zako katika safu na `div`s na kuongeza baadhi ya madarasa ya CSS. Wakati huo huo, utampa kila mraba nambari ili kuhakikisha unajua kila mraba unapoonyeshwa.
390+
La hasha! Miraba yote iko katika mstari mmoja tu, si katika gridi kama inavyohitajika kwa bodi yetu. Ili kutatua hili, utahitaji kundi la mraba zako katika safu na `div`s na kuongeza baadhi ya madarasa ya CSS. Wakati huo huo, utampa kila mraba nambari ili kuhakikisha unajua kila mraba unapoonyeshwa.
391391

392392
Katika faili ya `App.js`, sasisha kiungo cha `Square` ili kiwe kama hiki:
393393

@@ -508,7 +508,7 @@ Psssst... Kuna ni mengi ya kuandika! Ni sawa kunakili na kubandika msimbo kutoka
508508

509509
</Note>
510510

511-
### Kupitisha data kupitia props {/*passing-data-through-props*/}
511+
### Kupitisha data kupitia kwa props {/*passing-data-through-props*/}
512512

513513
Ifuatayo, utataka kubadili thamani ya mraba kutoka tupu hadi "X" wakati mtumiaji anabofya kwenye mraba. Kwa jinsi ulivyounda bodi hadi sasa, itabidi unakili na kubandika msimbo unaosasisha mraba mara tisa (moja kwa kila mraba ulionao)! Badala ya kunakili na kubandika, usanifu wa viungo vya React unakuwezesha kuunda kiungo kinachoweza kutumika tena ili kuepuka msimbo unaojirudia.
514514

@@ -557,7 +557,7 @@ Hebu tuangalie:
557557

558558
![bodi moja iliyojaa](../images/tutorial/board-filled-with-ones.png)
559559

560-
Hapana! Ulipoteza mraba yenye nambari ulizokuwa nazo awali. Sasa kila mraba inasema "1". Ili kutatua hili, utatumia *props* kupitisha thamani ambayo kila mraba inapaswa kuwa nayo kutoka kwa kiungo cha mzazi (`Board`) hadi kwa mtoto wake (`Square`).
560+
La hasha! Ulipoteza mraba yenye nambari ulizokuwa nazo awali. Sasa kila mraba inasema "1". Ili kutatua hili, utatumia *props* kupitisha thamani ambayo kila mraba inapaswa kuwa nayo kutoka kwa kiungo cha mzazi (`Board`) hadi kwa mtoto wake (`Square`).
561561

562562
Sasasisha kiungo cha `Square` ili kisome prop ya `value` ambayo utapitia kutoka kwa `Board`:
563563

@@ -567,7 +567,7 @@ function Square({ value }) {
567567
}
568568
```
569569

570-
`function Square({ value })` inaonyesha kuwa kiungo cha Square kinaweza kupitishiwa prop iitwayo `value`.
570+
`function Square({ value })` inaonyesha kuwa kiungo cha Mraba kinaweza kupitishiwa prop iitwayo `value`.
571571

572572
Sasa unataka kuonyesha hiyo `value` badala ya `1` ndani ya kila mraba. Jaribu kufanya hivyo kama hivi:
573573

@@ -702,7 +702,7 @@ body {
702702

703703
</Sandpack>
704704

705-
### Kutengeneza kipengele kinachoshirishi {/*making-an-interactive-component*/}
705+
### Kutengeneza kipengele kishirikishi {/*making-an-interactive-component*/}
706706

707707
Hebu tujaze kipengele cha `Square` na `X` unapoibofya. Tangaza kazi (function) iitwayo `handleClick` ndani ya `Square`. Kisha, ongeza `onClick` kwenye props za kipengele cha button kilichorejeshwa kutoka kwa `Square`:
708708

@@ -897,7 +897,7 @@ body {
897897
898898
</Sandpack>
899899
900-
### Zana za Watengenezaji wa React {/*react-developer-tools*/}
900+
### React Developer Tools za {/*react-developer-tools*/}
901901
902902
React DevTools hukuruhusu kuangalia *props* na *state* za vipengele vyako vya React. Unaweza kupata kichupo cha React DevTools chini ya sehemu ya *browser* katika CodeSandbox:
903903
@@ -909,7 +909,7 @@ Ili kuchunguza kipengele fulani kwenye skrini, tumia kitufe kilicho kwenye kona
909909
910910
<Note>
911911
912-
Kwa maendeleo ya ndani (*local development*), React DevTools inapatikana kama [Chrome](https://chrome.google.com/webstore/detail/react-developer-tools/fmkadmapgofadopljbjfkapdkoienihi?hl=en), [Firefox](https://addons.mozilla.org/en-US/firefox/addon/react-devtools/), na [Edge](https://microsoftedge.microsoft.com/addons/detail/react-developer-tools/gpphkfbcpidddadnkolkpfckpihlkkil) *browser extension*. Isakinishe, na kichupo cha *Components* kitaonekana kwenye Zana za Watengenezaji wa kivinjari chako kwa tovuti zinazotumia React.
912+
Kwa maendeleo ya ndani (local development), React DevTools inapatikana kama [Chrome](https://chrome.google.com/webstore/detail/react-developer-tools/fmkadmapgofadopljbjfkapdkoienihi?hl=en), [Firefox](https://addons.mozilla.org/en-US/firefox/addon/react-devtools/), na [Edge](https://microsoftedge.microsoft.com/addons/detail/react-developer-tools/gpphkfbcpidddadnkolkpfckpihlkkil) *browser extension*. Isakinishe, na kichupo cha *Components* kitaonekana kwenye Zana za Watengenezaji wa kivinjari chako kwa tovuti zinazotumia React.
913913
914914
</Note>
915915
@@ -1133,7 +1133,7 @@ Kuita kazi ya `setSquares` kunamwambia React kwamba hali ya sehemu imebadilika.
11331133
11341134
<Note>
11351135
1136-
JavaScript inaunga mkono [closures](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures) ambayo inamaanisha kazi ya ndani (mfano, `handleClick`) ina ufikiaji wa vigezo na kazi zilizofafanuliwa katika kazi ya nje (mfano, `Board`). Kazi ya `handleClick` inaweza kusoma hali ya `squares` na kuita mbinu ya `setSquares` kwa sababu zote zipo ndani ya kazi ya `Board`.
1136+
JavaScript inawezesha [closures](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures) ambayo inamaanisha kazi ya ndani (mfano, `handleClick`) ina ufikiaji wa vigezo na kazi zilizofafanuliwa katika kazi ya nje (mfano, `Board`). Kazi ya `handleClick` inaweza kusoma hali ya `squares` na kuita mbinu ya `setSquares` kwa sababu zote zipo ndani ya kazi ya `Board`.
11371137
11381138
</Note>
11391139
@@ -1321,7 +1321,7 @@ Sasa kwamba usimamizi wa hali yako uko kwenye sehemu ya `Board`, sehemu ya mzazi
13211321
13221322
Hebu tuangalie tena kinachotokea wakati mtumiaji anapobonyeza square ya juu kushoto kwenye ubao wako ili kuongeza `X`:
13231323
1324-
1. Kubonyeza square ya juu kushoto huendesha kazi ambayo `button` ilipokea kama sifa yake ya `onClick` kutoka kwa `Square`. Sehemu ya `Square` ilipokea kazi hiyo kama sifa yake ya `onSquareClick` kutoka kwa `Board`. Sehemu ya `Board` ilifafanua kazi hiyo moja kwa moja ndani ya JSX. Inaita `handleClick` ikiwa na hoja ya `0`.
1324+
1. Kubonyeza mraba wa juu kushoto huendesha kazi ambayo `button` ilipokea kama sifa yake ya `onClick` kutoka kwa `Square`. Sehemu ya `Square` ilipokea kazi hiyo kama sifa yake ya `onSquareClick` kutoka kwa `Board`. Sehemu ya `Board` ilifafanua kazi hiyo moja kwa moja ndani ya JSX. Inaita `handleClick` ikiwa na hoja ya `0`.
13251325
2. `handleClick` hutumia hoja (`0`) kuboresha kipengele cha kwanza cha safu ya `squares` kutoka `null` hadi `X`.
13261326
3. Hali ya `squares` ya sehemu ya `Board` ilisasishwa, hivyo `Board` na watoto wake wote hujirejesha. Hii husababisha sifa ya `value` ya sehemu ya `Square` yenye index `0` kubadilika kutoka `null` hadi `X`.
13271327
@@ -1816,6 +1816,54 @@ export default function Game() {
18161816
}
18171817
```
18181818
1819+
Ili kufanya kipengele cha `Board` kijitegemee kikamilifu kwa props kinachopokea, badilisha kipengele cha `Board` ili kichukue props tatu: `xIsNext`, `squares`, na kazi mpya ya `onPlay` ambayo `Board` inaweza kuitumia na orodha mpya ya viwanja (`squares`) wakati mchezaji anafanya harakati. Kisha, ondoa mistari miwili ya kwanza ya kazi ya `Board` inayoitwa `useState`:
1820+
1821+
```js {1}
1822+
function Board({ xIsNext, squares, onPlay }) {
1823+
function handleClick(i) {
1824+
//...
1825+
}
1826+
// ...
1827+
}
1828+
```
1829+
1830+
Sasa badilisha miito ya `setSquares` na `setXIsNext` katika `handleClick` kwenye kipengele cha `Board` kwa wito mmoja wa kazi yako mpya ya `onPlay` ili kipengele cha `Game` kiweze kusasisha `Board` wakati mtumiaji anabofya mraba:
1831+
1832+
```js {12}
1833+
function Board({ xIsNext, squares, onPlay }) {
1834+
function handleClick(i) {
1835+
if (calculateWinner(squares) || squares[i]) {
1836+
return;
1837+
}
1838+
const nextSquares = squares.slice();
1839+
if (xIsNext) {
1840+
nextSquares[i] = "X";
1841+
} else {
1842+
nextSquares[i] = "O";
1843+
}
1844+
onPlay(nextSquares);
1845+
}
1846+
//...
1847+
}
1848+
```
1849+
1850+
Kipengele cha `Board` sasa kimejitegemea kikamilifu kwa props kinachopokelewa kutoka kwa kipengele cha `Game`. Unahitaji kutekeleza kazi ya `handlePlay` ndani ya kipengele cha `Game` ili kufanya mchezo kufanya kazi tena.
1851+
1852+
Kazi ya `handlePlay` inapaswa kufanya nini inapoitishwa? Kumbuka kwamba `Board` ilitumia kuita `setSquares` na orodha mpya; sasa inapitisha orodha ya `squares` iliyosasishwa kwa `onPlay`.
1853+
1854+
Kazi ya `handlePlay` inahitaji kusasisha hali ya `Game` ili kuamsha upya, lakini sasa huna kazi ya `setSquares` ambayo unaweza kuitumia tena--unatumia sasa kipengele cha `history` kuhifadhi habari hii. Utahitaji kusasisha `history` kwa kuongeza orodha iliyosasishwa ya `squares` kama kipengele kipya cha historia. Pia unataka kubadilisha `xIsNext`, kama vile `Board` ilivyofanya awali:
1855+
1856+
```js {4-5}
1857+
export default function Game() {
1858+
//...
1859+
function handlePlay(nextSquares) {
1860+
setHistory([...history, nextSquares]);
1861+
setXIsNext(!xIsNext);
1862+
}
1863+
//...
1864+
}
1865+
```
1866+
18191867
Hapa, `[...history, nextSquares]` inaunda orodha mpya inayojumuisha vitu vyote katika `history`, ikifuatiwa na `nextSquares`. (Unaweza kusoma `...history` kama "orodhesha vitu vyote vilivyomo ndani ya `history`".)
18201868
18211869
Kwa mfano, ikiwa `history` ni `[[null,null,null], ["X",null,null]]` na `nextSquares` ni `["X",null,"O"]`, basi orodha mpya `[...history, nextSquares]` itakuwa `[[null,null,null], ["X",null,null], ["X",null,"O"]]`.
@@ -1969,7 +2017,7 @@ body {
19692017
19702018
</Sandpack>
19712019
1972-
### Kuonyesha harakati za zamani {/*kuonyesha-harakati-za-zamani*/}
2020+
### Kuonyesha moves za awali {/*showing-the-past-moves*/}
19732021
19742022
Kwa sababu unarekodi historia ya mchezo wa tic-tac-toe, sasa unaweza kuonyesha orodha ya harakati za zamani kwa mchezaji.
19752023
@@ -2001,9 +2049,9 @@ export default function Game() {
20012049
const moves = history.map((squares, move) => {
20022050
let description;
20032051
if (move > 0) {
2004-
description = 'Endelea hadi harakati #' + move;
2052+
description = 'Go to move #' + move;
20052053
} else {
2006-
description = 'Rudi mwanzo wa mchezo';
2054+
description = 'Go to game start';
20072055
}
20082056
return (
20092057
<li>
@@ -2024,6 +2072,7 @@ export default function Game() {
20242072
);
20252073
}
20262074
```
2075+
20272076
Unaweza kuona jinsi kanuni yako inavyopaswa kuonekana hapa chini. Kumbuka kwamba unapaswa kuona hitilafu katika koni ya zana za mende inayosema:
20282077
20292078
<ConsoleBlock level="warning">
@@ -2204,9 +2253,9 @@ Kwa kila harakati katika historia ya mchezo wa tic-tac-toe, unaunda kipengele ch
22042253
22052254
Kwa sasa, unapaswa kuona orodha ya harakati zilizotokea katika mchezo na hitilafu katika koni ya zana za mende. Hebu tujadili maana ya hitilafu ya "key."
22062255
2207-
### Kuchagua kipeperushi `{/*picking-a-key*/}` {/*kuchagua-kipeperushi-picking-a-key*/}
2256+
### Kuchagua kifunguo {/*picking-a-key*/}
22082257
2209-
Unapohonyesha orodha, React huhifadhi baadhi ya habari kuhusu kila kipengele cha orodha kilichohonyeshwa. Unaposasisha orodha, React inahitaji kubaini kile kilichobadilika. Huenda umeongeza, kuondoa, kubadilisha, au kupanga upya vipengele vya orodha.
2258+
Unapo-render orodha, React huhifadhi baadhi ya habari kuhusu kila kipengele cha orodha kilichohonyeshwa. Unaposasisha orodha, React inahitaji kubaini kile kilichobadilika. Huenda umeongeza, kuondoa, kubadilisha, au kupanga upya vipengele vya orodha.
22102259
22112260
Fikiria unapohama kutoka
22122261
@@ -2243,7 +2292,7 @@ Ikiwa hakuna kipeperushi kilichotolewa, React itaripoti hitilafu na kutumia kias
22432292
22442293
Funguo hazihitaji kuwa za kipekee duniani; zinahitaji tu kuwa za kipekee kati ya vipengele na ndugu zao.
22452294
2246-
### Kutekeleza safari ya wakati `{/*implementing-time-travel*/}` {/*kutekeleza-safari-ya-wakati-implementing-time-travel*/}
2295+
### Kutekeleza safari ya wakati {/*implementing-time-travel*/}
22472296
22482297
Katika historia ya mchezo wa tic-tac-toe, kila harakati ya zamani ina ID ya kipekee inayohusishwa nayo: ni nambari mfuatano ya harakati. Harakati hazitabadilishwa, kuondolewa, au kuingizwa katikati, hivyo ni salama kutumia kiashiria cha harakati kama kipeperushi.
22492298
@@ -2650,7 +2699,7 @@ body {
26502699
26512700
</Sandpack>
26522701
2653-
### Kusafisha Mwisho `{/*final-cleanup*/}` {/*kusafisha-mwisho-final-cleanup*/}
2702+
### Kusafisha Mwisho {/*final-cleanup*/}
26542703
26552704
Ukichunguza kwa makini kanuni, utaona kuwa `xIsNext === true` wakati `currentMove` ni nambari yenye uwiano wa mbili na `xIsNext === false` wakati `currentMove` ni nambari isiyo na uwiano wa mbili. Kwa maneno mengine, ikiwa unajua thamani ya `currentMove`, basi unaweza daima kujua kile kinachopaswa kuwa `xIsNext`.
26562705
@@ -2678,7 +2727,7 @@ export default function Game() {
26782727
26792728
Sasa, huna tena haja ya tangazo la hali ya `xIsNext` au miito ya `setXIsNext`. Sasa, hakuna nafasi kwa `xIsNext` kutoka nje ya mfululizo na `currentMove`, hata kama utatengeneza makosa wakati wa kuandika vipengele.
26802729
2681-
### Kumalizia `{/*wrapping-up*/}` {/*kumalizia-wrapping-up*/}
2730+
### Kumalizia {/*wrapping-up*/}
26822731
26832732
Hongera! Umeunda mchezo wa tic-tac-toe ambao:
26842733
@@ -2866,4 +2915,4 @@ Ikiwa una muda wa ziada au unataka kujitolea kuboresha ujuzi wako wa React, hapa
28662915
1. Wakati mtu anashinda, angazia viwanja vitatu vilivyopunguza ushindi (na wakati hakuna anayeshinda, onyesha ujumbe kuhusu matokeo kuwa sare).
28672916
1. Onyesha eneo la kila harakati kwa muundo (mstari, nguzo) kwenye orodha ya historia ya harakati.
28682917
2869-
Katika mafunzo haya, umejifunza dhana za React ikiwemo vipengele, sehemu, props, na hali. Sasa kwamba umeona jinsi dhana hizi zinavyofanya kazi wakati wa kujenga mchezo, angalia [Thinking in React](/learn/thinking-in-react) kuona jinsi dhana hizo za React zinavyofanya kazi wakati wa kujenga UI ya programu.
2918+
Katika mafunzo haya, umejifunza dhana za React ikiwemo vipengele, sehemu, props, na hali. Sasa kwamba umeona jinsi dhana hizi zinavyofanya kazi wakati wa kujenga mchezo, angalia [Kuwaza katika React](/learn/thinking-in-react) kuona jinsi dhana hizo za React zinavyofanya kazi wakati wa kujenga UI ya programu.

0 commit comments

Comments
 (0)