From 28df14834d30b5dc78731c30b5326f69bd13dc55 Mon Sep 17 00:00:00 2001 From: Corban Pendrak <125042151+CorbanPendrak@users.noreply.github.com> Date: Wed, 15 May 2024 02:54:54 -0400 Subject: [PATCH 1/3] patch-issue-295 (#348) --- src/localization/en/general.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/localization/en/general.json b/src/localization/en/general.json index 0fd4910e..89eb6e27 100644 --- a/src/localization/en/general.json +++ b/src/localization/en/general.json @@ -35,5 +35,5 @@ "page.cheatsheet.description": "Sometimes you just need to remember Regex. Try the cheatsheet that will make it easier for you to understand and remember better.", "page.playground.description": "You can easily build and test your regex pattern online via Playground.", - "learn.safari.unsupportWarning": "Regex in this step are not supported by the some browsers. If you have trouble getting past this step, you can click here." + "learn.safari.unsupportWarning": "Regex in this step is not supported by some browsers. If you have trouble getting past this step, click here." } From 71b99ae6cbf26cb771c905354a22f6a6d23e9009 Mon Sep 17 00:00:00 2001 From: Corban Pendrak <125042151+CorbanPendrak@users.noreply.github.com> Date: Wed, 15 May 2024 03:53:31 -0400 Subject: [PATCH 2/3] Reword character sets (#346) --- src/localization/en/learn.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/localization/en/learn.json b/src/localization/en/learn.json index c2d6cc72..75f782a3 100644 --- a/src/localization/en/learn.json +++ b/src/localization/en/learn.json @@ -60,13 +60,13 @@ "steps.questionMark.description": "To indicate that a character is optional, we put a `?` question mark after a character. For example, indicate that the following letter `u` is optional.", "steps.quantifier.title": "Curly Braces - 1", - "steps.quantifier.description": "To express a certain number of occurrences of a character, at the end we write curly braces `{n}` along with how many times we want it to occur. For example, indicate that the following letter `e` can occur only `2` times.", + "steps.quantifier.description": "To express a certain number of occurrences of a character, at the end we write curly braces `{n}` along with how many times we want it to occur. For example, indicate that the following letter `e` can occur only `2` times in a row.", "steps.quantifierMin.title": "Curly Braces - 2", - "steps.quantifierMin.description": "To express at least a certain number of occurrences of a character, immediately after the character we write at least how many times we want it to occur followed by a comma `,` and wrapped inside curly braces `{n, }`. For example, indicate that the following letter `e` can occur at least `3` times.", + "steps.quantifierMin.description": "To express at least a certain number of occurrences of a character, immediately after the character we write at least how many times we want it to occur in a row followed by a comma `,` and wrapped inside curly braces `{n, }`. For example, indicate that the following letter `e` can occur at least `3` times in a row.", "steps.quantifierRange.title": "Curly Braces - 3", - "steps.quantifierRange.description": "To express the occurrence of a character in a certain number range, we write curly braces `{x,y}` with the interval we want to go to the end. For example, indicate that the following letter `e` can only occur between `1` and `3`.", + "steps.quantifierRange.description": "To express the occurrence of a character in a certain number range, we write curly braces `{x,y}` for the inclusive interval. For example, indicate that the following letter `e` can only occur between `1` and `3` times in a row.", "examples.asterisk.title": "Practice: Asterisk `*`", "examples.asterisk.description": "Use the asterisk `*` to write the expression that will select each word, suitable for the absence of the letter `e` in the text and the presence of one or more.", From 89ac905aa4f982af43c69c85f8fab7bfa655164a Mon Sep 17 00:00:00 2001 From: Amir Mohammad Roozmeh <76488912+amirroox@users.noreply.github.com> Date: Mon, 27 May 2024 11:09:36 +0330 Subject: [PATCH 3/3] Persian translation Complete (#360) * Add Persian localization + cheatsheet translation * general.json Translation * landing.json and lessons.json Translation * learn.json (Regex 101 - FA) Translation * regexForSeo.json (Regex for SEO - FA) Translation * Translation Complete + Edited html-lang-fixer.js + Change README.md --- README.md | 2 +- scripts/html-lang-fixer.js | 2 +- src/localization/fa/cheatsheet.json | 70 ++++++++ src/localization/fa/general.json | 39 +++++ src/localization/fa/index.js | 17 ++ src/localization/fa/landing.json | 26 +++ src/localization/fa/learn.json | 163 +++++++++++++++++++ src/localization/fa/lessons.json | 7 + src/localization/fa/lessons/regexForSeo.json | 49 ++++++ src/localization/index.ts | 3 +- 10 files changed, 375 insertions(+), 3 deletions(-) create mode 100644 src/localization/fa/cheatsheet.json create mode 100644 src/localization/fa/general.json create mode 100644 src/localization/fa/index.js create mode 100644 src/localization/fa/landing.json create mode 100644 src/localization/fa/learn.json create mode 100644 src/localization/fa/lessons.json create mode 100644 src/localization/fa/lessons/regexForSeo.json diff --git a/README.md b/README.md index d77ffd9f..a3989975 100644 --- a/README.md +++ b/README.md @@ -41,13 +41,13 @@ the way: - 🇧🇷 Brazilian Portuguese - 🇨🇿 Czech - 🇬🇪 Georgian +- 🇮🇷 Persian ### Requested Translations - 🇦🇪 Arabic [(Issue)](https://github.com/aykutkardas/regexlearn.com/issues/163) - 🇧🇩 Bengali [(Issue)](https://github.com/aykutkardas/regexlearn.com/issues/304) - 🇮🇹 Italian [(Issue)](https://github.com/aykutkardas/regexlearn.com/issues/323) -- 🇮🇷 Persian [(Issue)](https://github.com/aykutkardas/regexlearn.com/issues/325) - 🇻🇳 Vietnamese [(Issue)](https://github.com/aykutkardas/regexlearn.com/issues/329) - 🇮🇩 Indonesian [(Issue)](https://github.com/aykutkardas/regexlearn.com/issues/335) diff --git a/scripts/html-lang-fixer.js b/scripts/html-lang-fixer.js index ff2aa90b..064d3359 100644 --- a/scripts/html-lang-fixer.js +++ b/scripts/html-lang-fixer.js @@ -15,7 +15,7 @@ function htmlLangFixer(path) { const stats = fs.lstatSync(currentPath); if (stats.isFile() && el.endsWith('.html')) { - const result = currentPath.match(/^\.\/out\/(en|es|de|tr|uk|fr|ru|pl|ko|zh-cn|pt-br|cs-cz|ka)\/?/); + const result = currentPath.match(/^\.\/out\/(en|es|de|tr|uk|fr|ru|pl|ko|zh-cn|pt-br|cs-cz|ka|fa)\/?/); if (result) { replaceLangTag(currentPath, result[1]); diff --git a/src/localization/fa/cheatsheet.json b/src/localization/fa/cheatsheet.json new file mode 100644 index 00000000..a29f16a9 --- /dev/null +++ b/src/localization/fa/cheatsheet.json @@ -0,0 +1,70 @@ +{ + "cheatsheet.section.title": "برگه تقلب ریجکس", + "cheatsheet.section.description": "تمام الگوها و نمادهای ریجکس را با کدتقلب ریجکس کاوش کنید.", + + "cheatsheet.anchors": "مهارها (لنگرها)", + "cheatsheet.caret.title": "شروع رشته یا خط", + "cheatsheet.caret.description": "با ابتدای ریشته یا خط تطابق دارد.", + "cheatsheet.dollar.title": "انتهای رشته یا خط", + "cheatsheet.dollar.description": "با انتهای رشته یا خط تطابق دارد.", + "cheatsheet.wordBoundary.title": "مرز کلمه", + "cheatsheet.wordBoundary.description": "اشاره به آخرین کاراکتر کلمات می کند که مرزی بین کلمه ی فعلی و کلمه ی بعدی می باشد.", + "cheatsheet.notWordBoundary.title": "مرکز کلمه نباشه", + "cheatsheet.notWordBoundary.description": "با کارکتر یا کلمه ایی مطابقت دارد که در انتهای یک کلمه نیست.", + + "cheatsheet.characterClasses": "عملگرهای کارکتر", + "cheatsheet.characterSet.title": "لیست کارکتر", + "cheatsheet.characterSet.description": "با هر کارکتری در لیست مطابقت دارد.", + "cheatsheet.negatedCharacterSet.title": "لیست کارکتر منفی", + "cheatsheet.negatedCharacterSet.description": "با هر کارکتری که در لیست نیست، مطابقت دارد.", + "cheatsheet.range.title": "محدوده", + "cheatsheet.range.description": "همه کارکترهای بین دوکارکتر (از جمله خودشان) را پوشش میدهد.", + "cheatsheet.dot.title": "نقطه", + "cheatsheet.dot.description": "با هر کارکتری جز خط جدید تطابق دارد.", + "cheatsheet.word.title": "کلمه", + "cheatsheet.word.description": "با تمامی کارکترهای انگلیسی ، اعداد و زیرخط مطابقت دارد.", + "cheatsheet.notWord.title": "غیر کلمه", + "cheatsheet.notWord.description": "با کارکترهای غیر از حروف انگلیسی ، اعداد و آندلاین تطابق دارد.", + "cheatsheet.digit.title": "اعداد", + "cheatsheet.digit.description": "با اعداد 0 تا 9 مطابقت دارد.", + "cheatsheet.notDigit.title": "غیر اعداد", + "cheatsheet.notDigit.description": "با هرکارکتری جز اعداد مطابقت دارد.", + "cheatsheet.space.title": "فضای سفید", + "cheatsheet.space.description": "با هر کارکتر فضای خالی مطابقت دارد.", + "cheatsheet.notSpace.title": "غیر فضای سفید", + "cheatsheet.notSpace.description": "با هرکارکتر غیر از فضای سفید مطابقت دارد.", + + "cheatsheet.flags": "پرچم ها", + "cheatsheet.caseInsensitiveFlag.title": "حساسیت به حروف", + "cheatsheet.caseInsensitiveFlag.description": "الگو را غیر حساس به حروف بزرگ و کوچک میکند.", + "cheatsheet.globalFlag.title": "جهانی", + "cheatsheet.globalFlag.description": "الگو را در اولین پیدا کردن متوقف نمیکند.", + "cheatsheet.multilineFlag.title": "چند خطی", + "cheatsheet.multilineFlag.description": "اگر فعال نباشد، شروع و پایان خط، برابر با ابتدا و انتهای جمله است و برای هر خط به صورت جداگانه کار نمیکند.", + + "cheatsheet.groupAndReferences": "گروه و مرجع", + "cheatsheet.group.title": "گروه بندی", + "cheatsheet.group.description": "یک الگو را گروه بندی میکند.", + "cheatsheet.reference.title": "مرجع", + "cheatsheet.reference.description": "شما را به گروه قبلی ارجاع میدهد.", + "cheatsheet.nonCapturingGroup.title": "گروه بندی بدون ارجاع", + "cheatsheet.nonCapturingGroup.description": "گروه بندی ایجاد میکند که قابل ارجاع نیست.", + + "cheatsheet.lookarounds": "جستجو کردن", + "cheatsheet.positiveLookahead.title": "بررسی رو به جلو مثبت", + "cheatsheet.negativeLookahead.title": "بررسی رو به جلو منفی", + "cheatsheet.positiveLookbehind.title": "بررسی رو به عقب مثبت", + "cheatsheet.negativeLookbehind.title": "بررسی رو به عقب منفی", + + "cheatsheet.quantifiersAndAlternation": "تعداد و جایزگینی", + "cheatsheet.plus.title": "بعلاوه", + "cheatsheet.plus.description": "مشخص کردن تعداد 1 یا بیشتر.", + "cheatsheet.asterisk.title": "ستاره", + "cheatsheet.asterisk.description": "مشخص کردن تعداد 0 یا بیشتر.", + "cheatsheet.quantifier.title": "کمیت", + "cheatsheet.quantifier.description": "مشخص کردن محدوده ایی برای تعداد.", + "cheatsheet.optional.title": "اختیاری", + "cheatsheet.optional.description": "وجود داشتن یا نداشتن عبارت را اختیاری میکند.", + "cheatsheet.alternation.title": "جایگزینی", + "cheatsheet.alternation.description": "انتظار میرود با حداقل یکی از عبارات مطابقت داشته باشد." +} diff --git a/src/localization/fa/general.json b/src/localization/fa/general.json new file mode 100644 index 00000000..aa975d1c --- /dev/null +++ b/src/localization/fa/general.json @@ -0,0 +1,39 @@ +{ + "general.prev": "قبلی", + "general.next": "بعدی", + "general.result": "نتیجه", + "general.regex": "regex", + "general.text": "متن", + "general.watch": "تماشا", + "general.start": "شروع", + "general.continue": "ادامه", + "general.completedStep": "مرحله تکمیل شد!", + "general.hintQuestion": "نمایش پاسخ", + "general.reportStep": "گزارش مشکل", + "general.startLearning": "شروع یادگیری", + "general.comingSoon": "به زودی", + "general.becomeSponsor": "اسپانسر شوید", + "general.learn": "آموزش", + "general.playground": "زمین تمرین", + "general.cheatsheet": "برگه تقلب", + "general.ourSponsors": "حامیان ما", + "general.share": "اشتراک گذاری", + "general.shareLinkCopied": "لینک اشتراک کپی شد!", + "general.somethingWentWrong": "مشکلی به وجود اومد!", + + "notFound.intro": "صفحه ایی که دنبال آن هستید وجود ندارد.", + "notFound.button": "بازگشت به خانه", + + "page.landing.title": "آموزش ریجکس - قدم به قدم ، از صفر تا صد", + "page.learn.title": "آموزش ریجکس - دوره تعاملی ریجکس", + "page.cheatsheet.title": "آموزش ریجکس - برگه تقلب", + "page.playground.title": "آموزش ریجکس - زمین تمرین", + "page.404.title": "آموزش ریجکس - پیدا نشد", + + "page.landing.description": "ریجکس را به صورت تعاملی یاد بگیرید، به صورت مداوم تمرین کنید و به اشتراک بگذارید.", + "page.learn.description": "ریجکس را گام به گام یاد بگیرید. آموزش ما را تکمیل کنید تا یادگیری شما به انتها برسد.", + "page.cheatsheet.description": "بعضی وقت ها نیاز به یادآوری ریجکس در ذهن خود دارد. از برگه تقلب برای یادآوری استفاده کنید.", + "page.playground.description": "شما به راحتی میتوانید الگوی ریجکس خود را به صورت آنلاین در زمین تمرین بسازید و آزمایش کنید.", + + "learn.safari.unsupportWarning": "ریجکس در این مرحله توسط برخی از مرورگرها پشتیبانی نمی شود. اگر برای عبور از این مرحله مشکل دارید، اینجا را کلیک کنید" +} diff --git a/src/localization/fa/index.js b/src/localization/fa/index.js new file mode 100644 index 00000000..a30a668d --- /dev/null +++ b/src/localization/fa/index.js @@ -0,0 +1,17 @@ +import cheatsheet from './cheatsheet.json'; +import general from './general.json'; +import landing from './landing.json'; +import learn from './learn.json'; +import lessons from './lessons.json'; +import regexForSeo from './lessons/regexForSeo.json'; + +const messages = { + ...cheatsheet, + ...general, + ...landing, + ...learn, + ...lessons, + ...regexForSeo, +}; + +export default messages; diff --git a/src/localization/fa/landing.json b/src/localization/fa/landing.json new file mode 100644 index 00000000..80376ed9 --- /dev/null +++ b/src/localization/fa/landing.json @@ -0,0 +1,26 @@ +{ + "landing.title": "یادگیری ریجکس به صورت گام به گام ، از صفر تا صد.", + "landing.description": "یادگیری ریجکس از چیزی که فکر میکنید ، ساده تر است. میتوانید از این وب سایت برای `یادگیری`، `تمرین`، `تست` و `اشتراک گذاری` استفاده کنید.", + "landing.imageAltText": "تصویر مردی که پاهایش را روی میز گذاشته است.", + + "section.learn.title": "آموزش", + "section.learn.content": "کلمه Regular Expressions که به اختصار Regex یا Regexp نامیده می شود، رشته ای از کاراکترها هستند که در چارچوب قوانین نحوی Regex ایجاد شده اند. شما به راحتی می توانید داده های خود را با Regex مدیریت کنید که از دستوراتی مانند یافتن، تطبیق و ویرایش استفاده می کند. Regex را می توان در زبان های برنامه نویسی مانند Python، SQL، JavaScript، R، Google Analytics، Google Data Studio و در طول فرآیند کدنویسی استفاده کرد. هم اکنون regex را با مثال ها و آموزش های RegexLearn به صورت آنلاین بیاموزید.", + "section.learn.imageAltText": "تصویر کوه با پرچمی بر قله آن.", + + "section.cheatsheet.button": "همین الان بررسی کنید", + "section.cheatsheet.title": "برگه تقلب", + "section.cheatsheet.content": "با برگه تقلب ریجکس میتونید همه آنچه نیاز دارید را به طور همزمان بررسی کنید. تمام الگوها و نمادها در برگه تقلب وجود دارند.", + "section.cheatsheet.imageAltText": "تصویر مردی که صفحات را با دوربین دوچشمی مشاهده میکند.", + + "section.playground.title": "زمین تمرین", + "section.playground.content": "اگر میخواهید یک ریجکس بسازید و آن را آزمایش کنید، میتوانید از طریق زمین بازی این کار را انجام دهید و با دیگران به اشتراک بگذارید.", + "section.playground.imageAltText": "تصویر گربه ایی در حال انداختن لیوان پر.", + + "section.practice.title": "تمرین", + "section.practice.content": "اگر بخش یادگیری را تکمیل کرده اید، زمان تمرین کردن رسیده! در بخش تمرین میتوانید دانش خود را ارتقا دهید. به زودی در دسترس قرار خواهد گرفت.", + "section.practice.imageAltText": "تصویر زنی که از یک کتاب یادداشت میکند.", + + "section.opensource.title": "منبع باز", + "section.opensource.content": "این وب سایت یک پروژه منبع باز است که از مشارکت های داخل جامعه استقبال میکند و همچنین استفاده از آن رایگان است. کار بر روی این پروژه به شما امکان میدهد مهارت های خود را تقویت کنید. شما میتوانید در زیر مشارکت و حمایت کنید.", + "section.opensource.imageAltText": "تصویری از یک زن، یک مرد و یک گربه که قطعات پازل را کنار هم میچینند." +} diff --git a/src/localization/fa/learn.json b/src/localization/fa/learn.json new file mode 100644 index 00000000..e94a9fdd --- /dev/null +++ b/src/localization/fa/learn.json @@ -0,0 +1,163 @@ +{ + "examples.starter.title": "تمرین", + "examples.starter.description": "اکنون زمان آن رسیده است که برای تثبیت آموخته هایمان ، کمی تمرین کنیم.", + + "examples.finish.title": "تمرین به پایان رسید!", + "examples.finish.description": " ", + + "steps.starter.title": "مقدمه", + "steps.starter.description": "Regex مخفف عبارت `Regular Expression` است. و برای یافتن یا مدریت الگوی خاصی در متن به ما کمک میکند. با تایپ کلمه `OK` در قسمت regex شروع کنید تا به مرحله اول بروید.", + + "steps.whatIsRegex.title": "عبارات منظم یا `Regex` چیست؟", + "steps.whatIsRegex.description": "عبارات منظم، رشته ای از کاراکترها هستند که یک الگوی جستجو را بیان می کنند و اغلب `Regex` یا `Regexp` خوانده میشود. ریجکس به ویژه برای یافتن یا جایگزینی کلمات در متون استفاده میشود. و همچنین میتوانیم بررسی کنیم که آیا یک متن با الگویی که تنظیم کردیم ، مطابقت دارد یا خیر.\\n\\n برای مثال، فرض کنید فهرستی از نام فایل ها دارید و شما فقط میخواهید فایل هایی با پسوند `pdf` را پیدا کنید. برای این کار از الگو `^\\w+\\.pdf$` استفاده میکنیم. معنی نماد ها را در مراحل پیشرفته تر توضیح خواهیم داد.", + + "steps.basicMatchers.title": "تطبیق های ابتدایی", + "steps.basicMatchers.description": "کاراکتر یا کلمه ای که می خواهیم پیدا کنیم مستقیماً نوشته می شود. دقیقا شبیه یک فرایند جستجو معمولی است. به عنوان مثال، برای یافتن کلمه `curious` در متن ، همان را در الگو تایپ میکنیم.", + + "steps.dotCharacter.title": "نقطه `.`: هر کارکتری", + "steps.dotCharacter.description": "علامت نقطه `.` امکان انتخاب هر کاراکتری، از جمله کاراکترها و فاصله‌های خاص را می‌دهد. برای ادامه یک نقطه `.` را در قسمت regex تایپ کنید.", + + "steps.characterSet.title": "لیست کاراکترها `[abc]`", + "steps.characterSet.description": "اگر لیستی از کارکتر ها داشته باشیم که بدانیم حداقل یکی از آن ها در الگوی ما وجود خواهند داشت ، آن ها را در پرانتز [] می نویسیم. برای مثال اگر بخواهیم تمامی کلمات متن زیر را بدست بیاوریم، باید کارکتر های `a` `e` `i` `o` `u` را در `[]` تایپ کنیم.", + + "steps.negatedCharacterSet.title": "لیست کاراکترهای منفی `[^abc]`", + "steps.negatedCharacterSet.description": "برای پیدا کردن تمامی کلمات متن زیر بجز کلمات `ber` و `bor` باید از نماد `^` در داخل `[]` استفاده کنید. این نماد کارکتر هایی غیر از کارکترهای داخل براکت را انتخاب میکند.", + + "steps.range.title": "محدوده حروف`[a-z]`", + "steps.range.description": "برای یافتن حروف در محدوده مشخص شده، حرف شروع و حرف پایانی در براکت `[]` با خط تیره بین آنها `-` نوشته می‌شود. این محدوده به حروف بزرگ و کوچک حساس است. عبارتی را تایپ کنید که تمام حروف کوچک بین `e` و `o` (به همراه خودشان) را انتخاب کند.", + + "steps.rangeNumber.title": "محدوده شماره`[0-9]`", + "steps.rangeNumber.description": "برای یافتن اعداد در محدوده مشخص شده، عدد شروع و عدد پایانی در براکت `[]` با خط تیره `-` بین آنها نوشته می شود. عبارتی بنویسید که تمام اعداد بین `3` و `6` از جمله خودشان را انتخاب کند.", + + "examples.basicMatchers.title": "تمرین: تطبیق های ابتدایی", + "examples.basicMatchers.description": "عبارتی را بنویسید که کلمات `of` را در متن انتخاب کند.", + + "examples.dotCharacter.title": "تمرین: هر کارکتری", + "examples.dotCharacter.description": "عبارتی را برای انتخاب همه حروف، اعداد، فاصله و کاراکترهای خاص در متن تایپ کنید. عبارتی که تایپ میکنید باید با هر کارکتری مطابقت داشته باشد.", + + "examples.characterSet.title": "تمرین: لیست کارکتر ها", + "examples.characterSet.description": "عبارتی را بنویسید که با تمامی کلمات در متن مطابقت داشته باشد. تنها کارکترهایی که تغییر میکنند حروف اول هستند.", + + "examples.negatedCharacterSet.title": "تمرین: لیست کاراکترهای منفی", + "examples.negatedCharacterSet.description": "عبارتی را بنویسید که با هر چیزی غیر از کلمات `beor` و `beur` در متن مطابقت دارد. این کار را با استفاده از لیست کارکترهای منفی انجام دهید.", + + "examples.range.title": "تمرین: محدوده حروف", + "examples.range.description": "عبارتی را بنویسید که حروف `g` تا `k` را در متن انتخاب کند.\\nخود حروف `g` و `k` نیز باید در این محدوده گنجانده شوند.", + + "examples.rangeNumber.title": "تمرین: محدوده اعداد", + "examples.rangeNumber.description": "عبارتی را برای انتخاب اعداد `2` تا `7` در متن تایپ کنید.\\n`2` و `7` نیز باید در این محدوده گنجانده شوند.", + + "steps.repetitions.title": "تکرارها", + "steps.repetitions.description": "برخی از کاراکترهای ویژه برای تعیین تعداد تکرار یک کاراکتر در متن استفاده می شود. این کارکتر های خاص عبارتند از بعلاوه `+` ، ستاره `*` و علامت سوال `?` .", + + "steps.asterisk.title": "ستاره `*`", + "steps.asterisk.description": "ما یک ستاره `*` بعد از یک کاراکتر قرار می دهیم تا نشان دهد که این کاراکتر ممکن است اصلاً تکرار نشود و یا می تواند چندین بار تکرار شود. به عنوان مثال، نشان دهید که حرف `e` هرگز نباید در متن وجود داشته باشد یا اینکه میتواند هرچند بار ، پشت سرهم تکرار شود.", + + "steps.plusCharacter.title": "علامت بعلاوه `+`", + "steps.plusCharacter.description": "برای نشان دادن اینکه یک کاراکتر می‌تواند حداقل یک یا چند بار تکرار شود، بعد از یک کاراکتر علامت مثبت `+` قرار می‌دهیم. برای مثال کلماتی را در متن زیر انتخاب کنید که کارکتر `e` در آنها حداقل یکبار تکرار شود.", + + "steps.questionMark.title": "علامت سوال `?`", + "steps.questionMark.description": "برای نشان دادن اختیاری بودن یک کاراکتر، بعد از یک کاراکتر علامت سوال `?` قرار می دهیم. برای مثال کلماتی را در متن زیر انتخاب کنید که کارکتر `u` در آن اختیاری باشد.", + + "steps.quantifier.title": "آکولاد - 1", + "steps.quantifier.description": "برای مشخص کردن تعداد معینی از وقوع (تکرار) یک کاراکتر، در انتهای کارکتر از آکولاد `{n}` به همراه تعداد دفعاتی که می‌خواهیم رخ دهد، استفاده میکنیم. برای مثال کلماتی را در متن زیر انتخاب کنید که دقیقا `2` عدد کارکتر `e` داشته باشند.", + + "steps.quantifierMin.title": "آکولاد - 2", + "steps.quantifierMin.description": "برای مشخص کردن حداقل تعداد تکرار یک کارکتر باید دقیقا بعد از مشخص کردن تعداد حداقلی تکرار از علامت `,` استفاده کنید و آن را داخل آکولاد به این شکل `{n,}` قرار دهید. برای مثال کلماتی را انتخاب کنید که کارکتر `e` در آنها حداقل `3` بار یا بیشتر تکرار شود.", + + "steps.quantifierRange.title": "آکولاد - 3", + "steps.quantifierRange.description": "برای مشخص کردن تعداد یک کاراکتر در یک محدوده اعداد مشخص، اعداد را داخل آکولاد به این شکل `{x,y}` مینوسیم. برای مثال کلماتی را در متن زیر انتخاب کنید که کارکتر `e` در آنها `1` الی `3` بار تکرار شود.", + + "examples.asterisk.title": "تمرین: ستاره `*`", + "examples.asterisk.description": "از ستاره `*` برای نوشتن عبارتی استفاده کنید که هر کلمه ایی را انتخاب می کند که حرف `e` در آن ها به تعداد صفر یا بیشتر تکرار شده باشد.", + + "examples.plusCharacter.title": "تمرین: علامت بعلاوه `+`", + "examples.plusCharacter.description": "عبارت را با استفاده از علامت مثبت `+` بنویسید تا کلماتی را انتخاب کنید که در آنها حرف `e` یک یا چند بار در متن آمده است.", + + "examples.questionMark.title": "تمرین: علامت سوال `?`", + "examples.questionMark.description": "عبارتی را بنویسید که نشان می دهد حرف `n` در متن اختیاری است، استفاده کنید از علامت سوال `?`. بنابراین هردو کلمه `a` و `an` را میتوان انتخاب کرد.", + + "examples.quantifier.title": "تمرین: آکولاد - 1", + "examples.quantifier.description": "عبارتی را با استفاده از آکولاد `{}` بنویسید که متن‌های حاوی اعدادی که `4` بار در کنار هم هستند را پیدا می‌کند. به یاد داشته باشید که محدوده `[0-9]` با یک عدد تک رقمی مطابقت دارد.", + + "examples.quantifierMin.title": "تمرین: آکولاد - 2", + "examples.quantifierMin.description": "عبارتی را با استفاده از آکولاد `{}` بنویسید که متون حاوی حداقل `2` عدد را در کنار هم پیدا کند.", + + "examples.quantifierRange.title": "تمرین: آکولاد - 3", + "examples.quantifierRange.description": "عبارتی را با استفاده از آکولاد `{}` بنویسید که متون حاوی حداقل `1` و حداکثر `4` عدد را در کنار هم پیدا کند.", + + "steps.grouping.title": "پرانتز `( )`: گروه بندی", + "steps.grouping.description": "ما می توانیم یک عبارت را گروه بندی کنیم و از این گروه ها برای ارجاع یا اجرای برخی قوانین استفاده کنیم. برای گروه بندی یک عبارت، آن را در () قرار میدهیم. در حال حاضر تنها گروه ما در زیر باید `haa` باشد.", + + "steps.groupReference.title": "ارجاع (اشاره) به یک گروه", + "steps.groupReference.description": "کلمات `ha` و `haa` در زیر گروه بندی شده اند. با نوشتن `\\1` گروه اول را صدا میزنیم و آن بخش را از بازنویسی دوباره بی نیاز میکنیم. در اینجا عدد `1` ترتیب گروه را نشان میدهد. برای اشاره به گروه دوم، در انتهاب عبارت، عبارت `\\2` را تایپ کنید. ", + + "steps.nonCapturingGrouping.title": "پرانتز `(?:)`: گروه‌بندی غیرقابل ارجاع", + "steps.nonCapturingGrouping.description": "می توانید یک عبارت را گروه بندی کنید و اطمینان حاصل کنید که توسط مراجع ضبط نشده است. برای مثال در زیر دو گروه وجود دارد. با این حال، اولین گروه که با استفاده از `\\1` صدا زده میشود، در واقع گروه دوم است، زیرا گروه اول غیر قابل ارجاع (صدازدن) میباشد. ", + + "steps.pipeCharacter.title": "کاراکتر پایپ `|`", + "steps.pipeCharacter.description": "نماد `|` معنیه <<یا>> در برنامه نویسی را میدهد و اجازه میدهد از چندین عبارت در یک الگو استفاده کنید. این نماد با لیست کارکتر `[abc]` متفاوت است، زیرا لیست کارکترها در سطح کارکتر عمل میکند، اما کارکتر پایپ در سطح الگو است. عبارت زیر هم `cat` و هم `rat` را انتخاب میکند. یک علامت پایپ دیگر به آخر الگو اضافه کنید تا عبارت `dog` را هم انتخاب کند.", + + "steps.escapeCharacter.title": "کاراکتر فرار `\\`", + "steps.escapeCharacter.description": "کاراکترهای خاصی وجود دارد که هنگام نوشتن ریجکس از آنها استفاده می کنیم.برای اینکه بتوانیم از خود کارکتر های `{} [] / \\ + * . & ^ | ?` استفاده کنیم(دقیقا خود همان کارکتر بدون معنی آن)، باید از یک کارکتر فرار `\\` قبل از آن استفاده کنیم. برای مثال برای انتخاب خود کارکتر نقطه `.` و ستاره `*` در متن باید از کارکتر فرار `\\` استفاده کنید.", + + "steps.caret.title": "علامت هَت `^`:\\nانتخاب با شروع خط", + "steps.caret.description": "ما از `[0-9]` برای یافتن اعداد استفاده می‌کردیم. برای پیدا کردن اعدادی که فقط اول خط هستند باید از علامت `^` قبل از شروع الگو استفاده کنیم.", + + "steps.dollar.title": "علامت دلار `$`:\\nانتخاب با پایان خط", + "steps.dollar.description": "بیایید از علامت `$` بعد از مقدار `html` استفاده کنیم تا متون `html` را فقط در انتهای خط پیدا کنیم.", + + "steps.wordCharacter.title": "کاراکتر کلمه `\\w`: حرف، عدد و آندرلاین", + "steps.wordCharacter.description": "عبارت `\\w` برای یافتن حروف انگلیسی، اعداد و کاراکترها زیرخط استفاده می شود. بیاید از علامت `\\w` برای پیدا کردن کلمات زیر استفاده کنیم.", + + "steps.withoutWordCharacter.title": "به جز کاراکتر کلمه `\\W`", + "steps.withoutWordCharacter.description": "عبارت `\\W` برای یافتن کاراکترهایی غیر از حروف انگلیسی، اعداد و زیرخط استفاده می‌شود.", + + "steps.numberCharacter.title": "کاراکتر عددی `\\d`", + "steps.numberCharacter.description": "عبارت `\\d` فقط برای یافتن کاراکترهای عددی استفاده می شود.", + + "steps.withoutNumberCharacter.title": "به جز کارکترهای عددی `\\D`", + "steps.withoutNumberCharacter.description": "عبارت `\\D` برای یافتن کاراکترهای غیر عددی استفاده می شود.", + + "steps.spaceCharacter.title": "کاراکتر فضای خالی `\\s`", + "steps.spaceCharacter.description": "عبارت `\\s` فقط برای یافتن کاراکترهای فاصله (فضای سفید) استفاده می شود.", + + "steps.withoutSpaceCharacter.title": "به جز فضای خالی `\\S`", + "steps.withoutSpaceCharacter.description": "عبارت `\\S` برای یافتن کاراکترهای غیر فاصله (فضای سفید) استفاده می شود.", + + "steps.lookarounds.title": "جستجو کردن", + "steps.lookarounds.description": "اگر می‌خواهیم عبارتی که می‌نویسیم قبل یا بعد از عبارت دیگری بیاید، باید از `Lookaround` استفاده کنیم.", + + "steps.positiveLookahead.title": "بررسی رو به جلو مثبت: `(?=)`", + "steps.positiveLookahead.description": "برای مثال می خواهیم مقدار ساعت را در متن انتخاب کنیم. بنابراین، برای انتخاب فقط مقادیر عددی که بعد از آنها کمله `PM` قرار دارند، باید بررسی رو به جلو مثبت (Positive Lookahead) `(?=)` را بعد از عبارت خود بنویسیم. `PM` را بعد از علامت `=` داخل پرانتز قرار دهید.", + + "steps.negativeLookahead.title": "بررسی رو به جلو منفی: `(؟!)`", + "steps.negativeLookahead.description": "برای مثال می خواهیم اعدادی غیر از مقدار ساعت را در متن انتخاب کنیم. بنابراین، باید بررسی رو به جلو منفی (Negative Lookahead) `(?!)` را بعد از عبارت خود بنویسیم تا فقط مقادیر عددی را انتخاب کنیم که بعد از آنها `PM` وجود ندارد. `PM` را بعد از علامت `!` داخل پرانتز قرار دهید.", + + "steps.positiveLookbehind.title": "بررسی رو به عقب مثبت: `(?<=)`", + "steps.positiveLookbehind.description": "برای مثال می خواهیم مقدار قیمت را در متن انتخاب کنیم. بنابراین، برای انتخاب فقط مقادیر عددی که بعد از علامت $ هستند، باید بررسی رو به عقب مثبت (Positive Lookbehind) `(?<=)` را قبل از عبارت خود بنویسیم. بعد از علامت `=` داخل پرانتز، `\\$` را اضافه کنید.", + + "steps.negativeLookbehind.title": "بررسی رو به عقب منفی: `(؟