From 5337fa774af865e0ba18c6294f60e1d652d51619 Mon Sep 17 00:00:00 2001 From: boussadjra Date: Fri, 27 Jan 2023 23:36:03 +0100 Subject: [PATCH 1/7] translate template syntax --- glossary.md | 1 + src/guide/essentials/application.md | 2 +- src/guide/essentials/images/directive.png | Bin 45620 -> 41805 bytes src/guide/essentials/template-syntax.md | 191 +++++++++++----------- 4 files changed, 102 insertions(+), 92 deletions(-) diff --git a/glossary.md b/glossary.md index 960ced37..8bb88b6f 100644 --- a/glossary.md +++ b/glossary.md @@ -57,3 +57,4 @@ | container | مُستوعِب | | CSS selector | مُحدِّد CSS | | assets | ملحقات | +| modifier | مُعدِّل | diff --git a/src/guide/essentials/application.md b/src/guide/essentials/application.md index f8de9673..5b09b0fa 100644 --- a/src/guide/essentials/application.md +++ b/src/guide/essentials/application.md @@ -12,7 +12,7 @@ const app = createApp({ }) ``` -## The Root Component {#the-root-component} +## المكون الجذر {#the-root-component} الكائن الذي نمرره إلى دالة `createApp` هو في الأصل مكون. يتطلب كل تطبيق "مكوِّنًا جذريًا" الذي بدوره يمكن أن يحتوي على مكونات أخرى مثل مكوناته الفرعية. diff --git a/src/guide/essentials/images/directive.png b/src/guide/essentials/images/directive.png index 6dea67f7596278f690c2b9f8bdcbfb61e336e978..509ee2b74c000d37f48b7d82a2f730e5b01bdd41 100644 GIT binary patch literal 41805 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 z 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%0DAsx#9*;+L|&UMmjbGGVy%s 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 J=A}*4{{WBKayI|~ diff --git a/src/guide/essentials/template-syntax.md b/src/guide/essentials/template-syntax.md index 250e4e65..92dda25b 100644 --- a/src/guide/essentials/template-syntax.md +++ b/src/guide/essentials/template-syntax.md @@ -1,84 +1,92 @@ -# Template Syntax {#template-syntax} +# صيغة القالب {#template-syntax} -Vue uses an HTML-based template syntax that allows you to declaratively bind the rendered DOM to the underlying component instance's data. All Vue templates are syntactically valid HTML that can be parsed by spec-compliant browsers and HTML parsers. +Vue تستخدم صيغة القالب المستند على الـHTML التي تسمح لك بربط شجرة الـDOM المصيّرة بشكل تصريحي مع بيانات و دوال شيفرة المكوّن. كل قوالب Vue هي عبارة عن عناصر HTML صحيحة يمكن تحليلها بواسطة المتصفّحات و مصرفي الـHTML الخاضعة للمواصفات. -Under the hood, Vue compiles the templates into highly-optimized JavaScript code. Combined with the reactivity system, Vue can intelligently figure out the minimal number of components to re-render and apply the minimal amount of DOM manipulations when the app state changes. -If you are familiar with Virtual DOM concepts and prefer the raw power of JavaScript, you can also [directly write render functions](/guide/extras/render-function.html) instead of templates, with optional JSX support. However, do note that they do not enjoy the same level of compile-time optimizations as templates. +خلف الستار، يقوم Vue بتحويل القوالب إلى شيفرة JavaScript محسّنة بشكل كبير مقترنة مع المنظومة التفاعلية، يمكن لـVue تحديد عدد أدنى من المكوّنات من أجل إعادة التصيير و تطبيق حد أدنى من التعديلات على شجرة الـDOM عند تغيير حالة التطبيق. -## Text Interpolation {#text-interpolation} -The most basic form of data binding is text interpolation using the "Mustache" syntax (double curly braces): + +إذا كنت معتادًا على مفاهيم الـDOM الافتراضي و تفضّل القوة الخام لـJavaScript، يمكنك أيضًا [كتابة دوال التصيير ](/guide/extras/render-function.html) مباشرة بدلاً من القوالب، مع دعم اختياري للـJSX . ومع ذلك، يرجى ملاحظة أنها لا تتمتع بنفس مستوى التحسينات في وقت التصيير مثل القوالب. + +## الاقحام النصي {#text-interpolation} + +أسهل شكل لربط البيانات هو الاقحام النصي باستخدام صيغة "الشارب" (الأقواس المعقوفة): ```vue-html -Message: {{ msg }} +رسالة : {{ msg }} ``` -The mustache tag will be replaced with the value of the `msg` property from the corresponding component instance. It will also be updated whenever the `msg` property changes. +سيتم استبدال وسم الأقواس بقيمة الخاصية `msg` من شيفرة المكوّن الموافق. و سيتم تحديثها كلما تغيرت قيمة `msg`. + +## الـHTML الخام {#raw-html} + +تقوم الأقواس المعقوفة بترجمة البيانات كنصّ بدون تصييرها كـHTML. لتصيير HTML حقيقي، ستحتاج إلى استخدام [السمة الموجهة `v-html`](/api/built-in-directives.html#v-html): + -## Raw HTML {#raw-html} -The double mustaches interpret the data as plain text, not HTML. In order to output real HTML, you will need to use the [`v-html` directive](/api/built-in-directives.html#v-html): ```vue-html -

Using text interpolation: {{ rawHtml }}

-

Using v-html directive:

+

باستخدام الاقحام النصي: {{ rawHtml }}

+

باستخدام الموجهة v-html :

```
-

Using text interpolation: {{ rawHtml }}

-

Using v-html directive:

+

باستخدام الاقحام النصي : {{ rawHtml }}

+

باستخدام الموجهة v-html :

-Here we're encountering something new. The `v-html` attribute you're seeing is called a **directive**. Directives are prefixed with `v-` to indicate that they are special attributes provided by Vue, and as you may have guessed, they apply special reactive behavior to the rendered DOM. Here, we're basically saying "keep this element's inner HTML up-to-date with the `rawHtml` property on the current active instance." -The contents of the `span` will be replaced with the value of the `rawHtml` property, interpreted as plain HTML - data bindings are ignored. Note that you cannot use `v-html` to compose template partials, because Vue is not a string-based templating engine. Instead, components are preferred as the fundamental unit for UI reuse and composition. +هنا قابلنا شيئًا جديدًا و هو السمة `v-html` أو ما يسمى بـ **المُوجِّهة**. تبدأ تسمية الموجهات بـ `v-` لتشير إلى أنها سمات خاصة مقدمة من Vue، و كما هو متوقع، فإنها تطبق سلوكًا تفاعليًا خاصًا على شجرة الـDOM المصيّرة. هنا، نقول لل "أبقِ هذا العنصر HTML الداخلي محدّثًا مع قيمة الخاصية `rawHtml` من شيفرة المكوّن النشط الحالي". + + +محتوى العنصر `span` سيتم استبداله بقيمة الخاصية `rawHtml`، و تم ترجمتها كـHTML خام - و يُهمل الربط مع البيانات. يرجى ملاحظة أنه لا يمكنك استخدام `v-html` لتركيب جزء من قالب مع ربط البيانات و معالجة الأحدات، لأن Vue ليست محرك مبني على قوالب السلاسل النصية. بدلاً من ذلك، يفضل استخدام المكوّنات كوحدة أساسية لإعادة استخدام و تركيب واجهة المستخدم. -:::warning Security Warning -Dynamically rendering arbitrary HTML on your website can be very dangerous because it can easily lead to [XSS vulnerabilities](https://en.wikipedia.org/wiki/Cross-site_scripting). Only use `v-html` on trusted content and **never** on user-provided content. + +:::warning تحذير أمني +تصيير HTML عشوائي بشكل ديناميكي على موقعك على الويب قد يكون له خطرًا كبيرًا لأنه يمكن أن يؤدي بسهولة إلى [ثغرات XSS](https://en.wikipedia.org/wiki/Cross-site_scripting). استخدم `v-html` فقط على المحتوى الموثوق به و لا تستخدمه **أبدًا** على المحتوى المدخل من قبل المستخدم. ::: +## ربط السمات {#attribute-bindings} -## Attribute Bindings {#attribute-bindings} +لا يمكن استخدام الأقواس المعقوفة داخل سمات الـHTML لربطها بالبيانات. بدلاً من ذلك، استخدم [الموجهة `v-bind`](/api/built-in-directives.html#v-bind): -Mustaches cannot be used inside HTML attributes. Instead, use a [`v-bind` directive](/api/built-in-directives.html#v-bind): ```vue-html
``` -The `v-bind` directive instructs Vue to keep the element's `id` attribute in sync with the component's `dynamicId` property. If the bound value is `null` or `undefined`, then the attribute will be removed from the rendered element. - -### Shorthand {#shorthand} +السمة المُوجِّهة `v-bind` تُعلم Vue بأنه يجب أن تبقى السمة `id` متزامنة مع المتغير `dynamicId` للمكوّن النشط. إذا كانت قيمة المتغير المربوط `null` أو `undefined`، فسيتم إزالة السمة من العنصر المُصيّر. +### الإختصار {#shorthand} -Because `v-bind` is so commonly used, it has a dedicated shorthand syntax: +بما أن `v-bind` مستخدمة بشكل متكرر، فاختصرت بـ `:` : ```vue-html
``` -Attributes that start with `:` may look a bit different from normal HTML, but it is in fact a valid character for attribute names and all Vue-supported browsers can parse it correctly. In addition, they do not appear in the final rendered markup. The shorthand syntax is optional, but you will likely appreciate it when you learn more about its usage later. +السمات التي تبدأ بـ `:` قد تبدو مختلفة عن الـHTML العادي، لكنها في الحقيقة رمز صالح لتسمية السمات و يمكن لجميع المتصفحات المدعومة من Vue تحليلها بشكل صحيح. بالإضافة إلى ذلك، فإنها لا تظهر في العناصر النهائية المصيّرة. هذه الصيغة تبقى اختيارية، لكنك ستقدر قيمتها عندما تتعلم المزيد عن استخدامها في وقت لاحق. -> For the rest of the guide, we will be using the shorthand syntax in code examples, as that's the most common usage for Vue developers. +> فيما يلي من الدليل، سنستخدم الصيغة المختصرة في أمثلة الشيفرة، لأنها هي الأكثر استخدامًا من طرف مطوري Vue. -### Boolean Attributes {#boolean-attributes} +### السمات المنطقية {#boolean-attributes} -[Boolean attributes](https://html.spec.whatwg.org/multipage/common-microsyntaxes.html#boolean-attributes) are attributes that can indicate true / false values by their presence on an element. For example, [`disabled`](https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/disabled) is one of the most commonly used boolean attributes. +[السمات المنطقية](https://html.spec.whatwg.org/multipage/common-microsyntaxes.html#boolean-attributes) هي السمات التي يمكن أن تشير إلى قيم صحيحة/خاطئة من خلال وجودها على عنصر. على سبيل المثال، [`disabled`](https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/disabled) هي أحد أكثر السمات المنطقية استخدامًا. -`v-bind` works a bit differently in this case: +في هذه الحالة، تعمل المُوجِّهة `v-bind` بشكل مختلف: ```vue-html - + ``` -The `disabled` attribute will be included if `isButtonDisabled` has a [truthy value](https://developer.mozilla.org/en-US/docs/Glossary/Truthy). It will also be included if the value is an empty string, maintaining consistency with ``. للقيم [الخاطئة](https://developer.mozilla.org/en-US/docs/Glossary/Falsy) الأخرى، تُحذف السمة. -### Dynamically Binding Multiple Attributes {#dynamically-binding-multiple-attributes} +### ربط سمات متعددة بشكل ديناميكي {#dynamically-binding-multiple-attributes} -If you have a JavaScript object representing multiple attributes that looks like this: +إذا كان لديك كائن JavaScript و خاصياته تمثل سمات متعددة مثل المثال الموالي:
@@ -105,50 +113,52 @@ data() {
-You can bind them to a single element by using `v-bind` without an argument: +يمكنك ربطها بعنصر واحد باستخدام `v-bind` بدون تمرير وسيط: ```vue-html
``` +## استخدام تعبيرات الـJavascript {#using-javascript-expressions} -## Using JavaScript Expressions {#using-javascript-expressions} -So far we've only been binding to simple property keys in our templates. But Vue actually supports the full power of JavaScript expressions inside all data bindings: +حتى الآن، لم نربط سوى الخاصيات البسيطة في قوالبنا. لكن Vue في الواقع يدعم قوة تعبيرات الـJavaScript كاملة داخل جميع حالات ربط البيانات: + ```vue-html {{ number + 1 }} -{{ ok ? 'YES' : 'NO' }} +{{ ok ? 'لا' : 'نعم' }} {{ message.split('').reverse().join('') }}
``` -These expressions will be evaluated as JavaScript in the data scope of the current component instance. +هذه التعبيرات ستُقيَّم كـشيفرة JavaScript في نطاق البيانات في نسخة العنصر الحالي. + +في قوالب Vue، يمكن استخدام تعبيرات JavaScript في الأماكن التالية: -In Vue templates, JavaScript expressions can be used in the following positions: -- Inside text interpolations (mustaches) -- In the attribute value of any Vue directives (special attributes that start with `v-`) +- كنص مقحم داخل الأقواس المزدوجة +- كقيمة لأي سمة مُوجهة مربوطة (السمات الخاصة التي تبدأ بـ`-v`) -### Expressions Only {#expressions-only} +### التعبيرات فقط {#expressions-only} -Each binding can only contain **one single expression**. An expression is a piece of code that can be evaluated to a value. A simple check is whether it can be used after `return`. +كل ربط يمكنه أن يحتوي على **تعبير واحد فقط**. بحيث يمكن تحويله إلى قيمة. يمكن استخدام التعبيرات بعد `return` للتحقق من صحتها. -Therefore, the following will **NOT** work: +و بالتالي الشيفرة الموالية **لن** تشتغل: ```vue-html - + {{ var a = 1 }} - + {{ if (ok) { return message } }} ``` -### Calling Functions {#calling-functions} +### استدعاء الدوال {#calling-functions} -It is possible to call a component-exposed method inside a binding expression: + من الممكن استدعاء دالة مُعرَّفة في الشيفرة الخاصة بالمكون داخل تعبير ربط : ```vue-html @@ -157,113 +167,112 @@ It is possible to call a component-exposed method inside a binding expression: ``` :::tip -Functions called inside binding expressions will be called every time the component updates, so they should **not** have any side effects, such as changing data or triggering asynchronous operations. + تستدعى الدوال داخل تعبيرات الربط كل مرة يُحدَّثُ فيها المكون، لذا يجب أن **لا تكون** لها أي تأثيرات جانبية مثل تغيير البيانات أو تشغيل عمليات غير متزامنة. ::: -### Restricted Globals Access {#restricted-globals-access} +### الوصول المحدود للعوامل العامة {#restricted-globals-access} + +التعبيرات في القوالب متاحة بشكل مُحدَّد و لها إمكانية الوصول فقط إلى [قائمة محدودة من العوامل العامة](https://github.com/vuejs/core/blob/main/packages/shared/src/globalsWhitelist.ts#L3). تعرض القائمة العوامل الأساسية العامة المستخدمة بشكل شائع مثل `Math` و `Date`. -Template expressions are sandboxed and only have access to a [restricted list of globals](https://github.com/vuejs/core/blob/main/packages/shared/src/globalsWhitelist.ts#L3). The list exposes commonly used built-in globals such as `Math` and `Date`. -Globals not explicitly included in the list, for example user-attached properties on `window`, will not be accessible in template expressions. You can, however, explicitly define additional globals for all Vue expressions by adding them to [`app.config.globalProperties`](/api/application.html#app-config-globalproperties). -## Directives {#directives} +العوامل العامة ليست مضمنة بشكل صريح في القائمة، مثل الخاصيات المرفقة من قبل المستخدم على `window`، لن تكون متاحة في تعبيرات القالب. ومع ذلك، يمكنك تعريف العوامل العامة بشكل صريح لجميع تعبيرات Vue عن طريق إضافتها إلى [`app.config.globalProperties`](/api/application.html#app-config-globalproperties). -Directives are special attributes with the `v-` prefix. Vue provides a number of [built-in directives](/api/built-in-directives.html), including `v-html` and `v-bind` which we have introduced above. +## السمات المُوجِّهة {#directives} -Directive attribute values are expected to be single JavaScript expressions (with the exception of `v-for`, `v-on` and `v-slot`, which will be discussed in their respective sections later). A directive's job is to reactively apply updates to the DOM when the value of its expression changes. Take [`v-if`](/api/built-in-directives.html#v-if) as an example: +السمات الموجهة هي سمات خاصة تبدأ بـ`v-`، تقدم Vue مجموعة من [السمات الأساسية](/api/built-in-directives.html) بما في ذلك `v-html` و `v-bind` التي سردناهما سابقا. + + الموجهات تكون قِيَّمُها عبارة عن تعبيرات JavaScript واحدة (باستثناء `v-for` و `v-on` و `v-slot`، والتي سنتحدث عنها في الأقسام المخصصة لها في وقت لاحق). وظيفة الموجهة هي تطبيق التحديثات الديناميكية على شجرة الـDOM عندما تتغير قيمة التعبير الخاص بها. اختر [`v-if`](/api/built-in-directives.html#v-if) كمثال: ```vue-html -

Now you see me

+

الآن يمكنك رؤيتي

``` -Here, the `v-if` directive would remove / insert the `

` element based on the truthiness of the value of the expression `seen`. - -### Arguments {#arguments} +هنا، سيقوم الموجه `v-if` بإزالة / إدراج عنصر `

...
``` -You'll see other examples of modifiers later, [for `v-on`](./event-handling.html#event-modifiers) and [for `v-model`](./forms.html#modifiers), when we explore those features. +سنرى أمثلة أخرى للمُعدِّلات في وقت لاحق، عندما نتطرق إلى هذه الميزات، على سبيل المثال [`v-on`](./event-handling.html#event-modifiers) و [`v-model`](./forms.html#modifiers). -And finally, here's the full directive syntax visualized: +و أخيرا، هاته هي صيغة المُعدِّل موضحة بالكامل: ![directive syntax graph](./images/directive.png) From 13daba6f9bb97fdee038c76c1a6fa685cd454f24 Mon Sep 17 00:00:00 2001 From: boussadjra Date: Tue, 31 Jan 2023 16:27:26 +0100 Subject: [PATCH 2/7] translate reactivity fundamentals --- .../theme/components/PreferenceSwitch.vue | 15 +- .vitepress/theme/styles/overrides.css | 13 + glossary.md | 2 + .../essentials/reactivity-fundamentals.md | 262 ++++++++++-------- 4 files changed, 163 insertions(+), 129 deletions(-) diff --git a/.vitepress/theme/components/PreferenceSwitch.vue b/.vitepress/theme/components/PreferenceSwitch.vue index 088d8bfd..926e746f 100644 --- a/.vitepress/theme/components/PreferenceSwitch.vue +++ b/.vitepress/theme/components/PreferenceSwitch.vue @@ -61,38 +61,38 @@ function useToggleFn(
الخيارات التركيبية ?؟
@@ -169,6 +169,7 @@ function useToggleFn( .switch-container { display: flex; align-items: center; + direction: ltr ; } .switch-container:nth-child(2) { diff --git a/.vitepress/theme/styles/overrides.css b/.vitepress/theme/styles/overrides.css index d531b8e5..063c1def 100644 --- a/.vitepress/theme/styles/overrides.css +++ b/.vitepress/theme/styles/overrides.css @@ -47,3 +47,16 @@ pre { position: absolute; right: -24px; } + +.vt-doc ol > li:before { + left: auto; + right: 2px; +} + +.vt-doc ol > li p { + padding-right: 1.25rem; +} + +.vt-badge.experimental:before { + content: 'تجريبي'; +} diff --git a/glossary.md b/glossary.md index 8bb88b6f..39c1729d 100644 --- a/glossary.md +++ b/glossary.md @@ -58,3 +58,5 @@ | CSS selector | مُحدِّد CSS | | assets | ملحقات | | modifier | مُعدِّل | +| tick | نبضة | +| unwrap | / فك | diff --git a/src/guide/essentials/reactivity-fundamentals.md b/src/guide/essentials/reactivity-fundamentals.md index 5b6f2434..5b526042 100644 --- a/src/guide/essentials/reactivity-fundamentals.md +++ b/src/guide/essentials/reactivity-fundamentals.md @@ -2,17 +2,19 @@ outline: deep --- -# Reactivity Fundamentals {#reactivity-fundamentals} +# أساسيات التفاعلية {#reactivity-fundamentals} -:::tip API Preference -This page and many other chapters later in the guide contain different content for Options API and Composition API. Your current preference is Options APIComposition API. You can toggle between the API styles using the "API Preference" switches at the top of the left sidebar. +:::tip تفضيلات واجهة البرمجة +هاته الصفحة والعديد من المحاور الأخرى في المرجع تحتوي على محتوى مختلف بواجهة الخيارات و الواجهة التركيبية. تفضيلك الحاليل هو واجهة الخياراتالواجهة التركيبية. يمكنك التبديل بين نمطي الواجهتين باستخدام مفاتيح التبديل "تفضيلات واجهة البرمجة" في أعلى جانب الشريط الجانبي الأيسر. ::: -## Declaring Reactive State {#declaring-reactive-state} +## التصريح بحالة تفاعلية {#declaring-reactive-state}
-With Options API, we use the `data` option to declare reactive state of a component. The option value should be a function that returns an object. Vue will call the function when creating a new component instance, and wrap the returned object in its reactivity system. Any top-level properties of this object are proxied on the component instance (`this` in methods and lifecycle hooks): +مع واجهة الخيارات، نستخدم خيار `data` للتصريح بحالة تفاعلية داخل المكون. قيمة الخيار يجب أن تكون دالة تعيد كائن `{}`. ستقوم Vue باستدعاء الدالة عند إنشاء نسخة جديدة من المكون، وتغليف الكائن المعاد في نظام تفاعليته. أي خاصيات من المستوى الأعلى من المكونات الأم أو من جذر التطبيق لهذا الكائن متاحة على مستوى نسخة المكون (this في التوابع وخطافات دورة الحياة) : + + ```js{2-6} export default { @@ -22,28 +24,28 @@ export default { } }, - // `mounted` is a lifecycle hook which we will explain later + // `mounted` هي خطاف دورة حياة سنشرحها لاحقا mounted() { - // `this` refers to the component instance. + // `this` يشير إلى نسخة المكون console.log(this.count) // => 1 - // data can be mutated as well + // الخاصيات من الكائن المعاد يمكن تغييرها this.count = 2 } } ``` -[Try it in the Playground](https://sfc.vuejs.org/#eyJBcHAudnVlIjoiPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY291bnQ6IDFcbiAgICB9XG4gIH0sXG5cbiAgLy8gYG1vdW50ZWRgIGlzIGEgbGlmZWN5Y2xlIGhvb2sgd2hpY2ggd2Ugd2lsbCBleHBsYWluIGxhdGVyXG4gIG1vdW50ZWQoKSB7XG4gICAgLy8gYHRoaXNgIHJlZmVycyB0byB0aGUgY29tcG9uZW50IGluc3RhbmNlLlxuICAgIGNvbnNvbGUubG9nKHRoaXMuY291bnQpIC8vID0+IDFcblxuICAgIC8vIGRhdGEgY2FuIGJlIG11dGF0ZWQgYXMgd2VsbFxuICAgIHRoaXMuY291bnQgPSAyXG4gIH1cbn1cbjwvc2NyaXB0PlxuXG48dGVtcGxhdGU+XG4gIENvdW50IGlzOiB7eyBjb3VudCB9fVxuPC90ZW1wbGF0ZT4iLCJpbXBvcnQtbWFwLmpzb24iOiJ7XG4gIFwiaW1wb3J0c1wiOiB7XG4gICAgXCJ2dWVcIjogXCJodHRwczovL3NmYy52dWVqcy5vcmcvdnVlLnJ1bnRpbWUuZXNtLWJyb3dzZXIuanNcIlxuICB9XG59In0=) +[اختبره في حقل التجارب](https://sfc.vuejs.org/#eNp9kl1qAjEQx68y5ElBd2kfRYXeIw9uNX7hZpck2oL40PpZ79EuFayIlmJPMrlNJ7u6QguFXTL/SeY3k5mM2V0ce6OhYBVW1U3Vi02dS/EYR8pAS7SD4cDAmEuAVmCCQjGzAZQwQyUvCqAZDaWpwE2mJ26ZlLh0q+9DI3TbotUAu7RrwA/8wsQ+Ae7sCvf4Dri1a0yccbALPJJva5eYgJ2Rd2ufMXGkM+VahUObbk8Td41H+veAr3ZmX4AoB0pDwIT03E7tyi6yoGYkdTQQ3iDqFFywl9ZedLBa3d0gZ7tYgiT4mVa3AQItMuKU9NtFzPFEckdFpJnIu8FvElSPu0XGu6aCGtymDeKSvqqft52EEWE8CIwglaU/4c6xKzAeZ02GSRqUH2Ql1gvduMphEHt9HUkaZdofft7QnFF4VgVnNGunOesaE+uK7+t20z2AvvYi1fHJ8hSl6YXCEzos36voQQtFYM5ooDnDJ+dIqLISsiWUUP8xfx39w700g01+ACxIF8Y=) -These instance properties are only added when the instance is first created, so you need to ensure they are all present in the object returned by the `data` function. Where necessary, use `null`, `undefined` or some other placeholder value for properties where the desired value isn't yet available. +هاته الخاصيات التابعة لنسخة المكون تُضاف فقط عند إنشاء النسخة لأول مرة، لذا يجب التأكد من وجود كلها في الكائن المعاد من الدالة `data`. حين تقتضي الضرورة، استخدم `null`، `undefined` أو بعض القيم المؤقتة للخاصيات التي لا تتوفر قيمها الحقيقية عندئذ. -It is possible to add a new property directly to `this` without including it in `data`. However, properties added this way will not be able to trigger reactive updates. +من الممكن إضافة خاصية جديدة مباشرة إلى `this` دون تضمينها في `data`. لكن لن تتمكن الخصائص المضافة بهذه الطريقة من تشغيل تحديثات تفاعلية. -Vue uses a `$` prefix when exposing its own built-in APIs via the component instance. It also reserves the prefix `_` for internal properties. You should avoid using names for top-level `data` properties that start with either of these characters. +Vue تستخدم البادئة `$` لتوفير واجهات برمجة للخاصيات الجذرية داخل نسخة المكون. كما أنها تحجز البادئة `_` للخاصيات الداخلية. يجب عليك تجنب استخدام أسماء لخاصيات الـ`data` الرئيسية التي تبدأ بأحد هذه الرموز. -### Reactive Proxy vs. Original \* {#reactive-proxy-vs-original} +### الوسيط التفاعلي مقابل الأصلي \* {#reactive-proxy-vs-original} -In Vue 3, data is made reactive by leveraging [JavaScript Proxies](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy). Users coming from Vue 2 should be aware of the following edge case: +في Vue 3، يتم جعل البيانات تفاعلية عن طريق استخدام [JavaScript وسائط](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy). يجب على المستخدمين القادمين من Vue 2 أن يكونوا على علم بالحالة المحددة التالية: ```js export default { @@ -61,13 +63,13 @@ export default { } ``` -When you access `this.someObject` after assigning it, the value is a reactive proxy of the original `newObject`. **Unlike in Vue 2, the original `newObject` is left intact and will not be made reactive: make sure to always access reactive state as a property of `this`.** +عندما تصل إلى `this.someObject` بعد تعيينه، فإن القيمة هي وسيط تفاعلي لـ `newObject` الأصلي. **على عكس Vue 2، فإن `newObject` الأصلي يبقى غير متغير ولن يتم جعله تفاعليًا: تأكد دائمًا من الوصول إلى الحالة التفاعلية كخاصية لـ `this`.**
-We can create a reactive object or array with the [`reactive()`](/api/reactivity-core.html#reactive) function: +يمكننا إنشاء كائن تفاعلي أو مصفوفة باستخدام دالة [`()reactive`](/api/reactivity-core.html#reactive): ```js import { reactive } from 'vue' @@ -75,21 +77,21 @@ import { reactive } from 'vue' const state = reactive({ count: 0 }) ``` -Reactive objects are [JavaScript Proxies](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy) and behave just like normal objects. The difference is that Vue is able to track the property access and mutations of a reactive object. If you are curious about the details, we explain how Vue's reactivity system works in [Reactivity in Depth](/guide/extras/reactivity-in-depth.html) - but we recommend reading it after you have finished the main guide. +الكائنات التفاعلية هي [وسائط JavaScript](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy) وتتصرف مثل الكائنات العادية. الفرق هو أن Vue قادرة على تتبع الوصول إلى خاصيات وتغييرات الكائن التفاعلي. إذا كنت ترغب في معرفة التفاصيل، سنشرح كيفية عمل نظام التفاعلية في Vue في قسم [التفاعل بالتفصيل](/guide/extras/reactivity-in-depth.html) - لكننا نوصي بقراءته بعد إتمام الدليل الرئيسي. -See also: [Typing Reactive](/guide/typescript/composition-api.html#typing-reactive) +الق نظرة على: [إضافة النوع لـReactive](/guide/typescript/composition-api.html#typing-reactive) -To use reactive state in a component's template, declare and return them from a component's `setup()` function: +لاستخدام الحالة التفاعلية في قالب المكون، قم بتعريفها وارجاعها من دالة `()setup` للمكون: ```js{5,9-11} import { reactive } from 'vue' export default { - // `setup` is a special hook dedicated for composition API. + // `setup` هو خطافة خاصة مخصصة للواجهة التركيبية API. setup() { const state = reactive({ count: 0 }) - // expose the state to the template + // اعرض الحالة في القالب return { state } @@ -101,7 +103,7 @@ export default {
{{ state.count }}
``` -Similarly, we can declare functions that mutate reactive state in the same scope and expose them as methods alongside the state: +بشكل مماثل، يمكننا إعلان الدوال التي تغير الحالة التفاعلية في نفس النطاق وتعرضها كتوابع جنبًا إلى جنب مع الحالة: ```js{7-9,14} import { reactive } from 'vue' @@ -114,7 +116,7 @@ export default { state.count++ } - // don't forget to expose the function as well. + // لا تنسى عرض الدالة أيضًا. return { state, increment @@ -122,8 +124,7 @@ export default { } } ``` - -Exposed methods are typically used as event listeners: +التوابع المعروضة عادة ما تستخدم كمستمعات للأحداث: ```vue-html ``` -### ` @@ -594,7 +613,6 @@ function increment() { ``` - -You can learn more about [Reactivity Transform](/guide/extras/reactivity-transform.html) in its dedicated section. Do note that it is currently still experimental and may change before being finalized. +يمكنك الاطلاع على المزيد حول [تحويل التفاعلية](/guide/extras/reactivity-transform.html) في القسم المخصص لها. تجدر الملاحظة إلى أنه ما زال في طور التجريب وقد يتغير قبل الانتهاء منه.
From a695ec52e011319bc27a7dbd187d34119374f5dd Mon Sep 17 00:00:00 2001 From: boussadjra Date: Fri, 3 Feb 2023 22:45:44 +0100 Subject: [PATCH 3/7] translate class-&-style --- .vitepress/config.ts | 10 +-- glossary.md | 6 +- src/guide/essentials/class-and-style.md | 108 ++++++++++++------------ src/guide/essentials/computed.md | 97 ++++++++++----------- 4 files changed, 113 insertions(+), 108 deletions(-) diff --git a/.vitepress/config.ts b/.vitepress/config.ts index db69a8af..b87150df 100644 --- a/.vitepress/config.ts +++ b/.vitepress/config.ts @@ -1,9 +1,9 @@ -import fs from 'fs' -import path from 'path' -import { defineConfigWithTheme } from 'vitepress' import type { Config as ThemeConfig } from '@vue/theme' import baseConfig from '@vue/theme/config' +import { defineConfigWithTheme } from 'vitepress' +import fs from 'fs' import { headerPlugin } from './headerMdPlugin' +import path from 'path' const nav: ThemeConfig['nav'] = [ { @@ -154,7 +154,7 @@ export const sidebar: ThemeConfig['sidebar'] = { link: '/guide/essentials/reactivity-fundamentals' }, { - text: 'الخصائص المحسوبة', + text: 'الخاصيات المحسوبة', link: '/guide/essentials/computed' }, { @@ -175,7 +175,7 @@ export const sidebar: ThemeConfig['sidebar'] = { text: 'خطافات دورة الحياة', link: '/guide/essentials/lifecycle' }, - { text: 'الخصائص المراقبة', link: '/guide/essentials/watchers' }, + { text: 'الخاصيات المراقبة', link: '/guide/essentials/watchers' }, { text: 'Refs مراجع القالب', link: '/guide/essentials/template-refs' diff --git a/glossary.md b/glossary.md index 39c1729d..0071a2a7 100644 --- a/glossary.md +++ b/glossary.md @@ -57,6 +57,6 @@ | container | مُستوعِب | | CSS selector | مُحدِّد CSS | | assets | ملحقات | -| modifier | مُعدِّل | -| tick | نبضة | -| unwrap | / فك | +| modifier | مُعدِّل | +| tick | نبضة | +| unwrap | فك | diff --git a/src/guide/essentials/class-and-style.md b/src/guide/essentials/class-and-style.md index 0d5c6978..2e5442a0 100644 --- a/src/guide/essentials/class-and-style.md +++ b/src/guide/essentials/class-and-style.md @@ -1,8 +1,7 @@ -# Class and Style Bindings {#class-and-style-bindings} +# ربط التنسيقات و الأصناف {#class-and-style-bindings} -A common need for data binding is manipulating an element's class list and inline styles. Since `class` and `style` are both attributes, we can use `v-bind` to assign them a string value dynamically, much like with other attributes. However, trying to generate those values using string concatenation can be annoying and error-prone. For this reason, Vue provides special enhancements when `v-bind` is used with `class` and `style`. In addition to strings, the expressions can also evaluate to objects or arrays. - -## Binding HTML Classes {#binding-html-classes} +احتياج شائع لربط البيانات هو التحكم في قائمة الأصناف وتنسيقات العنصر. بما أن `class` و `style` عبارة عن سمتين، يمكننا استخدام `v-bind` لاعطائهما سلسلة نصية كقيمة بشكل ديناميكي، على غرار السمات الأخرى. ومع ذلك، يمكن أن يكون توليد هذه القيم عن طريق ربط سلاسل مزعجًا ومُحتملًا للأخطاء. لهذا السبب، توفر Vue تحسينات خاصة عند استخدام `v-bind` مع `class` و `style`. بالإضافة إلى السلاسل النصية، يمكن أن تُقيّم العبارات أيضًا إلى كائنات أو مصفوفات. +## ربط أصناف الـHTML {#binding-html-classes}
@@ -12,17 +11,18 @@ A common need for data binding is manipulating an element's class list and inlin
-### Binding to Objects {#binding-to-objects} +### الربط بالكائنات {#binding-to-objects} -We can pass an object to `:class` (short for `v-bind:class`) to dynamically toggle classes: +يمكننا تمرير كائن إلى `:class` (الإختصار لـ `v-bind:class`) لتبديل الأصناف بشكل ديناميكي: ```vue-html
``` -The above syntax means the presence of the `active` class will be determined by the [truthiness](https://developer.mozilla.org/en-US/docs/Glossary/Truthy) of the data property `isActive`. -You can have multiple classes toggled by having more fields in the object. In addition, the `:class` directive can also co-exist with the plain `class` attribute. So given the following state: +الصيغة أعلاه تعني أن وجود الصنف `active` سيتم تحديده بواسطة [صحة](https://developer.mozilla.org/en-US/docs/Glossary/Truthy) الخاصية `isActive` من البيانات. + +يمكن أن يكون لديك عدة أصناف تتبدل بواسطة وجود العديد من الخاصيات في الكائن. بالإضافة إلى ذلك، يمكن للسمة المربوطة `:class` أيضًا أن تكون موجودة بجانب السمة `class` العادية. لذا، بالنظر إلى الحالة التالية:
@@ -46,7 +46,7 @@ data() {
-And the following template: +و القالب الموالي: ```vue-html
``` -It will render: +سيتم تصيير العنصر التالي: ```vue-html
``` -When `isActive` or `hasError` changes, the class list will be updated accordingly. For example, if `hasError` becomes `true`, the class list will become `"static active text-danger"`. +عند تغيير `isActive` أو `hasError`، سيتم تحديث قائمة الصنف بناءً على ذلك. على سبيل المثال، إذا أصبح `hasError` `true`، فسيصبح قائمة الصنف `"static active text-danger"`. -The bound object doesn't have to be inline: +الكائن المربوط لا يحتاج أن يكون مُضمَّنا:
@@ -95,7 +95,7 @@ data() {
``` -This will render the same result. We can also bind to a [computed property](./computed) that returns an object. This is a common and powerful pattern: +سيقوم هذا الربط بتصيير نفس النتيجة. يمكننا أيضًا الربط بخاصية [محسوبة](./computed) تعيد كائنًا. و هو نمط شائع وقوي:
@@ -136,9 +136,9 @@ computed: {
``` -### Binding to Arrays {#binding-to-arrays} +### الربط بالمصفوفات {#binding-to-arrays} -We can bind `:class` to an array to apply a list of classes: +يمكننا ربط `:class` بمصفوفة لتطبيق قائمة من الأصناف:
@@ -166,90 +166,91 @@ data() {
``` -Which will render: +نتيجة التصيير : ```vue-html
``` -If you would like to also toggle a class in the list conditionally, you can do it with a ternary expression: +إذا كنت ترغب أيضًا في تبديل صنف في القائمة بشكل شرطي، يمكنك القيام بذلك باستخدام تعبير ثلاثي: ```vue-html
``` -This will always apply `errorClass`, but `activeClass` will only be applied when `isActive` is truthy. +هذا الربط سيطبق دائمًا `errorClass`، ولكن `activeClass` سيتم تطبيقه فقط عندما يكون `isActive` صحيحًا. -However, this can be a bit verbose if you have multiple conditional classes. That's why it's also possible to use the object syntax inside array syntax: +لكن قد يكون هذا طويلا نوعا ما إذا كان لديك أصناف شرطية متعددة. لهذا السبب، يمكنك أيضًا استخدام صيغة الكائن داخل صيغة المصفوفة : ```vue-html
``` -### With Components {#with-components} +### مع المكونات {#with-components} -> This section assumes knowledge of [Components](/guide/essentials/component-basics). Feel free to skip it and come back later. +> هذا القسم يفترض أن لديك معرفة [بالمكونات](/guide/essentials/component-basics). لا تتردد في تخطيه والعودة إليه لاحقًا. -When you use the `class` attribute on a component with a single root element, those classes will be added to the component's root element, and merged with any existing class already on it. +لما تستخدم السمة `class` على مكون يحتوي على عنصر واحد فقط، سيتم إضافة هذه الصنف إلى العنصر الجذري للمكون، وسيتم دمجها مع أي صنف موجود عليه من قبل. -For example, if we have a component named `MyComponent` with the following template: +على سبيل المثال، إذا كان لدينا مكون يسمى `MyComponent` مع القالب التالي: ```vue-html - -

Hi!

+ +

مرحبا!

``` -Then add some classes when using it: +ثم اضف بعض الأصناف عند استخدامه: ```vue-html - + ``` -The rendered HTML will be: +الـHTML المصيّر سيكون بالشكل الموالي : ```vue-html -

Hi

+

مرحبا

``` -The same is true for class bindings: +نفس الشيء ينطبق على ربط الصنف: ```vue-html ``` -When `isActive` is truthy, the rendered HTML will be: +لما يكون `isActive` صحيحًا، سيكون الـHTML المصيّر بالشكل الموالي : ```vue-html -

Hi

+

مرحبا

``` -If your component has multiple root elements, you would need to define which element will receive this class. You can do this using the `$attrs` component property: +إذا كان لديك مكون يحتوي على عناصر جذرية متعددة، ستحتاج إلى تحديد أي عنصر سيتلقى هذا الصنف. يمكنك القيام بذلك باستخدام خاصية المكون `attrs$`: ```vue-html - -

Hi!

-This is a child component + +

مرحبا!

+هذا هو المكون الابن ``` ```vue-html ``` -Will render: +النتيجة المصيرة ستكون: ```html -

Hi!

-This is a child component +

مرحبا!

+هذا هو المكون الابن ``` You can learn more about component attribute inheritance in [Fallthrough Attributes](/guide/components/attrs.html) section. -## Binding Inline Styles {#binding-inline-styles} +يمكنك معرفة المزيد عن توريث سمات المكون في قسم [Fallthrough Attributes](/guide/components/attrs.html). +## ربط التنسيقات السطرية {#binding-inline-styles} -### Binding to Objects +### الربط بالكائنات -`:style` supports binding to JavaScript object values - it corresponds to an [HTML element's `style` property](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/style): +`:style` يدعم ربط قيم كائنات JavaScript - يُوافق مع [خاصية `style` لعنصر HTML](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/style):
@@ -277,13 +278,15 @@ data() {
``` -Although camelCase keys are recommended, `:style` also supports kebab-cased CSS property keys (corresponds to how they are used in actual CSS) - for example: + +رغم أن الأسماء المكتوبة باستخدام نمط سنام الجمل camelCase موصى بها، إلا أن `style:` يدعم أيضًا أسماء الخاصيات CSS مكتوبة باستخدام نمط أسياخ الشواء kebab-case (وهي ما يتم استخدامه في CSS الفعلي) - على سبيل المثال: + ```vue-html
``` -It is often a good idea to bind to a style object directly so that the template is cleaner: +غالبا ما يكون من الأفضل ربط كائن التنسيقات مباشرة حتى يكون محتوى القالب أنقى:
@@ -315,26 +318,27 @@ data() {
``` -Again, object style binding is often used in conjunction with computed properties that return objects. +مرة أخرى، يتم استخدام ربط كائن التنسيقات عادةً مع خاصيات محسوبة تُعيد كائنات. -### Binding to Arrays +### الربط بالمصفوفات -We can bind `:style` to an array of multiple style objects. These objects will be merged and applied to the same element: +يمكننا ربط `:style` بمصفوفة من كائنات متعددة من التنسيقات . سيتم دمج هذه الكائنات وتطبيقها على نفس العنصر: ```vue-html
``` -### Auto-prefixing {#auto-prefixing} +### البادئة التلقائية {#auto-prefixing} -When you use a CSS property that requires a [vendor prefix](https://developer.mozilla.org/en-US/docs/Glossary/Vendor_Prefix) in `:style`, Vue will automatically add the appropriate prefix. Vue does this by checking at runtime to see which style properties are supported in the current browser. If the browser doesn't support a particular property then various prefixed variants will be tested to try to find one that is supported. +لما تستخدم خاصية CSS والتي تتطلب [بادئة](https://developer.mozilla.org/en-US/docs/Glossary/Vendor_Prefix) في `:style`، ستُضِيف Vue البادئة المناسبة تلقائيًا. تقوم Vue بذلك من خلال التحقق في وقت التشغيل لمعرفة أي خاصيات النمط المدعومة في المتصفح الحالي. إذا لم يدعم المتصفح خاصية معينة سيختبر بعدها مختلف أنواع البادئات للحصول على أحد البادئات المدعومة. -### Multiple Values {#multiple-values} +### قيم متعددة {#multiple-values} -You can provide an array of multiple (prefixed) values to a style property, for example: +يمكنك امداد مصفوفة من القيم المتعددة (ذات بادئة) إلى خاصية التنسيق، على سبيل المثال: ```vue-html
``` +هذه الشيفرة ستصير القيمة الأخيرة فقط في المصفوفة التي يدعمها المتصفح. في هذا المثال، ستقوم بتصيير `display: flex` للمتصفحات التي تدعم نسخة بدون بادئة من flexbox. + -This will only render the last value in the array which the browser supports. In this example, it will render `display: flex` for browsers that support the unprefixed version of flexbox. diff --git a/src/guide/essentials/computed.md b/src/guide/essentials/computed.md index e637457f..7a66c1ac 100644 --- a/src/guide/essentials/computed.md +++ b/src/guide/essentials/computed.md @@ -1,4 +1,4 @@ -# Computed Properties {#computed-properties} +# الخاصيات المحسوبة {#computed-properties}
@@ -8,9 +8,9 @@
-## Basic Example {#basic-example} +## مثال بسيط {#basic-example} -In-template expressions are very convenient, but they are meant for simple operations. Putting too much logic in your templates can make them bloated and hard to maintain. For example, if we have an object with a nested array: +التعبيرات المدمجة في القالب هي طريقة جيدة، لكنها موجهة فقط للعمليات البسيطة. إذا وضعنا الكثير من الشيفرات داخل القالب فإنه سيصبح معقد وصعب الصيانة. على سبيل المثال، إذا كان لدينا كائن مصفوفة متداخلة:
@@ -47,16 +47,15 @@ const author = reactive({
-And we want to display different messages depending on if `author` already has some books or not: +و نريد عرض رسائل مختلفة بناءً على `author` (المؤلف) إذا كان لديه كتب أو لا: ```vue-html

Has published books:

{{ author.books.length > 0 ? 'Yes' : 'No' }} ``` +عند هذه النقطة، يصبح القالب مزدحمًا قليلاً. يجب أن ننظر إليه لوهلة قبل أن ندرك أنه يقوم بحساب معين استنادًا إلى `author.books`. و أهم شيء، نحن ربما لا نريد تكرار نفس الحساب إذا كنا بحاجة إلى تضمينه في القالب أكثر من مرة. -At this point, the template is getting a bit cluttered. We have to look at it for a second before realizing that it performs a calculation depending on `author.books`. More importantly, we probably don't want to repeat ourselves if we need to include this calculation in the template more than once. - -That's why for complex logic that includes reactive data, it is recommended to use a **computed property**. Here's the same example, refactored: +لهذا السبب، في المعالجة المعقدة التي تتضمن بيانات تفاعلية متداخلة، يُوصى باستخدام **خاصية محسوبة**. هذا المثال السابق مع إعادة تصميمه بهاته الخاصية:
@@ -75,29 +74,29 @@ export default { } }, computed: { - // a computed getter + // خاصية محسوبة مُحصلة publishedBooksMessage() { - // `this` points to the component instance - return this.author.books.length > 0 ? 'Yes' : 'No' - } + // `this` + //يشير إلى نسخة المكون + return this.author.books.length > 0 ? 'نعم' : 'لا' } } ``` ```vue-html -

Has published books:

+

هل نشر كتبا؟

{{ publishedBooksMessage }} ``` -[Try it in the Playground](https://sfc.vuejs.org/#eyJBcHAudnVlIjoiPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYXV0aG9yOiB7XG4gICAgICAgIG5hbWU6ICdKb2huIERvZScsXG4gICAgICAgIGJvb2tzOiBbXG4gICAgICAgICAgJ1Z1ZSAyIC0gQWR2YW5jZWQgR3VpZGUnLFxuICAgICAgICAgICdWdWUgMyAtIEJhc2ljIEd1aWRlJyxcbiAgICAgICAgICAnVnVlIDQgLSBUaGUgTXlzdGVyeSdcbiAgICAgICAgXVxuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgY29tcHV0ZWQ6IHtcbiAgICBwdWJsaXNoZWRCb29rc01lc3NhZ2UoKSB7XG4gICAgICByZXR1cm4gdGhpcy5hdXRob3IuYm9va3MubGVuZ3RoID4gMCA/ICdZZXMnIDogJ05vJ1xuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjx0ZW1wbGF0ZT5cbiAgPHA+SGFzIHB1Ymxpc2hlZCBib29rczo8L3A+XG4gIDxzcGFuPnt7IGF1dGhvci5ib29rcy5sZW5ndGggPiAwID8gJ1llcycgOiAnTm8nIH19PC9zcGFuPlxuPC90ZW1wbGF0ZT4iLCJpbXBvcnQtbWFwLmpzb24iOiJ7XG4gIFwiaW1wb3J0c1wiOiB7XG4gICAgXCJ2dWVcIjogXCJodHRwczovL3NmYy52dWVqcy5vcmcvdnVlLnJ1bnRpbWUuZXNtLWJyb3dzZXIuanNcIlxuICB9XG59In0=) +[اختبرها في حقل التجارب](https://sfc.vuejs.org/#eNqNUs1Kw0AQfpVhL1GwiainECqKIAi9iRfjYZtMm9Rmd9mfaim5aPU1PFa8iODFN0nexk2aJqgowsLOzH77zcw3syBHQrgzg8QngYpkKnQ/ZHgruNQQ44iaqYZFyABiqunW9toGkKiNZBsPgBqdcOl3AQBGM/TBOeMJgxOOzk73NOT8Wvlw2UUAnAuDsAc9OIpnlEUYw6lJ4y/fGtC+BR1TlUa/Ig4s4jxBGMyVRjl3OsDVxszXRn3lNUPEM2E0xm0TwgynqUowPq7KHaBSdIydBK0IOkmVuxbArTtzp8jGOoE+7MIhOOVj8VE+OGDFKJfFqqlmnTlk9gReq7x1NGZiSjVaDwLRL5flXfEKluS9eIPyvngpnotV8RR4okJAoARl/cWiGcG/KoA8tzmrf1XyNiHZIWlWTb6XUeFOFGd2K+puw+ZBhaSVJyR2bSo/JInWQvmep0ZRtUsT5XI59qzlSsN0mqGLKusNJb9RKC1xSJqZ1RyeDc5Q9iSyGCXKvzi/QX/wbkQl+SdoQ/Wa) -Here we have declared a computed property `publishedBooksMessage`. + هنا صرحنا بخاصية محسوبة مسماة `publishedBooksMessage`. -Try to change the value of the `books` array in the application `data` and you will see how `publishedBooksMessage` is changing accordingly. + جرب تغيير قيمة `books` في البيانات و سترى كيف تتغير `publishedBooksMessage` وفقا لذلك. -You can data-bind to computed properties in templates just like a normal property. Vue is aware that `this.publishedBooksMessage` depends on `this.author.books`, so it will update any bindings that depend on `this.publishedBooksMessage` when `this.author.books` changes. +يمكنك ربط الخصائص المحسوبة كبيانات في القوالب مثل أي خاصية عادية. يعرف Vue أن `this.publishedBooksMessage` يعتمد على `this.author.books`، لذلك سيقوم بتحديث أي ربط يعتمد على `this.publishedBooksMessage` عند تغيير `this.author.books`. -See also: [Typing Computed Properties](/guide/typescript/options-api.html#typing-computed-properties) +الق نظرة على: [إضافة النوع إلى الخصائص المحسوبة ](/guide/typescript/options-api.html#typing-computed-properties)
@@ -116,31 +115,35 @@ const author = reactive({ ] }) -// a computed ref +//مرجع خاصية محسوبة const publishedBooksMessage = computed(() => { - return author.books.length > 0 ? 'Yes' : 'No' + return author.books.length > 0 ? 'نعم' : 'لا' }) ``` -[Try it in the Playground](https://sfc.vuejs.org/#eyJBcHAudnVlIjoiPHNjcmlwdCBzZXR1cD5cbmltcG9ydCB7IHJlYWN0aXZlLCBjb21wdXRlZCB9IGZyb20gJ3Z1ZSdcblxuY29uc3QgYXV0aG9yID0gcmVhY3RpdmUoe1xuICBuYW1lOiAnSm9obiBEb2UnLFxuICBib29rczogW1xuICAgICdWdWUgMiAtIEFkdmFuY2VkIEd1aWRlJyxcbiAgICAnVnVlIDMgLSBCYXNpYyBHdWlkZScsXG4gICAgJ1Z1ZSA0IC0gVGhlIE15c3RlcnknXG4gIF1cbn0pXG5cbi8vIGEgY29tcHV0ZWQgcmVmXG5jb25zdCBwdWJsaXNoZWRCb29rc01lc3NhZ2UgPSBjb21wdXRlZCgoKSA9PiB7XG4gIHJldHVybiBhdXRob3IuYm9va3MubGVuZ3RoID4gMCA/ICdZZXMnIDogJ05vJ1xufSlcbjwvc2NyaXB0PlxuXG48dGVtcGxhdGU+XG4gIDxwPkhhcyBwdWJsaXNoZWQgYm9va3M6PC9wPlxuICA8c3Bhbj57eyBwdWJsaXNoZWRCb29rc01lc3NhZ2UgfX08L3NwYW4+XG48L3RlbXBsYXRlPiIsImltcG9ydC1tYXAuanNvbiI6IntcbiAgXCJpbXBvcnRzXCI6IHtcbiAgICBcInZ1ZVwiOiBcImh0dHBzOi8vc2ZjLnZ1ZWpzLm9yZy92dWUucnVudGltZS5lc20tYnJvd3Nlci5qc1wiXG4gIH1cbn0ifQ==) +[اختبرها في حقل التجارب](https://sfc.vuejs.org/#eNp9Us1q20AQfpVhL3LAlkrbk3BUEgqFQm6ll24Pa2lsKbV2l52VSxA6NU0eI8eE3AK55E2kt8msrSSQv9vO3zff98224sDaeNOgSMWccldZD4S+sZnUVW2N89CCQ5X7aoNTyE1tG48FdLB0poaIJyOppc6NJg+q8aVxsP84MWmlBtCqxhSi76bU8NVgNA3JhTF/KIVf4Q0Q/WwQPsIMDoqN0jlv+NZUxdg6lj9x+VBRlb9S+8y1HyXC0Ql5dCfMCeC31N1eIJckoJ6oO1w+8LXNYl1RicVhIHOERGqFTP+hdzLZg/0MtiIcu+L0KDHeso/XqFe+hAw+wBeIhrP+bvgfAUsdTvtL5hDWz5OdrWwoBx5ru1YeOQKY22w4H06BB2/7Gxj+9df9VX/ZX8yT4D83kFU6a9s3iHYdg4eOsOURWUzF7nKzWtn4mIzm224lyLFAUqQ7USHHJwyxFKX3ltIkoWUefsQxxcatEn7FrtG+qjFGqmcLZ/4SOgaWYrzAFiPh5AbdzKEu0KF7D/NZ6wvcANuxfaK7B/XE7oo=) + -Here we have declared a computed property `publishedBooksMessage`. The `computed()` function expects to be passed a getter function, and the returned value is a **computed ref**. Similar to normal refs, you can access the computed result as `publishedBooksMessage.value`. Computed refs are also auto-unwrapped in templates so you can reference them without `.value` in template expressions. + +هنا صرحنا بخاصية محسوبة مسماة `publishedBooksMessage`. تتوقع الدالة `()computed` أن تتلقى دالة محصلة، ويتم إرجاع قيمة **ref محسوب**. مثل الـrefs العادية، يمكنك الوصول إلى النتيجة المحسوبة باستخدام `publishedBooksMessage.value`. تتم إزالة المراجع المحسوبة تلقائيًا في القوالب لذلك يمكنك الإشارة إليها دون `value.` في تعبيرات القالب. A computed property automatically tracks its reactive dependencies. Vue is aware that the computation of `publishedBooksMessage` depends on `author.books`, so it will update any bindings that depend on `publishedBooksMessage` when `author.books` changes. -See also: [Typing Computed](/guide/typescript/composition-api.html#typing-computed) +خاصية محسوبة تتبع تلقائيًا إعتمادياتها التفاعلية. يعرف Vue أن حساب `publishedBooksMessage` يعتمد على `author.books`، لذلك سيقوم بتحديث أي ربط يعتمد على `publishedBooksMessage` عند تغيير `author.books`. + +الق نظرة على: [إضافة النوع إلى الخاصيات المحسوبة ](/guide/typescript/composition-api.html#typing-computed)
-## Computed Caching vs. Methods {#computed-caching-vs-methods} +## تخزين بالخاصيات المحسوبة مقابل التوابع {#computed-caching-vs-methods} -You may have noticed we can achieve the same result by invoking a method in the expression: +ربما لاحظت أننا يمكننا الوصول إلى نفس النتيجة من خلال استدعاء تابع في التعبير: ```vue-html

{{ calculateBooksMessage() }}

@@ -149,7 +152,7 @@ You may have noticed we can achieve the same result by invoking a method in the
```js -// in component +// داخل المكون methods: { calculateBooksMessage() { return this.author.books.length > 0 ? 'Yes' : 'No' @@ -162,7 +165,7 @@ methods: {
```js -// in component +// داخل المكون function calculateBooksMessage() { return author.books.length > 0 ? 'Yes' : 'No' } @@ -170,9 +173,9 @@ function calculateBooksMessage() {
-Instead of a computed property, we can define the same function as a method. For the end result, the two approaches are indeed exactly the same. However, the difference is that **computed properties are cached based on their reactive dependencies.** A computed property will only re-evaluate when some of its reactive dependencies have changed. This means as long as `author.books` has not changed, multiple access to `publishedBooksMessage` will immediately return the previously computed result without having to run the getter function again. +بدلا من خاصية محسوبة، يمكننا تعريف نفس الدالة كتابعة. من أجل الحصول على النتيجة النهائية، فإن كلا الطريقتين تفيان بنفس الغرض. ومع ذلك، فإن الفرق هو أن **الخاصيات المحسوبة مخزنة بناءً على إعتمادياتها التفاعلية.** ستقوم خاصية محسوبة بإعادة التقييم فقط عندما تتغير بعض إعتمادياتها التفاعلية. هذا يعني أنه بمجرد عدم تغير `author.books`، فإن الوصول المتعدد إلى `publishedBooksMessage` سيعيد النتيجة المحسوبة مسبقًا بدون الحاجة إلى تشغيل الدالة المحصلة مرة أخرى. -This also means the following computed property will never update, because `Date.now()` is not a reactive dependency: +هذا يعني أيضا أن الخاصية المحسوبة التالية لن تَتحيَّن أبدا، لأن `()Date.now` ليست إعتمادية تفاعلية:
@@ -194,13 +197,12 @@ const now = computed(() => Date.now())
-In comparison, a method invocation will **always** run the function whenever a re-render happens. +بالمقارنة، استدعاء تابع سيقوم بتشغيل الدالة **دائمًا** عندما يحدث إعادة التصيير. -Why do we need caching? Imagine we have an expensive computed property `list`, which requires looping through a huge array and doing a lot of computations. Then we may have other computed properties that in turn depend on `list`. Without caching, we would be executing `list`’s getter many more times than necessary! In cases where you do not want caching, use a method call instead. +لماذا نحتاج إلى التخزين؟ تصور أنه لدينا خاصية محسوبة مُكْلِفة مسماة `list`، والتي تتطلب المرور عبر جميع عناصر مصفوفة كبيرة والقيام بالكثير من الحسابات. ثم قد نملك خاصيات محسوبة أخرى تعتمد على `list` بدورها. بدون التخزين، سنقوم بتشغيل الدالة المحصلة على `list` عدة مرات أكثر من الضروري! في حالات لا تريد التخزين، استدع تابع بدلاً من ذلك. +## الخاصيات المحسوبة القابلة للكتابة {#writable-computed} -## Writable Computed {#writable-computed} - -Computed properties are by default getter-only. If you attempt to assign a new value to a computed property, you will receive a runtime warning. In the rare cases where you need a "writable" computed property, you can create one by providing both a getter and a setter: +الخاصيات المحسوبة غير قابلة للتعيين افتراضيًا. إذا حاولت تعيين قيمة جديدة لخاصية محسوبة، ستحصل على تحذير خلال وقت التشغيل. في الحالات النادرة التي تحتاج إلى خاصية محسوبة "قابلة للكتابة"، يمكنك إنشاء واحدة من خلال توفير الدالتين المُحصِّلة و المعيّنة:
@@ -214,13 +216,13 @@ export default { }, computed: { fullName: { - // getter + // مُحصلة get() { return this.firstName + ' ' + this.lastName }, - // setter + // معيّنة set(newValue) { - // Note: we are using destructuring assignment syntax here. + // ملاحظة: استخدمنا هنا صيغة التعيين عن طريق التفكيك. [this.firstName, this.lastName] = newValue.split(' ') } } @@ -228,7 +230,7 @@ export default { } ``` -Now when you run `this.fullName = 'John Doe'`, the setter will be invoked and `this.firstName` and `this.lastName` will be updated accordingly. +الآن عندما تقوم بتشغيل ` 'محمد عبيدي' = this.fullName ` سيتم تشغيل المعيّن وسيتم بالتالي تحديث `this.firstName` و `this.lastName`.
@@ -242,29 +244,28 @@ const firstName = ref('John') const lastName = ref('Doe') const fullName = computed({ - // getter + // مُحصلة get() { return firstName.value + ' ' + lastName.value }, - // setter + // معيّنة set(newValue) { - // Note: we are using destructuring assignment syntax here. + // ملاحظة: استخدمنا هنا صيغة التعيين عن طريق التفكيك. [firstName.value, lastName.value] = newValue.split(' ') } }) ``` - -Now when you run `fullName.value = 'John Doe'`, the setter will be invoked and `firstName` and `lastName` will be updated accordingly. +الآن عندما تقوم بتشغيل ` 'محمد عبيدي' = this.fullName ` سيتم تشغيل المعيّن وسيتم بالتالي تحديث `this.firstName` و `this.lastName`.
-## Best Practices {#best-practices} +## الممارسات الجيّدة {#best-practices} -### Getters should be side-effect free {#getters-should-be-side-effect-free} +### يجب أن تكون الدوال المحصلة خالية من التأثيرات الجانبية {#getters-should-be-side-effect-free} -It is important to remember that computed getter functions should only perform pure computation and be free of side effects. For example, **don't make async requests or mutate the DOM inside a computed getter!** Think of a computed property as declaratively describing how to derive a value based on other values - its only responsibility should be computing and returning that value. Later in the guide we will discuss how we can perform side effects in reaction to state changes with [watchers](./watchers). +من المهم أن نتذكر أن الدوال المُحصلة يجب أن تقوم فقط بحسابات بحتة وبدون تأثيرات جانبية. على سبيل المثال، **لا تقم بطلبات غير متزامنة أو تغيير الـDOM داخل دالة محصلة!**. تصور أي خاصية محسوبة كوصف تصريحي لكيفية استخراج قيمة استنادًا إلى قيم أخرى - يجب أن تكون مسؤوليتها فقط حساب القيمة وإرجاعها. في وقت لاحق في هذا الدليل، سنتحدث عن كيفية تنفيذ التأثيرات الجانبية بالرد على تغييرات الحالة باستخدام [الخاصيات المراقبة](./watchers). -### Avoid mutating computed value {#avoid-mutating-computed-value} +### تجنب تعيين القيمة المحسوبة {#avoid-mutating-computed-value} -The returned value from a computed property is derived state. Think of it as a temporary snapshot - every time the source state changes, a new snapshot is created. It does not make sense to mutate a snapshot, so a computed return value should be treated as read-only and never be mutated - instead, update the source state it depends on to trigger new computations. +القيمة المُرجعة من خاصية محسوبة هي حالة مشتقة. فكر فيها كلقطة مؤقتة - كلما تغيرت الحالة المصدرية، سيتم إنشاء لقطة جديدة. بديهيا لا يمكن تعديل لقطة، لذا يجب على أي قيمة محسوبة مُرجعة أن تُقرأ فقط وأن لا يتم تعديلها - بدلاً من ذلك، قم بتحديث الحالة المصدرية التي يعتمد عليها لتشغيل حسابات جديدة. From 75eb88f72b8d5a9bdd80098423b7029bad852a7b Mon Sep 17 00:00:00 2001 From: boussadjra Date: Sat, 4 Feb 2023 11:28:47 +0100 Subject: [PATCH 4/7] translate conditional rendering --- glossary.md | 1 + src/guide/essentials/conditional.md | 74 ++++++++++++++--------------- 2 files changed, 37 insertions(+), 38 deletions(-) diff --git a/glossary.md b/glossary.md index 0071a2a7..1ed1f2cb 100644 --- a/glossary.md +++ b/glossary.md @@ -60,3 +60,4 @@ | modifier | مُعدِّل | | tick | نبضة | | unwrap | فك | +| lazy | خامل | diff --git a/src/guide/essentials/conditional.md b/src/guide/essentials/conditional.md index e3868e15..7527685d 100644 --- a/src/guide/essentials/conditional.md +++ b/src/guide/essentials/conditional.md @@ -1,4 +1,4 @@ -# Conditional Rendering {#conditional-rendering} +# التصيير الشرطي {#conditional-rendering}
@@ -15,103 +15,101 @@ const awesome = ref(true) ## `v-if` {#v-if} -The directive `v-if` is used to conditionally render a block. The block will only be rendered if the directive's expression returns a truthy value. +السمة الموجهة `v-if` تستخدم لتصيير شرطي لكتلة من الشيفرة. سيتم تصيير الكتلة فقط إذا كان تعبير السمة الموجهة يعيد قيمة صحيحة. ```vue-html -

Vue is awesome!

+

Vue رائعة!

``` ## `v-else` {#v-else} -You can use the `v-else` directive to indicate an "else block" for `v-if`: +تستطيع استخدام السمة الموجهة `v-else` لتحديد "كتلة else" لـ `v-if`: ```vue-html - + -

Vue is awesome!

-

Oh no 😢

+

Vue رائعة!

+

أوه لا 😢

```
- -

Vue is awesome!

-

Oh no 😢

+ +

Vue رائعة!

+

أوه لا 😢

-[Try it in the Playground](https://sfc.vuejs.org/#eyJBcHAudnVlIjoiPHNjcmlwdCBzZXR1cD5cbmltcG9ydCB7IHJlZiB9IGZyb20gJ3Z1ZSdcblxuY29uc3QgYXdlc29tZSA9IHJlZih0cnVlKVxuPC9zY3JpcHQ+XG5cbjx0ZW1wbGF0ZT5cbiAgPGJ1dHRvbiBAY2xpY2s9XCJhd2Vzb21lID0gIWF3ZXNvbWVcIj50b2dnbGU8L2J1dHRvbj5cblxuXHQ8aDEgdi1pZj1cImF3ZXNvbWVcIj5WdWUgaXMgYXdlc29tZSE8L2gxPlxuXHQ8aDEgdi1lbHNlPk9oIG5vIPCfmKI8L2gxPlxuPC90ZW1wbGF0ZT4iLCJpbXBvcnQtbWFwLmpzb24iOiJ7XG4gIFwiaW1wb3J0c1wiOiB7XG4gICAgXCJ2dWVcIjogXCJodHRwczovL3NmYy52dWVqcy5vcmcvdnVlLnJ1bnRpbWUuZXNtLWJyb3dzZXIuanNcIlxuICB9XG59In0=) +[اختبرها في حقل التجارب](https://sfc.vuejs.org/#eNp9kE1OwzAQha8y9aYgNbG6rdIKLsHKmzZMaEr8o7GTLqLsKoE4ATskkCiwQSy5iXMLjoDTFIpAYjfz/N5n+9Xs1Ji4KpFNWGJTyo0Di640M6FyaTQ5qIEwgwYy0hKGwToUSqhUK+tgvkarJcK08xw5KvFYqIT3oIAIi0NpirnDsCWL0jmt4CQt8vRyKtghPtiPgs38i3/yr+1Nu0l4H+hByzFUUZ4dYsF7ViL4N7/1j/7dPw8Svhx39+ysWFic+Yf2ur2CduO38HF3e//l4N/PYiPWfzSScxOvrFahilooALE/sIJNYKd0Wiig2wVbOmfshHObpV2BKxtruuBhiqlULpcYo5XRgvTaIgWwYKMfDB7ECikiVOdISP8xf1n/cDtsI1TDmk8rYa1q)
-[Try it in the Playground](https://sfc.vuejs.org/#eyJBcHAudnVlIjoiPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZGF0YSgpIHtcbiAgXHRyZXR1cm4ge1xuXHQgICAgYXdlc29tZTogdHJ1ZVxuICBcdH1cblx0fVxufVxuPC9zY3JpcHQ+XG5cbjx0ZW1wbGF0ZT5cbiAgPGJ1dHRvbiBAY2xpY2s9XCJhd2Vzb21lID0gIWF3ZXNvbWVcIj50b2dnbGU8L2J1dHRvbj5cblxuXHQ8aDEgdi1pZj1cImF3ZXNvbWVcIj5WdWUgaXMgYXdlc29tZSE8L2gxPlxuXHQ8aDEgdi1lbHNlPk9oIG5vIPCfmKI8L2gxPlxuPC90ZW1wbGF0ZT4iLCJpbXBvcnQtbWFwLmpzb24iOiJ7XG4gIFwiaW1wb3J0c1wiOiB7XG4gICAgXCJ2dWVcIjogXCJodHRwczovL3NmYy52dWVqcy5vcmcvdnVlLnJ1bnRpbWUuZXNtLWJyb3dzZXIuanNcIlxuICB9XG59In0=) +[اختبرها في حقل التجارب](https://sfc.vuejs.org/#eNp9kNFKwzAUhl/lLFcKa8NuSzf0JbzKTded2c42DclJJ4zdDRSfwDtBwak34qVvkr6Fj2BCyxwKhhDOn/Ofj+TfsHOl4tYiS1hqcl0qmgmJ16rRBAtcZrYi2AgJsMgoOznta0EayWoZlCDwK1ujaWpMgLTF3rINPX/4nfID2gvCWlUZoVcA6dwSNRLO8qrMr6aCDSSYwmgoBZu5N/fi3ru7bpfyfqAfLibQRuXyZ8x7LyyC+3B79+w+3eso5cXkyIyVwZl76m67G+h2bg9fD/ePgyflh6exMSvrEEJUZypemUb6gPq/Dw0jWNKnEe58gkELVhApk3BulnmIdWXiRl9yX8XaSiprjNHU0Vw3a4PagwUbHzG4v2xRRxrlAjXq/5i/rH+4ARviZ9tvaiizdw==)
-A `v-else` element must immediately follow a `v-if` or a `v-else-if` element - otherwise it will not be recognized. - + السمة `v-else` يجب أن تتبعها السمة الموجهة `v-if` أو السمة الموجهة `v-else-if` - وإلا فلن يتم التعرف عليها. ## `v-else-if` {#v-else-if} - -The `v-else-if`, as the name suggests, serves as an "else if block" for `v-if`. It can also be chained multiple times: +الموجهة `v-else-if`، كما يشير الاسم، تعمل ككتلة "else if" لـ `v-if`. يمكن استخدامها أيضًا بشكل متسلسل عدة مرات: ```vue-html
- A + أ
- B + ب
- C + ج
- Not A/B/C + غير ذلك...
``` Similar to `v-else`, a `v-else-if` element must immediately follow a `v-if` or a `v-else-if` element. -## `v-if` on `

` بناءً على صحة قيمة التعبير `seen`. +### الوسائط {#arguments} -Some directives can take an "argument", denoted by a colon after the directive name. For example, the `v-bind` directive is used to reactively update an HTML attribute: +بعض الموجهات يمكنها أخذ "وسيط"، والذي يُعرَف بـ`:` بعد اسم الموجه. على سبيل المثال، يُستخدم الموجه `v-bind` لتحديث السمة HTML بشكل تفاعلي: ```vue-html ... - + ... ``` -Here, `href` is the argument, which tells the `v-bind` directive to bind the element's `href` attribute to the value of the expression `url`. In the shorthand, everything before the argument (i.e., `v-bind:`) is condensed into a single character, `:`. +هنا، `href` هو الوسيط، و الذي يخبر الموجه `v-bind` بربط السمة `href` للعنصر بقيمة التعبير `url`. اختصارا، كل شيء قبل الوسيط (أي، `:v-bind`) يُختصر إلى رمز النقطتين `:`. -Another example is the `v-on` directive, which listens to DOM events: +مثال آخر هو الموجه `v-on`، الذي يستمع إلى أحداث الـDOM: ```vue-html ... - + ... ``` +هنا، الوسيط هو اسم الحدث الذي سيُستمع إليه: `click`. يمتلك الموجه `v-on` اختصارا مقابل، وهو الرمز `@`. سنتحدث عن معالجة الأحداث أيضا بشكل أكثر تفصيلا. -Here, the argument is the event name to listen to: `click`. `v-on` has a corresponding shorthand, namely the `@` character. We will talk about event handling in more detail too. +### الوسائط الديناميكية {#dynamic-arguments} -### Dynamic Arguments {#dynamic-arguments} - -It is also possible to use a JavaScript expression in a directive argument by wrapping it with square brackets: +من الممكن أيضا استخدام تعبيرات الـJavaScript في وسيط الموجه بواسطة إحاطته بأقواس مربعة: ```vue-html - + ... - + ... ``` +هنا، سيتم تقييم `attributeName` بشكل ديناميكي كتعبير JavaScript، وسيتم استخدام حالة التقييم النهائية كقيمة للوسيط. على سبيل المثال، إذا كان لديك نسخة مكون لديها خاصية بإسم `attributeName`، والذي يحتوي على القيمة النصية `"href"`، فإن هذا الربط سيكون مطابقا لـ`v-bind:href`. -Here, `attributeName` will be dynamically evaluated as a JavaScript expression, and its evaluated value will be used as the final value for the argument. For example, if your component instance has a data property, `attributeName`, whose value is `"href"`, then this binding will be equivalent to `v-bind:href`. - -Similarly, you can use dynamic arguments to bind a handler to a dynamic event name: +بشكل مماثل، يمكنك استخدام الوسائط الديناميكية لربط معالج لاسم حدث ديناميكي: ```vue-html ... - + ``` -In this example, when `eventName`'s value is `"focus"`, `v-on:[eventName]` will be equivalent to `v-on:focus`. - -#### Dynamic Argument Value Constraints {#dynamic-argument-value-constraints} +في هذا المثال، عندما تكون قيمة `eventName` هي `"focus"`، فإن `v-on:[eventName]` سيكون مطابقا لـ`v-on:focus`. +#### قيود قيمة الوسيط الديناميكي {#dynamic-argument-value-constraints} -Dynamic arguments are expected to evaluate to a string, with the exception of `null`. The special value `null` can be used to explicitly remove the binding. Any other non-string value will trigger a warning. +الوسائط الديناميكية يُتوقع أن تكون قيمها عبارة عن سلسلة نصية، ما عدا `null`. يمكن استخدام القيمة الخاصة `null` لإزالة الربط بشكل صريح. أي قيمة غير نصية ستُظهر تحذيرا. -#### Dynamic Argument Syntax Constraints {#dynamic-argument-syntax-constraints} +#### قيود صيغة الوسيط الديناميكي {#dynamic-argument-syntax-constraints} -Dynamic argument expressions have some syntax constraints because certain characters, such as spaces and quotes, are invalid inside HTML attribute names. For example, the following is invalid: +الوسائط الديناميكية لها بعض القيود في كتابة صيغها لأن بعض الرموز مثل المسافات والعلامات التنصيصية، غير صالحة كأسماء سمات في HTML. على سبيل المثال، العبارة التالية غير صالحة: ```vue-html - + ... ``` -If you need to pass a complex dynamic argument, it's probably better to use a [computed property](./computed.html), which we will cover shortly. +إذا كنت تحتاج تمرير وسيط ديناميكي معقد، فمن المحتمل أن يكون من الأفضل استخدام [خاصية محسوبة](./computed.html)، والتي سنتحدث عنها باختصار. -When using in-DOM templates (templates directly written in an HTML file), you should also avoid naming keys with uppercase characters, as browsers will coerce attribute names into lowercase: +عند استخدام قوالب الـDOM (القوالب المكتوبة مباشرة في ملف HTML)، يجب عليك أيضا تجنب تسمية المفاتيح بحروف كبيرة، لأن المتصفحات ستقوم بتحويل أسماء السمات إلى حروف صغيرة: ```vue-html ... ``` -The above will be converted to `:[someattr]` in in-DOM templates. If your component has a `someAttr` property instead of `someattr`, your code won't work. Templates inside Single-File Components are **not** subject to this constraint. +التسمية اعلاه ستُحول إلى `:[someattr]` في قوالب الـDOM، إذا كان لديك خاصية `someAttr` بدلا من `someattr`، فلن تعمل شيفرتك. القوالب الموجودة داخل المكونات أحادية الملف ستكون **غير** خاضعة لهاته القيود. -### Modifiers {#modifiers} +### المُعدِّلات {#modifiers} -Modifiers are special postfixes denoted by a dot, which indicate that a directive should be bound in some special way. For example, the `.prevent` modifier tells the `v-on` directive to call `event.preventDefault()` on the triggered event: +المُعدِّلات هي لاحقات خاصة يُشار إليها بواسطة نقطة، والتي تُشير إلى أن السمة يجب ربطها بطريقة معينة. على سبيل المثال، المُعدِّل `prevent.` يُخبر الاتجاه `v-on` بإستدعاء `()event.preventDefault` على الحدث المُشغّل: ```vue-html