diff --git a/po/fa.po b/po/fa.po index c3e3e7bd..9730163e 100644 --- a/po/fa.po +++ b/po/fa.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Comprehensive Rust 🦀\n" "POT-Creation-Date: 2024-07-24T09:42:45+03:30\n" -"PO-Revision-Date: 2024-08-05 19:35+0330\n" +"PO-Revision-Date: 2024-08-07 22:37+0330\n" "Last-Translator: alix1383 \n" "Language-Team: Persian\n" "Language: fa\n" @@ -338,11 +338,11 @@ msgstr "Generics" #: src/SUMMARY.md src/generics.md src/generics/generic-functions.md:1 msgid "Generic Functions" -msgstr "" +msgstr "توابع Generic" #: src/SUMMARY.md src/generics.md src/generics/generic-data.md:1 msgid "Generic Data Types" -msgstr "انواع داده‌ها جنریک (Generic Data Types)" +msgstr "دیتا تایپ‌های Generic" #: src/SUMMARY.md src/generics/generic-traits.md:1 msgid "Generic Traits" @@ -350,25 +350,24 @@ msgstr "Generic Traits" #: src/SUMMARY.md src/generics.md src/generics/trait-bounds.md:1 msgid "Trait Bounds" -msgstr "صفات مرزی (Trait Bounds)" +msgstr "Trait Bounds" #: src/SUMMARY.md src/generics/impl-trait.md:1 msgid "`impl Trait`" -msgstr "" +msgstr "`impl Trait`" #: src/SUMMARY.md src/generics/dyn-trait.md:1 -#, fuzzy msgid "`dyn Trait`" -msgstr "صفات Async" +msgstr "`dyn Trait`" #: src/SUMMARY.md src/generics/exercise.md:1 msgid "Exercise: Generic `min`" -msgstr "" +msgstr "تمرین: Generic `min`" #: src/SUMMARY.md src/running-the-course/course-structure.md:44 #: src/welcome-day-2-afternoon.md src/std-types.md msgid "Standard Library Types" -msgstr "کتابخانه‌ استاندارد انواع داده" +msgstr "کتابخانه‌ استاندارد تایپ‌ها" #: src/SUMMARY.md src/std-types.md src/std-types/std.md:1 msgid "Standard Library" @@ -380,24 +379,24 @@ msgstr "مستندات" #: src/SUMMARY.md msgid "`Option`" -msgstr "" +msgstr "`Option`" #: src/SUMMARY.md src/error-handling/result.md:1 msgid "`Result`" -msgstr "" +msgstr "`Result`" #: src/SUMMARY.md src/android/aidl/types/primitives.md:14 #: src/android/interoperability/cpp/type-mapping.md:5 msgid "`String`" -msgstr "" +msgstr "`String`" #: src/SUMMARY.md src/std-types/vec.md:1 msgid "`Vec`" -msgstr "" +msgstr "`Vec`" #: src/SUMMARY.md src/std-types/hashmap.md:1 src/bare-metal/no_std.md msgid "`HashMap`" -msgstr "" +msgstr "`HashMap`" #: src/SUMMARY.md src/std-types.md src/std-types/exercise.md:1 msgid "Exercise: Counter" @@ -406,7 +405,7 @@ msgstr "تمرین: شمارنده" #: src/SUMMARY.md src/running-the-course/course-structure.md:45 #: src/welcome-day-2-afternoon.md src/std-traits.md msgid "Standard Library Traits" -msgstr "کتابخانه استاندارد برای تریت‌ها" +msgstr "کتابخانه استاندارد Traits" #: src/SUMMARY.md src/std-traits.md src/std-traits/comparisons.md:1 #: src/concurrency/welcome-async.md @@ -419,27 +418,27 @@ msgstr "اپراتورها" #: src/SUMMARY.md src/std-traits/from-and-into.md:1 msgid "`From` and `Into`" -msgstr "" +msgstr "`From` and `Into`" #: src/SUMMARY.md src/std-traits.md src/std-traits/casting.md:1 msgid "Casting" -msgstr "" +msgstr "Casting" #: src/SUMMARY.md src/std-traits/read-and-write.md:1 msgid "`Read` and `Write`" -msgstr "" +msgstr "`Read` and `Write`" #: src/SUMMARY.md msgid "`Default`, struct update syntax" -msgstr "" +msgstr "`Default`, struct update syntax" #: src/SUMMARY.md src/std-traits.md src/std-traits/closures.md:1 msgid "Closures" -msgstr "" +msgstr "Closures" #: src/SUMMARY.md src/std-traits.md src/std-traits/exercise.md:1 msgid "Exercise: ROT13" -msgstr "" +msgstr "تمرین: ROT13" #: src/SUMMARY.md msgid "Day 3: Morning" @@ -6002,37 +6001,37 @@ 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 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:" -msgstr "" +msgstr "این بخش باید حدود ۴۵ دقیقه طول بکشد. آن شامل:" #: src/generics.md msgid "impl Trait" -msgstr "صفات impl (impl Trait)" +msgstr "impl Trait" #: src/generics.md -#, fuzzy msgid "dyn Trait" -msgstr "صفات Async" +msgstr "dyn Trait" #: src/generics.md -#, fuzzy msgid "Exercise: Generic min" -msgstr "تمرین: هندسه" +msgstr "تمرین: Generic `min`" #: src/generics/generic-functions.md:3 msgid "" "Rust supports generics, which lets you abstract algorithms or data " "structures (such as sorting or a binary tree) over the types used or stored." msgstr "" +"Rust از generics پشتیبانی می‌کند که به شما امکان می‌دهد الگوریتم‌ها یا " +"ساختارهای داده (مانند مرتب‌سازی یا درخت دودویی) را بر روی تایپ‌های استفاده‌شده " +"یا ذخیره‌شده تخصیص دهید." #: src/generics/generic-functions.md:7 msgid "/// Pick `even` or `odd` depending on the value of `n`.\n" @@ -6058,7 +6057,7 @@ msgstr "" msgid "" "Rust infers a type for T based on the types of the arguments and return " "value." -msgstr "" +msgstr "Rust تایپ T را بر اساس تایپ آرگومان‌ها و مقدار بازگشتی استنباط می‌کند." #: src/generics/generic-functions.md:27 msgid "" @@ -6068,6 +6067,12 @@ msgid "" "`n == 0`. Even if only the `pick` instantiation with integers is used, Rust " "still considers it invalid. C++ would let you do this." msgstr "" +"این شبیه به الگوهای در ++C است، اما Rust تابع generic را بلافاصله به صورت " +"جزئی کامپایل می‌کند، بنابراین آن تابع باید برای تمام تایپ‌هایی که با محدودیت‌ها " +"مطابقت دارند معتبر باشد. به عنوان مثال، سعی کنید تابع `pick` را طوری تغییر " +"دهید که اگر `n == 0` باشد، مقدار `even + odd` را برگرداند. حتی اگر فقط " +"نمونه‌سازی تابع `pick` با اعداد صحیح استفاده شود، Rust همچنان آن را نامعتبر " +"در نظر می‌گیرد. اما ++C اجازه این کار را به شما می‌دهد." #: src/generics/generic-functions.md:33 msgid "" @@ -6075,10 +6080,13 @@ msgid "" "is a zero-cost abstraction: you get exactly the same result as if you had " "hand-coded the data structures without the abstraction." msgstr "" +"کد generic بر اساس محل‌های فراخوانی به کد non-generic تبدیل می‌شود. این یک " +"انتزاع بدون هزینه است: شما دقیقاً همان نتیجه‌ای را دریافت می‌کنید که گویی " +"ساختارهای داده را بدون انتزاع به صورت دستی کدنویسی کرده‌اید." #: src/generics/generic-data.md:3 msgid "You can use generics to abstract over the concrete field type:" -msgstr "" +msgstr "می‌توانید از generic‌ ها برای انتزاع نوع فیلد مشخص استفاده کنید:" #: src/generics/generic-data.md:25 msgid "\"{integer:?} and {float:?}\"" @@ -6093,26 +6101,32 @@ msgid "" "_Q:_ Why `T` is specified twice in `impl Point {}`? Isn't that " "redundant?" msgstr "" +"_سوال:_ چرا `T` در عبارت `{} Point { .. }`." -msgstr "" +msgstr "این امکان وجود دارد که `{ .. }`, but methods in this " "block will only be available for `Point`." msgstr "" +"`Point` هنوز هم generic است و می‌توانید از `` implementation for `Foo`." msgstr "" +"پیاده‌سازی‌های trait نیازی به پوشش تمام پارامترهای تایپ ممکن ندارند. در اینجا، " +"`Foo::from(\"hello\")` کامپایل نخواهد شد زیرا پیاده‌سازی ``." msgstr "" +"اگر کسی بپرسد، ویژگی اضافی این است که تایپ در سمت چپ `:` می‌تواند دلخواه " +"باشد، مانند ` = foo.collect()` or with the turbofish, `foo.collect::" ">()`." msgstr "" +"Inference در موقعیت بازگشتی دشوار است. تابعی که `impl Foo` را برمی‌گرداند، " +"تایپ مشخصی را که برمی‌گرداند انتخاب می‌کند، بدون اینکه آن را به طور صریح در " +"منبع بنویسد. تابعی که تایپ generic مانند `collect() -> B` را برمی‌گرداند، " +"می‌تواند هر تایپ که `B` را برآورده می‌کند بازگرداند، و ممکن است فراخوانی‌کننده " +"نیاز به انتخاب یکی از آن‌ها داشته باشد، مانند `let x: Vec<_> = foo.collect()` " +"یا با استفاده از ()`." #: src/generics/impl-trait.md:47 msgid "" "What is the type of `debuggable`? Try `let debuggable: () = ..` to see what " "the error message shows." msgstr "" +"نوع `debuggable` چیست؟ سعی کنید .. = () :let debuggable` را امتحان کنید تا " +"ببینید پیام خطا چه چیزی را نشان می‌دهد." #: src/generics/dyn-trait.md:3 msgid "" "In addition to using traits for static dispatch via generics, Rust also " "supports using them for type-erased, dynamic dispatch via trait objects:" msgstr "" +"علاوه بر استفاده از تریدها برای فراخوانی استاتیک از طریق generic‌ها، Rust " +"همچنین از استفاده از آن‌ها برای فراخوانی داینامیک با تایپ‌های حذف‌شده از طریق " +"اشیاء trait پشتیبانی می‌کند:" #: src/generics/dyn-trait.md:27 src/smart-pointers/trait-objects.md:28 msgid "\"Miau!\"" @@ -6310,6 +6374,11 @@ msgid "" "full type information and can resolve which type's trait implementation to " "use." msgstr "" +"Generic‌ها، از جمله `impl Trait`، از monomorphization برای ایجاد یک نمونه " +"تخصصی از تابع برای هر تایپ مختلفی که با آن نمونه‌سازی شده استفاده می‌کنند. این " +"بدان معناست که فراخوانی یک متد trait از درون یک تابع generic همچنان از " +"فراخوانی استاتیک استفاده می‌کند، زیرا کامپایلر اطلاعات کامل تایپ را دارد و " +"می‌تواند پیاده‌سازی trait مربوط به تایپ را مشخص کند." #: src/generics/dyn-trait.md:62 msgid "" @@ -6318,6 +6387,11 @@ msgid "" "This means that there's a single version of `fn dynamic` that is used " "regardless of what type of `Pet` is passed in." msgstr "" +"زمانی که از `dyn Trait` استفاده می‌شود، به‌جای آن از فراخوانی داینامیک از طریق " +"یک [virtual method table](https://en.wikipedia.org/wiki/" +"Virtual_method_table) (vtable) استفاده می‌کند. این بدان معناست که یک نسخه " +"واحد از `fn dynamic` وجود دارد که بدون توجه به تایپ `Pet` که وارد می‌شود، " +"استفاده می‌شود." #: src/generics/dyn-trait.md:67 msgid "" @@ -6325,6 +6399,10 @@ msgid "" "indirection. In this case it's a reference, though smart pointer types like " "`Box` can also be used (this will be demonstrated on day 3)." msgstr "" +"زمانی که از `dyn Trait` استفاده می‌شود، شی trait باید پشت یک تایپ واسط قرار " +"داشته باشد. در این مورد، این تایپ واسط یک ارجاع است، اگرچه تایپ‌های " +"اشاره‌گرهای هوشمند مانند `Box` نیز می‌توانند استفاده شوند (این موضوع در روز " +"سوم نشان داده خواهد شد)." #: src/generics/dyn-trait.md:71 msgid "" @@ -6337,12 +6415,21 @@ msgid "" "compiler doesn't need to know the concrete type of the `Pet` in order to do " "this." msgstr "" +"در زمان اجرا، یک `dyn Pet&` به‌صورت یک \"اشاره‌گر چاق\" (fat pointer) نمایان " +"می‌شود، یعنی یک جفت از دو اشاره‌گر: یکی از اشاره‌گرها به شیء مشخصی که `Pet` را " +"پیاده‌سازی می‌کند اشاره دارد و دیگری به vtable برای پیاده‌سازی ترید آن نوع " +"اشاره می‌کند. هنگام فراخوانی متد `talk` بر روی `dyn Pet&`، کامپایلر آدرس تابع " +"`talk` را در vtable جستجو کرده و سپس تابع را فراخوانی می‌کند و اشاره‌گر به " +"`Dog` یا `Cat` را به آن تابع پاس می‌دهد. کامپایلر نیازی به دانستن تایپ مشخص " +"`Pet` برای انجام این کار ندارد." #: src/generics/dyn-trait.md:79 msgid "" "A `dyn Trait` is considered to be \"type-erased\", because we no longer have " "compile-time knowledge of what the concrete type is." msgstr "" +"یک `dyn Trait` به‌عنوان \"تایپ ‌حذف‌ شده\" (type-erased) در نظر گرفته می‌شود، " +"زیرا دیگر در زمان کامپایل اطلاعاتی درباره تایپ مشخص نداریم." #: src/generics/exercise.md:3 msgid "" @@ -6350,6 +6437,9 @@ msgid "" "determines the minimum of two values, using the [`Ord`](https://doc.rust-" "lang.org/stable/std/cmp/trait.Ord.html) trait." msgstr "" +"در این تمرین کوتاه، شما یک تابع `min`generic را پیاده‌سازی خواهید کرد که " +"حداقل از دو مقدار را تعیین می‌کند، با استفاده از trait [`Ord`](https://doc." +"rust-lang.org/stable/std/cmp/trait.Ord.html)." #: src/generics/exercise.md:8 msgid "// TODO: implement the `min` function used in `main`.\n" @@ -6387,15 +6477,17 @@ msgid "" "html) trait and [`Ordering`](https://doc.rust-lang.org/stable/std/cmp/enum." "Ordering.html) enum." msgstr "" +"[`Ord`](https://doc.rust-lang.org/stable/std/cmp/trait.Ord.html) trait و " +"[`Ordering`](https://doc.rust-lang.org/stable/std/cmp/enum.Ordering.html) " +"enum را به دانش‌آموزان نشان دهید." #: src/std-types.md src/std-types/option.md:1 -#, fuzzy msgid "Option" -msgstr "استثناها" +msgstr "Option" #: src/std-types.md src/std-types/result.md:1 src/error-handling.md msgid "Result" -msgstr "" +msgstr "Result" #: src/std-types.md src/std-types/string.md:1 msgid "String" @@ -6414,6 +6506,8 @@ msgid "" "For each of the slides in this section, spend some time reviewing the " "documentation pages, highlighting some of the more common methods." msgstr "" +"برای هر یک از اسلایدهای این بخش، کمی زمان صرف مرور صفحات مستندات کنید و برخی " +"از متدهای رایج‌تر را برجسته کنید." #: src/std-types/std.md:3 msgid "" @@ -6421,48 +6515,61 @@ msgid "" "types used by Rust libraries and programs. This way, two libraries can work " "together smoothly because they both use the same `String` type." msgstr "" +"Rust دارای یک کتابخانه استاندارد است که به ایجاد مجموعه‌ای از تایپ‌های رایج " +"استفاده‌شده توسط کتابخانه‌ها و برنامه‌های Rust کمک می‌کند. به این ترتیب، دو " +"کتابخانه می‌توانند به‌راحتی با هم کار کنند زیرا هر دو از تایپ `String` یکسانی " +"استفاده می‌کنند." #: src/std-types/std.md:7 msgid "" "In fact, Rust contains several layers of the Standard Library: `core`, " "`alloc` and `std`." msgstr "" +"در واقع، Rust شامل چندین لایه از کتابخانه استاندارد است: `core`، `alloc` و " +"`std`." #: src/std-types/std.md:10 msgid "" "`core` includes the most basic types and functions that don't depend on " "`libc`, allocator or even the presence of an operating system." msgstr "" +"`core` شامل ابتدایی‌ترین تایپ‌ها و توابع است که به `libc`، تخصیص‌دهنده حافظه یا " +"حتی وجود یک سیستم‌عامل وابسته نیستند." #: src/std-types/std.md:12 msgid "" "`alloc` includes types which require a global heap allocator, such as `Vec`, " "`Box` and `Arc`." msgstr "" +"`alloc` شامل تایپ‌هایی است که به یک تخصیص‌دهنده حافظه سراسری نیاز دارند، مانند " +"`Vec`، `Box` و `Arc`." #: src/std-types/std.md:14 msgid "" "Embedded Rust applications often only use `core`, and sometimes `alloc`." msgstr "" +"برنامه‌های Rust تعبیه‌شده اغلب تنها از `core` و گاهی اوقات از `alloc` استفاده " +"می‌کنند." #: src/std-types/docs.md:3 msgid "Rust comes with extensive documentation. For example:" -msgstr "" +msgstr "Rust دارای مستندات گسترده‌ای است. به عنوان مثال:" #: src/std-types/docs.md:5 -#, 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) استفاده کنید," +"تمام جزئیات مربوط به [حلقه‌ها](https://doc.rust-lang.org/stable/reference/" +"expressions/loop-expr.html)." #: src/std-types/docs.md:7 msgid "" "Primitive types like [`u8`](https://doc.rust-lang.org/stable/std/primitive." "u8.html)." msgstr "" +"تایپ‌های ابتدایی مانند [`u8`](https://doc.rust-lang.org/stable/std/primitive." +"u8.html)." #: src/std-types/docs.md:9 msgid "" @@ -6470,10 +6577,13 @@ msgid "" "option/enum.Option.html) or [`BinaryHeap`](https://doc.rust-lang.org/stable/" "std/collections/struct.BinaryHeap.html)." msgstr "" +"تایپ‌های کتابخانه استاندارد مانند [`Option`](https://doc.rust-lang.org/stable/" +"std/option/enum.Option.html) یا [`BinaryHeap`](https://doc.rust-lang.org/" +"stable/std/collections/struct.BinaryHeap.html)." #: src/std-types/docs.md:13 msgid "In fact, you can document your own code:" -msgstr "" +msgstr "در واقع، شما می‌توانید کد خود را مستند کنید:" #: src/std-types/docs.md:16 msgid "" @@ -6484,25 +6594,25 @@ msgid "" 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`](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` در نظر گرفته می‌شود. تمام جعبه‌هایی " -"(Crate) که در راست منتشر می‌شوند به‌طور خودکار با استفاده از ابزار [rustdoc]" -"(https://doc.rust-lang.org/rustdoc/what-is-rustdoc.html) در [`docs.rs`]" -"(https://docs.rs) مستند می‌شوند. این یک سبک رایج است که تمام آیتم‌های عمومی در " -"یک API با استفاده از این الگو مستند شود. همچنین میتوان قطعه کدهایی شامل نحوه " -"استفاده را مستند کرد و به عنوان تست‌های واحد (unit tests) استفاده خواهند شد." +"محتویات به‌عنوان Markdown پردازش می‌شوند. تمام crate‌های کتابخانه‌ای منتشرشده " +"Rust به‌طور خودکار در [`docs.rs`](https://docs.rs) با استفاده از ابزار " +"[rustdoc](https://doc.rust-lang.org/rustdoc/what-is-rustdoc.html) مستند " +"می‌شوند. مستند کردن تمام آیتم‌های عمومی در یک API با استفاده از این الگو به‌طور " +"رایج مرسوم است." #: src/std-types/docs.md:32 msgid "" "To document an item from inside the item (such as inside a module), use `//!" "` or `/*! .. */`, called \"inner doc comments\":" msgstr "" +"برای مستند کردن یک آیتم از درون خود آیتم (مانند درون یک ماژول)، از `!//` یا " +"`/* .. !*/` استفاده کنید که به آن \"کامنت‌های مستندات داخلی\" می‌گویند:" #: src/std-types/docs.md:36 msgid "" @@ -6511,13 +6621,12 @@ msgid "" msgstr "" #: src/std-types/docs.md:42 -#, fuzzy msgid "" "Show students the generated docs for the `rand` crate at ." msgstr "" -"دانشجویان را با مستندات تولید شده برای جعبه `rand` در [`docs.rs/rand`]" -"(https://docs.rs/rand) آشنا کنید." +"مستندات تولیدشده برای `rand` crate را در به " +"دانش‌آموزان نشان دهید." #: src/std-types/option.md:3 msgid "" @@ -6525,6 +6634,10 @@ msgid "" "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 "" +"ما قبلاً برخی استفاده‌ها از `` often has the same size in " "memory as `T`." msgstr "" +"بهینه‌سازی niche به این معناست که `` " "where `T` is used in the `Ok` variant and `E` appears in the `Err` variant." msgstr "" +"`Result` مشابه `Option` است، اما موفقیت یا شکست یک عملیات را نشان می‌دهد، " +"هرکدام با یک نوع متغیر enum متفاوت. این نوع جنریک است: ``](https://doc.rust-lang.org/" +"std/string/struct.String.html#deref-methods-str) است، که به این معناست که " +"می‌توانید تمام متدهای `str` را بر روی `String` فراخوانی کنید." #: src/std-types/string.md:30 msgid "" "`String::new` returns a new empty string, use `String::with_capacity` when " "you know how much data you want to push to the string." msgstr "" +"`String::new` یک رشته جدید خالی برمی‌گرداند. از `String::with_capacity` " +"استفاده کنید زمانی که می‌دانید چقدر داده می‌خواهید به رشته اضافه کنید." #: src/std-types/string.md:32 msgid "" "`String::len` returns the size of the `String` in bytes (which can be " "different from its length in characters)." msgstr "" +"`String::len` اندازه رشته `String` را به‌صورت بایت برمی‌گرداند (که ممکن است با " +"طول آن به‌صورت کاراکتر متفاوت باشد)." #: src/std-types/string.md:34 msgid "" @@ -6677,57 +6821,74 @@ msgid "" "to [grapheme clusters](https://docs.rs/unicode-segmentation/latest/" "unicode_segmentation/struct.Graphemes.html)." msgstr "" +"`String::chars` یک تکرارگر (iterator) از روی کاراکترهای واقعی برمی‌گرداند. " +"توجه داشته باشید که یک `char` ممکن است با آنچه که یک انسان به عنوان " +"\"کاراکتر\" در نظر می‌گیرد، متفاوت باشد به دلیل [grapheme clusters](https://" +"docs.rs/unicode-segmentation/latest/unicode_segmentation/struct.Graphemes." +"html)." #: src/std-types/string.md:37 msgid "" "When people refer to strings they could either be talking about `&str` or " "`String`." msgstr "" +"زمانی که مردم به رشته‌ها اشاره می‌کنند، ممکن است منظورشان `str&` یا `String` " +"باشد." #: src/std-types/string.md:39 msgid "" "When a type implements `Deref`, the compiler will let you " "transparently call methods from `T`." msgstr "" +"زمانی که یک تایپ، `` which transparently gives it " "access to `str`'s methods." msgstr "" +"`String` پیاده‌سازی‌کننده ``](https://doc.rust-lang.org/std/" +"vec/struct.Vec.html#deref-methods-%5BT%5D) است، به این معنی که می‌توانید " +"متدهای برش را بر روی یک `Vec` فراخوانی کنید." #: src/std-types/vec.md:38 msgid "" @@ -6781,6 +6952,9 @@ msgid "" "it contains is stored on the heap. This means the amount of data doesn't " "need to be known at compile time. It can grow or shrink at runtime." msgstr "" +"`Vec` نوعی مجموعه است، به همراه `String` و `HashMap`. داده‌های آن در حافظه " +"heap ذخیره می‌شود. به این معنی که مقدار داده‌ها نیازی به دانستن در زمان " +"کامپایل ندارد و می‌تواند در زمان اجرا رشد یا کوچک شود." #: src/std-types/vec.md:41 msgid "" @@ -6788,12 +6962,17 @@ msgid "" "explicitly. As always with Rust type inference, the `T` was established " "during the first `push` call." msgstr "" +"توجه داشته باشید که ``]" +"(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) است که به ما " +"اجازه می‌دهد به‌راحتی یک `HashMap` را از یک آرایه مقداردهی اولیه کنیم:" #: src/std-types/hashmap.md:65 msgid "" "Alternatively HashMap can be built from any `Iterator` which yields key-" "value tuples." msgstr "" +"به‌طور جایگزین، `HashMap` می‌تواند از هر `Iterator` که جفت‌های key-value را " +"تولید می‌کند، ساخته شود." #: src/std-types/hashmap.md:67 msgid "" @@ -6897,12 +7090,17 @@ msgid "" "examples easier. Using references in collections can, of course, be done, " "but it can lead into complications with the borrow checker." msgstr "" +"ما `=`, and `>` operators." msgstr "" +"`PartialOrd` یک ترتیب جزئی را تعریف می‌کند و دارای متد `partial_cmp` است. این " +"ویژگی برای پیاده‌سازی عملگرهای `<`، `<=`، `>=` و `>` استفاده می‌شود." #: src/std-traits/comparisons.md:49 msgid "`Ord` is a total ordering, with `cmp` returning `Ordering`." msgstr "" +"`Ord` یک ترتیب کامل است که در آن متد `cmp` مقدار `Ordering` را برمی‌گرداند." #: src/std-traits/comparisons.md:54 msgid "" "`PartialEq` can be implemented between different types, but `Eq` cannot, " "because it is reflexive:" msgstr "" +"`PartialEq` می‌تواند بین تایپ‌های مختلف پیاده‌سازی شود، اما `Eq` نمی‌تواند، زیرا " +"بازتابی است:" #: src/std-traits/comparisons.md:69 msgid "" "In practice, it's common to derive these traits, but uncommon to implement " "them." msgstr "" +"در عمل، معمولاً این trait‌ها به‌طور خودکار به‌دست می‌آیند، اما کمتر پیش می‌آید که " +"آن‌ها به‌طور دستی پیاده‌سازی شوند." #: src/std-traits/operators.md:3 msgid "" "Operator overloading is implemented via traits in [`std::ops`](https://doc." "rust-lang.org/std/ops/index.html):" msgstr "" +"بارگذاری مجدد عملگرها از طریق traits در [`std::ops`](https://doc.rust-lang." +"org/std/ops/index.html) پیاده‌سازی شده است:" #: src/std-traits/operators.md:23 msgid "\"{:?} + {:?} = {:?}\"" -msgstr "" +msgstr "\"{:?} + {:?} = {:?}\"" #: src/std-traits/operators.md:30 src/memory-management/drop.md:48 msgid "Discussion points:" -msgstr "" +msgstr "نکات بحث:" #: src/std-traits/operators.md:32 msgid "" "You could implement `Add` for `&Point`. In which situations is that useful?" msgstr "" +"می‌توانید `Add` را برای `Point&` پیاده‌سازی کنید. در چه موقعیت‌هایی این کار " +"مفید است؟" #: src/std-traits/operators.md:33 msgid "" @@ -7071,12 +7304,17 @@ msgid "" "the operator is not `Copy`, you should consider overloading the operator for " "`&T` as well. This avoids unnecessary cloning on the call site." msgstr "" +"پاسخ: `Add:add` خود `self` را مصرف می‌کند. اگر تایپ `T` که برای آن عملگر را " +"بارگذاری می‌کنید، `Copy` نباشد، باید پیاده‌سازی عملگر را برای `T&` نیز در نظر " +"بگیرید. این کار از ایجاد کپی‌های غیرضروری در محل فراخوانی جلوگیری می‌کند." #: src/std-traits/operators.md:36 msgid "" "Why is `Output` an associated type? Could it be made a type parameter of the " "method?" msgstr "" +"چرا `Output` یک تایپ مرتبط است؟ آیا می‌توان آن را به‌عنوان یک پارامترتایپ برای " +"متد تعریف کرد؟" #: src/std-traits/operators.md:38 msgid "" @@ -7084,12 +7322,16 @@ msgid "" "associated types (like `Output`) are controlled by the implementer of a " "trait." msgstr "" +"پاسخ کوتاه: پارامترهای تایپ تابع توسط فراخوانی‌کننده کنترل می‌شوند، اما " +"تایپ‌های مرتبط (مانند `Output`) توسط پیاده‌ساز trait کنترل می‌شوند." #: src/std-traits/operators.md:41 msgid "" "You could implement `Add` for two different types, e.g. `impl Add<(i32, " "i32)> for Point` would add a tuple to a `Point`." msgstr "" +"شما می‌توانید `Add` را برای دو تایپ مختلف پیاده‌سازی کنید، به‌عنوان مثال `impl " +"Add<(i32, i32)> for Point` می‌تواند یک tuple را به یک `Point` اضافه کند." #: src/std-traits/from-and-into.md:3 msgid "" @@ -7097,10 +7339,13 @@ msgid "" "html) and [`Into`](https://doc.rust-lang.org/std/convert/trait.Into.html) to " "facilitate type conversions:" msgstr "" +"تایپ‌های مختلف ویژگی‌های [`From`](https://doc.rust-lang.org/std/convert/trait." +"From.html) و [`Into`](https://doc.rust-lang.org/std/convert/trait.Into.html) " +"را برای تسهیل تبدیل تایپ پیاده‌سازی می‌کنند:" #: src/std-traits/from-and-into.md:11 src/std-traits/from-and-into.md:23 msgid "\"{s}, {addr}, {one}, {bigger}\"" -msgstr "" +msgstr "\"{s}, {addr}, {one}, {bigger}\"" #: src/std-traits/from-and-into.md:15 msgid "" @@ -7108,12 +7353,17 @@ msgid "" "automatically implemented when [`From`](https://doc.rust-lang.org/std/" "convert/trait.From.html) is implemented:" msgstr "" +"[`Into`](https://doc.rust-lang.org/std/convert/trait.Into.html) به‌طور خودکار " +"زمانی پیاده‌سازی می‌شود که [`From`](https://doc.rust-lang.org/std/convert/" +"trait.From.html) پیاده‌سازی شده باشد:" #: src/std-traits/from-and-into.md:30 msgid "" "That's why it is common to only implement `From`, as your type will get " "`Into` implementation too." msgstr "" +"به همین دلیل معمولاً تنها `From` پیاده‌سازی می‌شود، زیرا تایپ شما به‌طور خودکار " +"پیاده‌سازی `Into` را نیز دریافت می‌کند." #: src/std-traits/from-and-into.md:32 msgid "" @@ -7122,24 +7372,30 @@ msgid "" "Your function will accept types that implement `From` and those that _only_ " "implement `Into`." msgstr "" +"هنگام اعلام تایپ ورودی تابعی مانند \"هر چیزی که می‌تواند به یک `String` تبدیل " +"شود\"، قاعده برعکس است، باید از `Into` استفاده کنید. تابع شما تایپ‌های را " +"قبول می‌کند که پیاده‌سازی `From` دارند و همچنین تاید‌هایی که فقط `Into` را " +"پیاده‌سازی کرده‌اند." #: src/std-traits/casting.md:3 msgid "" "Rust has no _implicit_ type conversions, but does support explicit casts " "with `as`. These generally follow C semantics where those are defined." msgstr "" +"Rust هیچ _implicit_ ندارد، اما از تبدیل‌های صریح با استفاده از `as` پشتیبانی " +"می‌کند. این تبدیل‌ها معمولاً پیرو معنای C هستند که در آنجا تعریف شده‌اند." #: src/std-traits/casting.md:9 msgid "\"as u16: {}\"" -msgstr "" +msgstr "\"as u16: {}\"" #: src/std-traits/casting.md:10 msgid "\"as i16: {}\"" -msgstr "" +msgstr "\"as i16: {}\"" #: src/std-traits/casting.md:11 msgid "\"as u8: {}\"" -msgstr "" +msgstr "\"as u8: {}\"" #: src/std-traits/casting.md:15 msgid "" @@ -7147,6 +7403,9 @@ msgid "" "platforms. This might not match your intuition for changing sign or casting " "to a smaller type -- check the docs, and comment for clarity." msgstr "" +"نتایج استفاده از `as` _همیشه_ در Rust تعریف شده و در تمامی پلتفرم‌ها ثابت " +"هستند. این ممکن است با شهود شما برای تغییر علامت یا تبدیل به تایپ کوچکتر " +"مطابقت نداشته باشد -- مستندات را بررسی کنید و برای وضوح بیشتر نظر دهید." #: src/std-traits/casting.md:19 msgid "" @@ -7157,6 +7416,12 @@ msgid "" "selecting the bottom 32 bits of a `u64` with `as u32`, regardless of what " "was in the high bits)." msgstr "" +"تبدیل تایپ با استفاده از `as` ابزاری نسبتاً حساس است که استفاده نادرست از آن " +"آسان است و می‌تواند منبعی از اشکالات ظریف باشد، به خصوص زمانی که کار نگهداری " +"آینده باعث تغییر تایپ‌های مورد استفاده یا دامنه مقادیر در تایپ‌ها شود. تبدیل‌ها " +"بهتر است تنها زمانی استفاده شوند که قصد شما نشان دادن برش بدون قید و شرط " +"باشد (مثلاً انتخاب 32 بیت پایین از یک `u64` با `as u32`، بدون توجه به آنچه در " +"بیت‌های بالا وجود دارد)." #: src/std-traits/casting.md:25 msgid "" @@ -7165,10 +7430,15 @@ msgid "" "casts, `TryFrom` and `TryInto` are available when you want to handle casts " "that fit differently from those that don't." msgstr "" +"برای تبدیل‌های بدون خطا (مانند تبدیل `u32` به `u64`)، استفاده از `From` یا " +"`Into` بر `as` ارجح است تا تأیید شود که تبدیل در واقع بدون خطا است. برای " +"تبدیل‌های با احتمال خطا، `TryFrom` و `TryInto` در دسترس هستند وقتی که " +"می‌خواهید تبدیل‌هایی را که به شیوه‌ای متفاوت از آن‌هایی که مطابقت ندارند، مدیریت " +"کنید." #: src/std-traits/casting.md:33 msgid "Consider taking a break after this slide." -msgstr "" +msgstr "در نظر داشته باشید که پس از این اسلاید استراحت کنید." #: src/std-traits/casting.md:35 msgid "" @@ -7176,10 +7446,15 @@ msgid "" "be lost is generally discouraged, or at least deserves an explanatory " "comment." msgstr "" +"`as` مشابه به `static_cast` در ++C است. استفاده از `as` در مواردی که ممکن " +"است داده‌ها از دست برود، معمولاً توصیه نمی‌شود یا حداقل نیاز به توضیحی کامنتی " +"دارد." #: src/std-traits/casting.md:38 msgid "This is common in casting integers to `usize` for use as an index." msgstr "" +"این موضوع در تبدیل اعداد صحیح به `usize` برای استفاده به عنوان ایندکس رایج " +"است." #: src/std-traits/read-and-write.md:3 msgid "" @@ -7187,94 +7462,111 @@ msgid "" "[`BufRead`](https://doc.rust-lang.org/std/io/trait.BufRead.html), you can " "abstract over `u8` sources:" msgstr "" +"با استفاده از [`Read`](https://doc.rust-lang.org/std/io/trait.Read.html) و " +"[`BufRead`](https://doc.rust-lang.org/std/io/trait.BufRead.html)، می‌توانید " +"بر روی منابع `u8` انتزاع کنید:" #: src/std-traits/read-and-write.md:14 msgid "b\"foo\\nbar\\nbaz\\n\"" -msgstr "" +msgstr "b\"foo\\nbar\\nbaz\\n\"" #: src/std-traits/read-and-write.md:15 msgid "\"lines in slice: {}\"" -msgstr "" +msgstr "\"lines in slice: {}\"" #: src/std-traits/read-and-write.md:18 msgid "\"lines in file: {}\"" -msgstr "" +msgstr "\"lines in file: {}\"" #: src/std-traits/read-and-write.md:23 msgid "" "Similarly, [`Write`](https://doc.rust-lang.org/std/io/trait.Write.html) lets " "you abstract over `u8` sinks:" msgstr "" +"به طور مشابه، [`Write`](https://doc.rust-lang.org/std/io/trait.Write.html) " +"به شما امکان می‌دهد که بر روی منابع `u8` انتزاع کنید:" #: src/std-traits/read-and-write.md:30 msgid "\"\\n\"" -msgstr "" +msgstr "\"\\n\"" #: src/std-traits/read-and-write.md:37 msgid "\"Logged: {:?}\"" -msgstr "" +msgstr "\"Logged: {:?}\"" #: src/std-traits/default.md:1 msgid "The `Default` Trait" -msgstr "" +msgstr "The `Default` Trait" #: src/std-traits/default.md:3 msgid "" "[`Default`](https://doc.rust-lang.org/std/default/trait.Default.html) trait " "produces a default value for a type." msgstr "" +"ویژگی [`Default`](https://doc.rust-lang.org/std/default/trait.Default.html) " +"یک مقدار پیش‌فرض برای یک تایپ تولید می‌کند." #: src/std-traits/default.md:18 msgid "\"John Smith\"" -msgstr "" +msgstr "\"John Smith\"" #: src/std-traits/default.md:24 msgid "\"{default_struct:#?}\"" -msgstr "" +msgstr "\"{default_struct:#?}\"" #: src/std-traits/default.md:27 msgid "\"Y is set!\"" -msgstr "" +msgstr "\"Y is set!\"" #: src/std-traits/default.md:28 msgid "\"{almost_default_struct:#?}\"" -msgstr "" +msgstr "\"{almost_default_struct:#?}\"" #: src/std-traits/default.md:31 src/lifetimes/exercise.md:197 #: src/lifetimes/solution.md:196 msgid "\"{:#?}\"" -msgstr "" +msgstr "\"{:#?}\"" #: src/std-traits/default.md:38 msgid "" "It can be implemented directly or it can be derived via `#[derive(Default)]`." msgstr "" +"این ویژگی می‌تواند به طور مستقیم پیاده‌سازی شود یا می‌تواند از طریق " +"`[derive(Default)]#` به صورت خودکار تولید شود." #: src/std-traits/default.md:39 msgid "" "A derived implementation will produce a value where all fields are set to " "their default values." msgstr "" +"یک پیاده‌سازی خودکار، مقداری تولید می‌کند که در آن تمامی فیلدها به مقادیر " +"پیش‌فرض خود تنظیم شده‌اند." #: src/std-traits/default.md:41 msgid "This means all types in the struct must implement `Default` too." msgstr "" +"این بدان معناست که تمام تایپ‌های موجود در ساختار نیز باید `Default` را " +"پیاده‌سازی کنند." #: src/std-traits/default.md:42 msgid "" "Standard Rust types often implement `Default` with reasonable values (e.g. " "`0`, `\"\"`, etc)." msgstr "" +"نوع‌های استاندارد Rust اغلب `Default` را با مقادیر معقول پیاده‌سازی می‌کنند " +"(مثل `0`، `\"\"` و غیره)." #: src/std-traits/default.md:44 msgid "The partial struct initialization works nicely with default." -msgstr "" +msgstr "مقداردهی جزئی ساختارها با `Default` به خوبی کار می‌کند." #: src/std-traits/default.md:45 msgid "" "The Rust standard library is aware that types can implement `Default` and " "provides convenience methods that use it." msgstr "" +"کتابخانه استاندارد Rust آگاه است که تایپ‌های مختلف می‌توانند `Default` را " +"پیاده‌سازی کنند و روش‌های کمکی را فراهم می‌کند که از آن استفاده می‌کنند." #: src/std-traits/default.md:47 msgid "" @@ -7282,6 +7574,9 @@ msgid "" "book/ch05-01-defining-structs.html#creating-instances-from-other-instances-" "with-struct-update-syntax)." msgstr "" +"سینتکس `..` به نام [سینتکس به‌روزرسانی ساختار](https://doc.rust-lang.org/book/" +"ch05-01-defining-structs.html#creating-instances-from-other-instances-with-" +"struct-update-syntax) شناخته می‌شود." #: src/std-traits/closures.md:3 msgid "" @@ -7290,23 +7585,27 @@ msgid "" "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 "" +"بسته‌ها یا عبارات لامبدا تایپ‌هایی دارند که نمی‌توان نام‌گذاری کرد. با این حال، " +"آن‌ها پیاده‌سازی‌های ویژه از traits [`Fn`](https://doc.rust-lang.org/std/ops/" +"trait.Fn.html)، [`FnMut`](https://doc.rust-lang.org/std/ops/trait.FnMut." +"html) و [`FnOnce`](https://doc.rust-lang.org/std/ops/trait.FnOnce.html) " +"هستند:" #: src/std-traits/closures.md:10 -#, fuzzy msgid "\"Calling function on {input}\"" -msgstr "فراخوانی متدهای ناامن" +msgstr "\"Calling function on {input}\"" #: src/std-traits/closures.md:16 src/std-traits/closures.md:17 msgid "\"add_3: {}\"" -msgstr "" +msgstr "\"add_3: {}\"" #: src/std-traits/closures.md:24 src/std-traits/closures.md:25 msgid "\"accumulate: {}\"" -msgstr "" +msgstr "\"accumulate: {}\"" #: src/std-traits/closures.md:28 msgid "\"multiply_sum: {}\"" -msgstr "" +msgstr "\"multiply_sum: {}\"" #: src/std-traits/closures.md:35 msgid "" @@ -7314,18 +7613,25 @@ msgid "" "perhaps captures nothing at all. It can be called multiple times " "concurrently." msgstr "" +"یک `Fn` (برای مثال `add_3`) نه مقادیر گرفته شده را مصرف می‌کند و نه آن‌ها را " +"تغییر می‌دهد، یا شاید اصلاً چیزی را نمی‌گیرد. این تایپ می‌تواند به‌طور همزمان " +"چندین بار فراخوانی شود." #: src/std-traits/closures.md:38 msgid "" "An `FnMut` (e.g. `accumulate`) might mutate captured values. You can call it " "multiple times, but not concurrently." msgstr "" +"یک `FnMut` (برای مثال `accumulate`) ممکن است مقادیر گرفته شده را تغییر دهد. " +"شما می‌توانید آن را چندین بار فراخوانی کنید، اما نه به‌طور همزمان." #: src/std-traits/closures.md:41 msgid "" "If you have an `FnOnce` (e.g. `multiply_sum`), you may only call it once. It " "might consume captured values." msgstr "" +"اگر یک `FnOnce` (برای مثال `multiply_sum`) داشته باشید، تنها می‌توانید آن را " +"یک‌بار فراخوانی کنید. ممکن است مقادیر گرفته شده را مصرف کند." #: src/std-traits/closures.md:44 msgid "" @@ -7333,6 +7639,10 @@ msgid "" "I.e. you can use an `FnMut` wherever an `FnOnce` is called for, and you can " "use an `Fn` wherever an `FnMut` or `FnOnce` is called for." msgstr "" +"`FnMut` یک زیرتایپ از `FnOnce` است. `Fn` نیز یک زیرتایپ از `FnMut` و " +"`FnOnce` است. به عبارت دیگر، می‌توانید از `FnMut` در جایی که `FnOnce` نیاز " +"است استفاده کنید و از `Fn` در جایی که `FnMut` یا `FnOnce` نیاز است استفاده " +"کنید." #: src/std-traits/closures.md:48 msgid "" @@ -7340,37 +7650,49 @@ msgid "" "you can (i.e. you call it once), or `FnMut` else, and last `Fn`. This allows " "the most flexibility for the caller." msgstr "" +"زمانی که تابعی تعریف می‌کنید که یک closure را می‌گیرد، باید از `FnOnce` " +"استفاده کنید اگر فقط یک بار آن را فراخوانی می‌کنید (یعنی یک بار استفاده " +"می‌شود)، یا از `FnMut` در غیر این صورت، و در نهایت از `Fn`. این کار بیشترین " +"انعطاف‌پذیری را برای فراخوانی‌کننده فراهم می‌کند." #: src/std-traits/closures.md:52 msgid "" "In contrast, when you have a closure, the most flexible you can have is `Fn` " "(it can be passed everywhere), then `FnMut`, and lastly `FnOnce`." msgstr "" +"در مقابل، زمانی که یک closure دارید، بیشترین انعطاف‌پذیری که می‌توانید داشته " +"باشید `Fn` است (که می‌تواند در هر جایی استفاده شود)، سپس `FnMut` و در نهایت " +"`FnOnce`." #: src/std-traits/closures.md:55 msgid "" "The compiler also infers `Copy` (e.g. for `add_3`) and `Clone` (e.g. " "`multiply_sum`), depending on what the closure captures." msgstr "" +"کامپایلر همچنین `Copy` (برای مثال برای `add_3`) و `Clone` (برای مثال " +"`multiply_sum`) را بر اساس آنچه که closure به دست می‌آورد، استنتاج می‌کند." #: src/std-traits/closures.md:58 msgid "" "By default, closures will capture by reference if they can. The `move` " "keyword makes them capture by value." msgstr "" +"به‌طور پیش‌فرض، closure ها اگر بتوانند، با ارجاع (reference) مقادیر را " +"می‌گیرند. کلمه کلیدی `move` باعث می‌شود که آنها مقادیر را به‌صورت مالکیت (by " +"value) بگیرند." #: src/std-traits/closures.md:63 src/smart-pointers/trait-objects.md:93 #: src/smart-pointers/trait-objects.md:94 msgid "\"{} {}\"" -msgstr "" +msgstr "\"{} {}\"" #: src/std-traits/closures.md:67 msgid "\"Hi\"" -msgstr "" +msgstr "\"Hi\"" #: src/std-traits/closures.md:68 msgid "\"Greg\"" -msgstr "" +msgstr "\"Greg\"" #: src/std-traits/exercise.md:3 msgid "" @@ -7379,29 +7701,35 @@ msgid "" "implement the missing bits. Only rotate ASCII alphabetic characters, to " "ensure the result is still valid UTF-8." msgstr "" +"در این مثال، شما الگوریتم کلاسیک [رمزگذاری \"ROT13\"](https://en.wikipedia." +"org/wiki/ROT13) را پیاده‌سازی خواهید کرد. این کد را به محیط Playground کپی " +"کرده و بخش‌های ناقص آن را پیاده‌سازی کنید. تنها حروف الفبای ASCII را بچرخانید " +"تا نتیجه همچنان UTF-8 معتبر باقی بماند." #: src/std-traits/exercise.md:15 msgid "// Implement the `Read` trait for `RotDecoder`.\n" -msgstr "" +msgstr "// Implement the `Read` trait for `RotDecoder`.\n" #: src/std-traits/exercise.md:20 src/std-traits/exercise.md:33 #: src/std-traits/solution.md:26 src/std-traits/solution.md:39 msgid "\"Gb trg gb gur bgure fvqr!\"" -msgstr "" +msgstr "\"Gb trg gb gur bgure fvqr!\"" #: src/std-traits/exercise.md:36 src/std-traits/solution.md:42 msgid "\"To get to the other side!\"" -msgstr "" +msgstr "\"To get to the other side!\"" #: src/std-traits/exercise.md:55 msgid "" "What happens if you chain two `RotDecoder` instances together, each rotating " "by 13 characters?" msgstr "" +"چه اتفاقی می‌افتد اگر دو نمونه از `RotDecoder` را به‌هم متصل کنید که هر کدام " +"۱۳ کاراکتر را بچرخانند؟" #: src/std-traits/solution.md:16 msgid "'A'" -msgstr "" +msgstr "'A'" #: src/welcome-day-3.md msgid "Welcome to Day 3"