Skip to content

Commit 4b5acd2

Browse files
committed
Fix few files
"intro" article matches the English version now. A new part of "Number" article in data types section is translated.
2 parents 25067f3 + 9d5fc71 commit 4b5acd2

9 files changed

Lines changed: 15 additions & 87 deletions

File tree

1-js/02-first-steps/08-operators/article.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -305,7 +305,7 @@ let n = 2;
305305
306306
n *= 3 + 5; // یکسان است n *= 8 ،قسمت سمت راست اول ارزیابی شد
307307
308-
alert( n ); // 16
308+
alert( n ); // 16
309309
```
310310

311311
## عملگر افزایش/کاهش

1-js/02-first-steps/15-function-basics/article.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,7 @@ showMessage("Ann"); // Ann: no text given
208208
209209
حالا اگر پارامتر `text` پاس داده نشود، مقدار `"no text given"` را می‌گیرد.
210210
211-
اگر پارامتر وجود داشته باشد اما برابر با `undefined` باشد، مقدار پیش‌فرض همچنان وارد عمل می‌شود، مثل این:
211+
همچنین اگر پارامتر وجود داشته باشد نیز ممکن است مقدار پیش‌فرض قرار بگیرد، در صورتی که برابر با `undefined` باشد، مانند زیر:
212212
213213
```js
214214
showMessage("Ann", undefined); // Ann: no text given

1-js/04-object-basics/09-object-toprimitive/article.md

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,6 @@ alert(user + 500); // hint: default -> 1500
132132

133133
همانطور که از کد می‌بینیم، با توجه به تبدیل، `user` به رشته‌ای خودتعریف‌کننده یا مقداری پول تبدیل می‌شود. متد `user[Symbol.toPrimitive]` به تنهایی تمام موارد تبدیل را به عهده می‌گیرد.
134134

135-
136135
## متد toString/valueOf
137136

138137
اگر `Symbol.toPrimitive` وجود نداشته باشد، سپس جاوااسکریپت سعی می‌کند که متدهای `toString` و `valueOf` را پیدا کند:
@@ -225,7 +224,6 @@ alert(user + 500); // toString -> John500
225224

226225
همانطور که از قبل می‌دانیم، بسیاری از عملگرها و تابع‌ها تبدیل نوع داده را انجام می‌دهند، مثلا عملگر ضرب `*` عملوندها را به عدد تبدیل می‌کند.
227226

228-
<<<<<<< HEAD
229227
1. شیء به یک مقدار اصلی تبدیل می‌شود (با استفاده از قوانینی که بالاتر گفتیم).
230228
2. اگر برای محاسبات بعدی لازم باشد، مقدار اصلی حاصل باز هم تبدیل می‌شود.
231229

1-js/05-data-types/03-string/article.md

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -447,13 +447,7 @@ alert( "Wid*!*get*/!*".endsWith("get") ); // true پایان می‌یابد پ
447447
alert( str.substr(-4, 2) ); // 'gi' :از موقعیت چهارم 2 کاراکتر را بگیر
448448
```
449449

450-
<<<<<<< HEAD
451450
بیایید این متدها را برای جلوگیری از هر گمراهی خلاصه کنیم:
452-
=======
453-
This method resides in the [Annex B](https://tc39.es/ecma262/#sec-string.prototype.substr) of the language specification. It means that only browser-hosted Javascript engines should support it, and it's not recommended to use it. In practice, it's supported everywhere.
454-
455-
Let's recap these methods to avoid any confusion:
456-
>>>>>>> 1edb0a38330b54d2e1916f5193fc043e6fbbea78
457451

458452
| متد | انتخاب می‌کند... | منفی‌ها |
459453
|--------|-----------|-----------|
@@ -558,7 +552,7 @@ alert( str );
558552
alert( 'Österreich'.localeCompare('Zealand') ); // -1
559553
```
560554
561-
این متد دو آرگومان اضافی دارد که در [مستندات](mdn:js/String/localeCompare) مشخص شده‌اند که به ما اجازه می‌دهند تا زبان را مشخص کنیم (به طور پیش‌فرض از شرایط فعلی بدست می‌آید، ترتیب حروف به زبان بستگی دارد) و قوانین اضافی را ایجاد کنیم مثل حساسیت بزرگی یا کوچکی حرف یا اینکه به یک صورت با `"a"` و `""` رفتار شود و غیره.
555+
این متد دو آرگومان اضافی دارد که در [مستندات](mdn:js/String/localeCompare) مشخص شده‌اند که به ما اجازه می‌دهند تا زبان را مشخص کنیم (به طور پیش‌فرض از شرایط فعلی بدست می‌آید، ترتیب حروف به زبان بستگی دارد) و قوانین اضافی را ایجاد کنیم مثل حساسیت بزرگی یا کوچکی حرف یا اینکه به یک صورت با `"a"` و `"á"` رفتار شود و غیره.
562556
563557
## داخلی‌ها، Unicode
564558
@@ -618,29 +612,29 @@ alert( '𝒳'.charCodeAt(1).toString(16) ); // dcb3, between 0xdc00 and 0xdfff
618612
619613
برای پشتیبانی از ترکیبات دلخواه، UTF-16 به ما اجازه می‌دهد که از چند کاراکتر Unicode استفاده کنیم: کاراکتر پایه که بعد از آن یک یا چند کاراکتر «علامت» می‌آید که آن را «زیبا می‌کند».
620614
621-
برای مثال، اگر ما یک حرف `S` داشته باشیم که بعد از آن کاراکتر خاص «نقطه بالا» آمده باشد (کد `\u0307`)، به صورت نمایش داده می‌شود.
615+
برای مثال، اگر ما یک حرف `S` داشته باشیم که بعد از آن کاراکتر خاص «نقطه بالا» آمده باشد (کد `\u0307`)، به صورت نمایش داده می‌شود.
622616
623617
```js run
624-
alert( 'S\u0307' ); //
618+
alert( 'S\u0307' ); //
625619
```
626620
627621
اگر ما نیاز به یک علامت اضافی در بالای حرف داشته باشیم (یا پایین آن)، مشکلی نیست، فقط کاراکتر علامت مورد نیاز را اضافه می‌کنیم.
628622
629-
برای مثال، اگر ما یک کاراکتر «نقطه پایین» (کد `\u0323`) را ضمیمه کنیم، سپس ما «حرف S با نقطه‌هایی در بالا و پایین آن» خوهیم داشت: `Ṩ`.
623+
برای مثال، اگر ما یک کاراکتر «نقطه پایین» (کد `\u0323`) را ضمیمه کنیم، سپس ما «حرف S با نقطه‌هایی در بالا و پایین آن» خوهیم داشت: ``.
630624
631625
برای مثال:
632626
633627
```js run
634-
alert( 'S\u0307\u0323' ); // Ṩ
628+
alert( 'S\u0307\u0323' ); //
635629
```
636630
637631
این روش انعطاف زیادی را مهیا می‌کند، اما یک مشکل جالب هم دارد: دو کاراکتر ممکن است که ظاهر یکسانی داشته باشند، اما با ترکیبات Unicode متفاوت نمایش داده شوند.
638632
639633
برای مثال:
640634
641635
```js run
642-
let s1 = 'S\u0307\u0323'; // Ṩ ،نقطه بالا + نقطه پایین + S
643-
let s2 = 'S\u0323\u0307'; // Ṩ ،نقطه پایین + نقطه بالا + S
636+
let s1 = 'S\u0307\u0323'; // ،نقطه بالا + نقطه پایین + S
637+
let s2 = 'S\u0323\u0307'; // ،نقطه پایین + نقطه بالا + S
644638

645639
alert( `s1: ${s1}, s2: ${s2}` );
646640

1-js/05-data-types/05-array-methods/article.md

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -262,14 +262,8 @@ alert( arr.includes(1) ); // true
262262
```js run
263263
let fruits = ['Apple', 'Orange', 'Apple']
264264

265-
<<<<<<< HEAD
266265
alert( arr.indexOf('Apple') ); // 0 (Apple اولین)
267266
alert( arr.lastIndexOf('Apple') ); // 2 (Apple آخرین)
268-
=======
269-
alert( fruits.indexOf('Apple') ); // 0 (first Apple)
270-
alert( fruits.lastIndexOf('Apple') ); // 2 (last Apple)
271-
>>>>>>> 1edb0a38330b54d2e1916f5193fc043e6fbbea78
272-
```
273267

274268
````smart header="متد `includes` مقدار `NaN` را به درستی مدیریت می‌کند"
275269
یک تفاوت بسیار کوچک `includes` این است که این متد به درستی `NaN` را کنترل می‌کند، درست برعکس `indexOf`:

1-js/05-data-types/06-iterable/article.md

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -218,13 +218,8 @@ alert(arr.pop()); // World (متد کار کرد)
218218

219219
اتفاق مشابهی برای حلقه‌پذیر می‌افتد:
220220

221-
<<<<<<< HEAD
222221
```js
223222
// از مثال بالا گرفته شده است range فرض می‌کنیم که
224-
=======
225-
```js run
226-
// assuming that range is taken from the example above
227-
>>>>>>> 1edb0a38330b54d2e1916f5193fc043e6fbbea78
228223
let arr = Array.from(range);
229224
alert(arr); // 1,2,3,4,5 (آرایه کار می‌کند toString تبدیل)
230225
```
@@ -238,13 +233,8 @@ Array.from(obj[, mapFn, thisArg])
238233

239234
برای مثال:
240235

241-
<<<<<<< HEAD
242236
```js
243237
// از مثال بالا گرفته شده است range فرض می‌کنیم
244-
=======
245-
```js run
246-
// assuming that range is taken from the example above
247-
>>>>>>> 1edb0a38330b54d2e1916f5193fc043e6fbbea78
248238

249239
// به توان 2 رساندن هر عدد
250240
let arr = Array.from(range, num => num * num);

1-js/06-advanced-functions/01-recursion/01-sum-to/solution.md

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,4 @@ alert( sumTo(100) );
3737

3838
راه‌حل حلقه از نظر سرعت دوم است. در هر دو نوع بازگشتی و حلقه ما اعداد یکسانی را جمع می‌زنیم. اما بازگشت، فراخوانی‌های تودرتو و مدیریت پشته اجرا را دخیل می‌کند. همچنین منابع بیشتری مصرف می‌کند پس کندتر است.
3939

40-
<<<<<<< HEAD
41-
پی‌نوشت دوم: بعضی از موتورها از بهینه‌سازی «فراخوانی دنباله‌دار» پشتیبانی می‌کنند: اگر یک فراخوانی بازگشتی دقیقا آخرین فراخوانی در تابع باشد (مانند `sumTo(100000)` بالا)، سپس تابع بیرونی نیازی نخواهد داشت که اجرا شدن را ادامه دهد پس موتور نیازی ندارد که زمینه‌اجرای آن را به یاد بسپارد. این موضوع بار را از دوش حافظه برمی‌دارد پس محاسبه `sumTo(100000)` ممکن می‌شود. اما اگر موتور جاوااسکریپت از بهینه‌سازی فراخوانی دنباله‌دار پشتیبانی نکند (اکثر آنها پشتیبانی نمی‌کنند)، یک ارور ایجاد می‌شود: از حداکثر اندازه پشته گذشتیم، چون معمولا یک محدودیت برای کل اندازه پشته وجود دارد.
42-
=======
43-
P.P.S. Some engines support the "tail call" optimization: if a recursive call is the very last one in the function, with no other calculations performed, then the outer function will not need to resume the execution, so the engine doesn't need to remember its execution context. That removes the burden on memory. But if the JavaScript engine does not support tail call optimization (most of them don't), there will be an error: maximum stack size exceeded, because there's usually a limitation on the total stack size.
44-
>>>>>>> 1edb0a38330b54d2e1916f5193fc043e6fbbea78
40+
پی‌نوشت دوم: بعضی از موتورها از بهینه‌سازی «فراخوانی دنباله‌دار» پشتیبانی می‌کنند: اگر یک فراخوانی بازگشتی دقیقا آخرین فراخوانی در تابع باشد، سپس تابع بیرونی نیازی نخواهد داشت که اجرا شدن را ادامه دهد پس موتور نیازی ندارد که زمینه‌اجرای آن را به یاد بسپارد. این موضوع بار را از دوش حافظه برمی‌دارد پس محاسبه ممکن می‌شود. اما اگر موتور جاوااسکریپت از بهینه‌سازی فراخوانی دنباله‌دار پشتیبانی نکند (اکثر آنها پشتیبانی نمی‌کنند)، یک ارور ایجاد می‌شود: از حداکثر اندازه پشته گذشتیم، چون معمولا یک محدودیت برای کل اندازه پشته وجود دارد.

1-js/11-async/02-promise-basics/article.md

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -35,13 +35,8 @@ let promise = new Promise(function(resolve, reject) {
3535

3636
شیء `promise` که توسط سازنده `new Promise` برگردانده شده است دارای این ویژگی‌های داخلی است:
3737

38-
<<<<<<< HEAD
3938
- `state` — در ابتدا `"pending"` سپس با فراخوانی، `resolve` به `"fulfilled"` یا زمانی که `reject` فراخوانی می‌شود به `"rejected"` تغییر می‌کند.
4039
- `result` — در ابتدا `undefined`، سپس با فراخوانی `resolve(value)` به `value` یا زمانی که `reject(error)` فراخوانی می شود به `error` تغییر می‌کند.
41-
=======
42-
- `state` — initially `"pending"`, then changes to either `"fulfilled"` when `resolve` is called or `"rejected"` when `reject` is called.
43-
- `result` — initially `undefined`, then changes to `value` when `resolve(value)` is called or `error` when `reject(error)` is called.
44-
>>>>>>> 1edb0a38330b54d2e1916f5193fc043e6fbbea78
4540

4641
بنابراین اجرا‌کننده در نهایت `promise` را به یکی از این حالات منتقل می‌کند:
4742

@@ -273,7 +268,6 @@ new Promise((resolve, reject) => {
273268
new Promise((resolve, reject) => {
274269
throw new Error("خطا");
275270
})
276-
<<<<<<< HEAD
277271
.finally(() => alert("Promise آماده است")) // این اول فعال می‌شود
278272
.catch(err => alert(err)); // <-- خطا را نمایش می‌دهد .catch
279273
```
@@ -288,11 +282,7 @@ new Promise((resolve, reject) => {
288282
- اگر یک کنترل‌کننده `finally` چیزی برگرداند، نادیده گرفته می‌شود.
289283
- زمانی که `finally` خطایی برگراند، سپس اجرای برنامه به نزدیک‌ترین کنترل‌کننده خطا می‌رود.
290284
291-
<<<<<<< HEAD
292285
این خواص مفید هستند و اگر ما تعیین کنیم که `finally` در نهایت چگونه قرار است استفاده شود کاری می‌کنند که همه چیز به درستی کار کند: برای روند تمیزکاری عمومی.
293-
=======
294-
These features are helpful and make things work just the right way if we use `finally` how it's supposed to be used: for generic cleanup procedures.
295-
>>>>>>> 1edb0a38330b54d2e1916f5193fc043e6fbbea78
296286
297287
````smart header="ما می توانیم اجراکننده‌ها را به Promiseهای تسویه‌شده متصل کنیم"
298288
اگر یک promise در حالت انتظار است، کنترل‌کننده‌های `then/catch/finally.` منتظر آن می‌مانند.

2-ui/2-events/02-bubbling-and-capturing/article.md

Lines changed: 5 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -126,40 +126,26 @@
126126
2. فاز هدف -- رویداد به عنصر هدف می‌رسد.
127127
3. فاز بالارفتن -- رویداد از عنصر بالا می‌رود.
128128

129-
<<<<<<< HEAD
130129
این یک عکس از یک کلیک روی `<td>` داخل یک جدول است، که شامل مشخصات زیر است
131-
=======
132-
Here's the picture, taken from the specification, of the capturing `(1)`, target `(2)` and bubbling `(3)` phases for a click event on a `<td>` inside a table:
133-
>>>>>>> 1edb0a38330b54d2e1916f5193fc043e6fbbea78
134130

135131
![](eventflow.svg)
136132

137133
اینگونه که: برای یک کلیک روی `<td>` رویداد اول از زنجیره اجداد پایین می‌آید تا به عنصر برسد‌(گرفتن). بعد به عنصر هدف می‌رسد و بعد بالا می‌رود (بالارفتن) و کنترل‌کننده‌ها را در مسیر صدا می‌زند.
138134

139-
<<<<<<< HEAD
140-
**قبلا تنها درباره بالارفتن رویداد صحبت کردیم، چون که فاز گرفتن به ندرت استفاده می‌شود. معمولا برای ما نمایان نیست.**
135+
قبلا تنها درباره بالارفتن رویداد صحبت کردیم، چون که فاز گرفتن به ندرت استفاده می‌شود. معمولا برای ما نمایان نیست.
141136

142137
کنترل‌کننده‌هایی که با استفاده از خاصیت `on<event>` یا صفت‌های HTML یا با متد با دو ورودی `addEventListener(event, handler)` اضافه می‌شوند، چیزی درباره گرفتن نمی‌دانند. فقط در فازهای دوم و سوم اجرا می‌شوند.
143-
=======
144-
Until now, we only talked about bubbling, because the capturing phase is rarely used.
145-
146-
In fact, the capturing phase was invisible for us, because handlers added using `on<event>`-property or using HTML attributes or using two-argument `addEventListener(event, handler)` don't know anything about capturing, they only run on the 2nd and 3rd phases.
147-
>>>>>>> 1edb0a38330b54d2e1916f5193fc043e6fbbea78
148138

149139
برای گرفتن یک رویداد در فاز گرفتن، باید که ورودی سوم `addEventListener` را `true` قرار دهیم.
150140

151-
<<<<<<< HEAD
152-
برای آخرین ورودی که اختیاری دو مقدار می‌تواند وجود داشته باشد:
153-
=======
154141
```js
155142
elem.addEventListener(..., {capture: true})
156143

157144
// or, just "true" is an alias to {capture: true}
158145
elem.addEventListener(..., true)
159146
```
160147

161-
There are two possible values of the `capture` option:
162-
>>>>>>> 1edb0a38330b54d2e1916f5193fc043e6fbbea78
148+
برای آخرین ورودی که اختیاری دو مقدار می‌تواند وجود داشته باشد:
163149

164150
- اگر `false` باشد (پیش‌فرض)، کنترل‌کننده در فاز بالارفتن مشخص می‌شود.
165151
- اگر `true` باشد، کنترل‌کننده در فاز گرفتن مشخص می‌شود.
@@ -196,29 +182,12 @@ There are two possible values of the `capture` option:
196182

197183
اگر روی `<p>` کلیک کنیم، بعد ترتیب به این صورت است:
198184

199-
<<<<<<< HEAD
200-
1. `HTML` -> `BODY` -> `FORM` -> `DIV` (فاز گرفتن, اولین شنونده):
201-
2. `P` (فاز هدف, دوباره فراخوانی می‌شود, به این دلیل که ما دو شنونده روی آن تنظیم کردیم: گرفتن و بالارفتن)
202-
3. `DIV` -> `FORM` -> `BODY` -> `HTML` (فاز بالارفتن, شنونده دوم).
203-
=======
204-
1. `HTML` -> `BODY` -> `FORM` -> `DIV -> P` (capturing phase, the first listener):
205-
2. `P` -> `DIV` -> `FORM` -> `BODY` -> `HTML` (bubbling phase, the second listener).
206-
207-
Please note, the `P` shows up twice, because we've set two listeners: capturing and bubbling. The target triggers at the end of the first and at the beginning of the second phase.
208-
>>>>>>> 1edb0a38330b54d2e1916f5193fc043e6fbbea78
185+
1. `HTML` -> `BODY` -> `FORM` -> `DIV -> P` (فاز گرفتن, اولین شنونده):
186+
2. `P` -> `DIV` -> `FORM` -> `BODY` -> `HTML` (فاز بالارفتن, شنونده دوم).
209187

210188
توجه کنید که `P` دوبار نمایش داده می‌شود: در پایان گرفتن و در زمان شروع بالارفتن.
211189

212-
<<<<<<< HEAD
213190
خاصیت `event.eventPhase` به ما شماره فازی که در آن رویداد فراخوانی شده را می‌گوید. اما به ندرت استفاده می‌شود چون معمولا در کنترل‌کننده آنرا می‌دانیم.
214-
=======
215-
```smart header="The `event.stopPropagation()` during the capturing also prevents the bubbling"
216-
The `event.stopPropagation()` method and its sibling `event.stopImmediatePropagation()` can also be called on the capturing phase. Then not only the futher capturing is stopped, but the bubbling as well.
217-
218-
In other words, normally the event goes first down ("capturing") and then up ("bubbling"). But if `event.stopPropagation()` is called during the capturing phase, then the event travel stops, no bubbling will occur.
219-
```
220-
221-
>>>>>>> 1edb0a38330b54d2e1916f5193fc043e6fbbea78
222191

223192
## خلاصه
224193

@@ -236,11 +205,8 @@ In other words, normally the event goes first down ("capturing") and then up ("b
236205

237206
هر کنترل‌کننده‌ای می‌تواند رویداد را با `event.stopPropagation()` متوقف کند، اما این روش پیشنهاد نمی‌شود چون که همیشه مطمئن نیستیم که رویداد را در مرحله‌های بالاتر نیاز نخواهیم داشت، شاید برای کارهایی کاملا متفاوت.
238207

239-
<<<<<<< HEAD
240208
فاز گرفتن به ندرت استفاده می‌شود، معمولا رویدادها را در فاز بالارفتن کنترل می‌کنیم. و یک منطق پشت آن است.
241-
=======
242-
The capturing phase is used very rarely, usually we handle events on bubbling. And there's a logical explanation for that.
243-
>>>>>>> 1edb0a38330b54d2e1916f5193fc043e6fbbea78
209+
244210

245211
در دنیای واقعی، زمانی که تصادفی رخ‌ میدهد، مقامات محلی زودتر عکس العمل نشان می‌دهند. آنها بهتر از هر کس دیگری درباره محلی که این حادثه رخ داده اطلاعات دارند. بعد از آنها در صورت نیاز مقامات بالاتر.
246212

0 commit comments

Comments
 (0)