diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 1f50ba6b2af..0a59b387be3 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -123,7 +123,7 @@ jobs: fail-fast: false env: # Opt-in for checking links in translations - add the language below. - LINK_CHECKED_LANGUAGES: '["en", ]' + LINK_CHECKED_LANGUAGES: '["en", "fa"]' steps: - name: Checkout uses: actions/checkout@v4 diff --git a/po/fa.po b/po/fa.po index 08fda0b111b..a237a045d8f 100644 --- a/po/fa.po +++ b/po/fa.po @@ -1,16 +1,16 @@ msgid "" msgstr "" "Project-Id-Version: Comprehensive Rust 🦀\n" -"POT-Creation-Date: 2024-06-07T18:15:11+03:30\n" -"PO-Revision-Date: 2023-08-08 21:41+0330\n" -"Last-Translator: danny \n" +"POT-Creation-Date: 2024-07-24T09:42:45+03:30\n" +"PO-Revision-Date: 2024-07-24 10:12+0330\n" +"Last-Translator: alix1383 \n" "Language-Team: Persian\n" "Language: fa\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Poedit 3.3.2\n" +"X-Generator: Poedit 3.4.4\n" #: src/SUMMARY.md src/index.md msgid "Welcome to Comprehensive Rust 🦀" @@ -38,7 +38,7 @@ msgstr "استفاده از cargo" #: src/SUMMARY.md msgid "Rust Ecosystem" -msgstr "اکوسیستم Rsut" +msgstr "اکوسیستم Rust" #: src/SUMMARY.md msgid "Code Samples" @@ -46,11 +46,11 @@ msgstr "نمونه کد" #: src/SUMMARY.md msgid "Running Cargo Locally" -msgstr "اجرای cargo روی ماشین local" +msgstr "اجرای کد به صورت لوکال با cargo" #: src/SUMMARY.md msgid "Day 1: Morning" -msgstr "روز اول: صبح" +msgstr "روز ۱: صبح" #: src/SUMMARY.md src/running-the-course/course-structure.md:15 #: src/running-the-course/course-structure.md:34 @@ -64,9 +64,8 @@ msgstr "خوش آمدید" #: src/SUMMARY.md src/running-the-course/course-structure.md:16 #: src/welcome-day-1.md src/hello-world.md src/types-and-values.md #: src/types-and-values/hello-world.md:1 -#, fuzzy msgid "Hello, World" -msgstr "سلام دنیا" +msgstr "سلام, دنیا" #: src/SUMMARY.md src/hello-world.md src/hello-world/what-is-rust.md:1 msgid "What is Rust?" @@ -74,7 +73,7 @@ msgstr "زبان Rust چیست؟" #: src/SUMMARY.md src/hello-world.md src/hello-world/benefits.md:1 msgid "Benefits of Rust" -msgstr "فواید زبان راست" +msgstr "مزیت‌های زبان Rust" #: src/SUMMARY.md src/hello-world.md src/hello-world/playground.md:1 msgid "Playground" @@ -83,7 +82,7 @@ msgstr "" #: src/SUMMARY.md src/running-the-course/course-structure.md:17 #: src/welcome-day-1.md src/types-and-values.md msgid "Types and Values" -msgstr "" +msgstr "تایپ‌ها و مقادیر" #: src/SUMMARY.md src/types-and-values.md src/types-and-values/variables.md:1 msgid "Variables" @@ -91,20 +90,19 @@ msgstr "متغیرها" #: src/SUMMARY.md src/types-and-values.md src/types-and-values/values.md:1 msgid "Values" -msgstr "" +msgstr "مقادیر" #: src/SUMMARY.md src/types-and-values.md src/types-and-values/arithmetic.md:1 msgid "Arithmetic" -msgstr "" +msgstr "عملگرهای ریاضی" #: src/SUMMARY.md src/types-and-values.md src/types-and-values/inference.md:1 msgid "Type Inference" msgstr "تعیین تایپ ضمنی" #: src/SUMMARY.md src/types-and-values.md src/types-and-values/exercise.md:1 -#, fuzzy msgid "Exercise: Fibonacci" -msgstr "تمرین: عبارت را بسنجید" +msgstr "تمرین: دنباله فیبوناچی" #: src/SUMMARY.md src/types-and-values/solution.md:1 #: src/control-flow-basics/solution.md:1 src/tuples-and-arrays/solution.md:1 @@ -116,29 +114,25 @@ msgstr "تمرین: عبارت را بسنجید" #: src/lifetimes/solution.md:1 src/iterators/solution.md:1 #: src/modules/solution.md:1 src/testing/solution.md:1 #: src/error-handling/solution.md:1 src/unsafe-rust/solution.md:1 -#, fuzzy msgid "Solution" -msgstr "راه حل‌ها" +msgstr "راه‌حل" #: src/SUMMARY.md src/running-the-course/course-structure.md:18 #: src/welcome-day-1.md src/control-flow-basics.md -#, fuzzy msgid "Control Flow Basics" -msgstr "کنترل جریان" +msgstr "مبانی پایه کنترل جریان" #: src/SUMMARY.md -#, fuzzy msgid "`if` Expressions" msgstr "عبارات `if`" #: src/SUMMARY.md src/control-flow-basics.md src/control-flow-basics/loops.md:1 msgid "Loops" -msgstr "" +msgstr "حلقه‌ها" #: src/SUMMARY.md src/control-flow-basics/loops/for.md:1 -#, fuzzy msgid "`for`" -msgstr "حلقه‌های `for`" +msgstr "" #: src/SUMMARY.md src/control-flow-basics/loops/loop.md:1 msgid "`loop`" @@ -150,12 +144,12 @@ msgstr "`break` و `continue`" #: src/SUMMARY.md src/control-flow-basics/break-continue/labels.md:1 msgid "Labels" -msgstr "" +msgstr "برچسب‌ها" #: src/SUMMARY.md src/control-flow-basics.md #: src/control-flow-basics/blocks-and-scopes.md:1 msgid "Blocks and Scopes" -msgstr "" +msgstr "بلوک‌ها و محدوده‌ها" #: src/SUMMARY.md src/control-flow-basics/blocks-and-scopes/scopes.md:1 msgid "Scopes and Shadowing" @@ -169,12 +163,12 @@ msgstr "توابع" #: src/SUMMARY.md src/control-flow-basics.md #: src/control-flow-basics/macros.md:1 msgid "Macros" -msgstr "" +msgstr "ماکروها" #: src/SUMMARY.md src/control-flow-basics.md #: src/control-flow-basics/exercise.md:1 msgid "Exercise: Collatz Sequence" -msgstr "" +msgstr "تمرین: دنباله Collatz" #: src/SUMMARY.md msgid "Day 1: Afternoon" @@ -194,19 +188,17 @@ msgid "Tuples" msgstr "تاپل‌ها" #: src/SUMMARY.md src/tuples-and-arrays.md src/tuples-and-arrays/iteration.md:1 -#, fuzzy msgid "Array Iteration" -msgstr "تکرار کننده" +msgstr "تکرار ارایه" #: src/SUMMARY.md src/tuples-and-arrays.md #: src/tuples-and-arrays/destructuring.md:1 -#, fuzzy msgid "Patterns and Destructuring" -msgstr "تخریب Enumها" +msgstr "الگو‌ها و ضدِ ساختارها" #: src/SUMMARY.md src/tuples-and-arrays.md src/tuples-and-arrays/exercise.md:1 msgid "Exercise: Nested Arrays" -msgstr "" +msgstr "تمرین: آرایه‌های تو در تو" #: src/SUMMARY.md src/running-the-course/course-structure.md:26 #: src/welcome-day-1-afternoon.md src/references.md @@ -214,19 +206,16 @@ msgid "References" msgstr "مراجع" #: src/SUMMARY.md src/references.md src/references/shared.md:1 -#, fuzzy msgid "Shared References" -msgstr "مراجع" +msgstr "مراجع اشتراکی" #: src/SUMMARY.md src/references.md src/references/exclusive.md:1 -#, fuzzy msgid "Exclusive References" -msgstr "ارجاعات تعلیق شده" +msgstr "مراجع انحصاری " #: src/SUMMARY.md -#, fuzzy msgid "Slices: `&[T]`" -msgstr "برش‌ها" +msgstr "برش ها: `&[T]`" #: src/SUMMARY.md src/references.md src/references/strings.md:5 msgid "Strings" @@ -234,28 +223,27 @@ msgstr "رشته‌ها" #: src/SUMMARY.md src/references.md src/references/exercise.md:1 msgid "Exercise: Geometry" -msgstr "" +msgstr "تمرین: هندسه" #: src/SUMMARY.md src/running-the-course/course-structure.md:27 #: src/welcome-day-1-afternoon.md src/user-defined-types.md msgid "User-Defined Types" -msgstr "نوع داده تعریف شده توسط کاربر" +msgstr "تایپ‌های تعریف شده توسط کاربر" #: src/SUMMARY.md src/user-defined-types.md #: src/user-defined-types/named-structs.md:1 -#, fuzzy msgid "Named Structs" -msgstr "ساختارها" +msgstr "ساختارهای نام‌دار" #: src/SUMMARY.md src/user-defined-types.md #: src/user-defined-types/tuple-structs.md:5 msgid "Tuple Structs" -msgstr "ساختار‌های چند‌گانه (Tuple Structs)" +msgstr "ساختار‌ تاپل‌ها" #: src/SUMMARY.md src/user-defined-types.md src/user-defined-types/enums.md:1 #: src/pattern-matching/destructuring-enums.md:1 msgid "Enums" -msgstr "Enums" +msgstr "" #: src/SUMMARY.md src/user-defined-types.md msgid "Static" @@ -267,13 +255,12 @@ msgstr "" #: src/SUMMARY.md src/user-defined-types.md src/user-defined-types/aliases.md:1 msgid "Type Aliases" -msgstr "" +msgstr "نام‌های مستعار تایپ" #: src/SUMMARY.md src/user-defined-types.md #: src/user-defined-types/exercise.md:1 -#, fuzzy msgid "Exercise: Elevator Events" -msgstr "تمرین: عبارت را بسنجید" +msgstr "تمرین: رویدادهای آسانسور" #: src/SUMMARY.md msgid "Day 2: Morning" @@ -282,11 +269,11 @@ msgstr "روز دوم: صبح" #: src/SUMMARY.md src/running-the-course/course-structure.md:35 #: src/welcome-day-2.md src/pattern-matching.md msgid "Pattern Matching" -msgstr "تطبیق الگو" +msgstr "تطبیق" #: src/SUMMARY.md src/pattern-matching.md src/pattern-matching/match.md:1 msgid "Matching Values" -msgstr "" +msgstr "تطابق مقادیر" #: src/SUMMARY.md src/pattern-matching.md msgid "Destructuring Structs" @@ -295,23 +282,21 @@ msgstr "تخریب ساختارها" #: src/SUMMARY.md src/pattern-matching.md #, fuzzy msgid "Destructuring Enums" -msgstr "تخریب Enumها" +msgstr "Enum‌ های تفکیک‌‌پذیر" #: src/SUMMARY.md src/pattern-matching.md #: src/pattern-matching/let-control-flow.md:1 -#, fuzzy msgid "Let Control Flow" -msgstr "کنترل جریان" +msgstr "کنترل جریان Let" #: src/SUMMARY.md src/pattern-matching.md src/pattern-matching/exercise.md:1 msgid "Exercise: Expression Evaluation" -msgstr "تمرین: عبارت را بسنجید" +msgstr "تمرین: ارزیابی عبارت" #: src/SUMMARY.md src/running-the-course/course-structure.md:36 #: src/welcome-day-2.md src/methods-and-traits.md -#, fuzzy msgid "Methods and Traits" -msgstr "متد ها و تریت ها" +msgstr "متدها و تریت‌ها" #: src/SUMMARY.md src/methods-and-traits.md src/methods-and-traits/methods.md:1 msgid "Methods" @@ -322,28 +307,25 @@ msgid "Traits" msgstr "صفت‌ها" #: src/SUMMARY.md src/methods-and-traits/traits/implementing.md:1 -#, fuzzy msgid "Implementing Traits" -msgstr "پیاده سازی صفات (Traits) ناامن" +msgstr "پیاده سازی صفات (Traits)" #: src/SUMMARY.md src/methods-and-traits/traits/supertraits.md:1 msgid "Supertraits" msgstr "" #: src/SUMMARY.md src/methods-and-traits/traits/associated-types.md:1 -#, fuzzy msgid "Associated Types" -msgstr "تایپ‌های عددی" +msgstr "" #: src/SUMMARY.md src/methods-and-traits.md #: src/methods-and-traits/deriving.md:1 -#, fuzzy msgid "Deriving" -msgstr "صفات استنتاجی (Deriving Traits)" +msgstr "" #: src/SUMMARY.md src/methods-and-traits.md msgid "Exercise: Generic Logger" -msgstr "" +msgstr "تمرین: توابع جنریک" #: src/SUMMARY.md msgid "Day 2: Afternoon" @@ -355,9 +337,8 @@ msgid "Generics" msgstr "جنریک‌ها" #: src/SUMMARY.md src/generics.md src/generics/generic-functions.md:1 -#, fuzzy msgid "Generic Functions" -msgstr "توابع خارجی (Extern Functions)" +msgstr "" #: src/SUMMARY.md src/generics.md src/generics/generic-data.md:1 msgid "Generic Data Types" @@ -366,7 +347,7 @@ msgstr "انواع داده‌ها جنریک (Generic Data Types)" #: src/SUMMARY.md src/generics/generic-traits.md:1 #, fuzzy msgid "Generic Traits" -msgstr "جنریک‌ها" +msgstr "صفت‌های جنریک‌ها" #: src/SUMMARY.md src/generics.md src/generics/trait-bounds.md:1 msgid "Trait Bounds" @@ -387,32 +368,29 @@ msgstr "" #: src/SUMMARY.md src/running-the-course/course-structure.md:44 #: src/welcome-day-2-afternoon.md src/std-types.md -#, fuzzy msgid "Standard Library Types" -msgstr "کتابخانه استاندارد انواع داده" +msgstr "کتابخانه‌ استاندارد انواع داده" #: src/SUMMARY.md src/std-types.md src/std-types/std.md:1 msgid "Standard Library" -msgstr "کتابخانه‌های استاندارد" +msgstr "کتابخانه‌ استاندارد" #: src/SUMMARY.md src/std-types.md src/std-types/docs.md:1 -#, fuzzy msgid "Documentation" -msgstr "تست‌ سندها" +msgstr "مستندات" #: src/SUMMARY.md msgid "`Option`" msgstr "" -#: src/SUMMARY.md +#: src/SUMMARY.md src/error-handling/result.md:1 msgid "`Result`" msgstr "" #: src/SUMMARY.md src/android/aidl/types/primitives.md:14 #: src/android/interoperability/cpp/type-mapping.md:5 -#, fuzzy msgid "`String`" -msgstr "String" +msgstr "" #: src/SUMMARY.md src/std-types/vec.md:1 msgid "`Vec`" @@ -423,34 +401,30 @@ msgid "`HashMap`" msgstr "" #: src/SUMMARY.md src/std-types.md src/std-types/exercise.md:1 -#, fuzzy msgid "Exercise: Counter" -msgstr "تمرین‌ها" +msgstr "تمرین: شمارنده" #: src/SUMMARY.md src/running-the-course/course-structure.md:45 #: src/welcome-day-2-afternoon.md src/std-traits.md -#, fuzzy msgid "Standard Library Traits" -msgstr "کتابخانه استاندارد برای تریت ها" +msgstr "کتابخانه استاندارد برای تریت‌ها" #: src/SUMMARY.md src/std-traits.md src/std-traits/comparisons.md:1 #: src/concurrency/welcome-async.md msgid "Comparisons" -msgstr "" +msgstr "مقایسه" #: src/SUMMARY.md src/std-traits.md src/std-traits/operators.md:1 -#, fuzzy msgid "Operators" -msgstr "تکرار کننده" +msgstr "اپراتورها" #: src/SUMMARY.md src/std-traits/from-and-into.md:1 msgid "`From` and `Into`" msgstr "" #: src/SUMMARY.md src/std-traits.md src/std-traits/casting.md:1 -#, fuzzy msgid "Casting" -msgstr "تست‌کردن" +msgstr "" #: src/SUMMARY.md src/std-traits/read-and-write.md:1 msgid "`Read` and `Write`" @@ -465,9 +439,8 @@ msgid "Closures" msgstr "" #: src/SUMMARY.md src/std-traits.md src/std-traits/exercise.md:1 -#, fuzzy msgid "Exercise: ROT13" -msgstr "تمرین‌ها" +msgstr "" #: src/SUMMARY.md msgid "Day 3: Morning" @@ -484,9 +457,8 @@ msgstr "" #: src/SUMMARY.md src/memory-management.md #: src/memory-management/approaches.md:1 -#, fuzzy msgid "Approaches to Memory Management" -msgstr "مدیریت حافظه خودکار" +msgstr "رویکردهای مدیریت حافظه" #: src/SUMMARY.md src/memory-management.md src/memory-management/ownership.md:1 msgid "Ownership" @@ -502,18 +474,16 @@ msgstr "" #: src/SUMMARY.md src/memory-management.md #: src/memory-management/copy-types.md:1 -#, fuzzy msgid "Copy Types" -msgstr "تایپ‌های مرکب" +msgstr "کپی کردن تایپ‌ها" #: src/SUMMARY.md -#, fuzzy msgid "`Drop`" -msgstr "رها کردن" +msgstr "" #: src/SUMMARY.md src/memory-management.md src/memory-management/exercise.md:1 msgid "Exercise: Builder Type" -msgstr "" +msgstr "تمرین: تایپ‌های سازنده" #: src/SUMMARY.md src/running-the-course/course-structure.md:54 #: src/welcome-day-3.md src/smart-pointers.md @@ -540,7 +510,7 @@ msgstr "" #: src/SUMMARY.md msgid "Day 3: Afternoon" -msgstr "روز سوم: عصر" +msgstr "روز سوم: بعد از ظهر" #: src/SUMMARY.md src/running-the-course/course-structure.md:61 #: src/welcome-day-3-afternoon.md src/borrowing.md @@ -548,58 +518,49 @@ msgid "Borrowing" msgstr "قرض گرفتن" #: src/SUMMARY.md src/borrowing.md src/borrowing/shared.md:1 -#, fuzzy msgid "Borrowing a Value" -msgstr "قرض گرفتن" +msgstr "قرض گرفتن یک مقدار" #: src/SUMMARY.md src/borrowing.md src/borrowing/borrowck.md:1 -#, fuzzy msgid "Borrow Checking" -msgstr "قرض گرفتن" +msgstr "چک کردن قرض" #: src/SUMMARY.md src/borrowing.md src/borrowing/examples.md:1 msgid "Borrow Errors" msgstr "" #: src/SUMMARY.md src/borrowing.md src/borrowing/interior-mutability.md:1 -#, fuzzy msgid "Interior Mutability" -msgstr "قابلیت همکاری" +msgstr "" #: src/SUMMARY.md src/borrowing.md src/borrowing/exercise.md:1 -#, fuzzy msgid "Exercise: Health Statistics" -msgstr "آمارهای سلامتی" +msgstr "تمرین: آمار سلامتی" #: src/SUMMARY.md src/running-the-course/course-structure.md:62 #: src/welcome-day-3-afternoon.md src/lifetimes.md -#, fuzzy msgid "Lifetimes" -msgstr "چرخه حیات" +msgstr "چرخه حیاط" #: src/SUMMARY.md src/lifetimes.md src/lifetimes/lifetime-annotations.md:1 -#, fuzzy msgid "Lifetime Annotations" -msgstr "طول عمر در فراخوانی‌ توابع" +msgstr "" #: src/SUMMARY.md src/lifetimes.md -#, fuzzy msgid "Lifetime Elision" -msgstr "چرخه حیات" +msgstr "" #: src/SUMMARY.md src/lifetimes.md -#, fuzzy msgid "Struct Lifetimes" -msgstr "چرخه حیات" +msgstr "" #: src/SUMMARY.md src/lifetimes.md src/lifetimes/exercise.md:1 msgid "Exercise: Protobuf Parsing" msgstr "" #: src/SUMMARY.md -#, fuzzy msgid "Day 4: Morning" -msgstr "روز اول: صبح" +msgstr "روز چهارم: صبح" #: src/SUMMARY.md src/running-the-course/course-structure.md:70 #: src/welcome-day-4.md src/iterators.md @@ -615,9 +576,8 @@ msgid "`IntoIterator`" msgstr "" #: src/SUMMARY.md -#, fuzzy msgid "`FromIterator`" -msgstr "FromIterator" +msgstr "" #: src/SUMMARY.md src/iterators.md src/iterators/exercise.md:1 msgid "Exercise: Iterator Method Chaining" @@ -654,47 +614,41 @@ msgid "Test Modules" msgstr "تست‌ ماژول‌ها" #: src/SUMMARY.md src/testing.md src/testing/other.md:1 -#, fuzzy msgid "Other Types of Tests" -msgstr "منابع دیگر" +msgstr "" #: src/SUMMARY.md src/testing.md src/testing/lints.md:1 msgid "Compiler Lints and Clippy" msgstr "" #: src/SUMMARY.md src/testing.md src/testing/exercise.md:1 -#, fuzzy msgid "Exercise: Luhn Algorithm" -msgstr "الگوریتم Luhn" +msgstr "" #: src/SUMMARY.md -#, fuzzy msgid "Day 4: Afternoon" -msgstr "روز ۱: بعد از ظهر" +msgstr "روز چهارم: بعد از ظهر" #: src/SUMMARY.md src/running-the-course/course-structure.md:79 #: src/welcome-day-4-afternoon.md src/error-handling.md msgid "Error Handling" -msgstr "مدیریت خطا (Error Handling)" +msgstr "مدیریت خطا" #: src/SUMMARY.md src/error-handling.md src/error-handling/panics.md:1 msgid "Panics" -msgstr "پانیک‌ها" +msgstr "" #: src/SUMMARY.md src/error-handling.md src/error-handling/try.md:1 -#, fuzzy msgid "Try Operator" -msgstr "تکرار کننده" +msgstr "" #: src/SUMMARY.md src/error-handling.md src/error-handling/try-conversions.md:1 -#, fuzzy msgid "Try Conversions" -msgstr "تبدیل‌های غیر صریح" +msgstr "" #: src/SUMMARY.md -#, fuzzy msgid "`Error` Trait" -msgstr "صفت‌های بیشتر" +msgstr "" #: src/SUMMARY.md src/error-handling/thiserror-and-anyhow.md:1 msgid "`thiserror` and `anyhow`" @@ -711,13 +665,12 @@ msgid "Unsafe Rust" msgstr "Rust ناایمن" #: src/SUMMARY.md src/unsafe-rust.md -#, fuzzy msgid "Unsafe" -msgstr "Rust ناایمن" +msgstr "ناایمن" #: src/SUMMARY.md src/unsafe-rust.md src/unsafe-rust/dereferencing.md:1 msgid "Dereferencing Raw Pointers" -msgstr "عدم ارجاع به اشاره گرهای خام" +msgstr "" #: src/SUMMARY.md src/unsafe-rust.md src/unsafe-rust/mutable-static.md:1 msgid "Mutable Static Variables" @@ -728,19 +681,16 @@ msgid "Unions" msgstr "نوع داده چندگانه" #: src/SUMMARY.md src/unsafe-rust.md src/unsafe-rust/unsafe-functions.md:1 -#, fuzzy msgid "Unsafe Functions" -msgstr "فراخوانی متدهای ناامن" +msgstr "توابع ناامن" #: src/SUMMARY.md src/unsafe-rust.md -#, fuzzy msgid "Unsafe Traits" -msgstr "پیاده سازی صفات (Traits) ناامن" +msgstr "صفات (Traits) ناامن" #: src/SUMMARY.md src/unsafe-rust.md -#, fuzzy msgid "Exercise: FFI Wrapper" -msgstr "امن بودن FFI Wrapper" +msgstr "" #: src/SUMMARY.md src/bare-metal/android.md msgid "Android" @@ -781,7 +731,7 @@ msgstr "" #: src/SUMMARY.md #, fuzzy msgid "Service" -msgstr "سرور" +msgstr "سرویس" #: src/SUMMARY.md msgid "Server" @@ -865,14 +815,12 @@ msgid "With C++" msgstr "با C++" #: src/SUMMARY.md src/android/interoperability/cpp/bridge.md:1 -#, fuzzy msgid "The Bridge Module" -msgstr "تست‌ ماژول‌ها" +msgstr "" #: src/SUMMARY.md -#, fuzzy msgid "Rust Bridge" -msgstr "Rust در اندروید" +msgstr "" #: src/SUMMARY.md src/android/interoperability/cpp/generated-cpp.md:1 msgid "Generated C++" @@ -883,23 +831,20 @@ msgid "C++ Bridge" msgstr "" #: src/SUMMARY.md src/android/interoperability/cpp/shared-types.md:1 -#, fuzzy msgid "Shared Types" -msgstr "تایپ‌های عددی" +msgstr "" #: src/SUMMARY.md src/android/interoperability/cpp/shared-enums.md:1 msgid "Shared Enums" msgstr "" #: src/SUMMARY.md src/android/interoperability/cpp/rust-result.md:1 -#, fuzzy msgid "Rust Error Handling" -msgstr "مدیریت خطا (Error Handling)" +msgstr "مدیریت خطا Rust" #: src/SUMMARY.md src/android/interoperability/cpp/cpp-exception.md:1 -#, fuzzy msgid "C++ Error Handling" -msgstr "مدیریت خطا (Error Handling)" +msgstr "مدیریت خطا C++" #: src/SUMMARY.md src/android/interoperability/cpp/type-mapping.md:1 msgid "Additional Types" @@ -956,7 +901,6 @@ msgid "Visual Studio Code" msgstr "" #: src/SUMMARY.md src/exercises/chromium/third-party.md:1 -#, fuzzy msgid "Exercise" msgstr "تمرین‌ها" @@ -988,19 +932,16 @@ msgid "Limitations of CXX" msgstr "" #: src/SUMMARY.md src/chromium/interoperability-with-cpp/error-handling.md:1 -#, fuzzy msgid "CXX Error Handling" -msgstr "مدیریت خطا (Error Handling)" +msgstr "مدیریت خطا CXX" #: src/SUMMARY.md -#, fuzzy msgid "Error Handling: QR Example" -msgstr "مدیریت خطا (Error Handling)" +msgstr "مدیریت خطا: مثال QR" #: src/SUMMARY.md -#, fuzzy msgid "Error Handling: PNG Example" -msgstr "مدیریت خطا (Error Handling)" +msgstr "مدیریت خطا: مثال PNG" #: src/SUMMARY.md msgid "Using CXX in Chromium" @@ -1188,7 +1129,8 @@ msgstr "درایور" msgid "Using It" msgstr "استفاده از آن" -#: src/SUMMARY.md src/bare-metal/aps/exceptions.md:1 +#: src/SUMMARY.md src/error-handling/result.md:51 +#: src/bare-metal/aps/exceptions.md:1 msgid "Exceptions" msgstr "استثناها" @@ -1422,19 +1364,16 @@ msgid "Credits" msgstr "اعتبارها" #: src/index.md -#, fuzzy msgid "" -"![Build workflow](https://img.shields.io/github/actions/workflow/status/" -"google/comprehensive-rust/build.yml?style=flat-square) ![GitHub contributors]" -"(https://img.shields.io/github/contributors/google/comprehensive-rust?" -"style=flat-square) ![GitHub stars](https://img.shields.io/github/stars/" -"google/comprehensive-rust?style=flat-square)" -msgstr "" -"[![GitHub contributors](https://img.shields.io/github/contributors/google/" +"[![Build workflow](https://img.shields.io/github/actions/workflow/status/" +"google/comprehensive-rust/build.yml?style=flat-square)](https://github.com/" +"google/comprehensive-rust/actions/workflows/build.yml?query=branch%3Amain) [!" +"[GitHub contributors](https://img.shields.io/github/contributors/google/" "comprehensive-rust?style=flat-square)](https://github.com/google/" "comprehensive-rust/graphs/contributors) [![GitHub stars](https://img.shields." "io/github/stars/google/comprehensive-rust?style=flat-square)](https://github." "com/google/comprehensive-rust/stargazers)" +msgstr "" #: src/index.md msgid "" @@ -1443,14 +1382,13 @@ msgid "" "topics like generics and error handling." msgstr "" "این یک دوره رایگان Rust است که توسط تیم اندروید در گوگل توسعه یافته است. این " -"این دوره طیف کاملی از Rust را پوشش میدهد, از syntax پایه تا مباحث پیشرفته " -"پیشرفته مانند جنریک و مدیریت خطاها." +"این دوره طیف کامل‌ای از Rust را پوشش میدهد, از مباحث پایه تا مباحث پیشرفته " +"مانند جنریک و مدیریت خطاها." #: src/index.md -#, fuzzy msgid "" -"The latest version of the course can be found at https://google.github.io/" -"comprehensive-rust/. If you are reading somewhere else, please check there " +"The latest version of the course can be found at . If you are reading somewhere else, please check there " "for updates." msgstr "" "آخرین نسخه از دوره را میتوان در C++ و " -"جاوا می شود." +"[Android](android.md): یک دوره نیم روزه استفاده از Rust برای توسعه پلت فرم " +"اندروید (AOSP). این شامل قابلیت همکاری با C، C ++و Java است." #: src/index.md -#, fuzzy msgid "" -"Chromium: a half-day course on using Rust within Chromium based browsers. " -"This includes interoperability with C++ and how to include third-party " -"crates in Chromium." +"[Chromium](chromium.md): a half-day course on using Rust within Chromium " +"based browsers. This includes interoperability with C++ and how to include " +"third-party crates in Chromium." msgstr "" -"[Android](android.md): دوره نیم روزه استفاده از Rust برای پلتفرم " -"اندرویدتوسعه (AOSP). این شامل قابلیت همکاری با C، C++ و " -"جاوا می شود." +"[Chromium](chromium.md): یک دوره نیم روزه در مورد استفاده از Rust در " +"مرورگرهای مبتنی بر Chromium. این شامل قابلیت همکاری با C ++ و نحوه قرار دادن " +"جعبه های(crates) شخص ثالث در کروم است." #: src/index.md -#, fuzzy msgid "" -"Bare-metal: a whole-day class on using Rust for bare-metal (embedded) " -"development. Both microcontrollers and application processors are covered." +"[Bare-metal](bare-metal.md): a whole-day class on using Rust for bare-metal " +"(embedded) development. Both microcontrollers and application processors are " +"covered." msgstr "" -"[Bare-metal](bare-metal.md): یک دوره یک روزه درباره استفاده از راست برای " -"توسعه bare-metal(embedded). هر دوی میکروکنترلر‌ها و هم پردازشگر هایی با " -"کارایی خاص پوشش داده میشود." +"[Bare-metal](bare-metal.md): یک کلاس تمام روز در مورد استفاده از Rust برای " +"توسعهbare-metal (تعریف شده). هم میکروکنترلرها و هم پردازنده های برنامه پوشش " +"داده شده اند." #: src/index.md #, fuzzy msgid "" -"Concurrency: a whole-day class on concurrency in Rust. We cover both " -"classical concurrency (preemptively scheduling using threads and mutexes) " -"and async/await concurrency (cooperative multitasking using futures)." +"[Concurrency](concurrency/welcome.md): a whole-day class on concurrency in " +"Rust. We cover both classical concurrency (preemptively scheduling using " +"threads and mutexes) and async/await concurrency (cooperative multitasking " +"using futures)." msgstr "" -"[Concurrency](concurrency.md): یک دوره یک روزه درباره همروندی (Concurrency) " -"در Rust. ما هر دو همزمانی کلاسیک (برنامه ریزی پیشگیرانه با استفاده از نخ ها " -"و موتکس) همزمانی async/await (همکاری چند وظیفه ای با استفاده از حالت " -"futures)را پوشش میدهیم." +"[Concurrency](concurrency.md): یک کلاس تمام روز درباره همزمانی در Rust. ما " +"هر همزمانی کلاسیک (برنامه ریزی پیشگیرانه با استفاده از موضوعات و mutexes) و " +"async / await concurrency (چند وظیفه ای تعاونی با استفاده از اینده) را پوشش " +"می دهیم." #: src/index.md msgid "Non-Goals" @@ -1550,14 +1495,14 @@ msgstr "" "چندتا از اهداف خارج از این دوره عبارتند از:" #: src/index.md -#, fuzzy msgid "" -"Learning how to develop macros: please see Chapter 19.5 in the Rust Book and " -"Rust by Example instead." +"Learning how to develop macros: please see [Chapter 19.5 in the Rust Book]" +"(https://doc.rust-lang.org/book/ch19-06-macros.html) and [Rust by Example]" +"(https://doc.rust-lang.org/rust-by-example/macros.html) instead." msgstr "" "برای آموزش چگونه‌گی توسعه Macro ها: لطفا [Chapter 19.5 in the Rust Book]" "(https://doc.rust-lang.org/book/ch19-06-macros.html) و [Rust by Example]" -"(https://doc.rust-lang.org/rust-by-example/macros.html) را ببینید." +"(https://doc.rust-lang.org/rust-by-example/macros.html) را برسی کنید." #: src/index.md msgid "Assumptions" @@ -1569,8 +1514,8 @@ msgid "" "statically-typed language and we will sometimes make comparisons with C and " "C++ to better explain or contrast the Rust approach." msgstr "" -"این دوره فرض می کندشما دانش برنامه نویسی دارید. Rust یک زبان استاتیک تایپ ." -"است \n" +"این دوره فرض می کندشما دانش برنامه نویسی دارید. \n" +" Rust یک زبان استاتیک تایپ است\n" "و ما گاهی اوقات زبان Rust را با C و C++ مقایسه می کنیم " "تا رویکرد‌های Rust را بهتر توضیح دهیم یا در حالت مقایسه با آن قرار دهیم." @@ -1604,7 +1549,6 @@ msgstr "" "اینجا بخشی از پیشینه نحوه برگزاری دوره توسط گوگل به صورت درون سازمانی است." #: src/running-the-course.md -#, fuzzy msgid "" "We typically run classes from 9:00 am to 4:00 pm, with a 1 hour lunch break " "in the middle. This leaves 3 hours for the morning class and 3 hours for the " @@ -1615,7 +1559,7 @@ msgstr "" "استراحت ناهار در میانه روز با این رویه ۲.۵ ساعت برای کلاس صبح و ۲.۵ ساعت " "برای کلاس بعدازظهر باقی می‌گذارد. توجه داشته باشید که این فقط یک توصیه است: " "شما می‌توانید ۳ ساعت از جلسه صبح را صرف تمرین بیشتر برای افراد کنید. نکته " -"منفی این کار این است که با جلسه طولانی تر افراد بعد از 6 ساعت کلاس در بعد از " +"منفی این کار این است که با جلسه طولانی تر افراد بعد از ۶ ساعت کلاس در بعد از " "ظهر خیلی خسته میشوند." #: src/running-the-course.md @@ -1637,7 +1581,6 @@ msgstr "" "کنید). به این ترتیب یک صفحه نمایش تمیز برای ارائه به کلاس خواهید داشت." #: src/running-the-course.md -#, fuzzy msgid "" "Decide on the dates. Since the course takes four days, we recommend that you " "schedule the days over two weeks. Course participants have said that they " @@ -1647,7 +1590,7 @@ msgstr "" "در مورد زمان‌بندی دوره تصمیم بگیرید. از آنجایی که دوره حداقل سه روز کامل طول " "می‌کشد، توصیه می‌کنیم که دوره را در دو هفته برنامه‌ریزی کنید. شرکت کنندگان در " "دوره گفته‌اند که داشتن فاصله‌ای در دوره مفید است، زیرا به آنها کمک می‌کند تا " -"تمام اطلاعاتی را که به آنها می‌دهیم پردازش کنند. " +"تمام اطلاعاتی را که به آنها می‌دهیم پردازش کنند." #: src/running-the-course.md msgid "" @@ -1668,13 +1611,13 @@ msgstr "" "نخواهد بود." #: src/running-the-course.md -#, fuzzy msgid "" "On the day of your course, show up to the room a little early to set things " "up. We recommend presenting directly using `mdbook serve` running on your " -"laptop (see the installation instructions). This ensures optimal performance " -"with no lag as you change pages. Using your laptop will also allow you to " -"fix typos as you or the course participants spot them." +"laptop (see the [installation instructions](https://github.com/google/" +"comprehensive-rust#building)). This ensures optimal performance with no lag " +"as you change pages. Using your laptop will also allow you to fix typos as " +"you or the course participants spot them." msgstr "" "در روز برگزاری دوره، کمی زودتر به کلاس بیایید تا همه چیز را آماده کنید. ما " "توصیه می کنیم مستقیماً با استفاده از `mdbook serve`را در لپتاپ خود اجرا کنید. " @@ -1710,11 +1653,12 @@ msgstr "" "اندازه که برای ما لذت‌بخش بوده، لذت‌بخش باشد!" #: src/running-the-course.md -#, fuzzy msgid "" -"Please provide feedback afterwards so that we can keep improving the course. " -"We would love to hear what worked well for you and what can be made better. " -"Your students are also very welcome to send us feedback!" +"Please [provide feedback](https://github.com/google/comprehensive-rust/" +"discussions/86) afterwards so that we can keep improving the course. We " +"would love to hear what worked well for you and what can be made better. " +"Your students are also very welcome to [send us feedback](https://github.com/" +"google/comprehensive-rust/discussions/100)!" msgstr "" "لطفاً [بازخورد خود را ارائه دهید](https://github.com/google/comprehensive-" "rust/discussions/86) تا در آینده بتوانیم به بهبود دوره ادامه دهیم. ما دوست " @@ -1727,23 +1671,21 @@ msgid "Rust Fundamentals" msgstr "مبانی Rust" #: src/running-the-course/course-structure.md:7 -#, fuzzy msgid "" -"The first four days make up Rust Fundamentals. The days are fast paced and " -"we cover a lot of ground!" +"The first four days make up [Rust Fundamentals](../welcome-day-1.md). The " +"days are fast paced and we cover a lot of ground!" msgstr "" "سه روز اول دوره را [مبانی Rust ](../welcome-day-1.md)تشکیل میدهند. این این " -"سه روز با سرعت بالایی پیش می‌روند و ما موارد زیادی را پوشش می‌دهیم:" +"سه روز با سرعت بالایی پیش می‌روند و ما موارد زیادی را پوشش می‌دهیم!" #: src/running-the-course/course-structure.md:10 #: src/running-the-course/course-structure.md:146 -#, fuzzy msgid "Course schedule:" -msgstr "مباحث دوره" +msgstr "مباحث دوره:" #: src/running-the-course/course-structure.md:11 msgid "Day 1 Morning (2 hours and 5 minutes, including breaks)" -msgstr "" +msgstr "روز ۱ صبح (۲ ساعت و ۵ دقیقه با احتساب استراحت)" #: src/running-the-course/course-structure.md:13 #: src/running-the-course/course-structure.md:23 @@ -1788,9 +1730,8 @@ msgstr "بخش" #: src/concurrency/welcome-async.md src/concurrency/async.md #: src/concurrency/async-control-flow.md src/concurrency/async-pitfalls.md #: src/concurrency/async-exercises.md -#, fuzzy msgid "Duration" -msgstr "پیاده سازی" +msgstr "مدت زمان" #: src/running-the-course/course-structure.md:15 src/welcome-day-1.md #: src/types-and-values.md src/control-flow-basics.md src/tuples-and-arrays.md @@ -1820,7 +1761,7 @@ msgstr "۴۰ دقیقه" #: src/running-the-course/course-structure.md:21 msgid "Day 1 Afternoon (2 hours and 35 minutes, including breaks)" -msgstr "بعد از ظهر روز ۱ (۲ ساعت و ۳۵ دقیقه،شامل وقت استراحت)" +msgstr "روز ۱ بعد از ظهر (۲ ساعت و ۳۵ دقیقه،شامل وقت استراحت)" #: src/running-the-course/course-structure.md:25 src/welcome-day-1-afternoon.md msgid "35 minutes" @@ -1829,11 +1770,9 @@ msgstr "۳۵ دقیقه" #: src/running-the-course/course-structure.md:26 #: src/running-the-course/course-structure.md:54 #: src/running-the-course/course-structure.md:61 -#: src/running-the-course/course-structure.md:79 #: src/running-the-course/course-structure.md:164 #: src/welcome-day-1-afternoon.md src/welcome-day-3.md -#: src/welcome-day-3-afternoon.md src/welcome-day-4-afternoon.md -#: src/concurrency/welcome-async.md +#: src/welcome-day-3-afternoon.md src/concurrency/welcome-async.md msgid "55 minutes" msgstr "۵۵ دقیقه" @@ -1846,7 +1785,7 @@ msgstr "۵۰ دقیقه" #: src/running-the-course/course-structure.md:30 msgid "Day 2 Morning (2 hours and 10 minutes, including breaks)" -msgstr "صبح روز ۲ (۲ ساعت و ۱۰ دقیقه، شامل وقت استراحت)" +msgstr "روز ۲ صبح (۲ ساعت و ۱۰ دقیقه، شامل وقت استراحت)" #: src/running-the-course/course-structure.md:34 #: src/running-the-course/course-structure.md:52 @@ -1859,14 +1798,17 @@ msgid "3 minutes" msgstr "۳ دقیقه" #: src/running-the-course/course-structure.md:35 -#: src/running-the-course/course-structure.md:53 src/welcome-day-2.md -#: src/welcome-day-3.md +#: src/running-the-course/course-structure.md:44 +#: src/running-the-course/course-structure.md:53 +#: src/running-the-course/course-structure.md:79 src/welcome-day-2.md +#: src/welcome-day-2-afternoon.md src/welcome-day-3.md +#: src/welcome-day-4-afternoon.md msgid "1 hour" msgstr "۱ ساعت" #: src/running-the-course/course-structure.md:39 -msgid "Day 2 Afternoon (4 hours and 5 minutes, including breaks)" -msgstr "بعدازظهر روز ۲ (۴ ساعت و ۵ دقیقه، شامل وقت اسراحت)" +msgid "Day 2 Afternoon (3 hours and 15 minutes, including breaks)" +msgstr "روز ۲ بعد از ظهر (۴ ساعت و ۵ دقیقه، شامل وقت استراحت)" #: src/running-the-course/course-structure.md:43 #: src/running-the-course/course-structure.md:70 @@ -1875,29 +1817,29 @@ msgstr "بعدازظهر روز ۲ (۴ ساعت و ۵ دقیقه، شامل وق msgid "45 minutes" msgstr "۴۵ دقیقه" -#: src/running-the-course/course-structure.md:44 src/welcome-day-2-afternoon.md -msgid "1 hour and 20 minutes" -msgstr "۱ ساعت و ۲۰ دقیقه" - -#: src/running-the-course/course-structure.md:45 src/welcome-day-2-afternoon.md -msgid "1 hour and 40 minutes" -msgstr "۱ ساعت ۴۰ دقیقه" +#: src/running-the-course/course-structure.md:45 +#: src/running-the-course/course-structure.md:155 +#: src/running-the-course/course-structure.md:165 +#: src/welcome-day-2-afternoon.md src/concurrency/welcome.md +#: src/concurrency/welcome-async.md +msgid "1 hour and 10 minutes" +msgstr "۱ ساعت و ۱۰ دقیفه" #: src/running-the-course/course-structure.md:48 msgid "Day 3 Morning (2 hours and 20 minutes, including breaks)" -msgstr "صبح روز ۳ (۲ ساعت و ۲۰ دقیقه، شامل وقت استراحت)" +msgstr "روز ۳ صبح (۲ ساعت و ۲۰ دقیقه، شامل وقت استراحت)" #: src/running-the-course/course-structure.md:57 msgid "Day 3 Afternoon (1 hour and 55 minutes, including breaks)" -msgstr "بعدازظهر روز ۳ (۱ ساعت و ۵۵ دقیقه، شامل وقت اسراحت)" +msgstr "روز ۳ بعدازظهر(۱ ساعت و ۵۵ دقیقه، شامل وقت اسراحت)" #: src/running-the-course/course-structure.md:65 msgid "Day 4 Morning (2 hours and 40 minutes, including breaks)" -msgstr "صبح روز ۴ (۲ ساعت و ۴۰ دقیقه، شامل وقت اسراحت)" +msgstr "روز ۴ صبح (۲ ساعت و ۴۰ دقیقه، شامل وقت استراحت)" #: src/running-the-course/course-structure.md:75 -msgid "Day 4 Afternoon (2 hours and 10 minutes, including breaks)" -msgstr "بعدازظهر روز ۴ (۲ ساعت و ۱۰ دقیقه، شامل وقت اسراحت)" +msgid "Day 4 Afternoon (2 hours and 15 minutes, including breaks)" +msgstr "روز ۴ بعدازظهر (۲ ساعت و ۱۰ دقیقه، شامل وقت استراحت)" #: src/running-the-course/course-structure.md:80 src/welcome-day-4-afternoon.md msgid "1 hour and 5 minutes" @@ -1908,12 +1850,11 @@ msgid "Deep Dives" msgstr "عمیق تر شدن" #: src/running-the-course/course-structure.md:87 -#, fuzzy msgid "" "In addition to the 4-day class on Rust Fundamentals, we cover some more " "specialized topics:" msgstr "" -"علاوه بر کلاس 3 روزه Rust Fundamentals، موضوعات تخصصی تری را نیز پوشش می " +"علاوه بر کلاس 4 روزه Rust Fundamentals، موضوعات تخصصی تری را نیز پوشش می " "دهیم:" #: src/running-the-course/course-structure.md:90 @@ -1921,22 +1862,22 @@ msgid "Rust in Android" msgstr "Rust در اندروید" #: src/running-the-course/course-structure.md:92 -#, fuzzy msgid "" -"The Rust in Android deep dive is a half-day course on using Rust for Android " -"platform development. This includes interoperability with C, C++, and Java." +"The [Rust in Android](../android.md) deep dive is a half-day course on using " +"Rust for Android platform development. This includes interoperability with " +"C, C++, and Java." msgstr "" "در [Rust در اندروید](../android.md) توی دوره یک دوره نیم روزه در مورد " "استفاده از Rust برای توسعه پلتفرم اندروید عمیق می‌شیم. این شامل قابلیت تعامل " "با C، C++ و جاوا می‌شود." #: src/running-the-course/course-structure.md:96 -#, fuzzy msgid "" -"You will need an AOSP checkout. Make a checkout of the course repository on " -"the same machine and move the `src/android/` directory into the root of your " -"AOSP checkout. This will ensure that the Android build system sees the " -"`Android.bp` files in `src/android/`." +"You will need an [AOSP checkout](https://source.android.com/docs/setup/" +"download/downloading). Make a checkout of the [course repository](https://" +"github.com/google/comprehensive-rust) on the same machine and move the `src/" +"android/` directory into the root of your AOSP checkout. This will ensure " +"that the Android build system sees the `Android.bp` files in `src/android/`." msgstr "" "شما نیاز دارید که یک نسخه از [مخزن ASOP](https://source.android.com/docs/" "setup/download/downloading) بگیرید, همچنین یک نسخه از [مخزن دوره](https://" @@ -1956,47 +1897,52 @@ msgstr "" "که وقتی آنها را اجرا می‌کنید به درستی کار می‌کنند." #: src/running-the-course/course-structure.md:108 -#, fuzzy msgid "Rust in Chromium" msgstr "Rust در اندروید" #: src/running-the-course/course-structure.md:110 msgid "" -"The Rust in Chromium deep dive is a half-day course on using Rust as part of " -"the Chromium browser. It includes using Rust in Chromium's `gn` build " -"system, bringing in third-party libraries (\"crates\") and C++ " -"interoperability." +"The [Rust in Chromium](../chromium.md) deep dive is a half-day course on " +"using Rust as part of the Chromium browser. It includes using Rust in " +"Chromium's `gn` build system, bringing in third-party libraries (\"crates\") " +"and C++ interoperability." msgstr "" +"عمیق [Rust in Chromium](../chromium.md) یک دوره نیم روزه برای استفاده از " +"Rust به عنوان بخشی از مرورگر Chromium است. این شامل استفاده از Rust در سیستم " +"ساخت `gn‍` Chromium، آوردن کتابخانه‌های شخص ثالث (\"crates\") و قابلیت همکاری +" +"+C است." #: src/running-the-course/course-structure.md:115 msgid "" "You will need to be able to build Chromium --- a debug, component build is " -"recommended for speed but any build will work. Ensure that you can run the " -"Chromium browser that you've built." +"[recommended](../chromium/setup.md) for speed but any build will work. " +"Ensure that you can run the Chromium browser that you've built." msgstr "" +"شما باید بتوانید Chromium را بسازید --- یک اشکال زدایی، ساخت کامپوننت برای " +"سرعت [توصیه می شود] (../chromium/setup.md) است، اما هر ساختی کار می کند. " +"مطمئن شوید که می‌توانید مرورگر Chromium را که ساخته‌اید اجرا کنید." #: src/running-the-course/course-structure.md:119 msgid "Bare-Metal Rust" msgstr "Rust بر روی سخت افزار بدون سیستم عامل" #: src/running-the-course/course-structure.md:121 -#, fuzzy msgid "" -"The Bare-Metal Rust deep dive is a full day class on using Rust for bare-" -"metal (embedded) development. Both microcontrollers and application " -"processors are covered." +"The [Bare-Metal Rust](../bare-metal.md) deep dive is a full day class on " +"using Rust for bare-metal (embedded) development. Both microcontrollers and " +"application processors are covered." msgstr "" "دوره آموزشی [Rust بر روی سخت افزار بدون سیستم عامل](../bare-metal.md) یک " "دوره یک روزه با تمرکز بر استفاده ازRust برای توسعه بر روی سخت افزار بدون " "سیستم عامل (embedded) است. این دوره هم میکروکنترلرها و هم پردازشگر هایی با " -"کارایی خاص را پوشش می دهد. " +"کارایی خاص را پوشش می دهد." #: src/running-the-course/course-structure.md:125 -#, fuzzy msgid "" -"For the microcontroller part, you will need to buy the BBC micro:bit v2 " -"development board ahead of time. Everybody will need to install a number of " -"packages as described on the welcome page." +"For the microcontroller part, you will need to buy the [BBC micro:bit]" +"(https://microbit.org/) v2 development board ahead of time. Everybody will " +"need to install a number of packages as described on the [welcome page](../" +"bare-metal.md)." msgstr "" "برای قسمت میکروکنترلر، باید برد توسعه [BBCmicro:bit](https://microbit.org/) " "v2 را خریداری کنید. همه باید تعدادی بسته را همانطور که در [welcome page]" @@ -2009,11 +1955,11 @@ msgstr "همزمانی در Rust" #: src/running-the-course/course-structure.md:132 #, fuzzy msgid "" -"The Concurrency in Rust deep dive is a full day class on classical as well " -"as `async`/`await` concurrency." +"The [Concurrency in Rust](../concurrency/welcome.md) deep dive is a full day " +"class on classical as well as `async`/`await` concurrency." msgstr "" "دوره [همزمانی در Rust ](../concurrency.md) یک روزه با تمرکز بر همزمانی " -"کلاسیک و همچنین همزمانی `async`/`await` است. " +"کلاسیک و همچنین همزمانی `async`/`await` است." #: src/running-the-course/course-structure.md:135 msgid "" @@ -2041,7 +1987,7 @@ msgstr "۳۰ دقیقه" #: src/running-the-course/course-structure.md:152 #: src/running-the-course/course-structure.md:163 src/methods-and-traits.md -#: src/std-types.md src/std-traits.md src/memory-management.md src/borrowing.md +#: src/std-types.md src/memory-management.md src/borrowing.md #: src/concurrency/welcome.md src/concurrency/sync-exercises.md #: src/concurrency/welcome-async.md src/concurrency/async-pitfalls.md #: src/concurrency/async-exercises.md @@ -2052,12 +1998,6 @@ msgstr "۲۰ دقیقه" msgid "Send and Sync" msgstr "ارسال و همگام سازی" -#: src/running-the-course/course-structure.md:155 -#: src/running-the-course/course-structure.md:165 src/concurrency/welcome.md -#: src/concurrency/welcome-async.md -msgid "1 hour and 10 minutes" -msgstr "۱ ساعت و ۱۰ دقیفه" - #: src/running-the-course/course-structure.md:158 msgid "Afternoon (3 hours and 20 minutes, including breaks)" msgstr "بعدازظهر (۳ ساعت و ۲۰ دقیقه، شامل وقت استراحت)" @@ -2081,22 +2021,22 @@ msgstr "چندین میانبر صفحه کلید مفید در mdBook وجود #: src/running-the-course/keyboard-shortcuts.md:5 #, fuzzy msgid "Arrow-Left: Navigate to the previous page." -msgstr ": به صفحه قبلی هدایت می کند" +msgstr "Arrow-Left: به صفحه قبلی هدایت می کند." #: src/running-the-course/keyboard-shortcuts.md:6 #, fuzzy msgid "Arrow-Right: Navigate to the next page." -msgstr "به صفحه بعدی هدایت می کند" +msgstr "Arrow-Right: به صفحه بعدی هدایت می کند." #: src/running-the-course/keyboard-shortcuts.md:7 #, fuzzy msgid "Ctrl + Enter: Execute the code sample that has focus." -msgstr "اجرای نمونه کدی که بر روی آن قرار گرفته است." +msgstr "Ctrl + Enter: اجرای نمونه کدی که بر روی آن تمرکز شده است." #: src/running-the-course/keyboard-shortcuts.md:8 #, fuzzy msgid "s: Activate the search bar." -msgstr "نوار جستجو را فعال می کند." +msgstr "s: نوار جستجو را فعال می کند." #: src/running-the-course/translations.md:3 msgid "" @@ -2108,41 +2048,98 @@ msgstr "" #: src/running-the-course/translations.md:6 msgid "" -"Brazilian Portuguese by @rastringer, @hugojacob, @joaovicmendes, and " -"@henrif75." +"[Brazilian Portuguese](https://google.github.io/comprehensive-rust/pt-BR/) " +"by [@rastringer](https://github.com/rastringer), [@hugojacob](https://github." +"com/hugojacob), [@joaovicmendes](https://github.com/joaovicmendes), and " +"[@henrif75](https://github.com/henrif75)." msgstr "" +"[پرتغالی برزیلی](https://google.github.io/comprehensive-rust/pt-BR/) توسط " +"[@rastringer](https://github.com/rastringer), [@hugojacob](https://github." +"com/hugojacob), [@joaovicmendes](https://github.com/joaovicmendes) و " +"[@henrif75](https://github.com/henrif75)." #: src/running-the-course/translations.md:8 +#, fuzzy msgid "" -"Chinese (Simplified) by @suetfei, @wnghl, @anlunx, @kongy, @noahdragon, " -"@superwhd, @SketchK, and @nodmp." +"[Chinese (Simplified)](https://google.github.io/comprehensive-rust/zh-CN/) " +"by [@suetfei](https://github.com/suetfei), [@wnghl](https://github.com/" +"wnghl), [@anlunx](https://github.com/anlunx), [@kongy](https://github.com/" +"kongy), [@noahdragon](https://github.com/noahdragon), [@superwhd](https://" +"github.com/superwhd), @SketchK, and [@nodmp](https://github.com/nodmp)." msgstr "" +"[چینی (ساده‌شده)](https://google.github.io/comprehensive-rust/zh-CN/) توسط " +"[@suetfei](https://github.com/suetfei), [@wnghl](https://github.com/wnghl), " +"[@anlunx](https://github.com/anlunx), [@kongy](https://github.com/kongy), " +"[@noahdragon](https://github.com/noahdragon), [@superwhd](https://github.com/" +"superwhd), [@SketchK](https://github.com/SketchK) و [@nodmp](https://github." +"com/nodmp)." #: src/running-the-course/translations.md:10 msgid "" -"Chinese (Traditional) by @hueich, @victorhsieh, @mingyc, @kuanhungchen, and " -"@johnathan79717." +"[Chinese (Traditional)](https://google.github.io/comprehensive-rust/zh-TW/) " +"by [@hueich](https://github.com/hueich), [@victorhsieh](https://github.com/" +"victorhsieh), [@mingyc](https://github.com/mingyc), [@kuanhungchen](https://" +"github.com/kuanhungchen), and [@johnathan79717](https://github.com/" +"johnathan79717)." msgstr "" +"[چینی (سنتی)](https://google.github.io/comprehensive-rust/zh-TW/) توسط " +"[@hueich](https://github.com/hueich), [@victorhsieh](https://github.com/" +"victorhsieh), [@mingyc](https://github.com/mingyc), [@kuanhungchen](https://" +"github.com/kuanhungchen) و [@johnathan79717](https://github.com/" +"johnathan79717)." #: src/running-the-course/translations.md:12 -msgid "Korean by @keispace, @jiyongp, @jooyunghan, and @namhyung." +#, fuzzy +msgid "" +"[Japanese](https://google.github.io/comprehensive-rust/ja/) by [@CoinEZ-JPN]" +"(https://github.com/CoinEZ), [@momotaro1105](https://github.com/" +"momotaro1105), [@HidenoriKobayashi](https://github.com/HidenoriKobayashi) " +"and [@kantasv](https://github.com/kantasv)." msgstr "" +"[ژاپنی](https://google.github.io/comprehensive-rust/ja/) توسط [@CoinEZ-JPN]" +"(https://github.com/CoinEZ) و [@momotaro1105](https://github.com/" +"momotaro1105)." -#: src/running-the-course/translations.md:13 -msgid "Spanish by @deavid." +#: src/running-the-course/translations.md:14 +msgid "" +"[Korean](https://google.github.io/comprehensive-rust/ko/) by [@keispace]" +"(https://github.com/keispace), [@jiyongp](https://github.com/jiyongp), " +"[@jooyunghan](https://github.com/jooyunghan), and [@namhyung](https://github." +"com/namhyung)." msgstr "" +"[کره ای](https://google.github.io/comprehensive-rust/ko/) توسط [@keispace]" +"(https://github.com/keispace), [@jiyongp](https://github.com/jiyongp) و " +"[@jooyunghan](https://github.com/jooyunghan)." #: src/running-the-course/translations.md:15 msgid "" +"[Spanish](https://google.github.io/comprehensive-rust/es/) by [@deavid]" +"(https://github.com/deavid)." +msgstr "" +"[اسپانیایی](https://google.github.io/comprehensive-rust/es/) توسط [@deavid]" +"(https://github.com/deavid)." + +#: src/running-the-course/translations.md:16 +#, fuzzy +msgid "" +"[Ukrainian](https://google.github.io/comprehensive-rust/uk/) by [@git-user-" +"cpp](https://github.com/git-user-cpp), [@yaremam](https://github.com/" +"yaremam) and [@reta](https://github.com/reta)." +msgstr "" +"[فرانسویی](https://google.github.io/comprehensive-rust/fr/) توسط [@KookaS]" +"(https://github.com/KookaS) و [@vcaen](https://github.com/vcaen)." + +#: src/running-the-course/translations.md:18 +msgid "" "Use the language picker in the top-right corner to switch between languages." msgstr "" "از انتخابگر زبان در گوشه بالا سمت راست برای جابه‌جایی بین زبان‌ها استفاده کنید." -#: src/running-the-course/translations.md:17 +#: src/running-the-course/translations.md:20 msgid "Incomplete Translations" msgstr "ترجمه‌های ناقص" -#: src/running-the-course/translations.md:19 +#: src/running-the-course/translations.md:22 msgid "" "There is a large number of in-progress translations. We link to the most " "recently updated translations:" @@ -2150,31 +2147,63 @@ msgstr "" "تعداد زیادی ترجمه در حال انجام وجود دارد. ما به آخرین ترجمه های به روز شده " "پیوند می دهیم:" -#: src/running-the-course/translations.md:22 -msgid "Bengali by @raselmandol." +#: src/running-the-course/translations.md:25 +#, fuzzy +msgid "" +"[Arabic](https://google.github.io/comprehensive-rust/ar/) by [@younies]" +"(https://github.com/younies)" msgstr "" +"[اسپانیایی](https://google.github.io/comprehensive-rust/es/) توسط [@deavid]" +"(https://github.com/deavid)." -#: src/running-the-course/translations.md:23 -msgid "French by @KookaS, @vcaen and @AdrienBaudemont." +#: src/running-the-course/translations.md:26 +msgid "" +"[Bengali](https://google.github.io/comprehensive-rust/bn/) by [@raselmandol]" +"(https://github.com/raselmandol)." msgstr "" +"[بنگالی](https://google.github.io/comprehensive-rust/bn/) توسط [@raselmandol]" +"(https://github.com/raselmandol)." -#: src/running-the-course/translations.md:24 -msgid "German by @Throvn and @ronaldfw." +#: src/running-the-course/translations.md:27 +msgid "" +"[French](https://google.github.io/comprehensive-rust/fr/) by [@KookaS]" +"(https://github.com/KookaS), [@vcaen](https://github.com/vcaen) and " +"[@AdrienBaudemont](https://github.com/AdrienBaudemont)." msgstr "" +"[فرانسویی](https://google.github.io/comprehensive-rust/fr/) توسط [@KookaS]" +"(https://github.com/KookaS) و [@vcaen](https://github.com/vcaen)." -#: src/running-the-course/translations.md:25 -msgid "Japanese by @CoinEZ-JPN and @momotaro1105." +#: src/running-the-course/translations.md:28 +msgid "" +"[German](https://google.github.io/comprehensive-rust/de/) by [@Throvn]" +"(https://github.com/Throvn) and [@ronaldfw](https://github.com/ronaldfw)." msgstr "" +"[آلمانی](https://google.github.io/comprehensive-rust/de/) توسط [@Throvn]" +"(https://github.com/Throvn) و [@ronaldfw](https://github.com/ronaldfw)." -#: src/running-the-course/translations.md:26 -msgid "Italian by @henrythebuilder and @detro." +#: src/running-the-course/translations.md:29 +msgid "" +"[Italian](https://google.github.io/comprehensive-rust/it/) by " +"[@henrythebuilder](https://github.com/henrythebuilder) and [@detro](https://" +"github.com/detro)." msgstr "" +"[ایتالیایی](https://google.github.io/comprehensive-rust/de/) توسط [@Throvn]" +"(https://github.com/Throvn) و [@ronaldfw](https://github.com/ronaldfw)." -#: src/running-the-course/translations.md:28 -#, fuzzy +#: src/running-the-course/translations.md:31 msgid "" -"If you want to help with this effort, please see our instructions for how to " -"get going. Translations are coordinated on the issue tracker." +"The full list of translations with their current status is also available " +"either [as of their last update](https://google.github.io/comprehensive-rust/" +"translation-report.html) or [synced to the latest version of the course]" +"(https://google.github.io/comprehensive-rust/synced-translation-report.html)." +msgstr "" + +#: src/running-the-course/translations.md:35 +msgid "" +"If you want to help with this effort, please see [our instructions](https://" +"github.com/google/comprehensive-rust/blob/main/TRANSLATIONS.md) for how to " +"get going. Translations are coordinated on the [issue tracker](https://" +"github.com/google/comprehensive-rust/issues/282)." msgstr "" "اگر می‌خواهید به این کار کمک کنید، لطفاً [دستورالعمل‌های ما](https://github.com/" "google/comprehensive-rust/blob/main/TRANSLATIONS.md) را برای چگونگی ادامه " @@ -2182,17 +2211,17 @@ msgstr "" "comprehensive-rust/issues/282) هماهنگ و کنترل می شوند." #: src/cargo.md -#, fuzzy msgid "" -"When you start reading about Rust, you will soon meet Cargo, the standard " -"tool used in the Rust ecosystem to build and run Rust applications. Here we " -"want to give a brief overview of what Cargo is and how it fits into the " -"wider ecosystem and how it fits into this training." +"When you start reading about Rust, you will soon meet [Cargo](https://doc." +"rust-lang.org/cargo/), the standard tool used in the Rust ecosystem to build " +"and run Rust applications. Here we want to give a brief overview of what " +"Cargo is and how it fits into the wider ecosystem and how it fits into this " +"training." msgstr "" "وقتی شروع به خواندن درباره Rust می کنید، خیلی سریع با [Cargo](https://doc." "rust-lang.org/cargo/) ، ابزار استانداردی که در اکوسیستم Rust برای ساخت و " "اجرای برنامه های Rust استفاده می شود، آشنا خواهید شد. در اینجا می‌خواهیم یک " -"مرور مختصر از در مورد کارگو و نحوه انطباق آن با اکوسیستم راست و برنامه‌های آن " +"مرور مختصر از در مورد کارگو و نحوه انطباق آن با اکوسیستم Rust و برنامه‌های آن " "را در این آموزش ارائه دهیم." #: src/cargo.md @@ -2200,9 +2229,8 @@ msgid "Installation" msgstr "راهنمای نصب" #: src/cargo.md -#, fuzzy -msgid "**Please follow the instructions on https://rustup.rs/.**" -msgstr "**لطفا دستورالعمل را اجرا کنید .**" +msgid "**Please follow the instructions on .**" +msgstr "**لطفا دستورالعمل را دنبال کنید .**" #: src/cargo.md msgid "" @@ -2210,18 +2238,19 @@ msgid "" "(`rustc`). You will also get `rustup`, a command line utility that you can " "use to install to different compiler versions." msgstr "" -"با این کار به شما ابزار ساخت Cargo (`cargo`) و کامپایلر Rust (`rustc`) را " -"می دهد. شما همچنین `rustup` را دریافت خواهید کرد، یک ابزار خط فرمان که می " -"توانید از آن برای نصب نسخه های مختلف کامپایلر استفاده کنید." +"این کار به شما امکان استفاده از ابزار ساخت Cargo (`cargo`) و کامپایلر Rust " +"(`rustc`) را می دهد. شما همچنین `rustup` را دریافت خواهید کرد، یک ابزار خط " +"فرمان(CLI) که می توانید از آن برای نصب نسخه های مختلف کامپایلر استفاده کنید." #: src/cargo.md -#, fuzzy msgid "" "After installing Rust, you should configure your editor or IDE to work with " -"Rust. Most editors do this by talking to rust-analyzer, which provides auto-" -"completion and jump-to-definition functionality for VS Code, Emacs, Vim/" -"Neovim, and many others. There is also a different IDE available called " -"RustRover." +"Rust. Most editors do this by talking to [rust-analyzer](https://rust-" +"analyzer.github.io/), which provides auto-completion and jump-to-definition " +"functionality for [VS Code](https://code.visualstudio.com/), [Emacs](https://" +"rust-analyzer.github.io/manual.html#emacs), [Vim/Neovim](https://rust-" +"analyzer.github.io/manual.html#vimneovim), and many others. There is also a " +"different IDE available called [RustRover](https://www.jetbrains.com/rust/)." msgstr "" "پس از نصب Rust، باید ویرایشگر یا IDE خود را برای کار با Rust پیکربندی کنید. " "اکثر ویرایشگرها این کار را با ارتباط گرفتن با [rust-analyzer](https://rust-" @@ -2232,20 +2261,27 @@ msgstr "" "متفاوت به نام [RustRover](https://www.jetbrains.com/rust/) در دسترس است." #: src/cargo.md -#, fuzzy msgid "" -"On Debian/Ubuntu, you can also install Cargo, the Rust source and the Rust " -"formatter via `apt`. However, this gets you an outdated rust version and may " -"lead to unexpected behavior. The command would be:" +"On Debian/Ubuntu, you can also install Cargo, the Rust source and the [Rust " +"formatter](https://github.com/rust-lang/rustfmt) via `apt`. However, this " +"gets you an outdated rust version and may lead to unexpected behavior. The " +"command would be:" msgstr "" "در دبیان/اوبونتو، می‌توانید Cargo و Rust و [Rust formatter](https://github." "com/rust-lang/rustfmt) را نیز از طریق `apt` نصب کنید. با این حال، این به شما " "یک نسخه قدیمی Rust را جهت نصب می دهد و ممکن است منجر به رفتار غیرمنتظره " "برنامه شود. command مورد نظر این خواهد بود:" +#: src/cargo.md +msgid "" +"On macOS, you can use [Homebrew](https://brew.sh/) to install Rust, but this " +"may provide an outdated version. Therefore, it is recommended to install " +"Rust from the official site." +msgstr "" + #: src/cargo/rust-ecosystem.md:1 msgid "The Rust Ecosystem" -msgstr "اکوسیستم رراست" +msgstr "اکوسیستم Rust" #: src/cargo/rust-ecosystem.md:3 msgid "" @@ -2259,15 +2295,14 @@ msgid "" "intermediate formats." msgstr "" "`rustc`: کامپایلر Rust که فایل‌های `.rs` را به باینری و سایر فرمت‌های میانی " -"تبدیل می‌کند. " +"تبدیل می‌کند." #: src/cargo/rust-ecosystem.md:8 -#, fuzzy msgid "" "`cargo`: the Rust dependency manager and build tool. Cargo knows how to " -"download dependencies, usually hosted on https://crates.io, and it will pass " -"them to `rustc` when building your project. Cargo also comes with a built-in " -"test runner which is used to execute unit tests." +"download dependencies, usually hosted on , and it will " +"pass them to `rustc` when building your project. Cargo also comes with a " +"built-in test runner which is used to execute unit tests." msgstr "" "`cargo`: مدیر وابستگی Rust و build tool آن است. Cargo می داند که چگونه " "وابستگی ها را که معمولاً در میزبانی می شوند دانلود کند و " @@ -2275,7 +2310,6 @@ msgstr "" "دستگاه تست داخلی است که برای اجرای unit test استفاده می شود." #: src/cargo/rust-ecosystem.md:13 -#, fuzzy msgid "" "`rustup`: the Rust toolchain installer and updater. This tool is used to " "install and update `rustc` and `cargo` when new versions of Rust are " @@ -2283,11 +2317,11 @@ msgid "" "standard library. You can have multiple versions of Rust installed at once " "and `rustup` will let you switch between them as needed." msgstr "" -"`rustup`: نصب‌کننده و به‌روزرسانی‌کننده toolchain مربوط به Rust است. این ابزار " -"برای نصب و به‌روزرسانی `rustc` و `cargo` هنگام انتشار نسخه‌های جدید Rust " -"استفاده می‌شود. علاوه بر این، `rustup` می‌تواند مستندات کتابخانه استاندارد " -"Rust را دانلود کند. همچنین می‌توانید چندین نسخه Rust را به‌طور هم‌زمان نصب " -"کنید و `rustup` به شما امکان می‌دهد در صورت نیاز بین آنها جابه‌جا شوید." +"'rustup': نصب کننده و به روز رسانی rustchain ابزار. این ابزار برای نصب و به " +"روز رسانی \"rustc\" و \"cargo\" در هنگام انتشار نسخه های جدید Rust استفاده " +"می شود. علاوه بر این، \"rustup\" همچنین می تواند اسناد را برای کتابخانه " +"استاندارد دانلود کند. شما می توانید چندین نسخه از Rust را در یک زمان نصب " +"کنید و \"rustup\" به شما اجازه می دهد تا در صورت نیاز بین انها تغییر دهید." #: src/cargo/rust-ecosystem.md:21 src/types-and-values/hello-world.md:26 #: src/references/exclusive.md:20 src/memory-management/move.md:153 @@ -2320,19 +2354,17 @@ msgstr "" "هفته \"stable\" می شود." #: src/cargo/rust-ecosystem.md:32 -#, fuzzy msgid "" -"Dependencies can also be resolved from alternative registries, git, folders, " -"and more." +"Dependencies can also be resolved from alternative [registries](https://doc." +"rust-lang.org/cargo/reference/registries.html), git, folders, and more." msgstr "" "همچنین می‌توان وابستگی‌ها را از [registries](https://doc.rust-lang.org/cargo/" "reference/registries.html)، پوشه‌ها و git و موارد دیگر برطرف کرد." #: src/cargo/rust-ecosystem.md:35 -#, fuzzy msgid "" -"Rust also has editions: the current edition is Rust 2021. Previous editions " -"were Rust 2015 and Rust 2018." +"Rust also has [editions](https://doc.rust-lang.org/edition-guide/): the " +"current edition is Rust 2021. Previous editions were Rust 2015 and Rust 2018." msgstr "" "Rust همچنین نسخه [editions](https://doc.rust-lang.org/edition-guide/) دارد: " "نسخه فعلی Rust 2021 است. نسخه های قبلی Rust 2015 و Rust 2018 بودند." @@ -2364,53 +2396,58 @@ msgid "" "Mention that it is quite rare to ever use the compiler directly not through " "`cargo` (most users never do)." msgstr "" -"لازم به ذکر است که استفاده از کامپایلر به طور مستقیم و نه از طریق `cargo` " -"بسیار غیرمعمول است (اکثر کاربران هرگز این کار را نمی کنند)." +"لازم به ذکر است که استفاده از کامپایلر به طور مستقیم(rustc) و نه از طریق " +"`cargo` بسیار غیرمعمول است (اکثر کاربران هرگز این کار را نمی کنند)." #: src/cargo/rust-ecosystem.md:50 -#, fuzzy msgid "" "It might be worth alluding that Cargo itself is an extremely powerful and " "comprehensive tool. It is capable of many advanced features including but " "not limited to:" msgstr "" -"شاید لازم به ذکر باشد که Cargo خود یک ابزار بسیار قدرتمند و جامع است. این " -"قابلیت دارای بسیاری از ویژگی های پیشرفته زیر است و محدود به همین موارد " -"نمی‌شود:" +"ممکن است لازم به ذکر باشد که Cargo خود یک ابزار بسیار قدرتمند و جامع است. " +"این است که قادر به بسیاری از ویژگی های پیشرفته از جمله اما نه محدود به:" #: src/cargo/rust-ecosystem.md:53 msgid "Project/package structure" msgstr "ساختار پروژه/بسته" #: src/cargo/rust-ecosystem.md:54 -msgid "workspaces" +msgid "[workspaces](https://doc.rust-lang.org/cargo/reference/workspaces.html)" msgstr "" +"[workspaces](https://doc.rust-lang.org/cargo/reference/workspaces.html)" #: src/cargo/rust-ecosystem.md:55 msgid "Dev Dependencies and Runtime Dependency management/caching" -msgstr "وابستگی های Dev و وابستگی‌های Runtime Management/Caching." +msgstr "وابستگی های Dev و وابستگی‌های Runtime Management/Caching" #: src/cargo/rust-ecosystem.md:56 -msgid "build scripting" +msgid "" +"[build scripting](https://doc.rust-lang.org/cargo/reference/build-scripts." +"html)" msgstr "" +"[build scripting](https://doc.rust-lang.org/cargo/reference/build-scripts." +"html)" #: src/cargo/rust-ecosystem.md:57 -#, fuzzy -msgid "global installation" -msgstr "راهنمای نصب" +msgid "" +"[global installation](https://doc.rust-lang.org/cargo/commands/cargo-install." +"html)" +msgstr "" +"[global installation](https://doc.rust-lang.org/cargo/commands/cargo-install." +"html)" #: src/cargo/rust-ecosystem.md:58 -#, fuzzy msgid "" -"It is also extensible with sub command plugins as well (such as cargo " -"clippy)." +"It is also extensible with sub command plugins as well (such as [cargo " +"clippy](https://github.com/rust-lang/rust-clippy))." msgstr "" "همچنین با command plugin فرعی (مانند [cargo clippy](https://github.com/rust-" "lang/rust-clippy)) قابل توسعه است." #: src/cargo/rust-ecosystem.md:60 -#, fuzzy -msgid "Read more from the official Cargo Book" +msgid "" +"Read more from the [official Cargo Book](https://doc.rust-lang.org/cargo/)" msgstr "" "در [official Cargo Book](https://doc.rust-lang.org/cargo/) بیشتر بخوانید." @@ -2477,19 +2514,19 @@ msgid "" msgstr "" "در واقع embedded playgrounds در لحظه ای که از صفحه دور می شوید حالت پایدار " "خود را از دست می دهند! به همین دلیل است که دانش آموزان باید تمرینات را با " -"استفاده از local Rust installation یا از طریق زPlayground حل کنند." +"استفاده از local Rust installation یا از طریق Playground حل کنند." #: src/cargo/running-locally.md:1 msgid "Running Code Locally with Cargo" -msgstr "اجرای کد به صورت Locally با Cargo" +msgstr "اجرای کد به صورت لوکال با Cargo" #: src/cargo/running-locally.md:3 -#, fuzzy msgid "" "If you want to experiment with the code on your own system, then you will " -"need to first install Rust. Do this by following the instructions in the " -"Rust Book. This should give you a working `rustc` and `cargo`. At the time " -"of writing, the latest stable Rust release has these version numbers:" +"need to first install Rust. Do this by following the [instructions in the " +"Rust Book](https://doc.rust-lang.org/book/ch01-01-installation.html). This " +"should give you a working `rustc` and `cargo`. At the time of writing, the " +"latest stable Rust release has these version numbers:" msgstr "" "اگر می خواهید کد را روی سیستم خود آزمایش کنید، ابتدا باید Rust را نصب کنید. " "این کار را با دنبال کردن [instructions in the Rust Book](https://doc.rust-" @@ -2578,7 +2615,7 @@ msgstr "" #: src/welcome-day-1.md msgid "Welcome to Day 1" -msgstr "به روز ۱ خوش آمدید" +msgstr "به روز اول خوش آمدید" #: src/welcome-day-1.md msgid "" @@ -2597,17 +2634,16 @@ msgstr "" "مراجع, توابع, و متدها." #: src/welcome-day-1.md -#, fuzzy msgid "Types and type inference." -msgstr "Type Inference" +msgstr "" #: src/welcome-day-1.md msgid "Control flow constructs: loops, conditionals, and so on." -msgstr "" +msgstr "ساختارهای جریان کنترل: حلقه ها، شرط ها و غیره." #: src/welcome-day-1.md msgid "User-defined types: structs and enums." -msgstr "" +msgstr "تایپ های تعریف شده توسط کاربر: ساختارها و enums." #: src/welcome-day-1.md msgid "Pattern matching: destructuring enums, structs, and arrays." @@ -2617,13 +2653,15 @@ msgstr "تطابق الگو: تجزیه و تحلیل enums, structs و آرای #: src/welcome-day-4.md src/concurrency/welcome.md #: src/concurrency/welcome-async.md msgid "Schedule" -msgstr "" +msgstr "برنامه زمانی" #: src/welcome-day-1.md msgid "" "Including 10 minute breaks, this session should take about 2 hours and 5 " "minutes. It contains:" msgstr "" +"با احتساب 10 دقیقه استراحت، این جلسه باید حدود 2 ساعت و 5 دقیقه طول بکشد. آن " +"شامل:" #: src/welcome-day-1.md msgid "Please remind the students that:" @@ -2642,7 +2680,6 @@ msgid "" msgstr "کلاس قرار است تعاملی باشد و بحث‌ها بسیار مورد تشویق قرار می گیرند!" #: src/welcome-day-1.md -#, fuzzy msgid "" "As an instructor, you should try to keep the discussions relevant, i.e., " "keep the discussions related to how Rust does things vs some other language. " @@ -2677,6 +2714,9 @@ msgid "" "should have immediate parallels in other languages. The more advanced parts " "of Rust come on the subsequent days." msgstr "" +"ایده روز اول نشان دادن چیزهای \"پایه\" در Rust است که باید در زبان های دیگر " +"مشابهت های فوری داشته باشند. قسمت های پیشرفته تر Rust در روزهای بعد عرضه می " +"شوند." #: src/welcome-day-1.md msgid "" @@ -2686,10 +2726,15 @@ msgid "" "The times listed here are a suggestion in order to keep the course on " "schedule. Feel free to be flexible and adjust as necessary!" msgstr "" +"اگر این را در کلاس درس تدریس می کنید، اینجا مکان خوبی برای مرور برنامه است. " +"توجه داشته باشید که در پایان هر بخش یک تمرین و سپس یک استراحت وجود دارد. " +"برای پوشاندن محلول تمرین بعد از استراحت برنامه ریزی کنید. زمان های ذکر شده " +"در اینجا یک پیشنهاد برای حفظ دوره در برنامه است. با خیال راحت انعطاف پذیر " +"باشید و در صورت لزوم تنظیم کنید!" #: src/hello-world.md src/concurrency/send-sync.md msgid "This segment should take about 15 minutes. It contains:" -msgstr "این بخش 15 دقیقه زمان می برد. این بخش شامل:" +msgstr "این بخش ۱۵ دقیقه زمان می برد. این بخش شامل:" #: src/hello-world.md src/types-and-values.md src/control-flow-basics.md #: src/tuples-and-arrays.md src/references.md src/user-defined-types.md @@ -2722,7 +2767,9 @@ msgid "2 minutes" msgstr "2 دقیقه" #: src/hello-world/what-is-rust.md:3 -msgid "Rust is a new programming language which had its 1.0 release in 2015:" +msgid "" +"Rust is a new programming language which had its [1.0 release in 2015]" +"(https://blog.rust-lang.org/2015/05/15/Rust-1.0.html):" msgstr "" #: src/hello-world/what-is-rust.md:5 @@ -2736,8 +2783,12 @@ msgid "`rustc` uses LLVM as its backend." msgstr "`rustc` از `LLVM` به عنوان بک‌اند خود استفاده می‌کند." #: src/hello-world/what-is-rust.md:7 -msgid "Rust supports many platforms and architectures:" +msgid "" +"Rust supports many [platforms and architectures](https://doc.rust-lang.org/" +"nightly/rustc/platform-support.html):" msgstr "" +" راست از بسیاری از [بسترها و معماری‌ها](https://doc.rust-lang.org/nightly/" +"rustc/platform-support.html) پشتیبانی می کند :" #: src/hello-world/what-is-rust.md:9 msgid "x86, ARM, WebAssembly, ..." @@ -2777,11 +2828,11 @@ msgstr "Rust در همان حوزه C++ قرار می‌گ #: src/hello-world/what-is-rust.md:23 msgid "High flexibility." -msgstr "" +msgstr "انعطاف پذیری بالا." #: src/hello-world/what-is-rust.md:24 msgid "High level of control." -msgstr "" +msgstr "سطح کنترل بالا." #: src/hello-world/what-is-rust.md:25 msgid "" @@ -2790,7 +2841,7 @@ msgstr "می‌تواند به دستگاه‌های بسیار محدود ما #: src/hello-world/what-is-rust.md:26 msgid "Has no runtime or garbage collection." -msgstr " فاقد ران‌تایم (runtime) یا جمع‌آوری زباله (garbage collection) است." +msgstr "فاقد ران‌تایم (runtime) یا جمع‌آوری زباله (garbage collection) است." #: src/hello-world/what-is-rust.md:27 msgid "Focuses on reliability and safety without sacrificing performance." @@ -2805,6 +2856,8 @@ msgid "" "_Compile time memory safety_ - whole classes of memory bugs are prevented at " "compile time" msgstr "" +"_ایمنی حافظه زمان کامپایل_ - کل کلاس های باگ حافظه در زمان کامپایل جلوگیری " +"می شود" #: src/hello-world/benefits.md:7 msgid "No uninitialized variables." @@ -2828,7 +2881,7 @@ msgstr "هیچ موتکس قفل شدهِ فراموش شده‌ای وجود ن #: src/hello-world/benefits.md:12 msgid "No data races between threads." -msgstr " هیچ وضعیت رقابتی (`data races`) بین رشته‌ها وجود ندارد." +msgstr "هیچ وضعیت رقابتی (`data races`) بین رشته‌ها وجود ندارد." #: src/hello-world/benefits.md:13 msgid "No iterator invalidation." @@ -2839,6 +2892,8 @@ msgid "" "_No undefined runtime behavior_ - what a Rust statement does is never left " "unspecified" msgstr "" +"_بدون رفتار زمان اجرا تعریف نشده_ - کاری که دستور Rust انجام می دهد هرگز " +"نامشخص باقی نمی ماند" #: src/hello-world/benefits.md:17 msgid "Array access is bounds checked." @@ -2853,6 +2908,7 @@ msgid "" "_Modern language features_ - as expressive and ergonomic as higher-level " "languages" msgstr "" +"_ویژگی های زبان مدرن_ - به اندازه زبان های سطح بالاتر گویا و ارگونومیک است" #: src/hello-world/benefits.md:22 msgid "Enums and pattern matching." @@ -2864,11 +2920,11 @@ msgstr "جنریک‌ها." #: src/hello-world/benefits.md:24 msgid "No overhead FFI." -msgstr "FFI بدون سربار" +msgstr "FFI بدون سربار." #: src/hello-world/benefits.md:25 msgid "Zero-cost abstractions." -msgstr "انتزاع‌هایی بدون هزینه" +msgstr "انتزاع‌هایی بدون هزینه." #: src/hello-world/benefits.md:26 msgid "Great compiler errors." @@ -2876,11 +2932,11 @@ msgstr "خطاهای کامپایل عالیست." #: src/hello-world/benefits.md:27 msgid "Built-in dependency manager." -msgstr "مدیر وابستگی درون-ساختی" +msgstr "مدیر وابستگی درون-ساختی." #: src/hello-world/benefits.md:28 msgid "Built-in support for testing." -msgstr "پشتیبانی درون-ساختی از تست نویسی" +msgstr "پشتیبانی درون-ساختی از تست نویسی." #: src/hello-world/benefits.md:29 msgid "Excellent Language Server Protocol support." @@ -2891,6 +2947,8 @@ msgid "" "Do not spend much time here. All of these points will be covered in more " "depth later." msgstr "" +"وقت زیادی را اینجا صرف نکنید. تمام این نکات بعداً با عمق بیشتری پوشش داده " +"خواهد شد." #: src/hello-world/benefits.md:37 msgid "" @@ -2914,11 +2972,12 @@ msgstr "" "با ساختارهایی مانند تطابق الگو و مدیریت وابستگی داخلی دریافت می‌کنید." #: src/hello-world/benefits.md:45 +#, fuzzy msgid "" "Experience with Java, Go, Python, JavaScript...: You get the same memory " "safety as in those languages, plus a similar high-level language feeling. In " "addition you get fast and predictable performance like C and C++ (no garbage " -"collector) as well as access to low-level hardware (should you need it)" +"collector) as well as access to low-level hardware (should you need it)." msgstr "" "تجربه با Java، Go، Python، JavaScript...: شما همان ایمنی حافظه را مانند آن " "زبان‌ها دریافت می‌کنید، به علاوه یک احساس زبان سطح بالا مشابه. علاوه بر این، " @@ -2928,16 +2987,23 @@ msgstr "" #: src/hello-world/playground.md:3 msgid "" -"The Rust Playground provides an easy way to run short Rust programs, and is " -"the basis for the examples and exercises in this course. Try running the " -"\"hello-world\" program it starts with. It comes with a few handy features:" +"The [Rust Playground](https://play.rust-lang.org/) provides an easy way to " +"run short Rust programs, and is the basis for the examples and exercises in " +"this course. Try running the \"hello-world\" program it starts with. It " +"comes with a few handy features:" msgstr "" +"[Rust Playground](https://play.rust-lang.org/) یک راه آسان برای اجرای برنامه " +"های Rust کوتاه ارائه می دهد و پایه ای برای مثال ها و تمرین های این دوره است. " +"برنامه \"Hello-world\" را که با آن شروع می شود اجرا کنید. دارای چند ویژگی " +"مفید است:" #: src/hello-world/playground.md:8 msgid "" "Under \"Tools\", use the `rustfmt` option to format your code in the " "\"standard\" way." msgstr "" +"در زیر \"ابزارها\"، از گزینه \"rustfmt\" برای قالب بندی کد خود به روش " +"\"استاندارد\" استفاده کنید." #: src/hello-world/playground.md:11 msgid "" @@ -2945,12 +3011,17 @@ msgid "" "checks, less optimization) and Release (fewer runtime checks, lots of " "optimization). These are accessible under \"Debug\" at the top." msgstr "" +"Rust دارای دو \"نمایه\" اصلی برای تولید کد است: Debug (بررسی های زمان اجرا " +"اضافی، بهینه سازی کمتر) و Release (بررسی های زمان اجرا کمتر، بهینه سازی " +"زیاد). اینها در قسمت «اشکال‌زدایی» در بالا قابل دسترسی هستند." #: src/hello-world/playground.md:15 msgid "" "If you're interested, use \"ASM\" under \"...\" to see the generated " "assembly code." msgstr "" +"اگر علاقه مند هستید، از \"ASM\" در زیر \"...\" برای دیدن کد اسمبلی تولید شده " +"استفاده کنید." #: src/hello-world/playground.md:21 msgid "" @@ -2960,10 +3031,15 @@ msgid "" "students who want to know more about Rust's optimizations or generated " "assembly." msgstr "" +"هنگامی که دانش آموزان به سمت استراحت می روند، آنها را تشویق کنید تا " +"playground را باز کنند و کمی تجربه کنند. آنها را تشویق کنید که برگه را باز " +"نگه دارند و در بقیه دوره چیزهایی را امتحان کنند. این به ویژه برای دانش‌آموزان " +"پیشرفته که می‌خواهند درباره بهینه‌سازی‌های Rust یا مونتاژ تولید شده بیشتر " +"بدانند مفید است." #: src/types-and-values.md src/control-flow-basics.md src/modules.md msgid "This segment should take about 40 minutes. It contains:" -msgstr "" +msgstr "این بخش باید حدود 40 دقیقه طول بکشد. آن شامل:" #: src/types-and-values/hello-world.md:3 msgid "" @@ -2983,7 +3059,7 @@ msgstr "آنچه شما می‌بینید:" #: src/types-and-values/hello-world.md:14 msgid "Functions are introduced with `fn`." -msgstr " توابع با `fn` معرفی می‌شوند." +msgstr "توابع با `fn` معرفی می‌شوند." #: src/types-and-values/hello-world.md:15 msgid "Blocks are delimited by curly braces like in C and C++." @@ -3008,7 +3084,6 @@ msgstr "" "باشند." #: src/types-and-values/hello-world.md:23 -#, fuzzy msgid "" "This slide tries to make the students comfortable with Rust code. They will " "see a ton of it over the next four days so we start small with something " @@ -3031,21 +3106,21 @@ msgid "Rust is modern with full support for things like Unicode." msgstr "زبان Rust, یک زبان مدرن با پشتیبانی کامل از چیزهایی مانند یونیکد است." #: src/types-and-values/hello-world.md:33 -#, fuzzy msgid "" "Rust uses macros for situations where you want to have a variable number of " -"arguments (no function overloading)." +"arguments (no function [overloading](../control-flow-basics/functions.md))." msgstr "" "Rust از ماکروها برای موقعیت‌هایی استفاده می‌کند که می‌خواهید تعداد متغیری از " -"آرگومان‌ها داشته باشید (بدون [اورلودینگ](basic-syntax/functions-interlude.md) " +"آرگومان‌ها داشته باشید (بدون [اورلودینگ](../control-flow-basics/functions.md) " "تابع)." #: src/types-and-values/hello-world.md:36 #, fuzzy msgid "" "Macros being 'hygienic' means they don't accidentally capture identifiers " -"from the scope they are used in. Rust macros are actually only partially " -"hygienic." +"from the scope they are used in. Rust macros are actually only [partially " +"hygienic](https://veykril.github.io/tlborm/decl-macros/minutiae/hygiene." +"html)." msgstr "" "«هاجنیک» (`hygienic‍`) بودن ماکرو به این معنی است که آنها به طور تصادفی " "شناسه‌ها را از اسکوپ‌ای که در آن استفاده می‌شوند، ضبط نمی‌کنند. ماکروهای Rust در " @@ -3053,11 +3128,11 @@ msgstr "" "minutiae/hygiene.html هستند." #: src/types-and-values/hello-world.md:40 -#, fuzzy msgid "" -"Rust is multi-paradigm. For example, it has powerful object-oriented " -"programming features, and, while it is not a functional language, it " -"includes a range of functional concepts." +"Rust is multi-paradigm. For example, it has powerful [object-oriented " +"programming features](https://doc.rust-lang.org/book/ch17-00-oop.html), and, " +"while it is not a functional language, it includes a range of [functional " +"concepts](https://doc.rust-lang.org/book/ch13-00-functional-features.html)." msgstr "" "زبان Rust, یک زبان چند پارادایمی است. به عنوان مثال، دارای ویژگی‌های قدرتمند " "[برنامه نویسی شی‌گرا](https://doc.rust-lang.org/book/ch17-00-oop.html) است و " @@ -3066,7 +3141,6 @@ msgstr "" "است." #: src/types-and-values/variables.md:3 -#, fuzzy msgid "" "Rust provides type safety via static typing. Variable bindings are made with " "`let`:" @@ -3080,7 +3154,9 @@ msgid "\"x: {x}\"" msgstr "" #: src/types-and-values/variables.md:10 -msgid "// x = 20; // println!(\"x: {x}\");" +msgid "" +"// x = 20;\n" +" // println!(\"x: {x}\");\n" msgstr "" #: src/types-and-values/variables.md:18 @@ -3088,6 +3164,8 @@ msgid "" "Uncomment the `x = 20` to demonstrate that variables are immutable by " "default. Add the `mut` keyword to allow changes." msgstr "" +"برای نشان دادن اینکه متغیرها به طور پیش‌فرض تغییرناپذیر هستند، کامنت \"x = " +"20\" را حذف کنید. برای اجازه دادن به تغییرات، کلمه کلیدی «mut» را اضافه کنید." #: src/types-and-values/variables.md:21 msgid "" @@ -3095,12 +3173,17 @@ msgid "" "time, but type inference (covered later) allows the programmer to omit it in " "many cases." msgstr "" +"«i32» در اینجا نوع متغیر است. این باید در زمان کامپایل شناخته شود، اما " +"استنتاج نوع (که بعداً پوشش داده می شود) به برنامه نویس اجازه می دهد تا در " +"بسیاری از موارد آن را حذف کند." #: src/types-and-values/values.md:3 msgid "" "Here are some basic built-in types, and the syntax for literal values of " "each type." msgstr "" +"در اینجا چند نوع پایه داخلی و نحو برای مقادیر تحت اللفظی هر نوع آورده شده " +"است." #: src/types-and-values/values.md:6 src/unsafe-rust/exercise.md:16 msgid "Types" @@ -3209,7 +3292,7 @@ msgstr "" "می‌توان همه خطوط زیرین `_` را در اعداد حذف کرد، آنها فقط برای خوانایی هستند. " "«`1_000` می‌تواند به صورت `1000` " "(یا `10_00`) نوشته شود و `123_i64` " -"می‌تواند به صورت `123i64` نوشته شود.»" +"می‌تواند به صورت `123i64` نوشته شود»." #: src/types-and-values/arithmetic.md:9 msgid "\"result: {}\"" @@ -3221,17 +3304,24 @@ msgid "" "meaning should be clear: it takes three integers, and returns an integer. " "Functions will be covered in more detail later." msgstr "" +"این اولین بار است که تابعی غیر از \"main\" می بینیم، اما معنی آن باید واضح " +"باشد: سه عدد صحیح می گیرد و یک عدد صحیح برمی گرداند. توابع بعداً با جزئیات " +"بیشتر پوشش داده خواهد شد." #: src/types-and-values/arithmetic.md:20 msgid "Arithmetic is very similar to other languages, with similar precedence." -msgstr "" +msgstr "حسابی بسیار شبیه به زبان های دیگر است، با تقدم مشابه." #: src/types-and-values/arithmetic.md:22 +#, fuzzy msgid "" "What about integer overflow? In C and C++ overflow of _signed_ integers is " -"actually undefined, and might do different things on different platforms or " -"compilers. In Rust, it's defined." +"actually undefined, and might do unknown things at runtime. In Rust, it's " +"defined." msgstr "" +"در مورد سرریز اعداد صحیح چطور؟ در C و++ C سرریز اعداد صحیح _signed_ در واقع " +"تعریف نشده است و ممکن است کارهای متفاوتی را در پلتفرم ها یا کامپایلرهای " +"مختلف انجام دهد. در Rust تعریف شده است." #: src/types-and-values/arithmetic.md:26 msgid "" @@ -3241,12 +3331,18 @@ msgid "" "with method syntax, e.g., `(a * b).saturating_add(b * c).saturating_add(c * " "a)`." msgstr "" +"«i32» را به «i16» تغییر دهید تا یک سرریز عدد صحیح را ببینید، که در یک ساخت " +"اشکال‌زدایی وحشت می‌کند (بررسی می‌شود) و در یک نسخه انتشار می‌پیچد. گزینه های " +"دیگری مانند سرریز، اشباع و حمل وجود دارد. اینها با نحو متد قابل دسترسی " +"هستند، به عنوان مثال، `(a * b).saturating_add(b * c).saturating_add(c *a)`." #: src/types-and-values/arithmetic.md:31 msgid "" "In fact, the compiler will detect overflow of constant expressions, which is " "why the example requires a separate function." msgstr "" +"در واقع، کامپایلر سرریز عبارات ثابت را تشخیص می دهد، به همین دلیل است که " +"مثال به یک تابع جداگانه نیاز دارد." #: src/types-and-values/inference.md:3 msgid "Rust will look at how the variable is _used_ to determine the type:" @@ -3280,9 +3376,12 @@ msgid "" "`i32`. This sometimes appears as `{integer}` in error messages. Similarly, " "floating-point literals default to `f64`." msgstr "" +"هنگامی که هیچ چیز نوع یک عدد صحیح را محدود نمی کند، Rust به طور پیش فرض روی " +"«i32» قرار می گیرد. گاهی اوقات در پیام های خطا به صورت «{integer}» نشان داده " +"می شود. به طور مشابه، تایپ ممیز شناور پیش‌فرض «f64» است." #: src/types-and-values/inference.md:46 -msgid "// ERROR: no implementation for `{float} == {integer}`" +msgid "// ERROR: no implementation for `{float} == {integer}`\n" msgstr "" #: src/types-and-values/exercise.md:3 @@ -3291,15 +3390,19 @@ msgid "" "number is calculated recursively as the sum of the n-1'th and n-2'th " "Fibonacci numbers." msgstr "" +"دنباله فیبوناچی با «[0،1]» شروع می شود. برای n>1، عدد فیبوناچی n به صورت " +"بازگشتی به عنوان مجموع اعداد فیبوناچی n-1 و n-2 محاسبه می شود." #: src/types-and-values/exercise.md:6 msgid "" "Write a function `fib(n)` that calculates the n'th Fibonacci number. When " "will this function panic?" msgstr "" +"یک تابع fib(n) بنویسید که عدد فیبوناچی n را محاسبه کند. چه زمانی این عملکرد " +"panic می شود؟" #: src/types-and-values/exercise.md:12 -msgid "// The base case." +msgid "// The base case.\n" msgstr "" #: src/types-and-values/exercise.md:13 src/types-and-values/exercise.md:16 @@ -3310,7 +3413,7 @@ msgid "\"Implement this\"" msgstr "پیاده سازی" #: src/types-and-values/exercise.md:15 -msgid "// The recursive case." +msgid "// The recursive case.\n" msgstr "" #: src/types-and-values/exercise.md:22 src/types-and-values/solution.md:14 @@ -3318,7 +3421,6 @@ msgid "\"fib({n}) = {}\"" msgstr "" #: src/control-flow-basics.md -#, fuzzy msgid "if Expressions" msgstr "عبارت if" @@ -3328,7 +3430,6 @@ msgid "4 minutes" msgstr "" #: src/control-flow-basics.md -#, fuzzy msgid "break and continue" msgstr "`break` و `continue`" @@ -3337,9 +3438,9 @@ msgid "`if` expressions" msgstr "عبارات `if`" #: src/control-flow-basics/if.md:3 -#, fuzzy msgid "" -"You use `if` expressions exactly like `if` statements in other languages:" +"You use [`if` expressions](https://doc.rust-lang.org/reference/expressions/" +"if-expr.html#if-expressions) exactly like `if` statements in other languages:" msgstr "" "شما [عبارت `if`](https://doc.rust-lang.org/reference/expressions/if-expr." "html#if-expressions) رو به مانند دیگر زبان‌ها استفاده می‌کنید:" @@ -3377,7 +3478,6 @@ msgid "\"number size: {}\"" msgstr "" #: src/control-flow-basics/if.md:34 -#, fuzzy msgid "" "Because `if` is an expression and must have a particular type, both of its " "branch blocks must have the same type. Show what happens if you add `;` " @@ -3385,7 +3485,7 @@ msgid "" msgstr "" "از آنجایی که ‍`if` یک عبارت است و باید نوع خاصی داشته باشد، هر دو بلاک (`if` " "و `else`) باید از نوع یکسانی را باز گردانند. در نظر بگیرید که اگر بعد از " -"`x / 2` در مثال دوم `;` اضافه کنید، چه اتفاقی می افتد. " +"`x / 2` در مثال دوم `;` اضافه کنید، چه اتفاقی می افتد." #: src/control-flow-basics/if.md:38 msgid "" @@ -3393,24 +3493,27 @@ msgid "" "separate it from the next statement. Remove the `;` before `println!` to see " "the compiler error." msgstr "" +"هنگامی که «if» در یک عبارت استفاده می شود، عبارت باید دارای «;» باشد تا آن " +"را از عبارت بعدی جدا کند. \";\" را قبل از \"println!\" حذف کنید تا خطای " +"کامپایلر را ببینید." #: src/control-flow-basics/loops.md:3 msgid "There are three looping keywords in Rust: `while`, `loop`, and `for`:" msgstr "" +"سه کلمه کلیدی حلقه ای در Rust وجود دارد: \"while\"، \"loop\" و \"for\":" #: src/control-flow-basics/loops.md:5 -#, fuzzy msgid "`while`" msgstr "حلقه‌های `while`" #: src/control-flow-basics/loops.md:7 -#, fuzzy msgid "" -"The `while` keyword works much like in other languages, executing the loop " -"body as long as the condition is true." +"The [`while` keyword](https://doc.rust-lang.org/reference/expressions/loop-" +"expr.html#predicate-loops) works much like in other languages, executing the " +"loop body as long as the condition is true." msgstr "" "[کلمه‌کلیدی`while` ](https://doc.rust-lang.org/reference/expressions/loop-" -"expr.html#predicate-loops) بسیار شبیه به سایر زبان‌ها عمل می‌کند:" +"expr.html#predicate-loops) بسیار شبیه به سایر زبان‌ها عمل می‌کند." #: src/control-flow-basics/loops.md:18 msgid "\"Final x: {x}\"" @@ -3418,8 +3521,11 @@ msgstr "" #: src/control-flow-basics/loops/for.md:3 msgid "" -"The `for` loop iterates over ranges of values or the items in a collection:" +"The [`for` loop](https://doc.rust-lang.org/std/keyword.for.html) iterates " +"over ranges of values or the items in a collection:" msgstr "" +"حلقه [`for`](https://doc.rust-lang.org/std/keyword.for.html) در محدوده‌ای از " +"مقادیر یا موارد موجود در یک مجموعه تکرار می‌شود:" #: src/control-flow-basics/loops/for.md:13 msgid "\"elem: {elem}\"" @@ -3431,38 +3537,49 @@ msgid "" "iterating over different kinds of ranges/collections. Iterators will be " "discussed in more detail later." msgstr "" +"حلقه‌های «for» در از مفهومی به نام «تکرارکننده‌ها» برای مدیریت تکرار در انواع " +"مختلف محدوده/مجموعه استفاده می‌کنند. Iterators بعداً با جزئیات بیشتر مورد بحث " +"قرار خواهند گرفت." #: src/control-flow-basics/loops/for.md:23 +#, fuzzy msgid "" "Note that the first `for` loop only iterates to `4`. Show the `1..=5` syntax " "for an inclusive range." msgstr "" +"توجه داشته باشید که حلقه `for` فقط تا `4` تکرار می شود. نحو `1..=5` را برای " +"یک محدوده فراگیر نشان دهید." #: src/control-flow-basics/loops/loop.md:3 -msgid "The `loop` statement just loops forever, until a `break`." +msgid "" +"The [`loop` statement](https://doc.rust-lang.org/std/keyword.loop.html) just " +"loops forever, until a `break`." msgstr "" +"[`loop`](https://doc.rust-lang.org/std/keyword.loop.html) برای همیشه، تا " +"زمانی که یک «break» ایجاد شود، حلقه می‌شود." #: src/control-flow-basics/loops/loop.md:11 msgid "\"{i}\"" msgstr "" #: src/control-flow-basics/break-continue.md:3 -#, fuzzy -msgid "If you want to immediately start the next iteration use `continue`." +msgid "" +"If you want to immediately start the next iteration use [`continue`](https://" +"doc.rust-lang.org/reference/expressions/loop-expr.html#continue-expressions)." msgstr "" "اگر می‌خواهید بلافاصله تکرار بعدی را شروع کنید، از [`continue`](https://doc." "rust-lang.org/reference/expressions/loop-expr.html#continue-expressions) " "استفاده کنید." #: src/control-flow-basics/break-continue.md:6 -#, fuzzy msgid "" -"If you want to exit any kind of loop early, use `break`. For `loop`, this " -"can take an optional expression that becomes the value of the `loop` " -"expression." +"If you want to exit any kind of loop early, use [`break`](https://doc.rust-" +"lang.org/reference/expressions/loop-expr.html#break-expressions). For " +"`loop`, this can take an optional expression that becomes the value of the " +"`loop` expression." msgstr "" "اگر می‌خواهید زودتر از یک حلقه خارج شوید، از [`break`](https://doc.rust-lang." -"org/reference/expressions/loop-expr.html#break-expressions) استفاده کنید," +"org/reference/expressions/loop-expr.html#break-expressions) استفاده کنید." #: src/control-flow-basics/break-continue.md:22 src/std-traits/exercise.md:23 #: src/std-traits/solution.md:29 src/smart-pointers/trait-objects.md:95 @@ -3501,14 +3618,13 @@ msgid "Blocks" msgstr "بلوک‌ها" #: src/control-flow-basics/blocks-and-scopes.md:5 -#, fuzzy msgid "" "A block in Rust contains a sequence of expressions, enclosed by braces `{}`. " "Each block has a value and a type, which are those of the last expression of " "the block:" msgstr "" -"یک بلاک در Rust میتواند حاوی چندین عبارات باشد. هر بلاک دارای یک مقدار و یک " -"نوع بازگشتی است که مربوط به آخرین عبارت در ان بلاک می‌باشد:" +"یک بلوک در Rust حاوی دنباله ای از عبارات است که با پرانتزهای «{}» محصور شده " +"است. هر بلوک دارای یک مقدار و یک نوع است که آخرین عبارت بلوک است:" #: src/control-flow-basics/blocks-and-scopes.md:14 msgid "\"y: {y}\"" @@ -3548,7 +3664,6 @@ msgstr "" #: src/control-flow-basics/blocks-and-scopes/scopes.md:13 #: src/generics/exercise.md:18 src/generics/solution.md:20 #: src/std-traits/from-and-into.md:7 src/std-traits/from-and-into.md:19 -#: src/lifetimes/solution.md:225 msgid "\"hello\"" msgstr "" @@ -3569,20 +3684,20 @@ msgid "" "Show that a variable's scope is limited by adding a `b` in the inner block " "in the last example, and then trying to access it outside that block." msgstr "" +"با افزودن یک «b» در بلوک داخلی در آخرین مثال، و سپس تلاش برای دسترسی به آن " +"در خارج از بلوک، نشان دهید که دامنه یک متغیر محدود است." #: src/control-flow-basics/blocks-and-scopes/scopes.md:28 -#, fuzzy msgid "" "Shadowing is different from mutation, because after shadowing both " "variable's memory locations exist at the same time. Both are available under " "the same name, depending where you use it in the code." msgstr "" -"تعریف: سایه زدن با متغییر قابل تغییر متفاوت است، زیرا پس از سایه زدن، مکان " -"های حافظه هر دو متغیر همزمان وجود دارند. هر دو تحت یک نام در دسترس هستند، " -"بسته به اینکه در کجا در کد از آن استفاده می کنید." +"سایه زدن با جهش متفاوت است، زیرا پس از سایه زدن، هر دو مکان حافظه متغیر به " +"طور همزمان وجود دارند. هر دو با یک نام موجود هستند، بسته به جایی که از آن در " +"کد استفاده می کنید." #: src/control-flow-basics/blocks-and-scopes/scopes.md:31 -#, fuzzy msgid "A shadowing variable can have a different type." msgstr "یک متغیر سایه‌دار می تواند انواع داده‌ای متفاوتی داشته باشد." @@ -3603,7 +3718,6 @@ msgstr "" "برخی از زبان‌های برنامه‌نویسی)." #: src/control-flow-basics/functions.md:24 -#, fuzzy msgid "" "The last expression in a function body (or any block) becomes the return " "value. Simply omit the `;` at the end of the expression. The `return` " @@ -3624,7 +3738,6 @@ msgstr "" "کامپایلر این را استنتاج خواهد کرد که هیچ نوع برگشتی وجود ندارد." #: src/control-flow-basics/functions.md:30 -#, fuzzy msgid "" "Overloading is not supported -- each function has a single implementation." msgstr "هر تابع فقط یک پیاده سازی دارد:" @@ -3634,9 +3747,10 @@ msgid "" "Always takes a fixed number of parameters. Default arguments are not " "supported. Macros can be used to support variadic functions." msgstr "" +"همیشه تعداد ثابتی از پارامترها را می گیرد. آرگومان های پیش فرض پشتیبانی نمی " +"شوند. ماکروها را می توان برای پشتیبانی از توابع متغیر استفاده کرد." #: src/control-flow-basics/functions.md:33 -#, fuzzy msgid "" "Always takes a single set of parameter types. These types can be generic, " "which will be covered later." @@ -3648,34 +3762,46 @@ msgid "" "variable number of arguments. They are distinguished by a `!` at the end. " "The Rust standard library includes an assortment of useful macros." msgstr "" +"ماکروها در طول کامپایل به کد Rust گسترش می‌یابند و می‌توانند تعداد متغیری از " +"آرگومان‌ها را بگیرند. آنها در پایان با یک «!» متمایز می شوند. کتابخانه " +"استاندارد Rust شامل مجموعه ای از ماکروهای مفید است." #: src/control-flow-basics/macros.md:7 msgid "" "`println!(format, ..)` prints a line to standard output, applying formatting " -"described in `std::fmt`." +"described in [`std::fmt`](https://doc.rust-lang.org/std/fmt/index.html)." msgstr "" +"`println!(format, ..)` یک خط را در خروجی استاندارد چاپ می کند و قالب بندی " +"شرح داده شده در [`std::fmt`] (https://doc.rust-lang.org/std/fmt/index.html) " +"را اعمال می کند. ." #: src/control-flow-basics/macros.md:9 msgid "" "`format!(format, ..)` works just like `println!` but returns the result as a " "string." msgstr "" +"`format!(format, ..)` درست مانند `println!` کار می کند، اما نتیجه را به صورت " +"یک رشته برمی گرداند." #: src/control-flow-basics/macros.md:11 msgid "`dbg!(expression)` logs the value of the expression and returns it." -msgstr "" +msgstr "`dbg!(expression)` مقدار عبارت را ثبت کرده و آن را برمی گرداند." #: src/control-flow-basics/macros.md:12 msgid "" "`todo!()` marks a bit of code as not-yet-implemented. If executed, it will " "panic." msgstr "" +"`todo!()` مقداری از کد را به عنوان هنوز پیاده‌سازی نشده علامت‌گذاری می‌کند. " +"panic می کند." #: src/control-flow-basics/macros.md:14 msgid "" "`unreachable!()` marks a bit of code as unreachable. If executed, it will " "panic." msgstr "" +"`unreachable!()` مقداری از کد را غیرقابل دسترسی علامت گذاری می کند. اگر " +"اعدام شود وحشت می کند." #: src/control-flow-basics/macros.md:32 msgid "\"{n}! = {}\"" @@ -3687,18 +3813,26 @@ msgid "" "how to use them. Why they are defined as macros, and what they expand to, is " "not especially critical." msgstr "" +"نکته مهم این بخش این است که این امکانات مشترک و نحوه استفاده از آنها وجود " +"دارد. اینکه چرا آنها به عنوان ماکرو تعریف می شوند و به چه چیزی گسترش می " +"یابند، بسیار مهم نیست." #: src/control-flow-basics/macros.md:43 msgid "" "The course does not cover defining macros, but a later section will describe " "use of derive macros." msgstr "" +"این دوره شامل تعریف ماکروها نمی شود، اما در بخش بعدی استفاده از ماکروهای " +"مشتق شده توضیح داده خواهد شد." #: src/control-flow-basics/exercise.md:3 +#, fuzzy msgid "" -"The Collatz Sequence is defined as follows, for an arbitrary n1 " -"greater than zero:" +"The [Collatz Sequence](https://en.wikipedia.org/wiki/Collatz_conjecture) is " +"defined as follows, for an arbitrary n1 greater than zero:" msgstr "" +"[دنباله Collatz](https://en.wikipedia.org/wiki/Collatz_conjecture) برای یک n " +"دلخواه به صورت زیر تعریف می شود" #: src/control-flow-basics/exercise.md:6 msgid "" @@ -3757,7 +3891,7 @@ msgid "" msgstr "" #: src/control-flow-basics/exercise.md:25 src/control-flow-basics/solution.md:4 -msgid "/// Determine the length of the collatz sequence beginning at `n`." +msgid "/// Determine the length of the collatz sequence beginning at `n`.\n" msgstr "" #: src/control-flow-basics/solution.md:20 src/concurrency/threads/scoped.md:11 @@ -3767,22 +3901,22 @@ msgstr "" #: src/welcome-day-1-afternoon.md src/welcome-day-2-afternoon.md #: src/welcome-day-3-afternoon.md src/welcome-day-4-afternoon.md -#, fuzzy msgid "Welcome Back" -msgstr "خوش آمدید" +msgstr "خوش آمد" #: src/welcome-day-1-afternoon.md msgid "" "Including 10 minute breaks, this session should take about 2 hours and 35 " "minutes. It contains:" msgstr "" +"با احتساب 10 دقیقه استراحت، این جلسه باید حدود 2 ساعت و 35 دقیقه طول بکشد. " +"آن شامل:" #: src/tuples-and-arrays.md msgid "This segment should take about 35 minutes. It contains:" -msgstr "" +msgstr "این بخش باید حدود 35 دقیقه طول بکشد. این شامل:" #: src/tuples-and-arrays/arrays.md:16 -#, fuzzy msgid "" "A value of the array type `[T; N]` holds `N` (a compile-time constant) " "elements of the same type `T`. Note that the length of the array is _part of " @@ -3802,6 +3936,9 @@ msgid "" "runtime. Rust can usually optimize these checks away, and they can be " "avoided using unsafe Rust." msgstr "" +"سعی کنید به یک عنصر آرایه خارج از محدوده دسترسی داشته باشید. دسترسی های " +"آرایه در زمان اجرا بررسی می شود. زنگ معمولاً می‌تواند این بررسی‌ها را از بین " +"ببرد و با استفاده از Rust ناایمن از آنها جلوگیری کرد." #: src/tuples-and-arrays/arrays.md:26 msgid "We can use literals to assign values to arrays." @@ -3851,23 +3988,31 @@ msgid "" "The empty tuple `()` is referred to as the \"unit type\" and signifies " "absence of a return value, akin to `void` in other languages." msgstr "" +"تاپل خالی `()` به عنوان `unit type` نامیده می‌شود و نشان‌دهنده عدم وجود مقدار " +"بازگشتی است، مشابه `void` در زبان‌های دیگر." #: src/tuples-and-arrays/iteration.md:3 msgid "The `for` statement supports iterating over arrays (but not tuples)." -msgstr "" +msgstr "عبارت `for` از تکرار روی آرایه ها (اما نه تاپل ها) پشتیبانی می کند." #: src/tuples-and-arrays/iteration.md:19 msgid "" "This functionality uses the `IntoIterator` trait, but we haven't covered " "that yet." msgstr "" +"این قابلیت از ویژگی `IntoIterator` استفاده می‌کند، اما ما هنوز به آن " +"پرداخته‌ایم." #: src/tuples-and-arrays/iteration.md:22 +#, fuzzy msgid "" "The `assert_ne!` macro is new here. There are also `assert_eq!` and `assert!" -"` macros. These are always checked while, debug-only variants like " +"` macros. These are always checked, while debug-only variants like " "`debug_assert!` compile to nothing in release builds." msgstr "" +"ماکرو `assert_ne!` در اینجا جدید است. همچنین ماکروهای `assert_eq!` و `assert!" +"` وجود دارد. این‌ها همیشه بررسی می‌شوند، در حالی که، گونه‌های فقط اشکال‌زدایی " +"مانند `debug_assert!` در نسخه‌های ریلیز کامپایل نمی‌شوند." #: src/tuples-and-arrays/destructuring.md:3 msgid "" @@ -3875,6 +4020,9 @@ msgid "" "extract the inner values into local variables. This can be done manually by " "directly accessing the inner values:" msgstr "" +"هنگام کار با تاپل ها و سایر مقادیر ساختاریافته، معمول است که بخواهید مقادیر " +"داخلی را در متغیرهای محلی استخراج کنید. این را می توان به صورت دستی با " +"دسترسی مستقیم به مقادیر داخلی انجام داد:" #: src/tuples-and-arrays/destructuring.md:11 #: src/tuples-and-arrays/destructuring.md:21 @@ -3886,6 +4034,8 @@ msgid "" "However, Rust also supports using pattern matching to destructure a larger " "value into its constituent parts:" msgstr "" +"با این حال، Rust همچنین از استفاده از تطبیق الگو برای تخریب یک مقدار بزرگتر " +"در بخش های تشکیل دهنده آن پشتیبانی می کند:" #: src/tuples-and-arrays/destructuring.md:28 msgid "" @@ -3893,12 +4043,17 @@ msgid "" "statically verify that the value on the right of `=` has the same structure " "as the pattern." msgstr "" +"الگوهای استفاده شده در اینجا \"irrefutable\" هستند، به این معنی که کامپایلر " +"می تواند به طور ایستا تأیید کند که مقدار سمت راست `=` ساختاری مشابه الگو " +"دارد." #: src/tuples-and-arrays/destructuring.md:31 msgid "" "A variable name is an irrefutable pattern that always matches any value, " "hence why we can also use `let` to declare a single variable." msgstr "" +"نام متغیر یک الگوی انکارناپذیر است که همیشه با هر مقداری مطابقت دارد، از این " +"رو می‌توانیم از «let» برای اعلام یک متغیر استفاده کنیم." #: src/tuples-and-arrays/destructuring.md:33 msgid "" @@ -3906,23 +4061,27 @@ msgid "" "comparison and destructuring to happen at the same time. This form of " "pattern matching will be discussed in more detail later." msgstr "" +"Rust همچنین از استفاده از الگوها در شرطی‌ها پشتیبانی می‌کند و امکان مقایسه " +"برابری و تخریب ساختار را در همان زمان فراهم می‌کند. این شکل از تطبیق الگو " +"بعداً با جزئیات بیشتری مورد بحث قرار خواهد گرفت." #: src/tuples-and-arrays/destructuring.md:36 msgid "" "Edit the examples above to show the compiler error when the pattern doesn't " "match the value being matched on." msgstr "" +"مثال‌های بالا را ویرایش کنید تا خطای کامپایلر در زمانی که الگو با مقدار " +"مطابقت‌شده مطابقت ندارد نشان داده شود." #: src/tuples-and-arrays/exercise.md:3 msgid "Arrays can contain other arrays:" -msgstr "" +msgstr "آرایه ها می توانند آرایه های دیگری نیز داشته باشند:" #: src/tuples-and-arrays/exercise.md:9 msgid "What is the type of this variable?" -msgstr "" +msgstr "نوع این متغیر چیست؟" #: src/tuples-and-arrays/exercise.md:11 -#, fuzzy msgid "" "Use an array such as the above to write a function `transpose` which will " "transpose a matrix (turn rows into columns):" @@ -3933,9 +4092,8 @@ msgstr "" "تبدیل می‌کند) استفاده کنید: " #: src/tuples-and-arrays/exercise.md:22 -#, fuzzy msgid "" -"Copy the code below to https://play.rust-lang.org/ and implement the " +"Copy the code below to and implement the " "function. This function only operates on 3x3 matrices." msgstr "" "کد زیر را در کپی کرده و " @@ -3943,16 +4101,16 @@ msgstr "" #: src/tuples-and-arrays/exercise.md:26 src/borrowing/exercise.md:14 #: src/unsafe-rust/exercise.md:51 -msgid "// TODO: remove this when you're done with your implementation." +msgid "// TODO: remove this when you're done with your implementation.\n" msgstr "" #: src/tuples-and-arrays/exercise.md:36 src/tuples-and-arrays/exercise.md:44 #: src/tuples-and-arrays/solution.md:17 src/tuples-and-arrays/solution.md:25 -msgid "//" +msgid "//\n" msgstr "" #: src/tuples-and-arrays/exercise.md:53 src/tuples-and-arrays/solution.md:34 -msgid "// \\<\\-- the comment makes rustfmt add a newline" +msgid "// <-- the comment makes rustfmt add a newline\n" msgstr "" #: src/tuples-and-arrays/exercise.md:58 src/tuples-and-arrays/solution.md:39 @@ -3964,14 +4122,13 @@ msgid "\"transposed: {:#?}\"" msgstr "" #: src/references.md src/smart-pointers.md src/borrowing.md -#: src/error-handling.md src/concurrency/async-pitfalls.md +#: src/concurrency/async-pitfalls.md msgid "This segment should take about 55 minutes. It contains:" -msgstr "" +msgstr "این بخش باید حدود ۵۵ دقیقه طول بکشد. آن شامل:" #: src/references.md -#, fuzzy msgid "Slices: &\\[T\\]" -msgstr "برش‌ها" +msgstr "برش‌ها: `[T]&`" #: src/references/shared.md:3 msgid "" @@ -3979,6 +4136,9 @@ msgid "" "responsibility for the value, and is also called \"borrowing\". Shared " "references are read-only, and the referenced data cannot change." msgstr "" +"یک مرجع راهی برای دسترسی به مقدار دیگری بدون مسئولیت ارزش فراهم می کند و به " +"آن «قرض» نیز می گویند. مراجع مشترک فقط خواندنی هستند و داده های ارجاع شده " +"نمی توانند تغییر کنند." #: src/references/shared.md:20 msgid "" @@ -3986,6 +4146,9 @@ msgid "" "with the `&` operator. The `*` operator \"dereferences\" a reference, " "yielding its value." msgstr "" +"یک مرجع مشترک به یک نوع `T` دارای نوع `&T` است. یک مقدار مرجع با عملگر `&` " +"ساخته می شود. عملگر `*` یک مرجع را \"ارجاع مجدد\" می کند و مقدار آن را به " +"دست می دهد." #: src/references/shared.md:24 msgid "Rust will statically forbid dangling references:" @@ -3998,6 +4161,10 @@ msgid "" "access the value, but is still \"owned\" by the original variable. The " "course will get into more detail on ownership in day 3." msgstr "" +"گفته می‌شود که یک مرجع مقداری را که به آن ارجاع می‌دهد \"borrow\" (قرض) می‌کند، " +"و این مدل خوبی برای دانش‌آموزانی است که با اشاره‌گرها آشنا نیستند: کد می‌تواند " +"از مرجع برای دسترسی به مقدار استفاده کند، اما همچنان متعلق به متغیر اصلی " +"است. این دوره در روز 3 به جزئیات بیشتری در مورد مالکیت خواهد پرداخت." #: src/references/shared.md:43 msgid "" @@ -4007,15 +4174,20 @@ msgid "" "cover how Rust prevents the memory-safety bugs that come from using raw " "pointers." msgstr "" +"مراجع به عنوان اشاره گر پیاده سازی می شوند و یک مزیت کلیدی این است که می " +"توانند بسیار کوچکتر از چیزی باشند که به آن اشاره می کنند. دانش آموزانی که با " +"C یا C++ آشنا هستند، مراجع را به عنوان اشاره گر تشخیص می دهند. بخش‌های بعدی " +"دوره به این موضوع می‌پردازد که چگونه Rust از اشکالات ایمنی حافظه ناشی از " +"استفاده از نشانگرهای خام جلوگیری می‌کند." #: src/references/shared.md:48 msgid "" "Rust does not automatically create references for you - the `&` is always " "required." msgstr "" +"Rust به طور خودکار برای شما مراجع ایجاد نمی کند - `&` همیشه مورد نیاز است." #: src/references/shared.md:51 -#, fuzzy msgid "" "Rust will auto-dereference in some cases, in particular when invoking " "methods (try `r.is_ascii()`). There is no need for an `->` operator like in " @@ -4031,12 +4203,18 @@ msgid "" "different from C++, where assignment to a reference changes the referenced " "value." msgstr "" +"در این مثال، `r` قابل تغییر است تا بتوان آن را مجدداً اختصاص داد (`r = &b`). " +"توجه داشته باشید که این `r` را دوباره متصل می کند، به طوری که به چیز دیگری " +"اشاره می کند. این با C++ متفاوت است، جایی که انتساب به یک مرجع مقدار مرجع را " +"تغییر می دهد." #: src/references/shared.md:58 msgid "" "A shared reference does not allow modifying the value it refers to, even if " "that value was mutable. Try `*r = 'X'`." msgstr "" +"یک مرجع مشترک اجازه تغییر مقداری را که به آن ارجاع می دهد را نمی دهد، حتی " +"اگر آن مقدار قابل تغییر باشد. \"*r = \"X\" را امتحان کنید." #: src/references/shared.md:61 msgid "" @@ -4045,6 +4223,10 @@ msgid "" "a reference to `point`, but `point` will be deallocated when the function " "returns, so this will not compile." msgstr "" +"Rust طول عمر همه مراجع را ردیابی می کند تا اطمینان حاصل شود که آنها به " +"اندازه کافی عمر می کنند. ارجاعات آویزان نمی توانند در Rust ایمن رخ دهند. " +"`x_axis` یک ارجاع به `point` برمی‌گرداند، اما «نقطه» زمانی که تابع برمی‌گردد، " +"تخصیص داده می‌شود، بنابراین کامپایل نمی‌شود." #: src/references/shared.md:66 msgid "We will talk more about borrowing when we get to ownership." @@ -4057,6 +4239,8 @@ msgid "" "Exclusive references, also known as mutable references, allow changing the " "value they refer to. They have type `&mut T`." msgstr "" +"مراجع انحصاری، همچنین به عنوان مراجع قابل تغییر شناخته می شوند، اجازه می " +"دهند مقداری را که به آن ارجاع می دهند تغییر دهند. آنها نوع `mut &T` دارند." #: src/references/exclusive.md:22 msgid "" @@ -4066,19 +4250,22 @@ msgid "" "exists. Try making an `&point.0` or changing `point.0` while `x_coord` is " "alive." msgstr "" +"\"انحصاری\" به این معنی است که فقط از این مرجع می توان برای دسترسی به مقدار " +"استفاده کرد. هیچ مرجع دیگری (اشتراک‌گذاری شده یا انحصاری) نمی‌تواند همزمان " +"وجود داشته باشد، و تا زمانی که مرجع انحصاری وجود دارد، نمی‌توان به مقدار " +"ارجاع‌شده دسترسی داشت. زمانی که `x_coord` زنده است، `&point.0` بسازید یا " +"`point.0` را تغییر دهید." #: src/references/exclusive.md:27 -#, fuzzy msgid "" "Be sure to note the difference between `let mut x_coord: &i32` and `let " "x_coord: &mut i32`. The first one represents a shared reference which can be " "bound to different values, while the second represents an exclusive " "reference to a mutable value." msgstr "" -"توجه داشته باشید که تفاوت بین `let mut ref_x: &i32` و " -"`let ref_x: &mut i32` را به خاطر بسپارید. اولی نمایانگر " -"یک مرجع قابل تغییر است که می‌تواند به مقادیر مختلفی ارجاع داده شود، در حالی " -"که دومی یک مرجع به یک مقدار قابل تغییر را نشان می‌دهد." +"حتماً تفاوت بین «let mut x_coord: &i32» و «let x_coord: &mut i32» را یادداشت " +"کنید. مورد اول یک مرجع مشترک را نشان می دهد که می تواند به مقادیر مختلف متصل " +"شود، در حالی که دومی نشان دهنده یک مرجع انحصاری به یک مقدار قابل تغییر است." #: src/references/slices.md:1 msgid "Slices" @@ -4143,7 +4330,6 @@ msgstr "" "انجام دهیم." #: src/references/slices.md:40 -#, fuzzy msgid "" "Slices always borrow from another object. In this example, `a` has to remain " "'alive' (in scope) for at least as long as our slice." @@ -4152,7 +4338,6 @@ msgstr "" "span> باید حداقل به اندازه طول‌عمر برش ما، زنده (در محدوده) باقی بماند. " #: src/references/slices.md:43 -#, fuzzy msgid "" "The question about modifying `a[3]` can spark an interesting discussion, but " "the answer is that for memory safety reasons you cannot do it through `a` at " @@ -4166,7 +4351,7 @@ msgstr "" "داده‌ها را از هر دو `a` و `s` به " "طور ایمن بخوانید. این کار قبل از ایجاد برش و دوباره بعد از `println!` کار میکند، زمانی که برش دیگر استفاده نمی شود. " -"جزئیات بیشتری در بخش بررسی‌کننده‌قرض (the borrow checker) توضیح خواهیم داد. " +"جزئیات بیشتری در بخش بررسی‌کننده‌قرض (the borrow checker) توضیح خواهیم داد." #: src/references/strings.md:7 msgid "We can now understand the two string types in Rust:" @@ -4174,12 +4359,13 @@ msgstr "حالا می‌توانیم دو نوع رشته‌ای را در را #: src/references/strings.md:9 msgid "`&str` is a slice of UTF-8 encoded bytes, similar to `&[u8]`." -msgstr "" +msgstr "`str&` تکه‌ای از بایت‌های رمزگذاری‌شده UTF-8، شبیه به `[u8]&` است." #: src/references/strings.md:10 +#, fuzzy msgid "" "`String` is an owned buffer of UTF-8 encoded bytes, similar to `Vec`." -msgstr "" +msgstr "`str&` تکه‌ای از بایت‌های رمزگذاری‌شده UTF-8، شبیه به `[u8]&` است." #: src/references/strings.md:17 src/std-traits/read-and-write.md:36 msgid "\"World\"" @@ -4190,9 +4376,8 @@ msgid "\"s1: {s1}\"" msgstr "" #: src/references/strings.md:20 -#, fuzzy msgid "\"Hello \"" -msgstr "سلام دنیا" +msgstr "" #: src/references/strings.md:21 src/references/strings.md:23 #: src/memory-management/move.md:9 @@ -4204,7 +4389,6 @@ msgid "\"s3: {s3}\"" msgstr "" #: src/references/strings.md:33 -#, fuzzy msgid "" "`&str` introduces a string slice, which is an immutable reference to UTF-8 " "encoded string data stored in a block of memory. String literals " @@ -4216,7 +4400,6 @@ msgstr "" "باینری برنامه ذخیره می‌شوند." #: src/references/strings.md:37 -#, fuzzy msgid "" "Rust's `String` type is a wrapper around a vector of bytes. As with a " "`Vec`, it is owned." @@ -4225,7 +4408,6 @@ msgstr "" "بایت‌هاست. مانند `Vec`، یک نوع Owned است." #: src/references/strings.md:40 -#, fuzzy msgid "" "As with many other types `String::from()` creates a string from a string " "literal; `String::new()` creates a new empty string, to which string data " @@ -4237,7 +4419,6 @@ msgstr "" "dir=ltr>`push()` و `push_str()` به آن اضافه شوند." #: src/references/strings.md:44 -#, fuzzy msgid "" "The `format!()` macro is a convenient way to generate an owned string from " "dynamic values. It accepts the same format specification as `println!()`." @@ -4253,9 +4434,12 @@ msgid "" "boundaries, the expression will panic. The `chars` iterator iterates over " "characters and is preferred over trying to get character boundaries right." msgstr "" +"می‌توانید برش‌های `&str` را از `String` از طریق `&` و انتخابی محدوده انتخاب " +"کنید. اگر محدوده بایتی را انتخاب کنید که با مرزهای نویسه تراز نباشد، عبارت " +"وحشت می کند. تکرار کننده `chars` روی کاراکترها تکرار می شود و بر تلاش برای " +"درست کردن مرزهای کاراکتر ترجیح داده می شود." #: src/references/strings.md:52 -#, fuzzy msgid "" "For C++ programmers: think of `&str` as `std::string_view` from C++, but the " "one that always points to a valid string in memory. Rust `String` is a rough " @@ -4271,7 +4455,6 @@ msgstr "" "String استفاده نمی کند)." #: src/references/strings.md:57 -#, fuzzy msgid "Byte strings literals allow you to create a `&[u8]` value directly:" msgstr "" "رشته‌های بایت به شما امکان می‌دهند مستقیماً یک مقدار `&[u8]`()` equals `size_of::>()`." +"Null pointer optimization: For [some types](https://doc.rust-lang.org/std/" +"option/#representation), Rust guarantees that `size_of::()` equals " +"`size_of::>()`." msgstr "" "بهینه‌سازی اشاره‌گر `NULL`: برای برخی از انواع، Rust تضمین می‌کند که `size_of::()` برابر با `size_of::" @@ -4627,10 +4813,11 @@ msgstr "" #: src/user-defined-types/static.md:14 #, fuzzy msgid "" -"As noted in the Rust RFC Book, these are not inlined upon use and have an " -"actual associated memory location. This is useful for unsafe and embedded " -"code, and the variable lives through the entirety of the program execution. " -"When a globally-scoped value does not have a reason to need object identity, " +"As noted in the [Rust RFC Book](https://rust-lang.github.io/rfcs/0246-const-" +"vs-static.html), these are not inlined upon use and have an actual " +"associated memory location. This is useful for unsafe and embedded code, and " +"the variable lives through the entirety of the program execution. When a " +"globally-scoped value does not have a reason to need object identity, " "`const` is generally preferred." msgstr "" "همانطور که در [کتاب Rust RFC](https://rust-lang.github.io/rfcs/0246-const-vs-" @@ -4658,7 +4845,8 @@ msgstr "" #, fuzzy msgid "" "Because `static` variables are accessible from any thread, they must be " -"`Sync`. Interior mutability is possible through a `Mutex`, atomic or similar." +"`Sync`. Interior mutability is possible through a [`Mutex`](https://doc.rust-" +"lang.org/std/sync/struct.Mutex.html), atomic or similar." msgstr "" "از آنجایی که متغیرهای `static` از هر رشته‌ای (thread) قابل دسترسی هستند، باید " "`Sync` باشند. تغییرپذیری داخلی از طریق یک [`Mutex`](https://doc.rust-lang." @@ -4689,8 +4877,9 @@ msgstr "" "استفاده می شوند، درج می شوند:" #: src/user-defined-types/const.md:26 -#, fuzzy -msgid "According to the Rust RFC Book these are inlined upon use." +msgid "" +"According to the [Rust RFC Book](https://rust-lang.github.io/rfcs/0246-const-" +"vs-static.html) these are inlined upon use." msgstr "" "طبق [کتاب Rust RFC](https://rust-lang.github.io/rfcs/0246-const-vs-static." "html)، این موارد هنگام استفاده درج می شوند." @@ -4727,7 +4916,7 @@ msgid "" msgstr "" #: src/user-defined-types/aliases.md:13 -msgid "// Aliases are more useful with long, complex types:" +msgid "// Aliases are more useful with long, complex types:\n" msgstr "" #: src/user-defined-types/aliases.md:23 @@ -4750,36 +4939,38 @@ msgid "" msgstr "" #: src/user-defined-types/exercise.md:12 src/user-defined-types/solution.md:4 -msgid "/// An event in the elevator system that the controller must react to." +msgid "" +"/// An event in the elevator system that the controller must react to.\n" msgstr "" #: src/user-defined-types/exercise.md:15 -msgid "// TODO: add required variants" +msgid "// TODO: add required variants\n" msgstr "" #: src/user-defined-types/exercise.md:17 src/user-defined-types/solution.md:22 -msgid "/// A direction of travel." +msgid "/// A direction of travel.\n" msgstr "" #: src/user-defined-types/exercise.md:24 src/user-defined-types/solution.md:39 -msgid "/// The car has arrived on the given floor." +msgid "/// The car has arrived on the given floor.\n" msgstr "" #: src/user-defined-types/exercise.md:29 src/user-defined-types/solution.md:44 -msgid "/// The car doors have opened." +msgid "/// The car doors have opened.\n" msgstr "" #: src/user-defined-types/exercise.md:34 src/user-defined-types/solution.md:49 -msgid "/// The car doors have closed." +msgid "/// The car doors have closed.\n" msgstr "" #: src/user-defined-types/exercise.md:39 src/user-defined-types/solution.md:54 msgid "" -"/// A directional button was pressed in an elevator lobby on the given floor." +"/// A directional button was pressed in an elevator lobby on the given " +"floor.\n" msgstr "" #: src/user-defined-types/exercise.md:44 src/user-defined-types/solution.md:59 -msgid "/// A floor button was pressed in the elevator car." +msgid "/// A floor button was pressed in the elevator car.\n" msgstr "" #: src/user-defined-types/exercise.md:52 src/user-defined-types/solution.md:67 @@ -4807,35 +4998,35 @@ msgid "\"The car has arrived on the 3rd floor: {:?}\"" msgstr "" #: src/user-defined-types/solution.md:7 -msgid "/// A button was pressed." +msgid "/// A button was pressed.\n" msgstr "" #: src/user-defined-types/solution.md:10 -msgid "/// The car has arrived at the given floor." +msgid "/// The car has arrived at the given floor.\n" msgstr "" #: src/user-defined-types/solution.md:13 -msgid "/// The car's doors have opened." +msgid "/// The car's doors have opened.\n" msgstr "" #: src/user-defined-types/solution.md:16 -msgid "/// The car's doors have closed." +msgid "/// The car's doors have closed.\n" msgstr "" #: src/user-defined-types/solution.md:19 -msgid "/// A floor is represented as an integer." +msgid "/// A floor is represented as an integer.\n" msgstr "" #: src/user-defined-types/solution.md:29 -msgid "/// A user-accessible button." +msgid "/// A user-accessible button.\n" msgstr "" #: src/user-defined-types/solution.md:33 -msgid "/// A button in the elevator lobby on the given floor." +msgid "/// A button in the elevator lobby on the given floor.\n" msgstr "" #: src/user-defined-types/solution.md:36 -msgid "/// A floor button within the car." +msgid "/// A floor button within the car.\n" msgstr "" #: src/welcome-day-2.md @@ -4873,13 +5064,14 @@ msgid "" "Standard library types and traits: a tour of Rust's rich standard library." msgstr "" -#: src/welcome-day-2.md src/welcome-day-4-afternoon.md +#: src/welcome-day-2.md msgid "" "Including 10 minute breaks, this session should take about 2 hours and 10 " "minutes. It contains:" msgstr "" -#: src/pattern-matching.md src/memory-management.md +#: src/pattern-matching.md src/std-types.md src/memory-management.md +#: src/error-handling.md msgid "This segment should take about 1 hour. It contains:" msgstr "" @@ -5154,8 +5346,9 @@ msgid "" "Save the result of `divide_in_two` in the `result` variable and `match` it " "in a loop. That won't compile because `msg` is consumed when matched. To fix " "it, match `&result` instead of `result`. That will make `msg` a reference so " -"it won't be consumed. This \"match ergonomics\" appeared in Rust 2018. If " -"you want to support older Rust, replace `msg` with `ref msg` in the pattern." +"it won't be consumed. This [\"match ergonomics\"](https://rust-lang.github." +"io/rfcs/2005-match-ergonomics.html) appeared in Rust 2018. If you want to " +"support older Rust, replace `msg` with `ref msg` in the pattern." msgstr "" #: src/pattern-matching/let-control-flow.md:3 @@ -5180,10 +5373,10 @@ msgid "`while let` expressions" msgstr "عبارت `while let`" #: src/pattern-matching/let-control-flow.md:12 -#, fuzzy msgid "" -"The `if let` expression lets you execute different code depending on whether " -"a value matches a pattern:" +"The [`if let` expression](https://doc.rust-lang.org/reference/expressions/if-" +"expr.html#if-let-expressions) lets you execute different code depending on " +"whether a value matches a pattern:" msgstr "" "[عبارت `if let`](https://doc.rust-lang.org/reference/expressions/if-expr." "html#if-let-expressions) به شما امکان می‌دهد بسته به اینکه آیا یک مقدار با " @@ -5196,7 +5389,8 @@ msgstr "" #: src/pattern-matching/let-control-flow.md:34 msgid "" "For the common case of matching a pattern and returning from the function, " -"use `let else`. The \"else\" case must diverge (`return`, `break`, or panic " +"use [`let else`](https://doc.rust-lang.org/rust-by-example/flow_control/" +"let_else.html). The \"else\" case must diverge (`return`, `break`, or panic " "- anything but falling off the end of the block)." msgstr "" @@ -5228,10 +5422,10 @@ msgid "\"foo\"" msgstr "" #: src/pattern-matching/let-control-flow.md:65 -#, fuzzy msgid "" -"Like with `if let`, there is a `while let` variant which repeatedly tests a " -"value against a pattern:" +"Like with `if let`, there is a [`while let`](https://doc.rust-lang.org/" +"reference/expressions/loop-expr.html#predicate-pattern-loops) variant which " +"repeatedly tests a value against a pattern:" msgstr "" "مانند `if let`، یک دستور [`while let`](https://doc.rust-lang.org/reference/" "expressions/loop-expr.html#predicate-pattern-loops) وجود دارد که مقادیر " @@ -5240,9 +5434,10 @@ msgstr "" #: src/pattern-matching/let-control-flow.md:81 #, fuzzy msgid "" -"Here `String::pop` returns `Some(c)` until the string is empty, after which " -"it will return `None`. The `while let` lets us keep iterating through all " -"items." +"Here [`String::pop`](https://doc.rust-lang.org/stable/std/string/struct." +"String.html#method.pop) returns `Some(c)` until the string is empty, after " +"which it will return `None`. The `while let` lets us keep iterating through " +"all items." msgstr "" "در اینجا، پیماینده (iterator) توسط `v.into_iter()` یک " "مقدار را برمیگرداند, یک `Option` را در هر فراخوانی " @@ -5340,9 +5535,10 @@ msgstr "" #, fuzzy msgid "" "Some expressions cannot be evaluated and will return an error. The standard " -"`Result` type is an enum that represents either a successful " -"value (`Ok(Value)`) or an error (`Err(String)`). We will cover this type in " -"detail later." +"[`Result`](https://doc.rust-lang.org/std/result/enum.Result." +"html) type is an enum that represents either a successful value " +"(`Ok(Value)`) or an error (`Err(String)`). We will cover this type in detail " +"later." msgstr "" "برخی از عبارات قابل ارزیابی نیستند و خطایی را برمی‌گردانند. نوع `Res` " "نشان‌دهنده یک مقدار موفقیت‌آمیز یا یک خطا با پیام است. این بسیار شبیه به " @@ -5371,19 +5567,19 @@ msgstr "" "span> به جای `panic` برطرف کنید؟" #: src/pattern-matching/exercise.md:30 src/pattern-matching/solution.md:4 -msgid "/// An operation to perform on two subexpressions." +msgid "/// An operation to perform on two subexpressions.\n" msgstr "" #: src/pattern-matching/exercise.md:38 src/pattern-matching/solution.md:12 -msgid "/// An expression, in tree form." +msgid "/// An expression, in tree form.\n" msgstr "" #: src/pattern-matching/exercise.md:42 src/pattern-matching/solution.md:16 -msgid "/// An operation on two subexpressions." +msgid "/// An operation on two subexpressions.\n" msgstr "" #: src/pattern-matching/exercise.md:45 src/pattern-matching/solution.md:19 -msgid "/// A literal value" +msgid "/// A literal value\n" msgstr "" #: src/pattern-matching/exercise.md:104 src/pattern-matching/solution.md:40 @@ -5402,15 +5598,15 @@ msgid "" msgstr "" #: src/methods-and-traits/methods.md:14 -msgid "// No receiver, a static method" +msgid "// No receiver, a static method\n" msgstr "" #: src/methods-and-traits/methods.md:19 -msgid "// Exclusive borrowed read-write access to self" +msgid "// Exclusive borrowed read-write access to self\n" msgstr "" #: src/methods-and-traits/methods.md:24 -msgid "// Shared and read-only borrowed access to self" +msgid "// Shared and read-only borrowed access to self\n" msgstr "" #: src/methods-and-traits/methods.md:26 @@ -5422,7 +5618,7 @@ msgid "\"Lap {idx}: {lap} sec\"" msgstr "" #: src/methods-and-traits/methods.md:32 -msgid "// Exclusive ownership of self" +msgid "// Exclusive ownership of self\n" msgstr "" #: src/methods-and-traits/methods.md:35 @@ -5434,7 +5630,7 @@ msgid "\"Monaco Grand Prix\"" msgstr "" #: src/methods-and-traits/methods.md:47 -msgid "// race.add_lap(42);" +msgid "// race.add_lap(42);\n" msgstr "" #: src/methods-and-traits/methods.md:51 @@ -5520,8 +5716,9 @@ msgstr "" #: src/methods-and-traits/methods.md:86 msgid "" -"Beyond variants on `self`, there are also special wrapper types allowed to " -"be receiver types, such as `Box`." +"Beyond variants on `self`, there are also [special wrapper types](https://" +"doc.rust-lang.org/reference/special-types-and-traits.html) allowed to be " +"receiver types, such as `Box`." msgstr "" #: src/methods-and-traits/traits.md:3 @@ -5530,11 +5727,11 @@ msgid "" msgstr "" #: src/methods-and-traits/traits.md:7 -msgid "/// Return a sentence from this pet." +msgid "/// Return a sentence from this pet.\n" msgstr "" #: src/methods-and-traits/traits.md:10 -msgid "/// Print a string to the terminal greeting this pet." +msgid "/// Print a string to the terminal greeting this pet.\n" msgstr "" #: src/methods-and-traits/traits.md:18 @@ -5636,11 +5833,11 @@ msgid "" msgstr "" #: src/methods-and-traits/deriving.md:15 -msgid "// Default trait adds `default` constructor." +msgid "// Default trait adds `default` constructor.\n" msgstr "" #: src/methods-and-traits/deriving.md:16 -msgid "// Clone trait adds `clone` method." +msgid "// Clone trait adds `clone` method.\n" msgstr "" #: src/methods-and-traits/deriving.md:17 @@ -5648,7 +5845,7 @@ msgid "\"EldurScrollz\"" msgstr "" #: src/methods-and-traits/deriving.md:18 -msgid "// Debug trait adds support for printing with `{:?}`." +msgid "// Debug trait adds support for printing with `{:?}`.\n" msgstr "" #: src/methods-and-traits/deriving.md:19 @@ -5665,7 +5862,7 @@ msgstr "" #: src/methods-and-traits/exercise.md:1 #, fuzzy msgid "Exercise: Logger Trait" -msgstr "تمرین‌ها" +msgstr "تمرین: شمارنده" #: src/methods-and-traits/exercise.md:3 msgid "" @@ -5690,7 +5887,7 @@ msgid "" msgstr "" #: src/methods-and-traits/exercise.md:20 src/methods-and-traits/solution.md:7 -msgid "/// Log a message at the given verbosity level." +msgid "/// Log a message at the given verbosity level.\n" msgstr "" #: src/methods-and-traits/exercise.md:28 src/methods-and-traits/solution.md:15 @@ -5706,18 +5903,21 @@ msgid "\"Uhoh\"" msgstr "" #: src/methods-and-traits/exercise.md:36 -msgid "// TODO: Define and implement `VerbosityFilter`." +msgid "// TODO: Define and implement `VerbosityFilter`.\n" msgstr "" #: src/methods-and-traits/solution.md:23 -msgid "/// Only log messages up to the given verbosity level." +msgid "/// Only log messages up to the given verbosity level.\n" msgstr "" #: src/welcome-day-2-afternoon.md +#, fuzzy msgid "" -"Including 10 minute breaks, this session should take about 4 hours and 5 " +"Including 10 minute breaks, this session should take about 3 hours and 15 " "minutes. It contains:" msgstr "" +"با احتساب 10 دقیقه استراحت، این جلسه باید حدود 2 ساعت و 5 دقیقه طول بکشد. آن " +"شامل:" #: src/generics.md src/iterators.md src/testing.md msgid "This segment should take about 45 minutes. It contains:" @@ -5735,7 +5935,7 @@ msgstr "صفات Async" #: src/generics.md #, fuzzy msgid "Exercise: Generic min" -msgstr "تمرین‌ها" +msgstr "تمرین: هندسه" #: src/generics/generic-functions.md:3 msgid "" @@ -5744,7 +5944,7 @@ msgid "" msgstr "" #: src/generics/generic-functions.md:7 -msgid "/// Pick `even` or `odd` depending on the value of `n`." +msgid "/// Pick `even` or `odd` depending on the value of `n`.\n" msgstr "" #: src/generics/generic-functions.md:17 @@ -5850,14 +6050,15 @@ msgstr "" #: src/generics/generic-traits.md:31 msgid "" -"The `From` trait will be covered later in the course, but its definition in " -"the `std` docs is simple." +"The `From` trait will be covered later in the course, but its [definition in " +"the `std` docs](https://doc.rust-lang.org/std/convert/trait.From.html) is " +"simple." msgstr "" #: src/generics/generic-traits.md:35 msgid "" "Implementations of the trait do not need to cover all possible type " -"parameters. Here, `Foo::From(\"hello\")` would not compile because there is " +"parameters. Here, `Foo::from(\"hello\")` would not compile because there is " "no `From<&str>` implementation for `Foo`." msgstr "" @@ -5873,7 +6074,8 @@ msgid "" "In fact, Rust requires that at most one implementation of a trait match for " "any type T. Unlike some other languages, Rust has no heuristic for choosing " "the \"most specific\" match. There is work on adding this support, called " -"specialization." +"[specialization](https://rust-lang.github.io/rfcs/1210-impl-specialization." +"html)." msgstr "" #: src/generics/trait-bounds.md:3 @@ -5887,7 +6089,7 @@ msgid "You can do this with `T: Trait` or `impl Trait`:" msgstr "" #: src/generics/trait-bounds.md:12 -msgid "// struct NotClonable;" +msgid "// struct NotClonable;\n" msgstr "" #: src/generics/trait-bounds.md:18 @@ -5934,8 +6136,8 @@ msgstr "" #: src/generics/impl-trait.md:7 msgid "" -"// Syntactic sugar for: // fn add_42_millions\\\\>(x: T) -> " -"i32 {" +"// Syntactic sugar for:\n" +"// fn add_42_millions>(x: T) -> i32 {\n" msgstr "" #: src/generics/impl-trait.md:19 @@ -5996,7 +6198,7 @@ msgid "\"Miau!\"" msgstr "" #: src/generics/dyn-trait.md:30 -msgid "// Uses generics and static dispatch." +msgid "// Uses generics and static dispatch.\n" msgstr "" #: src/generics/dyn-trait.md:33 src/generics/dyn-trait.md:38 @@ -6005,7 +6207,7 @@ msgid "\"Hello, who are you? {}\"" msgstr "" #: src/generics/dyn-trait.md:35 -msgid "// Uses type-erasure and dynamic dispatch." +msgid "// Uses type-erasure and dynamic dispatch.\n" msgstr "" #: src/generics/dyn-trait.md:56 @@ -6020,9 +6222,10 @@ msgstr "" #: src/generics/dyn-trait.md:62 msgid "" -"When using `dyn Trait`, it instead uses dynamic dispatch through a virtual " -"method table (vtable). This means that there's a single version of `fn " -"dynamic` that is used regardless of what type of `Pet` is passed in." +"When using `dyn Trait`, it instead uses dynamic dispatch through a [virtual " +"method table](https://en.wikipedia.org/wiki/Virtual_method_table) (vtable). " +"This means that there's a single version of `fn dynamic` that is used " +"regardless of what type of `Pet` is passed in." msgstr "" #: src/generics/dyn-trait.md:67 @@ -6053,11 +6256,12 @@ msgstr "" #: src/generics/exercise.md:3 msgid "" "In this short exercise, you will implement a generic `min` function that " -"determines the minimum of two values, using the `Ord` trait." +"determines the minimum of two values, using the [`Ord`](https://doc.rust-" +"lang.org/stable/std/cmp/trait.Ord.html) trait." msgstr "" #: src/generics/exercise.md:8 -msgid "// TODO: implement the `min` function used in `main`." +msgid "// TODO: implement the `min` function used in `main`.\n" msgstr "" #: src/generics/exercise.md:15 src/generics/solution.md:17 @@ -6087,11 +6291,10 @@ msgid "\"armadillo\"" msgstr "" #: src/generics/exercise.md:26 -msgid "Show students the `Ord` trait and `Ordering` enum." -msgstr "" - -#: src/std-types.md -msgid "This segment should take about 1 hour and 20 minutes. It contains:" +msgid "" +"Show students the [`Ord`](https://doc.rust-lang.org/stable/std/cmp/trait.Ord." +"html) trait and [`Ordering`](https://doc.rust-lang.org/stable/std/cmp/enum." +"Ordering.html) enum." msgstr "" #: src/std-types.md src/std-types/option.md:1 @@ -6099,7 +6302,7 @@ msgstr "" msgid "Option" msgstr "استثناها" -#: src/std-types.md src/std-types/result.md:1 +#: src/std-types.md src/std-types/result.md:1 src/error-handling.md msgid "Result" msgstr "" @@ -6156,15 +6359,25 @@ msgid "Rust comes with extensive documentation. For example:" msgstr "" #: src/std-types/docs.md:5 -msgid "All of the details about loops." +#, fuzzy +msgid "" +"All of the details about [loops](https://doc.rust-lang.org/stable/reference/" +"expressions/loop-expr.html)." msgstr "" +"اگر می‌خواهید زودتر از یک حلقه خارج شوید، از [`break`](https://doc.rust-lang." +"org/reference/expressions/loop-expr.html#break-expressions) استفاده کنید," #: src/std-types/docs.md:7 -msgid "Primitive types like `u8`." +msgid "" +"Primitive types like [`u8`](https://doc.rust-lang.org/stable/std/primitive." +"u8.html)." msgstr "" #: src/std-types/docs.md:9 -msgid "Standard library types like `Option` or `BinaryHeap`." +msgid "" +"Standard library types like [`Option`](https://doc.rust-lang.org/stable/std/" +"option/enum.Option.html) or [`BinaryHeap`](https://doc.rust-lang.org/stable/" +"std/collections/struct.BinaryHeap.html)." msgstr "" #: src/std-types/docs.md:13 @@ -6174,14 +6387,17 @@ msgstr "" #: src/std-types/docs.md:16 msgid "" "/// Determine whether the first argument is divisible by the second " -"argument. /// /// If the second argument is zero, the result is false." +"argument.\n" +"///\n" +"/// If the second argument is zero, the result is false.\n" msgstr "" #: src/std-types/docs.md:27 #, fuzzy msgid "" "The contents are treated as Markdown. All published Rust library crates are " -"automatically documented at `docs.rs` using the rustdoc tool. It is " +"automatically documented at [`docs.rs`](https://docs.rs) using the [rustdoc]" +"(https://doc.rust-lang.org/rustdoc/what-is-rustdoc.html) tool. It is " "idiomatic to document all public items in an API using this pattern." msgstr "" "محتوا کامنت شده به عنوان `Markdown` در نظر گرفته می‌شود. تمام جعبه‌هایی " @@ -6199,14 +6415,15 @@ msgstr "" #: src/std-types/docs.md:36 msgid "" -"//! This module contains functionality relating to divisibility of integers." +"//! This module contains functionality relating to divisibility of " +"integers.\n" msgstr "" #: src/std-types/docs.md:42 #, fuzzy msgid "" -"Show students the generated docs for the `rand` crate at https://docs.rs/" -"rand." +"Show students the generated docs for the `rand` crate at ." msgstr "" "دانشجویان را با مستندات تولید شده برای جعبه `rand` در [`docs.rs/rand`]" "(https://docs.rs/rand) آشنا کنید." @@ -6214,7 +6431,8 @@ msgstr "" #: src/std-types/option.md:3 msgid "" "We have already seen some use of `Option`. It stores either a value of " -"type `T` or nothing. For example, `String::find` returns an `Option`." +"type `T` or nothing. For example, [`String::find`](https://doc.rust-lang.org/" +"stable/std/string/struct.String.html#method.find) returns an `Option`." msgstr "" #: src/std-types/option.md:10 @@ -6268,28 +6486,27 @@ msgstr "" #: src/std-types/result.md:3 msgid "" "`Result` is similar to `Option`, but indicates the success or failure of an " -"operation, each with a different type. This is similar to the `Res` defined " -"in the expression exercise, but generic: `Result` where `T` is used in " -"the `Ok` variant and `E` appears in the `Err` variant." +"operation, each with a different enum variant. It is generic: `Result` " +"where `T` is used in the `Ok` variant and `E` appears in the `Err` variant." msgstr "" -#: src/std-types/result.md:13 +#: src/std-types/result.md:12 src/error-handling/result.md:11 msgid "\"diary.txt\"" msgstr "" -#: src/std-types/result.md:18 +#: src/std-types/result.md:17 src/error-handling/result.md:16 msgid "\"Dear diary: {contents} ({bytes} bytes)\"" msgstr "" -#: src/std-types/result.md:20 +#: src/std-types/result.md:19 src/error-handling/result.md:18 msgid "\"Could not read file content\"" msgstr "" -#: src/std-types/result.md:24 +#: src/std-types/result.md:23 src/error-handling/result.md:22 msgid "\"The diary could not be opened: {err}\"" msgstr "" -#: src/std-types/result.md:33 +#: src/std-types/result.md:32 msgid "" "As with `Option`, the successful value sits inside of `Result`, forcing the " "developer to explicitly extract it. This encourages error checking. In the " @@ -6297,23 +6514,24 @@ msgid "" "called, and this is a signal of the developer intent too." msgstr "" -#: src/std-types/result.md:37 +#: src/std-types/result.md:36 msgid "" "`Result` documentation is a recommended read. Not during the course, but it " "is worth mentioning. It contains a lot of convenience methods and functions " "that help functional-style programming." msgstr "" -#: src/std-types/result.md:40 +#: src/std-types/result.md:39 msgid "" "`Result` is the standard type to implement error handling as we will see on " "Day 4." msgstr "" #: src/std-types/string.md:3 -#, fuzzy -msgid "`String` is a growable UTF-8 encoded string:" -msgstr "`String` یک بافر رشته‌ای قابل تغییر است." +msgid "" +"[`String`](https://doc.rust-lang.org/std/string/struct.String.html) is a " +"growable UTF-8 encoded string:" +msgstr "" #: src/std-types/string.md:8 src/std-traits/read-and-write.md:35 #: src/memory-management/review.md:23 src/memory-management/review.md:58 @@ -6344,8 +6562,9 @@ msgstr "" #: src/std-types/string.md:21 msgid "" -"`String` implements `Deref`, which means that you can call all " -"`str` methods on a `String`." +"`String` implements [`Deref`](https://doc.rust-lang.org/std/" +"string/struct.String.html#deref-methods-str), which means that you can call " +"all `str` methods on a `String`." msgstr "" #: src/std-types/string.md:30 @@ -6364,7 +6583,8 @@ msgstr "" msgid "" "`String::chars` returns an iterator over the actual characters. Note that a " "`char` can be different from what a human will consider a \"character\" due " -"to grapheme clusters." +"to [grapheme clusters](https://docs.rs/unicode-segmentation/latest/" +"unicode_segmentation/struct.Graphemes.html)." msgstr "" #: src/std-types/string.md:37 @@ -6420,13 +6640,17 @@ msgstr "" #: src/std-types/string.md:54 msgid "" -"Many types can be converted to a string with the `to_string` method. This " -"trait is automatically implemented for all types that implement `Display`, " -"so anything that can be formatted can also be converted to a string." +"Many types can be converted to a string with the [`to_string`](https://doc." +"rust-lang.org/std/string/trait.ToString.html#tymethod.to_string) method. " +"This trait is automatically implemented for all types that implement " +"`Display`, so anything that can be formatted can also be converted to a " +"string." msgstr "" #: src/std-types/vec.md:3 -msgid "`Vec` is the standard resizable heap-allocated buffer:" +msgid "" +"[`Vec`](https://doc.rust-lang.org/std/vec/struct.Vec.html) is the standard " +"resizable heap-allocated buffer:" msgstr "" #: src/std-types/vec.md:9 @@ -6438,11 +6662,11 @@ msgid "\"v2: len = {}, capacity = {}\"" msgstr "" #: src/std-types/vec.md:16 -msgid "// Canonical macro to initialize a vector with elements." +msgid "// Canonical macro to initialize a vector with elements.\n" msgstr "" #: src/std-types/vec.md:19 -msgid "// Retain only the even elements." +msgid "// Retain only the even elements.\n" msgstr "" #: src/std-types/vec.md:21 src/std-types/vec.md:25 @@ -6450,12 +6674,13 @@ msgid "\"{v3:?}\"" msgstr "" #: src/std-types/vec.md:23 -msgid "// Remove consecutive duplicates." +msgid "// Remove consecutive duplicates.\n" msgstr "" #: src/std-types/vec.md:29 msgid "" -"`Vec` implements `Deref`, which means that you can call slice " +"`Vec` implements [`Deref`](https://doc.rust-lang.org/std/vec/" +"struct.Vec.html#deref-methods-%5BT%5D), which means that you can call slice " "methods on a `Vec`." msgstr "" @@ -6530,7 +6755,7 @@ msgid "\"{book} is unknown.\"" msgstr "" #: src/std-types/hashmap.md:28 -msgid "// Use the .entry() method to insert a value if nothing is found." +msgid "// Use the .entry() method to insert a value if nothing is found.\n" msgstr "" #: src/std-types/hashmap.md:34 @@ -6563,8 +6788,10 @@ msgstr "" #: src/std-types/hashmap.md:55 msgid "" -"Although, since Rust 1.56, HashMap implements `From<[(K, V); N]>`, which " -"allows us to easily initialize a hash map from a literal array:" +"Although, since Rust 1.56, HashMap implements [`From<[(K, V); N]>`](https://" +"doc.rust-lang.org/std/collections/hash_map/struct.HashMap.html#impl-" +"From%3C%5B(K,+V);+N%5D%3E-for-HashMap%3CK,+V,+RandomState%3E), which allows " +"us to easily initialize a hash map from a literal array:" msgstr "" #: src/std-types/hashmap.md:65 @@ -6597,7 +6824,8 @@ msgstr "" #: src/std-types/exercise.md:3 msgid "" "In this exercise you will take a very simple data structure and make it " -"generic. It uses a `std::collections::HashMap` to keep track of which values " +"generic. It uses a [`std::collections::HashMap`](https://doc.rust-lang.org/" +"stable/std/collections/struct.HashMap.html) to keep track of which values " "have been seen and how many times each one has appeared." msgstr "" @@ -6610,25 +6838,26 @@ msgstr "" #: src/std-types/exercise.md:13 msgid "" -"If you finish early, try using the `entry` method to halve the number of " -"hash lookups required to implement the `count` method." +"If you finish early, try using the [`entry`](https://doc.rust-lang.org/" +"stable/std/collections/struct.HashMap.html#method.entry) method to halve the " +"number of hash lookups required to implement the `count` method." msgstr "" #: src/std-types/exercise.md:20 src/std-types/solution.md:6 msgid "" -"/// Counter counts the number of times each value of type T has been seen." +"/// Counter counts the number of times each value of type T has been seen.\n" msgstr "" #: src/std-types/exercise.md:27 src/std-types/solution.md:13 -msgid "/// Create a new Counter." +msgid "/// Create a new Counter.\n" msgstr "" #: src/std-types/exercise.md:34 src/std-types/solution.md:18 -msgid "/// Count an occurrence of the given value." +msgid "/// Count an occurrence of the given value.\n" msgstr "" #: src/std-types/exercise.md:43 src/std-types/solution.md:23 -msgid "/// Return the number of times the given value has been seen." +msgid "/// Return the number of times the given value has been seen.\n" msgstr "" #: src/std-types/exercise.md:59 src/std-types/solution.md:39 @@ -6649,8 +6878,9 @@ msgstr "" msgid "\"got {} apples\"" msgstr "" -#: src/std-traits.md -msgid "This segment should take about 1 hour and 40 minutes. It contains:" +#: src/std-traits.md src/concurrency/sync-exercises.md +#: src/concurrency/async-exercises.md +msgid "This segment should take about 1 hour and 10 minutes. It contains:" msgstr "" #: src/std-traits.md @@ -6660,7 +6890,7 @@ msgstr "From و Into" #: src/std-traits.md #, fuzzy msgid "Read and Write" -msgstr "Read and Write" +msgstr "متد ها و صفات" #: src/std-traits.md msgid "Default, struct update syntax" @@ -6726,7 +6956,9 @@ msgid "" msgstr "" #: src/std-traits/operators.md:3 -msgid "Operator overloading is implemented via traits in `std::ops`:" +msgid "" +"Operator overloading is implemented via traits in [`std::ops`](https://doc." +"rust-lang.org/std/ops/index.html):" msgstr "" #: src/std-traits/operators.md:23 @@ -6769,7 +7001,10 @@ msgid "" msgstr "" #: src/std-traits/from-and-into.md:3 -msgid "Types implement `From` and `Into` to facilitate type conversions:" +msgid "" +"Types implement [`From`](https://doc.rust-lang.org/std/convert/trait.From." +"html) and [`Into`](https://doc.rust-lang.org/std/convert/trait.Into.html) to " +"facilitate type conversions:" msgstr "" #: src/std-traits/from-and-into.md:11 src/std-traits/from-and-into.md:23 @@ -6777,7 +7012,10 @@ msgid "\"{s}, {addr}, {one}, {bigger}\"" msgstr "" #: src/std-traits/from-and-into.md:15 -msgid "`Into` is automatically implemented when `From` is implemented:" +msgid "" +"[`Into`](https://doc.rust-lang.org/std/convert/trait.Into.html) is " +"automatically implemented when [`From`](https://doc.rust-lang.org/std/" +"convert/trait.From.html) is implemented:" msgstr "" #: src/std-traits/from-and-into.md:30 @@ -6853,7 +7091,10 @@ msgid "This is common in casting integers to `usize` for use as an index." msgstr "" #: src/std-traits/read-and-write.md:3 -msgid "Using `Read` and `BufRead`, you can abstract over `u8` sources:" +msgid "" +"Using [`Read`](https://doc.rust-lang.org/std/io/trait.Read.html) and " +"[`BufRead`](https://doc.rust-lang.org/std/io/trait.BufRead.html), you can " +"abstract over `u8` sources:" msgstr "" #: src/std-traits/read-and-write.md:14 @@ -6869,7 +7110,9 @@ msgid "\"lines in file: {}\"" msgstr "" #: src/std-traits/read-and-write.md:23 -msgid "Similarly, `Write` lets you abstract over `u8` sinks:" +msgid "" +"Similarly, [`Write`](https://doc.rust-lang.org/std/io/trait.Write.html) lets " +"you abstract over `u8` sinks:" msgstr "" #: src/std-traits/read-and-write.md:30 @@ -6885,7 +7128,9 @@ msgid "The `Default` Trait" msgstr "" #: src/std-traits/default.md:3 -msgid "`Default` trait produces a default value for a type." +msgid "" +"[`Default`](https://doc.rust-lang.org/std/default/trait.Default.html) trait " +"produces a default value for a type." msgstr "" #: src/std-traits/default.md:18 @@ -6904,8 +7149,8 @@ msgstr "" msgid "\"{almost_default_struct:#?}\"" msgstr "" -#: src/std-traits/default.md:31 src/lifetimes/exercise.md:211 -#: src/lifetimes/solution.md:214 +#: src/std-traits/default.md:31 src/lifetimes/exercise.md:197 +#: src/lifetimes/solution.md:196 msgid "\"{:#?}\"" msgstr "" @@ -6941,13 +7186,18 @@ msgid "" msgstr "" #: src/std-traits/default.md:47 -msgid "The `..` syntax is called struct update syntax." +msgid "" +"The `..` syntax is called [struct update syntax](https://doc.rust-lang.org/" +"book/ch05-01-defining-structs.html#creating-instances-from-other-instances-" +"with-struct-update-syntax)." msgstr "" #: src/std-traits/closures.md:3 msgid "" "Closures or lambda expressions have types which cannot be named. However, " -"they implement special `Fn`, `FnMut`, and `FnOnce` traits:" +"they implement special [`Fn`](https://doc.rust-lang.org/std/ops/trait.Fn." +"html), [`FnMut`](https://doc.rust-lang.org/std/ops/trait.FnMut.html), and " +"[`FnOnce`](https://doc.rust-lang.org/std/ops/trait.FnOnce.html) traits:" msgstr "" #: src/std-traits/closures.md:10 @@ -7033,13 +7283,14 @@ msgstr "" #: src/std-traits/exercise.md:3 msgid "" -"In this example, you will implement the classic \"ROT13\" cipher. Copy this " -"code to the playground, and implement the missing bits. Only rotate ASCII " -"alphabetic characters, to ensure the result is still valid UTF-8." +"In this example, you will implement the classic [\"ROT13\" cipher](https://" +"en.wikipedia.org/wiki/ROT13). Copy this code to the playground, and " +"implement the missing bits. Only rotate ASCII alphabetic characters, to " +"ensure the result is still valid UTF-8." msgstr "" #: src/std-traits/exercise.md:15 -msgid "// Implement the `Read` trait for `RotDecoder`." +msgid "// Implement the `Read` trait for `RotDecoder`.\n" msgstr "" #: src/std-traits/exercise.md:20 src/std-traits/exercise.md:33 @@ -7090,9 +7341,8 @@ msgid "Clone" msgstr "" #: src/memory-management.md -#, fuzzy msgid "Drop" -msgstr "رها کردن" +msgstr "" #: src/memory-management/review.md:3 msgid "Programs allocate memory in two ways:" @@ -7143,8 +7393,8 @@ msgid "" "Creating a `String` puts fixed-sized metadata on the stack and dynamically " "sized data, the actual string, on the heap:" msgstr "" -"یک `String` بسازید که متادیتا با سایزثابت را روی استک قرار دهد و متن اصلی " -"سایزپویا را در انباشت قرار دهد." +"یک `String` بسازید که متادیتا با سایز ثابت را روی استک قرار دهد و متن اصلی " +"سایز پویا را در انباشت قرار دهد:" #: src/memory-management/review.md:44 msgid "" @@ -7152,14 +7402,14 @@ msgid "" "length and can grow if mutable via reallocation on the heap." msgstr "" "اشاره کنید که یک `String` بر پایه `Vec` است، بنابراین دارای ظرفیت و طول است " -"و می تواند در صورت قابل تغییر بودن از طریق تخصیص مجدد در انباش بزرگتر کند." +"و می‌تواند در صورت قابل تغییر بودن از طریق تخصیص مجدد در انباش بزرگتر کند." #: src/memory-management/review.md:47 -#, fuzzy msgid "" "If students ask about it, you can mention that the underlying memory is heap " -"allocated using the System Allocator and custom allocators can be " -"implemented using the Allocator API" +"allocated using the [System Allocator](https://doc.rust-lang.org/std/alloc/" +"struct.System.html) and custom allocators can be implemented using the " +"[Allocator API](https://doc.rust-lang.org/std/alloc/index.html)" msgstr "" "اگر دانشجویان در مورد آن بپرسند، می توانید اشاره کنید که حافظه زیربنایی " "انباشت (heap) است که با استفاده از [System Allocator](https://doc.rust-lang." @@ -7173,7 +7423,7 @@ msgid "" "point out that this is rightfully unsafe!" msgstr "" "می‌توان با استفاده از `unsafe` در زبان راست چیدمان حافظه را بررسی کنیم. البته " -"که به این موضوع که این کار خیلی ناایمن است هم اشاره کنید." +"که به این موضوع که این کار خیلی ناایمن است هم اشاره کنید!" #: src/memory-management/review.md:59 src/testing/unit-tests.md:15 msgid "' '" @@ -7185,8 +7435,10 @@ msgstr "" #: src/memory-management/review.md:61 msgid "" -"// DON'T DO THIS AT HOME! For educational purposes only. // String provides " -"no guarantees about its layout, so this could lead to // undefined behavior." +"// DON'T DO THIS AT HOME! For educational purposes only.\n" +" // String provides no guarantees about its layout, so this could lead " +"to\n" +" // undefined behavior.\n" msgstr "" #: src/memory-management/review.md:66 @@ -7243,7 +7495,7 @@ msgstr "زبان Rust یک ترکیبی از هر را ارائه میدهد:" msgid "" "Full control _and_ safety via compile time enforcement of correct memory " "management." -msgstr "مدیریت کامل و ایمنی حافظه با مدیریت درست حافظه در زمان کامپایل" +msgstr "مدیریت کامل و ایمنی حافظه با مدیریت درست حافظه در زمان کامپایل." #: src/memory-management/approaches.md:20 msgid "It does this with an explicit ownership concept." @@ -7294,7 +7546,7 @@ msgid "" "to use a variable outside its scope:" msgstr "" "همه انتساب متغیر دارای یک *اسکوپ* هستند که در آن معتبر هستند و استفاده از یک " -"متغیر خارج از اسکوپ آن خطا است." +"متغیر خارج از اسکوپ آن خطا است:" #: src/memory-management/ownership.md:20 #, fuzzy @@ -7327,7 +7579,7 @@ msgid "\"Hello!\"" msgstr "سلام دنیا" #: src/memory-management/move.md:10 -msgid "// println!(\"s1: {s1}\");" +msgid "// println!(\"s1: {s1}\");\n" msgstr "" #: src/memory-management/move.md:14 @@ -7395,7 +7647,7 @@ msgid "\"Alice\"" msgstr "برش‌ها" #: src/memory-management/move.md:69 -msgid "// say_hello(name);" +msgid "// say_hello(name);\n" msgstr "" #: src/memory-management/move.md:76 @@ -7487,7 +7739,7 @@ msgid "\"Cpp\"" msgstr "" #: src/memory-management/move.md:108 -msgid "// Duplicate the data in s1." +msgid "// Duplicate the data in s1.\n" msgstr "" #: src/memory-management/move.md:111 @@ -7523,12 +7775,12 @@ msgstr "" "آزادسازی مجدد حافظه رخ دهد." #: src/memory-management/move.md:159 -#, fuzzy msgid "" -"C++ also has `std::move`, which is used to indicate when a value may be " -"moved from. If the example had been `s2 = std::move(s1)`, no heap allocation " -"would take place. After the move, `s1` would be in a valid but unspecified " -"state. Unlike Rust, the programmer is allowed to keep using `s1`." +"C++ also has [`std::move`](https://en.cppreference.com/w/cpp/utility/move), " +"which is used to indicate when a value may be moved from. If the example had " +"been `s2 = std::move(s1)`, no heap allocation would take place. After the " +"move, `s1` would be in a valid but unspecified state. Unlike Rust, the " +"programmer is allowed to keep using `s1`." msgstr "" "البته که زبان C++ دارای [`std::move`](https://en.cppreference.com/w/cpp/utility/move) است که برای انتقال " @@ -7584,7 +7836,7 @@ msgstr "" #: src/memory-management/copy-types.md:16 msgid "These types implement the `Copy` trait." -msgstr "این انواع‌داده ویژگی `Copy` را پیاده‌سازی کرده‌اند:" +msgstr "این انواع‌داده ویژگی `Copy` را پیاده‌سازی کرده‌اند." #: src/memory-management/copy-types.md:18 msgid "You can opt-in your own types to use copy semantics:" @@ -7592,7 +7844,7 @@ msgstr "البته که میتوان برای نوع‌هایی که میساز #: src/memory-management/copy-types.md:34 msgid "After the assignment, both `p1` and `p2` own their own data." -msgstr "پس از انتساب، هر دو `p1` و `p2` داده‌های خود مستقل خود را دارند.‌" +msgstr "پس از انتساب، هر دو `p1` و `p2` داده‌های خود مستقل خود را دارند." #: src/memory-management/copy-types.md:35 msgid "We can also use `p1.clone()` to explicitly copy the data." @@ -7671,8 +7923,8 @@ msgstr "" #: src/memory-management/drop.md:3 msgid "" -"Values which implement `Drop` can specify code to run when they go out of " -"scope:" +"Values which implement [`Drop`](https://doc.rust-lang.org/std/ops/trait.Drop." +"html) can specify code to run when they go out of scope:" msgstr "" #: src/memory-management/drop.md:13 @@ -7768,13 +8020,13 @@ msgid "Fill in the missing pieces." msgstr "" #: src/memory-management/exercise.md:22 src/memory-management/solution.md:16 -msgid "/// A representation of a software package." +msgid "/// A representation of a software package.\n" msgstr "" #: src/memory-management/exercise.md:34 src/memory-management/solution.md:28 msgid "" -"/// Return a representation of this package as a dependency, for use in /// " -"building other packages." +"/// Return a representation of this package as a dependency, for use in\n" +" /// building other packages.\n" msgstr "" #: src/memory-management/exercise.md:37 @@ -7783,7 +8035,7 @@ msgstr "" #: src/memory-management/exercise.md:40 src/memory-management/solution.md:37 msgid "" -"/// A builder for a Package. Use `build()` to create the `Package` itself." +"/// A builder for a Package. Use `build()` to create the `Package` itself.\n" msgstr "" #: src/memory-management/exercise.md:46 @@ -7791,11 +8043,11 @@ msgid "\"2\"" msgstr "" #: src/memory-management/exercise.md:49 src/memory-management/solution.md:52 -msgid "/// Set the package version." +msgid "/// Set the package version.\n" msgstr "" #: src/memory-management/exercise.md:55 src/memory-management/solution.md:58 -msgid "/// Set the package authors." +msgid "/// Set the package authors.\n" msgstr "" #: src/memory-management/exercise.md:57 @@ -7803,7 +8055,7 @@ msgid "\"3\"" msgstr "" #: src/memory-management/exercise.md:60 src/memory-management/solution.md:64 -msgid "/// Add an additional dependency." +msgid "/// Add an additional dependency.\n" msgstr "" #: src/memory-management/exercise.md:62 @@ -7811,7 +8063,7 @@ msgid "\"4\"" msgstr "" #: src/memory-management/exercise.md:65 src/memory-management/solution.md:70 -msgid "/// Set the language. If not set, language defaults to None." +msgid "/// Set the language. If not set, language defaults to None.\n" msgstr "" #: src/memory-management/exercise.md:67 @@ -7871,7 +8123,9 @@ msgid "Rc" msgstr "Rc" #: src/smart-pointers/box.md:3 -msgid "`Box` is an owned pointer to data on the heap:" +msgid "" +"[`Box`](https://doc.rust-lang.org/std/boxed/struct.Box.html) is an owned " +"pointer to data on the heap:" msgstr "" #: src/smart-pointers/box.md:9 @@ -7880,8 +8134,9 @@ msgstr "" #: src/smart-pointers/box.md:26 msgid "" -"`Box` implements `Deref`, which means that you can call " -"methods from `T` directly on a `Box`." +"`Box` implements `Deref`, which means that you can [call " +"methods from `T` directly on a `Box`](https://doc.rust-lang.org/std/ops/" +"trait.Deref.html#more-on-deref-coercion)." msgstr "" #: src/smart-pointers/box.md:30 @@ -7890,11 +8145,11 @@ msgid "" msgstr "" #: src/smart-pointers/box.md:35 -msgid "/// A non-empty list: first element and the rest of the list." +msgid "/// A non-empty list: first element and the rest of the list.\n" msgstr "" #: src/smart-pointers/box.md:37 -msgid "/// An empty list." +msgid "/// An empty list.\n" msgstr "" #: src/smart-pointers/box.md:44 @@ -7982,7 +8237,8 @@ msgstr "" msgid "" "For example, `Option>` has the same size, as just `Box`, because " "compiler uses NULL-value to discriminate variants instead of using explicit " -"tag (\"Null Pointer Optimization\"):" +"tag ([\"Null Pointer Optimization\"](https://doc.rust-lang.org/std/option/" +"#representation)):" msgstr "" #: src/smart-pointers/box.md:103 @@ -8008,8 +8264,9 @@ msgstr "" #: src/smart-pointers/rc.md:3 msgid "" -"`Rc` is a reference-counted shared pointer. Use this when you need to refer " -"to the same data from multiple places:" +"[`Rc`](https://doc.rust-lang.org/std/rc/struct.Rc.html) is a reference-" +"counted shared pointer. Use this when you need to refer to the same data " +"from multiple places:" msgstr "" #: src/smart-pointers/rc.md:13 @@ -8021,13 +8278,16 @@ msgid "\"b: {b}\"" msgstr "" #: src/smart-pointers/rc.md:18 -msgid "See `Arc` and `Mutex` if you are in a multi-threaded context." +msgid "" +"See [`Arc`](../concurrency/shared-state/arc.md) and [`Mutex`](https://doc." +"rust-lang.org/std/sync/struct.Mutex.html) if you are in a multi-threaded " +"context." msgstr "" #: src/smart-pointers/rc.md:19 msgid "" -"You can _downgrade_ a shared pointer into a `Weak` pointer to create cycles " -"that will get dropped." +"You can _downgrade_ a shared pointer into a [`Weak`](https://doc.rust-lang." +"org/std/rc/struct.Weak.html) pointer to create cycles that will get dropped." msgstr "" #: src/smart-pointers/rc.md:30 @@ -8155,8 +8415,9 @@ msgstr "" #: src/smart-pointers/trait-objects.md:86 msgid "" "A fat pointer is a double-width pointer. It has two components: a pointer to " -"the actual object and a pointer to the virtual method table (vtable) for the " -"`Pet` implementation of that particular object." +"the actual object and a pointer to the [virtual method table](https://en." +"wikipedia.org/wiki/Virtual_method_table) (vtable) for the `Pet` " +"implementation of that particular object." msgstr "" #: src/smart-pointers/trait-objects.md:89 @@ -8188,25 +8449,26 @@ msgid "" msgstr "" #: src/smart-pointers/exercise.md:14 src/smart-pointers/solution.md:5 -msgid "/// A node in the binary tree." +msgid "/// A node in the binary tree.\n" msgstr "" #: src/smart-pointers/exercise.md:21 src/smart-pointers/solution.md:13 -msgid "/// A possibly-empty subtree." +msgid "/// A possibly-empty subtree.\n" msgstr "" #: src/smart-pointers/exercise.md:25 src/smart-pointers/solution.md:17 msgid "" -"/// A container storing a set of values, using a binary tree. /// /// If the " -"same value is added multiple times, it is only stored once." +"/// A container storing a set of values, using a binary tree.\n" +"///\n" +"/// If the same value is added multiple times, it is only stored once.\n" msgstr "" #: src/smart-pointers/exercise.md:51 -msgid "// Implement `new`, `insert`, `len`, and `has` for `Subtree`." +msgid "// Implement `new`, `insert`, `len`, and `has` for `Subtree`.\n" msgstr "" #: src/smart-pointers/exercise.md:66 src/smart-pointers/solution.md:105 -msgid "// not a unique item" +msgid "// not a unique item\n" msgstr "" #: src/smart-pointers/solution.md:89 src/android/testing/googletest.md:11 @@ -8247,10 +8509,12 @@ msgstr "" msgid "" "Demonstrate that the return from `add` is cheap because the compiler can " "eliminate the copy operation, by inlining the call to add into main. Change " -"the above code to print stack addresses and run it on the Playground or look " -"at the assembly in Godbolt. In the \"DEBUG\" optimization level, the " -"addresses should change, while they stay the same when changing to the " -"\"RELEASE\" setting:" +"the above code to print stack addresses and run it on the [Playground]" +"(https://play.rust-lang.org/?" +"version=stable&mode=release&edition=2021&gist=0cb13be1c05d7e3446686ad9947c4671) " +"or look at the assembly in [Godbolt](https://rust.godbolt.org/). In the " +"\"DEBUG\" optimization level, the addresses should change, while they stay " +"the same when changing to the \"RELEASE\" setting:" msgstr "" #: src/borrowing/shared.md:63 @@ -8364,13 +8628,14 @@ msgstr "" #: src/borrowing/interior-mutability.md:17 #: src/borrowing/interior-mutability.md:43 -msgid "// Note that `cell` is NOT declared as mutable." +msgid "// Note that `cell` is NOT declared as mutable.\n" msgstr "" #: src/borrowing/interior-mutability.md:24 msgid "" -"// This triggers an error at runtime. // let other = cell.borrow(); // " -"println!(\"{}\", \\*other);" +"// This triggers an error at runtime.\n" +" // let other = cell.borrow();\n" +" // println!(\"{}\", *other);\n" msgstr "" #: src/borrowing/interior-mutability.md:29 @@ -8417,6 +8682,13 @@ msgid "" "have its own cost." msgstr "" +#: src/borrowing/interior-mutability.md:71 +msgid "" +"Both `RefCell` and `Cell` are `!Sync`, which means `&RefCell` and `&Cell` " +"can't be passed between threads. This prevents two threads trying to access " +"the cell at once." +msgstr "" + #: src/borrowing/exercise.md:3 msgid "" "You're working on implementing a health-monitoring system. As part of that, " @@ -8433,7 +8705,7 @@ msgstr "" #: src/borrowing/exercise.md:10 #, fuzzy msgid "" -"Copy the code below to https://play.rust-lang.org/ and fill in the missing " +"Copy the code below to and fill in the missing " "method:" msgstr "" "کد زیر را در کپی کرده و " @@ -8485,7 +8757,7 @@ msgid "" msgstr "" #: src/lifetimes/lifetime-annotations.md:36 -msgid "// What is the lifetime of p3?" +msgid "// What is the lifetime of p3?\n" msgstr "" #: src/lifetimes/lifetime-annotations.md:37 @@ -8523,8 +8795,9 @@ msgstr "طول عمر در فراخوانی‌ توابع" #: src/lifetimes/lifetime-elision.md:3 msgid "" "Lifetimes for function arguments and return values must be fully specified, " -"but Rust allows lifetimes to be elided in most cases with a few simple " -"rules. This is not inference -- it is just a syntactic shorthand." +"but Rust allows lifetimes to be elided in most cases with [a few simple " +"rules](https://doc.rust-lang.org/nomicon/lifetime-elision.html). This is not " +"inference -- it is just a syntactic shorthand." msgstr "" #: src/lifetimes/lifetime-elision.md:8 @@ -8591,7 +8864,7 @@ msgid "\"The quick brown fox jumps over the lazy dog.\"" msgstr "" #: src/lifetimes/struct-lifetimes.md:17 -msgid "// erase(text);" +msgid "// erase(text);\n" msgstr "" #: src/lifetimes/struct-lifetimes.md:18 @@ -8636,9 +8909,10 @@ msgstr "" #: src/lifetimes/exercise.md:3 msgid "" -"In this exercise, you will build a parser for the protobuf binary encoding. " -"Don't worry, it's simpler than it seems! This illustrates a common parsing " -"pattern, passing slices of data. The underlying data itself is never copied." +"In this exercise, you will build a parser for the [protobuf binary encoding]" +"(https://protobuf.dev/programming-guides/encoding/). Don't worry, it's " +"simpler than it seems! This illustrates a common parsing pattern, passing " +"slices of data. The underlying data itself is never copied." msgstr "" #: src/lifetimes/exercise.md:8 @@ -8675,120 +8949,146 @@ msgid "" "`ProtoMessage` trait for `Person` and `PhoneNumber`." msgstr "" -#: src/lifetimes/exercise.md:49 src/lifetimes/solution.md:11 -msgid "\"Invalid varint\"" +#: src/lifetimes/exercise.md:44 src/lifetimes/solution.md:4 +msgid "/// A wire type as seen on the wire.\n" msgstr "" -#: src/lifetimes/exercise.md:51 src/lifetimes/solution.md:13 -msgid "\"Invalid wire-type\"" +#: src/lifetimes/exercise.md:46 src/lifetimes/solution.md:6 +msgid "/// The Varint WireType indicates the value is a single VARINT.\n" msgstr "" -#: src/lifetimes/exercise.md:53 src/lifetimes/solution.md:15 -msgid "\"Unexpected EOF\"" +#: src/lifetimes/exercise.md:48 src/lifetimes/solution.md:8 +msgid "" +"//I64, -- not needed for this exercise\n" +" /// The Len WireType indicates that the value is a length represented as " +"a\n" +" /// VARINT followed by exactly that number of bytes.\n" msgstr "" -#: src/lifetimes/exercise.md:55 src/lifetimes/solution.md:17 -msgid "\"Invalid length\"" +#: src/lifetimes/exercise.md:52 src/lifetimes/solution.md:12 +msgid "" +"/// The I32 WireType indicates that the value is precisely 4 bytes in\n" +" /// little-endian order containing a 32-bit signed integer.\n" msgstr "" -#: src/lifetimes/exercise.md:57 src/lifetimes/solution.md:19 -msgid "\"Unexpected wire-type)\"" +#: src/lifetimes/exercise.md:57 src/lifetimes/solution.md:17 +msgid "/// A field's value, typed based on the wire type.\n" msgstr "" -#: src/lifetimes/exercise.md:59 src/lifetimes/solution.md:21 -msgid "\"Invalid string (not UTF-8)\"" +#: src/lifetimes/exercise.md:61 src/lifetimes/solution.md:21 +msgid "//I64(i64), -- not needed for this exercise\n" msgstr "" -#: src/lifetimes/exercise.md:62 src/lifetimes/solution.md:24 -msgid "/// A wire type as seen on the wire." +#: src/lifetimes/exercise.md:66 src/lifetimes/solution.md:26 +msgid "/// A field, containing the field number and its value.\n" msgstr "" -#: src/lifetimes/exercise.md:65 src/lifetimes/solution.md:27 -msgid "/// The Varint WireType indicates the value is a single VARINT." +#: src/lifetimes/exercise.md:81 src/lifetimes/solution.md:41 +msgid "//1 => WireType::I64, -- not needed for this exercise\n" msgstr "" -#: src/lifetimes/exercise.md:67 src/lifetimes/solution.md:29 -msgid "" -"//I64, -- not needed for this exercise /// The Len WireType indicates that " -"the value is a length represented as a /// VARINT followed by exactly that " -"number of bytes." +#: src/lifetimes/exercise.md:84 src/lifetimes/solution.md:44 +msgid "\"Invalid wire type: {value}\"" msgstr "" -#: src/lifetimes/exercise.md:71 src/lifetimes/solution.md:33 -msgid "" -"/// The I32 WireType indicates that the value is precisely 4 bytes in /// " -"little-endian order containing a 32-bit signed integer." +#: src/lifetimes/exercise.md:92 src/lifetimes/solution.md:52 +msgid "\"Expected string to be a `Len` field\"" msgstr "" -#: src/lifetimes/exercise.md:76 src/lifetimes/solution.md:38 -msgid "/// A field's value, typed based on the wire type." +#: src/lifetimes/exercise.md:94 src/lifetimes/solution.md:54 +#, fuzzy +msgid "\"Invalid string\"" +msgstr "String" + +#: src/lifetimes/exercise.md:99 src/lifetimes/solution.md:59 +msgid "\"Expected bytes to be a `Len` field\"" msgstr "" -#: src/lifetimes/exercise.md:80 src/lifetimes/solution.md:42 -msgid "//I64(i64), -- not needed for this exercise" +#: src/lifetimes/exercise.md:106 src/lifetimes/solution.md:66 +msgid "\"Expected `u64` to be a `Varint` field\"" msgstr "" -#: src/lifetimes/exercise.md:85 src/lifetimes/solution.md:47 -msgid "/// A field, containing the field number and its value." +#: src/lifetimes/exercise.md:114 src/lifetimes/solution.md:74 +msgid "\"Expected `i32` to be an `I32` field\"" msgstr "" -#: src/lifetimes/exercise.md:102 src/lifetimes/solution.md:64 -msgid "//1 => WireType::I64, -- not needed for this exercise" +#: src/lifetimes/exercise.md:119 src/lifetimes/solution.md:79 +msgid "" +"/// Parse a VARINT, returning the parsed value and the remaining bytes.\n" msgstr "" -#: src/lifetimes/exercise.md:132 src/lifetimes/solution.md:94 -msgid "/// Parse a VARINT, returning the parsed value and the remaining bytes." +#: src/lifetimes/exercise.md:124 src/lifetimes/solution.md:84 +msgid "\"Not enough bytes for varint\"" msgstr "" -#: src/lifetimes/exercise.md:140 src/lifetimes/solution.md:102 +#: src/lifetimes/exercise.md:127 src/lifetimes/solution.md:87 msgid "" -"// This is the last byte of the VARINT, so convert it to // a u64 and return " -"it." +"// This is the last byte of the VARINT, so convert it to\n" +" // a u64 and return it.\n" +msgstr "" + +#: src/lifetimes/exercise.md:137 src/lifetimes/solution.md:97 +msgid "// More than 7 bytes is invalid.\n" msgstr "" -#: src/lifetimes/exercise.md:150 src/lifetimes/solution.md:112 -msgid "// More than 7 bytes is invalid." +#: src/lifetimes/exercise.md:138 src/lifetimes/solution.md:98 +msgid "\"Too many bytes for varint\"" msgstr "" -#: src/lifetimes/exercise.md:153 src/lifetimes/solution.md:115 -msgid "/// Convert a tag into a field number and a WireType." +#: src/lifetimes/exercise.md:140 src/lifetimes/solution.md:100 +msgid "/// Convert a tag into a field number and a WireType.\n" msgstr "" -#: src/lifetimes/exercise.md:161 src/lifetimes/solution.md:122 -msgid "/// Parse a field, returning the remaining bytes" +#: src/lifetimes/exercise.md:148 src/lifetimes/solution.md:107 +msgid "/// Parse a field, returning the remaining bytes\n" msgstr "" -#: src/lifetimes/exercise.md:167 +#: src/lifetimes/exercise.md:154 msgid "" "\"Based on the wire type, build a Field, consuming as many bytes as " "necessary.\"" msgstr "" -#: src/lifetimes/exercise.md:169 +#: src/lifetimes/exercise.md:156 msgid "\"Return the field, and any un-consumed bytes.\"" msgstr "" -#: src/lifetimes/exercise.md:171 src/lifetimes/solution.md:153 +#: src/lifetimes/exercise.md:158 src/lifetimes/solution.md:138 msgid "" "/// Parse a message in the given data, calling `T::add_field` for each field " -"in /// the message. /// /// The entire input is consumed." +"in\n" +"/// the message.\n" +"///\n" +"/// The entire input is consumed.\n" +msgstr "" + +#: src/lifetimes/exercise.md:185 +msgid "// TODO: Implement ProtoMessage for Person and PhoneNumber.\n" +msgstr "" + +#: src/lifetimes/exercise.md:204 +msgid "" +"In this exercise there are various cases where protobuf parsing might fail, " +"e.g. if you try to parse an `i32` when there are fewer than 4 bytes left in " +"the data buffer. In normal Rust code we'd handle this with the `Result` " +"enum, but for simplicity in this exercise we panic if any errors are " +"encountered. On day 4 we'll cover error handling in Rust in more detail." msgstr "" -#: src/lifetimes/exercise.md:198 -msgid "// TODO: Implement ProtoMessage for Person and PhoneNumber." +#: src/lifetimes/solution.md:119 +msgid "\"len not a valid `usize`\"" msgstr "" -#: src/lifetimes/solution.md:146 -msgid "// Unwrap error because `value` is definitely 4 bytes long." +#: src/lifetimes/solution.md:121 src/lifetimes/solution.md:128 +msgid "\"Unexpected EOF\"" msgstr "" -#: src/lifetimes/solution.md:187 src/lifetimes/solution.md:198 -msgid "// skip everything else" +#: src/lifetimes/solution.md:131 +msgid "// Unwrap error because `value` is definitely 4 bytes long.\n" msgstr "" -#: src/lifetimes/solution.md:225 src/lifetimes/solution.md:232 -#: src/lifetimes/solution.md:239 -msgid "b\"hello\"" +#: src/lifetimes/solution.md:172 src/lifetimes/solution.md:182 +msgid "// skip everything else\n" msgstr "" #: src/welcome-day-4.md @@ -8845,9 +9145,10 @@ msgstr "FromIterator" #: src/iterators/iterator.md:3 msgid "" -"The `Iterator` trait supports iterating over values in a collection. It " -"requires a `next` method and provides lots of methods. Many standard library " -"types implement `Iterator`, and you can implement it yourself, too:" +"The [`Iterator`](https://doc.rust-lang.org/std/iter/trait.Iterator.html) " +"trait supports iterating over values in a collection. It requires a `next` " +"method and provides lots of methods. Many standard library types implement " +"`Iterator`, and you can implement it yourself, too:" msgstr "" #: src/iterators/iterator.md:27 @@ -8874,8 +9175,9 @@ msgstr "" #: src/iterators/intoiterator.md:3 msgid "" "The `Iterator` trait tells you how to _iterate_ once you have created an " -"iterator. The related trait `IntoIterator` defines how to create an iterator " -"for a type. It is used automatically by the `for` loop." +"iterator. The related trait [`IntoIterator`](https://doc.rust-lang.org/std/" +"iter/trait.IntoIterator.html) defines how to create an iterator for a type. " +"It is used automatically by the `for` loop." msgstr "" #: src/iterators/intoiterator.md:49 @@ -8927,7 +9229,10 @@ msgid "" msgstr "" #: src/iterators/fromiterator.md:3 -msgid "`FromIterator` lets you build a collection from an `Iterator`." +msgid "" +"[`FromIterator`](https://doc.rust-lang.org/std/iter/trait.FromIterator.html) " +"lets you build a collection from an [`Iterator`](https://doc.rust-lang.org/" +"std/iter/trait.Iterator.html)." msgstr "" #: src/iterators/fromiterator.md:9 @@ -8965,12 +9270,13 @@ msgstr "" #: src/iterators/exercise.md:3 msgid "" "In this exercise, you will need to find and use some of the provided methods " -"in the `Iterator` trait to implement a complex calculation." +"in the [`Iterator`](https://doc.rust-lang.org/std/iter/trait.Iterator.html) " +"trait to implement a complex calculation." msgstr "" #: src/iterators/exercise.md:6 msgid "" -"Copy the following code to https://play.rust-lang.org/ and make the tests " +"Copy the following code to and make the tests " "pass. Use an iterator expression and `collect` the result to construct the " "return value." msgstr "" @@ -8978,9 +9284,10 @@ msgstr "" #: src/iterators/exercise.md:11 src/iterators/solution.md:4 msgid "" "/// Calculate the differences between elements of `values` offset by " -"`offset`, /// wrapping around from the end of `values` to the " -"beginning. /// /// Element `n` of the result is `values[(n+offset)%len] - " -"values[n]`." +"`offset`,\n" +"/// wrapping around from the end of `values` to the beginning.\n" +"///\n" +"/// Element `n` of the result is `values[(n+offset)%len] - values[n]`.\n" msgstr "" #: src/modules.md src/modules/paths.md:1 @@ -9053,19 +9360,20 @@ msgstr "" #: src/modules/filesystem.md:22 msgid "" "//! This module implements the garden, including a highly performant " -"germination //! implementation." +"germination\n" +"//! implementation.\n" msgstr "" #: src/modules/filesystem.md:24 -msgid "// Re-export types from this module." +msgid "// Re-export types from this module.\n" msgstr "" #: src/modules/filesystem.md:28 -msgid "/// Sow the given seed packets." +msgid "/// Sow the given seed packets.\n" msgstr "" #: src/modules/filesystem.md:33 -msgid "/// Harvest the produce in the garden that is ready." +msgid "/// Harvest the produce in the garden that is ready.\n" msgstr "" #: src/modules/filesystem.md:43 @@ -9145,9 +9453,10 @@ msgid "" msgstr "" #: src/modules/visibility.md:45 -#, fuzzy -msgid "See the Rust Reference." -msgstr "مراجع" +msgid "" +"See the [Rust Reference](https://doc.rust-lang.org/reference/visibility-and-" +"privacy.html#pubin-path-pubcrate-pubsuper-and-pubself)." +msgstr "" #: src/modules/visibility.md:47 msgid "Configuring `pub(crate)` visibility is a common pattern." @@ -9268,15 +9577,15 @@ msgid "Here's the single-module implementation of the GUI library:" msgstr "" #: src/modules/exercise.md:30 src/modules/solution.md:36 -msgid "/// Natural width of `self`." +msgid "/// Natural width of `self`.\n" msgstr "" #: src/modules/exercise.md:33 src/modules/solution.md:39 -msgid "/// Draw the widget into a buffer." +msgid "/// Draw the widget into a buffer.\n" msgstr "" #: src/modules/exercise.md:36 src/modules/solution.md:42 -msgid "/// Draw the widget on standard output." +msgid "/// Draw the widget on standard output.\n" msgstr "" #: src/modules/exercise.md:40 src/modules/solution.md:46 @@ -9284,18 +9593,19 @@ msgid "\"{buffer}\"" msgstr "" #: src/modules/exercise.md:88 -msgid "// Add 4 paddings for borders" +msgid "// Add 4 paddings for borders\n" msgstr "" #: src/modules/exercise.md:100 msgid "" -"// TODO: Change draw_into to return Result\\<(), std::fmt::Error>. Then use " -"the // ?-operator here instead of .unwrap()." +"// TODO: Change draw_into to return Result<(), std::fmt::Error>. Then use " +"the\n" +" // ?-operator here instead of .unwrap().\n" msgstr "" #: src/modules/exercise.md:102 src/modules/exercise.md:108 #: src/modules/solution.md:165 src/modules/solution.md:171 -msgid "\"+-{:-\\. Then use // the ?-operator here " -"instead of .unwrap()." +"// TODO: after learning about error handling, you can change\n" +" // draw_into to return Result<(), std::fmt::Error>. Then use\n" +" // the ?-operator here instead of .unwrap().\n" msgstr "" #: src/modules/solution.md:177 -msgid "// ---- src/main.rs ----" +msgid "// ---- src/main.rs ----\n" msgstr "" #: src/testing/unit-tests.md:1 @@ -9467,7 +9779,7 @@ msgid "Create a `.rs` file under `tests/`:" msgstr "" #: src/testing/other.md:10 -msgid "// tests/my_library.rs" +msgid "// tests/my_library.rs\n" msgstr "" #: src/testing/other.md:19 @@ -9484,10 +9796,13 @@ msgstr "" #: src/testing/other.md:26 msgid "" -"/// Shortens a string to the given length. /// /// `/// # use playground::" -"shorten_string; /// assert_eq!(shorten_string(\"Hello World\", 5), " -"\"Hello\"); /// assert_eq!(shorten_string(\"Hello World\", 20), \"Hello " -"World\"); ///`" +"/// Shortens a string to the given length.\n" +"///\n" +"/// ```\n" +"/// # use playground::shorten_string;\n" +"/// assert_eq!(shorten_string(\"Hello World\", 5), \"Hello\");\n" +"/// assert_eq!(shorten_string(\"Hello World\", 20), \"Hello World\");\n" +"/// ```\n" msgstr "" #: src/testing/other.md:38 @@ -9505,15 +9820,16 @@ msgid "" msgstr "" #: src/testing/other.md:42 -#, fuzzy -msgid "Test the above code on the Rust Playground." -msgstr "در غیر این صورت از `Rust Playground` استفاده کنید." +msgid "" +"Test the above code on the [Rust Playground](https://play.rust-lang.org/?" +"version=stable&mode=debug&edition=2021&gist=3ce2ad13ea1302f6572cb15cd96becf0)." +msgstr "" #: src/testing/lints.md:3 msgid "" "The Rust compiler produces fantastic error messages, as well as helpful " -"built-in lints. Clippy provides even more lints, organized into groups that " -"can be enabled per-project." +"built-in lints. [Clippy](https://doc.rust-lang.org/clippy/) provides even " +"more lints, organized into groups that can be enabled per-project." msgstr "" #: src/testing/lints.md:14 @@ -9545,11 +9861,10 @@ msgid "Luhn Algorithm" msgstr "الگوریتم Luhn" #: src/testing/exercise.md:5 -#, fuzzy msgid "" -"The Luhn algorithm is used to validate credit card numbers. The algorithm " -"takes a string as input and does the following to validate the credit card " -"number:" +"The [Luhn algorithm](https://en.wikipedia.org/wiki/Luhn_algorithm) is used " +"to validate credit card numbers. The algorithm takes a string as input and " +"does the following to validate the credit card number:" msgstr "" "[الگوریتم Luhn](https://en.wikipedia.org/wiki/Luhn_algorithm) برای " "اعتبارسنجی شماره‌های کارت اعتباری استفاده می‌شود. این الگوریتم یک رشته را به " @@ -9558,7 +9873,7 @@ msgstr "" #: src/testing/exercise.md:9 #, fuzzy -msgid "Ignore all spaces. Reject number with fewer than two digits." +msgid "Ignore all spaces. Reject numbers with fewer than two digits." msgstr "تمام فضاها را نادیده بگیرید.شماره‌هایی با کمتر از دو رقم را رد کنید." #: src/testing/exercise.md:11 @@ -9590,14 +9905,14 @@ msgstr "اگر مجموع با ‍`0` خاتمه یابد، شماره کارت #: src/testing/exercise.md:21 msgid "" "The provided code provides a buggy implementation of the luhn algorithm, " -"along with two basic unit tests that confirm that most the algorithm is " +"along with two basic unit tests that confirm that most of the algorithm is " "implemented correctly." msgstr "" #: src/testing/exercise.md:25 #, fuzzy msgid "" -"Copy the code below to https://play.rust-lang.org/ and write additional " +"Copy the code below to and write additional " "tests to uncover bugs in the provided implementation, fixing any bugs you " "find." msgstr "" @@ -9629,11 +9944,11 @@ msgid "\"8273 1232 7352 0569\"" msgstr "" #: src/testing/solution.md:4 -msgid "// This is the buggy version that appears in the problem." +msgid "// This is the buggy version that appears in the problem.\n" msgstr "" #: src/testing/solution.md:27 -msgid "// This is the solution and passes all of the tests below." +msgid "// This is the solution and passes all of the tests below.\n" msgstr "" #: src/testing/solution.md:56 @@ -9676,6 +9991,15 @@ msgstr "" msgid "\" 0 0 \"" msgstr "" +#: src/welcome-day-4-afternoon.md +#, fuzzy +msgid "" +"Including 10 minute breaks, this session should take about 2 hours and 15 " +"minutes. It contains:" +msgstr "" +"با احتساب 10 دقیقه استراحت، این جلسه باید حدود 2 ساعت و 5 دقیقه طول بکشد. آن " +"شامل:" + #: src/error-handling.md #, fuzzy msgid "Error Trait" @@ -9698,7 +10022,7 @@ msgid "Rust will trigger a panic if a fatal error happens at runtime:" msgstr "" #: src/error-handling/panics.md:10 -msgid "\"v\\[100\\]: {}\"" +msgid "\"v[100]: {}\"" msgstr "" #: src/error-handling/panics.md:14 @@ -9766,6 +10090,79 @@ msgstr "" msgid "This does not work if `panic = 'abort'` is set in your `Cargo.toml`." msgstr "" +#: src/error-handling/result.md:3 +msgid "" +"Our primary mechanism for error handling in Rust is the [`Result`](https://" +"doc.rust-lang.org/stable/std/result/enum.Result.html) enum, which we briefly " +"saw when discussing standard library types." +msgstr "" + +#: src/error-handling/result.md:33 +msgid "" +"`Result` has two variants: `Ok` which contains the success value, and `Err` " +"which contains an error value of some kind." +msgstr "" + +#: src/error-handling/result.md:36 +msgid "" +"Whether or not a function can produce an error is encoded in the function's " +"type signature by having the function return a `Result` value." +msgstr "" + +#: src/error-handling/result.md:39 +msgid "" +"Like with `Option`, there is no way to forget to handle an error: You cannot " +"access either the success value or the error value without first pattern " +"matching on the `Result` to check which variant you have. Methods like " +"`unwrap` make it easier to write quick-and-dirty code that doesn't do robust " +"error handling, but means that you can always see in your source code where " +"proper error handling is being skipped." +msgstr "" + +#: src/error-handling/result.md:48 +msgid "" +"It may be helpful to compare error handling in Rust to error handling " +"conventions that students may be familiar with from other programming " +"languages." +msgstr "" + +#: src/error-handling/result.md:53 +msgid "Many languages use exceptions, e.g. C++, Java, Python." +msgstr "" + +#: src/error-handling/result.md:55 +msgid "" +"In most languages with exceptions, whether or not a function can throw an " +"exception is not visible as part of its type signature. This generally means " +"that you can't tell when calling a function if it may throw an exception or " +"not." +msgstr "" + +#: src/error-handling/result.md:60 +msgid "" +"Exceptions generally unwind the call stack, propagating upward until a `try` " +"block is reached. An error originating deep in the call stack may impact an " +"unrelated function further up." +msgstr "" + +#: src/error-handling/result.md:64 +msgid "Error Numbers" +msgstr "" + +#: src/error-handling/result.md:66 +msgid "" +"Some languages have functions return an error number (or some other error " +"value) separately from the successful return value of the function. Examples " +"include C and Go." +msgstr "" + +#: src/error-handling/result.md:70 +msgid "" +"Depending on the language it may be possible to forget to check the error " +"value, in which case you may be accessing an uninitialized or otherwise " +"invalid success value." +msgstr "" + #: src/error-handling/try.md:3 msgid "" "Runtime errors like connection-refused or file-not-found are handled with " @@ -9783,7 +10180,7 @@ msgid "We can use this to simplify our error handling code:" msgstr "" #: src/error-handling/try.md:42 -msgid "//fs::write(\"config.dat\", \"alice\").unwrap();" +msgid "//fs::write(\"config.dat\", \"alice\").unwrap();\n" msgstr "" #: src/error-handling/try.md:43 src/error-handling/try-conversions.md:65 @@ -9843,7 +10240,7 @@ msgid "\"Found no username in {path}\"" msgstr "" #: src/error-handling/try-conversions.md:64 -msgid "//std::fs::write(\"config.dat\", \"\").unwrap();" +msgid "//std::fs::write(\"config.dat\", \"\").unwrap();\n" msgstr "" #: src/error-handling/try-conversions.md:73 @@ -9923,13 +10320,14 @@ msgid "" "Make sure to implement the `std::error::Error` trait when defining a custom " "error type so it can be boxed. But if you need to support the `no_std` " "attribute, keep in mind that the `std::error::Error` trait is currently " -"compatible with `no_std` in nightly only." +"compatible with `no_std` in [nightly](https://github.com/rust-lang/rust/" +"issues/103765) only." msgstr "" #: src/error-handling/thiserror-and-anyhow.md:3 msgid "" -"The `thiserror` and `anyhow` crates are widely used to simplify error " -"handling." +"The [`thiserror`](https://docs.rs/thiserror/) and [`anyhow`](https://docs.rs/" +"anyhow/) crates are widely used to simplify error handling." msgstr "" #: src/error-handling/thiserror-and-anyhow.md:7 @@ -9957,7 +10355,7 @@ msgid "\"Failed to read\"" msgstr "" #: src/error-handling/thiserror-and-anyhow.md:35 -msgid "//fs::write(\"config.dat\", \"\").unwrap();" +msgid "//fs::write(\"config.dat\", \"\").unwrap();\n" msgstr "" #: src/error-handling/thiserror-and-anyhow.md:37 @@ -10036,32 +10434,32 @@ msgid "" msgstr "" #: src/error-handling/exercise.md:15 src/error-handling/solution.md:9 -msgid "/// An arithmetic operator." +msgid "/// An arithmetic operator.\n" msgstr "" #: src/error-handling/exercise.md:22 src/error-handling/solution.md:16 -msgid "/// A token in the expression language." +msgid "/// A token in the expression language.\n" msgstr "" #: src/error-handling/exercise.md:30 src/error-handling/solution.md:24 -msgid "/// An expression in the expression language." +msgid "/// An expression in the expression language.\n" msgstr "" #: src/error-handling/exercise.md:34 src/error-handling/solution.md:28 -msgid "/// A reference to a variable." +msgid "/// A reference to a variable.\n" msgstr "" #: src/error-handling/exercise.md:36 src/error-handling/solution.md:30 -msgid "/// A literal number." +msgid "/// A literal number.\n" msgstr "" #: src/error-handling/exercise.md:38 src/error-handling/solution.md:32 -msgid "/// A binary operation." +msgid "/// A binary operation.\n" msgstr "" #: src/error-handling/exercise.md:60 src/error-handling/solution.md:60 #: src/error-handling/solution.md:75 -msgid "'\\_'" +msgid "'_'" msgstr "" #: src/error-handling/exercise.md:76 src/error-handling/solution.md:76 @@ -10089,7 +10487,7 @@ msgid "\"Unexpected token {tok:?}\"" msgstr "" #: src/error-handling/exercise.md:98 src/error-handling/solution.md:110 -msgid "// Look ahead to parse a binary operation if present." +msgid "// Look ahead to parse a binary operation if present.\n" msgstr "" #: src/error-handling/exercise.md:114 src/error-handling/solution.md:127 @@ -10173,7 +10571,8 @@ msgstr "" #: src/unsafe-rust/unsafe.md:22 msgid "" "We will briefly cover unsafe capabilities next. For full details, please see " -"Chapter 19.1 in the Rust Book and the Rustonomicon." +"[Chapter 19.1 in the Rust Book](https://doc.rust-lang.org/book/ch19-01-" +"unsafe-rust.html) and the [Rustonomicon](https://doc.rust-lang.org/nomicon/)." msgstr "" #: src/unsafe-rust/unsafe.md:29 @@ -10194,11 +10593,12 @@ msgstr "" #: src/unsafe-rust/dereferencing.md:12 msgid "" -"// SAFETY: r1 and r2 were obtained from references and so are guaranteed " -"to // be non-null and properly aligned, the objects underlying the " -"references // from which they were obtained are live throughout the whole " -"unsafe // block, and they are not accessed either through the references " -"or // concurrently through any other pointers." +"// SAFETY: r1 and r2 were obtained from references and so are guaranteed to\n" +" // be non-null and properly aligned, the objects underlying the " +"references\n" +" // from which they were obtained are live throughout the whole unsafe\n" +" // block, and they are not accessed either through the references or\n" +" // concurrently through any other pointers.\n" msgstr "" #: src/unsafe-rust/dereferencing.md:18 @@ -10215,8 +10615,12 @@ msgstr "" #: src/unsafe-rust/dereferencing.md:23 msgid "" -"// NOT SAFE. DO NOT DO THIS. /\\* let r3: &String = unsafe { &\\*r1 }; " -"drop(s); println!(\"r3 is: {}\", \\*r3); \\*/" +"// NOT SAFE. DO NOT DO THIS.\n" +" /*\n" +" let r3: &String = unsafe { &*r1 };\n" +" drop(s);\n" +" println!(\"r3 is: {}\", *r3);\n" +" */" msgstr "" #: src/unsafe-rust/dereferencing.md:35 @@ -10229,7 +10633,7 @@ msgstr "" #: src/unsafe-rust/dereferencing.md:39 msgid "" "In the case of pointer dereferences, this means that the pointers must be " -"_valid_, i.e.:" +"[_valid_](https://doc.rust-lang.org/std/ptr/index.html#safety), i.e.:" msgstr "" #: src/unsafe-rust/dereferencing.md:42 @@ -10288,7 +10692,7 @@ msgstr "" #: src/unsafe-rust/mutable-static.md:20 src/unsafe-rust/mutable-static.md:29 msgid "" -"// SAFETY: There are no other threads which could be accessing `COUNTER`." +"// SAFETY: There are no other threads which could be accessing `COUNTER`.\n" msgstr "" #: src/unsafe-rust/mutable-static.md:31 @@ -10324,7 +10728,7 @@ msgstr "" #: src/unsafe-rust/unions.md:15 #, fuzzy -msgid "// Undefined behavior!" +msgid "// Undefined behavior!\n" msgstr "هیچ رفتار تعریف نشده‌ای در زمان اجرا:" #: src/unsafe-rust/unions.md:22 @@ -10336,7 +10740,9 @@ msgstr "" #: src/unsafe-rust/unions.md:25 msgid "" "If you just want to reinterpret bytes as a different type, you probably want " -"`std::mem::transmute` or a safe wrapper such as the `zerocopy` crate." +"[`std::mem::transmute`](https://doc.rust-lang.org/stable/std/mem/fn." +"transmute.html) or a safe wrapper such as the [`zerocopy`](https://crates.io/" +"crates/zerocopy) crate." msgstr "" #: src/unsafe-rust/unsafe-functions.md:3 src/unsafe-rust/unsafe-functions.md:76 @@ -10370,8 +10776,8 @@ msgstr "" #: src/unsafe-rust/unsafe-functions.md:16 msgid "" -"// SAFETY: The indices are in the correct order, within the bounds of the // " -"string slice, and lie on UTF-8 sequence boundaries." +"// SAFETY: The indices are in the correct order, within the bounds of the\n" +" // string slice, and lie on UTF-8 sequence boundaries.\n" msgstr "" #: src/unsafe-rust/unsafe-functions.md:19 @@ -10386,8 +10792,8 @@ msgstr "" #: src/unsafe-rust/unsafe-functions.md:26 msgid "" -"// SAFETY: `abs` doesn't deal with pointers and doesn't have any safety // " -"requirements." +"// SAFETY: `abs` doesn't deal with pointers and doesn't have any safety\n" +" // requirements.\n" msgstr "" #: src/unsafe-rust/unsafe-functions.md:29 @@ -10396,9 +10802,10 @@ msgstr "" #: src/unsafe-rust/unsafe-functions.md:32 msgid "" -"// Not upholding the UTF-8 encoding requirement breaks memory safety! // " -"println!(\"emoji: {}\", unsafe { emojis.get_unchecked(0..3) }); // println!" -"(\"char count: {}\", count_chars(unsafe { // emojis.get_unchecked(0..3) }));" +"// Not upholding the UTF-8 encoding requirement breaks memory safety!\n" +" // println!(\"emoji: {}\", unsafe { emojis.get_unchecked(0..3) });\n" +" // println!(\"char count: {}\", count_chars(unsafe {\n" +" // emojis.get_unchecked(0..3) }));\n" msgstr "" #: src/unsafe-rust/unsafe-functions.md:43 @@ -10414,12 +10821,15 @@ msgstr "" #: src/unsafe-rust/unsafe-functions.md:49 msgid "" -"/// Swaps the values pointed to by the given pointers. /// /// # " -"Safety /// /// The pointers must be valid and properly aligned." +"/// Swaps the values pointed to by the given pointers.\n" +"///\n" +"/// # Safety\n" +"///\n" +"/// The pointers must be valid and properly aligned.\n" msgstr "" #: src/unsafe-rust/unsafe-functions.md:64 -msgid "// SAFETY: ..." +msgid "// SAFETY: ...\n" msgstr "" #: src/unsafe-rust/unsafe-functions.md:69 @@ -10437,7 +10847,9 @@ msgid "" msgstr "" #: src/unsafe-rust/unsafe-functions.md:85 -msgid "The `\"C\"` in this example is the ABI; other ABIs are available too." +msgid "" +"The `\"C\"` in this example is the ABI; [other ABIs are available too]" +"(https://doc.rust-lang.org/reference/items/external-blocks.html)." msgstr "" #: src/unsafe-rust/unsafe-functions.md:90 @@ -10466,18 +10878,19 @@ msgstr "" #: src/unsafe-rust/unsafe-traits.md:6 msgid "" -"For example, the `zerocopy` crate has an unsafe trait that looks something " -"like this:" +"For example, the `zerocopy` crate has an unsafe trait that looks [something " +"like this](https://docs.rs/zerocopy/latest/zerocopy/trait.AsBytes.html):" msgstr "" #: src/unsafe-rust/unsafe-traits.md:12 msgid "" -"/// ... /// # Safety /// The type must have a defined representation and no " -"padding." +"/// ...\n" +"/// # Safety\n" +"/// The type must have a defined representation and no padding.\n" msgstr "" #: src/unsafe-rust/unsafe-traits.md:26 -msgid "// SAFETY: `u32` has a defined representation and no padding." +msgid "// SAFETY: `u32` has a defined representation and no padding.\n" msgstr "" #: src/unsafe-rust/unsafe-traits.md:34 @@ -10512,21 +10925,22 @@ msgid "You will want to consult the manual pages:" msgstr "" #: src/unsafe-rust/exercise.md:9 -msgid "`opendir(3)`" +msgid "[`opendir(3)`](https://man7.org/linux/man-pages/man3/opendir.3.html)" msgstr "" #: src/unsafe-rust/exercise.md:10 -msgid "`readdir(3)`" +msgid "[`readdir(3)`](https://man7.org/linux/man-pages/man3/readdir.3.html)" msgstr "" #: src/unsafe-rust/exercise.md:11 -msgid "`closedir(3)`" +msgid "[`closedir(3)`](https://man7.org/linux/man-pages/man3/closedir.3.html)" msgstr "" #: src/unsafe-rust/exercise.md:13 msgid "" -"You will also want to browse the `std::ffi` module. There you find a number " -"of string types which you need for the exercise:" +"You will also want to browse the [`std::ffi`](https://doc.rust-lang.org/std/" +"ffi/) module. There you find a number of string types which you need for the " +"exercise:" msgstr "" #: src/unsafe-rust/exercise.md:16 @@ -10538,9 +10952,10 @@ msgid "Use" msgstr "" #: src/unsafe-rust/exercise.md:18 -#, fuzzy -msgid "`str` and `String`" -msgstr "`break` و `continue`" +msgid "" +"[`str`](https://doc.rust-lang.org/std/primitive.str.html) and [`String`]" +"(https://doc.rust-lang.org/std/string/struct.String.html)" +msgstr "" #: src/unsafe-rust/exercise.md:18 msgid "UTF-8" @@ -10551,9 +10966,10 @@ msgid "Text processing in Rust" msgstr "" #: src/unsafe-rust/exercise.md:19 -#, fuzzy -msgid "`CStr` and `CString`" -msgstr "`break` و `continue`" +msgid "" +"[`CStr`](https://doc.rust-lang.org/std/ffi/struct.CStr.html) and [`CString`]" +"(https://doc.rust-lang.org/std/ffi/struct.CString.html)" +msgstr "" #: src/unsafe-rust/exercise.md:19 msgid "NUL-terminated" @@ -10564,9 +10980,10 @@ msgid "Communicating with C functions" msgstr "" #: src/unsafe-rust/exercise.md:20 -#, fuzzy -msgid "`OsStr` and `OsString`" -msgstr "String" +msgid "" +"[`OsStr`](https://doc.rust-lang.org/std/ffi/struct.OsStr.html) and " +"[`OsString`](https://doc.rust-lang.org/std/ffi/struct.OsString.html)" +msgstr "" #: src/unsafe-rust/exercise.md:20 msgid "OS-specific" @@ -10604,8 +11021,8 @@ msgstr "" #: src/unsafe-rust/exercise.md:30 msgid "" -"`&[u8]` to `&OsStr`: `&OsStr` is a step towards `OsString`, use `OsStrExt` " -"to create it," +"`&[u8]` to `&OsStr`: `&OsStr` is a step towards `OsString`, use [`OsStrExt`]" +"(https://doc.rust-lang.org/std/os/unix/ffi/trait.OsStrExt.html) to create it," msgstr "" #: src/unsafe-rust/exercise.md:33 @@ -10615,17 +11032,16 @@ msgid "" msgstr "" #: src/unsafe-rust/exercise.md:36 -msgid "The Nomicon also has a very useful chapter about FFI." +msgid "" +"The [Nomicon](https://doc.rust-lang.org/nomicon/ffi.html) also has a very " +"useful chapter about FFI." msgstr "" #: src/unsafe-rust/exercise.md:47 -#, fuzzy msgid "" -"Copy the code below to https://play.rust-lang.org/ and fill in the missing " +"Copy the code below to and fill in the missing " "functions and methods:" msgstr "" -"کد زیر را در کپی کرده و " -"توابع را پیاده‌سازی کنید:" #: src/unsafe-rust/exercise.md:56 src/unsafe-rust/exercise.md:69 #: src/unsafe-rust/exercise.md:80 src/unsafe-rust/exercise.md:94 @@ -10636,18 +11052,18 @@ msgid "\"macos\"" msgstr "" #: src/unsafe-rust/exercise.md:59 src/unsafe-rust/solution.md:9 -msgid "// Opaque type. See https://doc.rust-lang.org/nomicon/ffi.html." +msgid "// Opaque type. See https://doc.rust-lang.org/nomicon/ffi.html.\n" msgstr "" #: src/unsafe-rust/exercise.md:66 src/unsafe-rust/solution.md:16 msgid "" -"// Layout according to the Linux man page for readdir(3), where ino_t and // " -"off_t are resolved according to the definitions in // /usr/include/x86_64-" -"linux-gnu/{sys/types.h, bits/typesizes.h}." +"// Layout according to the Linux man page for readdir(3), where ino_t and\n" +" // off_t are resolved according to the definitions in\n" +" // /usr/include/x86_64-linux-gnu/{sys/types.h, bits/typesizes.h}.\n" msgstr "" #: src/unsafe-rust/exercise.md:79 src/unsafe-rust/solution.md:29 -msgid "// Layout according to the macOS man page for dir(5)." +msgid "// Layout according to the macOS man page for dir(5).\n" msgstr "" #: src/unsafe-rust/exercise.md:94 src/unsafe-rust/exercise.md:102 @@ -10657,10 +11073,13 @@ msgstr "" #: src/unsafe-rust/exercise.md:97 src/unsafe-rust/solution.md:47 msgid "" -"// See https://github.com/rust-lang/libc/issues/414 and the section on // " -"\\_DARWIN_FEATURE_64_BIT_INODE in the macOS man page for stat(2). // // " -"\"Platforms that existed before these updates were available\" refers // to " -"macOS (as opposed to iOS / wearOS / etc.) on Intel and PowerPC." +"// See https://github.com/rust-lang/libc/issues/414 and the section on\n" +" // _DARWIN_FEATURE_64_BIT_INODE in the macOS man page for stat(2).\n" +" //\n" +" // \"Platforms that existed before these updates were available\" " +"refers\n" +" // to macOS (as opposed to iOS / wearOS / etc.) on Intel and " +"PowerPC.\n" msgstr "" #: src/unsafe-rust/exercise.md:103 src/unsafe-rust/solution.md:53 @@ -10669,16 +11088,16 @@ msgstr "" #: src/unsafe-rust/exercise.md:121 src/unsafe-rust/solution.md:71 msgid "" -"// Call opendir and return a Ok value if that worked, // otherwise return " -"Err with a message." +"// Call opendir and return a Ok value if that worked,\n" +" // otherwise return Err with a message.\n" msgstr "" #: src/unsafe-rust/exercise.md:130 -msgid "// Keep calling readdir until we get a NULL pointer back." +msgid "// Keep calling readdir until we get a NULL pointer back.\n" msgstr "" #: src/unsafe-rust/exercise.md:137 src/unsafe-rust/solution.md:105 -msgid "// Call closedir as needed." +msgid "// Call closedir as needed.\n" msgstr "" #: src/unsafe-rust/exercise.md:143 src/unsafe-rust/solution.md:116 @@ -10696,7 +11115,7 @@ msgid "\"Invalid path: {err}\"" msgstr "" #: src/unsafe-rust/solution.md:75 -msgid "// SAFETY: path.as_ptr() cannot be NULL." +msgid "// SAFETY: path.as_ptr() cannot be NULL.\n" msgstr "" #: src/unsafe-rust/solution.md:78 @@ -10705,20 +11124,22 @@ msgstr "" #: src/unsafe-rust/solution.md:88 msgid "" -"// Keep calling readdir until we get a NULL pointer back. // SAFETY: self." -"dir is never NULL." +"// Keep calling readdir until we get a NULL pointer back.\n" +" // SAFETY: self.dir is never NULL.\n" msgstr "" #: src/unsafe-rust/solution.md:92 -msgid "// We have reached the end of the directory." +msgid "// We have reached the end of the directory.\n" msgstr "" #: src/unsafe-rust/solution.md:95 -msgid "// SAFETY: dirent is not NULL and dirent.d_name is NUL // terminated." +msgid "" +"// SAFETY: dirent is not NULL and dirent.d_name is NUL\n" +" // terminated.\n" msgstr "" #: src/unsafe-rust/solution.md:107 -msgid "// SAFETY: self.dir is not NULL." +msgid "// SAFETY: self.dir is not NULL.\n" msgstr "" #: src/unsafe-rust/solution.md:109 @@ -10750,7 +11171,7 @@ msgid "\"bar.png\"" msgstr "" #: src/unsafe-rust/solution.md:148 -msgid "\"\\\\n\"" +msgid "\"\\n\"" msgstr "" #: src/unsafe-rust/solution.md:149 src/unsafe-rust/solution.md:155 @@ -10787,19 +11208,27 @@ msgid "" msgstr "" #: src/android.md -msgid "Service example: DNS over HTTP" +msgid "" +"Service example: [DNS over HTTP](https://security.googleblog.com/2022/07/dns-" +"over-http3-in-android.html)" msgstr "" #: src/android.md -msgid "Libraries: Rutabaga Virtual Graphics Interface" +msgid "" +"Libraries: [Rutabaga Virtual Graphics Interface](https://crosvm.dev/book/" +"appendix/rutabaga_gfx.html)" msgstr "" #: src/android.md -msgid "Kernel Drivers: Binder" +msgid "" +"Kernel Drivers: [Binder](https://lore.kernel.org/rust-for-linux/20231101-" +"rust-binder-v1-0-08ba9197f637@google.com/)" msgstr "" #: src/android.md -msgid "Firmware: pKVM firmware" +msgid "" +"Firmware: [pKVM firmware](https://security.googleblog.com/2023/10/bare-metal-" +"rust-in-android.html)" msgstr "" #: src/android/setup.md @@ -10809,7 +11238,9 @@ msgid "" msgstr "" #: src/android/setup.md -msgid "Please see the Android Developer Codelab for details." +msgid "" +"Please see the [Android Developer Codelab](https://source.android.com/docs/" +"setup/start) for details." msgstr "" #: src/android/setup.md @@ -10935,7 +11366,11 @@ msgid "" msgstr "" #: src/android/build-rules.md -msgid "There is a plan to transition Android, ChromeOS, and Fuchsia to Bazel." +msgid "" +"There is a plan to transition [Android](https://source.android.com/docs/" +"setup/build/bazel/introduction), [ChromeOS](https://chromium.googlesource." +"com/chromiumos/bazel/), and [Fuchsia](https://source.android.com/docs/setup/" +"build/bazel/introduction) to Bazel." msgstr "" #: src/android/build-rules.md @@ -10974,11 +11409,11 @@ msgid "_hello_rust/src/main.rs_:" msgstr "" #: src/android/build-rules/binary.md:19 src/android/build-rules/library.md:37 -msgid "//! Rust demo." +msgid "//! Rust demo.\n" msgstr "" #: src/android/build-rules/binary.md:20 src/android/build-rules/library.md:41 -msgid "/// Prints a greeting to standard output." +msgid "/// Prints a greeting to standard output.\n" msgstr "" #: src/android/build-rules/binary.md:23 src/exercises/chromium/build-rules.md:9 @@ -11016,7 +11451,9 @@ msgstr "" #: src/android/build-rules/library.md:8 msgid "" -"`libtextwrap`, which is a crate already vendored in `external/rust/crates/`." +"`libtextwrap`, which is a crate already vendored in [`external/rust/crates/`]" +"(https://cs.android.com/android/platform/superproject/+/master:external/rust/" +"crates/)." msgstr "" #: src/android/build-rules/library.md:17 src/android/build-rules/library.md:18 @@ -11032,7 +11469,7 @@ msgid "\"libtextwrap\"" msgstr "" #: src/android/build-rules/library.md:24 -msgid "// Need this to avoid dynamic link error." +msgid "// Need this to avoid dynamic link error.\n" msgstr "" #: src/android/build-rules/library.md:29 @@ -11050,11 +11487,11 @@ msgid "_hello_rust/src/lib.rs_:" msgstr "" #: src/android/build-rules/library.md:51 -msgid "//! Greeting library." +msgid "//! Greeting library.\n" msgstr "" #: src/android/build-rules/library.md:52 -msgid "/// Greet `name`." +msgid "/// Greet `name`.\n" msgstr "" #: src/android/build-rules/library.md:55 @@ -11076,7 +11513,9 @@ msgid "" msgstr "" #: src/android/aidl.md -msgid "The Android Interface Definition Language (AIDL) is supported in Rust:" +msgid "" +"The [Android Interface Definition Language (AIDL)](https://developer.android." +"com/guide/components/aidl) is supported in Rust:" msgstr "" #: src/android/aidl.md @@ -11111,13 +11550,13 @@ msgstr "" #: src/android/aidl/example-service/interface.md:8 #: src/android/aidl/example-service/service-bindings.md:9 #: src/android/aidl/example-service/changing-definition.md:8 -msgid "/\\*\\* Birthday service interface. \\*/" +msgid "/** Birthday service interface. */" msgstr "" #: src/android/aidl/example-service/interface.md:10 #: src/android/aidl/example-service/service-bindings.md:11 #: src/android/aidl/example-service/changing-definition.md:11 -msgid "/\\*\\* Generate a Happy Birthday message. \\*/" +msgid "/** Generate a Happy Birthday message. */" msgstr "" #: src/android/aidl/example-service/interface.md:15 @@ -11129,11 +11568,11 @@ msgid "\"com.example.birthdayservice\"" msgstr "" #: src/android/aidl/example-service/interface.md:20 -msgid "\"com/example/birthdayservice/\\*.aidl\"" +msgid "\"com/example/birthdayservice/*.aidl\"" msgstr "" #: src/android/aidl/example-service/interface.md:23 -msgid "// Rust is not enabled by default" +msgid "// Rust is not enabled by default\n" msgstr "" #: src/android/aidl/example-service/interface.md:32 @@ -11196,7 +11635,7 @@ msgid "_birthday_service/src/lib.rs_:" msgstr "" #: src/android/aidl/example-service/service.md:10 -msgid "/// The `IBirthdayService` implementation." +msgid "/// The `IBirthdayService` implementation.\n" msgstr "" #: src/android/aidl/example-service/service.md:18 @@ -11259,11 +11698,11 @@ msgid "_birthday_service/src/server.rs_:" msgstr "" #: src/android/aidl/example-service/server.md:8 -msgid "//! Birthday service." +msgid "//! Birthday service.\n" msgstr "" #: src/android/aidl/example-service/server.md:14 -msgid "/// Entry point for birthday service." +msgid "/// Entry point for birthday service.\n" msgstr "" #: src/android/aidl/example-service/server.md:23 @@ -11282,7 +11721,7 @@ msgstr "سرورها" #: src/android/aidl/example-service/server.md:40 #: src/android/aidl/example-service/client.md:42 -msgid "// To avoid dynamic link error." +msgid "// To avoid dynamic link error.\n" msgstr "" #: src/android/aidl/example-service/server.md:46 @@ -11356,7 +11795,7 @@ msgid "_birthday_service/src/client.rs_:" msgstr "" #: src/android/aidl/example-service/client.md:12 -msgid "/// Call the birthday service." +msgid "/// Call the birthday service.\n" msgstr "" #: src/android/aidl/example-service/client.md:23 @@ -11367,7 +11806,7 @@ msgid "\"Failed to connect to BirthdayService\"" msgstr "" #: src/android/aidl/example-service/client.md:25 -msgid "// Call the service." +msgid "// Call the service.\n" msgstr "" #: src/android/aidl/example-service/client.md:27 @@ -11595,7 +12034,7 @@ msgstr "" #: src/android/aidl/types/arrays.md:7 #, fuzzy msgid "Position" -msgstr "راه حل‌ها" +msgstr "راه حل" #: src/android/aidl/types/arrays.md:9 msgid "`in` argument" @@ -11604,7 +12043,7 @@ msgstr "" #: src/android/aidl/types/arrays.md:9 #, fuzzy msgid "`&[T]`" -msgstr "برش‌ها" +msgstr "برش ها: `&[T]`" #: src/android/aidl/types/arrays.md:10 msgid "`out`/`inout` argument" @@ -11627,8 +12066,8 @@ msgstr "" msgid "" "In Android 13 or higher, fixed-size arrays are supported, i.e. `T[N]` " "becomes `[T; N]`. Fixed-size arrays can have multiple dimensions (e.g. " -"int\\[3\\]\\[4\\]). In the Java backend, fixed-size arrays are represented " -"as array types." +"`int[3][4]`). In the Java backend, fixed-size arrays are represented as " +"array types." msgstr "" #: src/android/aidl/types/arrays.md:18 @@ -11655,11 +12094,11 @@ msgid "" msgstr "" #: src/android/aidl/types/objects.md:23 -msgid "/\\*\\* The same thing, but using a binder object. \\*/" +msgid "/** The same thing, but using a binder object. */" msgstr "" #: src/android/aidl/types/objects.md:26 -msgid "/\\*\\* The same thing, but using `IBinder`. \\*/" +msgid "/** The same thing, but using `IBinder`. */" msgstr "" #: src/android/aidl/types/objects.md:31 @@ -11669,20 +12108,20 @@ msgid "**birthday_service/src/client.rs**:" msgstr "" #: src/android/aidl/types/objects.md:34 -msgid "/// Rust struct implementing the `IBirthdayInfoProvider` interface." +msgid "/// Rust struct implementing the `IBirthdayInfoProvider` interface.\n" msgstr "" #: src/android/aidl/types/objects.md:56 -msgid "// Create a binder object for the `IBirthdayInfoProvider` interface." +msgid "// Create a binder object for the `IBirthdayInfoProvider` interface.\n" msgstr "" #: src/android/aidl/types/objects.md:62 -msgid "// Send the binder object to the service." +msgid "// Send the binder object to the service.\n" msgstr "" #: src/android/aidl/types/objects.md:65 msgid "" -"// Perform the same operation but passing the provider as an `SpIBinder`." +"// Perform the same operation but passing the provider as an `SpIBinder`.\n" msgstr "" #: src/android/aidl/types/objects.md:72 @@ -11701,7 +12140,7 @@ msgid "" msgstr "" #: src/android/aidl/types/parcelables.md:22 -msgid "/\\*\\* The same thing, but with a parcelable. \\*/" +msgid "/** The same thing, but with a parcelable. */" msgstr "" #: src/android/aidl/types/file-descriptor.md:3 @@ -11711,11 +12150,11 @@ msgid "" msgstr "" #: src/android/aidl/types/file-descriptor.md:10 -msgid "/\\*\\* The same thing, but loads info from a file. \\*/" +msgid "/** The same thing, but loads info from a file. */" msgstr "" #: src/android/aidl/types/file-descriptor.md:22 -msgid "// Open a file and put the birthday info in it." +msgid "// Open a file and put the birthday info in it.\n" msgstr "" #: src/android/aidl/types/file-descriptor.md:23 @@ -11731,7 +12170,7 @@ msgid "\"{years}\"" msgstr "" #: src/android/aidl/types/file-descriptor.md:27 -msgid "// Create a `ParcelFileDescriptor` from the file and send it." +msgid "// Create a `ParcelFileDescriptor` from the file and send it.\n" msgstr "" #: src/android/aidl/types/file-descriptor.md:33 @@ -11740,8 +12179,10 @@ msgstr "" #: src/android/aidl/types/file-descriptor.md:41 msgid "" -"// Convert the file descriptor to a `File`. `ParcelFileDescriptor` wraps // " -"an `OwnedFd`, which can be cloned and then used to create a `File` // object." +"// Convert the file descriptor to a `File`. `ParcelFileDescriptor` wraps\n" +" // an `OwnedFd`, which can be cloned and then used to create a " +"`File`\n" +" // object.\n" msgstr "" #: src/android/aidl/types/file-descriptor.md:48 @@ -11768,8 +12209,8 @@ msgstr "Rust در اندروید" #: src/android/testing.md msgid "" -"Building on Testing, we will now look at how unit tests work in AOSP. Use " -"the `rust_test` module for your unit tests:" +"Building on [Testing](../testing.md), we will now look at how unit tests " +"work in AOSP. Use the `rust_test` module for your unit tests:" msgstr "" #: src/android/testing.md @@ -11802,11 +12243,11 @@ msgid "_testing/src/lib.rs_:" msgstr "" #: src/android/testing.md -msgid "//! Left-padding library." +msgid "//! Left-padding library.\n" msgstr "" #: src/android/testing.md -msgid "/// Left-pad `s` to `width`." +msgid "/// Left-pad `s` to `width`.\n" msgstr "" #: src/android/testing.md @@ -11851,7 +12292,8 @@ msgstr "" #: src/android/testing/googletest.md:3 msgid "" -"The GoogleTest crate allows for flexible test assertions using _matchers_:" +"The [GoogleTest](https://docs.rs/googletest/) crate allows for flexible test " +"assertions using _matchers_:" msgstr "" #: src/android/testing/googletest.md:11 @@ -11877,16 +12319,18 @@ msgstr "" #: src/android/testing/googletest.md:41 msgid "" -"The `use googletest::prelude::*;` line imports a number of commonly used " -"macros and types." +"The `use googletest::prelude::*;` line imports a number of [commonly used " +"macros and types](https://docs.rs/googletest/latest/googletest/prelude/index." +"html)." msgstr "" #: src/android/testing/googletest.md:44 msgid "" "This just scratches the surface, there are many builtin matchers. Consider " -"going through the first chapter of \"Advanced testing for Rust " -"applications\", a self-guided Rust course: it provides a guided introduction " -"to the library, with exercises to help you get comfortable with `googletest` " +"going through the first chapter of [\"Advanced testing for Rust " +"applications\"](https://github.com/mainmatter/rust-advanced-testing-" +"workshop), a self-guided Rust course: it provides a guided introduction to " +"the library, with exercises to help you get comfortable with `googletest` " "macros, its matchers and its overall philosophy." msgstr "" @@ -11898,16 +12342,16 @@ msgstr "" #: src/android/testing/googletest.md:57 msgid "" -"\"Memory safety found,\\n \n" -"Rust's strong typing guides the way,\\n \n" -"Secure code you'll write.\"" +"\"Memory safety found,\\n\\\n" +" Rust's strong typing guides the way,\\n\\\n" +" Secure code you'll write.\"" msgstr "" #: src/android/testing/googletest.md:62 msgid "" -"\"Memory safety found,\\n \n" -"Rust's silly humor guides the way,\\n \n" -"Secure code you'll write.\"" +"\"Memory safety found,\\n\\\n" +" Rust's silly humor guides the way,\\n\\\n" +" Secure code you'll write.\"" msgstr "" #: src/android/testing/googletest.md:69 @@ -11915,22 +12359,25 @@ msgid "shows a color-coded diff (colors not shown here):" msgstr "" #: src/android/testing/googletest.md:86 -msgid "The crate is a Rust port of GoogleTest for C++." +msgid "" +"The crate is a Rust port of [GoogleTest for C++](https://google.github.io/" +"googletest/)." msgstr "" #: src/android/testing/mocking.md:3 msgid "" -"For mocking, Mockall is a widely used library. You need to refactor your " -"code to use traits, which you can then quickly mock:" +"For mocking, [Mockall](https://docs.rs/mockall/) is a widely used library. " +"You need to refactor your code to use traits, which you can then quickly " +"mock:" msgstr "" #: src/android/testing/mocking.md:27 msgid "" "Mockall is the recommended mocking library in Android (AOSP). There are " -"other mocking libraries available on crates.io, in particular in the area of " -"mocking HTTP services. The other mocking libraries work in a similar fashion " -"as Mockall, meaning that they make it easy to get a mock implementation of a " -"given trait." +"other [mocking libraries available on crates.io](https://crates.io/keywords/" +"mock), in particular in the area of mocking HTTP services. The other mocking " +"libraries work in a similar fashion as Mockall, meaning that they make it " +"easy to get a mock implementation of a given trait." msgstr "" #: src/android/testing/mocking.md:33 @@ -12004,11 +12451,11 @@ msgid "_hello_rust_logs/src/main.rs_:" msgstr "" #: src/android/logging.md -msgid "//! Rust logging demo." +msgid "//! Rust logging demo.\n" msgstr "" #: src/android/logging.md -msgid "/// Logs a greeting." +msgid "/// Logs a greeting.\n" msgstr "" #: src/android/logging.md @@ -12081,7 +12528,7 @@ msgid "You can do it by hand if you want:" msgstr "" #: src/android/interoperability/with-c.md:15 -msgid "// SAFETY: `abs` doesn't have any safety requirements." +msgid "// SAFETY: `abs` doesn't have any safety requirements.\n" msgstr "" #: src/android/interoperability/with-c.md:17 @@ -12089,7 +12536,9 @@ msgid "\"{x}, {abs_x}\"" msgstr "" #: src/android/interoperability/with-c.md:21 -msgid "We already saw this in the Safe FFI Wrapper exercise." +msgid "" +"We already saw this in the [Safe FFI Wrapper exercise](../../unsafe-rust/" +"exercise.md)." msgstr "" #: src/android/interoperability/with-c.md:24 @@ -12107,7 +12556,9 @@ msgid "Using Bindgen" msgstr "" #: src/android/interoperability/with-c/bindgen.md:3 -msgid "The bindgen tool can auto-generate bindings from a C header file." +msgid "" +"The [bindgen](https://rust-lang.github.io/rust-bindgen/introduction.html) " +"tool can auto-generate bindings from a C header file." msgstr "" #: src/android/interoperability/with-c/bindgen.md:6 @@ -12123,7 +12574,7 @@ msgid "_interoperability/bindgen/libbirthday.c_:" msgstr "" #: src/android/interoperability/with-c/bindgen.md:22 -msgid "\\" +msgid "" msgstr "" #: src/android/interoperability/with-c/bindgen.md:23 @@ -12212,15 +12663,17 @@ msgid "_interoperability/bindgen/main.rs_:" msgstr "" #: src/android/interoperability/with-c/bindgen.md:82 -msgid "//! Bindgen demo." +msgid "//! Bindgen demo.\n" msgstr "" #: src/android/interoperability/with-c/bindgen.md:89 msgid "" -"// SAFETY: The pointer we pass is valid because it came from a Rust // " -"reference, and the `name` it contains refers to `name` above which also // " -"remains valid. `print_card` doesn't store either pointer to use later // " -"after it returns." +"// SAFETY: The pointer we pass is valid because it came from a Rust\n" +" // reference, and the `name` it contains refers to `name` above which " +"also\n" +" // remains valid. `print_card` doesn't store either pointer to use " +"later\n" +" // after it returns.\n" msgstr "" #: src/android/interoperability/with-c/bindgen.md:101 @@ -12252,7 +12705,7 @@ msgid "\"none\"" msgstr "" #: src/android/interoperability/with-c/bindgen.md:118 -msgid "// Generated file, skip linting" +msgid "// Generated file, skip linting\n" msgstr "" #: src/android/interoperability/with-c/rust.md:1 @@ -12268,11 +12721,11 @@ msgid "_interoperability/rust/libanalyze/analyze.rs_" msgstr "" #: src/android/interoperability/with-c/rust.md:8 -msgid "//! Rust FFI demo." +msgid "//! Rust FFI demo.\n" msgstr "" #: src/android/interoperability/with-c/rust.md:12 -msgid "/// Analyze the numbers." +msgid "/// Analyze the numbers.\n" msgstr "" #: src/android/interoperability/with-c/rust.md:17 @@ -12347,8 +12800,8 @@ msgstr "" #: src/android/interoperability/cpp.md:3 msgid "" -"The CXX crate makes it possible to do safe interoperability between Rust and " -"C++." +"The [CXX crate](https://cxx.rs/) makes it possible to do safe " +"interoperability between Rust and C++." msgstr "" #: src/android/interoperability/cpp.md:6 @@ -12367,12 +12820,12 @@ msgid "\"org::blobstore\"" msgstr "" #: src/android/interoperability/cpp/bridge.md:11 -msgid "// Shared structs with fields visible to both languages." +msgid "// Shared structs with fields visible to both languages.\n" msgstr "" #: src/android/interoperability/cpp/bridge.md:17 #: src/android/interoperability/cpp/generated-cpp.md:6 -msgid "// Rust types and signatures exposed to C++." +msgid "// Rust types and signatures exposed to C++.\n" msgstr "" #: src/android/interoperability/cpp/bridge.md:18 @@ -12388,7 +12841,7 @@ msgstr "Rustdoc" #: src/android/interoperability/cpp/bridge.md:24 #: src/android/interoperability/cpp/cpp-bridge.md:6 -msgid "// C++ types and signatures exposed to Rust." +msgid "// C++ types and signatures exposed to Rust.\n" msgstr "" #: src/android/interoperability/cpp/bridge.md:25 @@ -12416,9 +12869,10 @@ msgstr "" #: src/android/interoperability/cpp/bridge.md:44 msgid "" -"To view the generated Rust code, use cargo-expand to view the expanded proc " -"macro. For most of the examples you would use `cargo expand ::ffi` to expand " -"just the `ffi` module (though this doesn't apply for Android projects)." +"To view the generated Rust code, use [cargo-expand](https://github.com/" +"dtolnay/cargo-expand) to view the expanded proc macro. For most of the " +"examples you would use `cargo expand ::ffi` to expand just the `ffi` module " +"(though this doesn't apply for Android projects)." msgstr "" #: src/android/interoperability/cpp/bridge.md:47 @@ -12430,16 +12884,16 @@ msgid "Rust Bridge Declarations" msgstr "" #: src/android/interoperability/cpp/rust-bridge.md:7 -msgid "// Opaque type" +msgid "// Opaque type\n" msgstr "" #: src/android/interoperability/cpp/rust-bridge.md:8 -msgid "// Method on `MyType`" +msgid "// Method on `MyType`\n" msgstr "" #: src/android/interoperability/cpp/rust-bridge.md:9 #, fuzzy -msgid "// Free function" +msgid "// Free function\n" msgstr "توابع" #: src/android/interoperability/cpp/rust-bridge.md:28 @@ -12490,7 +12944,7 @@ msgid "" msgstr "" #: src/android/interoperability/cpp/shared-types.md:9 -msgid "// A=1, J=11, Q=12, K=13" +msgid "// A=1, J=11, Q=12, K=13\n" msgstr "" #: src/android/interoperability/cpp/shared-types.md:23 @@ -12711,9 +13165,11 @@ msgstr "" #: src/android/interoperability/cpp/android-build-cpp.md:25 msgid "" -"Full docs for using CXX in Android can be found in the Android docs. You may " -"want to share that link with the class so that students know where they can " -"find these instructions again in the future." +"Full docs for using CXX in Android can be found in [the Android docs]" +"(https://source.android.com/docs/setup/build/rust/building-rust-modules/" +"android-rust-patterns#rust-cpp-interop-using-cxx). You may want to share " +"that link with the class so that students know where they can find these " +"instructions again in the future." msgstr "" #: src/android/interoperability/cpp/android-cpp-genrules.md:3 @@ -12724,8 +13180,8 @@ msgstr "" #: src/android/interoperability/cpp/android-cpp-genrules.md:7 msgid "" -"// Generate a C++ header containing the C++ bindings // to the Rust exported " -"functions in lib.rs." +"// Generate a C++ header containing the C++ bindings\n" +"// to the Rust exported functions in lib.rs.\n" msgstr "" #: src/android/interoperability/cpp/android-cpp-genrules.md:11 @@ -12748,7 +13204,7 @@ msgid "\"lib.rs.h\"" msgstr "" #: src/android/interoperability/cpp/android-cpp-genrules.md:16 -msgid "// Generate the C++ code that Rust calls into." +msgid "// Generate the C++ code that Rust calls into.\n" msgstr "" #: src/android/interoperability/cpp/android-cpp-genrules.md:21 @@ -12791,8 +13247,9 @@ msgstr "" #: src/android/interoperability/java.md:3 msgid "" -"Java can load shared objects via Java Native Interface (JNI). The `jni` " -"crate allows you to create a compatible library." +"Java can load shared objects via [Java Native Interface (JNI)](https://en." +"wikipedia.org/wiki/Java_Native_Interface). The [`jni` crate](https://docs.rs/" +"jni/) allows you to create a compatible library." msgstr "" #: src/android/interoperability/java.md:8 @@ -12804,11 +13261,11 @@ msgid "_interoperability/java/src/lib.rs_:" msgstr "" #: src/android/interoperability/java.md:13 -msgid "//! Rust \\<\\-> Java FFI demo." +msgid "//! Rust <-> Java FFI demo.\n" msgstr "" #: src/android/interoperability/java.md:18 -msgid "/// HelloWorld::hello method implementation." +msgid "/// HelloWorld::hello method implementation.\n" msgstr "" #: src/android/interoperability/java.md:21 @@ -12917,8 +13374,9 @@ msgstr "" #: src/chromium/setup.md msgid "" -"See How to build Chromium if you aren't already at that point. Be warned: " -"setting up to build Chromium takes time." +"See [How to build Chromium](https://www.chromium.org/developers/how-tos/get-" +"the-code/) if you aren't already at that point. Be warned: setting up to " +"build Chromium takes time." msgstr "" #: src/chromium/setup.md @@ -12939,8 +13397,9 @@ msgstr "" #: src/chromium/cargo.md msgid "" -"The Rust community typically uses `cargo` and libraries from crates.io. " -"Chromium is built using `gn` and `ninja` and a curated set of dependencies." +"The Rust community typically uses `cargo` and libraries from [crates.io]" +"(https://crates.io/). Chromium is built using `gn` and `ninja` and a curated " +"set of dependencies." msgstr "" #: src/chromium/cargo.md @@ -12956,12 +13415,15 @@ msgstr "" #: src/chromium/cargo.md msgid "" -"Use `cargo`, but restrict yourself to Chromium's audited toolchain and crates" +"Use `cargo`, but [restrict yourself to Chromium's audited toolchain and " +"crates](https://chromium.googlesource.com/chromium/src/+/refs/heads/main/" +"docs/rust.md#Using-cargo)" msgstr "" #: src/chromium/cargo.md msgid "" -"Use `cargo`, trusting a toolchain and/or crates downloaded from the internet" +"Use `cargo`, trusting a [toolchain](https://rustup.rs/) and/or [crates " +"downloaded from the internet](https://crates.io/)" msgstr "" #: src/chromium/cargo.md @@ -13151,14 +13613,17 @@ msgstr "" #: src/chromium/policy.md msgid "" "Chromium does not yet allow first-party Rust except in rare cases as " -"approved by Chromium's Area Tech Leads." +"approved by Chromium's [Area Tech Leads](https://source.chromium.org/" +"chromium/chromium/src/+/main:ATL_OWNERS)." msgstr "" #: src/chromium/policy.md msgid "" -"Chromium's policy on third party libraries is outlined here - Rust is " -"allowed for third party libraries under various circumstances, including if " -"they're the best option for performance or for security." +"Chromium's policy on third party libraries is outlined [here](https://" +"chromium.googlesource.com/chromium/src/+/main/docs/adding_to_third_party." +"md#rust) - Rust is allowed for third party libraries under various " +"circumstances, including if they're the best option for performance or for " +"security." msgstr "" #: src/chromium/policy.md @@ -13274,9 +13739,10 @@ msgstr "" #: src/chromium/build-rules.md msgid "" "Students might be wondering why we need a gn template, rather than using " -"gn's built-in support for Rust static libraries. The answer is that this " -"template provides support for CXX interop, Rust features, and unit tests, " -"some of which we'll use later." +"[gn's built-in support for Rust static libraries](https://gn.googlesource." +"com/gn/+/main/docs/reference.md#func_static_library). The answer is that " +"this template provides support for CXX interop, Rust features, and unit " +"tests, some of which we'll use later." msgstr "" #: src/chromium/build-rules/unsafe.md:1 @@ -13393,7 +13859,7 @@ msgstr "" #: src/chromium/build-rules/vscode.md:32 msgid "" -"Demo **type annotations** (there are quote a few nice examples in the " +"Demo **type annotations** (there are quite a few nice examples in the " "`QrCode::with_bits` method)" msgstr "" @@ -13450,23 +13916,34 @@ msgid "Where to find help" msgstr "" #: src/exercises/chromium/build-rules.md:34 -msgid "The options available to the `rust_static_library` gn template" +msgid "" +"The options available to the [`rust_static_library` gn template](https://" +"source.chromium.org/chromium/chromium/src/+/main:build/rust/" +"rust_static_library.gni;l=16)" msgstr "" #: src/exercises/chromium/build-rules.md:35 -msgid "Information about `#[no_mangle]`" +msgid "" +"Information about [`#[no_mangle]`](https://doc.rust-lang.org/beta/reference/" +"abi.html#the-no_mangle-attribute)" msgstr "" #: src/exercises/chromium/build-rules.md:36 -msgid "Information about `extern \"C\"`" +msgid "" +"Information about [`extern \"C\"`](https://doc.rust-lang.org/std/keyword." +"extern.html)" msgstr "" #: src/exercises/chromium/build-rules.md:37 -msgid "Information about gn's `--export-rust-project` switch" +msgid "" +"Information about gn's [`--export-rust-project`](https://gn.googlesource.com/" +"gn/+/main/docs/reference.md#compilation-database) switch" msgstr "" #: src/exercises/chromium/build-rules.md:38 -msgid "How to install rust-analyzer in VSCode" +msgid "" +"[How to install rust-analyzer in VSCode](https://code.visualstudio.com/docs/" +"languages/rust)" msgstr "" #: src/exercises/chromium/build-rules.md:44 @@ -13493,8 +13970,8 @@ msgstr "" #: src/chromium/testing.md msgid "" "Rust community typically authors unit tests in a module placed in the same " -"source file as the code being tested. This was covered earlier in the course " -"and looks like this:" +"source file as the code being tested. This was covered [earlier](../testing." +"md) in the course and looks like this:" msgstr "" #: src/chromium/testing.md @@ -13560,7 +14037,9 @@ msgid "" msgstr "" #: src/chromium/testing/rust-gtest-interop.md:3 -msgid "The `rust_gtest_interop` library provides a way to:" +msgid "" +"The [`rust_gtest_interop`](https://chromium.googlesource.com/chromium/src/+/" +"main/testing/rust_gtest_interop/README.md) library provides a way to:" msgstr "" #: src/chromium/testing/rust-gtest-interop.md:5 @@ -13644,8 +14123,10 @@ msgstr "" #: src/chromium/testing/chromium-import-macro.md:26 msgid "" -"More information can be found in the doc comment of the `chromium::import` " -"macro." +"More information can be found in [the doc comment](https://source.chromium." +"org/chromium/chromium/src/+/main:build/rust/chromium_prelude/" +"chromium_prelude.rs?q=f:chromium_prelude.rs%20pub.use.*%5Cbimport%5Cb;%20-f:" +"third_party&ss=chromium%2Fchromium%2Fsrc) of the `chromium::import` macro." msgstr "" #: src/chromium/testing/chromium-import-macro.md:31 @@ -13704,7 +14185,9 @@ msgid "" msgstr "" #: src/chromium/interoperability-with-cpp.md -msgid "See the CXX tutorial for a full example of using this." +msgid "" +"See the [CXX tutorial](https://cxx.rs/tutorial.html) for a full example of " +"using this." msgstr "" #: src/chromium/interoperability-with-cpp.md @@ -13770,7 +14253,7 @@ msgid "\"example/include/blobstore.h\"" msgstr "" #: src/chromium/interoperability-with-cpp/example-bindings.md:24 -msgid "// Definitions of Rust types and functions go here" +msgid "// Definitions of Rust types and functions go here\n" msgstr "" #: src/chromium/interoperability-with-cpp/example-bindings.md:30 @@ -13811,7 +14294,9 @@ msgid "" msgstr "" #: src/chromium/interoperability-with-cpp/limitations-of-cxx.md:3 -msgid "By far the most useful page when using CXX is the type reference." +msgid "" +"By far the most useful page when using CXX is the [type reference](https://" +"cxx.rs/bindings.html)." msgstr "" #: src/chromium/interoperability-with-cpp/limitations-of-cxx.md:5 @@ -13862,8 +14347,8 @@ msgstr "" #: src/chromium/interoperability-with-cpp/error-handling.md:3 msgid "" -"CXX's support for `Result` relies on C++ exceptions, so we can't use " -"that in Chromium. Alternatives:" +"CXX's [support for `Result`](https://cxx.rs/binding/result.html) relies " +"on C++ exceptions, so we can't use that in Chromium. Alternatives:" msgstr "" #: src/chromium/interoperability-with-cpp/error-handling.md:6 @@ -13910,15 +14395,16 @@ msgid "" msgstr "" #: src/chromium/interoperability-with-cpp/error-handling-qr.md:1 -#, fuzzy msgid "CXX Error Handling: QR Example" -msgstr "مدیریت خطا (Error Handling)" +msgstr "مدیریت خطا CXX: مثال QR" #: src/chromium/interoperability-with-cpp/error-handling-qr.md:3 msgid "" -"The QR code generator is an example where a boolean is used to communicate " -"success vs failure, and where the successful result can be passed across the " -"FFI boundary:" +"The QR code generator is [an example](https://source.chromium.org/chromium/" +"chromium/src/+/main:components/qr_code_generator/qr_code_generator_ffi_glue." +"rs;l=13-18;drc=7bf1b75b910ca430501b9c6a74c1d18a0223ecca) where a boolean is " +"used to communicate success vs failure, and where the successful result can " +"be passed across the FFI boundary:" msgstr "" #: src/chromium/interoperability-with-cpp/error-handling-qr.md:8 @@ -13949,9 +14435,8 @@ msgid "" msgstr "" #: src/chromium/interoperability-with-cpp/error-handling-png.md:1 -#, fuzzy msgid "CXX Error Handling: PNG Example" -msgstr "مدیریت خطا (Error Handling)" +msgstr "مدیریت خطا CXX: مثال PNG" #: src/chromium/interoperability-with-cpp/error-handling-png.md:3 msgid "" @@ -13965,16 +14450,16 @@ msgstr "" #: src/chromium/interoperability-with-cpp/error-handling-png.md:10 msgid "" -"/// This returns an FFI-friendly equivalent of " -"`Result, /// ()>`." +"/// This returns an FFI-friendly equivalent of `Result,\n" +" /// ()>`.\n" msgstr "" #: src/chromium/interoperability-with-cpp/error-handling-png.md:14 -msgid "/// C++ bindings for the `crate::png::ResultOfPngReader` type." +msgid "/// C++ bindings for the `crate::png::ResultOfPngReader` type.\n" msgstr "" #: src/chromium/interoperability-with-cpp/error-handling-png.md:21 -msgid "/// C++ bindings for the `crate::png::PngReader` type." +msgid "/// C++ bindings for the `crate::png::PngReader` type.\n" msgstr "" #: src/chromium/interoperability-with-cpp/error-handling-png.md:32 @@ -14032,7 +14517,9 @@ msgstr "" #: src/chromium/interoperability-with-cpp/using-cxx-in-chromium.md:22 msgid "" "You will find some utility functions in `//base` to convert to/from Chromium " -"C++ types to CXX Rust types --- for example `SpanToRustSlice`." +"C++ types to CXX Rust types --- for example [`SpanToRustSlice`](https://" +"source.chromium.org/chromium/chromium/src/+/main:base/containers/span_rust.h;" +"l=21)." msgstr "" #: src/chromium/interoperability-with-cpp/using-cxx-in-chromium.md:27 @@ -14045,16 +14532,17 @@ msgid "" "standards. Calling back and forth to C/C++ from Rust may do arbitrary things " "to memory, and compromise the safety of Rust's own data layouts. Presence of " "_too many_ `unsafe` keywords in C/C++ interop can harm the signal-to-noise " -"ratio of such a keyword, and is controversial, but strictly, bringing any " -"foreign code into a Rust binary can cause unexpected behavior from Rust's " -"perspective." +"ratio of such a keyword, and is [controversial](https://steveklabnik.com/" +"writing/the-cxx-debate), but strictly, bringing any foreign code into a Rust " +"binary can cause unexpected behavior from Rust's perspective." msgstr "" #: src/chromium/interoperability-with-cpp/using-cxx-in-chromium.md:36 msgid "" -"The narrow answer lies in the diagram at the top of this page --- behind the " -"scenes, CXX generates Rust `unsafe` and `extern \"C\"` functions just like " -"we did manually in the previous section." +"The narrow answer lies in the diagram at the top of [this page](../" +"interoperability-with-cpp.md) --- behind the scenes, CXX generates Rust " +"`unsafe` and `extern \"C\"` functions just like we did manually in the " +"previous section." msgstr "" #: src/exercises/chromium/interoperability-with-cpp.md:1 @@ -14121,7 +14609,8 @@ msgstr "" #: src/exercises/chromium/interoperability-with-cpp.md:25 msgid "" "An `unsafe` block to call such a function, or alternatively specify the " -"`unsafe` keyword in your `#[cxx::bridge]` as described here." +"`unsafe` keyword in your `#[cxx::bridge]` [as described here](https://cxx.rs/" +"extern-c++.html#functions-and-member-functions)." msgstr "" #: src/exercises/chromium/interoperability-with-cpp.md:27 @@ -14182,11 +14671,13 @@ msgid "" msgstr "" #: src/exercises/chromium/interoperability-with-cpp.md:50 -msgid "The `cxx` binding reference" +msgid "The [`cxx` binding reference](https://cxx.rs/bindings.html)" msgstr "" #: src/exercises/chromium/interoperability-with-cpp.md:51 -msgid "The `rust_static_library` gn template" +msgid "" +"The [`rust_static_library` gn template](https://source.chromium.org/chromium/" +"chromium/src/+/main:build/rust/rust_static_library.gni;l=16)" msgstr "" #: src/exercises/chromium/interoperability-with-cpp.md:57 @@ -14210,8 +14701,9 @@ msgstr "" #: src/chromium/adding-third-party-crates.md msgid "" -"Rust libraries are called \"crates\" and are found at crates.io. It's _very " -"easy_ for Rust crates to depend upon one another. So they do!" +"Rust libraries are called \"crates\" and are found at [crates.io](https://" +"crates.io). It's _very easy_ for Rust crates to depend upon one another. So " +"they do!" msgstr "" #: src/chromium/adding-third-party-crates.md @@ -14300,7 +14792,9 @@ msgstr "" #: src/chromium/adding-third-party-crates/configuring-cargo-toml.md:3 msgid "" "Chromium has a single set of centrally-managed direct crate dependencies. " -"These are managed through a single `Cargo.toml`:" +"These are managed through a single [`Cargo.toml`](https://source.chromium." +"org/chromium/chromium/src/+/main:third_party/rust/chromium_crates_io/Cargo." +"toml):" msgstr "" #: src/chromium/adding-third-party-crates/configuring-cargo-toml.md:6 @@ -14316,9 +14810,10 @@ msgstr "" #: src/chromium/adding-third-party-crates/configuring-cargo-toml.md:14 msgid "" -"As with any other `Cargo.toml`, you can specify more details about the " -"dependencies --- most commonly, you'll want to specify the `features` that " -"you wish to enable in the crate." +"As with any other `Cargo.toml`, you can specify [more details about the " +"dependencies](https://doc.rust-lang.org/cargo/reference/specifying-" +"dependencies.html) --- most commonly, you'll want to specify the `features` " +"that you wish to enable in the crate." msgstr "" #: src/chromium/adding-third-party-crates/configuring-cargo-toml.md:18 @@ -14329,8 +14824,9 @@ msgstr "" #: src/chromium/adding-third-party-crates/configuring-gnrt-config-toml.md:3 msgid "" -"Alongside `Cargo.toml` is `gnrt_config.toml`. This contains Chromium-" -"specific extensions to crate handling." +"Alongside `Cargo.toml` is [`gnrt_config.toml`](https://source.chromium.org/" +"chromium/chromium/src/+/main:third_party/rust/chromium_crates_io/gnrt_config." +"toml). This contains Chromium-specific extensions to crate handling." msgstr "" #: src/chromium/adding-third-party-crates/configuring-gnrt-config-toml.md:6 @@ -14370,7 +14866,8 @@ msgstr "" msgid "" "Although the `gnrt` tool is part of the Chromium source code, by running " "this command you will be downloading and running its dependencies from " -"`crates.io`. See the earlier section discussing this security decision." +"`crates.io`. See [the earlier section](../cargo.md) discussing this security " +"decision." msgstr "" #: src/chromium/adding-third-party-crates/downloading-crates.md:17 @@ -14426,7 +14923,9 @@ msgstr "" #: src/chromium/adding-third-party-crates/generating-gn-build-rules.md:17 #, fuzzy -msgid "The \"major semver version\" is a Rust \"semver\" version number." +msgid "" +"The \"major semver version\" is a [Rust \"semver\" version number](https://" +"doc.rust-lang.org/cargo/reference/semver.html)." msgstr "" "لطفا به [مرجع Rust ](https://doc.rust-lang.org/reference/type-layout.html) " "مراجعه کنید." @@ -14528,10 +15027,11 @@ msgstr "" #: src/chromium/adding-third-party-crates/resolving-problems/build-scripts-which-generate-code.md:6 msgid "" -"If so, modify `gnrt_config.toml` to add `build-script-outputs` to the crate. " -"If this is a transitive dependency, that is, one on which Chromium code " -"should not directly depend, also add `allow-first-party-usage=false`. There " -"are several examples already in that file:" +"If so, modify [`gnrt_config.toml`](../configuring-gnrt-config-toml.md) to " +"add `build-script-outputs` to the crate. If this is a transitive dependency, " +"that is, one on which Chromium code should not directly depend, also add " +"`allow-first-party-usage=false`. There are several examples already in that " +"file:" msgstr "" #: src/chromium/adding-third-party-crates/resolving-problems/build-scripts-which-generate-code.md:11 @@ -14545,16 +15045,18 @@ msgstr "" #: src/chromium/adding-third-party-crates/resolving-problems/build-scripts-which-generate-code.md:17 msgid "" -"Now rerun `gnrt.py -- gen` to regenerate `BUILD.gn` files to inform ninja " -"that this particular output file is input to subsequent build steps." +"Now rerun [`gnrt.py -- gen`](../generating-gn-build-rules.md) to regenerate " +"`BUILD.gn` files to inform ninja that this particular output file is input " +"to subsequent build steps." msgstr "" #: src/chromium/adding-third-party-crates/resolving-problems/build-scripts-which-take-arbitrary-actions.md:3 msgid "" -"Some crates use the `cc` crate to build and link C/C++ libraries. Other " -"crates parse C/C++ using `bindgen` within their build scripts. These actions " -"can't be supported in a Chromium context --- our gn, ninja and LLVM build " -"system is very specific in expressing relationships between build actions." +"Some crates use the [`cc`](https://crates.io/crates/cc) crate to build and " +"link C/C++ libraries. Other crates parse C/C++ using [`bindgen`](https://" +"crates.io/crates/bindgen) within their build scripts. These actions can't be " +"supported in a Chromium context --- our gn, ninja and LLVM build system is " +"very specific in expressing relationships between build actions." msgstr "" #: src/chromium/adding-third-party-crates/resolving-problems/build-scripts-which-take-arbitrary-actions.md:8 @@ -14572,8 +15074,10 @@ msgstr "" #: src/chromium/adding-third-party-crates/resolving-problems/build-scripts-which-take-arbitrary-actions.md:13 msgid "" "Patches should be kept in `third_party/rust/chromium_crates_io/patches/" -"` - see for example the patches against the `cxx` crate - and will be " -"applied automatically by `gnrt` each time it upgrades the crate." +"` - see for example the [patches against the `cxx` crate](https://" +"source.chromium.org/chromium/chromium/src/+/main:third_party/rust/" +"chromium_crates_io/patches/cxx/) - and will be applied automatically by " +"`gnrt` each time it upgrades the crate." msgstr "" #: src/chromium/adding-third-party-crates/depending-on-a-crate.md:3 @@ -14614,15 +15118,18 @@ msgstr "" #: src/chromium/adding-third-party-crates/reviews-and-audits.md:3 msgid "" -"Adding new libraries is subject to Chromium's standard policies, but of " -"course also subject to security review. As you may be bringing in not just a " -"single crate but also transitive dependencies, there may be a lot of code to " -"review. On the other hand, safe Rust code can have limited negative side " -"effects. How should you review it?" +"Adding new libraries is subject to Chromium's standard [policies](https://" +"chromium.googlesource.com/chromium/src/+/refs/heads/main/docs/rust." +"md#Third_party-review), but of course also subject to security review. As " +"you may be bringing in not just a single crate but also transitive " +"dependencies, there may be a lot of code to review. On the other hand, safe " +"Rust code can have limited negative side effects. How should you review it?" msgstr "" #: src/chromium/adding-third-party-crates/reviews-and-audits.md:9 -msgid "Over time Chromium aims to move to a process based around cargo vet." +msgid "" +"Over time Chromium aims to move to a process based around [cargo vet]" +"(https://mozilla.github.io/cargo-vet/)." msgstr "" #: src/chromium/adding-third-party-crates/reviews-and-audits.md:11 @@ -14646,11 +15153,15 @@ msgstr "" msgid "" "Use `cd third-party/rust/chromium_crates_io; cargo audit` to check for known " "vulnerabilities (first you'll need to `cargo install cargo-audit`, which " -"ironically involves downloading lots of dependencies from the internet2)" +"ironically involves downloading lots of dependencies from the internet[2](../" +"cargo.md))" msgstr "" #: src/chromium/adding-third-party-crates/reviews-and-audits.md:21 -msgid "Ensure any `unsafe` code is good enough for the Rule of Two" +msgid "" +"Ensure any `unsafe` code is good enough for the [Rule of Two](https://" +"chromium.googlesource.com/chromium/src/+/main/docs/security/rule-of-2." +"md#unsafe-code-in-safe-languages)" msgstr "" #: src/chromium/adding-third-party-crates/reviews-and-audits.md:22 @@ -14714,24 +15225,27 @@ msgstr "" #: src/chromium/adding-third-party-crates/keeping-up-to-date.md:3 msgid "" -"As the OWNER of any third party Chromium dependency, you are expected to " -"keep it up to date with any security fixes. It is hoped that we will soon " -"automate this for Rust crates, but for now, it's still your responsibility " -"just as it is for any other third party dependency." +"As the OWNER of any third party Chromium dependency, you are [expected to " +"keep it up to date with any security fixes](https://chromium.googlesource." +"com/chromium/src/+/main/docs/adding_to_third_party.md#add-owners). It is " +"hoped that we will soon automate this for Rust crates, but for now, it's " +"still your responsibility just as it is for any other third party dependency." msgstr "" #: src/exercises/chromium/third-party.md:3 msgid "" -"Add uwuify to Chromium, turning off the crate's default features. Assume " -"that the crate will be used in shipping Chromium, but won't be used to " -"handle untrustworthy input." +"Add [uwuify](https://crates.io/crates/uwuify) to Chromium, turning off the " +"crate's [default features](https://doc.rust-lang.org/cargo/reference/" +"features.html#the-default-feature). Assume that the crate will be used in " +"shipping Chromium, but won't be used to handle untrustworthy input." msgstr "" #: src/exercises/chromium/third-party.md:7 msgid "" "(In the next exercise we'll use uwuify from Chromium, but feel free to skip " "ahead and do that now if you like. Or, you could create a new " -"`rust_executable` target which uses `uwuify`)." +"[`rust_executable` target](https://source.chromium.org/chromium/chromium/src/" +"+/main:build/rust/rust_executable.gni) which uses `uwuify`)." msgstr "" #: src/exercises/chromium/third-party.md:13 @@ -14781,7 +15295,8 @@ msgid "" msgstr "" #: src/exercises/chromium/third-party.md:29 -msgid "Thanks to Daniel Liu for this crate!" +msgid "" +"Thanks to [Daniel Liu](https://github.com/Daniel-Liu-c0deb0t) for this crate!" msgstr "" #: src/exercises/chromium/bringing-it-together.md @@ -14819,7 +15334,9 @@ msgid "" msgstr "" #: src/exercises/chromium/bringing-it-together.md -msgid "In fact, you already imported that crate in the previous exercise." +msgid "" +"In fact, you already [imported that crate in the previous exercise](https://" +"crates.io/crates/uwuify)." msgstr "" #: src/exercises/chromium/bringing-it-together.md @@ -14855,8 +15372,10 @@ msgstr "" #: src/exercises/chromium/bringing-it-together.md msgid "" "If students decide to do the conversion on the Rust side, they'll need to " -"consider `String::from_utf16`, consider error handling, and consider which " -"CXX supported types can transfer a lot of u16s." +"consider [`String::from_utf16`](https://doc.rust-lang.org/std/string/struct." +"String.html#method.from_utf16), consider error handling, and consider which " +"[CXX supported types can transfer a lot of u16s](https://cxx.rs/binding/" +"slice.html)." msgstr "" #: src/exercises/chromium/bringing-it-together.md @@ -14864,10 +15383,10 @@ msgid "" "Students may design the C++/Rust boundary in several different ways, e.g. " "taking and returning strings by value, or taking a mutable reference to a " "string. If a mutable reference is used, CXX will likely tell the student " -"that they need to use `Pin`. You may need to explain what `Pin` does, and " -"then explain why CXX needs it for mutable references to C++ data: the answer " -"is that C++ data can't be moved around like Rust data, because it may " -"contain self-referential pointers." +"that they need to use [`Pin`](https://doc.rust-lang.org/std/pin/). You may " +"need to explain what `Pin` does, and then explain why CXX needs it for " +"mutable references to C++ data: the answer is that C++ data can't be moved " +"around like Rust data, because it may contain self-referential pointers." msgstr "" #: src/exercises/chromium/bringing-it-together.md @@ -14884,7 +15403,9 @@ msgid "" msgstr "" #: src/exercises/chromium/solutions.md -msgid "Solutions to the Chromium exercises can be found in this series of CLs." +msgid "" +"Solutions to the Chromium exercises can be found in [this series of CLs]" +"(https://chromium-review.googlesource.com/c/chromium/src/+/5096560)." msgstr "" #: src/bare-metal.md @@ -14923,10 +15444,11 @@ msgstr "" #: src/bare-metal.md msgid "" -"For the microcontroller part of the course we will use the BBC micro:bit v2 " -"as an example. It's a development board based on the Nordic nRF52833 " -"microcontroller with some LEDs and buttons, an I2C-connected accelerometer " -"and compass, and an on-board SWD debugger." +"For the microcontroller part of the course we will use the [BBC micro:bit]" +"(https://microbit.org/) v2 as an example. It's a [development board](https://" +"tech.microbit.org/hardware/) based on the Nordic nRF52833 microcontroller " +"with some LEDs and buttons, an I2C-connected accelerometer and compass, and " +"an on-board SWD debugger." msgstr "" #: src/bare-metal.md @@ -15073,19 +15595,21 @@ msgid "" msgstr "" #: src/bare-metal/alloc.md:3 -msgid "To use `alloc` you must implement a global (heap) allocator." +msgid "" +"To use `alloc` you must implement a [global (heap) allocator](https://doc." +"rust-lang.org/stable/std/alloc/trait.GlobalAlloc.html)." msgstr "" #: src/bare-metal/alloc.md:23 -msgid "// SAFETY: `HEAP` is only used here and `entry` is only called once." +msgid "// SAFETY: `HEAP` is only used here and `entry` is only called once.\n" msgstr "" #: src/bare-metal/alloc.md:25 -msgid "// Give the allocator some memory to allocate." +msgid "// Give the allocator some memory to allocate.\n" msgstr "" #: src/bare-metal/alloc.md:29 -msgid "// Now we can do things that require heap allocation." +msgid "// Now we can do things that require heap allocation.\n" msgstr "" #: src/bare-metal/alloc.md:31 @@ -15152,34 +15676,34 @@ msgid "" msgstr "" #: src/bare-metal/microcontrollers/mmio.md:16 -msgid "/// GPIO port 0 peripheral address" +msgid "/// GPIO port 0 peripheral address\n" msgstr "" #: src/bare-metal/microcontrollers/mmio.md:19 -msgid "// GPIO peripheral offsets" +msgid "// GPIO peripheral offsets\n" msgstr "" #: src/bare-metal/microcontrollers/mmio.md:24 -msgid "// PIN_CNF fields" +msgid "// PIN_CNF fields\n" msgstr "" #: src/bare-metal/microcontrollers/mmio.md:34 #: src/bare-metal/microcontrollers/pacs.md:21 #: src/bare-metal/microcontrollers/hals.md:26 -msgid "// Configure GPIO 0 pins 21 and 28 as push-pull outputs." +msgid "// Configure GPIO 0 pins 21 and 28 as push-pull outputs.\n" msgstr "" #: src/bare-metal/microcontrollers/mmio.md:37 #: src/bare-metal/microcontrollers/mmio.md:59 msgid "" -"// SAFETY: The pointers are to valid peripheral control registers, and no // " -"aliases exist." +"// SAFETY: The pointers are to valid peripheral control registers, and no\n" +" // aliases exist.\n" msgstr "" #: src/bare-metal/microcontrollers/mmio.md:56 #: src/bare-metal/microcontrollers/pacs.md:39 #: src/bare-metal/microcontrollers/hals.md:30 -msgid "// Set pin 28 low and pin 21 high to turn the LED on." +msgid "// Set pin 28 low and pin 21 high to turn the LED on.\n" msgstr "" #: src/bare-metal/microcontrollers/mmio.md:72 @@ -15201,8 +15725,9 @@ msgstr "" #: src/bare-metal/microcontrollers/pacs.md:3 msgid "" -"`svd2rust` generates mostly-safe Rust wrappers for memory-mapped peripherals " -"from CMSIS-SVD files." +"[`svd2rust`](https://crates.io/crates/svd2rust) generates mostly-safe Rust " +"wrappers for memory-mapped peripherals from [CMSIS-SVD](https://www.keil.com/" +"pack/doc/CMSIS/SVD/html/index.html) files." msgstr "" #: src/bare-metal/microcontrollers/pacs.md:49 @@ -15240,12 +15765,14 @@ msgstr "" #: src/bare-metal/microcontrollers/hals.md:3 msgid "" -"HAL crates for many microcontrollers provide wrappers around various " -"peripherals. These generally implement traits from `embedded-hal`." +"[HAL crates](https://github.com/rust-embedded/awesome-embedded-rust#hal-" +"implementation-crates) for many microcontrollers provide wrappers around " +"various peripherals. These generally implement traits from [`embedded-hal`]" +"(https://crates.io/crates/embedded-hal)." msgstr "" #: src/bare-metal/microcontrollers/hals.md:23 -msgid "// Create HAL wrapper for GPIO port 0." +msgid "// Create HAL wrapper for GPIO port 0.\n" msgstr "" #: src/bare-metal/microcontrollers/hals.md:40 @@ -15290,11 +15817,11 @@ msgid "The type state pattern" msgstr "" #: src/bare-metal/microcontrollers/type-state.md:11 -msgid "// let gpio0_01_again = gpio0.p0_01; // Error, moved." +msgid "// let gpio0_01_again = gpio0.p0_01; // Error, moved.\n" msgstr "" #: src/bare-metal/microcontrollers/type-state.md:19 -msgid "// pin_input.is_high(); // Error, moved." +msgid "// pin_input.is_high(); // Error, moved.\n" msgstr "" #: src/bare-metal/microcontrollers/type-state.md:33 @@ -15330,8 +15857,8 @@ msgstr "" #: src/bare-metal/microcontrollers/embedded-hal.md:3 msgid "" -"The `embedded-hal` crate provides a number of traits covering common " -"microcontroller peripherals:" +"The [`embedded-hal`](https://crates.io/crates/embedded-hal) crate provides a " +"number of traits covering common microcontroller peripherals:" msgstr "" #: src/bare-metal/microcontrollers/embedded-hal.md:6 @@ -15353,12 +15880,15 @@ msgstr "" #: src/bare-metal/microcontrollers/embedded-hal.md:11 msgid "" "Similar traits for byte streams (e.g. UARTs), CAN buses and RNGs and broken " -"out into `embedded-io`, `embedded-can` and `rand_core` respectively." +"out into [`embedded-io`](https://crates.io/crates/embedded-io), [`embedded-" +"can`](https://crates.io/crates/embedded-can) and [`rand_core`](https://" +"crates.io/crates/rand_core) respectively." msgstr "" #: src/bare-metal/microcontrollers/embedded-hal.md:14 msgid "" -"Other crates then implement drivers in terms of these traits, e.g. an " +"Other crates then implement [drivers](https://github.com/rust-embedded/" +"awesome-embedded-rust#driver-crates) in terms of these traits, e.g. an " "accelerometer driver might need an I2C or SPI device instance." msgstr "" @@ -15376,19 +15906,22 @@ msgid "" msgstr "" #: src/bare-metal/microcontrollers/embedded-hal.md:23 -msgid "`embedded-hal-async` provides async versions of the traits." +msgid "" +"[`embedded-hal-async`](https://crates.io/crates/embedded-hal-async) provides " +"async versions of the traits." msgstr "" #: src/bare-metal/microcontrollers/embedded-hal.md:24 msgid "" -"`embedded-hal-nb` provides another approach to non-blocking I/O, based on " -"the `nb` crate." +"[`embedded-hal-nb`](https://crates.io/crates/embedded-hal-nb) provides " +"another approach to non-blocking I/O, based on the [`nb`](https://crates.io/" +"crates/nb) crate." msgstr "" #: src/bare-metal/microcontrollers/probe-rs.md:3 msgid "" -"probe-rs is a handy toolset for embedded debugging, like OpenOCD but better " -"integrated." +"[probe-rs](https://probe.rs/) is a handy toolset for embedded debugging, " +"like OpenOCD but better integrated." msgstr "" #: src/bare-metal/microcontrollers/probe-rs.md:6 @@ -15413,9 +15946,10 @@ msgstr "" #: src/bare-metal/microcontrollers/probe-rs.md:16 msgid "" -"CMSIS-DAP is an Arm standard protocol over USB for an in-circuit debugger to " -"access the CoreSight Debug Access Port of various Arm Cortex processors. " -"It's what the on-board debugger on the BBC micro:bit uses." +"[CMSIS-DAP](https://arm-software.github.io/CMSIS_5/DAP/html/index.html) is " +"an Arm standard protocol over USB for an in-circuit debugger to access the " +"CoreSight Debug Access Port of various Arm Cortex processors. It's what the " +"on-board debugger on the BBC micro:bit uses." msgstr "" #: src/bare-metal/microcontrollers/probe-rs.md:20 @@ -15438,8 +15972,9 @@ msgstr "" #: src/bare-metal/microcontrollers/probe-rs.md:26 msgid "" -"The Microsoft Debug Adapter Protocol lets VSCode and other IDEs debug code " -"running on any supported microcontroller." +"The [Microsoft Debug Adapter Protocol](https://microsoft.github.io/debug-" +"adapter-protocol/) lets VSCode and other IDEs debug code running on any " +"supported microcontroller." msgstr "" #: src/bare-metal/microcontrollers/probe-rs.md:30 @@ -15478,7 +16013,7 @@ msgid "Other projects" msgstr "" #: src/bare-metal/microcontrollers/other-projects.md:3 -msgid "RTIC" +msgid "[RTIC](https://rtic.rs/)" msgstr "" #: src/bare-metal/microcontrollers/other-projects.md:4 @@ -15491,16 +16026,15 @@ msgid "" msgstr "" #: src/bare-metal/microcontrollers/other-projects.md:6 -#, fuzzy -msgid "Embassy" -msgstr "vmbase" +msgid "[Embassy](https://embassy.dev/)" +msgstr "" #: src/bare-metal/microcontrollers/other-projects.md:7 msgid "`async` executors with priorities, timers, networking, USB" msgstr "" #: src/bare-metal/microcontrollers/other-projects.md:8 -msgid "TockOS" +msgid "[TockOS](https://www.tockos.org/documentation/getting-started)" msgstr "" #: src/bare-metal/microcontrollers/other-projects.md:9 @@ -15510,7 +16044,7 @@ msgid "" msgstr "" #: src/bare-metal/microcontrollers/other-projects.md:11 -msgid "Hubris" +msgid "[Hubris](https://hubris.oxide.computer/)" msgstr "" #: src/bare-metal/microcontrollers/other-projects.md:12 @@ -15520,11 +16054,13 @@ msgid "" msgstr "" #: src/bare-metal/microcontrollers/other-projects.md:14 -msgid "Bindings for FreeRTOS" +msgid "[Bindings for FreeRTOS](https://github.com/lobaro/FreeRTOS-rust)" msgstr "" #: src/bare-metal/microcontrollers/other-projects.md:15 -msgid "Some platforms have `std` implementations, e.g. esp-idf." +msgid "" +"Some platforms have `std` implementations, e.g. [esp-idf](https://esp-rs." +"github.io/book/overview/using-the-standard-library.html)." msgstr "" #: src/bare-metal/microcontrollers/other-projects.md:20 @@ -15562,9 +16098,10 @@ msgid "" "serial port." msgstr "" -#: src/exercises/bare-metal/morning.md src/exercises/bare-metal/afternoon.md -#, fuzzy -msgid "After looking at the exercises, you can look at the solutions provided." +#: src/exercises/bare-metal/morning.md +msgid "" +"After looking at the exercises, you can look at the [solutions](solutions-" +"morning.md) provided." msgstr "" "پس از دیدن تمرین‌ها، می‌توانید به [راه حل‌ها] (solutions-morning.md) ارائه شده " "نگاه کنید." @@ -15582,8 +16119,10 @@ msgstr "" #: src/exercises/bare-metal/compass.md:9 msgid "" -"Check the documentation for the `lsm303agr` and `microbit-v2` crates, as " -"well as the micro:bit hardware." +"Check the documentation for the [`lsm303agr`](https://docs.rs/lsm303agr/" +"latest/lsm303agr/) and [`microbit-v2`](https://docs.rs/microbit-v2/latest/" +"microbit/) crates, as well as the [micro:bit hardware](https://tech.microbit." +"org/hardware/)." msgstr "" #: src/exercises/bare-metal/compass.md:13 @@ -15598,27 +16137,28 @@ msgstr "" #: src/exercises/bare-metal/compass.md:15 msgid "" -"The LSM303AGR driver needs something implementing the `embedded_hal::" -"blocking::i2c::WriteRead` trait. The `microbit::hal::Twim` struct implements " -"this." +"The LSM303AGR driver needs something implementing the `embedded_hal::i2c::" +"I2c` trait. The [`microbit::hal::Twim`](https://docs.rs/microbit-v2/latest/" +"microbit/hal/struct.Twim.html) struct implements this." msgstr "" #: src/exercises/bare-metal/compass.md:19 msgid "" -"You have a `microbit::Board` struct with fields for the various pins and " -"peripherals." +"You have a [`microbit::Board`](https://docs.rs/microbit-v2/latest/microbit/" +"struct.Board.html) struct with fields for the various pins and peripherals." msgstr "" #: src/exercises/bare-metal/compass.md:22 msgid "" -"You can also look at the nRF52833 datasheet if you want, but it shouldn't be " -"necessary for this exercise." +"You can also look at the [nRF52833 datasheet](https://infocenter.nordicsemi." +"com/pdf/nRF52833_PS_v1.5.pdf) if you want, but it shouldn't be necessary for " +"this exercise." msgstr "" #: src/exercises/bare-metal/compass.md:26 msgid "" -"Download the exercise template and look in the `compass` directory for the " -"following files." +"Download the [exercise template](../../comprehensive-rust-exercises.zip) and " +"look in the `compass` directory for the following files." msgstr "" #: src/exercises/bare-metal/compass.md:29 src/exercises/bare-metal/rtc.md:22 @@ -15655,20 +16195,19 @@ msgid "Bare Metal Rust Morning Exercise" msgstr "" #: src/exercises/bare-metal/solutions-morning.md:5 -#: src/exercises/bare-metal/solutions-afternoon.md:5 -msgid "(back to exercise)" +msgid "([back to exercise](compass.md))" msgstr "" #: src/exercises/bare-metal/solutions-morning.md:34 -msgid "// Configure serial port." +msgid "// Configure serial port.\n" msgstr "" #: src/exercises/bare-metal/solutions-morning.md:42 -msgid "// Use the system timer as a delay provider." +msgid "// Use the system timer as a delay provider.\n" msgstr "" #: src/exercises/bare-metal/solutions-morning.md:45 -msgid "// Set up the I2C controller and Inertial Measurement Unit." +msgid "// Set up the I2C controller and Inertial Measurement Unit.\n" msgstr "" #: src/exercises/bare-metal/solutions-morning.md:46 @@ -15676,7 +16215,7 @@ msgid "\"Setting up IMU...\"" msgstr "" #: src/exercises/bare-metal/solutions-morning.md:64 -msgid "// Set up display and timer." +msgid "// Set up display and timer.\n" msgstr "" #: src/exercises/bare-metal/solutions-morning.md:71 @@ -15684,7 +16223,7 @@ msgid "\"Ready.\"" msgstr "" #: src/exercises/bare-metal/solutions-morning.md:74 -msgid "// Read compass data and log it to the serial port." +msgid "// Read compass data and log it to the serial port.\n" msgstr "" #: src/exercises/bare-metal/solutions-morning.md:82 @@ -15694,7 +16233,8 @@ msgstr "" #: src/exercises/bare-metal/solutions-morning.md:120 msgid "" "// If button A is pressed, switch to the next mode and briefly blink all " -"LEDs // on." +"LEDs\n" +" // on.\n" msgstr "" #: src/bare-metal/aps.md @@ -15705,7 +16245,8 @@ msgstr "" msgid "" "So far we've talked about microcontrollers, such as the Arm Cortex-M series. " "Now let's try writing something for Cortex-A. For simplicity we'll just work " -"with QEMU's aarch64 'virt' board." +"with QEMU's aarch64 ['virt'](https://qemu-project.gitlab.io/qemu/system/arm/" +"virt.html) board." msgstr "" #: src/bare-metal/aps.md @@ -15883,8 +16424,8 @@ msgstr "" #: src/bare-metal/aps/inline-assembly.md:20 msgid "" -"// SAFETY: this only uses the declared registers and doesn't do anything // " -"with memory." +"// SAFETY: this only uses the declared registers and doesn't do anything\n" +" // with memory.\n" msgstr "" #: src/bare-metal/aps/inline-assembly.md:23 @@ -15925,8 +16466,8 @@ msgstr "" #: src/bare-metal/aps/inline-assembly.md:40 msgid "" -"(If you actually want to do this, use the `smccc` crate which has wrappers " -"for all these functions.)" +"(If you actually want to do this, use the [`smccc`](https://crates.io/crates/" +"smccc) crate which has wrappers for all these functions.)" msgstr "" #: src/bare-metal/aps/inline-assembly.md:45 @@ -16016,42 +16557,48 @@ msgstr "" #: src/bare-metal/aps/uart.md:3 msgid "" -"The QEMU 'virt' machine has a PL011 UART, so let's write a driver for that." +"The QEMU 'virt' machine has a [PL011](https://developer.arm.com/" +"documentation/ddi0183/g) UART, so let's write a driver for that." msgstr "" #: src/bare-metal/aps/uart.md:9 -msgid "/// Minimal driver for a PL011 UART." +msgid "/// Minimal driver for a PL011 UART.\n" msgstr "" #: src/bare-metal/aps/uart.md:17 src/bare-metal/aps/better-uart/driver.md:13 msgid "" -"/// Constructs a new instance of the UART driver for a PL011 device at " -"the /// given base address. /// /// # Safety /// /// The given base address " -"must point to the 8 MMIO control registers of a /// PL011 device, which must " -"be mapped into the address space of the process /// as device memory and not " -"have any other aliases." +"/// Constructs a new instance of the UART driver for a PL011 device at the\n" +" /// given base address.\n" +" ///\n" +" /// # Safety\n" +" ///\n" +" /// The given base address must point to the 8 MMIO control registers of " +"a\n" +" /// PL011 device, which must be mapped into the address space of the " +"process\n" +" /// as device memory and not have any other aliases.\n" msgstr "" #: src/bare-metal/aps/uart.md:29 src/bare-metal/aps/better-uart/driver.md:25 -msgid "/// Writes a single byte to the UART." +msgid "/// Writes a single byte to the UART.\n" msgstr "" #: src/bare-metal/aps/uart.md:31 src/bare-metal/aps/better-uart/driver.md:27 -msgid "// Wait until there is room in the TX buffer." +msgid "// Wait until there is room in the TX buffer.\n" msgstr "" #: src/bare-metal/aps/uart.md:34 src/bare-metal/aps/uart.md:46 msgid "" -"// SAFETY: We know that the base address points to the control // registers " -"of a PL011 device which is appropriately mapped." +"// SAFETY: We know that the base address points to the control\n" +" // registers of a PL011 device which is appropriately mapped.\n" msgstr "" #: src/bare-metal/aps/uart.md:37 src/bare-metal/aps/better-uart/driver.md:33 -msgid "// Write to the TX buffer." +msgid "// Write to the TX buffer.\n" msgstr "" #: src/bare-metal/aps/uart.md:41 src/bare-metal/aps/better-uart/driver.md:37 -msgid "// Wait until the UART is no longer busy." +msgid "// Wait until the UART is no longer busy.\n" msgstr "" #: src/bare-metal/aps/uart.md:55 @@ -16090,8 +16637,8 @@ msgstr "" #: src/bare-metal/aps/uart/traits.md:17 msgid "" -"// SAFETY: `Uart` just contains a pointer to device memory, which can be // " -"accessed from any context." +"// SAFETY: `Uart` just contains a pointer to device memory, which can be\n" +"// accessed from any context.\n" msgstr "" #: src/bare-metal/aps/uart/traits.md:25 @@ -16112,10 +16659,11 @@ msgstr "" #: src/bare-metal/aps/better-uart.md:3 msgid "" -"The PL011 actually has a bunch more registers, and adding offsets to " -"construct pointers to access them is error-prone and hard to read. Plus, " -"some of them are bit fields which would be nice to access in a structured " -"way." +"The PL011 actually has [a bunch more registers](https://developer.arm.com/" +"documentation/ddi0183/g/programmers-model/summary-of-registers), and adding " +"offsets to construct pointers to access them is error-prone and hard to " +"read. Plus, some of them are bit fields which would be nice to access in a " +"structured way." msgstr "" #: src/bare-metal/aps/better-uart.md:7 @@ -16280,47 +16828,49 @@ msgid "There are also some ID registers which have been omitted for brevity." msgstr "" #: src/bare-metal/aps/better-uart/bitflags.md:3 -msgid "The `bitflags` crate is useful for working with bitflags." +msgid "" +"The [`bitflags`](https://crates.io/crates/bitflags) crate is useful for " +"working with bitflags." msgstr "" #: src/bare-metal/aps/better-uart/bitflags.md:10 -msgid "/// Flags from the UART flag register." +msgid "/// Flags from the UART flag register.\n" msgstr "" #: src/bare-metal/aps/better-uart/bitflags.md:14 -msgid "/// Clear to send." +msgid "/// Clear to send.\n" msgstr "" #: src/bare-metal/aps/better-uart/bitflags.md:16 -msgid "/// Data set ready." +msgid "/// Data set ready.\n" msgstr "" #: src/bare-metal/aps/better-uart/bitflags.md:18 -msgid "/// Data carrier detect." +msgid "/// Data carrier detect.\n" msgstr "" #: src/bare-metal/aps/better-uart/bitflags.md:20 -msgid "/// UART busy transmitting data." +msgid "/// UART busy transmitting data.\n" msgstr "" #: src/bare-metal/aps/better-uart/bitflags.md:22 -msgid "/// Receive FIFO is empty." +msgid "/// Receive FIFO is empty.\n" msgstr "" #: src/bare-metal/aps/better-uart/bitflags.md:24 -msgid "/// Transmit FIFO is full." +msgid "/// Transmit FIFO is full.\n" msgstr "" #: src/bare-metal/aps/better-uart/bitflags.md:26 -msgid "/// Receive FIFO is full." +msgid "/// Receive FIFO is full.\n" msgstr "" #: src/bare-metal/aps/better-uart/bitflags.md:28 -msgid "/// Transmit FIFO is empty." +msgid "/// Transmit FIFO is empty.\n" msgstr "" #: src/bare-metal/aps/better-uart/bitflags.md:30 -msgid "/// Ring indicator." +msgid "/// Ring indicator.\n" msgstr "" #: src/bare-metal/aps/better-uart/bitflags.md:38 @@ -16340,7 +16890,8 @@ msgstr "" #: src/bare-metal/aps/better-uart/registers.md:43 msgid "" -"`#[repr(C)]` tells the compiler to lay the struct fields out in order, " +"[`#[repr(C)]`](https://doc.rust-lang.org/reference/type-layout.html#the-c-" +"representation) tells the compiler to lay the struct fields out in order, " "following the same rules as C. This is necessary for our struct to have a " "predictable layout, as default Rust representation allows the compiler to " "(among other things) reorder fields however it sees fit." @@ -16351,30 +16902,30 @@ msgid "Now let's use the new `Registers` struct in our driver." msgstr "" #: src/bare-metal/aps/better-uart/driver.md:6 -msgid "/// Driver for a PL011 UART." +msgid "/// Driver for a PL011 UART.\n" msgstr "" #: src/bare-metal/aps/better-uart/driver.md:30 #: src/bare-metal/aps/better-uart/driver.md:56 msgid "" -"// SAFETY: We know that self.registers points to the control registers // of " -"a PL011 device which is appropriately mapped." +"// SAFETY: We know that self.registers points to the control registers\n" +" // of a PL011 device which is appropriately mapped.\n" msgstr "" #: src/bare-metal/aps/better-uart/driver.md:41 msgid "" -"/// Reads and returns a pending byte, or `None` if nothing has been /// " -"received." +"/// Reads and returns a pending byte, or `None` if nothing has been\n" +" /// received.\n" msgstr "" #: src/bare-metal/aps/better-uart/driver.md:47 msgid "" -"// SAFETY: We know that self.registers points to the control // registers of " -"a PL011 device which is appropriately mapped." +"// SAFETY: We know that self.registers points to the control\n" +" // registers of a PL011 device which is appropriately mapped.\n" msgstr "" #: src/bare-metal/aps/better-uart/driver.md:50 -msgid "// TODO: Check for error conditions in bits 8-11." +msgid "// TODO: Check for error conditions in bits 8-11.\n" msgstr "" #: src/bare-metal/aps/better-uart/driver.md:65 @@ -16397,15 +16948,15 @@ msgstr "" #: src/bare-metal/aps/better-uart/using.md:19 #: src/bare-metal/aps/logging/using.md:18 #: src/exercises/bare-metal/solutions-afternoon.md:33 -msgid "/// Base address of the primary PL011 UART." +msgid "/// Base address of the primary PL011 UART.\n" msgstr "" #: src/bare-metal/aps/better-uart/using.md:25 #: src/bare-metal/aps/logging/using.md:24 #: src/exercises/bare-metal/solutions-afternoon.md:44 msgid "" -"// SAFETY: `PL011_BASE_ADDRESS` is the base address of a PL011 device, " -"and // nothing else accesses that address range." +"// SAFETY: `PL011_BASE_ADDRESS` is the base address of a PL011 device, and\n" +" // nothing else accesses that address range.\n" msgstr "" #: src/bare-metal/aps/better-uart/using.md:29 @@ -16432,8 +16983,9 @@ msgstr "" #: src/bare-metal/aps/better-uart/using.md:51 msgid "" -"As in the inline assembly example, this `main` function is called from our " -"entry point code in `entry.S`. See the speaker notes there for details." +"As in the [inline assembly](../inline-assembly.md) example, this `main` " +"function is called from our entry point code in `entry.S`. See the speaker " +"notes there for details." msgstr "" #: src/bare-metal/aps/better-uart/using.md:54 @@ -16443,16 +16995,17 @@ msgstr "" #: src/bare-metal/aps/logging.md:3 msgid "" -"It would be nice to be able to use the logging macros from the `log` crate. " -"We can do this by implementing the `Log` trait." +"It would be nice to be able to use the logging macros from the [`log`]" +"(https://crates.io/crates/log) crate. We can do this by implementing the " +"`Log` trait." msgstr "" #: src/bare-metal/aps/logging.md:26 -msgid "\"\\[{}\\] {}\"" +msgid "\"[{}] {}\"" msgstr "" #: src/bare-metal/aps/logging.md:35 -msgid "/// Initialises UART logger." +msgid "/// Initialises UART logger.\n" msgstr "" #: src/bare-metal/aps/logging.md:48 @@ -16508,15 +17061,15 @@ msgstr "" #: src/bare-metal/aps/exceptions.md:72 msgid "" "We can think of exception handlers and our main execution context more or " -"less like different threads. `Send` and `Sync` will control what we can " -"share between them, just like with threads. For example, if we want to share " -"some value between exception handlers and the rest of the program, and it's " -"`Send` but not `Sync`, then we'll need to wrap it in something like a " -"`Mutex` and put it in a static." +"less like different threads. [`Send` and `Sync`](../../concurrency/send-sync." +"md) will control what we can share between them, just like with threads. For " +"example, if we want to share some value between exception handlers and the " +"rest of the program, and it's `Send` but not `Sync`, then we'll need to wrap " +"it in something like a `Mutex` and put it in a static." msgstr "" #: src/bare-metal/aps/other-projects.md:3 -msgid "oreboot" +msgid "[oreboot](https://github.com/oreboot/oreboot)" msgstr "" #: src/bare-metal/aps/other-projects.md:4 @@ -16532,7 +17085,9 @@ msgid "Relies on LinuxBoot rather than having many drivers itself." msgstr "" #: src/bare-metal/aps/other-projects.md:7 -msgid "Rust RaspberryPi OS tutorial" +msgid "" +"[Rust RaspberryPi OS tutorial](https://github.com/rust-embedded/rust-" +"raspberrypi-OS-tutorials)" msgstr "" #: src/bare-metal/aps/other-projects.md:8 @@ -16548,7 +17103,7 @@ msgid "" msgstr "" #: src/bare-metal/aps/other-projects.md:12 -msgid "`cargo-call-stack`" +msgid "[`cargo-call-stack`](https://crates.io/crates/cargo-call-stack)" msgstr "" #: src/bare-metal/aps/other-projects.md:13 @@ -16592,8 +17147,9 @@ msgstr "" #: src/bare-metal/useful-crates/zerocopy.md:3 msgid "" -"The `zerocopy` crate (from Fuchsia) provides traits and macros for safely " -"converting between byte sequences and other types." +"The [`zerocopy`](https://docs.rs/zerocopy/) crate (from Fuchsia) provides " +"traits and macros for safely converting between byte sequences and other " +"types." msgstr "" #: src/bare-metal/useful-crates/zerocopy.md:42 @@ -16630,20 +17186,21 @@ msgstr "" #: src/bare-metal/useful-crates/aarch64-paging.md:3 msgid "" -"The `aarch64-paging` crate lets you create page tables according to the " -"AArch64 Virtual Memory System Architecture." +"The [`aarch64-paging`](https://crates.io/crates/aarch64-paging) crate lets " +"you create page tables according to the AArch64 Virtual Memory System " +"Architecture." msgstr "" #: src/bare-metal/useful-crates/aarch64-paging.md:14 -msgid "// Create a new page table with identity mapping." +msgid "// Create a new page table with identity mapping.\n" msgstr "" #: src/bare-metal/useful-crates/aarch64-paging.md:16 -msgid "// Map a 2 MiB region of memory as read-only." +msgid "// Map a 2 MiB region of memory as read-only.\n" msgstr "" #: src/bare-metal/useful-crates/aarch64-paging.md:21 -msgid "// Set `TTBR0_EL1` to activate the page table." +msgid "// Set `TTBR0_EL1` to activate the page table.\n" msgstr "" #: src/bare-metal/useful-crates/aarch64-paging.md:28 @@ -16653,7 +17210,10 @@ msgid "" msgstr "" #: src/bare-metal/useful-crates/aarch64-paging.md:30 -msgid "This is used in Android for the Protected VM Firmware." +msgid "" +"This is used in Android for the [Protected VM Firmware](https://cs.android." +"com/android/platform/superproject/+/master:packages/modules/Virtualization/" +"pvmfw/)." msgstr "" #: src/bare-metal/useful-crates/aarch64-paging.md:31 @@ -16664,11 +17224,14 @@ msgstr "" #: src/bare-metal/useful-crates/buddy_system_allocator.md:3 msgid "" -"`buddy_system_allocator` is a third-party crate implementing a basic buddy " -"system allocator. It can be used both for `LockedHeap` implementing " -"`GlobalAlloc` so you can use the standard `alloc` crate (as we saw before), " -"or for allocating other address space. For example, we might want to " -"allocate MMIO space for PCI BARs:" +"[`buddy_system_allocator`](https://crates.io/crates/buddy_system_allocator) " +"is a third-party crate implementing a basic buddy system allocator. It can " +"be used both for [`LockedHeap`](https://docs.rs/buddy_system_allocator/0.9.0/" +"buddy_system_allocator/struct.LockedHeap.html) implementing [`GlobalAlloc`]" +"(https://doc.rust-lang.org/core/alloc/trait.GlobalAlloc.html) so you can use " +"the standard `alloc` crate (as we saw [before](../alloc.md)), or for " +"allocating other address space. For example, we might want to allocate MMIO " +"space for PCI BARs:" msgstr "" #: src/bare-metal/useful-crates/buddy_system_allocator.md:29 @@ -16685,10 +17248,10 @@ msgstr "" #: src/bare-metal/useful-crates/tinyvec.md:3 msgid "" "Sometimes you want something which can be resized like a `Vec`, but without " -"heap allocation. `tinyvec` provides this: a vector backed by an array or " -"slice, which could be statically allocated or on the stack, which keeps " -"track of how many elements are used and panics if you try to use more than " -"are allocated." +"heap allocation. [`tinyvec`](https://crates.io/crates/tinyvec) provides " +"this: a vector backed by an array or slice, which could be statically " +"allocated or on the stack, which keeps track of how many elements are used " +"and panics if you try to use more than are allocated." msgstr "" #: src/bare-metal/useful-crates/tinyvec.md:25 @@ -16711,8 +17274,8 @@ msgstr "" #: src/bare-metal/useful-crates/spin.md:7 msgid "" -"The `spin` crate provides spinlock-based equivalents of many of these " -"primitives." +"The [`spin`](https://crates.io/crates/spin) crate provides spinlock-based " +"equivalents of many of these primitives." msgstr "" #: src/bare-metal/useful-crates/spin.md:26 @@ -16727,8 +17290,9 @@ msgstr "" #: src/bare-metal/useful-crates/spin.md:29 msgid "" -"The `once_cell` crate also has some useful types for late initialisation " -"with a slightly different approach to `spin::once::Once`." +"The [`once_cell`](https://crates.io/crates/once_cell) crate also has some " +"useful types for late initialisation with a slightly different approach to " +"`spin::once::Once`." msgstr "" #: src/bare-metal/useful-crates/spin.md:31 @@ -16750,9 +17314,10 @@ msgstr "vmbase" #: src/bare-metal/android/vmbase.md:3 msgid "" -"For VMs running under crosvm on aarch64, the vmbase library provides a " -"linker script and useful defaults for the build rules, along with an entry " -"point, UART console logging and more." +"For VMs running under crosvm on aarch64, the [vmbase](https://android." +"googlesource.com/platform/packages/modules/Virtualization/+/refs/heads/" +"master/vmbase/) library provides a linker script and useful defaults for the " +"build rules, along with an entry point, UART console logging and more." msgstr "" #: src/bare-metal/android/vmbase.md:24 @@ -16771,6 +17336,14 @@ msgstr "" msgid "We will write a driver for the PL031 real-time clock device." msgstr "" +#: src/exercises/bare-metal/afternoon.md +msgid "" +"After looking at the exercises, you can look at the [solutions](solutions-" +"afternoon.md) provided." +msgstr "" +"پس از بررسی تمرین‌ها، می‌توانید به [راه‌حل ها](solutions-afternoon.md) ارائه " +"شده نگاهی بیندازید." + #: src/exercises/bare-metal/rtc.md:1 #: src/exercises/bare-metal/solutions-afternoon.md:3 msgid "RTC driver" @@ -16778,28 +17351,29 @@ msgstr "" #: src/exercises/bare-metal/rtc.md:3 msgid "" -"The QEMU aarch64 virt machine has a PL031 real-time clock at 0x9010000. For " -"this exercise, you should write a driver for it." +"The QEMU aarch64 virt machine has a [PL031](https://developer.arm.com/" +"documentation/ddi0224/c) real-time clock at 0x9010000. For this exercise, " +"you should write a driver for it." msgstr "" #: src/exercises/bare-metal/rtc.md:6 msgid "" "Use it to print the current time to the serial console. You can use the " -"`chrono` crate for date/time formatting." +"[`chrono`](https://crates.io/crates/chrono) crate for date/time formatting." msgstr "" #: src/exercises/bare-metal/rtc.md:8 msgid "" "Use the match register and raw interrupt status to busy-wait until a given " -"time, e.g. 3 seconds in the future. (Call `core::hint::spin_loop` inside the " -"loop.)" +"time, e.g. 3 seconds in the future. (Call [`core::hint::spin_loop`](https://" +"doc.rust-lang.org/core/hint/fn.spin_loop.html) inside the loop.)" msgstr "" #: src/exercises/bare-metal/rtc.md:11 msgid "" "_Extension if you have time:_ Enable and handle the interrupt generated by " -"the RTC match. You can use the driver provided in the `arm-gic` crate to " -"configure the Arm Generic Interrupt Controller." +"the RTC match. You can use the driver provided in the [`arm-gic`](https://" +"docs.rs/arm-gic/) crate to configure the Arm Generic Interrupt Controller." msgstr "" #: src/exercises/bare-metal/rtc.md:14 @@ -16814,8 +17388,8 @@ msgstr "" #: src/exercises/bare-metal/rtc.md:19 msgid "" -"Download the exercise template and look in the `rtc` directory for the " -"following files." +"Download the [exercise template](../../comprehensive-rust-exercises.zip) and " +"look in the `rtc` directory for the following files." msgstr "" #: src/exercises/bare-metal/rtc.md:79 @@ -16864,20 +17438,24 @@ msgstr "" msgid "Bare Metal Rust Afternoon" msgstr "عصرانه با Bare Metal Rust" +#: src/exercises/bare-metal/solutions-afternoon.md:5 +msgid "([back to exercise](rtc.md))" +msgstr "" + #: src/exercises/bare-metal/solutions-afternoon.md:7 msgid "_main.rs_:" msgstr "" #: src/exercises/bare-metal/solutions-afternoon.md:29 -msgid "/// Base addresses of the GICv3." +msgid "/// Base addresses of the GICv3.\n" msgstr "" #: src/exercises/bare-metal/solutions-afternoon.md:36 -msgid "/// Base address of the PL031 RTC." +msgid "/// Base address of the PL031 RTC.\n" msgstr "" #: src/exercises/bare-metal/solutions-afternoon.md:38 -msgid "/// The IRQ used by the PL031 RTC." +msgid "/// The IRQ used by the PL031 RTC.\n" msgstr "" #: src/exercises/bare-metal/solutions-afternoon.md:49 @@ -16886,15 +17464,15 @@ msgstr "" #: src/exercises/bare-metal/solutions-afternoon.md:51 msgid "" -"// SAFETY: `GICD_BASE_ADDRESS` and `GICR_BASE_ADDRESS` are the base // " -"addresses of a GICv3 distributor and redistributor respectively, and // " -"nothing else accesses those address ranges." +"// SAFETY: `GICD_BASE_ADDRESS` and `GICR_BASE_ADDRESS` are the base\n" +" // addresses of a GICv3 distributor and redistributor respectively, and\n" +" // nothing else accesses those address ranges.\n" msgstr "" #: src/exercises/bare-metal/solutions-afternoon.md:57 msgid "" -"// SAFETY: `PL031_BASE_ADDRESS` is the base address of a PL031 device, " -"and // nothing else accesses that address range." +"// SAFETY: `PL031_BASE_ADDRESS` is the base address of a PL031 device, and\n" +" // nothing else accesses that address range.\n" msgstr "" #: src/exercises/bare-metal/solutions-afternoon.md:62 @@ -16902,7 +17480,7 @@ msgid "\"RTC: {time}\"" msgstr "" #: src/exercises/bare-metal/solutions-afternoon.md:70 -msgid "// Wait for 3 seconds, without interrupts." +msgid "// Wait for 3 seconds, without interrupts.\n" msgstr "" #: src/exercises/bare-metal/solutions-afternoon.md:73 @@ -16923,7 +17501,7 @@ msgid "\"Finished waiting\"" msgstr "" #: src/exercises/bare-metal/solutions-afternoon.md:89 -msgid "// Wait another 3 seconds for an interrupt." +msgid "// Wait another 3 seconds for an interrupt.\n" msgstr "" #: src/exercises/bare-metal/solutions-afternoon.md:121 @@ -16931,52 +17509,57 @@ msgid "_pl031.rs_:" msgstr "" #: src/exercises/bare-metal/solutions-afternoon.md:128 -msgid "/// Data register" +msgid "/// Data register\n" msgstr "" #: src/exercises/bare-metal/solutions-afternoon.md:130 -msgid "/// Match register" +msgid "/// Match register\n" msgstr "" #: src/exercises/bare-metal/solutions-afternoon.md:132 -msgid "/// Load register" +msgid "/// Load register\n" msgstr "" #: src/exercises/bare-metal/solutions-afternoon.md:134 -msgid "/// Control register" +msgid "/// Control register\n" msgstr "" #: src/exercises/bare-metal/solutions-afternoon.md:137 -msgid "/// Interrupt Mask Set or Clear register" +msgid "/// Interrupt Mask Set or Clear register\n" msgstr "" #: src/exercises/bare-metal/solutions-afternoon.md:140 -msgid "/// Raw Interrupt Status" +msgid "/// Raw Interrupt Status\n" msgstr "" #: src/exercises/bare-metal/solutions-afternoon.md:143 -msgid "/// Masked Interrupt Status" +msgid "/// Masked Interrupt Status\n" msgstr "" #: src/exercises/bare-metal/solutions-afternoon.md:146 -msgid "/// Interrupt Clear Register" +msgid "/// Interrupt Clear Register\n" msgstr "" #: src/exercises/bare-metal/solutions-afternoon.md:150 -msgid "/// Driver for a PL031 real-time clock." +msgid "/// Driver for a PL031 real-time clock.\n" msgstr "" #: src/exercises/bare-metal/solutions-afternoon.md:158 msgid "" -"/// Constructs a new instance of the RTC driver for a PL031 device at " -"the /// given base address. /// /// # Safety /// /// The given base address " -"must point to the MMIO control registers of a /// PL031 device, which must " -"be mapped into the address space of the process /// as device memory and not " -"have any other aliases." +"/// Constructs a new instance of the RTC driver for a PL031 device at the\n" +" /// given base address.\n" +" ///\n" +" /// # Safety\n" +" ///\n" +" /// The given base address must point to the MMIO control registers of " +"a\n" +" /// PL031 device, which must be mapped into the address space of the " +"process\n" +" /// as device memory and not have any other aliases.\n" msgstr "" #: src/exercises/bare-metal/solutions-afternoon.md:170 -msgid "/// Reads the current RTC value." +msgid "/// Reads the current RTC value.\n" msgstr "" #: src/exercises/bare-metal/solutions-afternoon.md:172 @@ -16986,43 +17569,48 @@ msgstr "" #: src/exercises/bare-metal/solutions-afternoon.md:211 #: src/exercises/bare-metal/solutions-afternoon.md:218 msgid "" -"// SAFETY: We know that self.registers points to the control registers // of " -"a PL031 device which is appropriately mapped." +"// SAFETY: We know that self.registers points to the control registers\n" +" // of a PL031 device which is appropriately mapped.\n" msgstr "" #: src/exercises/bare-metal/solutions-afternoon.md:177 msgid "" -"/// Writes a match value. When the RTC value matches this then an " -"interrupt /// will be generated (if it is enabled)." +"/// Writes a match value. When the RTC value matches this then an interrupt\n" +" /// will be generated (if it is enabled).\n" msgstr "" #: src/exercises/bare-metal/solutions-afternoon.md:185 msgid "" "/// Returns whether the match register matches the RTC value, whether or " -"not /// the interrupt is enabled." +"not\n" +" /// the interrupt is enabled.\n" msgstr "" #: src/exercises/bare-metal/solutions-afternoon.md:194 msgid "" -"/// Returns whether there is currently an interrupt pending. /// /// This " -"should be true if and only if `matched` returns true and the /// interrupt " -"is masked." +"/// Returns whether there is currently an interrupt pending.\n" +" ///\n" +" /// This should be true if and only if `matched` returns true and the\n" +" /// interrupt is masked.\n" msgstr "" #: src/exercises/bare-metal/solutions-afternoon.md:205 msgid "" -"/// Sets or clears the interrupt mask. /// /// When the mask is true the " -"interrupt is enabled; when it is false the /// interrupt is disabled." +"/// Sets or clears the interrupt mask.\n" +" ///\n" +" /// When the mask is true the interrupt is enabled; when it is false " +"the\n" +" /// interrupt is disabled.\n" msgstr "" #: src/exercises/bare-metal/solutions-afternoon.md:216 -msgid "/// Clears a pending interrupt, if any." +msgid "/// Clears a pending interrupt, if any.\n" msgstr "" #: src/exercises/bare-metal/solutions-afternoon.md:223 msgid "" -"// SAFETY: `Rtc` just contains a pointer to device memory, which can be // " -"accessed from any context." +"// SAFETY: `Rtc` just contains a pointer to device memory, which can be\n" +"// accessed from any context.\n" msgstr "" #: src/concurrency/welcome.md @@ -17127,11 +17715,15 @@ msgid "How do we wait around for the spawned thread to complete?" msgstr "" #: src/concurrency/threads/plain.md:42 -msgid "`thread::spawn` returns a `JoinHandle`. Look at the docs." +msgid "" +"[`thread::spawn`](https://doc.rust-lang.org/std/thread/fn.spawn.html) " +"returns a `JoinHandle`. Look at the docs." msgstr "" #: src/concurrency/threads/plain.md:43 -msgid "`JoinHandle` has a `.join()` method that blocks." +msgid "" +"`JoinHandle` has a [`.join()`](https://doc.rust-lang.org/std/thread/struct." +"JoinHandle.html#method.join) method that blocks." msgstr "" #: src/concurrency/threads/plain.md:45 @@ -17149,11 +17741,15 @@ msgid "Look at docs again:" msgstr "" #: src/concurrency/threads/plain.md:50 -msgid "`thread::spawn`'s closure returns `T`" +msgid "" +"[`thread::spawn`](https://doc.rust-lang.org/std/thread/fn.spawn.html)'s " +"closure returns `T`" msgstr "" #: src/concurrency/threads/plain.md:51 -msgid "`JoinHandle` `.join()` returns `thread::Result`" +msgid "" +"`JoinHandle` [`.join()`](https://doc.rust-lang.org/std/thread/struct." +"JoinHandle.html#method.join) returns `thread::Result`" msgstr "" #: src/concurrency/threads/plain.md:53 @@ -17171,7 +17767,9 @@ msgid "Trigger a panic in the thread. Note that this doesn't panic `main`." msgstr "" #: src/concurrency/threads/plain.md:58 -msgid "Access the panic payload. This is a good time to talk about `Any`." +msgid "" +"Access the panic payload. This is a good time to talk about [`Any`](https://" +"doc.rust-lang.org/std/any/index.html)." msgstr "" #: src/concurrency/threads/plain.md:60 @@ -17213,7 +17811,9 @@ msgid "Normal threads cannot borrow from their environment:" msgstr "" #: src/concurrency/threads/scoped.md:20 -msgid "However, you can use a scoped thread for this:" +msgid "" +"However, you can use a [scoped thread](https://doc.rust-lang.org/std/thread/" +"fn.scope.html) for this:" msgstr "" #: src/concurrency/threads/scoped.md:41 @@ -17321,21 +17921,22 @@ msgstr "" #: src/concurrency/send-sync/marker-traits.md:6 msgid "" -"`Send`: a type `T` is `Send` if it is safe to move a `T` across a thread " -"boundary." +"[`Send`](https://doc.rust-lang.org/std/marker/trait.Send.html): a type `T` " +"is `Send` if it is safe to move a `T` across a thread boundary." msgstr "" #: src/concurrency/send-sync/marker-traits.md:8 msgid "" -"`Sync`: a type `T` is `Sync` if it is safe to move a `&T` across a thread " -"boundary." +"[`Sync`](https://doc.rust-lang.org/std/marker/trait.Sync.html): a type `T` " +"is `Sync` if it is safe to move a `&T` across a thread boundary." msgstr "" #: src/concurrency/send-sync/marker-traits.md:11 msgid "" -"`Send` and `Sync` are unsafe traits. The compiler will automatically derive " -"them for your types as long as they only contain `Send` and `Sync` types. " -"You can also implement them manually when you know it is valid." +"`Send` and `Sync` are [unsafe traits](../../unsafe-rust/unsafe-traits.md). " +"The compiler will automatically derive them for your types as long as they " +"only contain `Send` and `Sync` types. You can also implement them manually " +"when you know it is valid." msgstr "" #: src/concurrency/send-sync/marker-traits.md:22 @@ -17350,7 +17951,8 @@ msgstr "" #: src/concurrency/send-sync/send.md:3 msgid "" -"A type `T` is `Send` if it is safe to move a `T` value to another thread." +"A type `T` is [`Send`](https://doc.rust-lang.org/std/marker/trait.Send.html) " +"if it is safe to move a `T` value to another thread." msgstr "" #: src/concurrency/send-sync/send.md:5 @@ -17368,8 +17970,8 @@ msgstr "" #: src/concurrency/send-sync/sync.md:3 msgid "" -"A type `T` is `Sync` if it is safe to access a `T` value from multiple " -"threads at the same time." +"A type `T` is [`Sync`](https://doc.rust-lang.org/std/marker/trait.Sync.html) " +"if it is safe to access a `T` value from multiple threads at the same time." msgstr "" #: src/concurrency/send-sync/sync.md:6 @@ -17504,7 +18106,9 @@ msgid "Mutex" msgstr "Mutex" #: src/concurrency/shared-state/arc.md:3 -msgid "`Arc` allows shared read-only access via `Arc::clone`:" +msgid "" +"[`Arc`](https://doc.rust-lang.org/std/sync/struct.Arc.html) allows shared " +"read-only access via `Arc::clone`:" msgstr "" #: src/concurrency/shared-state/arc.md:16 @@ -17547,8 +18151,10 @@ msgstr "" #: src/concurrency/shared-state/mutex.md:3 msgid "" -"`Mutex` ensures mutual exclusion _and_ allows mutable access to `T` " -"behind a read-only interface (another form of interior mutability):" +"[`Mutex`](https://doc.rust-lang.org/std/sync/struct.Mutex.html) ensures " +"mutual exclusion _and_ allows mutable access to `T` behind a read-only " +"interface (another form of [interior mutability](../../borrowing/interior-" +"mutability.md)):" msgstr "" #: src/concurrency/shared-state/mutex.md:12 @@ -17558,7 +18164,8 @@ msgstr "" #: src/concurrency/shared-state/mutex.md:23 msgid "" -"Notice how we have a `impl Sync for Mutex` blanket " +"Notice how we have a [`impl Sync for Mutex`](https://doc.rust-" +"lang.org/std/sync/struct.Mutex.html#impl-Sync-for-Mutex%3CT%3E) blanket " "implementation." msgstr "" @@ -17599,8 +18206,8 @@ msgid "" "If the thread that held the `Mutex` panicked, the `Mutex` becomes " "\"poisoned\" to signal that the data it protected might be in an " "inconsistent state. Calling `lock()` on a poisoned mutex fails with a " -"`PoisonError`. You can call `into_inner()` on the error to recover the data " -"regardless." +"[`PoisonError`](https://doc.rust-lang.org/std/sync/struct.PoisonError.html). " +"You can call `into_inner()` on the error to recover the data regardless." msgstr "" #: src/concurrency/shared-state/example.md:3 @@ -17608,7 +18215,7 @@ msgid "Let us see `Arc` and `Mutex` in action:" msgstr "" #: src/concurrency/shared-state/example.md:6 -msgid "// use std::sync::{Arc, Mutex};" +msgid "// use std::sync::{Arc, Mutex};\n" msgstr "" #: src/concurrency/shared-state/example.md:24 @@ -17643,10 +18250,6 @@ msgid "" "possible." msgstr "" -#: src/concurrency/sync-exercises.md src/concurrency/async-exercises.md -msgid "This segment should take about 1 hour and 10 minutes. It contains:" -msgstr "" - #: src/concurrency/sync-exercises/dining-philosophers.md:3 msgid "The dining philosophers problem is a classic problem in concurrency:" msgstr "" @@ -17665,14 +18268,17 @@ msgstr "" #: src/concurrency/sync-exercises/dining-philosophers.md:13 msgid "" -"You will need a local Cargo installation for this exercise. Copy the code " -"below to a file called `src/main.rs`, fill out the blanks, and test that " -"`cargo run` does not deadlock:" +"You will need a local [Cargo installation](../../cargo/running-locally.md) " +"for this exercise. Copy the code below to a file called `src/main.rs`, fill " +"out the blanks, and test that `cargo run` does not deadlock:" msgstr "" #: src/concurrency/sync-exercises/dining-philosophers.md:28 #: src/concurrency/async-exercises/dining-philosophers.md:23 -msgid "// left_fork: ... // right_fork: ... // thoughts: ..." +msgid "" +"// left_fork: ...\n" +" // right_fork: ...\n" +" // thoughts: ...\n" msgstr "" #: src/concurrency/sync-exercises/dining-philosophers.md:36 @@ -17684,7 +18290,7 @@ msgstr "" #: src/concurrency/sync-exercises/dining-philosophers.md:41 #: src/concurrency/async-exercises/solutions.md:31 -msgid "// Pick up forks..." +msgid "// Pick up forks...\n" msgstr "" #: src/concurrency/sync-exercises/dining-philosophers.md:42 @@ -17732,23 +18338,23 @@ msgstr "" #: src/concurrency/sync-exercises/dining-philosophers.md:51 #: src/concurrency/async-exercises/dining-philosophers.md:48 #: src/concurrency/async-exercises/solutions.md:63 -msgid "// Create forks" +msgid "// Create forks\n" msgstr "" #: src/concurrency/sync-exercises/dining-philosophers.md:53 #: src/concurrency/async-exercises/dining-philosophers.md:50 #: src/concurrency/async-exercises/solutions.md:67 -msgid "// Create philosophers" +msgid "// Create philosophers\n" msgstr "" #: src/concurrency/sync-exercises/dining-philosophers.md:55 -msgid "// Make each of them think and eat 100 times" +msgid "// Make each of them think and eat 100 times\n" msgstr "" #: src/concurrency/sync-exercises/dining-philosophers.md:57 #: src/concurrency/async-exercises/dining-philosophers.md:54 #: src/concurrency/async-exercises/solutions.md:95 -msgid "// Output their thoughts" +msgid "// Output their thoughts\n" msgstr "" #: src/concurrency/sync-exercises/dining-philosophers.md:61 @@ -17775,9 +18381,10 @@ msgstr "" #: src/concurrency/sync-exercises/link-checker.md:8 msgid "" -"For this, you will need an HTTP client such as `reqwest`. You will also need " -"a way to find links, we can use `scraper`. Finally, we'll need some way of " -"handling errors, we will use `thiserror`." +"For this, you will need an HTTP client such as [`reqwest`](https://docs.rs/" +"reqwest/). You will also need a way to find links, we can use [`scraper`]" +"(https://docs.rs/scraper/). Finally, we'll need some way of handling errors, " +"we will use [`thiserror`](https://docs.rs/thiserror/)." msgstr "" #: src/concurrency/sync-exercises/link-checker.md:12 @@ -17883,8 +18490,9 @@ msgstr "" #: src/concurrency/sync-exercises/solutions.md:51 msgid "" -"// To avoid a deadlock, we have to break the symmetry // somewhere. This " -"will swap the forks without deinitializing // either of them." +"// To avoid a deadlock, we have to break the symmetry\n" +" // somewhere. This will swap the forks without deinitializing\n" +" // either of them.\n" msgstr "" #: src/concurrency/sync-exercises/solutions.md:75 @@ -17896,17 +18504,18 @@ msgid "Link Checker" msgstr "" #: src/concurrency/sync-exercises/solutions.md:150 -msgid "/// Determine whether links within the given page should be extracted." +msgid "" +"/// Determine whether links within the given page should be extracted.\n" msgstr "" #: src/concurrency/sync-exercises/solutions.md:158 msgid "" -"/// Mark the given page as visited, returning false if it had already /// " -"been visited." +"/// Mark the given page as visited, returning false if it had already\n" +" /// been visited.\n" msgstr "" #: src/concurrency/sync-exercises/solutions.md:184 -msgid "// The sender got dropped. No more commands coming in." +msgid "// The sender got dropped. No more commands coming in.\n" msgstr "" #: src/concurrency/sync-exercises/solutions.md:225 @@ -18014,8 +18623,10 @@ msgstr "" #: src/concurrency/async/futures.md:3 msgid "" -"`Future` is a trait, implemented by objects that represent an operation that " -"may not be complete yet. A future can be polled, and `poll` returns a `Poll`." +"[`Future`](https://doc.rust-lang.org/std/future/trait.Future.html) is a " +"trait, implemented by objects that represent an operation that may not be " +"complete yet. A future can be polled, and `poll` returns a [`Poll`](https://" +"doc.rust-lang.org/std/task/enum.Poll.html)." msgstr "" #: src/concurrency/async/futures.md:23 @@ -18066,24 +18677,26 @@ msgstr "" #: src/concurrency/async/runtimes.md:7 msgid "" -"Tokio: performant, with a well-developed ecosystem of functionality like " -"Hyper for HTTP or Tonic for gRPC." +"[Tokio](https://tokio.rs/): performant, with a well-developed ecosystem of " +"functionality like [Hyper](https://hyper.rs/) for HTTP or [Tonic](https://" +"github.com/hyperium/tonic) for gRPC." msgstr "" #: src/concurrency/async/runtimes.md:10 msgid "" -"async-std: aims to be a \"std for async\", and includes a basic runtime in " -"`async::task`." +"[async-std](https://async.rs/): aims to be a \"std for async\", and includes " +"a basic runtime in `async::task`." msgstr "" #: src/concurrency/async/runtimes.md:12 -msgid "smol: simple and lightweight" +msgid "[smol](https://docs.rs/smol/latest/smol/): simple and lightweight" msgstr "" #: src/concurrency/async/runtimes.md:14 msgid "" -"Several larger applications have their own runtimes. For example, Fuchsia " -"already has one." +"Several larger applications have their own runtimes. For example, [Fuchsia]" +"(https://fuchsia.googlesource.com/fuchsia/+/refs/heads/main/src/lib/fuchsia-" +"async/src/lib.rs) already has one." msgstr "" #: src/concurrency/async/runtimes.md:21 @@ -18201,7 +18814,10 @@ msgid "" msgstr "" #: src/concurrency/async/tasks.md:42 -msgid "Try connecting to it with a TCP connection tool like nc or telnet." +msgid "" +"Try connecting to it with a TCP connection tool like [nc](https://www.unix." +"com/man-page/linux/1/nc/) or [telnet](https://www.unix.com/man-page/linux/1/" +"telnet/)." msgstr "" #: src/concurrency/async/tasks.md:46 @@ -18255,7 +18871,7 @@ msgstr "" #: src/concurrency/async-control-flow/channels.md:38 msgid "" "Overall, the interface is similar to the `sync` channels as seen in the " -"morning class." +"[morning class](../channels.md)." msgstr "" #: src/concurrency/async-control-flow/channels.md:41 @@ -18264,9 +18880,9 @@ msgstr "" #: src/concurrency/async-control-flow/channels.md:43 msgid "" -"The Flume crate has channels that implement both `sync` and `async` `send` " -"and `recv`. This can be convenient for complex applications with both IO and " -"heavy CPU processing tasks." +"The [Flume](https://docs.rs/flume/latest/flume/) crate has channels that " +"implement both `sync` and `async` `send` and `recv`. This can be convenient " +"for complex applications with both IO and heavy CPU processing tasks." msgstr "" #: src/concurrency/async-control-flow/channels.md:47 @@ -18486,16 +19102,16 @@ msgstr "" #: src/concurrency/async-pitfalls/pin.md:20 msgid "" -"// A work item. In this case, just sleep for the given time and respond // " -"with a message on the `respond_on` channel." +"// A work item. In this case, just sleep for the given time and respond\n" +"// with a message on the `respond_on` channel.\n" msgstr "" #: src/concurrency/async-pitfalls/pin.md:28 -msgid "// A worker which listens for work on a queue and performs it." +msgid "// A worker which listens for work on a queue and performs it.\n" msgstr "" #: src/concurrency/async-pitfalls/pin.md:35 -msgid "// Pretend to work." +msgid "// Pretend to work.\n" msgstr "" #: src/concurrency/async-pitfalls/pin.md:38 @@ -18503,11 +19119,11 @@ msgid "\"failed to send response\"" msgstr "" #: src/concurrency/async-pitfalls/pin.md:41 -msgid "// TODO: report number of iterations every 100ms" +msgid "// TODO: report number of iterations every 100ms\n" msgstr "" #: src/concurrency/async-pitfalls/pin.md:45 -msgid "// A requester which requests work and waits for it to complete." +msgid "// A requester which requests work and waits for it to complete.\n" msgstr "" #: src/concurrency/async-pitfalls/pin.md:52 @@ -18556,23 +19172,23 @@ msgstr "" msgid "" "This compiles, but once the timeout expires it is `Poll::Ready` on every " "iteration (a fused future would help with this). Update to reset " -"`timeout_fut` every time it expires." +"`timeout_fut` every time it expires:" msgstr "" -#: src/concurrency/async-pitfalls/pin.md:108 +#: src/concurrency/async-pitfalls/pin.md:119 msgid "" "Box allocates on the heap. In some cases, `std::pin::pin!` (only recently " "stabilized, with older code often using `tokio::pin!`) is also an option, " "but that is difficult to use for a future that is reassigned." msgstr "" -#: src/concurrency/async-pitfalls/pin.md:112 +#: src/concurrency/async-pitfalls/pin.md:123 msgid "" "Another alternative is to not use `pin` at all but spawn another task that " "will send to a `oneshot` channel every 100ms." msgstr "" -#: src/concurrency/async-pitfalls/pin.md:115 +#: src/concurrency/async-pitfalls/pin.md:126 msgid "" "Data that contains pointers to itself is called self-referential. Normally, " "the Rust borrow checker would prevent self-referential data from being " @@ -18581,14 +19197,14 @@ msgid "" "borrow checker." msgstr "" -#: src/concurrency/async-pitfalls/pin.md:121 +#: src/concurrency/async-pitfalls/pin.md:132 msgid "" "`Pin` is a wrapper around a reference. An object cannot be moved from its " "place using a pinned pointer. However, it can still be moved through an " "unpinned pointer." msgstr "" -#: src/concurrency/async-pitfalls/pin.md:125 +#: src/concurrency/async-pitfalls/pin.md:136 msgid "" "The `poll` method of the `Future` trait uses `Pin<&mut Self>` instead of " "`&mut Self` to refer to the instance. That's why it can only be called on a " @@ -18623,8 +19239,9 @@ msgstr "" #: src/concurrency/async-pitfalls/async-traits.md:16 msgid "" -"If we do need `dyn` support, the crate async_trait provides a workaround " -"through a macro, with some caveats:" +"If we do need `dyn` support, the crate [async_trait](https://docs.rs/async-" +"trait/latest/async_trait/) provides a workaround through a macro, with some " +"caveats:" msgstr "" #: src/concurrency/async-pitfalls/async-traits.md:46 @@ -18645,7 +19262,9 @@ msgstr "" msgid "" "The challenges in language support for `async trait` are deep Rust and " "probably not worth describing in-depth. Niko Matsakis did a good job of " -"explaining them in this post if you are interested in digging deeper." +"explaining them in [this post](https://smallcultfollowing.com/babysteps/" +"blog/2019/10/26/async-fn-in-traits-are-hard/) if you are interested in " +"digging deeper." msgstr "" #: src/concurrency/async-pitfalls/async-traits.md:77 @@ -18663,6 +19282,7 @@ msgid "" msgstr "" #: src/concurrency/async-pitfalls/cancellation.md:35 +#: src/concurrency/async-pitfalls/cancellation.md:102 msgid "\"not UTF-8\"" msgstr "" @@ -18703,24 +19323,27 @@ msgid "" msgstr "" #: src/concurrency/async-pitfalls/cancellation.md:98 -msgid "// prefix buf and bytes with self." +msgid "// prefix buf and bytes with self.\n" msgstr "" -#: src/concurrency/async-pitfalls/cancellation.md:107 +#: src/concurrency/async-pitfalls/cancellation.md:108 msgid "" -"`Interval::tick` is cancellation-safe because it keeps track of whether a " +"[`Interval::tick`](https://docs.rs/tokio/latest/tokio/time/struct.Interval." +"html#method.tick) is cancellation-safe because it keeps track of whether a " "tick has been 'delivered'." msgstr "" -#: src/concurrency/async-pitfalls/cancellation.md:111 +#: src/concurrency/async-pitfalls/cancellation.md:112 msgid "" -"`AsyncReadExt::read` is cancellation-safe because it either returns or " -"doesn't read data." +"[`AsyncReadExt::read`](https://docs.rs/tokio/latest/tokio/io/trait." +"AsyncReadExt.html#method.read) is cancellation-safe because it either " +"returns or doesn't read data." msgstr "" -#: src/concurrency/async-pitfalls/cancellation.md:114 +#: src/concurrency/async-pitfalls/cancellation.md:115 msgid "" -"`AsyncBufReadExt::read_line` is similar to the example and _isn't_ " +"[`AsyncBufReadExt::read_line`](https://docs.rs/tokio/latest/tokio/io/trait." +"AsyncBufReadExt.html#method.read_line) is similar to the example and _isn't_ " "cancellation-safe. See its documentation for details and alternatives." msgstr "" @@ -18731,24 +19354,26 @@ msgid "Dining Philosophers --- Async" msgstr "فلسفه Dining" #: src/concurrency/async-exercises/dining-philosophers.md:3 -msgid "See dining philosophers for a description of the problem." +msgid "" +"See [dining philosophers](../sync-exercises/dining-philosophers.md) for a " +"description of the problem." msgstr "" #: src/concurrency/async-exercises/dining-philosophers.md:6 msgid "" -"As before, you will need a local Cargo installation for this exercise. Copy " -"the code below to a file called `src/main.rs`, fill out the blanks, and test " -"that `cargo run` does not deadlock:" +"As before, you will need a local [Cargo installation](../../cargo/running-" +"locally.md) for this exercise. Copy the code below to a file called `src/" +"main.rs`, fill out the blanks, and test that `cargo run` does not deadlock:" msgstr "" #: src/concurrency/async-exercises/dining-philosophers.md:37 #: src/concurrency/async-exercises/solutions.md:29 -msgid "// Keep trying until we have both forks" +msgid "// Keep trying until we have both forks\n" msgstr "" #: src/concurrency/async-exercises/dining-philosophers.md:52 #: src/concurrency/async-exercises/solutions.md:85 -msgid "// Make them think and eat" +msgid "// Make them think and eat\n" msgstr "" #: src/concurrency/async-exercises/dining-philosophers.md:58 @@ -18792,8 +19417,10 @@ msgstr "" #: src/concurrency/async-exercises/chat-app.md:9 msgid "" -"For this, we use a broadcast channel on the server, and `tokio_websockets` " -"for the communication between the client and the server." +"For this, we use [a broadcast channel](https://docs.rs/tokio/latest/tokio/" +"sync/broadcast/fn.channel.html) on the server, and [`tokio_websockets`]" +"(https://docs.rs/tokio-websockets/) for the communication between the client " +"and the server." msgstr "" #: src/concurrency/async-exercises/chat-app.md:12 @@ -18815,7 +19442,7 @@ msgid "" "[dependencies]\n" "futures-util = { version = \"0.3.30\", features = [\"sink\"] }\n" "http = \"1.1.0\"\n" -"tokio = { version = \"1.38.0\", features = [\"full\"] }\n" +"tokio = { version = \"1.38.1\", features = [\"full\"] }\n" "tokio-websockets = { version = \"0.8.3\", features = [\"client\", " "\"fastrand\", \"server\", \"sha1_smol\"] }\n" "```" @@ -18828,29 +19455,35 @@ msgstr "" #: src/concurrency/async-exercises/chat-app.md:33 msgid "" "You are going to need the following functions from `tokio` and " -"`tokio_websockets`. Spend a few minutes to familiarize yourself with the API." +"[`tokio_websockets`](https://docs.rs/tokio-websockets/). Spend a few minutes " +"to familiarize yourself with the API." msgstr "" #: src/concurrency/async-exercises/chat-app.md:37 msgid "" -"StreamExt::next() implemented by `WebSocketStream`: for asynchronously " -"reading messages from a Websocket Stream." +"[StreamExt::next()](https://docs.rs/futures-util/0.3.28/futures_util/stream/" +"trait.StreamExt.html#method.next) implemented by `WebSocketStream`: for " +"asynchronously reading messages from a Websocket Stream." msgstr "" #: src/concurrency/async-exercises/chat-app.md:39 msgid "" -"SinkExt::send() implemented by `WebSocketStream`: for asynchronously sending " -"messages on a Websocket Stream." +"[SinkExt::send()](https://docs.rs/futures-util/0.3.28/futures_util/sink/" +"trait.SinkExt.html#method.send) implemented by `WebSocketStream`: for " +"asynchronously sending messages on a Websocket Stream." msgstr "" #: src/concurrency/async-exercises/chat-app.md:41 msgid "" -"Lines::next_line(): for asynchronously reading user messages from the " +"[Lines::next_line()](https://docs.rs/tokio/latest/tokio/io/struct.Lines." +"html#method.next_line): for asynchronously reading user messages from the " "standard input." msgstr "" #: src/concurrency/async-exercises/chat-app.md:43 -msgid "Sender::subscribe(): for subscribing to a broadcast channel." +msgid "" +"[Sender::subscribe()](https://docs.rs/tokio/latest/tokio/sync/broadcast/" +"struct.Sender.html#method.subscribe): for subscribing to a broadcast channel." msgstr "" #: src/concurrency/async-exercises/chat-app.md:45 @@ -18864,7 +19497,8 @@ msgid "" "for the server. You could potentially make them two separate Cargo projects, " "but we are going to put them in a single Cargo project with two binaries. " "For this to work, the client and the server code should go under `src/bin` " -"(see the documentation)." +"(see the [documentation](https://doc.rust-lang.org/cargo/reference/cargo-" +"targets.html#binaries))." msgstr "" #: src/concurrency/async-exercises/chat-app.md:54 @@ -18881,7 +19515,7 @@ msgstr "" #: src/concurrency/async-exercises/chat-app.md:77 #: src/concurrency/async-exercises/chat-app.md:124 -msgid "// TODO: For a hint, see the description of the task below." +msgid "// TODO: For a hint, see the description of the task below.\n" msgstr "" #: src/concurrency/async-exercises/chat-app.md:85 @@ -18901,7 +19535,7 @@ msgstr "" #: src/concurrency/async-exercises/chat-app.md:93 #: src/concurrency/async-exercises/solutions.md:162 -msgid "// Wrap the raw TCP stream into a websocket." +msgid "// Wrap the raw TCP stream into a websocket.\n" msgstr "" #: src/concurrency/async-exercises/chat-app.md:102 @@ -18957,22 +19591,22 @@ msgstr "" #: src/concurrency/async-exercises/solutions.md:35 msgid "" -"// If we didn't get the left fork, drop the right fork if we // have it and " -"let other tasks make progress." +"// If we didn't get the left fork, drop the right fork if we\n" +" // have it and let other tasks make progress.\n" msgstr "" #: src/concurrency/async-exercises/solutions.md:42 msgid "" -"// If we didn't get the right fork, drop the left fork and let // other " -"tasks make progress." +"// If we didn't get the right fork, drop the left fork and let\n" +" // other tasks make progress.\n" msgstr "" #: src/concurrency/async-exercises/solutions.md:54 -msgid "// The locks are dropped here" +msgid "// The locks are dropped here\n" msgstr "" #: src/concurrency/async-exercises/solutions.md:82 -msgid "// tx is dropped here, so we don't need to explicitly drop it later" +msgid "// tx is dropped here, so we don't need to explicitly drop it later\n" msgstr "" #: src/concurrency/async-exercises/solutions.md:97 @@ -18985,9 +19619,9 @@ msgstr "" #: src/concurrency/async-exercises/solutions.md:126 msgid "" -"// A continuous loop for concurrently performing two tasks: (1) receiving // " -"messages from `ws_stream` and broadcasting them, and (2) receiving // " -"messages on `bcast_rx` and sending them to the client." +"// A continuous loop for concurrently performing two tasks: (1) receiving\n" +" // messages from `ws_stream` and broadcasting them, and (2) receiving\n" +" // messages on `bcast_rx` and sending them to the client.\n" msgstr "" #: src/concurrency/async-exercises/solutions.md:135 @@ -18995,7 +19629,7 @@ msgid "\"From client {addr:?} {text:?}\"" msgstr "" #: src/concurrency/async-exercises/solutions.md:190 -msgid "// Continuous loop for concurrently sending and receiving messages." +msgid "// Continuous loop for concurrently sending and receiving messages.\n" msgstr "" #: src/concurrency/async-exercises/solutions.md:197 @@ -19012,7 +19646,8 @@ msgstr "" msgid "" "We've had a lot of fun putting the course together. The course is not " "perfect, so if you spotted any mistakes or have ideas for improvements, " -"please get in contact with us on GitHub. We would love to hear from you." +"please get in [contact with us on GitHub](https://github.com/google/" +"comprehensive-rust/discussions). We would love to hear from you." msgstr "" #: src/glossary.md @@ -19026,7 +19661,7 @@ msgstr "" #: src/glossary.md msgid "" "allocate: \n" -"Dynamic memory allocation on the heap." +"Dynamic memory allocation on [the heap](memory-management/review.md)." msgstr "" #: src/glossary.md @@ -19039,19 +19674,19 @@ msgstr "" msgid "" "Bare-metal Rust: \n" "Low-level Rust development, often deployed to a system without an operating " -"system. See Bare-metal Rust." +"system. See [Bare-metal Rust](bare-metal.md)." msgstr "" #: src/glossary.md msgid "" "block: \n" -"See Blocks and _scope_." +"See [Blocks](control-flow-basics/blocks-and-scopes.md) and _scope_." msgstr "" #: src/glossary.md msgid "" "borrow: \n" -"See Borrowing." +"See [Borrowing](borrowing/shared.md)." msgstr "" #: src/glossary.md @@ -19082,7 +19717,7 @@ msgstr "" #: src/glossary.md msgid "" "channel: \n" -"Used to safely pass messages between threads." +"Used to safely pass messages [between threads](concurrency/channels.md)." msgstr "" #: src/glossary.md @@ -19100,7 +19735,7 @@ msgstr "" #: src/glossary.md msgid "" "Concurrency in Rust: \n" -"See Concurrency in Rust." +"See [Concurrency in Rust](concurrency/welcome.md)." msgstr "" #: src/glossary.md @@ -19330,13 +19965,13 @@ msgstr "" #: src/glossary.md msgid "" "Rust in Android: \n" -"See Rust in Android." +"See [Rust in Android](android.md)." msgstr "" #: src/glossary.md msgid "" "Rust in Chromium: \n" -"See Rust in Chromium." +"See [Rust in Chromium](chromium.md)." msgstr "" #: src/glossary.md @@ -19368,7 +20003,8 @@ msgstr "" #: src/glossary.md msgid "" "string: \n" -"A data type storing textual data. See Strings for more." +"A data type storing textual data. See [Strings](references/strings.html) for " +"more." msgstr "" #: src/glossary.md @@ -19450,7 +20086,7 @@ msgstr "" msgid "" "unit test: \n" "Rust comes with built-in support for running small unit tests and larger " -"integration tests. See Unit Tests." +"integration tests. See [Unit Tests](testing/unit-tests.html)." msgstr "" #: src/glossary.md @@ -19463,7 +20099,7 @@ msgstr "" msgid "" "unsafe: \n" "The subset of Rust which allows you to trigger _undefined behavior_. See " -"Unsafe Rust." +"[Unsafe Rust](unsafe-rust/unsafe.md)." msgstr "" #: src/glossary.md @@ -19492,26 +20128,29 @@ msgstr "" #: src/other-resources.md msgid "" -"The Rust Programming Language: the canonical free book about Rust. Covers " -"the language in detail and includes a few projects for people to build." +"[The Rust Programming Language](https://doc.rust-lang.org/book/): the " +"canonical free book about Rust. Covers the language in detail and includes a " +"few projects for people to build." msgstr "" #: src/other-resources.md msgid "" -"Rust By Example: covers the Rust syntax via a series of examples which " -"showcase different constructs. Sometimes includes small exercises where you " -"are asked to expand on the code in the examples." +"[Rust By Example](https://doc.rust-lang.org/rust-by-example/): covers the " +"Rust syntax via a series of examples which showcase different constructs. " +"Sometimes includes small exercises where you are asked to expand on the code " +"in the examples." msgstr "" #: src/other-resources.md msgid "" -"Rust Standard Library: full documentation of the standard library for Rust." +"[Rust Standard Library](https://doc.rust-lang.org/std/): full documentation " +"of the standard library for Rust." msgstr "" #: src/other-resources.md msgid "" -"The Rust Reference: an incomplete book which describes the Rust grammar and " -"memory model." +"[The Rust Reference](https://doc.rust-lang.org/reference/): an incomplete " +"book which describes the Rust grammar and memory model." msgstr "" #: src/other-resources.md @@ -19520,20 +20159,23 @@ msgstr "" #: src/other-resources.md msgid "" -"The Rustonomicon: covers unsafe Rust, including working with raw pointers " -"and interfacing with other languages (FFI)." +"[The Rustonomicon](https://doc.rust-lang.org/nomicon/): covers unsafe Rust, " +"including working with raw pointers and interfacing with other languages " +"(FFI)." msgstr "" #: src/other-resources.md msgid "" -"Asynchronous Programming in Rust: covers the new asynchronous programming " -"model which was introduced after the Rust Book was written." +"[Asynchronous Programming in Rust](https://rust-lang.github.io/async-book/): " +"covers the new asynchronous programming model which was introduced after the " +"Rust Book was written." msgstr "" #: src/other-resources.md msgid "" -"The Embedded Rust Book: an introduction to using Rust on embedded devices " -"without an operating system." +"[The Embedded Rust Book](https://doc.rust-lang.org/stable/embedded-book/): " +"an introduction to using Rust on embedded devices without an operating " +"system." msgstr "" #: src/other-resources.md @@ -19546,70 +20188,80 @@ msgstr "" #: src/other-resources.md msgid "" -"Learn Rust the Dangerous Way: covers Rust from the perspective of low-level " -"C programmers." +"[Learn Rust the Dangerous Way](http://cliffle.com/p/dangerust/): covers Rust " +"from the perspective of low-level C programmers." msgstr "" #: src/other-resources.md msgid "" -"Rust for Embedded C Programmers: covers Rust from the perspective of " -"developers who write firmware in C." +"[Rust for Embedded C Programmers](https://opentitan.org/book/doc/" +"rust_for_c_devs.html): covers Rust from the perspective of developers who " +"write firmware in C." msgstr "" #: src/other-resources.md msgid "" -"Rust for professionals: covers the syntax of Rust using side-by-side " -"comparisons with other languages such as C, C++, Java, JavaScript, and " -"Python." +"[Rust for professionals](https://overexact.com/rust-for-professionals/): " +"covers the syntax of Rust using side-by-side comparisons with other " +"languages such as C, C++, Java, JavaScript, and Python." msgstr "" #: src/other-resources.md -msgid "Rust on Exercism: 100+ exercises to help you learn Rust." +msgid "" +"[Rust on Exercism](https://exercism.org/tracks/rust): 100+ exercises to help " +"you learn Rust." msgstr "" #: src/other-resources.md msgid "" -"Ferrous Teaching Material: a series of small presentations covering both " -"basic and advanced part of the Rust language. Other topics such as " -"WebAssembly, and async/await are also covered." +"[Ferrous Teaching Material](https://ferrous-systems.github.io/teaching-" +"material/index.html): a series of small presentations covering both basic " +"and advanced part of the Rust language. Other topics such as WebAssembly, " +"and async/await are also covered." msgstr "" #: src/other-resources.md msgid "" -"Advanced testing for Rust applications: a self-paced workshop that goes " -"beyond Rust's built-in testing framework. It covers `googletest`, snapshot " -"testing, mocking as well as how to write your own custom test harness." +"[Advanced testing for Rust applications](https://github.com/mainmatter/rust-" +"advanced-testing-workshop): a self-paced workshop that goes beyond Rust's " +"built-in testing framework. It covers `googletest`, snapshot testing, " +"mocking as well as how to write your own custom test harness." msgstr "" #: src/other-resources.md msgid "" -"Beginner's Series to Rust and Take your first steps with Rust: two Rust " -"guides aimed at new developers. The first is a set of 35 videos and the " -"second is a set of 11 modules which covers Rust syntax and basic constructs." +"[Beginner's Series to Rust](https://docs.microsoft.com/en-us/shows/beginners-" +"series-to-rust/) and [Take your first steps with Rust](https://docs." +"microsoft.com/en-us/learn/paths/rust-first-steps/): two Rust guides aimed at " +"new developers. The first is a set of 35 videos and the second is a set of " +"11 modules which covers Rust syntax and basic constructs." msgstr "" #: src/other-resources.md msgid "" -"Learn Rust With Entirely Too Many Linked Lists: in-depth exploration of " -"Rust's memory management rules, through implementing a few different types " -"of list structures." +"[Learn Rust With Entirely Too Many Linked Lists](https://rust-unofficial." +"github.io/too-many-lists/): in-depth exploration of Rust's memory management " +"rules, through implementing a few different types of list structures." msgstr "" #: src/other-resources.md -msgid "Please see the Little Book of Rust Books for even more Rust books." +msgid "" +"Please see the [Little Book of Rust Books](https://lborb.github.io/book/) " +"for even more Rust books." msgstr "" #: src/credits.md msgid "" "The material here builds on top of the many great sources of Rust " -"documentation. See the page on other resources for a full list of useful " -"resources." +"documentation. See the page on [other resources](other-resources.md) for a " +"full list of useful resources." msgstr "" #: src/credits.md msgid "" "The material of Comprehensive Rust is licensed under the terms of the Apache " -"2.0 license, please see `LICENSE` for details." +"2.0 license, please see [`LICENSE`](https://github.com/google/comprehensive-" +"rust/blob/main/LICENSE) for details." msgstr "" #: src/credits.md @@ -19618,9 +20270,10 @@ msgstr "" #: src/credits.md msgid "" -"Some examples and exercises have been copied and adapted from Rust by " -"Example. Please see the `third_party/rust-by-example/` directory for " -"details, including the license terms." +"Some examples and exercises have been copied and adapted from [Rust by " +"Example](https://doc.rust-lang.org/rust-by-example/). Please see the " +"`third_party/rust-by-example/` directory for details, including the license " +"terms." msgstr "" #: src/credits.md @@ -19629,9 +20282,9 @@ msgstr "" #: src/credits.md msgid "" -"Some exercises have been copied and adapted from Rust on Exercism. Please " -"see the `third_party/rust-on-exercism/` directory for details, including the " -"license terms." +"Some exercises have been copied and adapted from [Rust on Exercism](https://" +"exercism.org/tracks/rust). Please see the `third_party/rust-on-exercism/` " +"directory for details, including the license terms." msgstr "" #: src/credits.md @@ -19640,156 +20293,51 @@ msgstr "" #: src/credits.md msgid "" -"The Interoperability with C++ section uses an image from CXX. Please see the " -"`third_party/cxx/` directory for details, including the license terms." +"The [Interoperability with C++](android/interoperability/cpp.md) section " +"uses an image from [CXX](https://cxx.rs/). Please see the `third_party/cxx/` " +"directory for details, including the license terms." msgstr "" -#, fuzzy -#~ msgid "Static and Const" -#~ msgstr "نمادهای ایستا و ثابت" +#~ msgid "1 hour and 20 minutes" +#~ msgstr "۱ ساعت و ۲۰ دقیقه" -#, fuzzy -#~ msgid "Slices and Lifetimes" -#~ msgstr "چرخه حیات" +#~ msgid "1 hour and 40 minutes" +#~ msgstr "۱ ساعت ۴۰ دقیقه" -#, fuzzy -#~ msgid "String References" -#~ msgstr "ارجاعات تعلیق شده" +#~ msgid "Day 2 Afternoon (4 hours, including breaks)" +#~ msgstr "روز دوم بعدازظهر (4 ساعت با احتساب استراحت)" -#~ msgid "Control Flow" -#~ msgstr "کنترل جریان" +#~ msgid "You can use " +#~ msgstr "شما می توانید استفاده کنید " #, fuzzy -#~ msgid "[Pattern Matching](../pattern-matching.md) (50 minutes)" -#~ msgstr "" -#~ "به [تطبیق الگو](../pattern-matching.md) مراجعه کنید تا در مورد الگوها در " -#~ "Rust اطلاعات بیشتری کسب کنید." +#~ msgid "`String` is an owned, heap-allocated buffer of UTF-8 bytes." +#~ msgstr "`String` یک بافر متعلق به پشته از UTF-8 بایت است." -#~ msgid "Arrow-Left" -#~ msgstr "Arrow-Left" - -#~ msgid "Arrow-Right" -#~ msgstr "Arrow-Right" - -#~ msgid "Ctrl + Enter" -#~ msgstr "Ctrl + Enter" - -#~ msgid "s" -#~ msgstr "s" - -#~ msgid "" -#~ "[Brazilian Portuguese](https://google.github.io/comprehensive-rust/pt-" -#~ "BR/) by [@rastringer](https://github.com/rastringer), [@hugojacob]" -#~ "(https://github.com/hugojacob), [@joaovicmendes](https://github.com/" -#~ "joaovicmendes), and [@henrif75](https://github.com/henrif75)." -#~ msgstr "" -#~ "[پرتغالی برزیلی](https://google.github.io/comprehensive-rust/pt-BR/) توسط " -#~ "[@rastringer](https://github.com/rastringer), [@hugojacob](https://github." -#~ "com/hugojacob), [@joaovicmendes](https://github.com/joaovicmendes) و " -#~ "[@henrif75](https://github.com/henrif75)." - -#~ msgid "" -#~ "[Chinese (Simplified)](https://google.github.io/comprehensive-rust/zh-" -#~ "CN/) by [@suetfei](https://github.com/suetfei), [@wnghl](https://github." -#~ "com/wnghl), [@anlunx](https://github.com/anlunx), [@kongy](https://github." -#~ "com/kongy), [@noahdragon](https://github.com/noahdragon), [@superwhd]" -#~ "(https://github.com/superwhd), [@SketchK](https://github.com/SketchK), " -#~ "and [@nodmp](https://github.com/nodmp)." -#~ msgstr "" -#~ "[چینی (ساده‌شده)](https://google.github.io/comprehensive-rust/zh-CN/) توسط " -#~ "[@suetfei](https://github.com/suetfei), [@wnghl](https://github.com/" -#~ "wnghl), [@anlunx](https://github.com/anlunx), [@kongy](https://github.com/" -#~ "kongy), [@noahdragon](https://github.com/noahdragon), [@superwhd](https://" -#~ "github.com/superwhd), [@SketchK](https://github.com/SketchK) و [@nodmp]" -#~ "(https://github.com/nodmp)." - -#~ msgid "" -#~ "[Chinese (Traditional)](https://google.github.io/comprehensive-rust/zh-" -#~ "TW/) by [@hueich](https://github.com/hueich), [@victorhsieh](https://" -#~ "github.com/victorhsieh), [@mingyc](https://github.com/mingyc), " -#~ "[@kuanhungchen](https://github.com/kuanhungchen), and [@johnathan79717]" -#~ "(https://github.com/johnathan79717)." -#~ msgstr "" -#~ "[چینی (سنتی)](https://google.github.io/comprehensive-rust/zh-TW/) توسط " -#~ "[@hueich](https://github.com/hueich), [@victorhsieh](https://github.com/" -#~ "victorhsieh), [@mingyc](https://github.com/mingyc), [@kuanhungchen]" -#~ "(https://github.com/kuanhungchen) و [@johnathan79717](https://github.com/" -#~ "johnathan79717)." - -#~ msgid "" -#~ "[Korean](https://google.github.io/comprehensive-rust/ko/) by [@keispace]" -#~ "(https://github.com/keispace), [@jiyongp](https://github.com/jiyongp), " -#~ "and [@jooyunghan](https://github.com/jooyunghan)." -#~ msgstr "" -#~ "[کره ای](https://google.github.io/comprehensive-rust/ko/) توسط [@keispace]" -#~ "(https://github.com/keispace), [@jiyongp](https://github.com/jiyongp) و " -#~ "[@jooyunghan](https://github.com/jooyunghan)." - -#~ msgid "" -#~ "[Spanish](https://google.github.io/comprehensive-rust/es/) by [@deavid]" -#~ "(https://github.com/deavid)." -#~ msgstr "" -#~ "[Spanish](https://google.github.io/comprehensive-rust/es/) توسط [@deavid]" -#~ "(https://github.com/deavid)." - -#~ msgid "" -#~ "[Bengali](https://google.github.io/comprehensive-rust/bn/) by " -#~ "[@raselmandol](https://github.com/raselmandol)." -#~ msgstr "" -#~ "[بنگالی](https://google.github.io/comprehensive-rust/bn/) توسط " -#~ "[@raselmandol](https://github.com/raselmandol)." - -#~ msgid "" -#~ "[French](https://google.github.io/comprehensive-rust/fr/) by [@KookaS]" -#~ "(https://github.com/KookaS) and [@vcaen](https://github.com/vcaen)." -#~ msgstr "" -#~ "[فرانسویی](https://google.github.io/comprehensive-rust/fr/) توسط [@KookaS]" -#~ "(https://github.com/KookaS) و [@vcaen](https://github.com/vcaen)." +#~ msgid "`match` expressions" +#~ msgstr "عبارت `match`" -#~ msgid "" -#~ "[German](https://google.github.io/comprehensive-rust/de/) by [@Throvn]" -#~ "(https://github.com/Throvn) and [@ronaldfw](https://github.com/ronaldfw)." -#~ msgstr "" -#~ "[آلمانی](https://google.github.io/comprehensive-rust/de/) توسط [@Throvn]" -#~ "(https://github.com/Throvn) و [@ronaldfw](https://github.com/ronaldfw)." +#~ msgid "Box" +#~ msgstr "Box" -#~ msgid "" -#~ "[Japanese](https://google.github.io/comprehensive-rust/ja/) by [@CoinEZ-" -#~ "JPN](https://github.com/CoinEZ) and [@momotaro1105](https://github.com/" -#~ "momotaro1105)." -#~ msgstr "" -#~ "[ژاپنی](https://google.github.io/comprehensive-rust/ja/) توسط [@CoinEZ-" -#~ "JPN](https://github.com/CoinEZ) و [@momotaro1105](https://github.com/" -#~ "momotaro1105)." +#~ msgid "Conditionals" +#~ msgstr "شرط ها" -#~ msgid "" -#~ "[workspaces](https://doc.rust-lang.org/cargo/reference/workspaces.html)" -#~ msgstr "" -#~ "[workspaces](https://doc.rust-lang.org/cargo/reference/workspaces.html)" +#~ msgid "Static and Const" +#~ msgstr "Static و Const" -#~ msgid "" -#~ "[build scripting](https://doc.rust-lang.org/cargo/reference/build-scripts." -#~ "html)" -#~ msgstr "" -#~ "[build scripting](https://doc.rust-lang.org/cargo/reference/build-scripts." -#~ "html)" +#~ msgid "Control Flow" +#~ msgstr "کنترل جریان" -#~ msgid "" -#~ "[global installation](https://doc.rust-lang.org/cargo/commands/cargo-" -#~ "install.html)" +#, fuzzy +#~ msgid "[Pattern Matching](../pattern-matching.md) (50 minutes)" #~ msgstr "" -#~ "[global installation](https://doc.rust-lang.org/cargo/commands/cargo-" -#~ "install.html)" - -#~ msgid "You can use " -#~ msgstr "همان طور که مشاهده می‌کنید" +#~ "به [تطبیق الگو](../pattern-matching.md) مراجعه کنید تا در مورد الگوها در " +#~ "Rust اطلاعات بیشتری کسب کنید." -#~ msgid "" -#~ "Rust supports many [platforms and architectures](https://doc.rust-lang." -#~ "org/nightly/rustc/platform-support.html):" -#~ msgstr "" -#~ " راست از بسیاری از [بسترها و معماری‌ها](https://doc.rust-lang.org/nightly/" -#~ "rustc/platform-support.html) پشتیبانی می کند :" +#, fuzzy +#~ msgid "`String` - a modifiable, owned string." +#~ msgstr "`String` یک بافر رشته‌ای قابل تغییر است." #~ msgid "Much of the Rust syntax will be familiar to you from C, C++ or Java:" #~ msgstr "بسیاری از دستور زبان Rust مشابه زبان‌های C، C++ یا Java خواهد بود:" @@ -19940,18 +20488,6 @@ msgstr "" #~ "به [تطبیق الگو](../pattern-matching.md) مراجعه کنید تا در مورد الگوها در " #~ "Rust اطلاعات بیشتری کسب کنید." -#~ msgid "`match` expressions" -#~ msgstr "عبارت `match`" - -#, fuzzy -#~ msgid "" -#~ "All of the details about [loops](https://doc.rust-lang.org/stable/" -#~ "reference/expressions/loop-expr.html)." -#~ msgstr "" -#~ "اگر می‌خواهید زودتر از یک حلقه خارج شوید، از [`break`](https://doc.rust-" -#~ "lang.org/reference/expressions/loop-expr.html#break-expressions) استفاده " -#~ "کنید," - #~ msgid "Rust terminology:" #~ msgstr "اصطلاحات راست:" @@ -19967,13 +20503,6 @@ msgstr "" #~ msgid "// Undefined behavior if abs misbehaves.\n" #~ msgstr "هیچ رفتار تعریف نشده‌ای در زمان اجرا:" -#~ msgid "" -#~ "After looking at the exercises, you can look at the [solutions](solutions-" -#~ "afternoon.md) provided." -#~ msgstr "" -#~ "پس از بررسی تمرین‌ها، می‌توانید به [راه‌حل ها](solutions-afternoon.md) ارائه " -#~ "شده نگاهی بیندازید." - #, fuzzy #~ msgid "\"aarch64-linux-gnu\"" #~ msgstr "aarch64-paging" @@ -20094,9 +20623,6 @@ msgstr "" #~ msgid "Option and Result" #~ msgstr "Option و Result" -#~ msgid "Box" -#~ msgstr "Box" - #~ msgid "Iterators and Ownership" #~ msgstr "تکرار کننده ها و مالکیت" @@ -20578,10 +21104,10 @@ msgstr "" #~ msgstr "" #~ "سرریز عدد صحیح از طریق پرچم زمان کامپایل [`overflow-checks`](https://doc." #~ "rust-lang.org/rustc/codegen-options/index.html#overflow-checks) تعریف شده " -#~ "است. اگر فعال باشد، برنامه پانیک خواهد کرد (یک خرابی به صورت کنترل شده)، " -#~ "در غیر این صورت wrap-around خواهید داشت.به طور پیش فرض، در حالت توسعه " -#~ "`debug (cargo build)` شما پانیک خواهید داشت. و در حالت گرفتن خروجی برای " -#~ "پروداکشن `release (cargo build --release)` حالت wrap-around خواهید داشت." +#~ "است. اگر فعال باشد، برنامه خطا خواهد کرد (یک خرابی به صورت کنترل شده)، در " +#~ "غیر این صورت wrap-around خواهید داشت.به طور پیش فرض، در حالت توسعه `debug " +#~ "(cargo build)` شما خطا خواهید داشت. و در حالت گرفتن خروجی برای پروداکشن " +#~ "`release (cargo build --release)` حالت wrap-around خواهید داشت." #~ msgid "" #~ "Bounds checking cannot be disabled with a compiler flag. It can also not " @@ -20886,6 +21412,9 @@ msgstr "" #~ "تکمیل خودکار در ویرایشگر خود استفاده کنید. برای جزئیات بیشتر در مورد نصب " #~ "راست، صفحه مربوط به [استفاده از کارگو](../../cargo.md) را ببینید." +#~ msgid "Alternatively, use the Rust Playground." +#~ msgstr "در غیر این صورت از `Rust Playground` استفاده کنید." + #~ msgid "" #~ "The code snippets are not editable on purpose: the inline code snippets " #~ "lose their state if you navigate away from the page." @@ -21021,8 +21550,8 @@ msgstr "" #~ "preview of issues of ownership that will come later in the afternoon." #~ msgstr "" #~ "استفاده از ارجاع `&array` در بخش `for " -#~ "n in &array` پیش‌نمایشی کوچکی از مسئله مالکیت است که بعداً توی قسمت " -#~ "عصر به ان خواهیم پرداخت." +#~ "n in &array` پیش‌نمایشی کوچکی از مسئله مالکیت است در قسمت عصر که " +#~ "بعداً به ان خواهیم پرداخت." #~ msgid "Without the `&`..." #~ msgstr "بدون استفاده از `&` ..." @@ -21050,9 +21579,9 @@ msgstr "" #~ "expressions work similarly in Rust." #~ msgstr "" #~ "همانطور که دیدیم، `if` در Rust یک عبارت است. عبارت `if` برای آن استفاده " -#~ "میشود که یکی از ۲ بلوک شرطی را در راست ایجاد کند. توجه داشته باشید که در " -#~ "راست این بلاک های `if` میتوانند یک مقدار را برگرداند و اصطلاحا یک مقدار " -#~ "داشته باشند. بقیه عبارات کنترل جریان نیز مشابه این کار میکنند." +#~ "می‌شود که یکی از ۲ بلوک شرطی را در راست ایجاد کند. توجه داشته باشید که در " +#~ "راست این بلاک های `if` میتوانند یک مقدار را برگرداند و در اصطلاح یک " +#~ "مقدار داشته باشند. بقیه عبارات کنترل جریان نیز مشابه این کار میکنند." #~ msgid "" #~ "The same rule is used for functions: the value of the function body is "