From b51cc87561e04a391970de2ee0867841d067ec23 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Sun, 24 Mar 2024 21:16:56 -0400 Subject: [PATCH] uk: Day 4: afternoon Signed-off-by: Andriy Redko --- po/uk.po | 474 ++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 291 insertions(+), 183 deletions(-) diff --git a/po/uk.po b/po/uk.po index bca4a9abeb84..05939260680d 100644 --- a/po/uk.po +++ b/po/uk.po @@ -551,11 +551,11 @@ msgstr "Паніки" #: src/SUMMARY.md src/error-handling/try.md msgid "Try Operator" -msgstr "Try оператор" +msgstr "Оператор спроб" #: src/SUMMARY.md src/error-handling/try-conversions.md msgid "Try Conversions" -msgstr "Try Перетворення" +msgstr "Перетворення спроб" #: src/SUMMARY.md msgid "`Error` Trait" @@ -11200,45 +11200,47 @@ msgstr "\" 0 0 \"" #: src/welcome-day-4-afternoon.md msgid "[Error Handling](./error-handling.md) (45 minutes)" -msgstr "" +msgstr "[Обробка помилок](./error-handling.md) (45 хвилин)" #: src/welcome-day-4-afternoon.md msgid "[Unsafe Rust](./unsafe-rust.md) (1 hour and 5 minutes)" -msgstr "" +msgstr "[Небезпечний Rust](./unsafe-rust.md) (1 година 5 хвилин)" #: src/welcome-day-4-afternoon.md msgid "Including 10 minute breaks, this session should take about 2 hours" -msgstr "" +msgstr "Враховуючи 10-хвилинні перерви, ця сесія має тривати близько 2 годин" #: src/error-handling.md msgid "[Panics](./error-handling/panics.md) (3 minutes)" -msgstr "" +msgstr "[Паніки](./error-handling/panics.md) (3 хвилини" #: src/error-handling.md msgid "[Try Operator](./error-handling/try.md) (5 minutes)" -msgstr "" +msgstr "[Оператор спроб](./error-handling/try.md) (5 хвилин)" #: src/error-handling.md msgid "[Try Conversions](./error-handling/try-conversions.md) (5 minutes)" -msgstr "" +msgstr "[Перетворення спроб](./error-handling/try-conversions.md) (5 хвилин)" #: src/error-handling.md msgid "[Error Trait](./error-handling/error.md) (5 minutes)" -msgstr "" +msgstr "[Трейт Error](./error-handling/error.md) (5 хвилин)" #: src/error-handling.md msgid "" "[thiserror and anyhow](./error-handling/thiserror-and-anyhow.md) (5 minutes)" msgstr "" +"[thiserror та anyhow](./error-handling/thiserror-and-anyhow.md) (5 хвилин)" #: src/error-handling.md msgid "" "[Exercise: Rewriting with Result](./error-handling/exercise.md) (20 minutes)" msgstr "" +"[Вправа: Переписування з Result](./error-handling/exercise.md) (20 хвилин)" #: src/error-handling/panics.md msgid "Rust handles fatal errors with a \"panic\"." -msgstr "" +msgstr "Rust обробляє фатальні помилки з \"panic\"." #: src/error-handling/panics.md msgid "Rust will trigger a panic if a fatal error happens at runtime:" @@ -11247,33 +11249,36 @@ msgstr "" #: src/error-handling/panics.md msgid "\"v[100]: {}\"" -msgstr "" +msgstr "\"v[100]: {}\"" #: src/error-handling/panics.md msgid "Panics are for unrecoverable and unexpected errors." -msgstr "Паніка – це невиправні та несподівані помилки." +msgstr "Паніки – це невиправні та несподівані помилки." #: src/error-handling/panics.md msgid "Panics are symptoms of bugs in the program." -msgstr "Паніка є ознакою помилок у програмі." +msgstr "Паніки є ознакою помилок у програмі." #: src/error-handling/panics.md msgid "Runtime failures like failed bounds checks can panic" msgstr "" +"Збої у виконанні, такі як невдалі перевірки меж, можуть викликати паніку" #: src/error-handling/panics.md msgid "Assertions (such as `assert!`) panic on failure" -msgstr "" +msgstr "Твердження (наприклад, `assert!`) панікують у разі невдачі" #: src/error-handling/panics.md msgid "Purpose-specific panics can use the `panic!` macro." -msgstr "" +msgstr "Для спеціальних панік можна використовувати макрос `panic!`." #: src/error-handling/panics.md msgid "" "A panic will \"unwind\" the stack, dropping values just as if the functions " "had returned." msgstr "" +"Паніка \"розмотує\" стек, відкидаючи значення так, як якщо б функції " +"повернулися." #: src/error-handling/panics.md msgid "" @@ -11292,21 +11297,23 @@ msgstr "" #: src/error-handling/panics.md msgid "\"No problem here!\"" -msgstr "" +msgstr "\"Ніяких проблем!\"" #: src/error-handling/panics.md msgid "\"{result:?}\"" -msgstr "" +msgstr "\"{result:?}\"" #: src/error-handling/panics.md msgid "\"oh no!\"" -msgstr "" +msgstr "\"о, ні!\"" #: src/error-handling/panics.md msgid "" "Catching is unusual; do not attempt to implement exceptions with " "`catch_unwind`!" msgstr "" +"Перехоплення є незвичайним; не намагайтеся реалізувати виключення за " +"допомогою `catch_unwind`!" #: src/error-handling/panics.md msgid "" @@ -11328,6 +11335,11 @@ msgid "" "The try-operator `?` is used to return errors to the caller. It lets you " "turn the common" msgstr "" +"Помилки виконання, такі як відмова у з'єднанні або не знайдено файл, " +"обробляються за допомогою типу `Result`, але зіставлення цього типу для " +"кожного виклику може бути громіздким. Оператор спроби `?` використовується " +"для повернення помилок користувачеві. Він дозволяє перетворити звичайний " +"оператор" #: src/error-handling/try.md msgid "into the much simpler" @@ -11339,20 +11351,20 @@ msgstr "Ми можемо використовувати це, щоб спрос #: src/error-handling/try.md msgid "//fs::write(\"config.dat\", \"alice\").unwrap();\n" -msgstr "" +msgstr "//fs::write(\"config.dat\", \"alice\").unwrap();\n" #: src/error-handling/try.md src/error-handling/try-conversions.md #: src/error-handling/thiserror-and-anyhow.md msgid "\"config.dat\"" -msgstr "" +msgstr "\"config.dat\"" #: src/error-handling/try.md src/error-handling/try-conversions.md msgid "\"username or error: {username:?}\"" -msgstr "" +msgstr "\"ім'я користувача або помилка: {username:?}\"" #: src/error-handling/try.md msgid "Simplify the `read_username` function to use `?`." -msgstr "" +msgstr "Спростіть функцію `read_username` до використання `?`." #: src/error-handling/try.md msgid "The `username` variable can be either `Ok(string)` or `Err(error)`." @@ -11373,6 +11385,10 @@ msgid "" "The executable will print the `Err` variant and return a nonzero exit status " "on error." msgstr "" +"Зверніть увагу, що `main` може повертати `Result<(), E>`, якщо вона реалізує " +"`std::process:Termination`. На практиці це означає, що `E` реалізує `Debug`. " +"Виконуваний файл виведе варіант `Err` і поверне ненульовий статус виходу у " +"разі помилки." #: src/error-handling/try-conversions.md msgid "" @@ -11386,27 +11402,27 @@ msgid "works the same as" msgstr "працює так само, як" #: src/error-handling/try-conversions.md -#, fuzzy msgid "" "The `From::from` call here means we attempt to convert the error type to the " "type returned by the function. This makes it easy to encapsulate errors into " "higher-level errors." msgstr "" "Виклик `From::from` тут означає, що ми намагаємося перетворити тип помилки " -"на тип, який повертає функція:" +"на тип, який повертає функція. Це дозволяє легко інкапсулювати помилки у " +"помилки вищого рівня." #: src/error-handling/try-conversions.md msgid "\"IO error: {e}\"" -msgstr "" +msgstr "\"IO помилка: {e}\"" #: src/error-handling/try-conversions.md msgid "\"Found no username in {path}\"" -msgstr "" +msgstr "\"Не знайдено імені користувача в {path}\"" #: src/error-handling/try-conversions.md #: src/error-handling/thiserror-and-anyhow.md msgid "//fs::write(\"config.dat\", \"\").unwrap();\n" -msgstr "" +msgstr "//fs::write(\"config.dat\", \"\").unwrap();\n" #: src/error-handling/try-conversions.md msgid "" @@ -11416,12 +11432,19 @@ msgid "" "of type `Result` if `ErrorOuter` and `ErrorInner` are the " "same type or if `ErrorOuter` implements `From`." msgstr "" +"Оператор `?` повинен повертати значення, сумісне з типом повернення функції. " +"Для `Result` це означає, що типи помилок мають бути сумісними. Функція, яка " +"повертає `Result`, може використовувати `?` на значенні типу " +"`Result` тільки якщо `ErrorOuter` і `ErrorInner` мають " +"однаковий тип або якщо `ErrorOuter` реалізує `From`." #: src/error-handling/try-conversions.md msgid "" "A common alternative to a `From` implementation is `Result::map_err`, " "especially when the conversion only happens in one place." msgstr "" +"Поширеною альтернативою реалізації `From` є `Result::map_err`, особливо коли " +"перетворення відбувається лише в одному місці." #: src/error-handling/try-conversions.md msgid "" @@ -11429,6 +11452,9 @@ msgid "" "`Option` can use the `?` operator on `Option` for arbitrary `T` and " "`U` types." msgstr "" +"Для `Option` немає вимог щодо сумісності. Функція, що повертає `Option`, " +"може використовувати оператор `?` на `Option` для довільних типів `T` та " +"`U`." #: src/error-handling/try-conversions.md msgid "" @@ -11436,13 +11462,15 @@ msgid "" "However, `Option::ok_or` converts `Option` to `Result` whereas `Result::ok` " "turns `Result` into `Option`." msgstr "" +"Функція, яка повертає `Result`, не може використовувати `?` в `Option` і " +"навпаки. Однак, `Option::ok_or` перетворює `Option` в `Result`, тоді як " +"`Result::ok` перетворює `Result` в `Option`." #: src/error-handling/error.md msgid "Dynamic Error Types" msgstr "Динамічні типи помилок" #: src/error-handling/error.md -#, fuzzy msgid "" "Sometimes we want to allow any type of error to be returned without writing " "our own enum covering all the different possibilities. The `std::error::" @@ -11450,33 +11478,35 @@ msgid "" "error." msgstr "" "Іноді ми хочемо дозволити повертати будь-який тип помилки без написання " -"власного переліку, що охоплює всі різні можливості. `std::error::Error` " -"полегшує це." +"власного переліку, що охоплює всі різні можливості. Трейт `std::error::" +"Error` дозволяє легко створити об'єкт трейту, який може містити будь-яку " +"помилку." #: src/error-handling/error.md msgid "\"count.dat\"" -msgstr "" +msgstr "\"count.dat\"" #: src/error-handling/error.md msgid "\"1i3\"" -msgstr "" +msgstr "\"1i3\"" #: src/error-handling/error.md msgid "\"Count: {count}\"" -msgstr "" +msgstr "\"Підрахунок: {count}\"" #: src/error-handling/error.md msgid "\"Error: {err}\"" -msgstr "" +msgstr "\"Помилка: {err}\"" #: src/error-handling/error.md msgid "" "The `read_count` function can return `std::io::Error` (from file operations) " "or `std::num::ParseIntError` (from `String::parse`)." msgstr "" +"Функція `read_count` може повернути `std::io::Error` (з файлових операцій) " +"або `std::num::ParseIntError` (з `String::parse`)." #: src/error-handling/error.md -#, fuzzy msgid "" "Boxing errors saves on code, but gives up the ability to cleanly handle " "different error cases differently in the program. As such it's generally not " @@ -11484,10 +11514,10 @@ msgid "" "can be a good option in a program where you just want to display the error " "message somewhere." msgstr "" -"Це економить код, але позбавляє можливості чітко обробляти різні випадки " -"помилок по-різному в програмі. Таким чином, зазвичай не дуже гарна ідея " -"використовувати `Box` у загальнодоступному API бібліотеки, але це " -"може бути хорошим варіантом у програмі, де ви просто хочете десь відобразити " +"Пакування помилок економить код, але позбавляє можливості чисто обробляти " +"різні випадки помилок по-різному у програмі. Загалом, це не дуже гарна ідея " +"використовувати `Box` у публічному API бібліотеки, але це може " +"бути гарним варіантом у програмі, де ви просто хочете десь вивести " "повідомлення про помилку." #: src/error-handling/error.md @@ -11498,70 +11528,80 @@ msgid "" "compatible with `no_std` in [nightly](https://github.com/rust-lang/rust/" "issues/103765) only." msgstr "" +"Переконайтеся, що ви використовуєте ознаку `std::error::Error`, коли " +"визначаєте користувацький тип помилки, щоб її можна було упакувати. Але якщо " +"вам потрібно підтримувати атрибут `no_std`, майте на увазі, що ознака `std::" +"error::Error` наразі сумісна з `no_std` лише у [nightly](https://github.com/" +"rust-lang/rust/issues/103765)." #: src/error-handling/thiserror-and-anyhow.md -#, fuzzy msgid "" "The [`thiserror`](https://docs.rs/thiserror/) and [`anyhow`](https://docs.rs/" "anyhow/) crates are widely used to simplify error handling." msgstr "" -"Ящик [thiserror](https://docs.rs/thiserror/) — популярний спосіб створити " -"перелік помилок, як ми робили на попередній сторінці:" +"Крейти [thiserror](https://docs.rs/thiserror/) та [`anyhow`](https://docs.rs/" +"anyhow/) широко використовуються для спрощення обробки помилок." #: src/error-handling/thiserror-and-anyhow.md msgid "" "`thiserror` is often used in libraries to create custom error types that " "implement `From`." msgstr "" +"`thiserror` часто використовується у бібліотеках для створення " +"користувацьких типів помилок, які реалізують `From`." #: src/error-handling/thiserror-and-anyhow.md msgid "" "`anyhow` is often used by applications to help with error handling in " "functions, including adding contextual information to your errors." msgstr "" +"`anyhow` часто використовується програмами для полегшення обробки помилок у " +"функціях, зокрема для додавання контекстної інформації до ваших помилок." #: src/error-handling/thiserror-and-anyhow.md msgid "\"Found no username in {0}\"" -msgstr "" +msgstr "\"Не знайдено імені користувача в {0}\"" #: src/error-handling/thiserror-and-anyhow.md msgid "\"Failed to open {path}\"" -msgstr "" +msgstr "\"Не вдалося відкрити {path}\"" #: src/error-handling/thiserror-and-anyhow.md msgid "\"Failed to read\"" -msgstr "" +msgstr "\"Не вдалося прочитати\"" #: src/error-handling/thiserror-and-anyhow.md msgid "\"Username: {username}\"" -msgstr "" +msgstr "\"Ім'я користувача: {username}\"" #: src/error-handling/thiserror-and-anyhow.md msgid "\"Error: {err:?}\"" -msgstr "" +msgstr "\"Помилка: {err:?}\"" #: src/error-handling/thiserror-and-anyhow.md -#, fuzzy msgid "`thiserror`" -msgstr "`Помилка`" +msgstr "`thiserror`" #: src/error-handling/thiserror-and-anyhow.md msgid "" "The `Error` derive macro is provided by `thiserror`, and has lots of useful " "attributes to help define error types in a compact way." msgstr "" +"Похідний макрос `Error` надається `thiserror` і має багато корисних " +"атрибутів для компактного визначення типів помилок." #: src/error-handling/thiserror-and-anyhow.md msgid "The `std::error::Error` trait is derived automatically." -msgstr "" +msgstr "Трейт `std::error::Error` виводиться автоматично." #: src/error-handling/thiserror-and-anyhow.md msgid "The message from `#[error]` is used to derive the `Display` trait." msgstr "" +"Повідомлення з `#[error]` використовується для отримання трейту `Display`." #: src/error-handling/thiserror-and-anyhow.md msgid "`anyhow`" -msgstr "" +msgstr "`anyhow`" #: src/error-handling/thiserror-and-anyhow.md msgid "" @@ -11601,10 +11641,13 @@ msgid "" "`Option` types. `use anyhow::Context` is necessary to enable `.context()` " "and `.with_context()` on those types." msgstr "" +"`anyhow::Context` - це трейт, реалізований для стандартних типів `Result` та " +"`Option`. Використання `anyhow::Context` необхідне для того, щоб дозволити " +"використання `.context()` та `.with_context()` для цих типів." #: src/error-handling/exercise.md msgid "Exercise: Rewriting with Result" -msgstr "" +msgstr "Вправа: Переписування з Result" #: src/error-handling/exercise.md msgid "" @@ -11613,6 +11656,10 @@ msgid "" "error handling and propagate errors to a return from `main`. Feel free to " "use `thiserror` and `anyhow`." msgstr "" +"Нижче реалізовано дуже простий синтаксичний аналізатор для мови виразів. " +"Однак, він обробляє помилки панічно. Перепишіть його так, щоб він " +"використовував ідіоматичну обробку помилок і поширював помилки на повернення " +"з `main`. Сміливо використовуйте `thiserror` і `anyhow`." #: src/error-handling/exercise.md msgid "" @@ -11620,119 +11667,126 @@ msgid "" "working correctly, update `Tokenizer` to implement " "`Iterator>` and handle that in the parser." msgstr "" +"Підказка: почніть з виправлення обробки помилок у функції `parse`. Після " +"того, як вона буде працювати коректно, оновіть `Tokenizer` для реалізації " +"`Iterator>` і обробіть це у парсері." #: src/error-handling/exercise.md src/error-handling/solution.md msgid "/// An arithmetic operator.\n" -msgstr "" +msgstr "/// Арифметичний оператор.\n" #: src/error-handling/exercise.md src/error-handling/solution.md msgid "/// A token in the expression language.\n" -msgstr "" +msgstr "/// Токен у мові виразів.\n" #: src/error-handling/exercise.md src/error-handling/solution.md msgid "/// An expression in the expression language.\n" -msgstr "" +msgstr "/// Вираз у мові виразів.\n" #: src/error-handling/exercise.md src/error-handling/solution.md msgid "/// A reference to a variable.\n" -msgstr "" +msgstr "/// Посилання на змінну.\n" #: src/error-handling/exercise.md src/error-handling/solution.md msgid "/// A literal number.\n" -msgstr "" +msgstr "/// Буквальне число.\n" #: src/error-handling/exercise.md src/error-handling/solution.md msgid "/// A binary operation.\n" -msgstr "" +msgstr "/// Бінарна операція.\n" #: src/error-handling/exercise.md src/error-handling/solution.md msgid "'z'" -msgstr "" +msgstr "'z'" #: src/error-handling/exercise.md src/error-handling/solution.md msgid "'_'" -msgstr "" +msgstr "'_'" #: src/error-handling/exercise.md src/error-handling/solution.md msgid "'+'" -msgstr "" +msgstr "'+'" #: src/error-handling/exercise.md src/error-handling/solution.md msgid "'-'" -msgstr "" +msgstr "'-'" #: src/error-handling/exercise.md msgid "\"Unexpected character {c}\"" -msgstr "" +msgstr "\"Неочікуваний символ {c}\"" #: src/error-handling/exercise.md src/error-handling/solution.md msgid "\"Unexpected end of input\"" -msgstr "" +msgstr "\"Неочікуваний кінець вводу\"" #: src/error-handling/exercise.md msgid "\"Invalid 32-bit integer'\"" -msgstr "" +msgstr "\"Неправильне 32-бітне ціле число'\"" #: src/error-handling/exercise.md msgid "\"Unexpected token {tok:?}\"" -msgstr "" +msgstr "\"Неочікуваний токен {tok:?}\"" #: src/error-handling/exercise.md src/error-handling/solution.md msgid "// Look ahead to parse a binary operation if present.\n" msgstr "" +"// Заглянути наперед, щоб розібрати бінарну операцію, якщо вона присутня.\n" #: src/error-handling/exercise.md src/error-handling/solution.md msgid "\"10+foo+20-30\"" -msgstr "" +msgstr "\"10+foo+20-30\"" #: src/error-handling/exercise.md src/error-handling/solution.md msgid "\"{expr:?}\"" -msgstr "" +msgstr "\"{expr:?}\"" #: src/error-handling/solution.md msgid "\"Unexpected character '{0}' in input\"" -msgstr "" +msgstr "\"Неочікуваний символ '{0}' у вхідних даних\"" #: src/error-handling/solution.md msgid "\"Tokenizer error: {0}\"" -msgstr "" +msgstr "\"Помилка токенізатора: {0}\"" #: src/error-handling/solution.md msgid "\"Unexpected token {0:?}\"" -msgstr "" +msgstr "\"Неочікуваний токен {0:?}\"" #: src/error-handling/solution.md msgid "\"Invalid number\"" -msgstr "" +msgstr "\"Неправильне число\"" #: src/unsafe-rust.md msgid "[Unsafe](./unsafe-rust/unsafe.md) (5 minutes)" -msgstr "" +msgstr "[Unsafe](./unsafe-rust/unsafe.md) (5 хвилин)" #: src/unsafe-rust.md msgid "" "[Dereferencing Raw Pointers](./unsafe-rust/dereferencing.md) (10 minutes)" msgstr "" +"[Розіменування необроблених вказівників](./unsafe-rust/dereferencing.md) (10 " +"хвилин)" #: src/unsafe-rust.md msgid "[Mutable Static Variables](./unsafe-rust/mutable-static.md) (5 minutes)" msgstr "" +"[Мутабельні статичні змінні](./unsafe-rust/mutable-static.md) (5 хвилин)" #: src/unsafe-rust.md msgid "[Unions](./unsafe-rust/unions.md) (5 minutes)" -msgstr "" +msgstr "[Об'єднання](./unsafe-rust/unions.md) (5 хвилин)" #: src/unsafe-rust.md msgid "[Unsafe Functions](./unsafe-rust/unsafe-functions.md) (5 minutes)" -msgstr "" +msgstr "[Небезпечні функції](./unsafe-rust/unsafe-functions.md) (5 хвилин)" #: src/unsafe-rust.md msgid "[Unsafe Traits](./unsafe-rust/unsafe-traits.md) (5 minutes)" -msgstr "" +msgstr "[Небезпечні трейти](./unsafe-rust/unsafe-traits.md) (5 хвилин)" #: src/unsafe-rust.md msgid "[Exercise: FFI Wrapper](./unsafe-rust/exercise.md) (30 minutes)" -msgstr "" +msgstr "[Вправа: Обгортка FFI](./unsafe-rust/exercise.md) (30 хвилин)" #: src/unsafe-rust/unsafe.md msgid "The Rust language has two parts:" @@ -11751,25 +11805,25 @@ msgstr "" "попередні умови." #: src/unsafe-rust/unsafe.md -#, fuzzy msgid "" "We saw mostly safe Rust in this course, but it's important to know what " "Unsafe Rust is." msgstr "" -"У цьому курсі ми побачимо переважно безпечний Rust, але важливо знати, що " -"таке Unsafe Rust." +"У цьому курсі ми розглянули переважно безпечний Rust, але важливо знати, що " +"таке небезпечний Rust." #: src/unsafe-rust/unsafe.md msgid "" "Unsafe code is usually small and isolated, and its correctness should be " "carefully documented. It is usually wrapped in a safe abstraction layer." msgstr "" -"Небезпечний код зазвичай невеликий і ізольований, і його правильність слід " -"ретельно задокументувати. Зазвичай він загорнутий у безпечний шар абстракції." +"Небезпечний код зазвичай невеликий та ізольований, і його правильність слід " +"ретельно задокументувати. Зазвичай він загорнутий у безпечний рівень " +"абстракції." #: src/unsafe-rust/unsafe.md msgid "Unsafe Rust gives you access to five new capabilities:" -msgstr "Unsafe Rust дає вам доступ до п’яти нових можливостей:" +msgstr "Небезпечний Rust дає вам доступ до п’яти нових можливостей:" #: src/unsafe-rust/unsafe.md msgid "Dereference raw pointers." @@ -11777,7 +11831,7 @@ msgstr "Розіменування необроблених вказівникі #: src/unsafe-rust/unsafe.md msgid "Access or modify mutable static variables." -msgstr "Доступ або зміна змінних статичних змінних." +msgstr "Доступ або зміна мутабельних статичних змінних." #: src/unsafe-rust/unsafe.md msgid "Access `union` fields." @@ -11785,11 +11839,11 @@ msgstr "Доступ до полів `union`." #: src/unsafe-rust/unsafe.md msgid "Call `unsafe` functions, including `extern` functions." -msgstr "Викликати `небезпечні` функції, включаючи `зовнішні` функції." +msgstr "Викликати `unsafe` функції, включаючи `extern` функції." #: src/unsafe-rust/unsafe.md msgid "Implement `unsafe` traits." -msgstr "Впровадити «небезпечні» риси." +msgstr "Реалізація `unsafe` трейтів." #: src/unsafe-rust/unsafe.md msgid "" @@ -11799,11 +11853,10 @@ msgid "" msgstr "" "Далі ми коротко розглянемо небезпечні можливості. Щоб отримати повну " "інформацію, перегляньте [розділ 19.1 у книзі Rust](https://doc.rust-lang.org/" -"book/ch19-01-unsafe-rust.html) і [Rustonomicon](https://doc .rust-lang.org/" +"book/ch19-01-unsafe-rust.html) та [Rustonomicon](https://doc .rust-lang.org/" "nomicon/)." #: src/unsafe-rust/unsafe.md -#, fuzzy msgid "" "Unsafe Rust does not mean the code is incorrect. It means that developers " "have turned off some compiler safety features and have to write correct code " @@ -11811,9 +11864,9 @@ msgid "" "rules." msgstr "" "Небезпечний Rust не означає, що код неправильний. Це означає, що розробники " -"вимкнули функції безпеки компілятора і повинні самостійно писати правильний " -"код. Це означає, що компілятор більше не виконує правила безпеки пам’яті " -"Rust." +"вимкнули деякі функції безпеки компілятора і змушені писати коректний код " +"самостійно. Це означає, що компілятор більше не забезпечує дотримання правил " +"безпеки пам'яті Rust." #: src/unsafe-rust/dereferencing.md msgid "Creating pointers is safe, but dereferencing them requires `unsafe`:" @@ -11823,7 +11876,7 @@ msgstr "" #: src/unsafe-rust/dereferencing.md msgid "\"careful!\"" -msgstr "" +msgstr "\"обережно!\"" #: src/unsafe-rust/dereferencing.md msgid "" @@ -11834,18 +11887,24 @@ msgid "" " // whole unsafe block, and they are not accessed either through the\n" " // references or concurrently through any other pointers.\n" msgstr "" +"// Безпечно, оскільки r1 та r2 були отримані з посилань і тому\n" +" // гарантовано є ненульовими та правильно вирівняними, об'єкти, що " +"лежать в основі\n" +" // посилань, з яких вони були отримані, є дійсними на протязі\n" +" // всього небезпечного блоку, і до них немає доступу ні через\n" +" // посилання, ні одночасно через будь-які інші покажчики.\n" #: src/unsafe-rust/dereferencing.md msgid "\"r1 is: {}\"" -msgstr "" +msgstr "\"r1 є: {}\"" #: src/unsafe-rust/dereferencing.md msgid "\"uhoh\"" -msgstr "" +msgstr "\"ууухооох\"" #: src/unsafe-rust/dereferencing.md msgid "\"r2 is: {}\"" -msgstr "" +msgstr "\"r2 є: {}\"" #: src/unsafe-rust/dereferencing.md msgid "" @@ -11856,6 +11915,12 @@ msgid "" " println!(\"r3 is: {}\", *r3);\n" " */" msgstr "" +"// НЕБЕЗПЕЧНО. НЕ РОБІТЬ ЦЬОГО.\n" +" /*\n" +" let r3: &String = unsafe { &*r1 };\n" +" drop(s);\n" +" println!(\"r3 is: {}\", *r3);\n" +" */" #: src/unsafe-rust/dereferencing.md msgid "" @@ -11864,7 +11929,7 @@ msgid "" "satisfies the safety requirements of the unsafe operations it is doing." msgstr "" "Хорошою практикою є (і вимагається посібником зі стилю Android Rust) писати " -"коментар до кожного `небезпечного` блоку, пояснюючи, наскільки код у ньому " +"коментар до кожного `unsafe` блоку, пояснюючи, наскільки код у ньому " "відповідає вимогам безпеки небезпечних операцій, які він виконує." #: src/unsafe-rust/dereferencing.md @@ -11873,7 +11938,7 @@ msgid "" "[_valid_](https://doc.rust-lang.org/std/ptr/index.html#safety), i.e.:" msgstr "" "У випадку розіменувань покажчиків це означає, що покажчики мають бути " -"[_valid_](https://doc.rust-lang.org/std/ptr/index.html#safety), тобто:" +"[_дійсними_](https://doc.rust-lang.org/std/ptr/index.html#safety), тобто:" #: src/unsafe-rust/dereferencing.md msgid "The pointer must be non-null." @@ -11883,7 +11948,8 @@ msgstr "Покажчик має бути ненульовим." msgid "" "The pointer must be _dereferenceable_ (within the bounds of a single " "allocated object)." -msgstr "Покажчик має бути _розіменованим_ (у межах одного виділеного об’єкта)." +msgstr "" +"Покажчик має бути _розіменоваючим_ (у межах одного виділеного об’єкта)." #: src/unsafe-rust/dereferencing.md msgid "The object must not have been deallocated." @@ -11891,7 +11957,7 @@ msgstr "Об’єкт не повинен бути звільнений." #: src/unsafe-rust/dereferencing.md msgid "There must not be concurrent accesses to the same location." -msgstr "Не повинно бути одночасних доступів до того самого місця." +msgstr "Не повинно бути одночасних доступів до того самого розташування." #: src/unsafe-rust/dereferencing.md msgid "" @@ -11899,7 +11965,7 @@ msgid "" "must be live and no reference may be used to access the memory." msgstr "" "Якщо вказівник було отримано шляхом приведення посилання, базовий об’єкт має " -"бути активним, і жодне посилання не може використовуватися для доступу до " +"бути дійсним, і жодне посилання не може використовуватися для доступу до " "пам’яті." #: src/unsafe-rust/dereferencing.md @@ -11912,31 +11978,33 @@ msgid "" "has the `'static` lifetime, so `r3` has type `&'static String`, and thus " "outlives `s`. Creating a reference from a pointer requires _great care_." msgstr "" +"У розділі \"НЕ БЕЗПЕЧНО\" наведено приклад поширеної помилки UB: `*r1` має " +"`'static` час життя, тому `r3` має тип `&'static String`, і таким чином " +"переживає `s`. Створення посилання з покажчика вимагає _великої обережності_." #: src/unsafe-rust/mutable-static.md msgid "It is safe to read an immutable static variable:" msgstr "Читати незмінну статичну змінну безпечно:" #: src/unsafe-rust/mutable-static.md -#, fuzzy msgid "\"Hello, world!\"" -msgstr "Hello World!" +msgstr "\"Привіт, світ!\"" #: src/unsafe-rust/mutable-static.md msgid "\"HELLO_WORLD: {HELLO_WORLD}\"" -msgstr "" +msgstr "\"HELLO_WORLD: {HELLO_WORLD}\"" #: src/unsafe-rust/mutable-static.md msgid "" "However, since data races can occur, it is unsafe to read and write mutable " "static variables:" msgstr "" -"Однак, оскільки перегони даних можуть відбуватися, небезпечно читати та " -"записувати змінні статичні змінні:" +"Однак, оскільки можуть відбуватися перегони даних, небезпечно читати і " +"записувати статичні змінні, що мутуються:" #: src/unsafe-rust/mutable-static.md msgid "\"COUNTER: {COUNTER}\"" -msgstr "" +msgstr "\"COUNTER: {COUNTER}\"" #: src/unsafe-rust/mutable-static.md msgid "" @@ -11945,6 +12013,10 @@ msgid "" "`unsafe` and see how the compiler explains that it is undefined behavior to " "mutate a static from multiple threads." msgstr "" +"Програма тут безпечна, оскільки вона однопотокова. Однак компілятор Rust є " +"консервативним і припускає найгірше. Спробуйте видалити `unsafe` і " +"подивіться, як компілятор пояснює, що мутація статики з кількох потоків є " +"невизначеною поведінкою." #: src/unsafe-rust/mutable-static.md msgid "" @@ -11952,28 +12024,27 @@ msgid "" "where it might make sense in low-level `no_std` code, such as implementing a " "heap allocator or working with some C APIs." msgstr "" -"Використання змінної статики, як правило, погана ідея, але є деякі випадки, " -"коли це може мати сенс у низькорівневому коді `no_std`, наприклад реалізація " -"розподілювача купи або робота з деякими API C." +"Використання мутабельної статики, як правило, погана ідея, але є деякі " +"випадки, коли це може мати сенс у низькорівневому коді `no_std`, наприклад " +"реалізація розподілювача купи або робота з деякими API C." #: src/unsafe-rust/unions.md msgid "Unions are like enums, but you need to track the active field yourself:" msgstr "" -"Об’єднання схожі на enum, але вам потрібно самостійно відстежувати активне " -"поле:" +"Об’єднання подібні до переліків, але вам потрібно самостійно відстежувати " +"активне поле:" #: src/unsafe-rust/unions.md msgid "\"int: {}\"" -msgstr "" +msgstr "\"int: {}\"" #: src/unsafe-rust/unions.md msgid "\"bool: {}\"" -msgstr "" +msgstr "\"bool: {}\"" #: src/unsafe-rust/unions.md -#, fuzzy msgid "// Undefined behavior!\n" -msgstr "Немає невизначеної поведінки під час виконання:" +msgstr "// Невизначена поведінка!\n" #: src/unsafe-rust/unions.md msgid "" @@ -11990,10 +12061,10 @@ msgid "" "transmute.html) or a safe wrapper such as the [`zerocopy`](https://crates.io/" "crates/zerocopy) crate." msgstr "" -"Якщо ви просто хочете переосмислити байти як інший тип, вам, мабуть, " -"знадобиться [`std::mem::transmute`](https://doc.rust-lang.org/stable/std/mem/" -"fn.transmute.html ) або безпечну оболонку, як-от ящик [`zerocopy`](https://" -"crates.io/crates/zerocopy)." +"Якщо ви просто хочете по-новому інтерпретувати байти як інший тип, вам, " +"мабуть, знадобиться [`std::mem::transmute`](https://doc.rust-lang.org/stable/" +"std/mem/fn.transmute.html ) або безпечна оболонка, як-от крейт [`zerocopy`]" +"(https://crates.io/crates/zerocopy)." #: src/unsafe-rust/unsafe-functions.md msgid "Calling Unsafe Functions" @@ -12004,7 +12075,7 @@ msgid "" "A function or method can be marked `unsafe` if it has extra preconditions " "you must uphold to avoid undefined behaviour:" msgstr "" -"Функцію або метод можна позначити як `небезпечні`, якщо вони мають додаткові " +"Функцію або метод можна позначити як `unsafe`, якщо вони мають додаткові " "передумови, які ви повинні підтримувати, щоб уникнути невизначеної поведінки:" #: src/unsafe-rust/unsafe-functions.md src/unsafe-rust/exercise.md @@ -12027,23 +12098,24 @@ msgid "" "// Safe because the indices are in the correct order, within the bounds of\n" " // the string slice, and lie on UTF-8 sequence boundaries.\n" msgstr "" +"// Безпечно, оскільки індекси розташовані в правильному порядку в межах \n" +" // фрагмента рядка та лежать на межах послідовності UTF-8.\n" #: src/unsafe-rust/unsafe-functions.md msgid "\"emoji: {}\"" -msgstr "" +msgstr "\"смайлик: {}\"" #: src/unsafe-rust/unsafe-functions.md msgid "\"char count: {}\"" -msgstr "" +msgstr "\"кількість символів: {}\"" #: src/unsafe-rust/unsafe-functions.md -#, fuzzy msgid "// Undefined behavior if abs misbehaves.\n" -msgstr "Немає невизначеної поведінки під час виконання:" +msgstr "// Невизначена поведінка, якщо abs поводиться неправильно.\n" #: src/unsafe-rust/unsafe-functions.md msgid "\"Absolute value of -3 according to C: {}\"" -msgstr "" +msgstr "\"Абсолютне значення -3 згідно з C: {}\"" #: src/unsafe-rust/unsafe-functions.md msgid "" @@ -12052,6 +12124,10 @@ msgid "" " // println!(\"char count: {}\", count_chars(unsafe {\n" " // emojis.get_unchecked(0..3) }));\n" msgstr "" +"// Недотримання вимог кодування UTF-8 порушує безпеку пам’яті!\n" +" // println!(\"смайлик: {}\", unsafe { emojis.get_unchecked(0..3) });\n" +" // println!(\"кількість символів: {}\", count_chars(unsafe {\n" +" // emojis.get_unchecked(0..3) }));\n" #: src/unsafe-rust/unsafe-functions.md msgid "Writing Unsafe Functions" @@ -12062,8 +12138,8 @@ msgid "" "You can mark your own functions as `unsafe` if they require particular " "conditions to avoid undefined behaviour." msgstr "" -"Ви можете позначити власні функції як «небезпечні», якщо вони вимагають " -"певних умов, щоб уникнути невизначеної поведінки." +"Ви можете позначити власні функції як `unsafe`, якщо вони вимагають певних " +"умов, щоб уникнути невизначеної поведінки." #: src/unsafe-rust/unsafe-functions.md msgid "" @@ -12073,17 +12149,21 @@ msgid "" "///\n" "/// The pointers must be valid and properly aligned.\n" msgstr "" +"/// Міняє місцями значення, на які вказують задані покажчики.\n" +"///\n" +"/// # Безпека\n" +"///\n" +"/// Покажчики повинні бути дійсними і правильно вирівняними.\n" #: src/unsafe-rust/unsafe-functions.md msgid "// Safe because ...\n" -msgstr "" +msgstr "// Безпечно, тому що ...\n" #: src/unsafe-rust/unsafe-functions.md msgid "\"a = {}, b = {}\"" -msgstr "" +msgstr "\"a = {}, b = {}\"" #: src/unsafe-rust/unsafe-functions.md -#, fuzzy msgid "" "`get_unchecked`, like most `_unchecked` functions, is unsafe, because it can " "create UB if the range is incorrect. `abs` is incorrect for a different " @@ -12092,37 +12172,40 @@ msgid "" "might violate Rust's memory model, but in general any C function might have " "undefined behaviour under any arbitrary circumstances." msgstr "" -"Зазвичай це проблема лише для зовнішніх функцій, які виконують дії з " -"покажчиками, які можуть порушувати модель пам’яті Rust, але загалом будь-яка " -"функція C може мати невизначену поведінку за будь-яких довільних обставин." +"`get_unchecked`, як і більшість функцій `_unchecked`, небезпечна, оскільки " +"може створити UB, якщо діапазон невірний. Функція `abs` некоректна з іншої " +"причини: вона є зовнішньою функцією (FFI). Виклик зовнішніх функцій зазвичай " +"є проблемою лише тоді, коли ці функції роблять щось із вказівниками, що може " +"порушити модель пам'яті Rust, але загалом будь-яка функція C може мати " +"невизначену поведінку за довільних обставин." #: src/unsafe-rust/unsafe-functions.md msgid "" "The `\"C\"` in this example is the ABI; [other ABIs are available too]" "(https://doc.rust-lang.org/reference/items/external-blocks.html)." msgstr "" +"У цьому прикладі `\"C\"` - це ABI; [інші ABI також доступні](https://doc." +"rust-lang.org/reference/items/external-blocks.html)." #: src/unsafe-rust/unsafe-functions.md -#, fuzzy msgid "" "We wouldn't actually use pointers for a `swap` function - it can be done " "safely with references." msgstr "" -"Насправді ми б не використовували покажчики для цього, тому що це можна " -"безпечно зробити за допомогою посилань." +"Насправді ми не будемо використовувати вказівники для функції `swap` - це " +"можна безпечно зробити за допомогою посилань." #: src/unsafe-rust/unsafe-functions.md -#, fuzzy msgid "" "Note that unsafe code is allowed within an unsafe function without an " "`unsafe` block. We can prohibit this with `#[deny(unsafe_op_in_unsafe_fn)]`. " "Try adding it and see what happens. This will likely change in a future Rust " "edition." msgstr "" -"Зауважте, що небезпечний код дозволений у небезпечній функції без блоку " -"`unsafe`. Ми можемо заборонити це за допомогою " -"`#[deny(unsafe_op_in_unsafe_fn)]`. Спробуйте додати його та подивіться, що " -"вийде." +"Зверніть увагу, що небезпечний код дозволяється всередині небезпечної " +"функції без блоку `unsafe`. Ми можемо заборонити це за допомогою " +"`#[deny(unsafe_op_in_unsafe_fn)]`. Спробуйте додати його і подивіться, що " +"станеться. Ймовірно, це буде змінено у майбутньому виданні Rust.." #: src/unsafe-rust/unsafe-traits.md msgid "Implementing Unsafe Traits" @@ -12133,14 +12216,17 @@ msgid "" "Like with functions, you can mark a trait as `unsafe` if the implementation " "must guarantee particular conditions to avoid undefined behaviour." msgstr "" +"Як і у випадку з функціями, ви можете позначити трейт `unsafe`, якщо " +"реалізація повинна гарантувати певні умови, щоб уникнути невизначеної " +"поведінки." #: src/unsafe-rust/unsafe-traits.md msgid "" "For example, the `zerocopy` crate has an unsafe trait that looks [something " "like this](https://docs.rs/zerocopy/latest/zerocopy/trait.AsBytes.html):" msgstr "" -"Наприклад, ящик `zerocopy` має небезпечну властивість, яка виглядає " -"[приблизно так](https://docs.rs/zerocopy/latest/zerocopy/trait.AsBytes.html):" +"Наприклад, крейт `zerocopy` має небезпечний трейт, який виглядає [приблизно " +"так](https://docs.rs/zerocopy/latest/zerocopy/trait.AsBytes.html):" #: src/unsafe-rust/unsafe-traits.md msgid "" @@ -12148,17 +12234,21 @@ msgid "" "/// # Safety\n" "/// The type must have a defined representation and no padding.\n" msgstr "" +"/// ...\n" +"/// # Безпека\n" +"/// Тип повинен мати визначене представлення і не мати заповнень.\n" #: src/unsafe-rust/unsafe-traits.md msgid "// Safe because u32 has a defined representation and no padding.\n" msgstr "" +"// Безпечно, оскільки u32 має визначене представлення і не має заповнення.\n" #: src/unsafe-rust/unsafe-traits.md msgid "" "There should be a `# Safety` section on the Rustdoc for the trait explaining " "the requirements for the trait to be safely implemented." msgstr "" -"У Rustdoc має бути розділ `# Safety` для ознаки, що пояснює вимоги до " +"У Rustdoc має бути розділ `# Safety` для трейту, що пояснює вимоги до " "безпечної реалізації функції." #: src/unsafe-rust/unsafe-traits.md @@ -12169,22 +12259,22 @@ msgstr "Фактичний розділ безпеки для `AsBytes` довш #: src/unsafe-rust/unsafe-traits.md msgid "The built-in `Send` and `Sync` traits are unsafe." -msgstr "Вбудовані функції «Надіслати» та «Синхронізувати» є небезпечними." +msgstr "Вбудовані `Send` та `Sync` трейти є небезпечними." #: src/unsafe-rust/exercise.md msgid "Safe FFI Wrapper" msgstr "Безпечна обгортка інтерфейсу зовнішньої функції (FFI)" #: src/unsafe-rust/exercise.md -#, fuzzy msgid "" "Rust has great support for calling functions through a _foreign function " "interface_ (FFI). We will use this to build a safe wrapper for the `libc` " "functions you would use from C to read the names of files in a directory." msgstr "" -"Rust чудово підтримує виклик функцій через _інтерфейс сторонніх функцій_ " -"(FFI). Ми використаємо це для створення безпечної оболонки для функцій " -"`libc`, які ви використовували б із C для читання імен файлів каталогу." +"Rust має чудову підтримку виклику функцій через _інтерфейс зовнішніх " +"функцій_ (FFI). Ми скористаємося цим, щоб створити безпечну оболонку для " +"функцій `libc`, які ви використовуєте у C для читання імен файлів у " +"директорії." #: src/unsafe-rust/exercise.md msgid "You will want to consult the manual pages:" @@ -12217,7 +12307,7 @@ msgstr "Кодування" #: src/unsafe-rust/exercise.md msgid "Use" -msgstr "використання" +msgstr "Використання" #: src/unsafe-rust/exercise.md msgid "" @@ -12225,7 +12315,7 @@ msgid "" "(https://doc.rust-lang.org/std/string/struct.String.html)" msgstr "" "[`str`](https://doc.rust-lang.org/std/primitive.str.html) і [`String`]" -"(https://doc.rust-lang.org/std/string/struct .String.html)" +"(https://doc.rust-lang.org/std/string/struct.String.html)" #: src/unsafe-rust/exercise.md msgid "UTF-8" @@ -12241,11 +12331,11 @@ msgid "" "(https://doc.rust-lang.org/std/ffi/struct.CString.html)" msgstr "" "[`CStr`](https://doc.rust-lang.org/std/ffi/struct.CStr.html) і [`CString`]" -"(https://doc.rust-lang.org/std/ffi /struct.CString.html)" +"(https://doc.rust-lang.org/std/ffi/struct.CString.html)" #: src/unsafe-rust/exercise.md msgid "NUL-terminated" -msgstr "NUL-припинено" +msgstr "NUL-термінований" #: src/unsafe-rust/exercise.md msgid "Communicating with C functions" @@ -12257,11 +12347,11 @@ msgid "" "[`OsString`](https://doc.rust-lang.org/std/ffi/struct.OsString.html)" msgstr "" "[`OsStr`](https://doc.rust-lang.org/std/ffi/struct.OsStr.html) і [`OsString`]" -"(https://doc.rust-lang.org/std/ffi /struct.OsString.html)" +"(https://doc.rust-lang.org/std/ffi/struct.OsString.html)" #: src/unsafe-rust/exercise.md msgid "OS-specific" -msgstr "специфічні для ОС" +msgstr "Специфічні для ОС" #: src/unsafe-rust/exercise.md msgid "Communicating with the OS" @@ -12287,15 +12377,16 @@ msgid "" "`*const i8` to `&CStr`: you need something which can find the trailing `\\0` " "character," msgstr "" +"`*const i8` до `&CStr`: вам потрібно щось, що може знайти кінцевий символ " +"`\\0`," #: src/unsafe-rust/exercise.md -#, fuzzy msgid "" "`&CStr` to `&[u8]`: a slice of bytes is the universal interface for \"some " "unknown data\"," msgstr "" -"`&CStr` до `&[u8]`: зріз байтів є універсальним інтерфейсом для «деяких " -"невідомих даних»," +"`&CStr` до `&[u8]`: зріз байт є універсальним інтерфейсом для \"деяких " +"невідомих даних\"," #: src/unsafe-rust/exercise.md msgid "" @@ -12303,8 +12394,8 @@ msgid "" "(https://doc.rust-lang.org/std/os/unix/ffi/trait.OsStrExt.html) to create it," msgstr "" "`&[u8]` до `&OsStr`: `&OsStr` є кроком до `OsString`, використовуйте " -"[`OsStrExt`](https://doc.rust-lang.org/std/os/unix/ffi/trait .OsStrExt." -"html), щоб створити його," +"[`OsStrExt`](https://doc.rust-lang.org/std/os/unix/ffi/trait.OsStrExt.html), " +"щоб створити його," #: src/unsafe-rust/exercise.md msgid "" @@ -12332,11 +12423,11 @@ msgstr "" #: src/unsafe-rust/exercise.md src/unsafe-rust/solution.md msgid "\"macos\"" -msgstr "" +msgstr "\"macos\"" #: src/unsafe-rust/exercise.md src/unsafe-rust/solution.md msgid "// Opaque type. See https://doc.rust-lang.org/nomicon/ffi.html.\n" -msgstr "" +msgstr "//Прозорий тип. Дивіться https://doc.rust-lang.org/nomicon/ffi.html.\n" #: src/unsafe-rust/exercise.md src/unsafe-rust/solution.md msgid "" @@ -12344,14 +12435,17 @@ msgid "" " // off_t are resolved according to the definitions in\n" " // /usr/include/x86_64-linux-gnu/{sys/types.h, bits/typesizes.h}.\n" msgstr "" +"// Розміщення відповідно до man-сторінки Linux для readdir(3), де ino_t та\n" +" // off_t розгорнуто відповідно до визначень у\n" +" // /usr/include/x86_64-linux-gnu/{sys/types.h, bits/typesizes.h}.\n" #: src/unsafe-rust/exercise.md src/unsafe-rust/solution.md msgid "// Layout according to the macOS man page for dir(5).\n" -msgstr "" +msgstr "// Розміщення відповідно до man-сторінки macOS для dir(5).\n" #: src/unsafe-rust/exercise.md src/unsafe-rust/solution.md msgid "\"x86_64\"" -msgstr "" +msgstr "\"x86_64\"" #: src/unsafe-rust/exercise.md src/unsafe-rust/solution.md msgid "" @@ -12363,105 +12457,119 @@ msgid "" " // to macOS (as opposed to iOS / wearOS / etc.) on Intel and " "PowerPC.\n" msgstr "" +"// Дивіться https://github.com/rust-lang/libc/issues/414 та розділ про\n" +" // _DARWIN_FEATURE_64_BIT_INODE у man-сторінці macOS про stat(2).\n" +" //\n" +" // \"Платформи, які існували до виходу цих оновлень\" відносяться\n" +" // до macOS (на відміну від iOS / wearOS / тощо) на Intel і " +"PowerPC.\n" #: src/unsafe-rust/exercise.md src/unsafe-rust/solution.md msgid "\"readdir$INODE64\"" -msgstr "" +msgstr "\"readdir$INODE64\"" #: src/unsafe-rust/exercise.md src/unsafe-rust/solution.md msgid "" "// Call opendir and return a Ok value if that worked,\n" " // otherwise return Err with a message.\n" msgstr "" +"// Викликати opendir і повернути значення Ok, якщо це спрацювало,\n" +" // інакше повернути Err з повідомленням.\n" #: src/unsafe-rust/exercise.md msgid "// Keep calling readdir until we get a NULL pointer back.\n" msgstr "" +"// Продовжуємо викликати readdir до тих пір, поки не отримаємо назад " +"вказівник NULL.\n" #: src/unsafe-rust/exercise.md src/unsafe-rust/solution.md msgid "// Call closedir as needed.\n" -msgstr "" +msgstr "// Викликати closedir за необхідністю.\n" #: src/unsafe-rust/exercise.md src/unsafe-rust/solution.md #: src/android/interoperability/with-c/rust.md msgid "\".\"" -msgstr "" +msgstr "\".\"" #: src/unsafe-rust/exercise.md src/unsafe-rust/solution.md msgid "\"files: {:#?}\"" -msgstr "" +msgstr "\"файли: {:#?}\"" #: src/unsafe-rust/solution.md msgid "\"Invalid path: {err}\"" -msgstr "" +msgstr "\"Неправильний путь: {err}\"" #: src/unsafe-rust/solution.md msgid "// SAFETY: path.as_ptr() cannot be NULL.\n" -msgstr "" +msgstr "// БЕЗПЕКА: path.as_ptr() не може бути NULL.\n" #: src/unsafe-rust/solution.md msgid "\"Could not open {:?}\"" -msgstr "" +msgstr "\"Не вдалося відкрити {:?}\"" #: src/unsafe-rust/solution.md msgid "" "// Keep calling readdir until we get a NULL pointer back.\n" " // SAFETY: self.dir is never NULL.\n" msgstr "" +"// Продовжуємо викликати readdir, доки не отримаємо назад вказівник NULL.\n" +" // БЕЗПЕКА: self.dir ніколи не є NULL.\n" #: src/unsafe-rust/solution.md msgid "// We have reached the end of the directory.\n" -msgstr "" +msgstr "// Ми досягли кінця директорії.\n" #: src/unsafe-rust/solution.md msgid "" "// SAFETY: dirent is not NULL and dirent.d_name is NUL\n" " // terminated.\n" msgstr "" +"// БЕЗПЕКА: dirent не є NULL і dirent.d_name є NULL\n" +" // завершено.\n" #: src/unsafe-rust/solution.md msgid "// SAFETY: self.dir is not NULL.\n" -msgstr "" +msgstr "БЕЗПЕКА: self.dir не є NULL.\n" #: src/unsafe-rust/solution.md msgid "\"Could not close {:?}\"" -msgstr "" +msgstr "\"Не вдалося закрити {:?}\"" #: src/unsafe-rust/solution.md msgid "\"no-such-directory\"" -msgstr "" +msgstr "\"no-such-directory\"" #: src/unsafe-rust/solution.md msgid "\"Non UTF-8 character in path\"" -msgstr "" +msgstr "\"Не UTF-8 символ у путі\"" #: src/unsafe-rust/solution.md msgid "\"..\"" -msgstr "" +msgstr "\"..\"" #: src/unsafe-rust/solution.md msgid "\"foo.txt\"" -msgstr "" +msgstr "\"foo.txt\"" #: src/unsafe-rust/solution.md msgid "\"The Foo Diaries\\n\"" -msgstr "" +msgstr "\"The Foo Diaries\\n\"" #: src/unsafe-rust/solution.md msgid "\"bar.png\"" -msgstr "" +msgstr "\"bar.png\"" #: src/unsafe-rust/solution.md msgid "\"\\n\"" -msgstr "" +msgstr "\"\\n\"" #: src/unsafe-rust/solution.md msgid "\"crab.rs\"" -msgstr "" +msgstr "\"crab.rs\"" #: src/unsafe-rust/solution.md msgid "\"//! Crab\\n\"" -msgstr "" +msgstr "\"//! Crab\\n\"" #: src/android.md msgid "Welcome to Rust in Android"