From dfeb7b4f6201bcd3f28f33b132685cf570998385 Mon Sep 17 00:00:00 2001 From: David Kadaria <94402615+davidkadaria@users.noreply.github.com> Date: Wed, 15 May 2024 09:20:58 +0400 Subject: [PATCH 1/7] Add Georgian translation (#352) * Added Georgian to langNames list * Added module for Georgian translation with initial files from locale EN * Fully translated landing.json * Fully translated general.json * Fully translated lessons.json * Translated ~30% of learn.json * Some improvements to the existing translated texts * Some improvements to the existing translated texts * Some improvements to the existing translated texts * Some improvements to the existing translated texts * Translated title and description of the cheatsheet page * Modified slogan tranlation * Modified slogan tranlation for the landing page * Translated Repetitions lesson * Translated asterisk lesson * Translated plus sign lesson * Translated question mark lesson * Translated curly braces lesson (1) * Translated curly braces lesson (2) * Translated curly braces lesson (3) * Translated arterisk practice * Translated plus sign practice * Translated question mark practice * Translated curly braces practice (1) * Translated curly braces practice (2) * Translated curly braces practice (3) * Translated parentheses (grouping) lesson * Changed title for the parentheses lesson * Translated Referencing a Group lesson * Translated Space Character lesson * Translated Except Space Character lesson * Translated Lookarounds intro * Translated Parentheses : Non-capturing Grouping lesson * Translated Pipe Character lesson * Translated Escape Character lesson * Translated Caret Sign ^ lesson * Translated Dollar Sign $ lesson * Translated Word Character lesson * Modified title for the Word Character lesson * Translated Except Word Character lesson * Translated Number Character lesson * Translated Except Number Character lesson * Fix typo for the Lookarounds lesson * Translated Positive Lookahead lesson * Improved Positive Lookahead lesson * Translated Negative Lookahead lesson * Translated Positive Lookbehind lesson * Translated Negative Lookbehind lesson * Improved Negative Lookahead lesson * Translated Flags lesson * Improved Flags lesson * Translated Global Flag lesson * Translated Multiline Flag lesson * Translated Case-insensitive Flag lesson * Translated Greedy Matching lesson * Translated Lazy Matching lesson * Translated Congratulations page * Changed translation globally for the word 'step' * learn.json: Removed original texts and double-checked for typos; Found and fixed some typos * landing.json: fixed some typos * general.json: fixed some typos * Improved learn.json file's contents * Translated cheatsheet.json file * Fixed typos in the cheatsheet.json file * Translated Regex for SEO lesson * Translated Use Cases lesson * Translated Basics lesson * Translated Or Operator lesson * Translated Optional Operator lesson * Translated Anything lesson * Translated Contains lesson * Translated Negated Character Sets lesson * Translated Caret Sign lesson * Translated Dollar Sign and Escape Character lesson * Translated Length Restrictions lesson * Translated Length Restrictions (Maximum) lesson * Translated Length Restrictions (Minumum) lesson * modified Use Cases lesson * Translated robots.txt (regex-like syntax) lesson * Translated .htaccess lesson * Translated Outro * Made some improvements in the regexForSeo tutorial * Removed original texts from the regexForSeo tutorial file * Fix typos in the regexForSeo tutorial * Update README.md: Remove Georgian from the requested translations list and add it to the supported languages list * Add 'ka' to the valid path list --- README.md | 2 +- scripts/html-lang-fixer.js | 2 +- src/localization/index.ts | 1 + src/localization/ka/cheatsheet.json | 70 ++++++++ src/localization/ka/general.json | 39 +++++ src/localization/ka/index.js | 17 ++ src/localization/ka/landing.json | 26 +++ src/localization/ka/learn.json | 163 +++++++++++++++++++ src/localization/ka/lessons.json | 7 + src/localization/ka/lessons/regexForSeo.json | 49 ++++++ 10 files changed, 374 insertions(+), 2 deletions(-) create mode 100644 src/localization/ka/cheatsheet.json create mode 100644 src/localization/ka/general.json create mode 100644 src/localization/ka/index.js create mode 100644 src/localization/ka/landing.json create mode 100644 src/localization/ka/learn.json create mode 100644 src/localization/ka/lessons.json create mode 100644 src/localization/ka/lessons/regexForSeo.json diff --git a/README.md b/README.md index 075bc2ee..d77ffd9f 100644 --- a/README.md +++ b/README.md @@ -40,11 +40,11 @@ the way: - 🇰🇷 Korean - 🇧🇷 Brazilian Portuguese - 🇨🇿 Czech +- 🇬🇪 Georgian ### Requested Translations - 🇦🇪 Arabic [(Issue)](https://github.com/aykutkardas/regexlearn.com/issues/163) -- 🇬🇪 Georgian [(Issue)](https://github.com/aykutkardas/regexlearn.com/issues/274) - 🇧🇩 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) diff --git a/scripts/html-lang-fixer.js b/scripts/html-lang-fixer.js index 89c17af0..ff2aa90b 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)\/?/); + const result = currentPath.match(/^\.\/out\/(en|es|de|tr|uk|fr|ru|pl|ko|zh-cn|pt-br|cs-cz|ka)\/?/); if (result) { replaceLangTag(currentPath, result[1]); diff --git a/src/localization/index.ts b/src/localization/index.ts index 58790802..9edc8870 100644 --- a/src/localization/index.ts +++ b/src/localization/index.ts @@ -7,6 +7,7 @@ export const langNames = { ru: '🇷🇺', 'zh-cn': '🇨🇳', uk: '🇺🇦', + ka: '🇬🇪', ko: '🇰🇷', pl: '🇵🇱', 'pt-br': '🇧🇷', diff --git a/src/localization/ka/cheatsheet.json b/src/localization/ka/cheatsheet.json new file mode 100644 index 00000000..5089d054 --- /dev/null +++ b/src/localization/ka/cheatsheet.json @@ -0,0 +1,70 @@ +{ + "cheatsheet.section.title": "Regex-ის ზოგადი განმარტებები", + "cheatsheet.section.description": "შეისწავლეთ ყველა Regex-ნიმუში და სიმბოლო ზოგადი განმარტებების გამოყენებით", + + "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": "შესაბამისობაში მოდის ნებისმიერ რიცხობრივ სიმბოლოსთან.", + "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": "გამოსახულება შესაბამისობაში მოდის ერთ ან მეტ სიმბოლოსთან.", + "cheatsheet.asterisk.title": "ვარსკვლავი", + "cheatsheet.asterisk.description": "გამოსახულება შესაბამისობაში მოდის ნულ ან მეტ სიმბოლოსთან.", + "cheatsheet.quantifier.title": "გამეორება", + "cheatsheet.quantifier.description": "გამოსახულება შესაბამისობაში მოდის დიაპაზონით წარმოდგენილი რაოდენობის სიმბოლოსთან.", + "cheatsheet.optional.title": "არასავალდებულო", + "cheatsheet.optional.description": "გამოსახულებას არასავალდებულოდ აქცევს.", + "cheatsheet.alternation.title": "ალტერნატივა", + "cheatsheet.alternation.description": "მუშაობს „ან“ ოპერატორის მსგავსად. ელის, როდის მოხდება რომელიმე წინასწარ განსაზღვრული გამოსახულების შესაბამისობაში მოსვლა ტექსტთან." +} diff --git a/src/localization/ka/general.json b/src/localization/ka/general.json new file mode 100644 index 00000000..5d54e42a --- /dev/null +++ b/src/localization/ka/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": "Regex Learn - ეტაპობრივად, ნულიდან მაღალ დონეზე.", + "page.learn.title": "Regex Learn - Regex-ის ინტერაქციული კურსი", + "page.cheatsheet.title": "Regex Learn - ზოგადი განმარტებები", + "page.playground.title": "Regex Learn - სავარჯიშო სივრცე", + "page.404.title": "Regex Learn - არ მოიძებნა", + + "page.landing.description": "ისწავლეთ Regex-ი ინტერაქციულად, აკეთეთ თქვენი ცოდნის დონის შესაბამისი სავარჯიშოები, შეამოწმეთ და გააზიარეთ თქვენ მიერ დაწერილი Regex-ი.", + "page.learn.description": "ისწავლეთ Regex-ი ეტაპობრივად. გაიარეთ ინტერაქციული კურსი, რომელიც სწავლის პროცესს უფრო მარტივს და სწრაფს გახდის.", + "page.cheatsheet.description": "ხანდახან უბრალოდ გჭირდებათ, რომ გადაიმეოროთ Regex-ი. სცადეთ, გამოიყენოთ ზოგადი განმარტებები, რაც დაგეხმარებათ, უკეთ გაიაზროთ ან გაიხსენოთ მივიწყებული საკითხები.", + "page.playground.description": "შეგიძლიათ მარტივად ააგოთ და გამოცადოთ თქვენი Regex-ნიმუში ონლაინ, სავარჯიშო სივრცის გამოყენებით.", + + "learn.safari.unsupportWarning": "Regex-ი ამ ეტაპზე ზოგიერთი ბრაუზერის მიერ მხარდაჭერილი არ არის. თუკი ამ ნაბიჯის გადალახვას ვერ ახერხებთ, შეგიძლიათ აქ დააწკაპუნოთ." +} diff --git a/src/localization/ka/index.js b/src/localization/ka/index.js new file mode 100644 index 00000000..a30a668d --- /dev/null +++ b/src/localization/ka/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/ka/landing.json b/src/localization/ka/landing.json new file mode 100644 index 00000000..12d8a7f4 --- /dev/null +++ b/src/localization/ka/landing.json @@ -0,0 +1,26 @@ +{ + "landing.title": "ისწავლეთ Regex-ი ეტაპობრივად, ნულიდან მაღალ დონეზე.", + "landing.description": "Regex-ის შესწავლა იმაზე მარტივია, ვიდრე წარმოგიდგენიათ. შეგიძლიათ გამოიყენოთ წინამდებარე მასალა, რათა `ისწავლოთ`, `ივარჯიშოთ`, `გამოცადოთ` და `გააზიაროთ` Regex-ი მარტივად.", + "landing.imageAltText": "ილუსტრაცია მოდუნებული კაცისა, რომელსაც ფეხები მაგიდაზე შემოუწყვია.", + + "section.learn.title": "სწავლა", + "section.learn.content": "`რეგულარული გამოსახულება`, შემოკლებით 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": "`RegexLearn-ის ზოგადი განმარტებების` გამოყენებით შეგიძლიათ ერთბაშად იხილოთ Regex-ის მოხმარების ყველა მაგალითი და გამოცადოთ ისინი უშუალოდ ამ ერთი გვერდიდან. შეისწავლეთ ყველა Regex-ნიმუში და სიმბოლო ზოგადი განმარტებების გამოყენებით.", + "section.cheatsheet.imageAltText": "ილუსტრაცია კაცისა, რომელიც გვერდებს ბინოკლით აკვირდება.", + + "section.playground.title": "სავარჯიშო სივრცე", + "section.playground.content": "თუ გსურთ, დააგენერიროთ Regex-ი, ამაში სავარჯიშო სივრცე დაგეხმარებათ, სადაც შეგიძლიათ ძალიან მარტივად ააგოთ და გამოცადოთ Regex-ნიმუშები. თქვენ, როგორც Regex-ტესტერს, შეგიძლიათ შეამოწმოთ ამა თუ იმ Regex-ის სისწორე და გაუზიაროთ იგი სხვებს კოლაბორაციული მუშაობისთვის.", + "section.playground.imageAltText": "ილუსტრაცია კატისა, რომელიც სადაცაა პირთამდე სავსე ჭურჭელს გადმოაგდებს.", + + "section.practice.title": "პრაქტიკა", + "section.practice.content": "როდესაც სასწავლო მასალის ნაწილს ამოწურავთ, დგება დრო ცოდნის პრაქტიკაში გამოყენებისა! პრაქტიკული მუშაობის განყოფილებაში შეგიძლიათ შეამოწმოთ თქვენი ცოდნა Regex-ის კონტექსტში და ივარჯიშოთ სათანადო მასალებზე დაყრდნობით, თქვენი ცოდნის შესაბამისად. ეს ფუნქცია მალე დაემატება.", + "section.practice.imageAltText": "ილუსტრაცია ქალბატონისა, რომელიც ახორციელებს შენიშვნების ამოკრებას წიგნიდან.", + + "section.opensource.title": "ღია რესურსი", + "section.opensource.content": "Regex Learn — ეს არის ღია პროექტი, რომელიც მიესალმება ნებისმიერი მსურველის მიერ მის განვითარებაში შეტანილ ნებისმიერი სახის წვლილს და არის სრულიად უფასო. ამ პროექტზე მუშაობა საშუალებას მოგცემთ გაიუმჯობესოთ უნარები, ისწავლოთ და ითანამშრომლოთ სხვებთან. შეგიძლიათ მხარში ამოუდგეთ პროექტს და ხელი შეუწყოთ მის განვითარებას.", + "section.opensource.imageAltText": "ილუსტრაცია ქალბატონისა, ბატონისა და კატისა, რომლებიც თავსატეხის ფრაგმენტებს ერთად უყრიან თავს." +} diff --git a/src/localization/ka/learn.json b/src/localization/ka/learn.json new file mode 100644 index 00000000..7decda94 --- /dev/null +++ b/src/localization/ka/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`, რათა გადახვიდეთ პირველ ეტაპზე, სადაც მოცემული იქნება უფრო დეტალური აღწერა..", + + "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`-ისა, კვადრატულ ფრჩხილებში `[]`, ახარისხების სიმბოლოს `^` შემდეგ შეიყვანეთ `e` და `o` სიმბოლოები გვერდი-გვერდ.", + + "steps.range.title": "ასოთა დიაპაზონი `[a-z]`", + "steps.range.description": "იმისათვის, რომ განსაზღვრულ დიაპაზონში ვიპოვოთ ასოები, საწყისსა და საბოლოო ასოებს ვწერთ კვადრატულ ფრჩხილებში `[]` და ერთმანეთისაგან დეფისით `-` გამოვყოფთ. აღსანიშნავია, რომ მსგავსი ჩანაწერი რეგისტრის მიმართ მგრძნობიარეა. შეადგინეთ ისეთი გამოსახულება, რომელიც აარჩევს ყველა ასოს `e`-სა და `o`-ს შორის, საწყისი და საბოლოო ასოების (`e` და `o`) ჩათვლით.", + + "steps.rangeNumber.title": "ციფრთა დიაპაზონი `[0-9]`", + "steps.rangeNumber.description": "იმისათვის, რომ განსაზღვრულ დიაპაზონში ვიპოვოთ ციფრები, საწყისსა (უმცირესი) და საბოლოო (უდიდესი) ციფრებს ვწერთ კვადრატულ ფრჩხილებში `[]` და ერთმანეთისაგან დეფისით `-` გამოვყოფთ. შეადგინეთ ისეთი გამოსახულება, რომელიც აარჩევს ყველა ციფრს `3`-ს და `6`-ს შორის, საწყისი და საბოლოო ციფრების (`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}`, რომლითაც აღვნიშნავთ, რამდენჯერ უნდა მეორდებოდეს ეს კონკრეტული სიმბოლო ტექსტში. მაგალითად, ქვემოთ მოცემული ტექსტისათვის შეადგინეთ რეგულარული გამოსახულება, რომლითაც აღნიშნავთ, რომ ასო `e` უნდა მეორდებოდეს მხოლოდ `2`-ჯერ.", + + "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": "Regex-ში გვაქვს შესაძლებლობა, მოვახდინოთ გამოსახულებების კლასიფიცირება (დაჯგუფება) და შემდგომში გამოვიყენოთ ეს ჯგუფები სხვადასხვა ინსტრუქციების სისრულეში მოსაყვანად. რეგულარული გამოსახულებების კლასიფიცირებისათვის ვიყენებთ ფრჩხილებს `()`. ამჯერად მოდით, დაწერეთ გამოსახულება, რომელიც ქვემოთ მოცემული ტექსტისათვის მოახდენს `haa`-ს კლასიფიცირებას.", + + "steps.groupReference.title": "ჯგუფზე მითითება", + "steps.groupReference.description": "ქვემოთ მოცემულ მაგალითში კლასიფიცირებულია სიტყვები `ha` და `haa`. პირველ ჯგუფზე მითითება ხდება `\\1`-ის დაწერით (ამ გზით თავს ვარიდებთ გამოსახულების ერთი და იგივე ფრაგმენტის ხელახლა გადაწერას). ამ შემთხვევაში, `1` აღნიშნავს ჯგუფის რიგის ნომერს. დაწერეთ `\\2` ქვემოთ მოცემული გამოსახულების ბოლოში, რათა მოახდინოთ მითითება მეორე ჯგუფზე.", + + "steps.nonCapturingGrouping.title": "ფრჩხილები `(?: )`: დაჯგუფება რიგის ნომრის მინიჭების გარეშე", + "steps.nonCapturingGrouping.description": "შეგიძლიათ გამოსახულებების კლასიფიცირება იმგვარადაც, რომ არ დაუშვათ მასზე მიწვდომა (მითითება) რიგის ნომრით. მაგალითად, ქვემოთ მოცემულია ორი ჯგუფი. თუმცა, პირველ ჯგუფზე მითითება, რომელსაც აღვნიშნავთ `\\1`-ით, სინამდვილეში მიუთითებს მეორე ჯგუფზე, რადგან პირველ ჯგუფს არ აქვს მინიჭებული რიგის ნომერი. დაწერეთ `\\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": "თუ გვინდა, რომ ფრაზა, რომელსაც ვწერთ, მოსდევდეს ანდა წინ უსწრებდეს რაიმე სხვა ფრაზას, უნდა „მიმოვიხედოთ“. გადადით შემდეგ ეტაპზე, რათა შეისწავლოთ, თუ როგორ ხდება Regex-ში „მიმოხედვა“.", + + "steps.positiveLookahead.title": "დადებითი ხედვა წინ: `(?=)`", + "steps.positiveLookahead.description": "დავუშვათ გვჭირდება, რომ ტექსტიდან ამოვიღოთ საათის აღმნიშვნელი მნიშვნელობა. ესე იგი, უნდა მივწვდეთ მხოლოდ რიცხვით მნიშვნელობებს, რომლებსაც თან სდევს `PM`-ი. ამისათვის, ქვემოთ მოცემული გამოსახულების ბოლოში დაწერეთ დადებითი ხედვის გამოსახულება `(?=)` და ფრჩხილებს შორის, ტოლობის ნიშნის `=` შემდეგ დაამატეთ `PM`-ი.", + + "steps.negativeLookahead.title": "უარყოფითი ხედვა წინ: `(?!)`", + "steps.negativeLookahead.description": "ვთქვათ გვინდა, რომ ტექსტიდან ამოვკრიბოთ ყველა რიცხვითი მნიშვნელობა, გარდა საათის აღმნიშვნელი მნიშვნელობებისა. ამისათვის, ქვემოთ მოცემული გამოსახულების ბოლოში დაწერეთ უარყოფითი ხედვის გამოსახულება `(?!)` და ფრჩხილებს შორის, ძახილის ნიშნის `!` შემდეგ დაამატეთ `PM`-ი.", + + "steps.positiveLookbehind.title": "დადებითი ხედვა უკან: `(?<=)`", + "steps.positiveLookbehind.description": "დავუშვათ გვინდა, რომ ტექსტიდან ამოვიღოთ ფასის მნიშვნელობა. ესე იგი, უნდა მივწვდეთ მხოლოდ რიცხვით მნიშვნელობებს, რომლებსაც წინ უსწრებს სიმბოლო `$`. ამისათვის, ქვემოთ მოცემული გამოსახულების დასაწყისში დაწერეთ დადებითი უკან ხედვის გამოსახულება `(?<=)` და ფრჩხილებს შორის, ტოლობის ნიშნის `=` შემდეგ დაამატეთ სიმბოლო `\\$`.", + + "steps.negativeLookbehind.title": "უარყოფითი ხედვა უკან: `(?<!)`", + "steps.negativeLookbehind.description": "ვთქვათ გვჭირდება, რომ ტექსტიდან ამოვკრიბოთ ყველა რიცხვითი მნიშვნელობა, გარდა ფასის მაჩვენებელი მნიშვნელობებისა. ამისათვის, ქვემოთ მოცემული გამოსახულების დასაწყისში დაწერეთ უარყოფითი უკან ხედვის გამოსახულება `(?<!)` და ფრჩხილებს შორის, ძახილის ნიშნის `!` შემდეგ დაამატეთ სიმბოლო `\\$`.", + + "steps.flags.title": "ალმები", + "steps.flags.description": "ალმები ამა თუ იმ გამოსახულებისაგან მიღებულ შედეგებს ცვლიან. სწორედ ამიტომაა, რომ ალმებს `მოდიფიკატორებადაც` მოიხსენიებენ. ალმები განსაზღვრავენ, გამოსახულება ტექსტზე იმოქმედებს, როგორც ცალკე ხაზების ერთობლიობაზე თუ ერთ მთლიან ტექსტზე; არის თუ არა გამოსახულება რეგისტრის მიმართ მგრძნობიარე; პოულობს თუ არა გამოსახულება ყველა დამთხვევას. გადადით შემდეგ ეტაპზე, რათა შეისწავლოთ Regex-ში ალმების გამოყენება.", + + "steps.flagsGlobal.title": "გლობალურობის აღმნიშვნელი ალამი", + "steps.flagsGlobal.description": "`global` ალამი გამოსახულებას უბრძანებს, რომ ყველა შესაძლო დამთხვევა მოძებნოს ტექსტში. თუ ამ ალამს არ გამოიყენებთ, გამოსახულება იმოქმედებს მხოლოდ პირველ დამთხვევაზე ტექსტში. ახლა კი, ქვემოთ მოცემული გამოსახულებისათვის გაააქტიურეთ `global` ალამი, რათა ტექსტიდან მოახდინოთ ყველა დამთხვევის ამოკრება.", + + "steps.flagsMultiline.title": "მრავალსტრიქონიანობის აღმნიშვნელი ალამი", + "steps.flagsMultiline.description": "Regex-ი მთელ ტექსტს ერთ სტრიქონად აღიქვამს. მაგრამ არსებობს `multiline` ალამი, რომლის გააქტიურებითაც შეგვიძლია ცალ-ცალკე ვიმოქმედოთ თითოეულ სტრიქონზე. ამ გზით, ჩვენ მიერ შედგენილი გამოსახულებები, რომელთა გამოყენებითაც სტრიქონების ბოლოში არსებულ ფრაგმენტებზე ვახდენთ მითითებას, თითოეული სტრიქონზე ცალ-ცალკე იმოქმედებს. ახლა კი, ქვემოთ მოცემული გამოსახულებისათვის გაააქტიურეთ `multiline` ალამი, რათა ტექსტიდან ამოკრიბოთ ყველა დამთხვევა.", + + "steps.flagsCaseInsensitive.title": "რეგისტრის მიმართ არამგრძნობიარეობის აღმნიშვნელი ალამი", + "steps.flagsCaseInsensitive.description": "იმისათვის, რომ ჩვენ მიერ შედგენილი გამოსახულება რეგისტრის მიმართ მგრძნობიარე არ იყოს, უნდა გავააქტიუროთ `case-insensitive` ალამი.", + + "steps.greedyMatching.title": "„გაუმაძღარი“ ძიება", + "steps.greedyMatching.description": "Regex-ი ნაგულისხმევად ახორციელებს „გაუმაძღარ“ ძიებას. ეს ნიშნავს, რომ დამთხვევათა ძიების პროცესი მაქსიმალურად დიდხანს გასტანს. იხილეთ ქვემოთ მოცემული მაგალითი. მოცემული გამოსახულება მიემართება `r` ასოზე დამთავრებულ ტექსტს, თანაც, მნიშვნელობა არ აქვს, რა სიმბოლოები უსწრებს წინ `r`-ს. ამასთან, ძიების პროცესი არ ჩერდება ტექსტში პირველივე ნაპოვნ დამთხვევაზე (`r`-ზე).", + + "steps.lazyMatching.title": "„ზანტი“ ძიება", + "steps.lazyMatching.description": "„გაუმაძღარი“ ძიებისაგან განსხვავებით, „ზანტი“ ძიება ჩერდება პირველივე ნაპოვნ დამთხვევაზე. მაგალითისათვის, ქვემოთ მოცემულ გამოსახულებაში დაამატეთ კითხვის ნიშანი `?` ვარსკვლავის `*` შემდეგ, რათა მოძებნილ იქნეს პირველი დამთხვევა, რომელსაც წინ უსწრებს ნებისმიერი სიმბოლო, და ბოლოვდება ასო `r`-ზე. მაშასადამე, ძიების პროცესი შეწყდება პირველივე ნაპოვნ დამთხვევაზე (`r`-ზე).", + + "steps.completeAllSteps.title": "გილოცავთ, ყველა ეტაპი წარმატებით გაიარეთ!", + "steps.completeAllSteps.description": "შეგიძლიათ ნებისმიერ დროს მიუბრუნდეთ განვლილ ეტაპებს და მარტივად გადახვიდეთ ერთი ეტაპიდან მეორეზე." +} diff --git a/src/localization/ka/lessons.json b/src/localization/ka/lessons.json new file mode 100644 index 00000000..38e9d7a5 --- /dev/null +++ b/src/localization/ka/lessons.json @@ -0,0 +1,7 @@ +{ + "lessons.regex101.title": "Regex 101 - KA", + "lessons.regex101.description": "ამ სახელმძღვანელოს მეშვეობით შეგიძლიათ შეისწავლოთ Regex-ის საფუძვლები.", + + "lessons.regexForSeo.title": "Regex for SEO - KA", + "lessons.regexForSeo.description": "ამ სახელმძღვანელოს მეშვეობით შეძლებთ შეისწავლოთ, თუ როგორ და რა მოცემულობაშია დასაშვები Regex-ის გამოყენება SEO-სთვის." +} diff --git a/src/localization/ka/lessons/regexForSeo.json b/src/localization/ka/lessons/regexForSeo.json new file mode 100644 index 00000000..539607df --- /dev/null +++ b/src/localization/ka/lessons/regexForSeo.json @@ -0,0 +1,49 @@ +{ + "lesson.regexForSeo.starter.title": "რეგულარული გამოსახულებები SEO-თვის", + "lesson.regexForSeo.starter.description": "Regex-ი არის რეგულარული გამოსახულებების ნაკრები, რომელიც გამოიყენება სხვადასხვა მიმართულებით, განსაკუთრებით იმ ადამიანების მიერ, ვისაც საკუთარი პროდუქტიულობის გაზრდა სურს. რეგულარული გამოსახულებების SEO-თვის გამოყენების უპირატესობა იმაში მდგომარეობს, რომ იგი ამარტივებს დიდი (მასშტაბური) მონაცემების ანალიზს და ძლიერი ფილტრების შემუშავების პროცესს. თუკი Regex-ი თქვენთვის ახალია, გირჩევთ სწავლა დაიწყოთ `Regex 101` სახელმძღვანელოთი. \\n\\nდასაწყისისათვის, ქვემოთ მოცემულ Regex-ის ველში შეიყვანეთ ტექსტი `OK`, რათა გადახვიდეთ პირველ ეტაპზე და უფრო დეტალური განმარტებები მიიღოთ.", + + "lesson.regexForSeo.usage.title": "გამოყენების მაგალითები", + "lesson.regexForSeo.usage.description": "რეგულარული გამოსახულებების SEO-თვის გამოყენება შეგიძლიათ ისეთ პლატფორმებზე, როგორებიცაა `Google Analytics`, `Google Data Studio`, `Google Sheets`, `Google Search Console`, `Ahrefs`, `Deepcrawl`, `Screaming Frog` და სხვა. ასევე, ხშირად გამოიყენება `.htaccess` და `robots.txt (regex-ის მაგვარი სინტაქსი)` ფაილებში.\\n\\nქვემოთ მოცემულია Regex-ის მარტივი ნიმუში, რომელიც შესაბამისობაში მოვა ჩამონათვალში შემავალ მხოლოდ იმ ტექსტებთან, რომლებიც იწყება `Google`-ით.", + + "lesson.regexForSeo.basics.title": "საწყისები", + "lesson.regexForSeo.basics.description": "მოდი, განვიხილოთ Regex-ის რამდენიმე ისეთი ნიმუში, რაც ხშირად გამოგადგებათ პრაქტიკაში. იმისათვის, რომ უკეთ გაერკვეთ მაგალითებში მოყვანილი გამოსახულებების მუშაობის პრინციპებში, გირჩევთ გადახედოთ `Regex 101` სახელმძღვანელოს. ქვემოთ მოცემულ ველში შეიყვანეთ სიტყვა `Yes` და გადავიდეთ საქმეზე.", + + "lesson.regexForSeo.or.title": "„ან“ ოპერატორი `|`", + "lesson.regexForSeo.or.description": "„ან“ ოპერატორს `|` ვიყენებთ რამდენიმე ალტერნატიული ქვეგამოსახულების განსაზღვრის მიზნით. მაგალითისათვის, დაწერეთ რეგულარული გამოსახულება, რომელიც ქვემოთ მოცემული ტექსტიდან ამოკრებს სიტყვებს `seo` და `regex`. ამისათვის, Regex-ის ველში შეიყვანეთ აღნიშნული სიტყვები და ერთმანეთისაგან გამოყავით „ან“ ოპერატორით `|`.", + + "lesson.regexForSeo.optional.title": "პირობითობის აღმნიშვნელი ოპერატორი `?`", + "lesson.regexForSeo.optional.description": "ამ ოპერატორს ვიყენებთ იმის აღსანიშნავად, რომ ესა თუ ის სიმბოლო ან გამოსახულება არასავალდებულოა. ვთქვათ გვჭირდება ტექსტის გაფილტვრა ისე, რომ ამოვკრიბოთ `http` და `https` სიტყვები. რა თქმა უნდა, შეგვიძლია ამ მიზნით „ან“ ოპერატორის `|` გამოყენება, მაგრამ აღნიშნულ შემთხვევაში, როცა სიტყვები თითქმის იდენტურია, არსებობს უკეთესი გზაც.\\n\\nმოცემულ მაგალითში, ასო `s` არის პირობითი (არასავალდებულო). Regex-ის ველში, ასო `s`-ის შემდეგ დაამატეთ კითხვის ნიშანი `?`.", + + "lesson.regexForSeo.any.title": "ნებისმიერი სიმბოლო `.*`", + "lesson.regexForSeo.any.description": "Regex-ში წერტილი `.` შესაბამისობაში მოდის ყველა სიმბოლოსთან ინტერვალის ჩათვლით. მაგრამ ეს შესაბამისობა ვრცელდება მხოლოდ ერთ სიმბოლოზე (და არა მთლიან ტექსტზე). ვარსკვლავის სიმბოლო `*` აღნიშნავს, რომ მის წინ მდებარე გამოსახულების დამთხვევა ტექსტში შეიძლება საერთოდ არ მოხდეს, ან ბევრჯერ მოხდეს. როდესაც ნახსენები ორი სიმბოლო (`.` და `*`) ერთად გამოიყენება, ეს იმას ნიშნავს, რომ `.`-ის შესაბამისობა გავრცელდება მთლიან ტექსტზე (და არა მხოლოდ ერთ სიმბოლოზე).\\n\\nქვემოთ, Regex-ის ველში, მოცემულია რამდენიმე საკვანძო სიტყვა. იმავე ველში, ინტერვალის შემდეგ დაამატეთ წერტილი და ვარსკვლავი `.*`, რათა შეადგინოთ გამოსახულება, რომელიც შესაბამისობაში მოვა ყველა ისეთ სტრიქონთან, რომელიც იწყება `how to write`-ით და არ აქვს მნიშვნელობა, როგორ გრძელდება.", + + "lesson.regexForSeo.contains.title": "შეიცავს", + "lesson.regexForSeo.contains.description": "იმისათვის, რომ ტექსტი გავფილტროთ ამა თუ იმ სიტყვის ან ფრაზის შემცველობის მიხედვით, სასურველი სიტყვა ან ფრაზა უნდა მოვაქციოთ ორ `.*`-ს შორის (`.*` არის გამოსახულება, რომელიც ნებისმიერ სიმბოლოსთან მოდის შესაბამისობაში). მაგალითისათვის, Regex-ის ველში შეიყვანეთ `.*buy.*`, რათა ტექსტიდან ამოკრიბოთ ყველა ის სტრიქონი, რომელიც შეიცავს სიტყვას `buy`.", + + "lesson.regexForSeo.negated.title": "უარყოფილ სიმბოლოთა ნაკრები `[^abc]`", + "lesson.regexForSeo.negated.description": "უარყოფილ სიმბოლოთა ნაკრებებს `[^]` ვიყენებთ იმ სიმბოლოების აღნიშვნისთვის, რომლებიც გვინდა, რომ უარვყოთ. ასეთი სიმბოლოები უნდა ჩავწეროთ კვადრატულ ფრჩხილებს შორის და თავსართის სახით დავურთოთ ახარისხების ნიშანი `^`. ქვემოთ მოცემულ ტექსტში გვაქვს როგორც `http`-ით, ისე `https`-ით დაწყებული სტრიქონები. რადგან `http` ფრაგმენტი ორივეგან გვხვდება, გამოსახულება შესაბამისობაში მოვა `https`-ით დაწყებულ სტრიქონებთანაც. ეს რომ ასე არ მოხდეს, Regex-ის ველში, ასო `p`-ს შემდეგ დაამატეთ `[^s]`, რათა მოხდეს ასო `s`-ის გამორიცხვა. შედეგად, გამოსახულება შესაბამისობაში მოვა მხოლოდ `http`-ით დაწყებულ სტრიქონებთან.", + + "lesson.regexForSeo.caret.title": "ახარისხების ნიშანი `^`", + "lesson.regexForSeo.caret.description": "ვთქვათ გვაქვს URL-ების ჩამონათვალი და გვინდა, რომ ამოვკრიბოთ მხოლოდ ისეთი URL-ები, რომლებიც იწყება `http`-ით. მაგრამ `http` ფრაგმენტი URL-ის დასაწყისის გარდა, სხვა ადგილებშიც შეიძლება გვხდებოდეს (მაგალითად, შუაში ან ბოლოში). იმისათვის, რომ მხოლოდ ისეთი URL-ები ამოვკრიბოთ, რომლებიც იწყება `http`-ით, Regex-ის ველის დასაწყისში დაამატეთ ახარისხების ნიშანი `^`.", + + "lesson.regexForSeo.dollarAndEscape.title": "დოლარის ნიშანი `$` და უკან გადახრილი წილადის ხაზი `\\`", + "lesson.regexForSeo.dollarAndEscape.description": "ისევ და ისევ, მოცემული გვაქვს URL-ების ჩამონათვალი. ამჯერად გვსურს, რომ ამოვკრიბოთ მხოლოდ ისეთი URL-ები, რომლებიც სრულდება `.htm`-ით.\\n\\nვინაიდან წერტილი არის სპეციალური სიმბოლო, რომელიც შესაბამისობაში მოდის ყველანაირ სიმბოლოსთან, უპირველეს ყოვლისა, წერტილის წინ უნდა დავამატოთ უკან გადახრილი წილადის ხაზი `\\`, რათა წერტილი `.` აღქმულ იქნეს, როგორც ჩვეულებრივი სიმბოლო. ეს „ხრიკი“ ვრცელდება ნებისმიერ სპეციალურ სიმბოლოზე (მაგ.: `*`, `+`, `?` და სხვ.).\\n\\nშემდგომ ამისა, გამოსახულების ბოლოში უნდა დავამატოთ დოლარის ნიშანი `$`. ამით აღვნიშნავთ, რომ ჩაწერილი გამოსახულება უნდა შეესაბამებოდეს ტექსტის დასასრულს (ესე იგი, ტექსტი უნდა ბოლოვდებოდეს `.htm`-ით).", + + "lesson.regexForSeo.limitation.title": "სიგრძის შეზღუდვა `{n}`", + "lesson.regexForSeo.limitation.description": "შესაძლოა დაგჭირდეთ შედეგების ფილტრაცია მათში შემავალ სიმბოლოთა კონკრეტული რაოდენობის მიხედვით. მაგალითად, იმისათვის, რომ URL-ების ჩამონათვალიდან ამოკრიბოთ `35` სიმბოლოსაგან შემდგარი URL-ები, Regex-ის ველში, `.`-ის შემდეგ, ფიგურულ ფრჩხილებს `{}` შორის ჩაწერეთ სასურველი რიცხვი (ამ შემთხვევაში, `35`).", + + "lesson.regexForSeo.maxLimitation.title": "სიგრძის შეზღუდვა (მაქსიმუმი) `{n,m}`", + "lesson.regexForSeo.maxLimitation.description": "იმისათვის, რომ URL-ების ჩამონათვალიდან ამოკრიბოთ ისეთი URL-ები, რომლებიც მაქსიმუმ `35` სიმბოლოსაგან შედგება, Regex-ის ველში, `.`-ის შემდეგ, ფიგურულ ფრჩხილებს `{}` შორის ჩაწერეთ სასურველი რიცხვები (მინიმუმი და მაქსიმუმი, ამ შემთხვევაში, `{1,35}`).", + + "lesson.regexForSeo.minLimitation.title": "სიგრძის შეზღუდვა (მინიმუმი) `{n,}`", + "lesson.regexForSeo.minLimitation.description": "იმისათვის, რომ URL-ების ჩამონათვალიდან ამოკრიბოთ ისეთი URL-ები, რომლებიც მინიმუმ `35` სიმბოლოსაგან შედგება, Regex-ის ველში, `.`-ის შემდეგ, ფიგურულ ფრჩხილებს `{}` შორის ჩაწერეთ სასურველი რიცხვი (მინიმუმი) ბოლოში მძიმით (ამ შემთხვევაში, `{35,}`).", + + "lesson.regexForSeo.robots.title": "robots.txt (regex-ის მაგვარი სინტაქსი)", + "lesson.regexForSeo.robots.description": "ქვემოთ მოცემულია `robots.txt` ფაილში Regex-ის მაგვარი სინტაქსის გამოყენების მაგალითი. აღნიშნულ მაგალითში განსაზღვრულია, რომ ბოტებმა არ უნდა მოახდინონ `pdf` გაფართოების მქონე ბმულების ინსპექტირება.", + + "lesson.regexForSeo.htaccess.title": ".htaccess", + "lesson.regexForSeo.htaccess.description": "ქვემოთ მოცემულია Regex-ის გამოყენების მაგალითი `.htaccess` ფაილში. აღნიშნულ მაგალითში განსაზღვრულია, რომ `php` გაფართოების მქონე ყოველი ბმული უნდა გადამისამართდეს იმავე, ოღონდ `html` გაფართოების მქონე ბმულზე კონკრეტული სტატუსის კოდით (`301`).", + + "lesson.regexForSeo.outro.title": "შეჯამება", + "lesson.regexForSeo.outro.description": "Regex-ის ცოდნა არის უნარი, რომელიც ზრდის პროდუქტიულობას ნებისმიერ პლატფორმაზე მუშაობისას, სადაც კი შესაძლებელია მისი გამოყენება. როგორც კი დაიწყებთ მის გამოყენებას და განივითარებთ აღნიშნულ უნარს, გაგიმარტივდებათ მრავალი რუტინული დავალების სწრაფად და ეფექტურად შესრულება, რაც დაგიზოგავთ დროს და ენერგიას. იმისათვის, რომ უკეთ გაიაზროთ Regex-ის ფუნდამენტური საკითხები, ეწვიეთ `Regex 101` სახელმძღვანელოს. ასევე შეგიძლიათ გამოიყენოთ `სავარჯიშო სივრცე` თქვენ მიერ შემუშავებული გამოსახულებების ტესტირებისათვის." +} 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 2/7] 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 3/7] 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 4/7] 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": "بررسی رو به عقب منفی: `(؟ Date: Tue, 28 May 2024 09:50:13 +0330 Subject: [PATCH 5/7] Fixing "Toggle Progress" For RTL Support & correct display & Fixing Translate (#363) * Fixing "Toggle Progress" For RTL Support * Fix correct display of regex in RTL * Fixing Persian Translate For lesson 49 --- src/components/CheatsheetCollapse.tsx | 2 +- src/components/LearnProgress.tsx | 41 +++++++++++++++++++++------ src/components/Step.tsx | 2 ++ src/localization/fa/learn.json | 4 +-- 4 files changed, 37 insertions(+), 12 deletions(-) diff --git a/src/components/CheatsheetCollapse.tsx b/src/components/CheatsheetCollapse.tsx index 7c209e7d..a4083a0e 100644 --- a/src/components/CheatsheetCollapse.tsx +++ b/src/components/CheatsheetCollapse.tsx @@ -36,7 +36,7 @@ const CheatsheetCollapse = ({ title, data }: CheatsheetCollapseProps) => { aria-controls={`Collapse-${data.title}`} >
- + {data.code}
diff --git a/src/components/LearnProgress.tsx b/src/components/LearnProgress.tsx index ee55225d..4e6c3cdf 100644 --- a/src/components/LearnProgress.tsx +++ b/src/components/LearnProgress.tsx @@ -4,6 +4,7 @@ import { useIntl } from 'react-intl'; import Icon from './Icon'; import { InteractiveAreaContext } from 'src/context/InteractiveAreaContext'; import HighlightedText from './HighlightedText'; +import { useLanguageDirection } from "src/utils/useLanguageDirection"; const LearnProgress = () => { const [open, setOpen] = useState(false); @@ -27,11 +28,22 @@ const LearnProgress = () => { const toggleProgress = () => setOpen(!open); + const direction = useLanguageDirection(); + + // list lesson (ToggleProgress For RTL/LTR) + const listOpen = direction === 'rtl' ? 'left-0' : 'right-0'; + const listClose = direction === 'rtl' ? '-left-[244px]' : '-right-[244px]'; + const listOpenInner = direction === 'rtl' ? '-left-10' : '-right-10'; + const listCloseInner = direction === 'rtl' ? 'left-[204px]' : 'right-[204px]'; + const listIconName = direction === 'rtl' ? 'arrow-right' : 'arrow-left'; + const listStepDirection = direction === 'rtl' ? 'left-[7px]' : 'right-[7px]'; + + return (
{
@@ -66,17 +80,26 @@ const LearnProgress = () => { }, 'step-item relative truncate max-w-[80%] flex flex-row-reverse items-center', index !== lessonData.length - 1 && - "pb-6 after:content-[''] after:block after:w-[2px] after:h-8 after:bg-neutral-700 after:rounded-md after:right-[7px] after:top-8 after:absolute", + `pb-6 after:content-[''] after:block after:w-[2px] after:h-8 after:bg-neutral-700 after:rounded-md after:${listStepDirection} after:top-8 after:absolute`, )} > {step === index && ( - + )} {lastStep >= index && step !== index && ( - + )} {lastStep < index && ( - + )} { text={formatMessage({ id: data.title })} attrs={{ className: 'px-2 my-1 bg-neutral-700 rounded-md mx-1 whitespace-nowrap', + dir: 'ltr' }} /> { text={formatMessage({ id: data.description })} attrs={{ className: 'p-1 text-xs whitespace-nowrap rounded-md bg-neutral-700 tracking-widest', + dir: 'ltr' }} />
diff --git a/src/localization/fa/learn.json b/src/localization/fa/learn.json index e94a9fdd..d680704e 100644 --- a/src/localization/fa/learn.json +++ b/src/localization/fa/learn.json @@ -137,8 +137,8 @@ "steps.positiveLookbehind.title": "بررسی رو به عقب مثبت: `(?<=)`", "steps.positiveLookbehind.description": "برای مثال می خواهیم مقدار قیمت را در متن انتخاب کنیم. بنابراین، برای انتخاب فقط مقادیر عددی که بعد از علامت $ هستند، باید بررسی رو به عقب مثبت (Positive Lookbehind) `(?<=)` را قبل از عبارت خود بنویسیم. بعد از علامت `=` داخل پرانتز، `\\$` را اضافه کنید.", - "steps.negativeLookbehind.title": "بررسی رو به عقب منفی: `(؟ Date: Tue, 28 May 2024 09:50:13 +0330 Subject: [PATCH 6/7] Fixing "Toggle Progress" For RTL Support & correct display & Fixing Translate (#363) * Fixing "Toggle Progress" For RTL Support * Fix correct display of regex in RTL * Fixing Persian Translate For lesson 49 --- src/components/CheatsheetCollapse.tsx | 2 +- src/components/LearnProgress.tsx | 41 +++++++++++++++++++++------ src/components/Step.tsx | 2 ++ src/localization/fa/learn.json | 4 +-- 4 files changed, 37 insertions(+), 12 deletions(-) diff --git a/src/components/CheatsheetCollapse.tsx b/src/components/CheatsheetCollapse.tsx index 7c209e7d..a4083a0e 100644 --- a/src/components/CheatsheetCollapse.tsx +++ b/src/components/CheatsheetCollapse.tsx @@ -36,7 +36,7 @@ const CheatsheetCollapse = ({ title, data }: CheatsheetCollapseProps) => { aria-controls={`Collapse-${data.title}`} >
- + {data.code}
diff --git a/src/components/LearnProgress.tsx b/src/components/LearnProgress.tsx index ee55225d..4e6c3cdf 100644 --- a/src/components/LearnProgress.tsx +++ b/src/components/LearnProgress.tsx @@ -4,6 +4,7 @@ import { useIntl } from 'react-intl'; import Icon from './Icon'; import { InteractiveAreaContext } from 'src/context/InteractiveAreaContext'; import HighlightedText from './HighlightedText'; +import { useLanguageDirection } from "src/utils/useLanguageDirection"; const LearnProgress = () => { const [open, setOpen] = useState(false); @@ -27,11 +28,22 @@ const LearnProgress = () => { const toggleProgress = () => setOpen(!open); + const direction = useLanguageDirection(); + + // list lesson (ToggleProgress For RTL/LTR) + const listOpen = direction === 'rtl' ? 'left-0' : 'right-0'; + const listClose = direction === 'rtl' ? '-left-[244px]' : '-right-[244px]'; + const listOpenInner = direction === 'rtl' ? '-left-10' : '-right-10'; + const listCloseInner = direction === 'rtl' ? 'left-[204px]' : 'right-[204px]'; + const listIconName = direction === 'rtl' ? 'arrow-right' : 'arrow-left'; + const listStepDirection = direction === 'rtl' ? 'left-[7px]' : 'right-[7px]'; + + return (
{
@@ -66,17 +80,26 @@ const LearnProgress = () => { }, 'step-item relative truncate max-w-[80%] flex flex-row-reverse items-center', index !== lessonData.length - 1 && - "pb-6 after:content-[''] after:block after:w-[2px] after:h-8 after:bg-neutral-700 after:rounded-md after:right-[7px] after:top-8 after:absolute", + `pb-6 after:content-[''] after:block after:w-[2px] after:h-8 after:bg-neutral-700 after:rounded-md after:${listStepDirection} after:top-8 after:absolute`, )} > {step === index && ( - + )} {lastStep >= index && step !== index && ( - + )} {lastStep < index && ( - + )} { text={formatMessage({ id: data.title })} attrs={{ className: 'px-2 my-1 bg-neutral-700 rounded-md mx-1 whitespace-nowrap', + dir: 'ltr' }} /> { text={formatMessage({ id: data.description })} attrs={{ className: 'p-1 text-xs whitespace-nowrap rounded-md bg-neutral-700 tracking-widest', + dir: 'ltr' }} />
diff --git a/src/localization/fa/learn.json b/src/localization/fa/learn.json index e94a9fdd..d680704e 100644 --- a/src/localization/fa/learn.json +++ b/src/localization/fa/learn.json @@ -137,8 +137,8 @@ "steps.positiveLookbehind.title": "بررسی رو به عقب مثبت: `(?<=)`", "steps.positiveLookbehind.description": "برای مثال می خواهیم مقدار قیمت را در متن انتخاب کنیم. بنابراین، برای انتخاب فقط مقادیر عددی که بعد از علامت $ هستند، باید بررسی رو به عقب مثبت (Positive Lookbehind) `(?<=)` را قبل از عبارت خود بنویسیم. بعد از علامت `=` داخل پرانتز، `\\$` را اضافه کنید.", - "steps.negativeLookbehind.title": "بررسی رو به عقب منفی: `(؟ Date: Wed, 29 May 2024 16:25:04 +0330 Subject: [PATCH 7/7] Fixing "Toggle Progress" (Better Show) & translation Persian (#365) * Fixing "Toggle Progress" (Better Show) * Correcting the translation of a phrase in Persian --- src/components/LearnProgress.tsx | 5 ++--- src/localization/fa/learn.json | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/components/LearnProgress.tsx b/src/components/LearnProgress.tsx index 4e6c3cdf..d03b1e68 100644 --- a/src/components/LearnProgress.tsx +++ b/src/components/LearnProgress.tsx @@ -36,7 +36,6 @@ const LearnProgress = () => { const listOpenInner = direction === 'rtl' ? '-left-10' : '-right-10'; const listCloseInner = direction === 'rtl' ? 'left-[204px]' : 'right-[204px]'; const listIconName = direction === 'rtl' ? 'arrow-right' : 'arrow-left'; - const listStepDirection = direction === 'rtl' ? 'left-[7px]' : 'right-[7px]'; return ( @@ -80,7 +79,7 @@ const LearnProgress = () => { }, 'step-item relative truncate max-w-[80%] flex flex-row-reverse items-center', index !== lessonData.length - 1 && - `pb-6 after:content-[''] after:block after:w-[2px] after:h-8 after:bg-neutral-700 after:rounded-md after:${listStepDirection} after:top-8 after:absolute`, + `pb-6 after:content-[''] after:block after:w-[2px] after:h-8 after:bg-neutral-700 after:rounded-md after:mx-[7px] after:top-8 after:absolute`, )} > {step === index && ( @@ -110,7 +109,7 @@ const LearnProgress = () => { ? '!pr-2 text-neutral-50' : 'text-neutral-300 hover:text-neutral-100 pl-0', )} - text={formatMessage({ id: lesson.title })} + text={formatMessage({ id: lesson.title }).replace('\\n', '')} onClick={() => handleChangeStep(index)} attrs={{ className: clsx( diff --git a/src/localization/fa/learn.json b/src/localization/fa/learn.json index d680704e..dfd14e55 100644 --- a/src/localization/fa/learn.json +++ b/src/localization/fa/learn.json @@ -131,7 +131,7 @@ "steps.positiveLookahead.title": "بررسی رو به جلو مثبت: `(?=)`", "steps.positiveLookahead.description": "برای مثال می خواهیم مقدار ساعت را در متن انتخاب کنیم. بنابراین، برای انتخاب فقط مقادیر عددی که بعد از آنها کمله `PM` قرار دارند، باید بررسی رو به جلو مثبت (Positive Lookahead) `(?=)` را بعد از عبارت خود بنویسیم. `PM` را بعد از علامت `=` داخل پرانتز قرار دهید.", - "steps.negativeLookahead.title": "بررسی رو به جلو منفی: `(؟!)`", + "steps.negativeLookahead.title": "بررسی رو به جلو منفی: `(?!)`", "steps.negativeLookahead.description": "برای مثال می خواهیم اعدادی غیر از مقدار ساعت را در متن انتخاب کنیم. بنابراین، باید بررسی رو به جلو منفی (Negative Lookahead) `(?!)` را بعد از عبارت خود بنویسیم تا فقط مقادیر عددی را انتخاب کنیم که بعد از آنها `PM` وجود ندارد. `PM` را بعد از علامت `!` داخل پرانتز قرار دهید.", "steps.positiveLookbehind.title": "بررسی رو به عقب مثبت: `(?<=)`",