From 543a47482a7812737bec6fb6b7bd0fff5cde1ae4 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Wed, 19 Jun 2024 06:13:32 -0400 Subject: [PATCH] uk: post-refresh translation fixes (#2152) uk: post-refresh translation fixes (follow up on https://github.com/google/comprehensive-rust/pull/2148) Signed-off-by: Andriy Redko --- po/uk.po | 1262 ++++++++++++++++++++++++++++++++---------------------- 1 file changed, 753 insertions(+), 509 deletions(-) diff --git a/po/uk.po b/po/uk.po index 6c6a5d54..e2908d21 100644 --- a/po/uk.po +++ b/po/uk.po @@ -114,7 +114,6 @@ msgid "Control Flow Basics" msgstr "Основи потоку керування" #: src/SUMMARY.md -#, fuzzy msgid "`if` Expressions" msgstr "Вирази `if`" @@ -136,7 +135,7 @@ 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/blocks-and-scopes.md:5 msgid "Blocks and Scopes" @@ -179,9 +178,8 @@ msgid "Array Iteration" msgstr "Ітерація масиву" #: src/SUMMARY.md src/tuples-and-arrays/destructuring.md:5 -#, fuzzy msgid "Patterns and Destructuring" -msgstr "Деструктурування" +msgstr "Патерни та деструктуризація" #: src/SUMMARY.md src/tuples-and-arrays/exercise.md:5 msgid "Exercise: Nested Arrays" @@ -230,12 +228,11 @@ msgstr "Перелічувані типи" #: src/SUMMARY.md msgid "Static" -msgstr "Статична" +msgstr "Статика" #: src/SUMMARY.md -#, fuzzy msgid "Const" -msgstr "Постійна" +msgstr "Константи" #: src/SUMMARY.md src/user-defined-types/aliases.md:5 msgid "Type Aliases" @@ -255,16 +252,15 @@ msgstr "Зіставлення зразків" #: src/SUMMARY.md src/pattern-matching/match.md:5 msgid "Matching Values" -msgstr "" +msgstr "Співставлення значень" #: src/SUMMARY.md msgid "Destructuring Structs" msgstr "Деструктурування структур" #: src/SUMMARY.md -#, fuzzy msgid "Destructuring Enums" -msgstr "Деструктурування" +msgstr "Деструктурування переліків" #: src/SUMMARY.md src/pattern-matching/let-control-flow.md:5 msgid "Let Control Flow" @@ -287,19 +283,16 @@ msgid "Traits" msgstr "Трейти" #: src/SUMMARY.md src/methods-and-traits/traits/implementing.md:1 -#, fuzzy msgid "Implementing Traits" -msgstr "Реалізація небезпечних трейтів" +msgstr "Реалізація трейтів" #: src/SUMMARY.md src/methods-and-traits/traits/supertraits.md:1 -#, fuzzy msgid "Supertraits" -msgstr "Більше трейтів" +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/deriving.md:5 msgid "Deriving" @@ -326,9 +319,8 @@ msgid "Generic Data Types" msgstr "Узагальнені типи даних" #: src/SUMMARY.md src/generics/generic-traits.md:5 -#, fuzzy msgid "Generic Traits" -msgstr "Узагальнені типи" +msgstr "Узагальнені трейти" #: src/SUMMARY.md src/generics/trait-bounds.md:5 msgid "Trait Bounds" @@ -339,9 +331,8 @@ msgid "`impl Trait`" msgstr "`impl Trait`" #: src/SUMMARY.md src/generics/dyn-trait.md:5 -#, fuzzy msgid "`dyn Trait`" -msgstr "`impl Trait`" +msgstr "`dyn Trait`" #: src/SUMMARY.md src/generics/exercise.md:5 msgid "Exercise: Generic `min`" @@ -475,9 +466,8 @@ msgid "`Rc`" msgstr "`Rc`" #: src/SUMMARY.md src/smart-pointers/trait-objects.md:5 -#, fuzzy msgid "Owned Trait Objects" -msgstr "Об'єкти Трейтів" +msgstr "Принадлежні об'єкти трейтів" #: src/SUMMARY.md src/smart-pointers/exercise.md:5 msgid "Exercise: Binary Tree" @@ -501,7 +491,7 @@ msgstr "Перевірка запозичення" #: src/SUMMARY.md src/borrowing/examples.md:5 msgid "Borrow Errors" -msgstr "" +msgstr "Помилки запозичення" #: src/SUMMARY.md src/borrowing/interior-mutability.md:5 msgid "Interior Mutability" @@ -512,9 +502,8 @@ msgid "Exercise: Health Statistics" msgstr "Вправа: Статистика здоров’я" #: src/SUMMARY.md src/lifetimes.md -#, fuzzy msgid "Lifetimes" -msgstr "Тривалість життя структур" +msgstr "Тривалість життя" #: src/SUMMARY.md src/lifetimes/lifetime-annotations.md:5 msgid "Lifetime Annotations" @@ -685,9 +674,8 @@ msgid "AIDL" msgstr "AIDL" #: src/SUMMARY.md src/android/aidl/birthday-service.md:1 -#, fuzzy msgid "Birthday Service Tutorial" -msgstr "/** Інтерфейс сервісу Birthday. */" +msgstr "Посібник із сервісу Birthday" #: src/SUMMARY.md msgid "Interface" @@ -695,12 +683,11 @@ msgstr "Інтерфейс" #: src/SUMMARY.md msgid "Service API" -msgstr "" +msgstr "API сервісу" #: src/SUMMARY.md -#, fuzzy msgid "Service" -msgstr "Сервер" +msgstr "Сервіс" #: src/SUMMARY.md msgid "Server" @@ -719,37 +706,32 @@ msgid "Changing API" msgstr "Зміна API" #: src/SUMMARY.md -#, fuzzy msgid "Updating Implementations" -msgstr "Реалізація" +msgstr "Оновлення реалізацій" #: src/SUMMARY.md -#, fuzzy msgid "AIDL Types" -msgstr "Типи" +msgstr "AIDL типи" #: src/SUMMARY.md src/android/aidl/types/primitives.md:1 msgid "Primitive Types" -msgstr "" +msgstr "Примітивні типи" #: src/SUMMARY.md src/android/aidl/types/arrays.md:1 -#, fuzzy msgid "Array Types" -msgstr "Масиви" +msgstr "Типи Масивів" #: src/SUMMARY.md src/android/aidl/types/objects.md:1 -#, fuzzy msgid "Sending Objects" -msgstr "Об'єкти Трейтів" +msgstr "Надсилання об'єктів" #: src/SUMMARY.md src/android/aidl/types/parcelables.md:1 -#, fuzzy msgid "Parcelables" -msgstr "Змінні" +msgstr "Посилкові данні" #: src/SUMMARY.md src/android/aidl/types/file-descriptor.md:1 msgid "Sending Files" -msgstr "" +msgstr "Надсилання файлів" #: src/SUMMARY.md src/android/testing/googletest.md:5 msgid "GoogleTest" @@ -867,7 +849,7 @@ msgstr "Visual Studio Code" #: src/SUMMARY.md src/exercises/chromium/third-party.md:1 msgid "Exercise" -msgstr "Вправи" +msgstr "Вправа" #: src/SUMMARY.md src/chromium/testing/rust-gtest-interop.md:1 msgid "`rust_gtest_interop` Library" @@ -879,11 +861,11 @@ msgstr "Правила GN для тестів Rust" #: src/SUMMARY.md src/chromium/testing/chromium-import-macro.md:1 msgid "`chromium::import!` Macro" -msgstr "" +msgstr "Макрос `chromium::import!`" #: src/SUMMARY.md src/chromium/interoperability-with-cpp.md msgid "Interoperability with C++" -msgstr "Взаємодія з C" +msgstr "Взаємодія з C++" #: src/SUMMARY.md src/chromium/interoperability-with-cpp/example-bindings.md:1 msgid "Example Bindings" @@ -1134,9 +1116,8 @@ msgid "Threads" msgstr "Потоки" #: src/SUMMARY.md src/concurrency/threads/plain.md:5 -#, fuzzy msgid "Plain Threads" -msgstr "Потоки" +msgstr "Звичайні потоки" #: src/SUMMARY.md src/concurrency/threads/scoped.md:5 msgid "Scoped Threads" @@ -1147,9 +1128,8 @@ msgid "Channels" msgstr "Канали" #: src/SUMMARY.md src/concurrency/channels/senders-receivers.md:5 -#, fuzzy msgid "Senders and Receivers" -msgstr "Отримувач методу" +msgstr "Відправники та отримувачі" #: src/SUMMARY.md src/concurrency/channels/unbounded.md:5 msgid "Unbounded Channels" @@ -1164,9 +1144,8 @@ msgid "`Send` and `Sync`" msgstr "`Send` та `Sync`" #: src/SUMMARY.md src/concurrency/send-sync/marker-traits.md:5 -#, fuzzy msgid "Marker Traits" -msgstr "Більше трейтів" +msgstr "Маркерні трейти" #: src/SUMMARY.md src/concurrency/send-sync/send.md:5 msgid "`Send`" @@ -1238,9 +1217,8 @@ msgid "Tasks" msgstr "Завдання" #: src/SUMMARY.md src/concurrency/async-control-flow.md -#, fuzzy msgid "Channels and Control Flow" -msgstr "Новітній потік контролю" +msgstr "Канали та потік управління" #: src/SUMMARY.md src/concurrency/async-control-flow/channels.md:5 msgid "Async Channels" @@ -1350,7 +1328,7 @@ msgid "" "anything about Rust and hope to:" msgstr "" "Ціль курсу навчити вас мові Rust. Ми припускаємо, що ви нічого не знаєте про " -"Rust и сподіваємося:" +"Rust та сподіваємося:" #: src/index.md msgid "Give you a comprehensive understanding of the Rust syntax and language." @@ -1743,9 +1721,8 @@ msgstr "" "поекспериментувати з ними:" #: src/running-the-course/course-structure.md:73 -#, fuzzy msgid "{{%course outline Concurrency}}" -msgstr "Основи Rust" +msgstr "{{%course outline Concurrency}}" #: src/running-the-course/course-structure.md:75 msgid "Format" @@ -1764,24 +1741,21 @@ msgid "There are several useful keyboard shortcuts in mdBook:" msgstr "У mdBook є кілька корисних поєднань клавіш:" #: src/running-the-course/keyboard-shortcuts.md:5 -#, fuzzy msgid "Arrow-Left: Navigate to the previous page." -msgstr ": Перехід на попередню сторінку." +msgstr "Стрілка вліво: Перехід на попередню сторінку." #: src/running-the-course/keyboard-shortcuts.md:6 -#, fuzzy msgid "Arrow-Right: Navigate to the next page." -msgstr ": Перехід до наступної сторінки." +msgstr "Стрілка вправо: Перехід до наступної сторінки." #: 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 "" @@ -1832,7 +1806,6 @@ msgstr "" "johnathan79717)." #: src/running-the-course/translations.md:12 -#, fuzzy msgid "" "[Korean](https://google.github.io/comprehensive-rust/ko/) by [@keispace]" "(https://github.com/keispace), [@jiyongp](https://github.com/jiyongp), " @@ -1840,8 +1813,9 @@ msgid "" "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)." +"(https://github.com/keispace), [@jiyongp](https://github.com/jiyongp), " +"[@jooyunghan](https://github.com/jooyunghan) та [@namhyung](https://github." +"com/namhyung)." #: src/running-the-course/translations.md:13 msgid "" @@ -1879,14 +1853,14 @@ msgstr "" "[@raselmandol](https://github.com/raselmandol)." #: src/running-the-course/translations.md:23 -#, fuzzy 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)." +"(https://github.com/KookaS), [@vcaen](https://github.com/vcaen) і " +"[@AdrienBaudemont](https://github.com/AdrienBaudemont)." #: src/running-the-course/translations.md:24 msgid "" @@ -1907,14 +1881,14 @@ msgstr "" "momotaro1105)." #: src/running-the-course/translations.md:26 -#, fuzzy 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)." +"[Італійська](https://google.github.io/comprehensive-rust/it/) від " +"[@henrythebuilder](https://github.com/henrythebuilder) і [@detro](https://" +"github.com/detro)." #: src/running-the-course/translations.md:28 msgid "" @@ -2200,12 +2174,12 @@ msgid "\"Edit me!\"" msgstr "\"Відредагуте мене!\"" #: src/cargo/code-samples.md:19 -#, fuzzy msgid "" "You can use Ctrl + Enter to execute the code when focus is in the " "text box." msgstr "" -" для виконання коду, коли фокус введення знаходиться в текстовому полі." +"Ви можете використовувати Ctrl + Enter для виконання коду, коли " +"фокус введення знаходиться в текстовому полі." #: src/cargo/code-samples.md:24 msgid "" @@ -2221,8 +2195,8 @@ msgid "" "open it in the real Playground to demonstrate unit tests." msgstr "" "Вбудований у сторінку редактор коду не може запускати модульні тести. " -"Скопіюйте код і відкрийте його в Rust Playground, щоб продемонструвати " -"модульні тести." +"Скопіюйте код і відкрийте його в справжньому Playground, щоб " +"продемонструвати модульні тести." #: src/cargo/code-samples.md:30 msgid "" @@ -2340,6 +2314,7 @@ msgstr "" msgid "" "minutes: 5 course: Fundamentals session: Day 1 Morning target_minutes: 180" msgstr "" +"minutes: 5 course: Fundamentals session: Day 1 Morning target_minutes: 180" #: src/welcome-day-1.md msgid "Welcome to Day 1" @@ -2472,7 +2447,7 @@ msgstr "" #: src/concurrency/async-control-flow.md src/concurrency/async-pitfalls.md #: src/concurrency/async-exercises.md msgid "{{%segment outline}}" -msgstr "" +msgstr "{{%segment outline}}" #: src/hello-world/what-is-rust.md:2 src/references/shared.md:2 #: src/references/exclusive.md:2 src/references/slices.md:2 @@ -2487,7 +2462,7 @@ msgstr "" #: src/concurrency/async/runtimes.md:2 #: src/concurrency/async-pitfalls/blocking-executor.md:2 msgid "minutes: 10" -msgstr "" +msgstr "хвилин: 10" #: src/hello-world/what-is-rust.md:7 msgid "" @@ -2578,7 +2553,7 @@ msgstr "Зосереджений на надійності та безпеці #: src/std-types/std.md:2 src/borrowing/examples.md:2 src/modules/modules.md:2 #: src/testing/lints.md:2 src/error-handling/panics.md:2 msgid "minutes: 3" -msgstr "" +msgstr "хвилин: 3" #: src/hello-world/benefits.md:7 msgid "Some unique selling points of Rust:" @@ -2707,7 +2682,6 @@ msgstr "" "керування залежностями." #: src/hello-world/benefits.md:48 -#, 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 " @@ -2726,7 +2700,7 @@ msgstr "" #: src/concurrency/send-sync/marker-traits.md:2 #: src/concurrency/send-sync/send.md:2 src/concurrency/send-sync/sync.md:2 msgid "minutes: 2" -msgstr "" +msgstr "хвилин: 2" #: src/hello-world/playground.md:7 msgid "" @@ -2809,7 +2783,7 @@ msgstr "" #: src/concurrency/async-control-flow/select.md:2 #: src/concurrency/async-pitfalls/async-traits.md:2 msgid "minutes: 5" -msgstr "" +msgstr "хвилин: 5" #: src/types-and-values/hello-world.md:7 msgid "" @@ -3071,15 +3045,14 @@ msgid "Arithmetic is very similar to other languages, with similar precedence." msgstr "Арифметика дуже схожа на інші мови, зі схожими пріоритетами." #: src/types-and-values/arithmetic.md:25 -#, fuzzy msgid "" "What about integer overflow? In C and C++ overflow of _signed_ integers is " "actually undefined, and might do unknown things at runtime. In Rust, it's " "defined." msgstr "" "Як бути з переповненням цілих чисел? У мовах C та C++ переповнення цілих " -"чисел _зі знаком_ фактично не визначено, і на різних платформах та " -"компіляторах воно може поводитися по-різному. У Rust воно визначене." +"чисел _зі знаком_ фактично не визначено, і може робити невідомі речі під час " +"виконання. У Rust воно визначене." #: src/types-and-values/arithmetic.md:29 msgid "" @@ -3142,23 +3115,22 @@ msgstr "" #: src/types-and-values/inference.md:49 msgid "// ERROR: no implementation for `{float} == {integer}`\n" -msgstr "// ERROR: no implementation for `{float} == {integer}`\n" +msgstr "// ПОМИЛКА: немає реалізації для `{float} == {integer}`\n" #: src/types-and-values/exercise.md:2 src/control-flow-basics/exercise.md:2 #: src/tuples-and-arrays/exercise.md:2 src/references/exercise.md:2 #: src/user-defined-types/exercise.md:2 src/methods-and-traits/traits.md:2 #: src/modules/exercise.md:2 src/concurrency/threads/plain.md:2 msgid "minutes: 15" -msgstr "" +msgstr "хвилин: 15" #: src/types-and-values/exercise.md:7 -#, fuzzy msgid "" "The Fibonacci sequence begins with `[0,1]`. For n>1, the n'th Fibonacci " "number is calculated recursively as the sum of the n-1'th and n-2'th " "Fibonacci numbers." msgstr "" -"Перше і друге число Фібоначчі рівні `1`. Для n>2 n-те число Фібоначчі " +"Послідовність Фібоначчі починається з `[0,1]`. Для n>1 n-те число Фібоначчі " "обчислюється рекурсивно як сума n-1-го та n-2-го чисел Фібоначчі." #: src/types-and-values/exercise.md:10 @@ -3184,9 +3156,8 @@ msgid "// The recursive case.\n" msgstr "// Рекурсивний випадок.\n" #: src/types-and-values/exercise.md:26 src/types-and-values/solution.md:14 -#, fuzzy msgid "\"fib({n}) = {}\"" -msgstr "\"fib(n) = {}\"" +msgstr "\"fib({n}) = {}\"" #: src/control-flow-basics/if.md:2 src/control-flow-basics/break-continue.md:2 #: src/pattern-matching/destructuring-structs.md:2 @@ -3194,7 +3165,7 @@ msgstr "\"fib(n) = {}\"" #: src/concurrency/async/futures.md:2 #: src/concurrency/async-control-flow/join.md:2 msgid "minutes: 4" -msgstr "" +msgstr "хвилин: 4" #: src/control-flow-basics/if.md:5 msgid "`if` expressions" @@ -3211,7 +3182,7 @@ msgstr "" #: src/control-flow-basics/if.md:15 msgid "\"zero!\"" -msgstr "" +msgstr "\"нуль!\"" #: src/control-flow-basics/if.md:17 msgid "\"biggish\"" @@ -3284,17 +3255,16 @@ msgid "\"Final x: {x}\"" msgstr "\"Final x: {x}\"" #: src/control-flow-basics/loops/for.md:3 -#, fuzzy msgid "" "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}\"" -msgstr "" +msgstr "\"elem: {elem}\"" #: src/control-flow-basics/loops/for.md:20 msgid "" @@ -3302,15 +3272,17 @@ msgid "" "iterating over different kinds of ranges/collections. Iterators will be " "discussed in more detail later." msgstr "" +"Під капотом циклів `for` використовується концепція, яка називається " +"\"ітератори\", для обробки ітерацій над різними типами діапазонів/колекцій. " +"Ітератори буде розглянуто більш детально пізніше." #: 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` для включеного діапазону." +"Зверніть увагу, що перший цикл `for` виконує ітерацію тільки до `4`. " +"Покажіть синтаксис `1..=5` для включеного діапазону." #: src/control-flow-basics/loops/loop.md:3 msgid "" @@ -3599,61 +3571,62 @@ msgstr "" "буде описано використання похідних макросів." #: src/control-flow-basics/exercise.md:7 -#, fuzzy msgid "" "The [Collatz Sequence](https://en.wikipedia.org/wiki/Collatz_conjecture) is " "defined as follows, for an arbitrary n1 greater than zero:" msgstr "" -"Послідовність Коллатца [Collatz Sequence](https://en.wikipedia.org/wiki/" -"Collatz_conjecture) визначається наступним чином, для довільного n" +"[Послідовність Коллатца](https://en.wikipedia.org/wiki/Collatz_conjecture) " +"визначається наступним чином, для довільного n1 більшого за нуль:" #: src/control-flow-basics/exercise.md:10 -#, fuzzy msgid "" "If _ni_ is 1, then the sequence terminates at _ni_." -msgstr "_ є 1, то послідовність завершується при _n" +msgstr "" +"Якщо _ni_ є 1, то послідовність завершується при _ni_." #: src/control-flow-basics/exercise.md:11 msgid "If _ni_ is even, then _ni+1 = ni / 2_." msgstr "" +"Якщо _ni_ є парним, то _ni+1 = ni / 2_." #: src/control-flow-basics/exercise.md:12 msgid "" "If _ni_ is odd, then _ni+1 = 3 * ni + 1_." msgstr "" +"Якщо _ni_ є непарним, то _ni+1 = 3 * ni + " +"1_." #: src/control-flow-basics/exercise.md:14 -#, fuzzy msgid "For example, beginning with _n1_ = 3:" -msgstr "Наприклад, починаючи з _n" +msgstr "Наприклад, починаючи з _n1_ = 3:" #: src/control-flow-basics/exercise.md:16 msgid "3 is odd, so _n2_ = 3 * 3 + 1 = 10;" -msgstr "" +msgstr "3 є непарним, таким чином _n2_ = 3 * 3 + 1 = 10;" #: src/control-flow-basics/exercise.md:17 msgid "10 is even, so _n3_ = 10 / 2 = 5;" -msgstr "" +msgstr "10 є парним, таким чином _n3_ = 10 / 2 = 5;" #: src/control-flow-basics/exercise.md:18 msgid "5 is odd, so _n4_ = 3 * 5 + 1 = 16;" -msgstr "" +msgstr "5 є непарним, таким чином _n4_ = 3 * 5 + 1 = 16;" #: src/control-flow-basics/exercise.md:19 msgid "16 is even, so _n5_ = 16 / 2 = 8;" -msgstr "" +msgstr "16 є парним, таким чином _n5_ = 16 / 2 = 8;" #: src/control-flow-basics/exercise.md:20 msgid "8 is even, so _n6_ = 8 / 2 = 4;" -msgstr "" +msgstr "8 є парним, таким чином _n6_ = 8 / 2 = 4;" #: src/control-flow-basics/exercise.md:21 msgid "4 is even, so _n7_ = 4 / 2 = 2;" -msgstr "" +msgstr "4 є парним, таким чином _n7_ = 4 / 2 = 2;" #: src/control-flow-basics/exercise.md:22 msgid "2 is even, so _n8_ = 1; and" -msgstr "" +msgstr "2 є парним, таким чином _n8_ = 1; та" #: src/control-flow-basics/exercise.md:23 msgid "the sequence terminates." @@ -3678,7 +3651,7 @@ msgstr "\"Довжина: {}\"" #: src/welcome-day-1-afternoon.md msgid "session: Day 1 Afternoon target_minutes: 180" -msgstr "" +msgstr "session: Day 1 Afternoon target_minutes: 180" #: src/welcome-day-1-afternoon.md src/welcome-day-2-afternoon.md #: src/welcome-day-3-afternoon.md src/welcome-day-4-afternoon.md @@ -3756,6 +3729,8 @@ 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 "" +"Порожній кортеж `()` називається \" типом одиниці\" і означає відсутність " +"значення, що повертається, подібно до `void` в інших мовах." #: src/tuples-and-arrays/iteration.md:7 msgid "The `for` statement supports iterating over arrays (but not tuples)." @@ -3785,17 +3760,22 @@ 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:15 #: src/tuples-and-arrays/destructuring.md:25 msgid "\"left: {left}, right: {right}\"" -msgstr "" +msgstr "\"left: {left}, right: {right}\"" #: src/tuples-and-arrays/destructuring.md:19 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:31 msgid "" @@ -3803,12 +3783,18 @@ msgid "" "statically verify that the value on the right of `=` has the same structure " "as the pattern." msgstr "" +"Шаблони, що використовуються тут, є \"неспростовними\", тобто компілятор " +"може статично перевірити, що значення праворуч від `=` має таку саму " +"структуру, як і шаблон." #: src/tuples-and-arrays/destructuring.md:34 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:36 msgid "" @@ -3816,12 +3802,17 @@ 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:39 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:7 msgid "Arrays can contain other arrays:" @@ -3840,13 +3831,12 @@ msgstr "" "`transpose`, яка транспонує матрицю (перетворює рядки у стовпці):" #: src/tuples-and-arrays/exercise.md:26 -#, fuzzy msgid "" "Copy the code below to and implement the " "function. This function only operates on 3x3 matrices." msgstr "" -"Скопіюйте наведений нижче код на і застосуйте " -"функцію." +"Скопіюйте наведений нижче код на і реалізуйте " +"функцію. Ця функція працює лише з матрицями 3x3." #: src/tuples-and-arrays/exercise.md:30 src/borrowing/exercise.md:18 #: src/unsafe-rust/exercise.md:55 @@ -3930,15 +3920,14 @@ msgstr "" "Rust не створює посилання автоматично - завжди потрібно використовувати `&`." #: src/references/shared.md:54 -#, 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 " "C++." msgstr "" "У деяких випадках Rust виконує автоматичне розіменування, зокрема під час " -"виклику методів (спробуйте `ref_x.count_ones()`). Тут не потрібен оператор " -"`->`, як у C++." +"виклику методів (спробуйте `r.is_ascii()`). Тут не потрібен оператор `->`, " +"як у C++." #: src/references/shared.md:57 msgid "" @@ -4127,7 +4116,6 @@ msgid "\"s3: {s3}\"" msgstr "\"s3: {s3}\"" #: src/references/strings.md:36 -#, 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 " @@ -4135,10 +4123,9 @@ msgid "" msgstr "" "`&str` представляє зріз рядка, який є незмінним посиланням на дані рядка в " "кодуванні UTF-8, що зберігаються в блоці пам’яті. Рядкові літерали " -"(`”Hello”`) зберігаються у бінарному файлі програми." +"(`\"Hello\"`) зберігаються у бінарному файлі програми." #: src/references/strings.md:40 -#, fuzzy msgid "" "Rust's `String` type is a wrapper around a vector of bytes. As with a " "`Vec`, it is owned." @@ -4594,11 +4581,8 @@ msgstr "" "перевага надається `const`." #: src/user-defined-types/static.md:26 -#, fuzzy msgid "`static` is similar to mutable global variables in C++." -msgstr "" -"`static`, з іншого боку, набагато більше схожий на `const` або мутабельну " -"глобальну змінну в C++." +msgstr "`static` схожий на мутабельні глобальні змінні в C++." #: src/user-defined-types/static.md:27 msgid "" @@ -4628,13 +4612,12 @@ msgid "`const`" msgstr "`const`" #: src/user-defined-types/const.md:3 -#, fuzzy msgid "" "Constants are evaluated at compile time and their values are inlined " "wherever they are used:" msgstr "" -"Константні змінні піддаються оцінці під час компіляції, а їхні значення " -"вставляються скрізь, де вони використовуються:" +"Константи обчислюються під час компіляції, а їхні значення вставляються " +"всюди, де вони використовуються:" #: src/user-defined-types/const.md:26 msgid "" @@ -4654,7 +4637,6 @@ msgstr "" "виконання." #: src/user-defined-types/const.md:33 -#, fuzzy msgid "Mention that `const` behaves semantically similar to C++'s `constexpr`" msgstr "Зауважте, що `const` поводиться семантично подібно до `constexpr` C++." @@ -4801,6 +4783,7 @@ msgstr "/// Кнопка поверху в кабіни ліфта.\n" msgid "" "minutes: 3 course: Fundamentals session: Day 2 Morning target_minutes: 180" msgstr "" +"minutes: 3 course: Fundamentals session: Day 2 Morning target_minutes: 180" #: src/welcome-day-2.md msgid "Welcome to Day 2" @@ -4912,14 +4895,13 @@ msgid "\"Something else\"" msgstr "\"Щось інше\"" #: src/pattern-matching/match.md:26 -#, fuzzy msgid "" "The `_` pattern is a wildcard pattern which matches any value. The " "expressions _must_ be exhaustive, meaning that it covers every possibility, " "so `_` is often used as the final catch-all case." msgstr "" "Шаблон `_` - це шаблон підстановки, який відповідає будь-якому значенню. " -"Вирази _повинні_ бути неспростовними, тобто охоплювати всі можливі варіанти, " +"Вирази _повинні_ бути вичерпними, тобто охоплювати всі можливі варіанти, " "тому `_` часто використовується як остаточний всеохоплюючий випадок." #: src/pattern-matching/match.md:30 @@ -5004,11 +4986,9 @@ msgid "Structs" msgstr "Структури" #: src/pattern-matching/destructuring-structs.md:7 -#, fuzzy msgid "Like tuples, Struct can also be destructured by matching:" msgstr "" -"Як і кортежі, структури та переліки також можуть бути деструктуровані шляхом " -"зіставлення:" +"Як і кортежі, структури також можуть бути деструктуровані шляхом зіставлення:" #: src/pattern-matching/destructuring-structs.md:19 msgid "\"x.0 = 1, b = {b}, y = {y}\"" @@ -5041,11 +5021,9 @@ msgstr "" "не працює. Змініть ії на `const` і подивіться, що це знову запрацює." #: src/pattern-matching/destructuring-enums.md:7 -#, fuzzy msgid "Like tuples, enums can also be destructured by matching:" msgstr "" -"Як і кортежі, структури та переліки також можуть бути деструктуровані шляхом " -"зіставлення:" +"Як і кортежі, переліки також можуть бути деструктуровані шляхом зіставлення:" #: src/pattern-matching/destructuring-enums.md:9 msgid "" @@ -5165,7 +5143,7 @@ msgstr "" #: src/pattern-matching/let-control-flow.md:26 msgid "\"slept for {:?}\"" -msgstr "\"slept for {:?}\"" +msgstr "\"проспав {:?}\"" #: src/pattern-matching/let-control-flow.md:38 msgid "" @@ -5182,7 +5160,7 @@ msgstr "" #: src/pattern-matching/let-control-flow.md:48 #: src/pattern-matching/let-control-flow.md:110 msgid "\"got None\"" -msgstr "\"отримав None\"" +msgstr "\"отримав None\"" #: src/pattern-matching/let-control-flow.md:54 #: src/pattern-matching/let-control-flow.md:114 @@ -5299,7 +5277,7 @@ msgstr "" #: src/concurrency/sync-exercises/solutions.md:2 #: src/concurrency/async-exercises/chat-app.md:2 msgid "minutes: 30" -msgstr "" +msgstr "хвилин: 30" #: src/pattern-matching/exercise.md:7 msgid "Let's write a simple recursive evaluator for arithmetic expressions." @@ -5382,7 +5360,7 @@ msgstr "\"expr: {:?}\"" #: src/concurrency/shared-state/example.md:2 #: src/concurrency/async-control-flow/channels.md:2 msgid "minutes: 8" -msgstr "" +msgstr "хвилин: 8" #: src/methods-and-traits/methods.md:7 msgid "" @@ -5555,14 +5533,12 @@ msgstr "" "інтерфейси:" #: src/methods-and-traits/traits.md:11 -#, fuzzy msgid "/// Return a sentence from this pet.\n" -msgstr "// Ре-експорт типів з цього модуля.\n" +msgstr "/// Повертає речення від цього вихованця.\n" #: src/methods-and-traits/traits.md:14 -#, fuzzy msgid "/// Print a string to the terminal greeting this pet.\n" -msgstr "/// Виводить привітання у стандартний вивід.\n" +msgstr "/// Виводить на термінал рядок привітання цього вихованця.\n" #: src/methods-and-traits/traits.md:21 msgid "" @@ -5576,6 +5552,8 @@ msgid "" "In the \"Generics\" segment, next, we will see how to build functionality " "that is generic over all types implementing a trait." msgstr "" +"Далі у розділі \"Узагальнення\" ми побачимо, як побудувати функціональність, " +"яка є загальною для всіх типів, що реалізують трейт." #: src/methods-and-traits/traits/implementing.md:8 msgid "\"Oh you're a cutie! What's your name? {}\"" @@ -5592,11 +5570,12 @@ msgid "\"Fido\"" msgstr "\"Фідо\"" #: src/methods-and-traits/traits/implementing.md:31 -#, fuzzy msgid "" "To implement `Trait` for `Type`, you use an `impl Trait for Type { .. }` " "block." -msgstr "Трейти реалізуються у блоці `impl for { .. }` блоці." +msgstr "" +"Щоб реалізувати `Trait` для `Type`, ви використовуєте `impl Trait for Type " +"{ .. }` блок." #: src/methods-and-traits/traits/implementing.md:34 msgid "" @@ -5604,18 +5583,19 @@ msgid "" "type with a `talk()` method would not automatically satisfy `Pet` unless it " "is in an `impl Pet` block." msgstr "" +"На відміну від інтерфейсів Go, просто мати відповідні методи недостатньо: " +"тип `Cat` з методом `talk()` не буде автоматично задовольняти `Pet`, якщо " +"він не знаходиться у блоці `impl Pet`." #: src/methods-and-traits/traits/implementing.md:38 -#, fuzzy msgid "" "Traits may provide default implementations of some methods. Default " "implementations can rely on all the methods of the trait. In this case, " "`greet` is provided, and relies on `talk`." msgstr "" -"Трейти можуть визначати попередньо реалізовані (попередньо надані) методи та " -"методи, які користувачі повинні реалізувати самостійно. Попередньо надані " -"методи можуть покладатися на обов'язкові методи. У цьому прикладі `greet` є " -"попередньо наданим і покладається на `talk`." +"Трейти можуть надавати реалізації за замовчуванням для деяких методів. " +"Реалізації за замовчуванням можуть покладатися на всі методи трейту. У цьому " +"випадку надається `greet`, який покладається на `talk`." #: src/methods-and-traits/traits/supertraits.md:3 msgid "" @@ -5623,6 +5603,9 @@ msgid "" "called _supertraits_. Here, any type implementing `Pet` must implement " "`Animal`." msgstr "" +"Трейт може вимагати, щоб типи, які його реалізують, також реалізовували інші " +"трейти, так звані _супертрейти_. У цьому випадку, будь-який тип, що реалізує " +"`Pet`, повинен реалізувати `Animal`." #: src/methods-and-traits/traits/supertraits.md:30 #: src/concurrency/async-control-flow/select.md:48 @@ -5630,9 +5613,8 @@ msgid "\"Rex\"" msgstr "\"Рекс\"" #: src/methods-and-traits/traits/supertraits.md:31 -#, fuzzy msgid "\"{} has {} legs\"" -msgstr "\"{} віком {} років\"" +msgstr "\"{} має {} ніг\"" #: src/methods-and-traits/traits/supertraits.md:37 msgid "" @@ -5640,12 +5622,16 @@ msgid "" "expect this to behave like OO inheritance. It just specifies an additional " "requirement on implementations of a trait." msgstr "" +"Іноді це називають \"успадкуванням трейтів\", але студенти не повинні " +"очікувати, що це буде схоже на успадкування об'єктів OO. Це просто вказує " +"додаткову вимогу до реалізації трейту." #: src/methods-and-traits/traits/associated-types.md:3 msgid "" "Associated types are placeholder types which are supplied by the trait " "implementation." msgstr "" +"Асоціативні типи - це типи-заповнювачі, які надаються реалізацією трейту." #: src/methods-and-traits/traits/associated-types.md:25 #: src/concurrency/async-control-flow/join.md:34 @@ -5657,12 +5643,16 @@ msgid "" "Associated types are sometimes also called \"output types\". The key " "observation is that the implementer, not the caller, chooses this type." msgstr "" +"Асоціативні типи іноді також називають \"вихідними типами\". Ключовим " +"зауваженням є те, що цей тип вибирає реалізатор, а не той, хто його викликає." #: src/methods-and-traits/traits/associated-types.md:34 msgid "" "Many standard library traits have associated types, including arithmetic " "operators and `Iterator`." msgstr "" +"Багато стандартних бібліотечних трейтів мають асоційовані типи, включаючи " +"арифметичні оператори та `Iterator`." #: src/methods-and-traits/deriving.md:7 msgid "" @@ -5714,9 +5704,8 @@ msgid "minutes: 20" msgstr "" #: src/methods-and-traits/exercise.md:5 -#, fuzzy msgid "Exercise: Logger Trait" -msgstr "Вправа: Загальний логгер" +msgstr "Вправа: Трейт логгера" #: src/methods-and-traits/exercise.md:7 msgid "" @@ -5898,25 +5887,27 @@ msgstr "" #: src/generics/generic-traits.md:2 msgid "Minutes: 5" -msgstr "" +msgstr "Хвилин: 5" #: src/generics/generic-traits.md:7 msgid "" "Traits can also be generic, just like types and functions. A trait's " "parameters get concrete types when it is used." msgstr "" +"Трейти також можуть бути загальними, так само як типи та функції. Параметри " +"трейту отримують конкретні типи під час його використання." #: src/generics/generic-traits.md:16 msgid "\"Converted from integer: {from}\"" -msgstr "" +msgstr "\"Перетворено з цілого числа: {from}\"" #: src/generics/generic-traits.md:22 msgid "\"Converted from bool: {from}\"" -msgstr "" +msgstr "\"Перетворено з булевого значення: {from}\"" #: src/generics/generic-traits.md:29 msgid "\"{from_int:?}, {from_bool:?}\"" -msgstr "" +msgstr "\"{from_int:?}, {from_bool:?}\"" #: src/generics/generic-traits.md:35 msgid "" @@ -5924,6 +5915,9 @@ msgid "" "the `std` docs](https://doc.rust-lang.org/std/convert/trait.From.html) is " "simple." msgstr "" +"Трейт `From` буде розглянутий пізніше у курсі, але її [визначення у " +"документації `std`](https://doc.rust-lang.org/std/convert/trait.From.html) є " +"простим." #: src/generics/generic-traits.md:39 msgid "" @@ -5931,6 +5925,9 @@ msgid "" "parameters. Here, `Foo::from(\"hello\")` would not compile because there is " "no `From<&str>` implementation for `Foo`." msgstr "" +"Реалізації трейту не обов'язково повинні охоплювати всі можливі параметри " +"типів. У цьому випадку `Foo::from(\"hello\")` не буде скомпільовано, " +"оскільки для `Foo` не існує реалізації `From<&str>`." #: src/generics/generic-traits.md:43 msgid "" @@ -5938,6 +5935,9 @@ msgid "" "\"output\" type. A trait can have multiple implementations for different " "input types." msgstr "" +"Узагальнені трейти приймають типи як \"вхідні\", тоді як асоціативні типи є " +"своєрідним \"вихідним\" типом. Трейт може мати декілька реалізацій для " +"різних вхідних типів." #: src/generics/generic-traits.md:47 msgid "" @@ -5947,6 +5947,9 @@ msgid "" "[specialization](https://rust-lang.github.io/rfcs/1210-impl-specialization." "html)." msgstr "" +"Ведеться робота над додаванням цієї підтримки, яка називається " +"[спеціалізація](https://rust-lang.github.io/rfcs/1210-impl-specialization." +"html)." #: src/generics/trait-bounds.md:7 msgid "" @@ -6090,6 +6093,9 @@ 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 "" +"На додаток до використання трейтів для статичного пересилання за допомогою " +"узагальнень, Rust також підтримує їх використання для динамічного " +"пересилання зі стиранням типу за допомогою об'єктів трейтів:" #: src/generics/dyn-trait.md:31 src/smart-pointers/trait-objects.md:32 msgid "\"Miau!\"" @@ -6097,7 +6103,7 @@ msgstr "\"Мяу!\"" #: src/generics/dyn-trait.md:34 msgid "// Uses generics and static dispatch.\n" -msgstr "" +msgstr "// Використовує узагальнення та статичну диспетчеризацію.\n" #: src/generics/dyn-trait.md:37 src/generics/dyn-trait.md:42 #: src/smart-pointers/trait-objects.md:42 @@ -6106,7 +6112,7 @@ msgstr "\"Привіт, ви хто? {}\"" #: src/generics/dyn-trait.md:39 msgid "// Uses type-erasure and dynamic dispatch.\n" -msgstr "" +msgstr "// Використовує стирання типів та динамічну диспетчеризацію.\n" #: src/generics/dyn-trait.md:59 msgid "" @@ -6117,6 +6123,12 @@ msgid "" "full type information and can resolve which type's trait implementation to " "use." msgstr "" +"Узагальнення, включаючи `impl Trait`, використовують мономорфізацію для " +"створення спеціалізованого екземпляру функції для кожного окремого типу, " +"який є екземпляром узагальнення. Це означає, що виклик методу трейта з " +"узагальненої функції все ще використовує статичну диспетчеризацію, оскільки " +"компілятор має повну інформацію про тип і може вирішити, яку саме реалізацію " +"трейта типу слід використовувати." #: src/generics/dyn-trait.md:65 msgid "" @@ -6125,6 +6137,10 @@ 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` замість цього використовується динамічна " +"диспетчеризація через [віртуальну таблицю методів](https://en.wikipedia.org/" +"wiki/Virtual_method_table) (vtable). Це означає, що існує єдина версія `fn " +"dynamic`, яка використовується незалежно від того, який тип `Pet` передано." #: src/generics/dyn-trait.md:70 msgid "" @@ -6132,6 +6148,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` об'єкт трейта повинен знаходитися за якимось " +"посередником. У цьому випадку це буде посилання, хоча також можна " +"використовувати розумні типи вказівників, такі як `Box` (це буде " +"продемонстровано у день 3)." #: src/generics/dyn-trait.md:74 msgid "" @@ -6144,22 +6164,31 @@ msgid "" "compiler doesn't need to know the concrete type of the `Pet` in order to do " "this." msgstr "" +"Під час виконання `&dyn Pet` представляється як \"жирний вказівник\", тобто " +"пара з двох вказівників: Один вказівник вказує на конкретний об'єкт, який " +"реалізує `Pet`, а інший вказує на таблицю vtable для реалізації трейту для " +"цього типу. При виклику методу `talk` на `&dyn Pet` компілятор шукає " +"вказівник на функцію `talk` у таблиці vtable, а потім викликає цю функцію, " +"передаючи вказівник на `Dog` або `Cat` у цю функцію. Для цього компілятору " +"не потрібно знати конкретний тип `Pet`." #: src/generics/dyn-trait.md:82 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` вважається \"стертим типом\", оскільки під час компіляції ми " +"більше не знаємо, яким є конкретний тип." #: src/generics/exercise.md:7 -#, fuzzy msgid "" "In this short exercise, you will implement a generic `min` function that " "determines the minimum of two values, using the [`Ord`](https://doc.rust-" "lang.org/stable/std/cmp/trait.Ord.html) trait." msgstr "" "У цій короткій вправі ви реалізуєте узагальнену функцію `min`, яка визначає " -"мінімальне з двох значень, використовуючи трейт `LessThan`." +"мінімальне з двох значень, використовуючи трейт [`Ord`](https://doc.rust-" +"lang.org/stable/std/cmp/trait.Ord.html)." #: src/generics/exercise.md:12 msgid "// TODO: implement the `min` function used in `main`.\n" @@ -6172,36 +6201,34 @@ msgid "'z'" msgstr "'z'" #: src/generics/exercise.md:20 src/generics/solution.md:18 -#, fuzzy msgid "'7'" -msgstr "'x'" +msgstr "'7'" #: src/generics/exercise.md:20 src/generics/solution.md:18 -#, fuzzy msgid "'1'" -msgstr "'x'" +msgstr "'1'" #: src/generics/exercise.md:22 src/generics/solution.md:20 msgid "\"goodbye\"" -msgstr "" +msgstr "\"до побачення\"" #: src/generics/exercise.md:23 src/generics/solution.md:21 msgid "\"bat\"" -msgstr "" +msgstr "\"кажан\"" #: src/generics/exercise.md:23 src/generics/solution.md:21 msgid "\"armadillo\"" -msgstr "" +msgstr "\"броненосець\"" #: src/generics/exercise.md:29 -#, fuzzy 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 "" -"[`OsStr`](https://doc.rust-lang.org/std/ffi/struct.OsStr.html) і [`OsString`]" -"(https://doc.rust-lang.org/std/ffi/struct.OsString.html)" +"Покажіть учням трейт [`Ord`](https://doc.rust-lang.org/stable/std/cmp/trait." +"Ord.html) та перелік [`Ordering`](https://doc.rust-lang.org/stable/std/cmp/" +"enum.Ordering.html)." #: src/std-types.md msgid "" @@ -6462,27 +6489,24 @@ msgstr "" "програмувати у функціональному стилі." #: src/std-types/result.md:43 -#, fuzzy msgid "" "`Result` is the standard type to implement error handling as we will see on " "Day 4." msgstr "" "`Result` — це стандартний тип для реалізації обробки помилок, як ми побачимо " -"у 3-му дні." +"у 4-му дні." #: src/std-types/string.md:5 msgid "String" msgstr "String" #: src/std-types/string.md:7 -#, fuzzy msgid "" "[`String`](https://doc.rust-lang.org/std/string/struct.String.html) is a " "growable UTF-8 encoded string:" msgstr "" "[`String`](https://doc.rust-lang.org/std/string/struct.String.html) — це " -"стандартний буфер рядків UTF-8, що нарощується та виділяється в динамічній " -"пам'яті:" +"розширюваний рядок у кодуванні UTF-8:" #: src/std-types/string.md:12 src/std-traits/read-and-write.md:39 #: src/memory-management/review.md:27 src/memory-management/review.md:61 @@ -6622,6 +6646,11 @@ msgid "" "`Display`, so anything that can be formatted can also be converted to a " "string." msgstr "" +"Багато типів можна перетворити у рядок за допомогою методу [`to_string`]" +"(https://doc.rust-lang.org/std/string/trait.ToString.html#tymethod." +"to_string). Цей трейт автоматично реалізується для всіх типів, що реалізують " +"`Display`, тому все, що може бути відформатовано, також може бути " +"перетворено у рядок." #: src/std-types/vec.md:7 msgid "" @@ -7092,15 +7121,15 @@ msgstr "" #: src/std-traits/casting.md:13 msgid "\"as u16: {}\"" -msgstr "\"as u16: {}\"" +msgstr "\"як u16: {}\"" #: src/std-traits/casting.md:14 msgid "\"as i16: {}\"" -msgstr "\"as i16: {}\"" +msgstr "\"як i16: {}\"" #: src/std-traits/casting.md:15 msgid "\"as u8: {}\"" -msgstr "\"as u8: {}\"" +msgstr "\"як u8: {}\"" #: src/std-traits/casting.md:19 msgid "" @@ -7393,9 +7422,8 @@ msgid "\"Hi\"" msgstr "\"Привіт\"" #: src/std-traits/closures.md:71 -#, fuzzy msgid "\"Greg\"" -msgstr "\" Привітання\"" +msgstr "\" Грег\"" #: src/std-traits/exercise.md:7 msgid "" @@ -7438,6 +7466,7 @@ msgstr "'A'" msgid "" "minutes: 3 course: Fundamentals session: Day 3 Morning target_minutes: 180" msgstr "" +"minutes: 3 course: Fundamentals session: Day 3 Morning target_minutes: 180" #: src/welcome-day-3.md msgid "Welcome to Day 3" @@ -7558,7 +7587,7 @@ msgstr "" #: src/memory-management/review.md:69 msgid "\"capacity = {capacity}, ptr = {ptr:#x}, len = {len}\"" -msgstr "" +msgstr "\"capacity = {capacity}, ptr = {ptr:#x}, len = {len}\"" #: src/memory-management/approaches.md:7 msgid "Traditionally, languages have fallen into two broad categories:" @@ -7746,7 +7775,6 @@ msgid "After move to `s2`:" msgstr "Після переміщення до `s2`:" #: src/memory-management/move.md:41 -#, fuzzy msgid "" "```bob\n" " Stack Heap\n" @@ -7770,27 +7798,24 @@ msgid "" "```" msgstr "" "```bob\n" -"\"C++\" Rust\n" -".- - - - - - - - - -. .- - - - - - - - - - - - - - - - - - - - - - " -"-.\n" -": : : :\n" -": Існуючий Chromium : : Chromium Rust Існуючий " -"Rust :\n" -": \"C++\" : : \"обгортка\" " -"крейт :\n" -": +---------------+ : : +----------------+ +-------------" -"+ :\n" -": | | : : | | | " -"| :\n" -": | o-----+-+-----------+-+-> o-+----------+--> " -"| :\n" -": | | : Межі : | | Крейт | " -"| :\n" -": +---------------+ : мови : +----------------+ API +-------------" -"+ :\n" -": : : :\n" -"`- - - - - - - - - -' `- - - - - - - - - - - - - - - - - - - - - - " -"-'\n" +" Стек Купа\n" +".- - - - - - - - - - - - - -. .- - - - - - - - - - - - - - - - - - -.\n" +": : : :\n" +": s1 \"(inaccessible)\" : : :\n" +": +-----------+-------+ : : +----+----+----+----+----+----+ :\n" +": | ptr | o---+---+--+--+-->| H | e | l | l | o | ! | :\n" +": | len | 6 | : | : +----+----+----+----+----+----+ :\n" +": | capacity | 6 | : | : :\n" +": +-----------+-------+ : | : :\n" +": : | `- - - - - - - - - - - - - - - - - - -'\n" +": s2 : |\n" +": +-----------+-------+ : |\n" +": | ptr | o---+---+--'\n" +": | len | 6 | :\n" +": | capacity | 6 | :\n" +": +-----------+-------+ :\n" +": :\n" +"`- - - - - - - - - - - - - -'\n" "```" #: src/memory-management/move.md:62 @@ -7968,14 +7993,13 @@ msgstr "" "`Clone`." #: src/memory-management/clone.md:24 -#, fuzzy msgid "" "The idea of `Clone` is to make it easy to spot where heap allocations are " "occurring. Look for `.clone()` and a few others like `vec!` or `Box::new`." msgstr "" "Ідея `Clone` полягає у тому, щоб полегшити виявлення місць, де відбувається " -"виділення пам'яті у купі. Шукайте `.clone()` та деякі інші, такі як `Vec::" -"new` або `Box::new`." +"виділення пам'яті у купі. Шукайте `.clone()` та деякі інші, такі як `vec!` " +"або `Box::new`." #: src/memory-management/clone.md:27 msgid "" @@ -7990,12 +8014,16 @@ msgid "" "`clone` generally performs a deep copy of the value, meaning that if you e." "g. clone an array, all of the elements of the array are cloned as well." msgstr "" +"`clone` зазвичай виконує глибоку копію значення, тобто якщо ви, наприклад, " +"клонуєте масив, то всі елементи масиву також будуть клоновані." #: src/memory-management/clone.md:33 msgid "" "The behavior for `clone` is user-defined, so it can perform custom cloning " "logic if needed." msgstr "" +"Поведінка функції `clone` визначається користувачем, тому вона може " +"виконувати власну логіку клонування, якщо це необхідно." #: src/memory-management/copy-types.md:7 msgid "" @@ -8006,7 +8034,7 @@ msgstr "" #: src/memory-management/copy-types.md:20 msgid "These types implement the `Copy` trait." -msgstr "Ці типи реалізують крейт \"Copy\"." +msgstr "Ці типи реалізують трейт `Copy`." #: src/memory-management/copy-types.md:22 msgid "You can opt-in your own types to use copy semantics:" @@ -8083,6 +8111,10 @@ msgid "" "valid to make a copy of a shared reference, creating a copy of a mutable " "reference would violate Rust's borrowing rules." msgstr "" +"Спільні посилання є `Copy`/`Clone`, змінні посилання - ні. Це пов'язано з " +"тим, що Rust вимагає, щоб змінювані посилання були ексклюзивними, тому, хоча " +"створення копії спільного посилання є допустимим, створення копії " +"змінюваного посилання порушуватиме правила запозичення Rust." #: src/memory-management/drop.md:5 msgid "The `Drop` Trait" @@ -8371,6 +8403,24 @@ msgid "" "- - - - -'\n" "```" msgstr "" +"```bob\n" +" Стек Купа\n" +".- - - - - - - - - - - - - - . .- - - - - - - - - - - - - - - - - - - - " +"- - - - -.\n" +": : : :\n" +": " +"list : : :\n" +": +---------+----+----+ : : +---------+----+----+ +------+----" +"+----+ :\n" +": | Element | 1 | o--+----+-----+--->| Element | 2 | o--+--->| Nil | // " +"| // | :\n" +": +---------+----+----+ : : +---------+----+----+ +------+----" +"+----+ :\n" +": : : :\n" +": : : :\n" +"'- - - - - - - - - - - - - - ' '- - - - - - - - - - - - - - - - - - - - " +"- - - - -'\n" +"```" #: src/smart-pointers/box.md:67 msgid "" @@ -8389,7 +8439,7 @@ msgid "" "have a type whose size that can't be known at compile time, but the Rust " "compiler wants to know an exact size." msgstr "" -"мати тип, розмір якого не може бути відомий під час компіляції, але " +"маєте тип, розмір якого не може бути відомий під час компіляції, але " "компілятор Rust хоче знати точний розмір." #: src/smart-pointers/box.md:72 @@ -8403,7 +8453,6 @@ msgstr "" "переміщувався лише вказівник." #: src/smart-pointers/box.md:76 -#, fuzzy msgid "" "If `Box` was not used and we attempted to embed a `List` directly into the " "`List`, the compiler would not be able to compute a fixed size for the " @@ -8422,17 +8471,16 @@ msgstr "" "вказівник, і лише вказує на наступний елемент `List` у купі." #: src/smart-pointers/box.md:83 -#, fuzzy msgid "" "Remove the `Box` in the List definition and show the compiler error. We get " "the message \"recursive without indirection\", because for data recursion, " "we have to use indirection, a `Box` or reference of some kind, instead of " "storing the value directly." msgstr "" -"Видаліть `Box` у визначенні списку та відобразіть помилку компілятора. " -"\"Recursive with indirection\" - це натяк на те, що ви, можливо, захочете " -"використати Box або якесь посилання, замість того, щоб зберігати значення " -"безпосередньо." +"Видаліть `Box` у визначенні списку та відобразіть помилку компілятора. Ми " +"отримаємо повідомлення \"recursive without indirection\", тому що для " +"рекурсії даних ми повинні використовувати посередництво, `Box` або якесь " +"посилання, замість того, щоб зберігати значення безпосередньо." #: src/smart-pointers/box.md:90 msgid "Niche Optimization" @@ -8444,6 +8492,9 @@ msgid "" "This makes `Box` one of the types that allow the compiler to optimize " "storage of some enums." msgstr "" +"Хоча `Box` виглядає як `std::unique_ptr` у C++, він не може бути порожнім/" +"нульовим. Це робить `Box` одним з типів, які дозволяють компілятору " +"оптимізувати зберігання деяких переліків." #: src/smart-pointers/box.md:96 msgid "" @@ -8452,28 +8503,30 @@ msgid "" "tag ([\"Null Pointer Optimization\"](https://doc.rust-lang.org/std/option/" "#representation)):" msgstr "" +"Наприклад, `Option>` має такий самий розмір, як і просто `Box`, " +"оскільки компілятор використовує NULL-значення для розрізнення варіантів " +"замість використання явного тегу ([\"Оптимізація нульового вказівника\"]" +"(https://doc.rust-lang.org/std/option/#representation)):" #: src/smart-pointers/box.md:106 msgid "\"Just box\"" -msgstr "" +msgstr "\"Just box\"" #: src/smart-pointers/box.md:108 -#, fuzzy msgid "\"Optional box\"" -msgstr "Option" +msgstr "\"Optional box\"" #: src/smart-pointers/box.md:114 msgid "\"Size of just_box: {}\"" -msgstr "" +msgstr "\"Розмір just_box: {}\"" #: src/smart-pointers/box.md:115 msgid "\"Size of optional_box: {}\"" -msgstr "" +msgstr "\"Розмір optional_box: {}\"" #: src/smart-pointers/box.md:116 -#, fuzzy msgid "\"Size of none: {}\"" -msgstr "\"до: {a}\"" +msgstr "\"Розмір none: {}\"" #: src/smart-pointers/rc.md:7 msgid "" @@ -8561,6 +8614,10 @@ msgid "" "Pet`. However, we can also use trait objects with smart pointers like `Box` " "to create an owned trait object: `Box`." msgstr "" +"Раніше ми бачили, як об'єкти трейтів можна використовувати з посиланнями, " +"наприклад, `&dyn Pet`. Однак, ми також можемо використовувати об'єкти " +"трейтів з розумними вказівниками, такими як `Box`, щоб створити власний " +"об'єкт трейту: `Box`." #: src/smart-pointers/trait-objects.md:47 msgid "Memory layout after allocating `pets`:" @@ -8625,6 +8682,62 @@ msgid "" "- -'\n" "```" msgstr "" +"```bob\n" +" Стек Купа\n" +".- - - - - - - - - - - - - -. .- - - - - - - - - - - - - - - - - - - - - " +"- -.\n" +": : : :\n" +": \"pets: Vec\" : : \"data: Cat\" +----+----+----" +"+----+ :\n" +": +-----------+-------+ : : +-------+-------+ | F | i | d | " +"o | :\n" +": | ptr | o---+---+--. : | lives | 9 | +----+----+----" +"+----+ :\n" +": | len | 2 | : | : +-------+-------+ " +"^ :\n" +": | capacity | 2 | : | : ^ " +"| :\n" +": +-----------+-------+ : | : | " +"'-------. :\n" +": : | : | data:" +"\"Dog\"| :\n" +": : | : | +-------+--|-------" +"+ :\n" +"`- - - - - - - - - - - - - -' | : +---|-+-----+ | name | o, 4, 4 " +"| :\n" +" `--+-->| o o | o o-|----->| age | 5 " +"| :\n" +" : +-|---+-|---+ +-------+----------" +"+ :\n" +" : | " +"| :\n" +" `- - -| - - |- - - - - - - - - - - - - - - " +"- -'\n" +" | |\n" +" | | " +"\"Program text\"\n" +" .- - -| - - |- - - - - - - - - - - - - - - " +"- -.\n" +" : | | " +"vtable :\n" +" : | | +----------------------" +"+ :\n" +" : | `----->| \"::" +"talk\" | :\n" +" : | +----------------------" +"+ :\n" +" : | " +"vtable :\n" +" : | +----------------------" +"+ :\n" +" : '----------->| \"::" +"talk\" | :\n" +" : +----------------------" +"+ :\n" +" : :\n" +" '- - - - - - - - - - - - - - - - - - - - - " +"- -'\n" +"```" #: src/smart-pointers/trait-objects.md:83 msgid "" @@ -8668,7 +8781,7 @@ msgid "" "The data for the `Dog` named Fido is the `name` and `age` fields. The `Cat` " "has a `lives` field." msgstr "" -"Дані для `СобаDogи` на ім'я Фідо - це поля `name` та age`. Для `Cat` є поле " +"Дані для `Dog` на ім'я Фідо - це поля `name` та `age`. Для `Cat` є поле " "`lives`." #: src/smart-pointers/trait-objects.md:94 @@ -8720,9 +8833,8 @@ msgstr "" "лише один раз.\n" #: src/smart-pointers/exercise.md:55 -#, fuzzy msgid "// Implement `new`, `insert`, `len`, and `has` for `Subtree`.\n" -msgstr "// Реалізуйте `new`, `insert`, `len` та `has`.\n" +msgstr "// Реалізуйте `new`, `insert`, `len` та `has` для `Subtree`.\n" #: src/smart-pointers/exercise.md:70 src/smart-pointers/solution.md:105 msgid "// not a unique item\n" @@ -8734,7 +8846,7 @@ msgstr "\"bar\"" #: src/welcome-day-3-afternoon.md msgid "session: Day 3 Afternoon target_minutes: 180" -msgstr "" +msgstr "session: Day 3 Afternoon target_minutes: 180" #: src/borrowing/shared.md:7 msgid "" @@ -8761,12 +8873,10 @@ msgstr "" "за рахунок включення аргументів функцій та значень, що повертаються." #: src/borrowing/shared.md:38 -#, fuzzy msgid "Notes on stack returns and inlining:" -msgstr "Примітки щодо повернення стеку:" +msgstr "Примітки щодо повернення стеку та вбудовування:" #: src/borrowing/shared.md:40 -#, fuzzy 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 " @@ -8778,17 +8888,20 @@ msgid "" "the same when changing to the \"RELEASE\" setting:" msgstr "" "Продемонструйте, що повернення з `add` є дешевим, оскільки компілятор може " -"виключити операцію копіювання. Змініть наведений вище код так, щоб він " -"виводив адреси стеку, і запустіть його на [Playground](https://play.rust-" -"lang.org/) або перегляньте збірку в [Godbolt](https://rust.godbolt.org/). На " -"рівні оптимізації \"DEBUG\" адреси мають змінитися, але вони залишаються " -"незмінними під час переходу до налаштування \"RELEASE\":" +"виключити операцію копіювання, вбудовуючи виклик додавання в main. Змініть " +"наведений вище код так, щоб він виводив адреси стеку, і запустіть його на " +"[Playground](https://play.rust-lang.org/) або перегляньте збірку в [Godbolt]" +"(https://rust.godbolt.org/). На рівні оптимізації \"DEBUG\" адреси мають " +"змінитися, але вони залишаються незмінними під час переходу до налаштування " +"\"RELEASE\":" #: src/borrowing/shared.md:66 msgid "" "The Rust compiler can do automatic inlining, that can be disabled on a " "function level with `#[inline(never)]`." msgstr "" +"Компілятор Rust може виконувати автоматичне вбудовування, яке можна вимкнути " +"на рівні функції за допомогою `#[inline(never)]`." #: src/borrowing/shared.md:68 msgid "" @@ -8797,6 +8910,10 @@ msgid "" "of the value depends on the ABI, e.g. on amd64 the two i32 that is making up " "the point will be returned in 2 registers (eax and edx)." msgstr "" +"Якщо вимкнено, друкована адреса зміниться на всіх рівнях оптимізації. " +"Дивлячись на Godbolt або Playground, можна побачити, що в цьому випадку " +"повернення значення залежить від ABI, наприклад, на amd64 два i32, що " +"складають точку, будуть повернуті у 2х регістрах (eax і edx)." #: src/borrowing/borrowck.md:7 msgid "" @@ -8880,14 +8997,17 @@ msgid "" "consider the case of modifying a collection while there are references to " "its elements:" msgstr "" +"Як конкретний приклад того, як ці правила запозичення запобігають помилкам " +"пам'яті, розглянемо випадок модифікації колекції, коли на її елементи є " +"посилання:" #: src/borrowing/examples.md:16 msgid "\"{elem}\"" -msgstr "" +msgstr "\"{elem}\"" #: src/borrowing/examples.md:20 msgid "Similarly, consider the case of iterator invalidation:" -msgstr "" +msgstr "Аналогічно, розглянемо випадок оголошення ітератора недійсним:" #: src/borrowing/examples.md:33 msgid "" @@ -8895,6 +9015,9 @@ msgid "" "into it can potentially invalidate existing references to the collection's " "elements if the collection has to reallocate." msgstr "" +"В обох випадках модифікація колекції шляхом додавання до неї нових елементів " +"може потенційно зробити недійсними наявні посилання на елементи колекції, " +"якщо колекція буде перерозподілена." #: src/borrowing/interior-mutability.md:7 msgid "" @@ -8925,7 +9048,7 @@ msgstr "`RefCell`" #: src/borrowing/interior-mutability.md:21 #: src/borrowing/interior-mutability.md:47 msgid "// Note that `cell` is NOT declared as mutable.\n" -msgstr "" +msgstr "// Зауважте, що `cell` НЕ оголошено як мутабельну.\n" #: src/borrowing/interior-mutability.md:28 msgid "" @@ -8933,11 +9056,13 @@ msgid "" " // let other = cell.borrow();\n" " // println!(\"{}\", *other);\n" msgstr "" +"// Це спричиняє помилку під час виконання.\n" +" // let other = cell.borrow();\n" +" // println!(\"{}\", *other);\n" #: src/borrowing/interior-mutability.md:33 -#, fuzzy msgid "\"{cell:?}\"" -msgstr "\"{:?}\"" +msgstr "\"{cell:?}\"" #: src/borrowing/interior-mutability.md:37 msgid "`Cell`" @@ -8982,6 +9107,10 @@ msgid "" "call to `borrow_mut` before we print the cell. Trying to print a borrowed " "`RefCell` just shows the message `\"{borrowed}\"`." msgstr "" +"Додатковий блок у прикладі `RefCell` призначений для завершення запозичення, " +"створеного викликом `borrow_mut`, до того, як ми надрукуємо комірку. Спроба " +"надрукувати запозичену комірку `RefCell` просто покаже повідомлення " +"`\"{borrowed}\"`." #: src/borrowing/interior-mutability.md:70 msgid "" @@ -8999,6 +9128,9 @@ msgid "" "can't be passed between threads. This prevents two threads trying to access " "the cell at once." msgstr "" +"І `RefCell`, і `Cell` є `!Sync`, що означає, що `&RefCell` і `&Cell` не " +"можна передавати між потоками. Це запобігає спробам двох потоків одночасно " +"отримати доступ до комірки." #: src/borrowing/exercise.md:7 msgid "" @@ -9094,7 +9226,6 @@ msgid "\"p3: {p3:?}\"" msgstr "\"p3: {p3:?}\"" #: src/lifetimes/lifetime-annotations.md:47 -#, fuzzy msgid "" "In this example, the compiler does not know what lifetime to infer for `p3`. " "Looking inside the function body shows that it can only safely assume that " @@ -9391,30 +9522,28 @@ msgid "//1 => WireType::I64, -- not needed for this exercise\n" msgstr "//1 => WireType::I64, -- не потрібно для цієї вправи\n" #: src/lifetimes/exercise.md:88 src/lifetimes/solution.md:44 -#, fuzzy msgid "\"Invalid wire type: {value}\"" -msgstr "\"Неправильний wire-type\"" +msgstr "\"Неправильний wire type: {value}\"" #: src/lifetimes/exercise.md:96 src/lifetimes/solution.md:52 msgid "\"Expected string to be a `Len` field\"" -msgstr "" +msgstr "\"Очікуваний рядок має бути полем `Len`\"" #: src/lifetimes/exercise.md:98 src/lifetimes/solution.md:54 -#, fuzzy msgid "\"Invalid string\"" -msgstr "\"Неправильний varint\"" +msgstr "\"Неправильний рядок\"" #: src/lifetimes/exercise.md:103 src/lifetimes/solution.md:59 msgid "\"Expected bytes to be a `Len` field\"" -msgstr "" +msgstr "\"Очікувані байти мають бути полем `Len`\"" #: src/lifetimes/exercise.md:110 src/lifetimes/solution.md:66 msgid "\"Expected `u64` to be a `Varint` field\"" -msgstr "" +msgstr "\"Очікувалося, що `u64` буде полем `Varint`\"" #: src/lifetimes/exercise.md:118 src/lifetimes/solution.md:74 msgid "\"Expected `i32` to be an `I32` field\"" -msgstr "" +msgstr "\"Очікувалося, що `i32` буде полем `I32`\"" #: src/lifetimes/exercise.md:123 src/lifetimes/solution.md:79 msgid "" @@ -9424,7 +9553,7 @@ msgstr "" #: src/lifetimes/exercise.md:128 src/lifetimes/solution.md:84 msgid "\"Not enough bytes for varint\"" -msgstr "" +msgstr "\"Недостатньо байт для varint\"" #: src/lifetimes/exercise.md:131 src/lifetimes/solution.md:87 msgid "" @@ -9440,7 +9569,7 @@ msgstr "// Більше 7 байт є неприпустимим.\n" #: src/lifetimes/exercise.md:142 src/lifetimes/solution.md:98 msgid "\"Too many bytes for varint\"" -msgstr "" +msgstr "\"Забагато байт для varint\"" #: src/lifetimes/exercise.md:144 src/lifetimes/solution.md:100 msgid "/// Convert a tag into a field number and a WireType.\n" @@ -9488,10 +9617,16 @@ msgid "" "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 "" +"У цій вправі існують різні випадки, коли розбір protobuf може не спрацювати, " +"наприклад, якщо ви спробуєте розібрати `i32`, коли у буфері даних залишилося " +"менше 4 байт. У звичайному Rust-коді ми б впоралися з цим за допомогою " +"переліку `Result`, але для простоти у цій вправі ми панікуємо, якщо " +"виникають помилки. На четвертий день ми розглянемо обробку помилок у Rust " +"більш детально." #: src/lifetimes/solution.md:119 msgid "\"len not a valid `usize`\"" -msgstr "" +msgstr "\"len не є допустимим `usize`\"" #: src/lifetimes/solution.md:121 src/lifetimes/solution.md:128 msgid "\"Unexpected EOF\"" @@ -9509,6 +9644,7 @@ msgstr "// пропустити все інше\n" msgid "" "minutes: 3 course: Fundamentals session: Day 4 Morning target_minutes: 180" msgstr "" +"minutes: 3 course: Fundamentals session: Day 4 Morning target_minutes: 180" #: src/welcome-day-4.md msgid "Welcome to Day 4" @@ -10279,7 +10415,6 @@ msgstr "" "під час збирання тестів." #: src/testing/unit-tests.md:41 -#, fuzzy msgid "\"Hello World\"" msgstr "\"Привіт, світ!\"" @@ -10428,9 +10563,8 @@ msgstr "" "картки:" #: src/testing/exercise.md:13 -#, fuzzy msgid "Ignore all spaces. Reject number with fewer than two digits." -msgstr "Ігнорує всі пробіли. Відхиляє номер із менш ніж двома цифрами." +msgstr "Ігнорує всі пробіли. Відхиляє число із менш ніж двома цифрами." #: src/testing/exercise.md:15 msgid "" @@ -10648,18 +10782,25 @@ msgid "" "doc.rust-lang.org/stable/std/result/enum.Result.html) enum, which we briefly " "saw when discussing standard library types." msgstr "" +"Основним механізмом обробки помилок у Rust є перелік [`Result`](https://doc." +"rust-lang.org/stable/std/result/enum.Result.html), який ми коротко " +"розглядали під час обговорення стандартних бібліотечних типів." #: src/error-handling/result.md:36 msgid "" "`Result` has two variants: `Ok` which contains the success value, and `Err` " "which contains an error value of some kind." msgstr "" +"`Result` має два варіанти: `Ok`, який містить значення успіху, і `Err`, який " +"містить деяке значення помилки." #: src/error-handling/result.md:39 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 "" +"Чи може функція спричинити помилку, кодується у сигнатурі типу функції, яка " +"повертає значення `Result`." #: src/error-handling/result.md:42 msgid "" @@ -10670,6 +10811,13 @@ msgid "" "error handling, but means that you can always see in your source code where " "proper error handling is being skipped." msgstr "" +"Як і у випадку з `Option`, ви не можете забути обробити помилку: Ви не " +"можете отримати доступ ні до значення успіху, ні до значення помилки без " +"попередньої обробки шаблону на `Result`, щоб перевірити, який саме варіант " +"ви отримали. Методи на кшталт `unwrap` полегшують написання швидкого і " +"брудного коду, який не забезпечує надійну обробку помилок, але означає, що " +"ви завжди можете побачити у вихідному коді, де було пропущено належну " +"обробку помилок." #: src/error-handling/result.md:51 msgid "" @@ -10677,10 +10825,12 @@ msgid "" "conventions that students may be familiar with from other programming " "languages." msgstr "" +"Може бути корисно порівняти обробку помилок у Rust зі стандартами обробки " +"помилок, з якими студенти можуть бути знайомі з інших мов програмування." #: src/error-handling/result.md:56 msgid "Many languages use exceptions, e.g. C++, Java, Python." -msgstr "" +msgstr "Багато мов використовують виключення, наприклад, C++, Java, Python." #: src/error-handling/result.md:58 msgid "" @@ -10689,6 +10839,10 @@ msgid "" "that you can't tell when calling a function if it may throw an exception or " "not." msgstr "" +"У більшості мов з виключеннями інформація про те, чи може функція " +"згенерувати виключення, не відображається у сигнатурі її типу. Це зазвичай " +"означає, що при виклику функції ви не можете визначити, чи може вона " +"згенерувати виключення." #: src/error-handling/result.md:63 msgid "" @@ -10696,10 +10850,13 @@ msgid "" "block is reached. An error originating deep in the call stack may impact an " "unrelated function further up." msgstr "" +"Виключення, як правило, розмотують стек викликів, поширюючись вгору, поки не " +"буде досягнуто блоку `try`. Помилка, що виникла глибоко у стеку викликів, " +"може вплинути на не пов'язану з нею функцію, розташовану вище." #: src/error-handling/result.md:67 msgid "Error Numbers" -msgstr "" +msgstr "Коди помилок" #: src/error-handling/result.md:69 msgid "" @@ -10707,6 +10864,9 @@ msgid "" "value) separately from the successful return value of the function. Examples " "include C and Go." msgstr "" +"У деяких мовах функції повертають код помилки (або інше значення помилки) " +"окремо від успішного значення, яке повертає функція. Приклади включають C та " +"Go." #: src/error-handling/result.md:73 msgid "" @@ -10714,6 +10874,9 @@ msgid "" "value, in which case you may be accessing an uninitialized or otherwise " "invalid success value." msgstr "" +"Залежно від мови можна забути перевірити значення помилки, і в цьому випадку " +"ви можете отримати доступ до неініціалізованого або іншим чином недійсного " +"значення успішного завершення." #: src/error-handling/try.md:7 msgid "" @@ -10766,7 +10929,6 @@ msgstr "" "відсутність файлу, порожній файл, файл з іменем користувача." #: src/error-handling/try.md:61 -#, fuzzy msgid "" "Note that `main` can return a `Result<(), E>` as long as it implements `std::" "process::Termination`. In practice, this means that `E` implements `Debug`. " @@ -10808,9 +10970,8 @@ msgid "\"Found no username in {path}\"" msgstr "\"Не знайдено імені користувача в {path}\"" #: src/error-handling/try-conversions.md:68 -#, fuzzy msgid "//std::fs::write(\"config.dat\", \"\").unwrap();\n" -msgstr "//fs::write(\"config.dat\", \"\").unwrap();\n" +msgstr "//std::fs::write(\"config.dat\", \"\").unwrap();\n" #: src/error-handling/try-conversions.md:76 msgid "" @@ -11236,7 +11397,6 @@ msgid "\"careful!\"" msgstr "\"обережно!\"" #: src/unsafe-rust/dereferencing.md:16 -#, fuzzy msgid "" "// SAFETY: r1 and r2 were obtained from references and so are guaranteed to\n" " // be non-null and properly aligned, the objects underlying the " @@ -11245,7 +11405,7 @@ msgid "" " // block, and they are not accessed either through the references or\n" " // concurrently through any other pointers.\n" msgstr "" -"// Безпечно, оскільки r1 та r2 були отримані з посилань і тому\n" +"// БЕЗПЕКА: r1 та r2 були отримані з посилань і тому\n" " // гарантовано є ненульовими та правильно вирівняними, об'єкти, що " "лежать в основі\n" " // посилань, з яких вони були отримані, є дійсними на протязі\n" @@ -11364,6 +11524,7 @@ msgstr "" msgid "" "// SAFETY: There are no other threads which could be accessing `COUNTER`.\n" msgstr "" +"// БЕЗПЕКА: Немає інших потоків, які могли б отримати доступ до `COUNTER`.\n" #: src/unsafe-rust/mutable-static.md:35 msgid "\"COUNTER: {COUNTER}\"" @@ -11461,12 +11622,11 @@ msgid "\"🗻∈🌏\"" msgstr "" #: src/unsafe-rust/unsafe-functions.md:20 -#, fuzzy msgid "" "// 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 "" -"// Безпечно, оскільки індекси розташовані в правильному порядку в межах \n" +"// БЕЗПЕКА: Індекси розташовані в правильному порядку в межах \n" " // фрагмента рядка та лежать на межах послідовності UTF-8.\n" #: src/unsafe-rust/unsafe-functions.md:23 @@ -11484,6 +11644,8 @@ msgid "" "// SAFETY: `abs` doesn't deal with pointers and doesn't have any safety\n" " // requirements.\n" msgstr "" +"// БЕЗПЕКА: `abs` не працює з покажчиками і не має жодних вимог до\n" +" // безпеки.\n" #: src/unsafe-rust/unsafe-functions.md:33 msgid "\"Absolute value of -3 according to C: {}\"" @@ -11529,9 +11691,8 @@ msgstr "" "/// Покажчики повинні бути дійсними і правильно вирівняними.\n" #: src/unsafe-rust/unsafe-functions.md:68 -#, fuzzy msgid "// SAFETY: ...\n" -msgstr "// ...\n" +msgstr "// БЕЗПЕКА: ...\n" #: src/unsafe-rust/unsafe-functions.md:73 msgid "\"a = {}, b = {}\"" @@ -11613,10 +11774,8 @@ msgstr "" "/// Тип повинен мати визначене представлення і не мати заповнень.\n" #: src/unsafe-rust/unsafe-traits.md:30 -#, fuzzy msgid "// SAFETY: `u32` has a defined representation and no padding.\n" -msgstr "" -"// Безпечно, оскільки u32 має визначене представлення і не має заповнення.\n" +msgstr "// БЕЗПЕКА: `u32` має визначене представлення і не має заповнення.\n" #: src/unsafe-rust/unsafe-traits.md:37 msgid "" @@ -11954,7 +12113,7 @@ msgstr "\"//! Crab\\n\"" #: src/android.md msgid "course: Android session: Android" -msgstr "" +msgstr "course: Android session: Android" #: src/android.md msgid "Welcome to Rust in Android" @@ -12373,6 +12532,9 @@ msgid "" "process of creating a Binder interface. We're then going to both implement " "the described service and write client code that talks to that service." msgstr "" +"Щоб проілюструвати, як використовувати Rust з Binder, ми розглянемо процес " +"створення інтерфейсу Binder. Потім ми реалізуємо описаний сервіс і напишемо " +"клієнтський код, який взаємодіє з цим сервісом." #: src/android/aidl/example-service/interface.md:1 msgid "AIDL Interfaces" @@ -12423,45 +12585,58 @@ msgid "" "the package name used in the AIDL file, i.e. the package is `com.example." "birthdayservice` and the file is at `aidl/com/example/IBirthdayService.aidl`." msgstr "" +"Зверніть увагу, що структура каталогів у каталозі `aidl/` має відповідати " +"назві пакета, що використовується у файлі AIDL, тобто пакетом є `com.example." +"birthdayservice`, а файл знаходиться за адресою `aidl/com/example/" +"IBirthdayService.aidl`." #: src/android/aidl/example-service/service-bindings.md:1 msgid "Generated Service API" -msgstr "" +msgstr "Згенерований API сервісу" #: src/android/aidl/example-service/service-bindings.md:3 msgid "" "Binder generates a trait corresponding to the interface definition. trait to " "talk to the service." msgstr "" +"Binder генерує трейт, що відповідає визначенню інтерфейсу. Трейт для зв'язку " +"з сервісом." #: src/android/aidl/example-service/service-bindings.md:16 -#, fuzzy msgid "_Generated trait_:" -msgstr "Згенерований Rust" +msgstr "_Згенерований трейт_:" #: src/android/aidl/example-service/service-bindings.md:24 msgid "" "Your service will need to implement this trait, and your client will use " "this trait to talk to the service." msgstr "" +"Ваш сервіс повинен реалізувати цей трейт, а ваш клієнт використовуватиме цей " +"трейт для спілкування зі сервісом." #: src/android/aidl/example-service/service-bindings.md:29 msgid "" "The generated bindings can be found at `out/soong/.intermediates//`." msgstr "" +"Згенеровані прив'язки можна знайти за адресою `out/soong/.intermediates/" +"/`." #: src/android/aidl/example-service/service-bindings.md:31 msgid "" "Point out how the generated function signature, specifically the argument " "and return types, correspond the interface definition." msgstr "" +"Вкажіть, як сигнатура згенерованої функції, зокрема, типи аргументів та " +"повернення, відповідають визначенню інтерфейсу." #: src/android/aidl/example-service/service-bindings.md:33 msgid "" "`String` for an argument results in a different Rust type than `String` as a " "return type." msgstr "" +"`String` як аргумент призводить до іншого типу Rust, ніж `String` як тип " +"повернення." #: src/android/aidl/example-service/service.md:1 msgid "Service Implementation" @@ -12520,12 +12695,16 @@ msgid "" "Point out the path to the generated `IBirthdayService` trait, and explain " "why each of the segments is necessary." msgstr "" +"Вкажіть шлях до створеного трейту `IBirthdayService` і поясніть, навіщо " +"потрібен кожен з сегментів." #: src/android/aidl/example-service/service.md:41 msgid "" "TODO: What does the `binder::Interface` trait do? Are there methods to " "override? Where source?" msgstr "" +"TODO: Що робить трейт `binder::Interface`? Чи є методи для перевизначення? " +"Де знаходиться вхідний код?" #: src/android/aidl/example-service/server.md:1 msgid "AIDL Server" @@ -12573,10 +12752,15 @@ msgid "" "complicated than students are used to if they've used Binder from C++ or " "another language. Explain to students why each step is necessary." msgstr "" +"Процес створення користувацької реалізації сервісу (у цьому випадку типу " +"`BirthdayService`, який реалізує `IBirthdayService`) і запуску його як " +"сервісу Binder складається з кількох кроків і може здатися складнішим, ніж " +"ті, хто звик до Binder з C++ або іншої мови. Поясніть учням, чому кожен крок " +"є необхідним." #: src/android/aidl/example-service/server.md:52 msgid "Create an instance of your service type (`BirthdayService`)." -msgstr "" +msgstr "Створіть екземпляр вашого типу сервісу (`BirthdayService`)." #: src/android/aidl/example-service/server.md:53 msgid "" @@ -12586,18 +12770,27 @@ msgid "" "don't have inheritance in Rust, so instead we use composition, putting our " "`BirthdayService` within the generated `BnBinderService`." msgstr "" +"Оберніть об'єкт сервісу у відповідний тип `Bn*` (у цьому випадку " +"`BnBirthdayService`). Цей тип генерується Binder і надає загальну " +"функціональність Binder, яку надавав би базовий клас `BnBinder` у C++. У " +"Rust немає успадкування, тому замість нього ми використаємо композицію, " +"помістивши наш `BirthdayService` всередину згенерованого `BnBinderService`." #: src/android/aidl/example-service/server.md:58 msgid "" "Call `add_service`, giving it a service identifier and your service object " "(the `BnBirthdayService` object in the example)." msgstr "" +"Викликаемо `add_service`, передавши йому ідентифікатор сервісу і ваш об'єкт " +"сервісу (у прикладі - об'єкт `BnBirthdayService`)." #: src/android/aidl/example-service/server.md:60 msgid "" "Call `join_thread_pool` to add the current thread to Binder's thread pool " "and start listening for connections." msgstr "" +"Викликаемо `join_thread_pool` щоб додати поточний потік до пулу потоків " +"Binder'а і починаємо чекати на з'єднання." #: src/android/aidl/example-service/deploy.md:3 msgid "We can now build, push, and start the service:" @@ -12654,9 +12847,8 @@ msgid "\"Failed to connect to BirthdayService\"" msgstr "\"Не вдалося підключитися до BirthdayService\"" #: src/android/aidl/example-service/client.md:25 -#, fuzzy msgid "// Call the service.\n" -msgstr "/// Виклик сервісу привітання з днем народження.\n" +msgstr "// Викликаемо сервіс.\n" #: src/android/aidl/example-service/client.md:27 msgid "\"{msg}\"" @@ -12700,6 +12892,8 @@ msgid "" "`Strong` is the trait object representing the service " "that the client has connected to." msgstr "" +"`Strong` - це об'єкт трейту, що представляє сервіс, до " +"якого підключився клієнт." #: src/android/aidl/example-service/client.md:64 msgid "" @@ -12707,6 +12901,10 @@ msgid "" "process ref count for the service trait object, and the global Binder ref " "count that tracks how many processes have a reference to the object." msgstr "" +"`Strong` - це спеціальний тип розумного вказівника для Binder. Він обробляє " +"як внутрішньопроцесний лічильник посилань на об'єкт сервісного трейту, так і " +"глобальний лічильник посилань Binder, який відстежує, скільки процесів мають " +"посилання на об'єкт." #: src/android/aidl/example-service/client.md:67 msgid "" @@ -12715,6 +12913,10 @@ msgid "" "interface, there is a single Rust trait generated that both client and " "server use." msgstr "" +"Зверніть увагу, що об'єкт трейта, який клієнт використовує для спілкування з " +"сервісом, використовує той самий трейт, що реалізований на сервері. Для " +"певного інтерфейсу Binder генерується єдиний трейт Rust, який " +"використовується як клієнтом, так і сервером." #: src/android/aidl/example-service/client.md:71 msgid "" @@ -12722,6 +12924,9 @@ msgid "" "should ideally be defined in a common crate that both the client and server " "can depend on." msgstr "" +"Використовуйте той самий ідентифікатор сервісу, який використовувався при " +"реєстрації сервісу. В ідеалі він має бути визначений у спільному крейті, на " +"який можуть покладатися як клієнт, так і сервер." #: src/android/aidl/example-service/changing-definition.md:3 msgid "" @@ -12733,7 +12938,7 @@ msgstr "" #: src/android/aidl/example-service/changing-definition.md:16 msgid "This results in an updated trait definition for `IBirthdayService`:" -msgstr "" +msgstr "У результаті буде оновлено визначення трейту для `IBirthdayService`:" #: src/android/aidl/example-service/changing-definition.md:31 msgid "" @@ -12741,79 +12946,83 @@ msgid "" "`&[String]` in Rust, i.e. that idiomatic Rust types are used in the " "generated bindings wherever possible:" msgstr "" +"Зверніть увагу, що `String[]` у визначенні AIDL перекладається як " +"`&[String]` у Rust, тобто ідіоматичні типи Rust використовуються у " +"згенерованих зв'язках скрізь, де це можливо:" #: src/android/aidl/example-service/changing-definition.md:34 msgid "`in` array arguments are translated to slices." -msgstr "" +msgstr "Аргументи масиву `in` переводяться у зрізи." #: src/android/aidl/example-service/changing-definition.md:35 msgid "`out` and `inout` args are translated to `&mut Vec`." -msgstr "" +msgstr "Аргументи `out` та `inout` транслюються у `&mut Vec`." #: src/android/aidl/example-service/changing-definition.md:36 msgid "Return values are translated to returning a `Vec`." -msgstr "" +msgstr "Значення, що повертаються, перетворюються на `Vec`." #: src/android/aidl/example-service/changing-implementation.md:1 msgid "Updating Client and Service" -msgstr "" +msgstr "Оновлення клієнта та сервісу" #: src/android/aidl/example-service/changing-implementation.md:3 msgid "Update the client and server code to account for the new API." -msgstr "" +msgstr "Оновіть клієнтський та серверний код, щоб врахувати новий API." #: src/android/aidl/example-service/changing-implementation.md:20 -#, fuzzy msgid "'\\n'" -msgstr "b'\\n'" +msgstr "'\\n'" #: src/android/aidl/example-service/changing-implementation.md:36 msgid "\"Habby birfday to yuuuuu\"" -msgstr "" +msgstr "\"Habby birfday to yuuuuu\"" #: src/android/aidl/example-service/changing-implementation.md:37 msgid "\"And also: many more\"" -msgstr "" +msgstr "\"А також: багато іншого\"" #: src/android/aidl/example-service/changing-implementation.md:44 msgid "" "TODO: Move code snippets into project files where they'll actually be built?" msgstr "" +"TODO: Перемістити фрагменти коду у файли проекту, де вони будуть зібрані?" #: src/android/aidl/types.md:1 msgid "Working With AIDL Types" -msgstr "" +msgstr "Робота з типами AIDL" #: src/android/aidl/types.md:3 msgid "AIDL types translate into the appropriate idiomatic Rust type:" -msgstr "" +msgstr "Типи AIDL транслюються у відповідний ідіоматичний тип Rust:" #: src/android/aidl/types.md:5 msgid "Primitive types map (mostly) to idiomatic Rust types." -msgstr "" +msgstr "Примітивні типи здебільшого відображаються на ідіоматичні типи Rust." #: src/android/aidl/types.md:6 msgid "Collection types like slices, `Vec`s and string types are supported." -msgstr "" +msgstr "Підтримуються такі типи колекцій, як зрізи, `Vec` та рядкові типи." #: src/android/aidl/types.md:7 msgid "" "References to AIDL objects and file handles can be sent between clients and " "services." msgstr "" +"Посилання на об'єкти AIDL та дескриптори файлів можуть передаватися між " +"клієнтами та сервісами." #: src/android/aidl/types.md:9 msgid "File handles and parcelables are fully supported." -msgstr "" +msgstr "Повністю підтримуються дескриптори файлів та посилкові дані." #: src/android/aidl/types/primitives.md:3 msgid "Primitive types map (mostly) idiomatically:" -msgstr "" +msgstr "Примітивні типи відображаються (здебільшого) ідіоматично:" #: src/android/aidl/types/primitives.md:5 -#, fuzzy msgid "AIDL Type" -msgstr "AIDL" +msgstr "Тип AIDL" #: src/android/aidl/types/primitives.md:5 src/android/aidl/types/arrays.md:7 #: src/android/interoperability/cpp/type-mapping.md:3 @@ -12822,65 +13031,63 @@ msgstr "Тип Rust" #: src/android/aidl/types/primitives.md:5 msgid "Note" -msgstr "" +msgstr "Примітка" #: src/android/aidl/types/primitives.md:7 -#, fuzzy msgid "`boolean`" -msgstr "`bool`" +msgstr "`boolean`" #: src/android/aidl/types/primitives.md:8 msgid "`byte`" -msgstr "" +msgstr "`byte`" #: src/android/aidl/types/primitives.md:8 msgid "`i8`" -msgstr "" +msgstr "`i8`" #: src/android/aidl/types/primitives.md:8 -#, fuzzy msgid "Note that bytes are signed." -msgstr "// Більше 7 байт є неприпустимим.\n" +msgstr "Зверніть увагу, що байти є знаковими." #: src/android/aidl/types/primitives.md:9 msgid "`u16`" -msgstr "" +msgstr "`u16`" #: src/android/aidl/types/primitives.md:9 msgid "Note the usage of `u16`, NOT `u32`." -msgstr "" +msgstr "Зверніть увагу на використання `u16`, а не `u32`." #: src/android/aidl/types/primitives.md:10 msgid "`int`" -msgstr "" +msgstr "`int`" #: src/android/aidl/types/primitives.md:10 msgid "`i32`" -msgstr "" +msgstr "`i32`" #: src/android/aidl/types/primitives.md:11 msgid "`long`" -msgstr "" +msgstr "`long`" #: src/android/aidl/types/primitives.md:11 msgid "`i64`" -msgstr "" +msgstr "`i64" #: src/android/aidl/types/primitives.md:12 msgid "`float`" -msgstr "" +msgstr "`float`" #: src/android/aidl/types/primitives.md:12 msgid "`f32`" -msgstr "" +msgstr "`f32`" #: src/android/aidl/types/primitives.md:13 msgid "`double`" -msgstr "" +msgstr "`double" #: src/android/aidl/types/primitives.md:13 msgid "`f64`" -msgstr "" +msgstr "`f64`" #: src/android/aidl/types/arrays.md:3 msgid "" @@ -12888,33 +13095,33 @@ msgid "" "appropriate Rust array type depending on how they are used in the function " "signature:" msgstr "" +"Типи масивів (`T[]`, `byte[]` та `List`) буде переведено до відповідного " +"типу масиву Rust залежно від того, як вони використовуються у сигнатурі " +"функції:" #: src/android/aidl/types/arrays.md:7 -#, fuzzy msgid "Position" -msgstr "Опис" +msgstr "Позиція" #: src/android/aidl/types/arrays.md:9 msgid "`in` argument" -msgstr "" +msgstr "`in` аргумент" #: src/android/aidl/types/arrays.md:9 -#, fuzzy msgid "`&[T]`" -msgstr "Зрізи: `&[T]`" +msgstr "`&[T]`" #: src/android/aidl/types/arrays.md:10 msgid "`out`/`inout` argument" -msgstr "" +msgstr "`out`/`inout` аргумент" #: src/android/aidl/types/arrays.md:10 -#, fuzzy msgid "`&mut Vec`" -msgstr "`Vec`" +msgstr "`&mut Vec`" #: src/android/aidl/types/arrays.md:11 msgid "Return" -msgstr "" +msgstr "Повернення" #: src/android/aidl/types/arrays.md:11 #: src/android/interoperability/cpp/type-mapping.md:11 @@ -12928,125 +13135,132 @@ msgid "" "int\\[3\\]\\[4\\]). In the Java backend, fixed-size arrays are represented " "as array types." msgstr "" +"В Android 13 і вище підтримуються масиви фіксованого розміру, тобто `T[N]` " +"стає `[T; N]`. Масиви фіксованого розміру можуть мати декілька вимірів " +"(наприклад, int\\[3\\]\\[4\\]). У бекенді Java масиви фіксованого розміру " +"представлені як типи масивів." #: src/android/aidl/types/arrays.md:18 msgid "Arrays in parcelable fields always get translated to `Vec`." -msgstr "" +msgstr "Масиви у посилкових полях завжди перетворюються на `Vec`." #: src/android/aidl/types/objects.md:3 msgid "" "AIDL objects can be sent either as a concrete AIDL type or as the type-" "erased `IBinder` interface:" msgstr "" +"AIDL-об'єкти можна надсилати або як конкретний тип AIDL, або як інтерфейс " +"`IBinder` зі стертим типом:" #: src/android/aidl/types/objects.md:6 -#, fuzzy msgid "" "**birthday_service/aidl/com/example/birthdayservice/IBirthdayInfoProvider." "aidl**:" msgstr "" -"_birthday_service/aidl/com/example/birthdayservice/IBirthdayService.aidl_:" +"**birthday_service/aidl/com/example/birthdayservice/IBirthdayInfoProvider." +"aidl**:" #: src/android/aidl/types/objects.md:17 #: src/android/aidl/types/parcelables.md:16 #: src/android/aidl/types/file-descriptor.md:6 -#, fuzzy msgid "" "**birthday_service/aidl/com/example/birthdayservice/IBirthdayService.aidl**:" msgstr "" -"_birthday_service/aidl/com/example/birthdayservice/IBirthdayService.aidl_:" +"**birthday_service/aidl/com/example/birthdayservice/IBirthdayService.aidl**:" #: src/android/aidl/types/objects.md:23 msgid "/** The same thing, but using a binder object. */" -msgstr "" +msgstr "/** Те саме, але з використанням об'єкта-зв'язки. */" #: src/android/aidl/types/objects.md:26 msgid "/** The same thing, but using `IBinder`. */" -msgstr "" +msgstr "/** Те саме, але з використанням `IBinder`. */" #: src/android/aidl/types/objects.md:31 #: src/android/aidl/types/parcelables.md:27 #: src/android/aidl/types/file-descriptor.md:15 -#, fuzzy msgid "**birthday_service/src/client.rs**:" -msgstr "_birthday_service/src/client.rs_:" +msgstr "**birthday_service/src/client.rs**:" #: src/android/aidl/types/objects.md:34 -#, fuzzy msgid "/// Rust struct implementing the `IBirthdayInfoProvider` interface.\n" -msgstr "//! Реалізація інтерфейсу AIDL `IBirthdayService`.\n" +msgstr "" +"/// Rust структурна структура, що реалізує інтерфейс " +"`IBirthdayInfoProvider`.\n" #: src/android/aidl/types/objects.md:56 -#, fuzzy msgid "// Create a binder object for the `IBirthdayInfoProvider` interface.\n" -msgstr "//! Реалізація інтерфейсу AIDL `IBirthdayService`.\n" +msgstr "" +"// Створюємо об'єкт-зв'язувач для інтерфейсу `IBirthdayInfoProvider`.\n" #: src/android/aidl/types/objects.md:62 -#, fuzzy msgid "// Send the binder object to the service.\n" -msgstr "/// Виклик сервісу привітання з днем народження.\n" +msgstr "// Надсилаємо об'єкт-зв'язку до сервісу.\n" #: src/android/aidl/types/objects.md:65 msgid "" "// Perform the same operation but passing the provider as an `SpIBinder`.\n" msgstr "" +"// Виконуємо ту саму операцію, але передаємо провайдера як `SpIBinder`.\n" #: src/android/aidl/types/objects.md:72 msgid "" "Note the usage of `BnBirthdayInfoProvider`. This serves the same purpose as " "`BnBirthdayService` that we saw previously." msgstr "" +"Зверніть увагу на використання `BnBirthdayInfoProvider`. Він слугує тій " +"самій меті, що й `BnBirthdayService`, який ми бачили раніше." #: src/android/aidl/types/parcelables.md:3 msgid "Binder for Rust supports sending parcelables directly:" -msgstr "" +msgstr "Binder для Rust підтримує пряме надсилання посилкових данних:" #: src/android/aidl/types/parcelables.md:5 -#, fuzzy msgid "" "**birthday_service/aidl/com/example/birthdayservice/BirthdayInfo.aidl**:" msgstr "" -"_birthday_service/aidl/com/example/birthdayservice/IBirthdayService.aidl_:" +"**birthday_service/aidl/com/example/birthdayservice/BirthdayInfo.aidl**:" #: src/android/aidl/types/parcelables.md:22 msgid "/** The same thing, but with a parcelable. */" -msgstr "" +msgstr "/** Те саме, але з посилковими даними. */" #: src/android/aidl/types/file-descriptor.md:3 msgid "" "Files can be sent between Binder clients/servers using the " "`ParcelFileDescriptor` type:" msgstr "" +"Файли можна надсилати між клієнтами/серверами Binder, використовуючи тип " +"`ParcelFileDescriptor`:" #: src/android/aidl/types/file-descriptor.md:10 msgid "/** The same thing, but loads info from a file. */" -msgstr "" +msgstr "/** Те саме, але завантажує інформацію з файлу. */" #: src/android/aidl/types/file-descriptor.md:22 msgid "// Open a file and put the birthday info in it.\n" msgstr "" +"// Відкриваємо файл і записуємо до нього інформацію про день народження.\n" #: src/android/aidl/types/file-descriptor.md:23 msgid "\"/data/local/tmp/birthday.info\"" -msgstr "" +msgstr "\"/data/local/tmp/birthday.info\"" #: src/android/aidl/types/file-descriptor.md:24 -#, fuzzy msgid "\"{name}\"" -msgstr "\"Привіт {name}\"" +msgstr "\"{name}\"" #: src/android/aidl/types/file-descriptor.md:25 msgid "\"{years}\"" -msgstr "" +msgstr "\"{years}\"" #: src/android/aidl/types/file-descriptor.md:27 msgid "// Create a `ParcelFileDescriptor` from the file and send it.\n" -msgstr "" +msgstr "// Створюємо `ParcelFileDescriptor` з файлу та надсилаємо його.\n" #: src/android/aidl/types/file-descriptor.md:33 -#, fuzzy msgid "**birthday_service/src/lib.rs**:" -msgstr "_birthday_service/src/lib.rs_:" +msgstr "**birthday_service/src/lib.rs**:" #: src/android/aidl/types/file-descriptor.md:41 msgid "" @@ -13055,11 +13269,14 @@ msgid "" "`File`\n" " // object.\n" msgstr "" +"// Перетворюємо дескриптор файлу в `File`. `ParcelFileDescriptor` обертає \n" +" // `OwnedFd`, який може бути клонований і потім використаний для " +"створення об'єкту\n" +" // `File`.\n" #: src/android/aidl/types/file-descriptor.md:48 -#, fuzzy msgid "\"Invalid file handle\"" -msgstr "\"Неправильна довжина\"" +msgstr "\"Неправильний дескриптор файлу\"" #: src/android/aidl/types/file-descriptor.md:64 msgid "" @@ -13067,89 +13284,86 @@ msgid "" "`File` (or any other type that wraps an `OwnedFd`), and can be used to " "create a new `File` handle on the other side." msgstr "" +"Дескриптор `ParcelFileDescriptor` обгортає `OwnedFd`, тому може бути " +"створений з `File` (або будь-якого іншого типу, який обгортає `OwnedFd`), і " +"може бути використаний для створення нового дескриптора `File` на іншій " +"стороні." #: src/android/aidl/types/file-descriptor.md:67 msgid "" "Other types of file descriptors can be wrapped and sent, e.g. TCP, UDP, and " "UNIX sockets." msgstr "" +"Інші типи дескрипторів файлів можуть бути загорнуті та надіслані, наприклад, " +"TCP, UDP та UNIX-сокети." #: src/android/testing.md -#, fuzzy msgid "Testing in Android" -msgstr "Rust в Android" +msgstr "Тестування в Android" #: src/android/testing.md msgid "" "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 "" +"Спираючись на [Тестування](../testing.md), ми розглянемо, як працюють юніт-" +"тести в AOSP. Використовуйте модуль `rust_test` для ваших модульних тестів:" #: src/android/testing.md -#, fuzzy msgid "_testing/Android.bp_:" -msgstr "_hello_rust/Android.bp_:" +msgstr "_testing/Android.bp_:" #: src/android/testing.md -#, fuzzy msgid "\"libleftpad\"" -msgstr "\"libtextwrap\"" +msgstr "\"libleftpad\"" #: src/android/testing.md msgid "\"leftpad\"" -msgstr "" +msgstr "\"leftpad\"" #: src/android/testing.md -#, fuzzy msgid "\"libleftpad_test\"" -msgstr "\"libbirthday_bindgen_test\"" +msgstr "\"libleftpad_test\"" #: src/android/testing.md msgid "\"leftpad_test\"" -msgstr "" +msgstr "\"leftpad_test\"" #: src/android/testing.md src/android/interoperability/with-c/bindgen.md:116 msgid "\"general-tests\"" msgstr "\"general-tests\"" #: src/android/testing.md -#, fuzzy msgid "_testing/src/lib.rs_:" -msgstr "_hello_rust/src/lib.rs_:" +msgstr "_testing/src/lib.rs_:" #: src/android/testing.md -#, fuzzy msgid "//! Left-padding library.\n" -msgstr "//! Бібліотека привітання.\n" +msgstr "//! Бібліотека лівих відступів.\n" #: src/android/testing.md msgid "/// Left-pad `s` to `width`.\n" -msgstr "" +msgstr "/// Додати `s` зліва до `width`.\n" #: src/android/testing.md -#, fuzzy msgid "\"{s:>width$}\"" -msgstr "\"|{:^width$}|\"" +msgstr "\"{s:>width$}\"" #: src/android/testing.md -#, fuzzy msgid "\" foo\"" -msgstr "\"foo\"" +msgstr "\" foo\"" #: src/android/testing.md -#, fuzzy msgid "\"foobar\"" -msgstr "\"foo\"" +msgstr "\"foobar\"" #: src/android/testing.md -#, fuzzy msgid "You can now run the test with" -msgstr "Тепер ви можете автоматично генерувати прив’язки:" +msgstr "Тепер ви можете запустити тест за допомогою" #: src/android/testing.md -#, fuzzy msgid "The output looks like this:" -msgstr "Загальний підхід виглядає так:" +msgstr "Результат має такий вигляд:" #: src/android/testing.md msgid "" @@ -13164,12 +13378,24 @@ msgid "" "Test cases: finished with 2 passing and 0 failing out of 2 test cases\n" "```" msgstr "" +"```text\n" +"INFO: Elapsed time: 2.666s, Critical Path: 2.40s\n" +"INFO: 3 processes: 2 internal, 1 linux-sandbox.\n" +"INFO: Build completed successfully, 3 total actions\n" +"//comprehensive-rust-android/testing:libleftpad_test_host PASSED " +"in 2.3s\n" +" PASSED libleftpad_test.tests::long_string (0.0s)\n" +" PASSED libleftpad_test.tests::short_string (0.0s)\n" +"Test cases: finished with 2 passing and 0 failing out of 2 test cases\n" +"```" #: src/android/testing.md msgid "" "Notice how you only mention the root of the library crate. Tests are found " "recursively in nested modules." msgstr "" +"Зверніть увагу, що ви згадуєте лише корінь крейта бібліотеки. Тести " +"знаходяться рекурсивно у вкладених модулях." #: src/android/testing/googletest.md:7 msgid "" @@ -13224,9 +13450,14 @@ msgid "" "the library, with exercises to help you get comfortable with `googletest` " "macros, its matchers and its overall philosophy." msgstr "" +"Це лише поверхневий огляд, є багато вбудованих зрівнювачів. Подумайте про " +"те, щоб прочитати перший розділ [\"Поглиблене тестування для прикладних " +"програм на Rust\"](https://github.com/mainmatter/rust-advanced-testing-" +"workshop), самовчитель з Rust: він надає керований вступ до бібліотеки з " +"вправами, які допоможуть вам освоїтися з макросами `googletest` , його " +"зрівнювачами і його загальною філософією." #: src/android/testing/googletest.md:54 -#, fuzzy msgid "" "A particularly nice feature is that mismatches in multi-line strings are " "shown as a diff:" @@ -13271,7 +13502,6 @@ msgstr "" "які потім можна швидко імітувати:" #: src/android/testing/mocking.md:30 -#, fuzzy msgid "" "Mockall is the recommended mocking library in Android (AOSP). There are " "other [mocking libraries available on crates.io](https://crates.io/keywords/" @@ -13279,11 +13509,11 @@ msgid "" "libraries work in a similar fashion as Mockall, meaning that they make it " "easy to get a mock implementation of a given trait." msgstr "" -"Поради тут наведено для Android (AOSP), де рекомендованою бібліотекою для " -"імітації є Mockall. На crates.io доступні й інші [імітаційні бібліотеки] " -"(https://crates.io/keywords/mock), зокрема для імітації HTTP-сервісів. Інші " -"імітаційні бібліотеки працюють подібно до Mockall, що означає, що вони " -"дозволяють легко отримати імітаційну реалізацію заданого трейту." +"Mockall - рекомендована бібліотека для створення імітацій в Android (AOSP). " +"На crates.io доступні й інші [бібліотеки для імітації] (https://crates.io/" +"keywords/mock), зокрема для імітації HTTP-сервісів. Інші бібліотеки імітацій " +"працюють подібно до Mockall, тобто вони дозволяють легко отримати імітаційну " +"реалізацію заданого трейту." #: src/android/testing/mocking.md:36 msgid "" @@ -13624,6 +13854,11 @@ msgid "" "later\n" " // after it returns.\n" msgstr "" +"// БЕЗПЕКА: Вказівник, який ми передаємо, є дійсним, оскільки він прийшов з\n" +" // Rust посилання, а `name`, яке воно містить, посилається на `name`\n" +" // вище, яке також залишається дійсним. `print_card` не зберігає жодного " +"з вказівників, щоб використати\n" +" // їх пізніше після повернення.\n" #: src/android/interoperability/with-c/bindgen.md:101 msgid "" @@ -14461,7 +14696,6 @@ msgstr "" "згаяне на наступному занятті." #: src/chromium/cargo.md -#, fuzzy msgid "" "The Rust community typically uses `cargo` and libraries from [crates.io]" "(https://crates.io/). Chromium is built using `gn` and `ninja` and a curated " @@ -14670,7 +14904,6 @@ msgstr "" "файлів." #: src/chromium/cargo.md -#, fuzzy msgid "" "Disclaimer: a unique reason for using `cargo` was unavailability of `gn` " "when building and bootstrapping Rust standard library when building Rust " @@ -14681,7 +14914,6 @@ msgstr "" "інструментарію Rust." #: src/chromium/cargo.md -#, fuzzy msgid "" "`run_gnrt.py` uses Chromium's copy of `cargo` and `rustc`. `gnrt` depends on " "third-party libraries downloaded from the internet, but `run_gnrt.py` asks " @@ -15146,7 +15378,6 @@ msgstr "" "gn`, що містить:" #: src/exercises/chromium/build-rules.md:13 -#, fuzzy msgid "" "**Important**: note that `no_mangle` here is considered a type of unsafety " "by the Rust compiler, so you'll need to allow unsafe code in your `gn` " @@ -16810,7 +17041,7 @@ msgid "" "md#unsafe-code-in-safe-languages)" msgstr "" "Переконатися, що будь-який `unsafe` код достатньо підходить для [Правила " -"двох] (https://chromium.googlesource.com/chromium/src/+/main/docs/security/" +"двох](https://chromium.googlesource.com/chromium/src/+/main/docs/security/" "rule-of-2.md#unsafe-code-in-safe-languages)." #: src/chromium/adding-third-party-crates/reviews-and-audits.md:22 @@ -17133,9 +17364,8 @@ msgstr "" "review.googlesource.com/c/chromium/src/+/5096560)." #: src/bare-metal.md -#, fuzzy msgid "course: Bare Metal session: Morning" -msgstr "Залізо: Ранок" +msgstr "course: Bare Metal session: Morning" #: src/bare-metal.md msgid "Welcome to Bare Metal Rust" @@ -17178,7 +17408,6 @@ msgid "Some useful crates for bare-metal Rust development." msgstr "Кілька корисних крейтів для розробки Rust на голому залізі." #: src/bare-metal.md -#, fuzzy msgid "" "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://" @@ -17188,7 +17417,7 @@ msgid "" msgstr "" "Для частини курсу, присвяченої мікроконтролеру, ми використаємо [BBC micro:" "bit](https://microbit.org/) v2 як приклад. Це [плата розробки](https://tech." -"microbit.org/hardware/) на основі мікроконтролера Nordic nRF51822 із деякими " +"microbit.org/hardware/) на основі мікроконтролера Nordic nRF52833 із деякими " "світлодіодами та кнопками, акселерометром і компасом, підключеними до I2C, і " "вбудованим налагоджувачем SWD." @@ -17353,11 +17582,10 @@ msgstr "" "(кучі)](https://doc.rust-lang.org/stable/std/alloc/trait.GlobalAlloc.html)." #: src/bare-metal/alloc.md:23 -#, fuzzy msgid "// SAFETY: `HEAP` is only used here and `entry` is only called once.\n" msgstr "" -"// Безпечно, тому що `HEAP` використовується тільки тут і `entry` " -"викликається тільки один раз.\n" +"// БЕЗПЕКА: `HEAP` використовується тільки тут і `entry` викликається тільки " +"один раз.\n" #: src/bare-metal/alloc.md:25 msgid "// Give the allocator some memory to allocate.\n" @@ -17460,7 +17688,7 @@ msgstr "// Зміщення периферії GPIO\n" #: src/bare-metal/microcontrollers/mmio.md:24 msgid "// PIN_CNF fields\n" -msgstr "// Поля IN_CNF\n" +msgstr "// Поля PIN_CNF\n" #: src/bare-metal/microcontrollers/mmio.md:34 #: src/bare-metal/microcontrollers/pacs.md:21 @@ -17470,12 +17698,11 @@ msgstr "// Налаштуйте виводи GPIO 0 21 та 28 як push-pull в #: src/bare-metal/microcontrollers/mmio.md:37 #: src/bare-metal/microcontrollers/mmio.md:59 -#, fuzzy msgid "" "// SAFETY: The pointers are to valid peripheral control registers, and no\n" " // aliases exist.\n" msgstr "" -"// Безпечно, оскільки вказівники вказують на дійсні периферійні регістри \n" +"// БЕЗПЕКА: вказівники вказують на дійсні периферійні регістри \n" " // керування, і ніяких псевдонімів не існує.\n" #: src/bare-metal/microcontrollers/mmio.md:56 @@ -17674,13 +17901,12 @@ msgid "Many HAL crates follow this pattern." msgstr "Багато крейтів HAL дотримуються цієї моделі." #: src/bare-metal/microcontrollers/embedded-hal.md:3 -#, fuzzy msgid "" "The [`embedded-hal`](https://crates.io/crates/embedded-hal) crate provides a " "number of traits covering common microcontroller peripherals:" msgstr "" "Крейт [`embedded-hal`](https://crates.io/crates/embedded-hal) надає низку " -"трейтів, що охоплюють поширені периферійні пристрої мікроконтролерів." +"трейтів, що охоплюють поширені периферійні пристрої мікроконтролерів:" #: src/bare-metal/microcontrollers/embedded-hal.md:6 msgid "GPIO" @@ -17688,15 +17914,15 @@ msgstr "GPIO" #: src/bare-metal/microcontrollers/embedded-hal.md:7 msgid "PWM" -msgstr "" +msgstr "PWM" #: src/bare-metal/microcontrollers/embedded-hal.md:8 msgid "Delay timers" -msgstr "" +msgstr "Таймери затримки" #: src/bare-metal/microcontrollers/embedded-hal.md:9 msgid "I2C and SPI buses and devices" -msgstr "" +msgstr "Шини та пристрої I2C і SPI" #: src/bare-metal/microcontrollers/embedded-hal.md:11 msgid "" @@ -17707,7 +17933,6 @@ msgid "" msgstr "" #: src/bare-metal/microcontrollers/embedded-hal.md:14 -#, fuzzy msgid "" "Other crates then implement [drivers](https://github.com/rust-embedded/" "awesome-embedded-rust#driver-crates) in terms of these traits, e.g. an " @@ -17715,7 +17940,7 @@ msgid "" msgstr "" "Інші крейти потім реалізують [драйвери](https://github.com/rust-embedded/" "awesome-embedded-rust#driver-crates) у термінах цих трейтів, наприклад " -"драйверу акселерометра може знадобитися реалізація шини I2C або SPI." +"драйверу акселерометра може знадобитися кземпляр пристрою I2C або SPI." #: src/bare-metal/microcontrollers/embedded-hal.md:19 msgid "" @@ -17723,6 +17948,9 @@ msgid "" "them, as initialisation and configuration is usually highly platform-" "specific." msgstr "" +"Трейти охоплюють використання периферійних пристроїв, але не їх " +"ініціалізацію чи конфігурацію, оскільки ініціалізація та конфігурація, як " +"правило, сильно залежить від платформи." #: src/bare-metal/microcontrollers/embedded-hal.md:21 msgid "" @@ -17733,23 +17961,22 @@ msgstr "" "таких як Linux на Raspberry Pi." #: src/bare-metal/microcontrollers/embedded-hal.md:23 -#, fuzzy msgid "" "[`embedded-hal-async`](https://crates.io/crates/embedded-hal-async) provides " "async versions of the traits." msgstr "" -"Крейт [`embedded-hal`](https://crates.io/crates/embedded-hal) надає низку " -"трейтів, що охоплюють поширені периферійні пристрої мікроконтролерів." +"Крейт [`embedded-hal-async`](https://crates.io/crates/embedded-hal-async) " +"надає асинхронні версії трейтів." #: src/bare-metal/microcontrollers/embedded-hal.md:24 -#, fuzzy msgid "" "[`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 "" -"Крейт [`embedded-hal`](https://crates.io/crates/embedded-hal) надає низку " -"трейтів, що охоплюють поширені периферійні пристрої мікроконтролерів." +"Крейт [`embedded-hal-nb`](https://crates.io/crates/embedded-hal-nb) надає " +"інший підхід до неблокуючого вводу/виводу, заснований на крейті [`nb`]" +"(https://crates.io/crates/nb)." #: src/bare-metal/microcontrollers/probe-rs.md:3 msgid "" @@ -18130,9 +18357,8 @@ msgstr "" " // увімкнути всі світлодіоди.\n" #: src/bare-metal/aps.md -#, fuzzy msgid "session: Afternoon" -msgstr "Одночасність виконання: Полудень" +msgstr "session: Afternoon" #: src/bare-metal/aps.md msgid "Application processors" @@ -18439,12 +18665,11 @@ msgstr "" "гіпервізора), щоб сказати прошивці вимкнути систему:" #: src/bare-metal/aps/inline-assembly.md:20 -#, fuzzy msgid "" "// SAFETY: this only uses the declared registers and doesn't do anything\n" " // with memory.\n" msgstr "" -"// Безпечно, тому що тут використовуються тільки оголошені регістри\n" +"// БЕЗПЕКА: тут використовуються тільки оголошені регістри\n" " // і нічого не робиться з пам'яттю.\n" #: src/bare-metal/aps/inline-assembly.md:23 @@ -18651,12 +18876,11 @@ msgid "// Wait until there is room in the TX buffer.\n" msgstr "// Чекаємо, поки не звільниться місце в буфері TX.\n" #: src/bare-metal/aps/uart.md:34 src/bare-metal/aps/uart.md:46 -#, fuzzy msgid "" "// SAFETY: We know that the base address points to the control\n" " // registers of a PL011 device which is appropriately mapped.\n" msgstr "" -"// Безпечно, тому що ми знаємо, що базова адреса вказує на регістри\n" +"// БЕЗПЕКА: ми знаємо, що базова адреса вказує на регістри\n" " // керування пристрою PL011, які відповідним чином відображені.\n" #: src/bare-metal/aps/uart.md:37 src/bare-metal/aps/better-uart/driver.md:33 @@ -18715,12 +18939,11 @@ msgstr "" "Ми вивели трейт `Debug`. Також було б корисно реалізувати ще кілька трейтів." #: src/bare-metal/aps/uart/traits.md:17 -#, fuzzy msgid "" "// SAFETY: `Uart` just contains a pointer to device memory, which can be\n" "// accessed from any context.\n" msgstr "" -"// Безпечно, тому що це всього лише вказівник на пам'ять пристрою, до якого\n" +"// БЕЗПЕКА: `Uart` містить лише покажчик на пам'ять пристрою, до якого\n" "// можна отримати доступ з будь-якого контексту.\n" #: src/bare-metal/aps/uart/traits.md:25 @@ -19011,12 +19234,11 @@ msgstr "/// Драйвер для PL011 UART.\n" #: src/bare-metal/aps/better-uart/driver.md:30 #: src/bare-metal/aps/better-uart/driver.md:56 -#, fuzzy msgid "" "// SAFETY: We know that self.registers points to the control registers\n" " // of a PL011 device which is appropriately mapped.\n" msgstr "" -"// Безпечно, тому що ми знаємо, що self.registers вказує на керуючі\n" +"// БЕЗПЕКА: ми знаємо, що self.registers вказує на керуючі\n" " // регістри пристрою PL011, який відповідним чином відображено.\n" #: src/bare-metal/aps/better-uart/driver.md:41 @@ -19028,12 +19250,11 @@ msgstr "" " /// отримано.\n" #: src/bare-metal/aps/better-uart/driver.md:47 -#, fuzzy msgid "" "// SAFETY: We know that self.registers points to the control\n" " // registers of a PL011 device which is appropriately mapped.\n" msgstr "" -"// Безпечно, тому що ми знаємо, що self.registers вказує на керуючі\n" +"// БЕЗПЕКА: ми знаємо, що self.registers вказує на керуючі\n" " // регістри пристрою PL011, який відповідним чином відображено.\n" #: src/bare-metal/aps/better-uart/driver.md:50 @@ -19071,13 +19292,11 @@ msgstr "/// Базова адреса основного PL011 UART.\n" #: 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 -#, fuzzy msgid "" "// SAFETY: `PL011_BASE_ADDRESS` is the base address of a PL011 device, and\n" " // nothing else accesses that address range.\n" msgstr "" -"// Безпечно, оскільки `PL011_BASE_ADDRESS` є базовою адресою пристрою " -"PL011,\n" +"// БЕЗПЕКА: `PL011_BASE_ADDRESS` є базовою адресою пристрою PL011,\n" " // і ніщо інше не має доступу до цього діапазону адресації.\n" #: src/bare-metal/aps/better-uart/using.md:29 @@ -19108,7 +19327,7 @@ msgid "" "function is called from our entry point code in `entry.S`. See the speaker " "notes there for details." msgstr "" -"Як і у прикладі [inline-assembly](../inline-assembly.md), ця функція `main` " +"Як і у прикладі [вбудована збірка](../inline-assembly.md), ця функція `main` " "викликається з нашого коду точки входу в `entry.S`. Докладніше дивиться у " "примітках доповідача." @@ -19439,7 +19658,7 @@ msgstr "" "— це сторонній крейт, який реалізує базовий системний розподільник між " "друзями. Його можна використовувати як для [`LockedHeap`](https://docs.rs/" "buddy_system_allocator/0.9.0/buddy_system_allocator/struct.LockedHeap.html), " -"так і для реалізації [`GlobalAlloc`](https://doc.rust-lang .org/core/alloc/" +"так і для реалізації [`GlobalAlloc`](https://doc.rust-lang.org/core/alloc/" "trait.GlobalAlloc.html), щоб ви могли використовувати стандартний крейт " "`alloc` (як ми бачили [раніше](../alloc.md)), або для виділення іншого " "адресного простору. Наприклад, ми можемо захотіти виділити простір MMIO для " @@ -19735,24 +19954,21 @@ msgid "\"main({:#x}, {:#x}, {:#x}, {:#x})\"" msgstr "\"main({:#x}, {:#x}, {:#x}, {:#x})\"" #: src/exercises/bare-metal/solutions-afternoon.md:51 -#, fuzzy msgid "" "// 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 "" -"// Безпечно, оскільки `GICD_BASE_ADDRESS` і `GICR_BASE_ADDRESS` є базовими\n" +"// БЕЗПЕКА: `GICD_BASE_ADDRESS` і `GICR_BASE_ADDRESS` є базовими\n" " // адресами дистриб'ютора і редистриб'ютора GICv3 відповідно, і ніщо\n" " // інше не має доступу до цих адресних діапазонів.\n" #: src/exercises/bare-metal/solutions-afternoon.md:57 -#, fuzzy msgid "" "// SAFETY: `PL031_BASE_ADDRESS` is the base address of a PL031 device, and\n" " // nothing else accesses that address range.\n" msgstr "" -"// Безпечно, оскільки `PL031_BASE_ADDRESS` є базовою адресою пристрою " -"PL031,\n" +"// БЕЗПЕКА: `PL031_BASE_ADDRESS` є базовою адресою пристрою PL031,\n" " // і ніщо інше не має доступу до цього діапазону адресації.\n" #: src/exercises/bare-metal/solutions-afternoon.md:62 @@ -19857,12 +20073,11 @@ msgstr "/// Зчитує поточне значення RTC.\n" #: src/exercises/bare-metal/solutions-afternoon.md:199 #: src/exercises/bare-metal/solutions-afternoon.md:211 #: src/exercises/bare-metal/solutions-afternoon.md:218 -#, fuzzy msgid "" "// SAFETY: We know that self.registers points to the control registers\n" " // of a PL031 device which is appropriately mapped.\n" msgstr "" -"// Безпечно, тому що ми знаємо, що self.registers вказує на керуючі\n" +"// БЕЗПЕКА: ми знаємо, що self.registers вказує на керуючі\n" " // регістри пристрою PL031, який відповідним чином відображено.\n" #: src/exercises/bare-metal/solutions-afternoon.md:177 @@ -19912,17 +20127,16 @@ msgid "/// Clears a pending interrupt, if any.\n" msgstr "/// Очищає очікуване переривання, якщо таке є.\n" #: src/exercises/bare-metal/solutions-afternoon.md:223 -#, fuzzy msgid "" "// SAFETY: `Rtc` just contains a pointer to device memory, which can be\n" "// accessed from any context.\n" msgstr "" -"// Безпечно, тому що це всього лише вказівник на пам'ять пристрою, до якого\n" +"// БЕЗПЕКА: `Rtc` просто містить вказівник на пам'ять пристрою, до якого\n" "// можна отримати доступ з будь-якого контексту.\n" #: src/concurrency/welcome.md msgid "course: Concurrency session: Morning target_minutes: 180" -msgstr "" +msgstr "course: Concurrency session: Morning target_minutes: 180" #: src/concurrency/welcome.md msgid "Welcome to Concurrency in Rust" @@ -19951,11 +20165,15 @@ msgstr "" msgid "" "Rust lets us access OS concurrency toolkit: threads, sync. primitives, etc." msgstr "" +"Rust дозволяє нам отримати доступ до інструментарію одночасності виконнання " +"ОС: потоків, примітивів синхронізації тощо." #: src/concurrency/welcome.md msgid "" "The type system gives us safety for concurrency without any special features." msgstr "" +"Система типів дає нам безпеку для одночасного виконання без будь-яких " +"спеціальних функцій." #: src/concurrency/welcome.md msgid "" @@ -19963,6 +20181,10 @@ msgid "" "g., a called function that might mutate an argument or save references to it " "to read later) save us from multi-threading issues." msgstr "" +"Ті самі інструменти, які допомагають з \"одночасним\" доступом в одному " +"потоці (наприклад, викликана функція, яка може змінювати аргумент або " +"зберігати посилання на нього, щоб прочитати пізніше), позбавляють нас від " +"проблем багатопотоковості." #: src/concurrency/threads/plain.md:7 msgid "Rust threads work similarly to threads in other languages:" @@ -19992,150 +20214,158 @@ msgstr "" #: src/concurrency/threads/plain.md:34 msgid "Rust thread APIs look not too different from e.g. C++ ones." -msgstr "" +msgstr "API потоків Rust зовні не надто відрізняються від API, наприклад, C++." #: src/concurrency/threads/plain.md:36 -#, fuzzy msgid "Run the example." -msgstr "Запустіть приклад за допомогою:" +msgstr "Запустіть приклад." #: src/concurrency/threads/plain.md:37 msgid "" "5ms timing is loose enough that main and spawned threads stay mostly in " "lockstep." msgstr "" +"Таймінг 5 мс є достатньо вільним, щоб головний і породжений потоки " +"залишалися переважно в одному ритмі." #: src/concurrency/threads/plain.md:39 msgid "Notice that the program ends before the spawned thread reaches 10!" msgstr "" +"Зверніть увагу, що програма завершується до того, як породжений потік " +"досягне 10!" #: src/concurrency/threads/plain.md:40 msgid "" "This is because main ends the program and spawned threads do not make it " "persist." msgstr "" +"Це тому, що main завершує програму, а породжені потоки не змушують її " +"продовжувати." #: src/concurrency/threads/plain.md:42 msgid "Compare to pthreads/C++ std::thread/boost::thread if desired." -msgstr "" +msgstr "За бажанням можна порівняти з pthreads/C++ std::thread/boost::thread." #: src/concurrency/threads/plain.md:44 msgid "How do we wait around for the spawned thread to complete?" -msgstr "" +msgstr "Як нам дочекатися завершення породженого потоку?" #: src/concurrency/threads/plain.md:45 -#, fuzzy msgid "" "[`thread::spawn`](https://doc.rust-lang.org/std/thread/fn.spawn.html) " "returns a `JoinHandle`. Look at the docs." msgstr "" -"[`Default`](https://doc.rust-lang.org/std/default/trait.Default.html) " -"використовується для створення стандартного екземпляра типу." +"[`thread::spawn`](https://doc.rust-lang.org/std/thread/fn.spawn.html) " +"повертає `JoinHandle`. Перегляньте документацію." #: src/concurrency/threads/plain.md:46 msgid "" "`JoinHandle` has a [`.join()`](https://doc.rust-lang.org/std/thread/struct." "JoinHandle.html#method.join) method that blocks." msgstr "" +"У `JoinHandle` є метод [`.join()`](https://doc.rust-lang.org/std/thread/" +"struct.JoinHandle.html#method.join), який блокує." #: src/concurrency/threads/plain.md:48 -#, fuzzy msgid "" "Use `let handle = thread::spawn(...)` and later `handle.join()` to wait for " "the thread to finish and have the program count all the way to 10." msgstr "" "Використовуйте `let handle = thread::spawn(...)`, а потім `handle.join()`, " -"щоб дочекатися завершення потоку." +"щоб дочекатися завершення потоку і змусити програму дорахувати до 10.." #: src/concurrency/threads/plain.md:51 msgid "Now what if we want to return a value?" -msgstr "" +msgstr "А що, якщо ми хочемо повернути значення?" #: src/concurrency/threads/plain.md:52 msgid "Look at docs again:" -msgstr "" +msgstr "Перегляньте документацію ще раз:" #: src/concurrency/threads/plain.md:53 -#, fuzzy msgid "" "[`thread::spawn`](https://doc.rust-lang.org/std/thread/fn.spawn.html)'s " "closure returns `T`" msgstr "" -"Однак для цього можна використовувати [потік із обмеженою областю](https://" -"doc.rust-lang.org/std/thread/fn.scope.html):" +"Закриття [`thread::spawn`](https://doc.rust-lang.org/std/thread/fn.spawn." +"html) повертає `T`." #: src/concurrency/threads/plain.md:54 msgid "" "`JoinHandle` [`.join()`](https://doc.rust-lang.org/std/thread/struct." "JoinHandle.html#method.join) returns `thread::Result`" msgstr "" +"`JoinHandle` [`.join()`](https://doc.rust-lang.org/std/thread/struct." +"JoinHandle.html#method.join) повертає `thread::Result`" #: src/concurrency/threads/plain.md:56 -#, fuzzy msgid "" "Use the `Result` return value from `handle.join()` to get access to the " "returned value." msgstr "" -"Використовуйте значення, яке повертає `Result` з `handle.join()`, щоб " -"отримати доступ до корисного навантаження паніки. Це гарний час, щоб " -"поговорити про [`Any`](https://doc.rust-lang.org/std/any/index.html)." +"Використовуйте значення `Result`, що повертається з `handle.join()`, щоб " +"отримати доступ до значення, що повертається." #: src/concurrency/threads/plain.md:59 msgid "Ok, what about the other case?" -msgstr "" +msgstr "Гаразд, а як щодо іншого випадку?" #: src/concurrency/threads/plain.md:60 -#, fuzzy msgid "Trigger a panic in the thread. Note that this doesn't panic `main`." -msgstr "Викликає паніку в потоці, зауважте, що це не впливає на `main`." +msgstr "Викликає паніку в потоці. Зауважте, що це не впливає на `main`." #: src/concurrency/threads/plain.md:61 -#, fuzzy msgid "" "Access the panic payload. This is a good time to talk about [`Any`](https://" "doc.rust-lang.org/std/any/index.html)." msgstr "" -"Використовуйте значення, яке повертає `Result` з `handle.join()`, щоб " -"отримати доступ до корисного навантаження паніки. Це гарний час, щоб " -"поговорити про [`Any`](https://doc.rust-lang.org/std/any/index.html)." +"Дає доступ до корисного навантаження паніки. Це гарний час, щоб поговорити " +"про [`Any`](https://doc.rust-lang.org/std/any/index.html)." #: src/concurrency/threads/plain.md:63 msgid "Now we can return values from threads! What about taking inputs?" msgstr "" +"Тепер ми можемо повертати значення з потоків! А як щодо отримання вхідних " +"даних?" #: src/concurrency/threads/plain.md:64 msgid "Capture something by reference in the thread closure." -msgstr "" +msgstr "Захоплюємо щось за посиланням у закритті потоку." #: src/concurrency/threads/plain.md:65 msgid "An error message indicates we must move it." -msgstr "" +msgstr "Повідомлення про помилку вказує на те, що ми повинні його перемістити." #: src/concurrency/threads/plain.md:66 msgid "Move it in, see we can compute and then return a derived value." msgstr "" +"Переміщуємо його, бачимо, що можемо обчислити, а потім повертаємо похідне " +"значення." #: src/concurrency/threads/plain.md:68 msgid "If we want to borrow?" -msgstr "" +msgstr "Якщо ми хочемо позичити?" #: src/concurrency/threads/plain.md:69 msgid "" "Main kills child threads when it returns, but another function would just " "return and leave them running." msgstr "" +"Main вбиває дочірні потоки, коли повертається, але інша функція просто " +"повернеться і залишить їх працювати." #: src/concurrency/threads/plain.md:71 msgid "That would be stack use-after-return, which violates memory safety!" msgstr "" +"Це буде використання стеку після повернення, що порушує безпеку пам'яті!" #: src/concurrency/threads/plain.md:72 msgid "How do we avoid this? see next slide." -msgstr "" +msgstr "Як цього уникнути? Дивіться наступний слайд." #: src/concurrency/threads/scoped.md:2 msgid "minutes: 13" -msgstr "" +msgstr "хвилин: 13" #: src/concurrency/threads/scoped.md:7 msgid "Normal threads cannot borrow from their environment:" @@ -20168,7 +20398,7 @@ msgstr "" #: src/concurrency/channels/senders-receivers.md:2 msgid "minutes: 9" -msgstr "" +msgstr "хвилин: 9" #: src/concurrency/channels/senders-receivers.md:7 msgid "" @@ -20252,13 +20482,12 @@ msgstr "" "якщо канал закрито. Канал закривається, коли отримувача видалено." #: src/concurrency/channels/bounded.md:40 -#, fuzzy msgid "" "A bounded channel with a size of zero is called a \"rendezvous channel\". " "Every send will block the current thread until another thread calls `recv`." msgstr "" -"Обмежений канал нульовим розміром називається \"каналом зустрічі\". Кожне " -"надсилання блокуватиме поточний потік, доки інший потік не викличе `read`." +"Обмежений канал з нульовим розміром називається \"каналом зустрічі\". Кожне " +"надсилання блокуватиме поточний потік, доки інший потік не викличе `recv`." #: src/concurrency/send-sync/marker-traits.md:7 msgid "" @@ -20285,7 +20514,6 @@ msgstr "" "`Sync`, якщо безпечно переміщувати `&T` через межу потоку." #: src/concurrency/send-sync/marker-traits.md:15 -#, fuzzy msgid "" "`Send` and `Sync` are [unsafe traits](../../unsafe-rust/unsafe-traits.md). " "The compiler will automatically derive them for your types as long as they " @@ -20294,8 +20522,8 @@ msgid "" msgstr "" "`Send` та `Sync` є [небезпечними трейтами](../unsafe/unsafe-traits.md). " "Компілятор автоматично виведе їх для ваших типів, якщо вони містять лише " -"типи `Send` і `Sync`. Ви також можете застосувати їх вручну, якщо знаєте, що " -"це дійсно." +"типи `Send` і `Sync`. Ви також можете реалізувати їх вручну, якщо знаєте, що " +"це допустимо." #: src/concurrency/send-sync/marker-traits.md:25 msgid "" @@ -20378,7 +20606,7 @@ msgstr "" #: src/concurrency/send-sync/examples.md:2 #: src/concurrency/async/async-await.md:2 src/concurrency/async/tasks.md:2 msgid "minutes: 6" -msgstr "" +msgstr "хвилин: 6" #: src/concurrency/send-sync/examples.md:7 msgid "`Send + Sync`" @@ -20409,9 +20637,8 @@ msgid "`Mutex`: Explicitly thread-safe via internal locking." msgstr "`Mutex`: явно потокобезпечний через внутрішнє блокування." #: src/concurrency/send-sync/examples.md:16 -#, fuzzy msgid "`mpsc::Sender`: As of 1.72.0." -msgstr "`mpsc::Sender`" +msgstr "`mpsc::Sender`: Починаючи з 1.72.0." #: src/concurrency/send-sync/examples.md:17 msgid "`AtomicBool`, `AtomicU8`, ...: Uses special atomic instructions." @@ -20548,7 +20775,7 @@ msgstr "`std::sync::Weak` може допомогти." #: src/concurrency/shared-state/mutex.md:2 msgid "minutes: 14" -msgstr "" +msgstr "хвилин: 14" #: src/concurrency/shared-state/mutex.md:7 msgid "" @@ -20840,11 +21067,15 @@ msgid "" "(https://docs.rs/scraper/). Finally, we'll need some way of handling errors, " "we will use [`thiserror`](https://docs.rs/thiserror/)." msgstr "" +"Для цього вам знадобиться HTTP-клієнт, наприклад, [`reqwest`](https://docs." +"rs/reqwest/). Вам також знадобиться спосіб пошуку лінків, ми можемо " +"використати [`scraper`](https://docs.rs/scraper/). Нарешті, нам знадобиться " +"спосіб обробки помилок, ми скористаємося [`thiserror`](https://docs.rs/" +"thiserror/)." #: src/concurrency/sync-exercises/link-checker.md:16 -#, fuzzy msgid "Create a new Cargo project and `reqwest` it as a dependency with:" -msgstr "Створіть новий проект Cargo та додайте такі залежності:" +msgstr "Створіть новий проект Cargo та додайте `reqwest` як залежность з:" #: src/concurrency/sync-exercises/link-checker.md:26 msgid "" @@ -21012,7 +21243,7 @@ msgstr "\"Неправильні URL-адреси: {:#?}\"" #: src/concurrency/welcome-async.md msgid "session: Afternoon target_minutes: 180" -msgstr "" +msgstr "session: Afternoon target_minutes: 180" #: src/concurrency/welcome-async.md msgid "" @@ -21272,7 +21503,6 @@ msgstr "" "навіть якщо їх ніколи не використовувати." #: src/concurrency/async/runtimes/tokio.md:3 -#, fuzzy msgid "Tokio provides:" msgstr "Tokio надає:" @@ -21635,7 +21865,6 @@ msgstr "" "призвести до проблем, які далі обговорюються на слайді про закріплення." #: src/concurrency/async-pitfalls.md -#, fuzzy msgid "" "Async / await provides convenient and efficient abstraction for concurrent " "asynchronous programming. However, the async/await model in Rust also comes " @@ -21645,7 +21874,7 @@ msgstr "" "Async / await забезпечує зручну та ефективну абстракцію для асинхронного " "програмування з одночасним виконанням. Однак, модель async/await у Rust " "також має свої підводні камені та пастки. Ми проілюструємо деякі з них у " -"цьому розділі:" +"цьому розділі." #: src/concurrency/async-pitfalls/blocking-executor.md:5 msgid "Blocking the executor" @@ -21845,7 +22074,6 @@ msgstr "" "`Box::pin`:" #: src/concurrency/async-pitfalls/pin.md:107 -#, fuzzy 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 " @@ -21853,7 +22081,7 @@ msgid "" msgstr "" "Це компілюється, але після закінчення часу очікування на кожній ітерації " "відображається `Poll::Ready` (злитий ф'ючерс міг би допомогти в цьому). " -"Оновіть, щоб скидати `timeout_fut` кожного разу, коли він спливає." +"Оновіть, щоб скидати `timeout_fut` кожного разу, коли він спливає:" #: src/concurrency/async-pitfalls/pin.md:122 msgid "" @@ -21914,34 +22142,44 @@ msgid "" "in traits, as the desugaring for `async fn` includes `-> impl Future`." msgstr "" +"Асинхронні методи у трейтах було стабілізовано нещодавно, у випуску 1.75. Це " +"вимагало підтримки використання `impl Trait` з позицією повернення (RPIT) у " +"трейтах, оскільки десигнування для `async fn` включає `-> impl Future`." #: src/concurrency/async-pitfalls/async-traits.md:11 msgid "" "However, even with the native support today there are some pitfalls around " "`async fn` and RPIT in traits:" msgstr "" +"Однак, навіть з нативною підтримкою сьогодні існують деякі підводні камені " +"навколо `async fn` та RPIT у трейтах:" #: src/concurrency/async-pitfalls/async-traits.md:14 msgid "" "Return-position impl Trait captures all in-scope lifetimes (so some patterns " "of borrowing cannot be expressed)" msgstr "" +"Позиція повернення impl Trait фіксує всі терміни життя в межах області " +"застосування (тому деякі моделі запозичення не можуть бути виражені)" #: src/concurrency/async-pitfalls/async-traits.md:17 msgid "" "Traits whose methods use return-position `impl trait` or `async` are not " "`dyn` compatible." msgstr "" +"Трейти, методи яких використовують позицію повернення `impl trait` або " +"`async`, не сумісні з `dyn`." #: src/concurrency/async-pitfalls/async-traits.md:20 -#, fuzzy msgid "" "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 "" -"Крейт [async_trait](https://docs.rs/async-trait/latest/async_trait/) надає " -"обхідний шлях за допомогою макросу:" +"Якщо нам потрібна підтримка `dyn`, то крейт [async_trait](https://docs.rs/" +"async-trait/latest/async_trait/) надає обхідний шлях за допомогою макросу, з " +"деякими застереженнями:" #: src/concurrency/async-pitfalls/async-traits.md:50 msgid "\"running all sleepers..\"" @@ -22107,7 +22345,7 @@ msgstr "" #: src/concurrency/async-exercises/dining-philosophers.md:41 #: src/concurrency/async-exercises/solutions.md:33 msgid "// Keep trying until we have both forks\n" -msgstr "" +msgstr "// Продовжуємо пробувати, поки не знайдемо обидві виделки\n" #: src/concurrency/async-exercises/dining-philosophers.md:56 #: src/concurrency/async-exercises/solutions.md:89 @@ -22183,7 +22421,6 @@ msgid "_Cargo.toml_:" msgstr "_Cargo.toml_:" #: src/concurrency/async-exercises/chat-app.md:22 -#, fuzzy msgid "" "```toml\n" "[package]\n" @@ -22201,16 +22438,16 @@ msgid "" msgstr "" "```toml\n" "[package]\n" -"name = \"link-checker\"\n" +"name = \"chat-async\"\n" "version = \"0.1.0\"\n" "edition = \"2021\"\n" -"publish = false\n" "\n" "[dependencies]\n" -"reqwest = { version = \"0.11.12\", features = [\"blocking\", \"rustls-" -"tls\"] }\n" -"scraper = \"0.13.0\"\n" -"thiserror = \"1.0.37\"\n" +"futures-util = { version = \"0.3.30\", features = [\"sink\"] }\n" +"http = \"1.1.0\"\n" +"tokio = { version = \"1.38.0\", features = [\"full\"] }\n" +"tokio-websockets = { version = \"0.8.3\", features = [\"client\", " +"\"fastrand\", \"server\", \"sha1_smol\"] }\n" "```" #: src/concurrency/async-exercises/chat-app.md:35 @@ -22393,12 +22630,16 @@ msgid "" "// 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 "" +"// Якщо ми не отримали ліву виделку, кидаємо праву, якщо вона у нас є,\n" +" // і даємо можливість іншим завданням просуватися вперед.\n" #: src/concurrency/async-exercises/solutions.md:46 msgid "" "// If we didn't get the right fork, drop the left fork and let\n" " // other tasks make progress.\n" msgstr "" +"// Якщо ми не отримали правої виделки, кидаємо ліву і даємо можливість \n" +" // іншим завданням просуватися вперед.\n" #: src/concurrency/async-exercises/solutions.md:58 msgid "// The locks are dropped here\n" @@ -22442,7 +22683,7 @@ msgstr "\"З сервера: {}\"" #: src/thanks.md msgid "course: none" -msgstr "" +msgstr "course: none" #: src/thanks.md msgid "" @@ -22892,13 +23133,12 @@ msgstr "" "одночасності виконання." #: src/glossary.md -#, fuzzy msgid "" "Rust Fundamentals: \n" "Days 1 to 4 of this course." msgstr "" "Основи Rust: \n" -"Дні з 1 по 3 цього курсу." +"Дні з 1 по 4 цього курсу." #: src/glossary.md msgid "" @@ -22953,15 +23193,14 @@ msgstr "" "або елементів зі `'static` часом життя." #: src/glossary.md -#, fuzzy msgid "" "string: \n" "A data type storing textual data. See [Strings](references/strings.html) for " "more." msgstr "" -"рядок: \n" -"Тип даних, що зберігає текстові дані. Дивіться [`String` vs `str`](basic-" -"syntax/string-slices.html) для отримання додаткової інформації." +"string: \n" +"Тип даних, що зберігає текстові дані. Дивіться [Strings](references/strings." +"html) для отримання додаткової інформації." #: src/glossary.md msgid "" @@ -23260,6 +23499,11 @@ msgid "" "built-in testing framework. It covers `googletest`, snapshot testing, " "mocking as well as how to write your own custom test harness." msgstr "" +"[Розширене тестування для прикладних програм Rust](https://github.com/" +"mainmatter/rust-advanced-testing-workshop): воркшоп для самостійної роботи, " +"який виходить за рамки вбудованого тестового фреймворку Rust. Він охоплює " +"`googletest`, тестування знімками, імітацію, а також те, як написати свій " +"власний тестовий інструментарій." #: src/other-resources.md msgid ""