Skip to content

Commit a3541a3

Browse files
Merge pull request vuejs#73 from boussadjra/feat/custom-directives
translate custom directives
2 parents 95332c7 + 52269a9 commit a3541a3

File tree

8 files changed

+224
-224
lines changed

8 files changed

+224
-224
lines changed

glossary.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,3 +72,6 @@
7272
| url | عنوان محدد الموارد |
7373
| mixin | مخلوط |
7474
| renderless | عديمة تصيير |
75+
| argument | وسيط |
76+
| parameter | معامل |
77+
| suspense | تعليق |

src/guide/built-ins/keep-alive-demos/CompA.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ let count = $ref(0)
33
</script>
44

55
<template>
6-
<p>Current component: A</p>
7-
<span style="margin-right: 20px">count: {{ count }}</span>
6+
<p>المكون الحالي: A</p>
7+
<span style="margin-right: 20px">العداد: {{ count }}</span>
88
<button @click="count++">+</button>
99
</template>

src/guide/built-ins/keep-alive-demos/CompB.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ let msg = $ref('')
33
</script>
44

55
<template>
6-
<p>Current component: B</p>
7-
<span style="margin-right: 20px">Message is: {{ msg }}</span>
6+
<p>المكون الحالي: B</p>
7+
<span style="margin-right: 20px">الرسالة: {{ msg }}</span>
88
<input v-model="msg">
99
</template>

src/guide/built-ins/keep-alive.md

Lines changed: 41 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -2,143 +2,143 @@
22
import SwitchComponent from './keep-alive-demos/SwitchComponent.vue'
33
</script>
44

5-
# KeepAlive {#keepalive}
5+
# مكون KeepAlive {#keepalive}
66

7-
`<KeepAlive>` is a built-in component that allows us to conditionally cache component instances when dynamically switching between multiple components.
7+
`<KeepAlive>` هو مكون مدمج يسمح لنا بتخزين مؤقت لنسخ المكونات عند التبديل بين مكونات متعددة بشكل ديناميكي.
88

9-
## Basic Usage {#basic-usage}
9+
## استعمال أساسي {#basic-usage}
1010

11-
In the Component Basics chapter, we introduced the syntax for [Dynamic Components](/guide/essentials/component-basics.html#dynamic-components), using the `<component>` special element:
11+
في فصل أساسيات المكونات ، أدرجنا صيغة [المكونات الديناميكية](/guide/essentials/component-basics.html#dynamic-components) باستخدام عنصر `<component>` الخاص:
1212

1313
```vue-html
1414
<component :is="activeComponent" />
1515
```
1616

17-
By default, an active component instance will be unmounted when switching away from it. This will cause any changed state it holds to be lost. When this component is displayed again, a new instance will be created with only the initial state.
17+
افتراضيا، ستُفصل نسخة المكون النشط عند التبديل عنه. سيؤدي ذلك إلى فقدان أي حالة غُيِّرت عند عرض هذا المكون مرة أخرى، ستنشأ نسخة جديدة من المكون مع حالته الأولية فقط.
1818

19-
In the example below, we have two stateful components - A contains a counter, while B contains a message synced with an input via `v-model`. Try updating the state of one of them, switch away, and then switch back to it:
19+
في المثال أدناه، لدينا مكونين ذوي حالة - يحتوي المكون A على عداد، بينما يحتوي B على رسالة متزامنة مع إدخال عبر `v-model`. حاول تحديث حالة أحدهما، والتبديل عنه، ثم الرجوع مرة أخرى إليه:
2020

2121
<SwitchComponent />
2222

23-
You'll notice that when switched back, the previous changed state would have been reset.
23+
ستلاحظ أنه عند الرجوع إليه، سيُعاد تعيين الحالة السابقة التي غُيِّرت.
2424

25-
Creating fresh component instance on switch is normally useful behavior, but in this case, we'd really like the two component instances to be preserved even when they are inactive. To solve this problem, we can wrap our dynamic component with the `<KeepAlive>` built-in component:
25+
إن إنشاء نسخة جديدة من المكون عند التبديل هو سلوك مفيد عادة، لكن في هذه الحالة، نود حقا أن يحتفظ بنسختين من المكون حتى عندما تكونا غير نشطتين. لحل هذه المشكلة، يمكننا تغليف المكون الديناميكي بمكون `<KeepAlive>` المدمج:
2626

2727
```vue-html
28-
<!-- Inactive components will be cached! -->
28+
<!-- المكونات غير النشطة ستُخزن مؤقتا! -->
2929
<KeepAlive>
3030
<component :is="activeComponent" />
3131
</KeepAlive>
3232
```
3333

34-
Now, the state will be persisted across component switches:
34+
الآن، سيحتفظ بالحالة عبر التبديل بين المكونات:
3535

3636
<SwitchComponent use-KeepAlive />
3737

3838
<div class="composition-api">
3939

40-
[Try it in the Playground](https://sfc.vuejs.org/#eyJBcHAudnVlIjoiPHNjcmlwdCBzZXR1cD5cbmltcG9ydCB7IHNoYWxsb3dSZWYgfSBmcm9tICd2dWUnXG5pbXBvcnQgQ29tcEEgZnJvbSAnLi9Db21wQS52dWUnXG5pbXBvcnQgQ29tcEIgZnJvbSAnLi9Db21wQi52dWUnXG5cbmNvbnN0IGN1cnJlbnQgPSBzaGFsbG93UmVmKENvbXBBKVxuPC9zY3JpcHQ+XG5cbjx0ZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cImRlbW9cIj5cbiAgICA8bGFiZWw+PGlucHV0IHR5cGU9XCJyYWRpb1wiIHYtbW9kZWw9XCJjdXJyZW50XCIgOnZhbHVlPVwiQ29tcEFcIiAvPiBBPC9sYWJlbD5cbiAgICA8bGFiZWw+PGlucHV0IHR5cGU9XCJyYWRpb1wiIHYtbW9kZWw9XCJjdXJyZW50XCIgOnZhbHVlPVwiQ29tcEJcIiAvPiBCPC9sYWJlbD5cbiAgICA8S2VlcEFsaXZlPlxuICAgICAgPGNvbXBvbmVudCA6aXM9XCJjdXJyZW50XCI+PC9jb21wb25lbnQ+XG4gICAgPC9LZWVwQWxpdmU+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cbiIsImltcG9ydC1tYXAuanNvbiI6IntcbiAgXCJpbXBvcnRzXCI6IHtcbiAgICBcInZ1ZVwiOiBcImh0dHBzOi8vc2ZjLnZ1ZWpzLm9yZy92dWUucnVudGltZS5lc20tYnJvd3Nlci5qc1wiXG4gIH1cbn0iLCJDb21wQS52dWUiOiI8c2NyaXB0IHNldHVwPlxuaW1wb3J0IHsgcmVmIH0gZnJvbSAndnVlJ1xuXG5jb25zdCBjb3VudCA9IHJlZigwKVxuPC9zY3JpcHQ+XG5cbjx0ZW1wbGF0ZT5cbiAgPHA+Q3VycmVudCBjb21wb25lbnQ6IEE8L3A+XG4gIDxzcGFuPmNvdW50OiB7eyBjb3VudCB9fTwvc3Bhbj5cbiAgPGJ1dHRvbiBAY2xpY2s9XCJjb3VudCsrXCI+KzwvYnV0dG9uPlxuPC90ZW1wbGF0ZT5cbiIsIkNvbXBCLnZ1ZSI6IjxzY3JpcHQgc2V0dXA+XG5pbXBvcnQgeyByZWYgfSBmcm9tICd2dWUnXG5jb25zdCBtc2cgPSByZWYoJycpXG48L3NjcmlwdD5cblxuPHRlbXBsYXRlPlxuICA8cD5DdXJyZW50IGNvbXBvbmVudDogQjwvcD5cbiAgPHNwYW4+TWVzc2FnZSBpczoge3sgbXNnIH19PC9zcGFuPlxuICA8aW5wdXQgdi1tb2RlbD1cIm1zZ1wiPlxuPC90ZW1wbGF0ZT5cbiJ9)
40+
[اختبرها في حقل التجارب](https://sfc.vuejs.org/#eNqtU81u1DAQfhXLly3ablxxjNKIXY7cOPuSTby7Lv6T7aRUq5z4EeJFKg6oQpx4k+RtGDshbFpUVMEpmZlvvhl/M3PEa2OSpmY4xZkrLTceOeZrk1PFpdHWoyNyh0IIff2a7VCLdlZLtICMxYR4qaVZj4GERCtQzgGbGWAzAqgqtXIelbW1THl0eVLsLDI9oyojQ2fQExieSSMKz8BCKKt4g0pROHdJccWkpjj6ISKKLRN5xpWpPfI3hgHCFhUHCGpWUldMgGcsDL60KUQdQLEsOEiO1hkZaP4H52bg3NzjfMWYWQveDA+KrhLQWgU9Uh4eNhHmGZliv/LJnCAjIAn8ZeREKHyOh1GsZGGSK6cVzPsY4HQMOIpTFD3BB8MJNsUH741LCXG7MkzsyiXa7gn8JbZWnkuWMCdXW6uvHbNATPH5CQcBZ8PsCpqvmGX2Mc570Ae8gbalqoWnTBv22NLaB9s67ZqG1mHTAHF28Zf1Mnl327/vP/Tv+k/9RxSM7mt0fU7DdoSSAHOmUMj5GxFmLQu752pl+f7gU/T8wryFwcXMH91dd9vdgdDHsYu2heqQPNBsa++1Qi9Kwcs3Ye4Bs1xC+jIjQ/APk53u6WlyDGJItx+lWCz+RQvY6qdp8a37Hr9fohqhjbkWw439PipAxNuev779CQyxulo=)
4141

4242
</div>
4343
<div class="options-api">
4444

45-
[Try it in the Playground](https://sfc.vuejs.org/#eyJBcHAudnVlIjoiPHNjcmlwdD5cbmltcG9ydCBDb21wQSBmcm9tICcuL0NvbXBBLnZ1ZSdcbmltcG9ydCBDb21wQiBmcm9tICcuL0NvbXBCLnZ1ZSdcbiAgXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXBvbmVudHM6IHsgQ29tcEEsIENvbXBCIH0sXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGN1cnJlbnQ6ICdDb21wQSdcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuXG48dGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9XCJkZW1vXCI+XG4gICAgPGxhYmVsPjxpbnB1dCB0eXBlPVwicmFkaW9cIiB2LW1vZGVsPVwiY3VycmVudFwiIHZhbHVlPVwiQ29tcEFcIiAvPiBBPC9sYWJlbD5cbiAgICA8bGFiZWw+PGlucHV0IHR5cGU9XCJyYWRpb1wiIHYtbW9kZWw9XCJjdXJyZW50XCIgdmFsdWU9XCJDb21wQlwiIC8+IEI8L2xhYmVsPlxuICAgIDxLZWVwQWxpdmU+XG4gICAgICA8Y29tcG9uZW50IDppcz1cImN1cnJlbnRcIj48L2NvbXBvbmVudD5cbiAgICA8L0tlZXBBbGl2ZT5cbiAgPC9kaXY+XG48L3RlbXBsYXRlPlxuIiwiaW1wb3J0LW1hcC5qc29uIjoie1xuICBcImltcG9ydHNcIjoge1xuICAgIFwidnVlXCI6IFwiaHR0cHM6Ly9zZmMudnVlanMub3JnL3Z1ZS5ydW50aW1lLmVzbS1icm93c2VyLmpzXCJcbiAgfVxufSIsIkNvbXBBLnZ1ZSI6IjxzY3JpcHQ+XG5leHBvcnQgZGVmYXVsdCB7XG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvdW50OiAwXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cblxuPHRlbXBsYXRlPlxuICA8cD5DdXJyZW50IGNvbXBvbmVudDogQTwvcD5cbiAgPHNwYW4+Y291bnQ6IHt7IGNvdW50IH19PC9zcGFuPlxuICA8YnV0dG9uIEBjbGljaz1cImNvdW50KytcIj4rPC9idXR0b24+XG48L3RlbXBsYXRlPlxuIiwiQ29tcEIudnVlIjoiPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbXNnOiAnJ1xuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG5cblxuPHRlbXBsYXRlPlxuICA8cD5DdXJyZW50IGNvbXBvbmVudDogQjwvcD5cbiAgPHNwYW4+TWVzc2FnZSBpczoge3sgbXNnIH19PC9zcGFuPlxuICA8aW5wdXQgdi1tb2RlbD1cIm1zZ1wiPlxuPC90ZW1wbGF0ZT5cbiJ9)
45+
[اختبرها في حقل التجارب](https://sfc.vuejs.org/#eNqtVEtu2zAQvcqAG7ewLQZdCqpRu8teQRtaoh2m4gck5SYwvOoHRS8SdFEERVe9iXybDklbrdwggZEAhqUZvnkk37zRlsyNyTYtJzkpXGWF8bNSCWm09fBWSzOHldUSRhmNUYCOBoDFALA4AABKxa8jqOYr1jYetiFbIUYrrrzLYZs2mBxodpMAqJlnL14mMIDlvrXqGGF5ay0W5zCKpXEjgF144B/+CtpfAgPPpWmY5xgBFLXYQNUw516XpOZSlyTmcaVhS97MCqFM68HfGI4Iy2qBENhMpa55g5nD5iHHmjZg4iEwpjOYFzSxPAPlIlEuTijfcW7mjdik68RULyfkIlyr55sVtF871tMhQUFREHwr6D8ykQlJvZ1KZrIrpxUaI8pfHhZcSbB1ibIk2O0Ql+TSe+NySt2qCha4cpm2a4pvmW2VF5Jn3Mnp0uoPjlskLkls94GDYnLD7RQPX3PL7UOcJ9D/eI9mwKv0lh24+z5fPmI7jXfI4eIsu5lZd7v/tP+8/7j/uv8CIeh+xNS3PNjFJJgzTIHzN03ovmR2LdTUivUl7vfqwlxjK2Pl7+6uu+3uUPptOg7sdrg7FieaZeu9VvCmakT1PjghYMZjLB8XNC3e0+t+ZJ8okHRrnMlHxvE8hdD95yn0s/sVn9+jRniiE4XSKP6dPUTEL8BQk90fzkvNng==)
4646

4747
</div>
4848

49-
:::tip
50-
When used in [DOM templates](/guide/essentials/component-basics.html#dom-template-parsing-caveats), it should be referenced as `<keep-alive>`.
49+
:::tip ملاحظة
50+
عند استخدامها في [قوالب الـDOM](/guide/essentials/component-basics.html#dom-template-parsing-caveats)، يجب إشارة إليها باستخدام `<keep-alive>`.
5151
:::
5252

53-
## Include / Exclude {#include-exclude}
53+
## التضمين / استبعاد {#include-exclude}
5454

55-
By default, `<KeepAlive>` will cache any component instance inside. We can customize this behavior via the `include` and `exclude` props. Both props can be a comma-delimited string, a `RegExp`, or an array containing either types:
55+
افتراضيا، ستخزن أي نسخة للمكون داخل `<KeepAlive>`، ويمكننا تخصيص هذا السلوك عبر التوابع `include` و `exclude`. يمكن أن تكون كلتا الخاصيتين عبارة عن سلسلة نصية مفصولة بفواصل، تعبير نمطي `RegExp`، أو مصفوفة تحتوي كلا النوعين:
5656

5757
```vue-html
58-
<!-- comma-delimited string -->
58+
<!-- سلسلة نصية مفصولة بفواصل -->
5959
<KeepAlive include="a,b">
6060
<component :is="view" />
6161
</KeepAlive>
6262
63-
<!-- regex (use `v-bind`) -->
63+
<!-- تعبير نمطي (استخدم `v-bind`) -->
6464
<KeepAlive :include="/a|b/">
6565
<component :is="view" />
6666
</KeepAlive>
6767
68-
<!-- Array (use `v-bind`) -->
68+
<!-- مصفوفة (استخدم `v-bind`) -->
6969
<KeepAlive :include="['a', 'b']">
7070
<component :is="view" />
7171
</KeepAlive>
7272
```
7373

74-
The match is checked against the component's [`name`](/api/options-misc.html#name) option, so components that need to be conditionally cached by `KeepAlive` must explicitly declare a `name` option.
74+
يُتحقق من التطابق عبر خيار [`name`](/api/options-misc.html#name) للمكون، لذا يجب على المكونات التي تحتاج إلى التخزين الشرطي عبر `KeepAlive` التعريف بخيار `name` بشكل صريح.
7575

76-
:::tip
77-
Since version 3.2.34, a single-file component using `<script setup>` will automatically infer its `name` option based on the filename, removing the need to manually declare the name.
76+
:::tip ملاحظة
77+
من الإصدار 3.2.34، سيتم تلقائيا تحديد خيار `name` للمكون المستخدم في `<script setup>` بناءً على اسم الملف، مما يزيل الحاجة إلى تعريف الاسم يدويا.
7878
:::
7979

80-
## Max Cached Instances {#max-cached-instances}
80+
## الحد الأقصى للنسخ المخزنة {#max-cached-instances}
8181

82-
We can limit the maximum number of component instances that can be cached via the `max` prop. When `max` is specified, `<KeepAlive>` behaves like an [LRU cache](<https://en.wikipedia.org/wiki/Cache_replacement_policies#Least_recently_used_(LRU)>): if the number of cached instances is about to exceed the specified max count, the least recently accessed cached instance will be destroyed to make room for the new one.
82+
يمكننا تحديد الحد الأقصى لعدد النسخ المخزنة عبر خاصية `max`. عند تحديد `max`، ستتصرف `<KeepAlive>` كـ[ذاكرة تخزين مؤقت](<https://en.wikipedia.org/wiki/Cache_replacement_policies#Least_recently_used_(LRU)>): إذا كان عدد النسخ المخزنة قريبًا من الوصول إلى الحد الأقصى المحدد، ستُفصل النسخة الأقدم المخزنة لإنشاء مساحة للنسخة الجديدة.
8383

8484
```vue-html
8585
<KeepAlive :max="10">
8686
<component :is="activeComponent" />
8787
</KeepAlive>
8888
```
8989

90-
## Lifecycle of Cached Instance {#lifecycle-of-cached-instance}
90+
## دورة حياة النسخة المخزنة {#lifecycle-of-cached-instance}
9191

92-
When a component instance is removed from the DOM but is part of a component tree cached by `<KeepAlive>`, it goes into a **deactivated** state instead of being unmounted. When a component instance is inserted into the DOM as part of a cached tree, it is **activated**.
92+
عندما  تُزال نسخة للمكون من الـDOM ولكنها عبارة عن جزء من شجرة مكونات مخزنة بواسطة `<KeepAlive>`، ستتحول إلى حالة **خاملة** بدلاً من إزالتها من الـDOM. عندما تُضاف نسخة للمكون إلى الـDOM كجزء من شجرة مكونات مخزنة، ستتحول إلى حالة **مفعلة**.
9393

9494
<div class="composition-api">
9595

96-
A kept-alive component can register lifecycle hooks for these two states using [`onActivated()`](/api/composition-api-lifecycle.html#onactivated) and [`onDeactivated()`](/api/composition-api-lifecycle.html#ondeactivated):
96+
مكون مخزن يمكنه تسجيل دوال دورة حياة لهذين الحالتين باستخدام [`()onActivated`](/api/composition-api-lifecycle.html#onactivated) و[`()onDeactivated`](/api/composition-api-lifecycle.html#ondeactivated):
9797

9898
```vue
9999
<script setup>
100100
import { onActivated, onDeactivated } from 'vue'
101101
102102
onActivated(() => {
103-
// called on initial mount
104-
// and every time it is re-inserted from the cache
103+
// يستدعى عند الوصل
104+
// وكل مرة يتم إدراجه من الذاكرة المؤقتة
105105
})
106106
107107
onDeactivated(() => {
108-
// called when removed from the DOM into the cache
109-
// and also when unmounted
108+
// يستدعى عند إزالته من الـDOM إلى الذاكرة المؤقتة
109+
// وكذلك عند إزالته
110110
})
111111
</script>
112112
```
113113

114114
</div>
115115
<div class="options-api">
116116

117-
A kept-alive component can register lifecycle hooks for these two states using [`activated`](/api/options-lifecycle.html#activated) and [`deactivated`](/api/options-lifecycle.html#deactivated) hooks:
117+
مكون مخزن يمكنه تسجيل دوال دورة حياة لهذين الحالتين باستخدام دوال [`activated`](/api/options-lifecycle.html#activated) و[`deactivated`](/api/options-lifecycle.html#deactivated):
118118

119119
```js
120120
export default {
121121
activated() {
122-
// called on initial mount
123-
// and every time it is re-inserted from the cache
122+
// يستدعى عند الوصل
123+
// وكل مرة يتم إدراجه من الذاكرة المؤقتة
124124
},
125125
deactivated() {
126-
// called when removed from the DOM into the cache
127-
// and also when unmounted
126+
// يستدعى عند إزالته من الـDOM إلى الذاكرة المؤقتة
127+
// وكذلك عند إزالته
128128
}
129129
}
130130
```
131131

132132
</div>
133133

134-
Note that:
134+
تجدر الإشارة إلى:
135135

136-
- <span class="composition-api">`onActivated`</span><span class="options-api">`activated`</span> is also called on mount, and <span class="composition-api">`onDeactivated`</span><span class="options-api">`deactivated`</span> on unmount.
136+
- <span class="composition-api">`onActivated`</span><span class="options-api">`activated`</span> يستدعى أيضًا عند الوصل، و<span class="composition-api">`onDeactivated`</span><span class="options-api">`deactivated`</span> عند الفصل.
137137

138-
- Both hooks work for not only the root component cached by `<KeepAlive>`, but also descendant components in the cached tree.
138+
- تعمل كل من الدوال على جذر المكون المخزن بواسطة `<KeepAlive>`، ولكنها تعمل أيضًا على المكونات الفرعية في شجرة المكونات المخزنة.
139139

140140
---
141141

142-
**Related**
142+
**ذات علاقة**
143143

144-
- [`<KeepAlive>` API reference](/api/built-in-components.html#keepalive)
144+
- [ مرجع الواجهة البرمجية لـ`<KeepAlive>`](/api/built-in-components.html#keepalive)

0 commit comments

Comments
 (0)